From c65e3b8eb10912e8b461826f6854ca0435022018 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 17:20:02 -0300 Subject: [PATCH 01/24] docs: voip accessibility design spec and a11y conventions Adds design spec for VoIP screen accessibility (feat.voip-lib-new), documents a11y patterns in CLAUDE.md, and extends UBIQUITOUS_LANGUAGE.md with accessibility terminology. --- CLAUDE.md | 47 +++++ UBIQUITOUS_LANGUAGE.md | 173 ++++++++++++++++++ .../2026-04-06-voip-accessibility-design.md | 126 +++++++++++++ 3 files changed, 346 insertions(+) create mode 100644 CLAUDE.md create mode 100644 UBIQUITOUS_LANGUAGE.md create mode 100644 docs/superpowers/specs/2026-04-06-voip-accessibility-design.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000000..5f53dc268b4 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,47 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Commands + +- **Install:** `yarn` (postinstall runs patch-package), `yarn pod-install` for iOS +- **Run:** `yarn android`, `yarn ios` +- **Lint:** `yarn lint` — runs ESLint + `tsc` together +- **Test:** `yarn test` — single test: `yarn test --testPathPattern=` +- **Format:** `yarn prettier-lint` — always run before considering code done + +## Conventions + +- **Branches:** dot-separated — `feat.call-waiting`, `fix.crash-on-login`, `chore.bump-deps` +- **Commits:** conventional with scope — `feat(voip): add call waiting` +- **PRs:** target `develop` +- **TS imports:** use `import type { X }` or `import { type X }` +- **Imports:** `tsconfig.baseUrl` is `app/` — e.g., `import X from 'lib/foo'` resolves to `app/lib/foo` + +## Architecture + +- Two app targets: **RocketChatRN** (experimental) and **Rocket.Chat** (official) +- Redux + Redux-Saga for state, WatermelonDB for local database +- React Compiler in annotation mode — opt-in per component +- E2E tests: `.mock.ts` files auto-prioritized by Metro (`RUNNING_E2E_TESTS=true`) + +## Accessibility (a11y) + +### Screen reader +- All interactive elements need `accessibilityLabel` + `accessibilityRole` +- Use `react-native-a11y-order` (`A11y.Order` / `A11y.Index`) when reading order differs from visual order +- Use `AccessibilityInfo.setAccessibilityFocus()` to focus important elements on mount (e.g., incoming call) +- Use `AccessibilityInfo.announceForAccessibility()` for dynamic state changes (errors, call cancelled) +- Use `useIsScreenReaderEnabled` (`app/lib/hooks/useIsScreenReaderEnabled.ts`) to adapt behavior when a screen reader is active — e.g., disabling tap-to-hide gestures +- `accessibilityElementsHidden={true}` on containers that are visually hidden but still mounted + +### Font scaling +- Text scales automatically — never set `allowFontScaling={false}` unless layout is provably broken +- `useResponsiveLayout()` provides `fontScale`, `fontScaleLimited` (capped at `FONT_SCALE_LIMIT = 1.3`), `width`, `height` +- Apply `fontScaleLimited` only where large font scales break fixed-size containers — not by default +- Fixed-size touch targets (icon buttons, avatars) do not need to scale + +### Landscape / responsive layout +- Always use `useResponsiveLayout()` (not `useWindowDimensions()` directly) to get `width` / `height` +- Derive `isLandscape = width > height` from those values +- `useResponsiveLayout` is the single source of truth for dimensions — avoids conflicts with tablet (Master Detail) layout diff --git a/UBIQUITOUS_LANGUAGE.md b/UBIQUITOUS_LANGUAGE.md new file mode 100644 index 00000000000..4d2a7c70d12 --- /dev/null +++ b/UBIQUITOUS_LANGUAGE.md @@ -0,0 +1,173 @@ +# Ubiquitous Language + +## Rooms & Conversations + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Room** | A conversation space identified by `rid`, with a type (`t`) determining its behavior | Chat, conversation, chat room | +| **Channel** | A public room (`t='c'`) discoverable by all server users | Public group, open room | +| **Group** | A private room (`t='p'`) accessible only to invited members | Private channel, private room | +| **Direct** | A one-on-one or multi-party direct message room (`t='d'`) | DM, IM, instant message, private message | +| **Discussion** | A child room linked to a parent via `prid`, created from a message | Sub-room, nested channel | +| **Subscription** | A user's participation record in a room — tracks unread counts, favorites, drafts, and per-user state | Membership, room membership, joined room | +| **Broadcast** | A room mode where only admins can post; others can only react or reply in threads | Announcement channel, read-only channel | + +## Messages + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Message** | A content unit within a room, identified by `_id`, belonging to a room via `rid` | Chat message, text | +| **System Message** | A message with a type code (`t`) representing an automated event (user join, topic change, etc.) | Event, notification message, auto-message | +| **Thread** | A reply chain spawned from a parent message, linked via `tmid` (thread message ID) | Reply chain, conversation thread | +| **Thread Message** | An individual message within a thread, tracked separately with `subscription_id` | Reply, threaded reply | +| **Attachment** | Media or rich content embedded in a message — images, videos, audio, files, or nested cards | File, media, embed | +| **Reaction** | An emoji response on a message, storing the emoji and list of usernames who reacted | Emoji reaction, like | +| **Mention** | A reference to a user or channel within message text, parsed into structured data | Tag, @mention, ping | +| **Block** | A UIKit interactive element rendered within a message (buttons, selects, overflow menus) | UI block, interactive element, action block | +| **Markdown** (`md`) | The parsed markdown AST of a message, stored alongside raw `msg` text | Parsed message, rich text | + +## Users & Identity + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **User** | An authenticated identity on a Rocket.Chat server, with `username`, `name`, and `status` | Account, member, person | +| **Logged User** | The currently authenticated user in the active session, carrying `token` and preferences | Current user, session user, me | +| **Status** | A user's availability state: `online`, `away`, `busy`, `offline`, or `disabled` | Presence, availability | +| **Role** | A named capability set assigned to a user at global (`Users`) or room (`Subscriptions`) scope | Permission group, access level | +| **Permission** | A specific action right (e.g., `create-c`) mapped to one or more roles | Privilege, access right, capability | + +## Teams + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Team** | A named group of rooms and members, typed as `PUBLIC` (0) or `PRIVATE` (1) | Team channel, workspace | +| **Team Member** | A user's membership in a team, with team-specific roles | Team participant, team user | +| **Team Room** | A room belonging to a team, linked via `teamId`; the main room has `team_main=true` | Team channel | + +## Omnichannel + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Omnichannel Room** | A room (`t='l'`) representing a customer support conversation from an external source | Livechat room, livechat, support chat | +| **Visitor** | An external customer initiating an omnichannel conversation, identified by `token` | Customer, client, livechat user, guest | +| **Agent** | A server user handling omnichannel conversations, with `statusLivechat` (available/unavailable) | Support agent, operator, representative | +| **Department** | An organizational unit grouping agents for omnichannel routing | Support team, queue, livechat department | +| **Inquiry** | A queued omnichannel conversation awaiting agent assignment | Queue item, pending chat, waiting conversation | +| **Canned Response** | A pre-written reply template with a `shortcut` trigger, scoped to user/department/global | Quick reply, saved response, macro | +| **Tag** | A label applied to omnichannel conversations for categorization and reporting | Livechat tag, label, category | +| **Source** | The origin of an omnichannel conversation: `widget`, `email`, `sms`, `app`, `api`, or `other` | Channel, origin, entry point | + +## End-to-End Encryption (E2E) + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **E2E Encryption** | Client-side encryption of message content so only room participants can decrypt | Encryption, end-to-end, E2EE | +| **E2E Key** (`E2EKey`) | The per-subscription group encryption key used to encrypt/decrypt room messages | Encryption key, room key, group key | +| **E2E Key ID** (`e2eKeyId`) | Identifier for the current encryption key version on a room | Key version, key identifier | +| **E2E Status** | Message encryption state: `pending` (not yet encrypted/decrypted) or `done` | Encryption status | +| **Encrypted Content** | The ciphertext payload stored in a message's `content` field, versioned as `rc.v1.aes-sha2` or `rc.v2.aes-sha2` | Cipher, encrypted message, encrypted payload | +| **Suggested Key** (`E2ESuggestedKey`) | A group key proposed to a user who wasn't present when the original key was distributed | Pending key, offered key | + +## Video Conferencing + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Video Conference** | A real-time audio/video call session within a room, with status lifecycle: CALLING, STARTED, EXPIRED, ENDED, DECLINED | Video call, meeting, conference call | +| **Direct Call** | A 1:1 video conference between two users | Personal call, private call | +| **Group Call** | A multi-participant video conference in a room | Conference, group video | +| **Ringer** | The audio/UI component that plays when an incoming call is received | Call alert, ring, incoming call notification | + +## Server & Connection + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Server** | A Rocket.Chat instance the app connects to, identified by URL | Workspace, instance, host | +| **Server History** | A record of previously connected server URLs with associated usernames | Login history, saved servers | +| **Meteor Connect** | The DDP (Distributed Data Protocol) real-time connection to the server | WebSocket connection, real-time connection, DDP | +| **Enterprise Module** | A feature flag indicating availability of a paid/enterprise capability | License feature, premium module | +| **Supported Versions** | Server-declared compatible app version ranges, triggering warnings when outdated | Version compatibility, version check | + +## File & Media + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Upload** | A file being sent to a room, tracked with `progress` (0-100) and `error` state | File upload, attachment upload | +| **Custom Emoji** | A server-defined emoji with `name` and file `extension`, distinct from Unicode emoji | Server emoji, uploaded emoji | +| **Frequently Used Emoji** | A per-user emoji usage counter for emoji picker ordering | Recent emoji, emoji history | +| **URL Preview** | Rich metadata (OG image, title, description) extracted from links shared in messages | Link preview, unfurl, embed | + +## Navigation & Deep Linking + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Deep Link** | A URL that routes the app to a specific room, message, or action | Universal link, app link | +| **Spotlight** | The quick-search feature returning matched users and rooms | Quick search, global search, jump-to | +| **Directory** | The browsable listing of all public channels and users on a server | Channel list, user directory | + +## Authentication + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Credentials** | Login payload supporting multiple methods: password, LDAP, SAML, CAS, OAuth, resume token | Login data, auth payload | +| **Two-Factor Authentication** (2FA) | Secondary verification via TOTP code or email code during login | MFA, second factor, verification code | +| **Resume Token** | A stored token allowing session restoration without re-entering credentials | Session token, refresh token, auth token | +| **Login Services** | External OAuth/SSO providers configured on the server (Google, GitHub, SAML, CAS, etc.) | OAuth providers, SSO, external auth | + +## App State & UI + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Master Detail** | The split-view layout on tablets showing room list and room content side-by-side | Split view, tablet layout, two-pane | +| **Sort Preferences** | User settings for room list ordering: `sortBy`, `groupByType`, `showFavorites`, `showUnread`, `displayMode` | List preferences, view settings | +| **Share Extension** | The OS-level share sheet integration that sends content from other apps into Rocket.Chat | Share sheet, sharing | +| **In-App Notification** | A banner shown inside the app when a push notification arrives while the app is foregrounded | Toast, notification banner | +| **Slash Command** | A `/`-prefixed command that triggers server-side or client-side actions | Command, bot command | + +## Accessibility (a11y) + +| Term | Definition | Aliases to avoid | +|------|-----------|-----------------| +| **Accessibility Label** (`accessibilityLabel`) | A human-readable string announced by screen readers to describe an element | aria-label, alt text | +| **Accessibility Role** (`accessibilityRole`) | Semantic role of a component (`button`, `header`, `switch`, etc.) that tells screen readers how to treat the element | aria-role | +| **Accessibility Elements Hidden** (`accessibilityElementsHidden`) | Hides a subtree from the screen reader while keeping it visually mounted — used on containers that animate in/out | aria-hidden | +| **A11y Order** | Reading order control via `react-native-a11y-order` (`A11y.Order` / `A11y.Index`) — applied when visual layout order differs from logical reading order | Tab order, focus order | +| **Accessibility Focus** | Programmatic focus placement via `AccessibilityInfo.setAccessibilityFocus()` — used to guide screen reader to the most important element on screen (e.g., incoming call) | Focus management | +| **Screen Reader Announcement** | A message pushed to the screen reader via `AccessibilityInfo.announceForAccessibility()` without changing focus — used for dynamic state changes | Live region, aria-live | +| **Font Scale** (`fontScale`) | OS-level text size multiplier (1.0 = default). Exposed by `useResponsiveLayout()`. React Native `Text` respects it automatically | Text size, dynamic type | +| **Font Scale Limited** (`fontScaleLimited`) | `fontScale` capped at `FONT_SCALE_LIMIT = 1.3` via `useResponsiveLayout()` — applied only to fixed-size containers where uncapped scaling breaks layout | Capped font scale | +| **Screen Reader Enabled** | Runtime boolean from `useIsScreenReaderEnabled()` indicating VoiceOver (iOS) or TalkBack (Android) is active — used to adapt gesture-based interactions | VoiceOver active, TalkBack active | + +## Relationships + +- A **User** has many **Subscriptions**, each linking them to one **Room** +- A **Room** contains many **Messages**; a **Message** belongs to one **Room** (via `rid`) +- A **Message** can spawn a **Thread** (via `tmid`); a **Thread** contains **Thread Messages** +- A **Message** can create a **Discussion**, which is itself a child **Room** (linked via `prid`) +- A **Room** can belong to a **Team** (via `teamId`); a **Team** has one main **Room** (`team_main=true`) +- An **Omnichannel Room** is served by an **Agent**, belongs to a **Department**, and is initiated by a **Visitor** +- An **Inquiry** becomes an **Omnichannel Room** once an **Agent** accepts it +- A **Permission** maps to one or more **Roles**; a **Role** is scoped to either `Users` (global) or `Subscriptions` (per-room) +- An **E2E Key** is stored per **Subscription**, encrypting all **Messages** in that **Room** +- A **Video Conference** belongs to a **Room** and tracks participating **Users** +- A **Custom Emoji** is server-wide; a **Frequently Used Emoji** is per-user + +## Example dialogue + +> **Dev:** "When a user opens the app, how do we know which rooms to show?" +> **Domain expert:** "We load all **Subscriptions** for the **Logged User** from WatermelonDB. Each **Subscription** points to a **Room** via `rid`. The list is ordered by **Sort Preferences**." +> **Dev:** "What about **Omnichannel Rooms** — do agents see those the same way?" +> **Domain expert:** "No. Omnichannel conversations first appear as **Inquiries** in a queue. The **Agent** must accept the **Inquiry**, which creates a **Subscription** and makes the **Omnichannel Room** visible in their list." +> **Dev:** "And if a customer sends a message before an agent accepts?" +> **Domain expert:** "The **Visitor**'s messages are stored in the **Omnichannel Room**, but no **Agent** has a **Subscription** to it yet. The **Inquiry** tracks queue position. Once accepted, the **Agent** gets the full **Message** history." +> **Dev:** "What about encrypted rooms — does the **Subscription** carry the key?" +> **Domain expert:** "Yes. The **E2E Key** is stored on the **Subscription**. When a new user joins, we use **Suggested Key** to propose the group key. Until they accept, their **E2E Status** on messages stays `pending`." + +## Flagged ambiguities + +- **`rid`** vs **`_id`** vs **`id`**: All three appear as room identifiers. `rid` is the canonical room reference on Subscriptions and Messages. `_id` is the document ID (often equals `rid` on rooms). `id` appears on WatermelonDB models as the local primary key. Use **`rid`** when referring to a room relationship, **`_id`** for the room document itself. +- **`t` (type)** is overloaded across domains: on Rooms/Subscriptions it's the room type (`c`/`d`/`p`/`l`), on Messages it's the system message type (`uj`/`ul`/`au`/etc.). Always qualify: "room type" or "message type." +- **"Livechat"** vs **"Omnichannel"**: The codebase uses both — `livechat` in API endpoints and database fields, `omnichannel` in types, UI, and enterprise modules. **Omnichannel** is the canonical term; **Livechat** is a legacy alias persisting in API/DB layers. +- **`fname`** vs **`name`**: Rooms have both — `name` is the slug/identifier, `fname` is the display-friendly formatted name. Use **`fname`** for display, **`name`** for lookups. +- **"Group"** vs **"Private Channel"**: The codebase maps `t='p'` to `ERoomType.p = 'group'`. The canonical term is **Group**; avoid "private channel." +- **`tmsg`** is used for both "translated message" and "thread message text" depending on context. On IMessage it holds the thread's root message text for display; on translations it holds the translated content. +- **"User" model** exists in both the app database (room participants) and servers database (logged-in user profile). The app-DB User is a lightweight participant record; the servers-DB User carries authentication tokens and preferences. diff --git a/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md b/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md new file mode 100644 index 00000000000..6ac75b0b505 --- /dev/null +++ b/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md @@ -0,0 +1,126 @@ +# VoIP Accessibility Design + +**Date:** 2026-04-06 +**Branch:** feat.voip-lib-new +**Scope:** Screen reader (VoiceOver/TalkBack), landscape layout, and font scaling for new VoIP screens. + +--- + +## Problem + +The new VoIP screens introduced in `feat.voip-lib-new` are missing accessibility support. Key gaps: + +- `CallView` has no landscape layout — controls overlap on rotation +- `CallerInfo` tap-to-hide controls is unusable by screen reader users +- `DialpadButton` and `PeerItem` are interactive with no accessible labels or roles +- `CallButtons` container remains focusable when visually hidden + +Already well-covered: `IncomingCallNotification`, `CallHeader`, `CallActionButton`, `EndCall`, `Collapse`. + +--- + +## Approach + +Prop-by-prop gap fill following existing codebase patterns. One new hook (`useIsScreenReaderEnabled`). No new abstractions beyond that. + +--- + +## Architecture + +### New hook — `useIsScreenReaderEnabled` + +**File:** `app/lib/hooks/useIsScreenReaderEnabled.ts` + +Listens to `AccessibilityInfo.isScreenReaderEnabled()` and the `screenReaderChanged` event. Returns a `boolean` that updates reactively. + +```ts +export const useIsScreenReaderEnabled = (): boolean => { + const [enabled, setEnabled] = useState(false); + useEffect(() => { + AccessibilityInfo.isScreenReaderEnabled().then(setEnabled); + const sub = AccessibilityInfo.addEventListener('screenReaderChanged', setEnabled); + return () => sub.remove(); + }, []); + return enabled; +}; +``` + +Used by `CallerInfo` to disable tap-to-hide when a screen reader is active. + +--- + +## Components + +### CallView — landscape layout + +**File:** `app/views/CallView/index.tsx` + `styles.ts` + +- Use `useResponsiveLayout()` (already in context) to derive `isLandscape = width > height`. Do **not** call `useWindowDimensions()` directly — `useResponsiveLayout` is the single source of truth for dimensions and avoids conflicts with tablet support. +- In landscape: `contentContainer` switches to `flexDirection: 'row'`. `CallerInfo` takes ~40% width (left), `CallButtons` takes ~60% width (right). +- `isLandscape` is passed as a prop to `CallerInfo` and `CallButtons`. +- Avatar shrinks from 120 → 80 in landscape to prevent overlap. +- Buttons grid retains 3×2 layout with reduced horizontal padding. + +### CallerInfo — screen reader fix + label + +**File:** `app/views/CallView/components/CallerInfo.tsx` + +- Import `useIsScreenReaderEnabled`. +- When screen reader is enabled: `onPress` is `undefined` (controls stay visible, toggling is disabled). +- `useControlsVisible` is modified to always return `true` when screen reader is enabled, so both `CallerInfo` and `CallButtons` derive the correct value automatically. +- Pressable gains `accessibilityLabel={I18n.t('Toggle_call_controls')}` and `accessibilityRole='button'`. + +### CallButtons — hide from screen reader when not visible + +**File:** `app/views/CallView/components/CallButtons.tsx` + +- `Animated.View` gains `accessibilityElementsHidden={!controlsVisible}`. +- Ensures screen reader skips hidden controls (belt-and-suspenders with the `useControlsVisible` fix above). + +### DialpadButton — label + role + +**File:** `app/views/CallView/components/Dialpad/DialpadButton.tsx` + +```tsx +accessibilityLabel={letters ? `${digit} ${letters}` : digit} +accessibilityRole='button' +``` + +- `fontScaleLimited` from `useResponsiveLayout` applied to digit font size if testing reveals overflow at large scales. + +### PeerItem — label + role + +**File:** `app/containers/NewMediaCall/PeerItem.tsx` + +```tsx +accessibilityLabel={item.label} +accessibilityRole='button' +``` + +`PeerItemInner` requires no changes — non-interactive, covered by parent label. + +--- + +## Font scaling + +All `Text` components in VoIP screens scale automatically (RN default, `allowFontScaling` defaults to `true`). No explicit opt-out. + +Fixed-size containers (`actionButton` 64×64, avatar 120px) are touch targets and do not need to scale. + +Apply `fontScaleLimited` only where testing reveals actual layout breakage, following the existing `FONT_SCALE_LIMIT = 1.3` pattern in `useResponsiveLayout`. + +--- + +## i18n keys needed + +| Key | Value (EN) | +|-----|-----------| +| `Toggle_call_controls` | `Toggle call controls` | + +--- + +## What is NOT in scope + +- `IncomingCallNotification`, `CallHeader`, `CallActionButton`, `EndCall`, `Collapse` — already covered +- A11y ordering (`A11y.Order`) for CallView — buttons already have individual labels; ordering is not needed +- `announceForAccessibility` on call state changes — out of scope for this task From 2c88a4ea0a000cefc9e83a4ddc1de97b544a128b Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 17:28:45 -0300 Subject: [PATCH 02/24] docs: voip accessibility implementation plan --- .../plans/2026-04-06-voip-accessibility.md | 790 ++++++++++++++++++ 1 file changed, 790 insertions(+) create mode 100644 docs/superpowers/plans/2026-04-06-voip-accessibility.md diff --git a/docs/superpowers/plans/2026-04-06-voip-accessibility.md b/docs/superpowers/plans/2026-04-06-voip-accessibility.md new file mode 100644 index 00000000000..2d02da05bfe --- /dev/null +++ b/docs/superpowers/plans/2026-04-06-voip-accessibility.md @@ -0,0 +1,790 @@ +# VoIP Accessibility Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Add screen reader support, landscape layout, and font scaling to new VoIP screens on `feat.voip-lib-new`. + +**Architecture:** New `useIsScreenReaderEnabled` hook wires into `useControlsVisible` so both `CallerInfo` and `CallButtons` automatically keep controls visible when a screen reader is active. Landscape layout is driven by `useResponsiveLayout()` (the existing shared context) — each component reads `width`/`height` from it and derives `isLandscape` independently, avoiding prop drilling and conflicts with tablet layout. + +**Tech Stack:** React Native, Zustand (`useCallStore`), `react-native-a11y-order`, `@testing-library/react-native`, `useResponsiveLayout` context. + +--- + +## File Map + +| Action | File | Responsibility | +|--------|------|----------------| +| Create | `app/lib/hooks/useIsScreenReaderEnabled.ts` | Reactive boolean: VoiceOver/TalkBack active | +| Create | `app/lib/hooks/useIsScreenReaderEnabled.test.ts` | Tests for the hook | +| Modify | `app/lib/services/voip/useCallStore.ts:301` | `useControlsVisible` — always true when screen reader on | +| Modify | `app/i18n/locales/en.json:911` | Add `Toggle_call_controls` key | +| Modify | `app/views/CallView/components/CallerInfo.tsx` | Screen reader bypass + a11y label + landscape avatar | +| Modify | `app/views/CallView/components/CallButtons.tsx` | `accessibilityElementsHidden` + landscape styles | +| Modify | `app/views/CallView/index.tsx` | Landscape container flex direction | +| Modify | `app/views/CallView/styles.ts` | Landscape style variants | +| Modify | `app/views/CallView/index.test.tsx` | Screen reader + landscape tests | +| Modify | `app/views/CallView/CallView.stories.tsx` | Landscape story | +| Modify | `app/views/CallView/components/Dialpad/DialpadButton.tsx` | a11y label + role | +| Modify | `app/containers/NewMediaCall/PeerItem.tsx` | a11y label + role | + +--- + +## Task 1: `useIsScreenReaderEnabled` hook + +**Files:** +- Create: `app/lib/hooks/useIsScreenReaderEnabled.ts` +- Create: `app/lib/hooks/useIsScreenReaderEnabled.test.ts` + +- [ ] **Step 1: Write the failing tests** + +`app/lib/hooks/useIsScreenReaderEnabled.test.ts`: +```ts +import { renderHook, act } from '@testing-library/react-native'; +import { AccessibilityInfo } from 'react-native'; +import { useIsScreenReaderEnabled } from './useIsScreenReaderEnabled'; + +describe('useIsScreenReaderEnabled', () => { + beforeEach(() => { + jest.spyOn(AccessibilityInfo, 'isScreenReaderEnabled').mockResolvedValue(false); + jest.spyOn(AccessibilityInfo, 'addEventListener').mockReturnValue({ remove: jest.fn() } as any); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('returns false initially', () => { + const { result } = renderHook(() => useIsScreenReaderEnabled()); + expect(result.current).toBe(false); + }); + + it('returns true after isScreenReaderEnabled resolves true', async () => { + jest.spyOn(AccessibilityInfo, 'isScreenReaderEnabled').mockResolvedValue(true); + const { result } = renderHook(() => useIsScreenReaderEnabled()); + await act(async () => {}); + expect(result.current).toBe(true); + }); + + it('updates when screenReaderChanged event fires', () => { + let capturedListener: (enabled: boolean) => void = () => {}; + jest.spyOn(AccessibilityInfo, 'addEventListener').mockImplementation((_event, cb) => { + capturedListener = cb as (enabled: boolean) => void; + return { remove: jest.fn() } as any; + }); + + const { result } = renderHook(() => useIsScreenReaderEnabled()); + + act(() => { + capturedListener(true); + }); + + expect(result.current).toBe(true); + }); + + it('removes the event listener on unmount', () => { + const removeMock = jest.fn(); + jest.spyOn(AccessibilityInfo, 'addEventListener').mockReturnValue({ remove: removeMock } as any); + + const { unmount } = renderHook(() => useIsScreenReaderEnabled()); + unmount(); + + expect(removeMock).toHaveBeenCalled(); + }); +}); +``` + +- [ ] **Step 2: Run tests to confirm they fail** + +```bash +yarn test --testPathPattern=useIsScreenReaderEnabled +``` + +Expected: FAIL — `Cannot find module './useIsScreenReaderEnabled'` + +- [ ] **Step 3: Implement the hook** + +`app/lib/hooks/useIsScreenReaderEnabled.ts`: +```ts +import { useEffect, useState } from 'react'; +import { AccessibilityInfo } from 'react-native'; + +export const useIsScreenReaderEnabled = (): boolean => { + const [enabled, setEnabled] = useState(false); + + useEffect(() => { + AccessibilityInfo.isScreenReaderEnabled().then(setEnabled); + const subscription = AccessibilityInfo.addEventListener('screenReaderChanged', setEnabled); + return () => subscription.remove(); + }, []); + + return enabled; +}; +``` + +- [ ] **Step 4: Run tests to confirm they pass** + +```bash +yarn test --testPathPattern=useIsScreenReaderEnabled +``` + +Expected: PASS (4 tests) + +- [ ] **Step 5: Commit** + +```bash +git add app/lib/hooks/useIsScreenReaderEnabled.ts app/lib/hooks/useIsScreenReaderEnabled.test.ts +git commit -m "feat(a11y): add useIsScreenReaderEnabled hook" +``` + +--- + +## Task 2: i18n key + +**Files:** +- Modify: `app/i18n/locales/en.json:911` + +- [ ] **Step 1: Add the key** + +In `app/i18n/locales/en.json`, after line 911 (`"To_download": "To download",`), insert: + +```json + "Toggle_call_controls": "Toggle call controls", +``` + +- [ ] **Step 2: Commit** + +```bash +git add app/i18n/locales/en.json +git commit -m "feat(a11y): add Toggle_call_controls i18n key" +``` + +--- + +## Task 3: `useControlsVisible` — always true when screen reader is active + +**Files:** +- Modify: `app/lib/services/voip/useCallStore.ts:301` + +- [ ] **Step 1: Update `useControlsVisible`** + +In `app/lib/services/voip/useCallStore.ts`, replace line 301: + +```ts +export const useControlsVisible = () => useCallStore(state => state.controlsVisible); +``` + +with: + +```ts +import { useIsScreenReaderEnabled } from '../../hooks/useIsScreenReaderEnabled'; + +export const useControlsVisible = () => { + const controlsVisible = useCallStore(state => state.controlsVisible); + const isScreenReaderEnabled = useIsScreenReaderEnabled(); + return controlsVisible || isScreenReaderEnabled; +}; +``` + +Add the import at the top of the file with the other imports. + +- [ ] **Step 2: Run existing CallView tests to confirm nothing breaks** + +```bash +yarn test --testPathPattern=CallView/index +``` + +Expected: PASS (all existing tests still pass) + +- [ ] **Step 3: Commit** + +```bash +git add app/lib/services/voip/useCallStore.ts +git commit -m "feat(a11y): keep call controls visible when screen reader is active" +``` + +--- + +## Task 4: `CallerInfo` — screen reader fix + accessibility label + +**Files:** +- Modify: `app/views/CallView/components/CallerInfo.tsx` +- Modify: `app/views/CallView/index.test.tsx` + +- [ ] **Step 1: Write the failing test** + +Add `AccessibilityInfo` to the existing React Native import at the top of `app/views/CallView/index.test.tsx`: + +```ts +import { act } from '@testing-library/react-native'; +import { AccessibilityInfo } from 'react-native'; +``` + +Then add this test inside `describe('CallView', ...)`: + +```ts +it('should not call toggleControlsVisible when screen reader is enabled', async () => { + jest.spyOn(AccessibilityInfo, 'isScreenReaderEnabled').mockResolvedValue(false); + let capturedListener: (enabled: boolean) => void = () => {}; + jest.spyOn(AccessibilityInfo, 'addEventListener').mockImplementation((_event: string, cb: any) => { + capturedListener = cb; + return { remove: jest.fn() } as any; + }); + + setStoreState({ callState: 'active' }); + const toggleControlsVisible = jest.fn(); + useCallStore.setState({ toggleControlsVisible }); + + const { getByTestId } = render( + + + + ); + + await act(async () => { + capturedListener(true); + }); + + fireEvent.press(getByTestId('caller-info-toggle')); + expect(toggleControlsVisible).not.toHaveBeenCalled(); +}); +``` + +- [ ] **Step 2: Run test to confirm it fails** + +```bash +yarn test --testPathPattern=CallView/index +``` + +Expected: FAIL — `toggleControlsVisible` is called even with screen reader on + +- [ ] **Step 3: Update `CallerInfo.tsx`** + +```tsx +import React from 'react'; +import { Pressable, Text, View } from 'react-native'; +import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated'; + +import AvatarContainer from '../../../containers/Avatar'; +import I18n from '../../../i18n'; +import { useCallContact, useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; +import { useIsScreenReaderEnabled } from '../../../lib/hooks/useIsScreenReaderEnabled'; +import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; +import { useTheme } from '../../../theme'; + +const CallerInfo = (): React.ReactElement => { + const { colors } = useTheme(); + const contact = useCallContact(); + const toggleControlsVisible = useCallStore(state => state.toggleControlsVisible); + const controlsVisible = useControlsVisible(); + const isScreenReaderEnabled = useIsScreenReaderEnabled(); + + const callerRowStyle = useAnimatedStyle(() => ({ + opacity: withTiming(controlsVisible ? 1 : 0, { duration: CONTROLS_ANIMATION_DURATION }), + transform: [{ translateY: withTiming(controlsVisible ? 0 : 10, { duration: CONTROLS_ANIMATION_DURATION }) }] + })); + + const name = contact.displayName || contact.username || I18n.t('Unknown'); + const avatarText = contact.username || name; + + return ( + + + + + + + {name} + + + + ); +}; + +export default CallerInfo; +``` + +- [ ] **Step 4: Run tests to confirm they pass** + +```bash +yarn test --testPathPattern=CallView/index +``` + +Expected: PASS + +- [ ] **Step 5: Commit** + +```bash +git add app/views/CallView/components/CallerInfo.tsx app/views/CallView/index.test.tsx +git commit -m "feat(a11y): disable tap-to-hide controls when screen reader is active" +``` + +--- + +## Task 5: `CallButtons` — hide from screen reader when visually hidden + +**Files:** +- Modify: `app/views/CallView/components/CallButtons.tsx` + +- [ ] **Step 1: Add `accessibilityElementsHidden` to the animated container** + +In `app/views/CallView/components/CallButtons.tsx`, update the `Animated.View` opening tag: + +```tsx + +``` + +- [ ] **Step 2: Run tests** + +```bash +yarn test --testPathPattern=CallView/index +``` + +Expected: PASS + +- [ ] **Step 3: Commit** + +```bash +git add app/views/CallView/components/CallButtons.tsx +git commit -m "feat(a11y): hide call buttons from screen reader when controls are not visible" +``` + +--- + +## Task 6: `DialpadButton` — accessibility label and role + +**Files:** +- Modify: `app/views/CallView/components/Dialpad/DialpadButton.tsx` + +- [ ] **Step 1: Add a11y props to the Pressable** + +In `app/views/CallView/components/Dialpad/DialpadButton.tsx`, update the `Pressable`: + +```tsx + [ + styles.button, + { backgroundColor: pressed ? colors.buttonBackgroundSecondaryPress : colors.buttonBackgroundSecondaryDefault } + ]}> +``` + +- [ ] **Step 2: Run lint** + +```bash +yarn lint +``` + +Expected: no new errors + +- [ ] **Step 3: Commit** + +```bash +git add app/views/CallView/components/Dialpad/DialpadButton.tsx +git commit -m "feat(a11y): add accessibility label and role to DialpadButton" +``` + +--- + +## Task 7: `PeerItem` — accessibility label and role + +**Files:** +- Modify: `app/containers/NewMediaCall/PeerItem.tsx` + +- [ ] **Step 1: Add a11y props to the Pressable** + +In `app/containers/NewMediaCall/PeerItem.tsx`, update the `Pressable`: + +```tsx + [ + styles.container, + { backgroundColor: pressed && isIOS ? colors.surfaceSelected : colors.surfaceLight } + ]} + onPress={() => onSelectOption(item)} + accessibilityLabel={item.label} + accessibilityRole='button' + testID={`new-media-call-option-${item.value}`} + android_ripple={{ color: colors.surfaceSelected }}> +``` + +- [ ] **Step 2: Run lint** + +```bash +yarn lint +``` + +Expected: no new errors + +- [ ] **Step 3: Commit** + +```bash +git add app/containers/NewMediaCall/PeerItem.tsx +git commit -m "feat(a11y): add accessibility label and role to PeerItem" +``` + +--- + +## Task 8: `CallView` landscape layout + +**Files:** +- Modify: `app/views/CallView/styles.ts` +- Modify: `app/views/CallView/index.tsx` +- Modify: `app/views/CallView/components/CallerInfo.tsx` +- Modify: `app/views/CallView/components/CallButtons.tsx` +- Modify: `app/views/CallView/CallView.stories.tsx` +- Modify: `app/views/CallView/index.test.tsx` + +- [ ] **Step 1: Write the failing landscape test** + +Add to `app/views/CallView/index.test.tsx`. First, add this import at the top (alongside the existing `ResponsiveLayoutContext` import from the mock — the mock re-exports the actual module's context, so importing from the same path works): + +```ts +import { ResponsiveLayoutContext } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; +``` + +Then add a helper and test inside `describe('CallView', ...)`: + +```ts +const LandscapeWrapper = ({ children }: { children: React.ReactNode }) => ( + + {children} + +); + +it('should apply landscape styles when width > height', () => { + setStoreState({ callState: 'active' }); + const { getByTestId } = render( + + + + ); + + const container = getByTestId('call-view-container'); + expect(container.props.style).toEqual( + expect.arrayContaining([expect.objectContaining({ flexDirection: 'row' })]) + ); +}); +``` + +- [ ] **Step 2: Run test to confirm it fails** + +```bash +yarn test --testPathPattern=CallView/index +``` + +Expected: FAIL — `Unable to find an element with testID: call-view-container` + +- [ ] **Step 3: Add landscape styles to `styles.ts`** + +In `app/views/CallView/styles.ts`, add these entries to the `StyleSheet.create({...})` call: + +```ts +contentContainerLandscape: { + flexDirection: 'row', + alignItems: 'stretch' +}, +callerInfoContainerLandscape: { + flex: 2 +}, +buttonsContainerLandscape: { + flex: 3, + borderTopWidth: 0, + borderLeftWidth: StyleSheet.hairlineWidth, + justifyContent: 'center' +}, +buttonsRowLandscape: { + marginBottom: 16 +} +``` + +- [ ] **Step 4: Update `CallView/index.tsx`** + +```tsx +import React from 'react'; +import { View } from 'react-native'; + +import { useCallStore } from '../../lib/services/voip/useCallStore'; +import CallerInfo from './components/CallerInfo'; +import { styles } from './styles'; +import { useTheme } from '../../theme'; +import { CallButtons } from './components/CallButtons'; +import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; + +const CallView = (): React.ReactElement | null => { + 'use memo'; + + const { colors } = useTheme(); + const call = useCallStore(state => state.call); + const { width, height } = useResponsiveLayout(); + const isLandscape = width > height; + + if (!call) { + return null; + } + + return ( + + + + + ); +}; + +export default CallView; +``` + +- [ ] **Step 5: Update `CallerInfo.tsx` for landscape** + +In `app/views/CallView/components/CallerInfo.tsx`, add `useResponsiveLayout` import and landscape avatar size: + +```tsx +import React from 'react'; +import { Pressable, Text, View } from 'react-native'; +import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated'; + +import AvatarContainer from '../../../containers/Avatar'; +import I18n from '../../../i18n'; +import { useCallContact, useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; +import { useIsScreenReaderEnabled } from '../../../lib/hooks/useIsScreenReaderEnabled'; +import { useResponsiveLayout } from '../../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; +import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; +import { useTheme } from '../../../theme'; + +const CallerInfo = (): React.ReactElement => { + const { colors } = useTheme(); + const contact = useCallContact(); + const toggleControlsVisible = useCallStore(state => state.toggleControlsVisible); + const controlsVisible = useControlsVisible(); + const isScreenReaderEnabled = useIsScreenReaderEnabled(); + const { width, height } = useResponsiveLayout(); + const isLandscape = width > height; + + const callerRowStyle = useAnimatedStyle(() => ({ + opacity: withTiming(controlsVisible ? 1 : 0, { duration: CONTROLS_ANIMATION_DURATION }), + transform: [{ translateY: withTiming(controlsVisible ? 0 : 10, { duration: CONTROLS_ANIMATION_DURATION }) }] + })); + + const name = contact.displayName || contact.username || I18n.t('Unknown'); + const avatarText = contact.username || name; + + return ( + + + + + + + {name} + + + + ); +}; + +export default CallerInfo; +``` + +- [ ] **Step 6: Update `CallButtons.tsx` for landscape** + +In `app/views/CallView/components/CallButtons.tsx`, add `useResponsiveLayout` and landscape styles: + +```tsx +import React from 'react'; +import { View } from 'react-native'; +import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated'; + +import I18n from '../../../i18n'; +import { useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; +import { useResponsiveLayout } from '../../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; +import CallActionButton from './CallActionButton'; +import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; +import { useTheme } from '../../../theme'; +import { showActionSheetRef } from '../../../containers/ActionSheet'; +import Dialpad from './Dialpad/Dialpad'; + +export const CallButtons = () => { + 'use memo'; + + const { colors } = useTheme(); + const { width, height } = useResponsiveLayout(); + const isLandscape = width > height; + + const callState = useCallStore(state => state.callState); + const isMuted = useCallStore(state => state.isMuted); + const isOnHold = useCallStore(state => state.isOnHold); + const isSpeakerOn = useCallStore(state => state.isSpeakerOn); + + const toggleMute = useCallStore(state => state.toggleMute); + const toggleHold = useCallStore(state => state.toggleHold); + const toggleSpeaker = useCallStore(state => state.toggleSpeaker); + const endCall = useCallStore(state => state.endCall); + + const controlsVisible = useControlsVisible(); + + const containerStyle = useAnimatedStyle(() => ({ + opacity: withTiming(controlsVisible ? 1 : 0, { duration: CONTROLS_ANIMATION_DURATION }), + transform: [{ translateY: withTiming(controlsVisible ? 0 : 100, { duration: CONTROLS_ANIMATION_DURATION }) }] + })); + + const isConnecting = callState === 'none' || callState === 'ringing' || callState === 'accepted'; + + const handleMessage = () => { + // TODO: Navigate to chat with caller + // Navigation.navigate('RoomView', { rid, t: 'd' }); + alert('Message'); + }; + + const handleDialpad = () => { + showActionSheetRef({ children: }); + }; + + const handleEndCall = () => { + endCall(); + }; + + return ( + + + + + + + + + + + + + + ); +}; +``` + +- [ ] **Step 7: Add landscape story to `CallView.stories.tsx`** + +In `app/views/CallView/CallView.stories.tsx`, add this story at the end and a landscape decorator helper: + +```tsx +const landscapeResponsiveLayoutValue = { + fontScale: 1, + fontScaleLimited: 1, + isLargeFontScale: false, + rowHeight: 75, + rowHeightCondensed: 60, + width: 800, + height: 400 +}; + +export const LandscapeConnectedCall = () => { + setStoreState({ callState: 'active', callStartTime: mockCallStartTime - 61000 }); + return ( + + + + ); +}; +``` + +- [ ] **Step 8: Run all CallView tests** + +```bash +yarn test --testPathPattern=CallView/index +``` + +Expected: PASS (all tests including the new landscape test) + +- [ ] **Step 9: Run lint** + +```bash +yarn lint +``` + +Expected: no errors + +- [ ] **Step 10: Commit** + +```bash +git add app/views/CallView/styles.ts app/views/CallView/index.tsx app/views/CallView/components/CallerInfo.tsx app/views/CallView/components/CallButtons.tsx app/views/CallView/CallView.stories.tsx app/views/CallView/index.test.tsx +git commit -m "feat(a11y): landscape layout for CallView" +``` + +--- + +## Final check + +- [ ] **Run full test suite** + +```bash +yarn test --testPathPattern="CallView|useIsScreenReaderEnabled|PeerItem|DialpadButton" +``` + +Expected: all PASS + +- [ ] **Run lint** + +```bash +yarn lint +``` + +Expected: no errors From 0d20125a2bdffdbf3ceacd438c7e721fd12b17a3 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 17:41:54 -0300 Subject: [PATCH 03/24] docs: update i18n task to use translation agent --- .../plans/2026-04-06-voip-accessibility.md | 76 ++++++++++++++----- 1 file changed, 59 insertions(+), 17 deletions(-) diff --git a/docs/superpowers/plans/2026-04-06-voip-accessibility.md b/docs/superpowers/plans/2026-04-06-voip-accessibility.md index 2d02da05bfe..f5ec6b17412 100644 --- a/docs/superpowers/plans/2026-04-06-voip-accessibility.md +++ b/docs/superpowers/plans/2026-04-06-voip-accessibility.md @@ -17,7 +17,7 @@ | Create | `app/lib/hooks/useIsScreenReaderEnabled.ts` | Reactive boolean: VoiceOver/TalkBack active | | Create | `app/lib/hooks/useIsScreenReaderEnabled.test.ts` | Tests for the hook | | Modify | `app/lib/services/voip/useCallStore.ts:301` | `useControlsVisible` — always true when screen reader on | -| Modify | `app/i18n/locales/en.json:911` | Add `Toggle_call_controls` key | +| Modify | `app/i18n/locales/*.json` (25 files — all in `LANGUAGES` array) | Add `Toggle_call_controls` key | | Modify | `app/views/CallView/components/CallerInfo.tsx` | Screen reader bypass + a11y label + landscape avatar | | Modify | `app/views/CallView/components/CallButtons.tsx` | `accessibilityElementsHidden` + landscape styles | | Modify | `app/views/CallView/index.tsx` | Landscape container flex direction | @@ -138,26 +138,68 @@ git commit -m "feat(a11y): add useIsScreenReaderEnabled hook" --- -## Task 2: i18n key - -**Files:** -- Modify: `app/i18n/locales/en.json:911` - -- [ ] **Step 1: Add the key** - -In `app/i18n/locales/en.json`, after line 911 (`"To_download": "To download",`), insert: - -```json - "Toggle_call_controls": "Toggle call controls", -``` - -- [ ] **Step 2: Commit** +## Task 2: i18n key — dispatch translation agent + +**Files:** All 25 locale files registered in the `LANGUAGES` array in `app/i18n/index.ts`: + +`en.json`, `ar.json`, `bn-IN.json`, `cs.json`, `de.json`, `es.json`, `fi.json`, `fr.json`, `hi-IN.json`, `hu.json`, `it.json`, `ja.json`, `nl.json`, `no.json`, `nn.json`, `pt-BR.json`, `pt-PT.json`, `ru.json`, `sl-SI.json`, `sv.json`, `ta-IN.json`, `te-IN.json`, `tr.json`, `zh-CN.json`, `zh-TW.json` + +- [ ] **Step 1: Dispatch a general-purpose agent to handle all translations** + +Launch an agent with the following prompt: + +> You are adding a new i18n key to a React Native app. The key is `Toggle_call_controls` with the English value `"Toggle call controls"` — it labels a button that shows/hides the call controls on an ongoing phone call screen. +> +> Add this key to all 25 locale files listed below. For each file: +> 1. Translate "Toggle call controls" into the appropriate language naturally (don't just copy English) +> 2. Find the insertion point alphabetically — it goes between `"To_download"` and `"Token_expired"` (search for `Token_expired` in each file to locate it; if that key is missing, insert alphabetically between the nearest surrounding keys) +> 3. Insert: `"Toggle_call_controls": "",` +> +> Files (all under `app/i18n/locales/`): +> `en.json` → "Toggle call controls" +> `ar.json` → Arabic +> `bn-IN.json` → Bengali +> `cs.json` → Czech +> `de.json` → German +> `es.json` → Spanish +> `fi.json` → Finnish +> `fr.json` → French +> `hi-IN.json` → Hindi +> `hu.json` → Hungarian +> `it.json` → Italian +> `ja.json` → Japanese +> `nl.json` → Dutch +> `no.json` → Norwegian Bokmål +> `nn.json` → Norwegian Nynorsk +> `pt-BR.json` → Brazilian Portuguese +> `pt-PT.json` → European Portuguese +> `ru.json` → Russian +> `sl-SI.json` → Slovenian +> `sv.json` → Swedish +> `ta-IN.json` → Tamil +> `te-IN.json` → Telugu +> `tr.json` → Turkish +> `zh-CN.json` → Simplified Chinese +> `zh-TW.json` → Traditional Chinese +> +> After editing all files, run: +> ```bash +> grep -rl "Toggle_call_controls" app/i18n/locales/ | wc -l +> ``` +> Expected: `25`. Then commit: +> ```bash +> git add app/i18n/locales/ +> git commit -m "feat(a11y): add Toggle_call_controls i18n key to all locales" +> ``` + +- [ ] **Step 2: Verify** ```bash -git add app/i18n/locales/en.json -git commit -m "feat(a11y): add Toggle_call_controls i18n key" +grep -rl "Toggle_call_controls" app/i18n/locales/ | wc -l ``` +Expected: `25` + --- ## Task 3: `useControlsVisible` — always true when screen reader is active From dce5b2426553d61014fb3241f4cad44d0b5558b1 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:02:20 -0300 Subject: [PATCH 04/24] feat(a11y): add useIsScreenReaderEnabled hook --- .../hooks/useIsScreenReaderEnabled.test.ts | 52 +++++++++++++++++++ app/lib/hooks/useIsScreenReaderEnabled.ts | 14 +++++ 2 files changed, 66 insertions(+) create mode 100644 app/lib/hooks/useIsScreenReaderEnabled.test.ts create mode 100644 app/lib/hooks/useIsScreenReaderEnabled.ts diff --git a/app/lib/hooks/useIsScreenReaderEnabled.test.ts b/app/lib/hooks/useIsScreenReaderEnabled.test.ts new file mode 100644 index 00000000000..816430e68be --- /dev/null +++ b/app/lib/hooks/useIsScreenReaderEnabled.test.ts @@ -0,0 +1,52 @@ +import { renderHook, act } from '@testing-library/react-native'; +import { AccessibilityInfo } from 'react-native'; +import { useIsScreenReaderEnabled } from './useIsScreenReaderEnabled'; + +describe('useIsScreenReaderEnabled', () => { + beforeEach(() => { + jest.spyOn(AccessibilityInfo, 'isScreenReaderEnabled').mockResolvedValue(false); + jest.spyOn(AccessibilityInfo, 'addEventListener').mockReturnValue({ remove: jest.fn() } as any); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('returns false initially', () => { + const { result } = renderHook(() => useIsScreenReaderEnabled()); + expect(result.current).toBe(false); + }); + + it('returns true after isScreenReaderEnabled resolves true', async () => { + jest.spyOn(AccessibilityInfo, 'isScreenReaderEnabled').mockResolvedValue(true); + const { result } = renderHook(() => useIsScreenReaderEnabled()); + await act(async () => {}); + expect(result.current).toBe(true); + }); + + it('updates when screenReaderChanged event fires', () => { + let capturedListener: (enabled: boolean) => void = () => {}; + jest.spyOn(AccessibilityInfo, 'addEventListener').mockImplementation((_event, cb) => { + capturedListener = cb as (enabled: boolean) => void; + return { remove: jest.fn() } as any; + }); + + const { result } = renderHook(() => useIsScreenReaderEnabled()); + + act(() => { + capturedListener(true); + }); + + expect(result.current).toBe(true); + }); + + it('removes the event listener on unmount', () => { + const removeMock = jest.fn(); + jest.spyOn(AccessibilityInfo, 'addEventListener').mockReturnValue({ remove: removeMock } as any); + + const { unmount } = renderHook(() => useIsScreenReaderEnabled()); + unmount(); + + expect(removeMock).toHaveBeenCalled(); + }); +}); diff --git a/app/lib/hooks/useIsScreenReaderEnabled.ts b/app/lib/hooks/useIsScreenReaderEnabled.ts new file mode 100644 index 00000000000..53d85bc6c43 --- /dev/null +++ b/app/lib/hooks/useIsScreenReaderEnabled.ts @@ -0,0 +1,14 @@ +import { useEffect, useState } from 'react'; +import { AccessibilityInfo } from 'react-native'; + +export const useIsScreenReaderEnabled = (): boolean => { + const [enabled, setEnabled] = useState(false); + + useEffect(() => { + AccessibilityInfo.isScreenReaderEnabled().then(setEnabled); + const subscription = AccessibilityInfo.addEventListener('screenReaderChanged', setEnabled); + return () => subscription.remove(); + }, []); + + return enabled; +}; From 22e6f14deff1bad82abbd1f0e21f31054de811af Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:02:37 -0300 Subject: [PATCH 05/24] feat(a11y): add Toggle_call_controls i18n key to all locales --- app/i18n/locales/ar.json | 1 + app/i18n/locales/bn-IN.json | 1 + app/i18n/locales/cs.json | 1 + app/i18n/locales/de.json | 1 + app/i18n/locales/en.json | 1 + app/i18n/locales/es.json | 1 + app/i18n/locales/fi.json | 1 + app/i18n/locales/fr.json | 1 + app/i18n/locales/hi-IN.json | 1 + app/i18n/locales/hu.json | 1 + app/i18n/locales/it.json | 1 + app/i18n/locales/ja.json | 1 + app/i18n/locales/nl.json | 1 + app/i18n/locales/nn.json | 1 + app/i18n/locales/no.json | 1 + app/i18n/locales/pt-BR.json | 1 + app/i18n/locales/pt-PT.json | 1 + app/i18n/locales/ru.json | 1 + app/i18n/locales/sl-SI.json | 1 + app/i18n/locales/sv.json | 1 + app/i18n/locales/ta-IN.json | 1 + app/i18n/locales/te-IN.json | 1857 ++++++++++++++++++----------------- app/i18n/locales/tr.json | 1 + app/i18n/locales/zh-CN.json | 1 + app/i18n/locales/zh-TW.json | 1 + 25 files changed, 953 insertions(+), 928 deletions(-) diff --git a/app/i18n/locales/ar.json b/app/i18n/locales/ar.json index 6f7d73bf42d..64dc7adfa66 100644 --- a/app/i18n/locales/ar.json +++ b/app/i18n/locales/ar.json @@ -584,6 +584,7 @@ "Threads_unread": "سلاسل المحادثات، {{unread}} غير مقروءة", "Timezone": "المنطقة الزمنية", "To_download": "للتحميل", + "Toggle_call_controls": "تبديل عناصر التحكم في المكالمة", "Topic": "عنوان", "topic": "عنوان", "Translate": "ترجمة", diff --git a/app/i18n/locales/bn-IN.json b/app/i18n/locales/bn-IN.json index bc54f394f74..e69839e44ed 100644 --- a/app/i18n/locales/bn-IN.json +++ b/app/i18n/locales/bn-IN.json @@ -808,6 +808,7 @@ "Threads_unread": "থ্রেড, {{unread}} অপঠিত", "Timezone": "সময় অঞ্চল", "To_download": "ডাউনলোড করতে", + "Toggle_call_controls": "কল নিয়ন্ত্রণ টগল করুন", "Token_expired": "আপনার সেশনের মেয়াদ শেষ হয়েছে। দয়া করে আবার লগ ইন করুন।", "Topic": "বিষয়", "topic": "বিষয়", diff --git a/app/i18n/locales/cs.json b/app/i18n/locales/cs.json index 963fa4aaa65..f4c4406d633 100644 --- a/app/i18n/locales/cs.json +++ b/app/i18n/locales/cs.json @@ -873,6 +873,7 @@ "Threads_unread": "Vlákna, {{unread}} nepřečtené", "Timezone": "Časové pásmo", "To_download": "Stáhnout", + "Toggle_call_controls": "Přepnout ovládání volání", "Token_expired": "Vaše relace vypršela. Přihlaste se prosím znovu.", "Topic": "Téma", "topic": "téma", diff --git a/app/i18n/locales/de.json b/app/i18n/locales/de.json index 3820aa84fae..4ff5a50f666 100644 --- a/app/i18n/locales/de.json +++ b/app/i18n/locales/de.json @@ -801,6 +801,7 @@ "Threads_unread": "Threads, {{unread}} ungelesen", "Timezone": "Zeitzone", "To_download": "Herunterladen", + "Toggle_call_controls": "Anrufsteuerung umschalten", "Token_expired": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.", "Topic": "Thema", "topic": "Thema", diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json index 1ac0f17fd91..dbf9dccf98a 100644 --- a/app/i18n/locales/en.json +++ b/app/i18n/locales/en.json @@ -908,6 +908,7 @@ "Timezone": "Timezone", "To_continue_using_RocketChat": "To continue using the mobile app, you need to change your password.", "To_download": "To download", + "Toggle_call_controls": "Toggle call controls", "Token_expired": "Your session has expired. Please log in again.", "Topic": "Topic", "topic": "topic", diff --git a/app/i18n/locales/es.json b/app/i18n/locales/es.json index 1a48434414b..1d8bdf9bc87 100644 --- a/app/i18n/locales/es.json +++ b/app/i18n/locales/es.json @@ -427,6 +427,7 @@ "Threads_unread": "Hilos, {{unread}} sin leer", "Timezone": "Zona horaria", "To_download": "Descargar", + "Toggle_call_controls": "Alternar controles de llamada", "Topic": "Asunto", "topic": "asunto", "Translate": "Traducir", diff --git a/app/i18n/locales/fi.json b/app/i18n/locales/fi.json index 527e0589e2d..9521ba73a94 100644 --- a/app/i18n/locales/fi.json +++ b/app/i18n/locales/fi.json @@ -776,6 +776,7 @@ "Threads_unread": "Ketjut, {{unread}} lukematonta", "Timezone": "Aikavyöhyke", "To_download": "Ladataaksesi", + "Toggle_call_controls": "Vaihda puhelun hallintoja", "Token_expired": "Istuntosi on vanhentunut. Kirjaudu uudelleen.", "Topic": "Aihe", "topic": "aihe", diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json index 51bc292be23..41dccb8b634 100644 --- a/app/i18n/locales/fr.json +++ b/app/i18n/locales/fr.json @@ -708,6 +708,7 @@ "Threads_unread": "Discussions, {{unread}} non lues", "Timezone": "Fuseau horaire", "To_download": "Télécharger", + "Toggle_call_controls": "Basculer les contrôles d'appel", "Token_expired": "Votre session a expiré. Veuillez vous reconnecter.", "Topic": "Sujet", "topic": "sujet", diff --git a/app/i18n/locales/hi-IN.json b/app/i18n/locales/hi-IN.json index a6db967d350..17501113042 100644 --- a/app/i18n/locales/hi-IN.json +++ b/app/i18n/locales/hi-IN.json @@ -808,6 +808,7 @@ "Threads_unread": "थ्रेड्स, {{unread}} अपठित", "Timezone": "समय क्षेत्र", "To_download": "डाउनलोड करने के लिए", + "Toggle_call_controls": "कॉल नियंत्रण टॉगल करें", "Token_expired": "आपका सत्र समाप्त हो गया है। कृपया पुनः लॉग इन करें।", "Topic": "विषय", "topic": "विषय", diff --git a/app/i18n/locales/hu.json b/app/i18n/locales/hu.json index 8d42ef93ba7..f8e504a1371 100644 --- a/app/i18n/locales/hu.json +++ b/app/i18n/locales/hu.json @@ -810,6 +810,7 @@ "Threads_unread": "Fonalak, {{unread}} olvasatlan", "Timezone": "Időzóna", "To_download": "Letöltéshez", + "Toggle_call_controls": "Hívásváltási vezérlők", "Token_expired": "Az Ön munkamenete lejárt. Kérjük, jelentkezzen be újra.", "Topic": "Téma", "topic": "téma", diff --git a/app/i18n/locales/it.json b/app/i18n/locales/it.json index 2d0a234efcf..072eeb2cad2 100644 --- a/app/i18n/locales/it.json +++ b/app/i18n/locales/it.json @@ -621,6 +621,7 @@ "Threads_unread": "Discussioni, {{unread}} non lette", "Timezone": "Fuso orario", "To_download": "Scaricare", + "Toggle_call_controls": "Attiva/disattiva i controlli delle chiamate", "Topic": "Argomento", "topic": "argomento", "Translate": "Traduci", diff --git a/app/i18n/locales/ja.json b/app/i18n/locales/ja.json index 54463dc744c..7edf1fe4c4c 100644 --- a/app/i18n/locales/ja.json +++ b/app/i18n/locales/ja.json @@ -515,6 +515,7 @@ "Threads_unread": "スレッド、{{unread}} 未読", "Timezone": "タイムゾーン", "To_download": "ダウンロードする", + "Toggle_call_controls": "通話コントロールを切り替える", "Topic": "トピック", "topic": "トピック", "Translate": "翻訳", diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index a8270680f0a..8a27193bb85 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -708,6 +708,7 @@ "Threads_unread": "Threads, {{unread}} ongelezen", "Timezone": "Tijdzone", "To_download": "Downloaden", + "Toggle_call_controls": "Gesprekbesturingselementen in-/uitschakelen", "Token_expired": "Uw sessie is verlopen. Gelieve opnieuw in te loggen.", "Topic": "Onderwerp", "topic": "onderwerp", diff --git a/app/i18n/locales/nn.json b/app/i18n/locales/nn.json index 2a21563e8fa..954734973e0 100644 --- a/app/i18n/locales/nn.json +++ b/app/i18n/locales/nn.json @@ -378,6 +378,7 @@ "This_room_is_read_only": "Dette rommet er kun skrivebeskyttet", "Threads": "Tråder", "Timezone": "Tidssone", + "Toggle_call_controls": "Slå samtalekontrollar på/av", "Topic": "Emne", "totp-invalid": "Kode eller passord er ugyldig", "Translate": "Oversett", diff --git a/app/i18n/locales/no.json b/app/i18n/locales/no.json index c5099736262..182abf03d1b 100644 --- a/app/i18n/locales/no.json +++ b/app/i18n/locales/no.json @@ -851,6 +851,7 @@ "Threads": "Tråder", "Timezone": "Tidssone", "To_continue_using_RocketChat": "For å fortsette å bruke mobilappen må du endre passordet ditt.", + "Toggle_call_controls": "Slå samtalekontroller av/på", "Token_expired": "Økten din er utløpt. Vennligst logg inn på nytt.", "Topic": "Emne", "topic": "emne", diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json index 6bc53a93125..36abe787373 100644 --- a/app/i18n/locales/pt-BR.json +++ b/app/i18n/locales/pt-BR.json @@ -882,6 +882,7 @@ "Timezone": "Fuso horário", "To_continue_using_RocketChat": "Para continuar usando o aplicativo móvel, você precisa alterar sua senha.", "To_download": "Para baixar", + "Toggle_call_controls": "Alternar controles de chamada", "Token_expired": "Sua sessão expirou. Por favor entre novamente.", "Topic": "Tópico", "topic": "tópico", diff --git a/app/i18n/locales/pt-PT.json b/app/i18n/locales/pt-PT.json index 508f2dbb54e..5e04b98310a 100644 --- a/app/i18n/locales/pt-PT.json +++ b/app/i18n/locales/pt-PT.json @@ -496,6 +496,7 @@ "Threads_unread": "Threads, {{unread}} por ler", "Timezone": "Fuso Horário", "To_download": "Para descarregar", + "Toggle_call_controls": "Alternar controles de chamada", "Topic": "Tópico", "topic": "tópico", "Travel_and_places": "Viagens e locais", diff --git a/app/i18n/locales/ru.json b/app/i18n/locales/ru.json index 959846c0c61..643398d1ad6 100644 --- a/app/i18n/locales/ru.json +++ b/app/i18n/locales/ru.json @@ -753,6 +753,7 @@ "Threads_unread": "Темы, {{unread}} непрочитанных", "Timezone": "Часовой пояс", "To_download": "Скачать", + "Toggle_call_controls": "Переключить элементы управления вызовом", "Token_expired": "Срок действия вашей сессии истек. Пожалуйста войдите снова.", "Topic": "Тема", "topic": "тема", diff --git a/app/i18n/locales/sl-SI.json b/app/i18n/locales/sl-SI.json index df6f3740624..4a98463f233 100644 --- a/app/i18n/locales/sl-SI.json +++ b/app/i18n/locales/sl-SI.json @@ -722,6 +722,7 @@ "Threads_unread": "Nit, {{unread}} neprebranih", "Timezone": "Časovni pas", "To_download": "Prenesi", + "Toggle_call_controls": "Preklopi upravljalce klicanja", "Token_expired": "Vaša seja je potekla. Prosimo, prijavite se še enkrat.", "Topic": "Tema", "topic": "tema", diff --git a/app/i18n/locales/sv.json b/app/i18n/locales/sv.json index dbcd9485958..cdddd19558e 100644 --- a/app/i18n/locales/sv.json +++ b/app/i18n/locales/sv.json @@ -775,6 +775,7 @@ "Threads_unread": "Trådar, {{unread}} olästa", "Timezone": "Tidszon", "To_download": "Ladda ner", + "Toggle_call_controls": "Slå samtalskontroller på/av", "Token_expired": "Din session har upphört. Logga in igen.", "Topic": "Ämne", "topic": "ämne", diff --git a/app/i18n/locales/ta-IN.json b/app/i18n/locales/ta-IN.json index e03ada72848..1e41ee368ec 100644 --- a/app/i18n/locales/ta-IN.json +++ b/app/i18n/locales/ta-IN.json @@ -808,6 +808,7 @@ "Threads_unread": "தோர்களில், {{unread}} படிக்காதவை", "Timezone": "நேரமான முனை", "To_download": "பதிவிறக்குவதற்கு", + "Toggle_call_controls": "அழைப்பு கட்டுப்பாடுகளை மாற்றவும்", "Token_expired": "உங்கள் அமர்விதிகள் காலாவதியாகின்றது. தயவுசெய்து மீண்டும் உள்நுழைக.", "Topic": "தலைப்பு", "topic": "தலைப்பு", diff --git a/app/i18n/locales/te-IN.json b/app/i18n/locales/te-IN.json index af9faec25c3..812fe282b3a 100644 --- a/app/i18n/locales/te-IN.json +++ b/app/i18n/locales/te-IN.json @@ -1,929 +1,930 @@ { - "__count__empty_room_will_be_removed_automatically": "{{count}} ఖాళీ కొరకు స్వయంగా తొలగిపోతాయి.", - "__count__empty_rooms_will_be_removed_automatically": "{{count}} ఖాళీ కొరకులు స్వయంగా తొలగిపోతాయి.", - "1_person_reacted": "1 వ్యక్తి ప్రతిక్రియించింది", - "A_new_owner_will_be_assigned_automatically_to__count__room": "కొత్త యజమాని స్వయంగా నియమించబడుతుంది {{count}} అంగడాయినందు.", - "A_new_owner_will_be_assigned_automatically_to__count__rooms": "కొత్త యజమాని స్వయంగా నియమించబడుతుంది {{count}} అంగడులకు.", - "A11y_appearance_dialog_require_manual_dismissal": "మానవీయంగా మూసివేయాలి", - "A11y_appearance_dialogs": "డైలాగ్లు", - "A11y_appearance_show_alerts_as": "అలర్ట్‌లను ఇలా చూపించండి", - "A11y_appearance_toast_dismissed_automatically": "స్వయంచాలకంగా మూసివేయబడుతుంది", - "A11y_appearance_toasts": "టోస్ట్ నోటిఫికేషన్లు", - "A11y_in_app_notification": "{{name}} నుండి కొత్త సందేశం: {{message}}", - "A11y_incoming_call_dismiss": "ఖారు చేయండి", - "A11y_incoming_call_swipe_down_to_view_options": "క్రిందికి స్వైప్ చేయి, పరామితులను చూడండి", - "ABAC_disabled_action_reason": "ABAC-నిర్వహించబడే గదులలో అందుబాటులో లేదు", - "ABAC_managed": "ABAC నిర్వహించబడింది", - "ABAC_managed_description": "అట్రిబ్యూట్ ఆధారిత యాక్సెస్ నియంత్రిత గదులకు అనుకూలమైన వినియోగదారులు మాత్రమే ప్రాప్యతను కలిగి ఉంటారు. లక్షణాలు గది ప్రాప్యతను నిర్ణయిస్తాయి.", - "abac_removed_user_from_the_room": "ABAC ద్వారా తొలగించబడింది", - "ABAC_room_attributes": "గది లక్షణాలు", - "accept": "అంగీకరించు", - "Accessibility": "एक्सेसिबिलिटी", - "Accessibility_and_Appearance": "प्रवेशयोग्यता और रूपरेखा", - "Accessibility_statement": "పేరుబట్టి వివరణ", - "Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "వాడాకు 'కూడా చానల్‌కు పంపండి' పనికి అనుమతిస్తుంది", - "Actions": "చర్యలు", - "Activate_to_select_server": "సర్వర్‌ను ఎంచుకోవడానికి యాక్టివేట్ చేయండి", - "Activate_to_select_server_Available_actions_delete": "సర్వర్‌ను ఎంచుకోవడానికి ఆಕ್ಟివేట్ చేయండి. లభ్యమయ్యే చర్యలు: {{delete}}", - "Activity": "చట్టం", - "Add_Channel_to_Team": "ఛానల్‌ను టీమ్‌కు జోడించండి", - "Add_Existing": "ఇప్పటికే ఉన్నవిని జోడించండి", - "Add_Existing_Channel": "ఇప్పటికే ఉన్న ఛానల్‌ను జోడించండి", - "Add_Server": "వర్క్‌స్పేస్ చేర్చు", - "Add_server": "వర్క్‌స్పేస్ జోడించండి", - "Add_users": "వాడికి వాడుకలు చేర్చండి", - "added__roomName__to_this_team": "#{{roomName}} ని ఈ టీమ్‌కు చేర్చారు", - "Added__username__to_this_team": "@{{user_added}} ని ఈ టీమ్‌కు చేర్చారు", - "Admin_Panel": "యజమాని పేనల్", - "admin-no-active-video-conf-provider-body": "ఈ వార్క్‌స్పేస్‌లో ఇది అందుబాటు చేసేందుకు కాన్ఫరెన్స్ కాల్స్ కాన్ఫిగర్ చేసుకోవడానికి వార్క్‌స్పేస్ యాడ్మిన్ అవసరం.", - "admin-no-active-video-conf-provider-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", - "admin-no-videoconf-provider-app-body": "వార్క్‌స్పేస్ యొక్క మార్కెట్‌లో కాన్ఫరెన్స్ కాల్ యాప్స్ అందుబాటు.", - "admin-no-videoconf-provider-app-header": "కాన్ఫరెన్స్ కాల్ యాప్స్ చేరబడలేదు", - "admin-video-conf-provider-not-configured-body": "ఈ వార్క్‌స్పేస్‌లో ఇది అందుబాటు చేసేందుకు కాన్ఫరెన్స్ కాల్స్ కాన్ఫిగర్ చేసుకోవడానికి వార్క్‌స్పేస్ యాడ్మిన్ అవసరం.", - "admin-video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", - "After_seconds_set_by_admin": "అడ్మిన్ ద్వారా సెట్ చేయబడిన {{seconds}} సెకన్లలో", - "Agent": "ఏజెంట్", - "AirGapped_workspace_read_only_description": "నిర్వహకులు దీన్ని ఇంటర్నెట్‌తో కలుపుకోవడం లేదా ప్రీమియం ప్రణాళికకు మెరుగుపరచడం ద్వారా పూర్తి ఫంక్షనాలిటీని పునఃస్థాపించవచ్చు.", - "AirGapped_workspace_read_only_share_extension_title": "జోడించడం నిలిపివేయబడింది, ఎందుకంటే పనికోసం చదివే స్ధితిలో ఉంది.", - "AirGapped_workspace_read_only_title": "అయోమయ స్థితిలో ఉన్న పనికోసం.", - "Alert": "హెచ్చరిక", - "alert": "హెచ్చరిక", - "alerts": "హెచ్చరికలు", - "All": "అన్ని", - "All_Messages": "అన్ని సందేశాలు", - "All_users_in_the_channel_can_write_new_messages": "చానల్లో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", - "All_users_in_the_team_can_write_new_messages": "జట్టులో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", - "Allow_Reactions": "ప్రతిక్రియలను అనుమతించండి", - "Already_have_an_account": "మీకు ఇప్పటికే ఖాతా ఉందా?", - "Also_send_thread_message_to_channel_behavior": "చానల్‌కు థ్రెడ్ సందేశాన్ని కూడా పంపండి", - "and": "మరియు", - "and_N_more": "మరింత {{count}}", - "Animals_and_nature": "जानवर और प्रकृति", - "Announcement": "ప్రకటన", - "announcement": "ప్రకటన", - "Apply_Certificate": "సర్టిఫికేట్‌ని వర్తింపజేయండి", - "ARCHIVE": "ఆర్కైవ్", - "archive": "ఆర్కైవ్", - "are_typing": "రాయడం", - "Are_you_sure_question_mark": "మీరు ఖచ్చితంగా ఉన్నారా?", - "Are_you_sure_you_want_to_delete_your_account": "మీరు మీ ఖాతాను తొలగించాలా?", - "Are_you_sure_you_want_to_leave_the_room": "మీరు ఖచ్చితంగా కొరకుని వదిలిపోతున్నారా {{room}}?", - "At_Least_1_Lowercase_Letter": "కనీసం 1 చిన్న అక్షరం", - "At_Least_1_Number": "కనీసం 1 సంఖ్య", - "At_Least_1_Symbol": "కనీసం 1 చిహ్నం", - "At_Least_1_Uppercase_Letter": "कम से कम 1 बड़े अक्षर", - "At_Least_Characters": "कम से कम {{quantity}} अक्षर", - "At_Most_24_Characters": "గరిష్టంగా 24 అక్షరాలు", - "At_Most_Characters": "अधिकतम {{quantity}} अक्षर", - "Attention": "ध्यान दें", - "Audio": "ఆడియో", - "Auto_Translate": "స్వయం అనువదించండి", - "Auto-join": "స్వయం-చేరండి", - "Automatic": "స్వయంగా", - "Autoplay_gifs": "जीआईएफ़ का स्वतःप्ले", - "Avatar": "అవతార్", - "Avatar_changed_successfully": "అవతార్ విజయవంతంగా మారింది!", - "Avatar_default_photo": "डिफ़ॉल्ट अवतार {{username}} के लिए", - "Avatar_Photo": "{{username}} का अवतार", - "Avatar_Url": "అవతార్ URL", - "Avatars": "అవతార్లు", - "Away": "దూరంగా", - "Back": "वापस", - "Back_to_keyboard": "कीबोर्ड पर वापस", - "Bio": "జీవిత చరిత్ర", - "Black": "నలుపు", - "Broadcast": "బ్రాడ్‌కాస్ట్", - "Broadcast_hint": "కొనసాగించబడిన వాడాలు కొత్త సందేశాలను రాయగలరు, కాని ఇతర వాడాలు ఉత్తరం ఇవ్వగలరు", - "Browser": "బ్రౌజర్", - "Busy": "వ్యస్తంగా", - "Call": "కాల్", - "Call_again": "కాల్ మళ్ళీ", - "Call_already_ended": "కాల్ ఇప్పటివరకు ముగింపుగా ఉంది!", - "Call_back": "కాల్ బ్యాక్", - "Call_ended": "కాల్ ముగియింది", - "Call_ended_bold": "*వాయిస్ కాల్ ముగిసింది*", - "Call_failed_bold": "*వాయిస్ కాల్ విఫలమైంది*", - "Call_issue": "కాల్ సమస్య", - "Call_not_answered_bold": "*వాయిస్ కాల్ జవాబు ఇవ్వబడలేదు*", - "Call_ongoing": "కాల్ ప్రవర్తిస్తోంది", - "Call_rejected": "కాల్ తిరస్కరించబడింది", - "Call_room_name": "{{roomName}} को कॉल करें", - "Call_started": "కాల్ ప్రారంభించబడింది", - "Call_transferred_bold": "*వాయిస్ కాల్ బదిలీ చేయబడింది*", - "Call_was_canceled_before_being_answered": "కాల్ సమాధానం ఇవ్వబడకముందే రద్దు చేయబడింది", - "Call_was_not_answered": "కాల్ సమాధానించబడలేదు", - "Calling": "కాల్ చేస్తోంది", - "Cancel": "రద్దు", - "Cancel_and_delete_recording": "रिकॉर्डिंग रद्द करें और हटाएं।", - "Cancel_editing": "సవరించడానికి రద్దు చేయి", - "Cancel_recording": "రికార్డింగ్‌ను రద్దు చేయి", - "Cancel_upload": "अपलोड रद्द करें", - "Canned_Responses": "క్యాన్డ్ రిస్పాన్సెలు", - "Cannot_delete": "తొలగించలేరు", - "Cannot_leave": "విడిచలేరు", - "Cannot_remove": "తీసివేయలేరు", - "Certificate_password": "సర్టిఫికేట్ పాస్‌వర్డ్", - "Change_Language": "భాషను మార్చు", - "Change_language_loading": "భాషను మార్చాడు.", - "Change_my_password": "मेरा पासवर्ड बदलें।", - "changed_room_announcement": "గది ప్రకటనను మార్చారు: {{announcement}}", - "changed_room_description": "గది వివరాన్ని మార్చారు: {{description}}", - "changing_avatar": "అవతార్ మార్చడం", - "Channel": "చానల్", - "Channel_hint_encrypted": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ చానల్. ఎన్క్రిప్టెడ్ చానల్‌తో శోధన పనులు పనిస్తాయి మరియు అధిసూచనలు సందేశాల విషయాన్ని చూపవచ్చు.", - "Channel_hint_encrypted_not_available": "పబ్లిక్ చానల్‌కు అందుబాటు కాదు", - "Channel_hint_not_read_only": "చానల్‌లో ఉన్న అన్ని వాడాలు కొత్త సందేశాలను రాయగలరు", - "Channel_hint_private": "కేవలం ఆహ్వానిత వాడాలు ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", - "Channel_hint_public": "ప్రతిపక్షం ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", - "Channel_Name": "ఛానల్ పేరు", - "Channel_name_already_taken": "चैनल का नाम पहले से लिया जा चुका है।", - "Channel_name_required": "चैनल का नाम आवश्यक है।", - "Channels": "ఛానల్లు", - "Chat_closed_by_agent": "ఏజెంట్ ద్వారా చాట్ మూసబడింది", - "Chat_is_on_hold": "ఇది చాట్ అనాకరణం కారణంగా ఆఫ్‌లోడ్ ఉంది", - "Chat_started": "చాట్ ప్రారంభించబడింది", - "Chats": "చాట్లు", - "Check_canned_responses": "క్యాన్డ్ రిస్పాన్సెలను తనిఖీ చేయండి.", - "Choose": "चुनें", - "Choose_file": "ఫైల్ ఎంచుకో", - "Choose_from_library": "లైబ్రరీ నుండి ఎంచుకో", - "Choose_where_you_want_links_be_opened": "లింకులను ఎక్కువ ఉంచాలా ఎంచుకో", - "Clear": "క్లియర్", - "Clear_cache": "స్థానిక పనివెచ్చే క్యాష్ నిలిపివేయండి", - "Clear_cache_loading": "క్యాష్‌ను నిలిపివేస్తోంది.", - "Click_to_join": "చేరాలనుకోండి!", - "Close": "మూసివేయి", - "Close_Chat": "చాట్‌ను మూసివేయండి", - "Code_or_password_invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లనిది", - "Code_required": "कोड की आवश्यकता है।", - "Collaborative": "సహయోగం", - "Condensed": "సంక్షేపించబడిన", - "conference_call": "సభా కాల్", - "Confirm": "ఖచ్చితంగా చెప్పు", - "Confirm_password": "पासवर्ड की पुष्टि करें", - "Confirmation": "అనుమతి", - "Connect": "కనెక్ట్ చేయండి", - "Connect_to_server_as_user": "{{user}} के रूप में {{serverUrl}} से कनेक्ट करें।", - "Connecting": "కనెక్ట్ అవుతోంది...", - "Contact_us": "మాకు సంప్రదించండి", - "Contact_your_server_admin": "మీ పనిచేసే అడ్మిన్‌ని సంప్రదించండి.", - "Content": "కంటెంట్", - "Continue": "కొనసాగించు", - "Continue_with": "మరింతగా చేయండి", - "Conversation": "సంభాషణ", - "Conversation_closed": "సంభాషణ మూసబడింది", - "Convert": "మార్చు", - "Convert_ASCII_to_emoji": "ASCII को इमोजी में बदलें", - "Convert_to_Channel": "చానల్ కి మార్చండి", - "Convert_to_Team": "టీమ్‌కు మార్చు", - "Convert_to_Team_Warning": "మీరు ఈ ఛానల్‌ను టీమ్‌కు మార్చుతున్నారు. అన్ని సభ్యులు ఉంటారు.", - "Converted__roomName__to_a_channel": "#{{roomName}} ని చానల్ గా మార్చారు", - "Converted__roomName__to_a_team": "#{{roomName}} ని ఒక టీమ్ గా మార్చారు", - "Converting_Team_To_Channel": "టీమ్ ను చానల్‌కు మార్చేందుకు", - "Copied_to_clipboard": "క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది!", - "Copy": "నకలు", - "Crash_report_disclaimer": "మేము మీ చాట్ సామగ్రిని ట్రాక్ చేసాము. క్రాష్ రిపోర్ట్ మరియు అనలిటిక్స్ ఈవెంట్లు మాకు సమస్తమైన సమాచారం మాత్రమే కలిగి ఉన్నాయి, అని గుర్తించడానికి మరియు సమస్యలను పరిష్కరించడానికి మాత్రమే.", - "Create": "సృష్టించండి", - "Create_a_new_workspace": "కొత్త పనివెచ్చేలా సృష్టించండి", - "Create_account": "ఖాతా సృష్టించండి", - "Create_Channel": "ఛానల్ సృష్టించండి", - "Create_Direct_Messages": "సరాసరి సందేశాలను సృష్టించండి", - "Create_Discussion": "చర్చ సృష్టించండి", - "Create_New": "కొత్తగా సృష్టించండి", - "Create_new_channel_team_dm_discussion": "नया चैनल, टीम, सीधा संदेश या चर्चा बनाएँ।", - "Create_Team": "టీమ్ సృష్టించండి", - "Created_snippet": "ఒక స్నిపెట్ సృష్టించబడింది", - "creating_channel": "ఛానల్ సృష్టించడం", - "creating_discussion": "సంవాదాలను సృష్టిస్తోంది", - "creating_invite": "ఆహ్వానాన్ని సృష్టించడం", - "creating_team": "టీమ్ సృష్టిస్తోంది", - "Current_password": "वर्तमान पासवर्ड", - "Current_Status": "वर्तमान स्थिति", - "Custom": "कस्टम", - "Dark": "గాఢంగా", - "Dark_level": "గాఢంగా స్థాయి", - "decline": "నిరాకరించు", - "Default": "స్వచ్ఛందం", - "Default_browser": "స్వచ్ఛంద బ్రౌజర్", - "Defined_user_as_role": "{{user}} నియమాలను {{role}} గా ప్రవృత్తించారు", - "DELETE": "తొలగించండి", - "Delete": "తొలగించండి", - "delete": "తొలగించండి", - "Delete_Account": "ఖాతాను తొలగించండి", - "Delete_Account_confirm": "అవును, తొలగించండి", - "Delete_image": "చిత్రం తొలగించు", - "Delete_my_account": "నా ఖాతాను తొలగిస్తోంది", - "Delete_recording": "रिकॉर्डिंग हटाएं", - "Delete_Room_Warning": "ఒక కొరకుని మొత్తం పోస్ట్ చేసిన అన్ని సందేశాలను తొలగించడం. ఇది పునఃప్రారంభించబడదు.", - "Delete_Team": "టీమ్ ను తొలగిస్తోంది", - "Deleted__roomName__": "#{{roomName}} ని తొలగించారు", - "Deleted_The_Room_Successfully": "కింద కానున్న కుటుంబం విజయవంతంగా తొలగించబడింది", - "Deleted_The_Team_Successfully": "టీమ్ విజయవంతంగా తొలగించబడింది", - "Deleting_a_user_will_delete_all_messages": "ఒక వాడిని తొలగించడం ఆ వాడిని సహితం అన్ని సందేశాలను, కొరకులను మరియు జట్టులను తొలగించాలను. ఇది పునఃప్రారంభించబడదు.", - "Deleting_account": "ఖాతా తొలగిస్తోంది", - "deleting_room": "కొరకుని తొలగించడం", - "deleting_team": "టీమ్ ను తొలగిస్తోంది", - "Department": "విభాగం", - "Description": "వివరణ", - "description": "వివరణ", - "Direct_message": "సరిహద్దు సందేశం", - "Direct_Messages": "సరాసరి సందేశాలు", - "Directory": "డైరెక్టరీ", - "Disable_writing_in_room": "{{roomName}}లో రచన అనుమతించకోండి", - "Disabled_E2E_Encryption_for_this_room": "ఈ రూమ్‌కు E2E ఎన్క్రిప్షన్ అచ్చుమాటయింది", - "Discard": "తిరిగి వాడు", - "Discard_changes": "మార్పులను తిరిగి వాడండి?", - "Discard_changes_description": "మీరు సేవించకపోతే అన్ని మార్పులు కోలుక పడతాయి.", - "Discussion": "చర్చ", - "Discussion_Desc": "चर्चाएँ किसी चैनल या टीम के अंदर एक विशिष्ट विषय के बारे में अलग बातचीत की अनुमति देती हैं जहाँ किसी भी कार्यक्षेत्र के सदस्य को जोड़ा जा सकता है।", - "Discussion_name": "చర్చ పేరు", - "Discussion_name_required": "चर्चा के लिए नाम आवश्यक है।", - "Discussions": "చర్చలు", - "Display": "ప్రదర్శించు", - "Do_it_later": "తర్వాత చెయ్యి", - "Do_you_have_a_certificate": "ఈ వర్క్‌స్పేస్‌కు సర్టిఫికేట్ ఉందా?", - "Do_you_have_an_account": "మీకు ఖాతా ఉందా?", - "Do_you_really_want_to_key_this_room_question_mark": "మీరు ఖచ్చితంగా {{key}} ఈ కొరకుని తెచ్చాలా?", - "Dont_activate": "ఇప్పుడే సక్రియపరచడం లేదు", - "Dont_Have_An_Account": "మీకు ఖాతా లేదా?", - "Downloaded_file": "అప్లోడు చేసిన ఫైలు", - "E2E_Encryption": "E2E ఎన్క్రిప్షన్", - "E2E_encryption_change_password_confirmation": "అవును, అది మార్చండి", - "E2E_encryption_change_password_description": "మీరు ఇప్పుడు ఎన్క్రిప్టెడ్ ప్రైవేట్ గ్రూప్లు మరియు డైరెక్ట్ సందేశాలను సృష్టించవచ్చు. మీరు ప్రేపను ఎన్క్రిప్టెడ్ చేయవచ్చు. \nఇది ఎండ్ టు ఎండ్ ఎన్క్రిప్షన్, కానీ మీ సందేశాలను ఎన్కోడ్/డీకోడ్ చేయడానికి కీను వర్క్‌స్పేస్‌లో భద్రపరచడానికి సేవ్ కానీ కారణం లేదు. ఈ కారణంగా, మీరు మీ పాస్‌వర్డ్ను బాగా దానిని సేవ్ చేయాలి. మీరు వాటిని ఉపయోగించాలని మీరు ఇతర పరికరాలలో ప్రవేశించినప్పుడు అవసానంగా అంగీకరించాలి.", - "E2E_encryption_change_password_error": "E2E కీ పాస్‌వర్డ్ను మార్చడంలో దోషం!", - "E2E_encryption_change_password_message": "దయచేసి ఇతర స్థానాలలో దానిని బాగా భద్రపరచండి.", - "E2E_encryption_change_password_success": "E2E కీ పాస్‌వర్డ్ విజయవంతంగా మారింది!", - "E2E_encryption_change_password_title": "ఎన్క్రిప్షన్ పాస్‌వర్డ్ను మార్చండి", - "E2E_encryption_reset_button": "రీసెట్ E2E కీ", - "E2E_encryption_reset_confirmation": "అవును, అది రీసెట్ చేయండి", - "E2E_encryption_reset_description": "ఈ ఐచ్ఛికం మీ ప్రస్తుత E2E కీను తొలగించి, మీరు లాగౌట్ అవుతారు. \nమీరు మళ్ళీ లాగిన్ చేయడానికి, Rocket.Chat మీకు కొత్త కీని సృష్టించి అంగీకరించండి మరియు మీరు ఒకటి లేక ఏదో మార్గం సభ్యులు ఉన్న ఎన్క్రిప్టెడ్ రూమ్‌కు ప్రవేశం పొందవచ్చు. \nE2E ఎన్క్రిప్షన్ స్వభావం కారణంగా, Rocket.Chat ఎన్క్రిప్టెడ్ రూమ్‌కు ప్రవేశం పొందలేకపోతే ప్రవేశం పొందగలదు.", - "E2E_encryption_reset_error": "E2E కీని రీసెట్ చేయడంలో దోషం!", - "E2E_encryption_reset_message": "మీరు లాగౌట్ అవుతారు.", - "E2E_encryption_reset_title": "రీసెట్ E2E కీ", - "E2E_How_It_Works_info1": "మీరు ఇప్పటికే ఎన్క్రిప్టెడ్ ప్రైవేట్ గ్రూప్స్ మరియు సరాసరి సందేశాలను సృష్టించవచ్చు. మీరు అస్తిత్వం కలిగిన ప్రైవేట్ గ్రూప్లను లేదా డైరెక్ట్ సందేశాలను కూడా ఎన్క్రిప్టెడ్ చేయవచ్చు.", - "E2E_How_It_Works_info2": "ఇది * ఎండ్ టు ఎండ్ ఎన్క్రిప్షన్ * కాదా, మీ సందేశాలను ఎన్కోడ్ / డీకోడ్ చేయడానికి కీలు అని ఉండదు. ఈ కారణంతో * మీరు ఇక్కడికి ఉపయోగించే మూలం ఇప్పటివరకు ప్రదానించిపెట్టబడదు.", - "E2E_How_It_Works_info3": "మీరు ముందు నడుపదిని కొత్తగా ఉంచవచ్చు, అది స్వయంగా ఒక E2E పాస్‌వర్డ్ యాటోమేటిక్‌గా సృష్టించబడుతుంది.", - "E2E_How_It_Works_info4": "మీరు అనుమతి పొందకపోతే, మీరు ప్రస్తుతం ఉపయోగించిన E2E పాస్‌వర్డ్ నుండి ఎంక్రిప్షన్ కీకి కొత్త పాస్‌వర్డ్ సెట్ చేయవచ్చు.", - "E2EE_password": "E2EE పాస్వర్డ్", - "Edit": "సవరించు", - "Edit_Avatar": "अवतार संपादित करें", - "Edit_Invite": "ఆహ్వానాన్ని సవరించు", - "Edit_Room_Photo": "గది ఫోటోను సవరించండి", - "Edit_Status": "స్థితిని సవరించు", - "Email": "ईमेल", - "Email_associated_with_another_user": "अन्य उपयोगकर्ता के साथ संबद्ध ईमेल", - "Email_must_be_a_valid_email": "ईमेल एक मान्य ईमेल होना चाहिए।", - "Email_Notification_Mode_All": "ప్రతి ఉల్లేఖం / DM", - "Email_Notification_Mode_Disabled": "అచ్చుకోవడం లేదు", - "Email_required": "ईमेल आवश्यक है।", - "Emoji_selector": "इमोजी चयनकर्ता", - "Empty": "ఖాళీ", - "Enable_Auto_Translate": "స్వయం-అనువదించడం అనుమతించండి", - "Enable_encryption_button_label": "గూఢీకరణను ప్రారంభించు", - "Enable_Message_Parser": "సందేశ పార్సర్‌ను సక్రియం చేయండి", - "Enable_writing_in_room": "{{roomName}}లో రచన అనుమతించండి", - "Enabled_E2E_Encryption_for_this_room": "ఈ రూమ్‌కు E2E ఎన్క్రిప్షన్ ప్రారంభించబడింది", - "Encrypted": "ఎన్క్రిప్టెడ్", - "Encrypted_message": "ఎన్క్రిప్టెడ్ సందేశం", - "encrypted_room_description": "ప్రాప్యతకు మీ అంతిమ నుండి అంతిమ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను నమోదు చేయండి.", - "encrypted_room_title": "{{room_name}} ఎన్క్రిప్ట్ చేయబడింది", - "Encryption_error_desc": "आपकी एन्क्रिप्शन कुंजी को डिकोड करना संभव नहीं था।", - "Encryption_error_title": "गलत पासवर्ड", - "End_to_end_encrypted_room": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ రూం", - "Enter_E2EE_Password": "E2EE పాస్‌వర్డ్ నమోదు చేయండి", - "Enter_E2EE_Password_description": "ఎన్‌క్రిప్ట్ చేయబడిన సందేశాలను వీక్షించడానికి మరియు పంపడానికి మీ E2EE పాస్‌వర్డ్‌ని నమోదు చెయ్యండి.\n\nప్రతీ పరికరంలో పాస్‌వర్డ్‌ని నమోదు చేయాల్సి ఉంటుంది.", - "Enter_manually": "మాన్యువల్‌గా నమోదు చేయండి", - "Error_Download_file": "ఫైల్ డౌన్‌లోడ్ చేస్తున్నప్పుడు తప్పిబాటు", - "Error_incorrect_password": "गलत पासवर्ड", - "Error_prefix": "त्रुटि: {{संदेश}}", - "Error_uploading": "అప్‌లోడ్ లోపం", - "error-action-not-allowed": "{{action}} అనుమతించబడినది కాదు", - "error-avatar-invalid-url": "చెల్లింపు అవతార URL: {{url}}", - "error-duplicate-channel-name": "{{room_name}} పేరుతో చానల్ ఉంది", - "error-email-send-failed": "ఇమెయిల్ పంపడంలో లోపం: {{message}}", - "error-file-too-large": "ఫైలు అత్యంత పెద్దది", - "error-init-video-conf": "వీడియో కాల్‌ను ప్రారంభించడంలో లోపం", - "error-invalid-email": "చెల్లని ఇమెయిల్ {{email}}", - "error-invalid-file-type": "చెల్లని ఫైలు రకం", - "error-invalid-password": "చెల్లని పాస్‌వర్డ్", - "error-invalid-room-name": "{{room_name}} చెల్లని కొరకు పేరు", - "error-invitation-reply-action": "ఆహ్వాన ప్రతిస్పందనను పంపించడంలో లోపం", - "error-not-allowed": "అనుమతి లేదు", - "error-not-permission-to-upload-file": "మీకు ఫైలులను అప్‌లోడ్ చేయడానికి అనుమతి లేదు", - "error-save-image": "చిత్రం సేవ్ చేయడంలో లోపం", - "error-save-video": "వీడియోను సేవ్ చేయడంలో లోపం", - "error-team-creation": "తప్పిదమైన టీమ్ సృష్టి", - "error-too-many-requests": "లోపం, చాలా అనురోధాలు. దయచేసి నిమిషాల ముందు వేగంగా చేసేందుకు ప్రయాసించండి. మీరు మరికొన్ని సెకన్లు కావాలనుకుంటే {{seconds}} సెకన్లు వేచి ఉంచాలి.", - "error-you-are-last-owner": "మీరు చివరి యజమాని. కొన్ని క్షణాలకు అనుమతించిన తరువాత గమనించండి.", - "Everyone_can_access_this_channel": "ప్రతిఒక్కరూ ఈ ఛానల్ను ప్రవేశించవచ్చు", - "Everyone_can_access_this_team": "ప్రతిఒక్కరూ ఈ టీమ్‌ను ప్రవేశించవచ్చు", - "Expanded": "విస్తృతం", - "Expiration_Days": "కాలాంతరం (రోజులు)", - "Favorite": "पसंदीदा", - "Favorites": "ఇష్టాలు", - "Federation_Matrix_room_description_disabled": "ఈ వర్క్‌స్పేస్‌లో ఫెడరేషన్ ప్రస్తుతం నిలిపివేయబడింది", - "Federation_Matrix_room_description_invalid_version": "ఈ గది పాత ఫెడరేషన్ వెర్షన్‌తో సృష్టించబడింది మరియు నిరవధికంగా నిరోధించబడింది.", - "Federation_Matrix_room_description_missing_module": "ఫెడరేటెడ్ గదులలో చేరడం ఒక ప్రీమియం ఫీచర్", - "Fetch_image_from_URL": "URL నుండి చిత్రాన్ని పొందండి", - "Field_are_required": "{{field}} आवश्यक हैं", - "Field_is_required": "{{field}} आवश्यक है।", - "File_description": "పిలుస్తూనే వివరణ", - "Files": "పిలుస్తూనే", - "FileUpload_Error": "ఫైల్ అప్లోడ్ లోపం", - "Filter": "फिल्टर", - "Finish_recording": "రికార్డింగ్ ముగించండి", - "Flags": "ध्वज", - "Follow_thread": "थ्रेड का पालन करें", - "Following": "అనుసరించుతుంది", - "Following_thread": "అనుసరించుకోవడానికి థ్రెడ్", - "Food_and_drink": "भोजन और पेय", - "For_your_security_you_must_enter_your_current_password_to_continue": "आपकी सुरक्षा के लिए, जारी रखने के लिए आपको अपने खाते का पासवर्ड दर्ज करना होगा।", - "Forgot_E2EE_password": "E2EE పాస్‌వర్డ్ మర్చిపోయారా?", - "Forgot_password": "మీ పాస్‌వర్డ్ మరచిపోయారా?", - "Forgot_password_If_this_email_is_registered": "ఈ ఇ-మెయిల్ నమోదు చేసినట్లు, మేము మీ పాస్‌వర్డ్‌ను రీసెట్ చేయడానికి సూచనలు పంపబడిపోతాము. మీరు చాలా తక్కువగా ఒక ఇ-మెయిల్ లభిస్తే, దయచేసి మరియువకాయ ప్రయాసించండి.", - "Forward": "అగ్రగామించండి", - "Forward_Chat": "చాట్‌ను అగ్రగామించండి", - "Forward_message": "సందేశాన్ని ముందుకు పంపు", - "Forward_to_department": "శాఖకు అగ్రగామించండి", - "Forward_to_user": "వాడికి అగ్రగామించండి", - "Full_name": "పూర్తి పేరు", - "Full_table": "పూర్తి పటం చూడండి కొరకు క్లిక్ చేయండి", - "Generate_New_Link": "కొత్త లింక్‌ను రూపొందించండి", - "Generate_new_password": "కొత్త పాస్‌వర్డ్ రూపొందించండి", - "Get_help": "సహాయం పొందండి", - "Get_link": "లింక్ పొందండి", - "Glossary_of_simplified_terms": "సరళీకృత పదాల పదకోశం", - "Group_by": "గ్రూప్ చేయండి", - "Has_left_the_team": "టీమ్ ను వదిలిపోయారు", - "Help": "సహాయం", - "Hide": "छुपाएं", - "Hide_notification": "నోటిఫికేషన్ దాచు", - "Hide_Password": "पासवर्ड छिपाएं", - "Hide_System_Messages": "వ్యవస్థ సందేశాలను దాచండి", - "Hide_type_messages": "{{type}} సందేశాలను దాచండి", - "How_It_Works": "ఇది ఎలా పని చేస్తుంది", - "I_Saved_My_E2E_Password": "నా E2E పాస్‌వర్డ్ నేను భద్రంగా ఉంచాను", - "Ignore": "పరిహరించాలి", - "Images": "చిత్రాలు", - "Images_uploaded": "చిత్రాలు అప్‌లోడ్ అయ్యాయి", - "In_app": "యాప్‌లో", - "In_App_Alert_info": "ఈ నోటిఫికేషన్‌లు {{app}} తెరిచి ఉన్నప్పుడు మీకు పంపబడతాయి", - "In_App_And_Desktop": "యాప్ మరియు డెస్క్టాప్", - "In_App_and_Desktop_Alert_info": "యాప్ తెరాసినప్పటిని తెరాచినప్పటిని మేరకు పొడిస్తుంది, మరియు డెస్క్టాప్‌లో నోటిఫికేషన్‌ను ప్రదర్శిస్తుంది", - "In_App_Notification": "యాప్‌లోని నోటిఫికేషన్", - "Incoming_call_from": "నుండి రాబోయే కాల్", - "insert_Avatar_URL": "ఇక్కడ చిత్ర URL ను చేర్చండి", - "Insert_Join_Code": "చేరండి కోడ్ చేరించండి", - "Invalid_code": "अमान्य कोड", - "Invalid_or_expired_invite_token": "అమాయక లేదా అవధిచుక్తాయిన అమర్పు టోకెన్", - "Invalid_server_version": "మీరు కనెక్ట్ చేయడానికి ప్రయాసిస్తున్న వర్క్‌స్పేస్ యొక్క ఒక అవసరం లేదు: {{currentVersion}}.\n\nమేము వినియోగించే అప్లికేషన్ యొక్క ఆవశ్యకానికి అయితే మేము అవసరం ఉన్న సంస్కరణం: {{minVersion}}", - "Invalid_URL": "अमान्य URL", - "Invalid_workspace_URL": "చెల్లని వర్క్‌స్పేస్ URL", - "Invite_Link": "ఆమంత్రణ లింక్", - "Invite_users": "వాడికి ఆమంత్రణం పంపండి", - "Invited": "ఆహ్వానించబడింది", - "invited_room_description_channel": "మీరు ఆహ్వానించబడ్డారు", - "invited_room_description_dm": "మీరు సంభాషణ కలిగి ఉండడానికి ఆహ్వానించబడ్డారు", - "invited_room_title_channel": "{{room_name}} లో చేరడానికి ఆహ్వానం", - "invited_room_title_dm": "సందేశ అభ్యర్థన", - "IP": "IP", - "is_typing": "టైపు చేస్తోంది", - "Jitsi_authentication_before_making_calls": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి.", - "Jitsi_authentication_before_making_calls_admin": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల లోపాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి. ప్రాధికృత వీడియో కాల్లకు ఇన్‌ఫార్మేషన్ను నవీకరించడానికి, మీరు ప్రాధికృత యాప్‌ను నవీకరించవచ్చు.", - "Jitsi_authentication_before_making_calls_ask_admin": "Jitsi మరియు అదికాకాలే అవసరాలిగా ఉన్నాయని నమ్ముకున్నదిని వేటికి అడగించడానికి, వార్క్‌స్పేస్ యాడ్మిన్ సహాయానికి అడగండి.", - "Jitsi_may_require_authentication": "Jitsi పరిశోధన అవసరం ఉండవచ్చు", - "Join": "చేరండి", - "Join_Code": "చేరండి కోడ్", - "Joined": "చేరారు", - "Jump_to_last_message": "अंतिम संदेश पर जाएं", - "Just_invited_people_can_access_this_channel": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ ఛానల్‌కు ప్రవేశించవచ్చు", - "Just_invited_people_can_access_this_team": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ టీమ్‌కు ప్రవేశించవచ్చు", - "Label_Input_Two_Factor_Code": "कोड", - "Label_Input_Two_Factor_Password": "पासवर्ड", - "Language": "భాష", - "last_message": "చివరి సందేశం", - "Last_owner_team_room": "మీరు ఈ ఛానల్‌కు చివరి యజమాని. మీరు టీమ్ ను విడిచిపోతే, ఛానల్ టీమ్ లో ఉంటుంది కాని మీరు వాడు బాహ్యాంతరం నుండి అదనపుడు నిర్వహిస్తారు.", - "Last_updated": "अंतिम बार अपडेट किया गया", - "Last_updated_at": "अंतिम बार अद्यतन अपडेट किया गया", - "Last_updated_on": "आखिरी बार अपडेट किया गया:", - "last-owner-can-not-be-removed": "చివరి యజమానిని తీసివేయలేరు", - "Leader": "నాయకుడు", - "Learn_more": "మరింతగా అర్థం చేయండి", - "Leave": "వదిలిపోకూడని", - "leave": "వదిలిపోకూడని", - "Leave_Team": "టీమ్ ను విడిచిపోతున్నారు", - "leaving_room": "గడిచిపోవడం", - "Left_The_Room_Successfully": "విజయవంతంగా కింద రాను", - "Left_The_Team_Successfully": "సఫలంగా టీమ్ ను విడిచారు", - "Legal": "చట్టం", - "License": "లైసెన్స్", - "Light": "లైట్", - "Livechat_transfer_return_to_the_queue": "చాట్ను క్యూను తిరిగి ఇస్తే", - "Load_More": "మరిన్ని లోడ్ చేయండి", - "Load_Newer": "కొత్తగా లోడ్ చేయండి", - "Load_Older": "పాతకాలం లోడ్ చేయండి", - "Loading": "लोड हो रहा है", - "Local_authentication_auto_lock_1800": "30 నిమిషాల తరువాత", - "Local_authentication_auto_lock_300": "5 నిమిషాల తరువాత", - "Local_authentication_auto_lock_3600": "1 గంట తరువాత", - "Local_authentication_auto_lock_60": "1 నిమిషాల తరువాత", - "Local_authentication_auto_lock_900": "15 నిమిషాల తరువాత", - "Local_authentication_biometry_fallback": "పాస్‌కోడ్ ఉపయోగించండి", - "Local_authentication_biometry_title": "ధ్యానం పెట్టినవారు", - "Local_authentication_change_passcode": "పాస్‌కోడ్ను మార్చండి", - "Local_authentication_facial_recognition": "ముఖంలో గుర్తింపు", - "Local_authentication_fingerprint": "వంగ్ల గుర్తింపు", - "Local_authentication_info": "గమనించండి: మీరు పాస్‌కోడ్ను మరియుప్పటికేవి మరోసారి విసర్జించాలిపోతుంది, కాబట్టి అప్లికేషన్ నుంచి తొలగించాలిపోతుంది.", - "Local_authentication_unlock_option": "పాస్‌కోడ్ తో అన్లాక్ చేయండి", - "Local_authentication_unlock_with_label": "{{label}} తో అన్లాక్ చేయండి", - "Log_analytics_events": "లాగ్ విశ్లేషణ ఈవెంట్లు", - "Logged_out_by_server": "మీరు పనితనం ద్వారా లాగౌట్ చేయబడింది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", - "Logged_out_of_other_clients_successfully": "ఇతర గ్రాహకాల నుండి యథార్థంగా లాగౌట్ అవుతున్నారు", - "Logging_out": "లాగౌట్ అవుతోంది.", - "Login": "లాగిన్", - "Login_error": "మీ రుచియవి తిరిగి చూడబడలేదు! దయచేసి మళ్ళీ ప్రయత్నించండి.", - "Logout": "లాగౌట్", - "Logout_failed": "లాగౌట్ అయిపోయింది!", - "Logout_from_other_logged_in_locations": "ఇతర సెట్ అంగాల నుండి లాగౌట్ చేయండి", - "Mark_as_unread": "అచ్చుకోండి", - "Mark_as_unread_Info": "అచ్చుకోవడానికి సందేశాలు ఉన్నప్పుడు కొనసాగవచ్చు", - "Mark_read": "मार्क पढ़ें", - "Mark_unread": "अवाचन चिह्नित करें", - "Markdown_tools": "मार्कडाउन उपकरण", - "Max_number_of_users_allowed_is_number": "అనుమతించబడిన వాడకు గరిష్ఠ సంఖ్య {{maxUsers}} ఉంది", - "Max_number_of_uses": "ఉపయోగాల గరిష్ఠ సంఖ్య", - "Max_Repeating_Characters": "अधिकतम {{quantity}} दोहराए जाने वाले वर्ण", - "Media_auto_download": "మీడియా ఆటో-డౌన్‌లోడ్", - "Members": "సభ్యులు", - "members": "సభ్యులు", - "Mention_user": "उपयोगकर्ता का उल्लेख करें", - "Mentions": "స్మరణలు", - "Mentions_With_@_Symbol": "@ चिह्न के साथ उल्लेख", - "Menu": "मेनू", - "Message": "సందేశం", - "message": "సందేశం", - "Message_actions": "సందేశ చర్యలు", - "Message_composer_Send_to_channel": "ఛానల్కు పంపండి", - "Message_has_been_shared": "సందేశం పంచుకుంది", - "Message_HideType_added_user_to_team": "\"యూజర్ టీమ్‌కు చేర్చబడింది\" సందేశాలను దాచు", - "Message_HideType_au": "వాడు చేర్చబడినాడు", - "Message_HideType_mute_unmute": "వాడు ధ్వనిని నిలిపించాడు / తిరగాడు", - "Message_HideType_r": "ఛానల్ పేరు మారింది", - "Message_HideType_removed_user_from_team": "\"యూజర్ టీమ్ నుండి తీసివేయబడింది\" సందేశాలను దాచు", - "Message_HideType_rm": "సందేశం తీసిపోయింది", - "Message_HideType_room_archived": "రూమ్ ఆర్చైవ్ అయ్యింది", - "Message_HideType_room_unarchived": "రూమ్ ఆర్చైవ్ కాదు", - "Message_HideType_ru": "వాడు తీసిపోయినాడు", - "Message_HideType_subscription_role_added": "వ్యాసానికి హక్కు స్థాపించబడింది", - "Message_HideType_subscription_role_removed": "హక్కు లేకపోతే", - "Message_HideType_uj": "వాడు చేరిపోయినాడు", - "Message_HideType_ujt": "\"యూజర్ జాయిండ్ టీమ్‌లో\" సందేశాలను దాచు", - "Message_HideType_ul": "వాడు విడిచిపోయినాడు", - "Message_HideType_ult": "\"యూజర్ లేవేల్ టీమ్‌ను విడిచబడింది\" సందేశాలను దాచు", - "Message_HideType_user_added_room_to_team": "\"యూజర్ రూమ్ టీమ్‌కు చేర్చబడింది\" సందేశాలను దాచు", - "Message_HideType_user_converted_to_channel": "\"యూజర్ టీమ్ ను చానల్ కి మార్చారు\" సందేశాలను దాచు", - "Message_HideType_user_converted_to_team": "\"యూజర్ చానల్ ను టీమ్‌కు మార్చారు\" సందేశాలను దాచు", - "Message_HideType_user_deleted_room_from_team": "\"యూజర్ రూమ్ ని టీమ్ నుండి తొలగించారు\" సందేశాలను దాచు", - "Message_HideType_user_removed_room_from_team": "\"యూజర్ రూమ్ ని టీమ్ నుండి తీసివేయబడింది\" సందేశాలను దాచు", - "Message_HideType_ut": "వాడు చర్చలో చేరిపోయినాడు", - "Message_HideType_wm": "స్వాగతం", - "Message_Ignored": "సందేశం పరిహరించబడింది. ప్రదర్శించడానికి ప్రాణాలు నొక్కండి.", - "Message_removed": "సందేశం తీసివేయబడింది", - "Message_Reported": "సందేశం నివేదిస్తున్నాం", - "Message_starred": "సందేశం నకిలీయం చేసినది", - "Message_translated_into_idiom": "సందేశం {{idiom}} భాషలోకి అనువదించబడింది", - "Message_unstarred": "సందేశం నకిలీయం తీసివేయబడింది", - "Message_was_not_read": "संदेश नहीं पढ़ा गया था।", - "Message_was_read": "संदेश पढ़ा गया था।", - "messages": "సందేశాలు", - "Missed_call": "మిస్డ్ కాల్", - "missing_room_e2ee_description": "గది కోసం ఎన్క్రిప్షన్ కీలు నవీకరించబడాలి, దీని జరగాలంటే మరొక గది సభ్యుడు ఆన్లైన్‌లో ఉండాలి.", - "missing_room_e2ee_title": "కొన్ని క్షణాల్లో తిరిగి తనిఖీ చేయండి", - "Moderator": "మాడరేటర్", - "More": "अधिक", - "move": "తరలించుకో", - "Move_Channel_Paragraph": "ఛానల్ని టీమ్ కంటెక్స్ట్‌లో ప్రవేశించటం అనేది ఈ ఛానల్లను టీమ్‌కు చేర్చడం అనుకూలంగా ఉండండి, కాని టీమ్ సభ్యులు కాని తమ ఛానల్ యొక్క సభ్యులవిలేనంటే, కాని ఛానల్ సభ్యులకు ఇది అందిస్తారు. \n\nఅన్ని ఛానల్ నిర్వహణ అంగీకరించిన ఈ ఛానల్ యొక్క యజమానులు బాహ్యాంతరం నిర్వహిస్తారు. \n\nటీమ్ సభ్యులు మరియు టీమ్ యజమానులు, ఛానల్ సభ్యులు కాని దరారుగా ఛానల్ యొక్క కంటెంట్‌కు ప్రవేశించలేరు. \n\nదయచేసి గమనించండి టీమ్ యజమానులు సభ్యులను ఛానల్ నుండి తీసివేయడానికి అనుమతి ఉంది.", - "Move_to_Team": "టీమ్‌కు తరలించండి", - "Move_to_Team_Warning": "ఈ ప్రవృత్తి గురించి ముందుకు చదవిన నిర్దేశాలను చదవాలనుకుంటే, మీరు ఇప్పుడు ఈ ఛానల్‌ను ఎంచుకోవచ్చారా?", - "moving_channel_to_team": "ఛానల్ టీమ్‌కు తరలించండి", - "Mute": "నిషేధించు", - "muted": "నిషేధించబడింది", - "N_channels": "{{n}} ఛానల్‌లు", - "N_people_reacted": "{{n}} వ్యక్తులు ప్రతిసారి ప్రతిక్రియించారు", - "N_Selected_members": "{{n}} ఎంచుకోబడిన సభ్యులు", - "N_users": "{{n}} వాడుకరు", - "Name": "పేరు", - "Name_required": "नाम आवश्यक है।", - "Never": "ఎప్పటికప్పుడు", - "New_chat_transfer": "క్రొత్త చాట్ అంచనా: {{agent}} చాట్ను క్యూనుకు తిరిగి పంపించాడు", - "New_Message": "కొత్త సందేశం", - "New_Password": "కొత్త పాస్‌వర్డ్", - "Next": "తరువాత", - "Nickname": "ఉపనామం", - "No_available_agents_to_transfer": "స్థితిలో ఉన్న ఎజెంట్లు లేవు", - "No_canned_responses": "యావత్తులు క్యాన్డ్ రిస్పాన్సెలు లేవు", - "No_channels_in_team": "ఈ చర్చలో చానల్స్ లేవు", - "No_discussions": "సంవాదాలు లేవు", - "No_files": "ఏ కింద లేవు", - "No_label_provided": "{{label}} అంగడా ఇవ్వలేదు.", - "No_limit": "అమర్పు లేదు", - "No_match_found": "సరిపోలి అంశం కనబడలేదు.", - "No_members_found": "సభ్యులు దొరకలేదు", - "No_mentioned_messages": "స్మరణలేని సందేశాలు", - "No_Message": "సందేశం లేదు", - "No_messages_yet": "ఇంకా సందేశాలు లేవు", - "No_pinned_messages": "పిన్ చేసిన సందేశాలు లేవు", - "No_Reactions": "ప్రతిక్రియలేవు", - "No_Read_Receipts": "చదవడానికి సాక్షాత్కారాలేవు", - "No_results_found": "ఫలితాలు దొరకలేదు", - "No_rooms_found": "గదులు కనుగొనబడలేదు", - "No_starred_messages": "నకిలీయం చేసిన సందేశాలు లేవు", - "No_threads": "ఏ థ్రెడ్స్ లేవు", - "No_threads_following": "మీరు అనుసరిస్తున్న ఎవరూ లేవు", - "No_threads_unread": "చదవనిచ్చిన ఏ థ్రెడ్స్ లేవు", - "no-active-video-conf-provider-body": "వార్క్‌స్పేస్ యాడ్మిన్ మొదలు కాన్ఫరెన్స్ కాల్ విశేషాలు ఏర్పాట్లో ఉన్నాయి.", - "no-active-video-conf-provider-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", - "no-videoconf-provider-app-body": "వార్క్‌స్పేస్ అడ్మిన్ ద్వారా రాకెట్.చాట్ మార్కెట్‌లో కాన్ఫరెన్స్ కాల్ యాప్స్ ఇన్స్టాల్ చేయవచ్చు.", - "no-videoconf-provider-app-header": "కాన్ఫరెన్స్ కాల్ అంగడి లేదు", - "Not_RC_Server": "మీ వర్క్‌స్పేస్ అడ్మిన్‌ను సంప్రదించండి లేదా Rocket.Chat వర్క్‌స్పేస్ ఆహ్వానానికి మీ ఇమెయిల్ ఇన్‌బాక్స్‌ని శోధించండి.", - "Nothing": "ఏదో కాదు", - "Nothing_to_save": "ఉంది ఏమి సేవ్ చేయాలేదు!", - "Notification_Preferences": "నోటిఫికేషన్ అభిరుచులు", - "Notifications": "నోటిఫికేషన్‌లు", - "Notifications_vibrate_from_new_messages": "కొత్త సందేశాల కోసం వైబ్రేట్", - "Notify_active_in_this_room": "ఈ గదిలో సక్రియంగా ఉన్న వాడులను నవోదయించు", - "Notify_all_in_this_room": "ఈ గదిలో అన్నివారినీ నవోదయించు", - "Objects": "वस्तुएँ", - "Off": "ఆఫ్", - "Offline": "ऑफ़लाइन", - "Omnichannel": "ఒమ్నిచానెల్", - "Omnichannel_enable_alert": "మీరు ఒమ్నిచానెల్‌లో అందుబాటులేదు. మీరు అందుబాటునారా?", - "Omnichannel_on_hold_chat_resumed": "ఆఫ్‌లోడ్ లోని చాట్ పునఃప్రారంభించబడింది: {{comment}}", - "Omnichannel_placed_chat_on_hold": "చాట్ ఆఫ్‌లోడ్: {{comment}}", - "Omnichannel_queue": "ఆమ్నిచానల్ క్యూ", - "On_hold_Livechats": "ఆఫ్‌లోడ్ లోని లైవ్చాట్‌లు", - "Onboarding_agree_terms": "కొనసాగండి, మీరు రాకెట్.చాట్ అంగీకరిస్తున్నారు", - "Onboarding_less_options": "తక్కువ ఎంపికలు", - "Onboarding_more_options": "మరికొన్ని ఎంపికలు", - "Onboarding_subtitle": "దల సహయాకాంక్ష", - "One_result_found": "ఒక ఫలితం కనుగొనబడింది।", - "Online": "ఆన్‌లైన్", - "Only_authorized_users_can_write_new_messages": "కేవలం అనుమతించబడిన వాడులు కొత్త సందేశాలను రాయగలరు", - "Oops": "అయ్యో!", - "Open_Livechats": "లైవ్చాట్‌లు ప్రగతిలో", - "Open_servers_history": "सर्वर इतिहास खोलें", - "Open_sidebar": "साइडबार खोलें", - "Open_your_authentication_app_and_enter_the_code": "మీ ప్రమాణీకరణ అనువాద అప్లికేషన్ తెరిచండి మరియు కోడ్ నమోదు చేయండి.", - "OR": "లేదా", - "OS": "ఆపరేటింగ్ సిస్టమ్", - "Overwrites_the_server_configuration_and_use_room_config": "సర్వర్ ఆకృతిని మరియు గది ఆకృతిని విధానం చేయండి", - "Owner": "యజమాని", - "Parent_channel_or_group": "ప్రధాన ఛానల్ లేదా గ్రూప్", - "Passcode_app_locked_subtitle": "{{timeLeft}} సెకన్లలో మళ్ళీ ప్రయాసం చేయండి", - "Passcode_app_locked_title": "అనువాదం చేయబడింది", - "Passcode_choose_confirm_title": "మీ కొత్త పాస్‌కోడ్ను ధృవీకరించండి", - "Passcode_choose_error": "పాస్‌కోడ్‌లు సరిపోలడం లేదు. మళ్ళీ ప్రయాసం చేయండి.", - "Passcode_choose_force_set": "అడ్మిన్ ద్వారా అవసానంగా అవసానంగా సెట్ చేయబడింది", - "Passcode_choose_title": "మీ కొత్త పాస్‌కోడ్ను ఎంచుకోండి", - "Passcode_enter_title": "మీ పాస్‌కోడ్ నమోదు", - "Password": "పాస్‌వర్డ్", - "Password_Tip_Error": "शर्त पूरी नहीं हुई।", - "Password_Tip_Success": "शर्त पूरी हुई।", - "Passwords_do_not_match": "पासवर्ड मेल नहीं खाते", - "Pause": "विराम", - "Permalink_copied_to_clipboard": "పర్మాలింక్ కోపీ అయ్యింది!", - "Person_or_channel": "వ్యక్తి లేదా చానల్", - "Phone": "ఫోన్", - "Phone_state_permission_message": "మీరు ఇప్పటికే ఫోన్ లేదా VoIP కాల్‌లో ఉన్నారో లేదో Rocket.Chat గుర్తించడానికి ఇది సహాయపడుతుంది, తద్వారా ఇన్‌కమింగ్ కాల్‌లు సరిగ్గా నిర్వహించబడతాయి.", - "Phone_state_permission_title": "ఫోన్ స్థితి యాక్సెస్‌ను అనుమతించండి", - "Pin": "పిన్", - "Pinned": "పిన్ చేసినది", - "Pinned_a_message": "ఒక సందేశాన్ని పించింది:", - "Place_chat_on_hold": "చాట్‌ను ఆఫ్లోడ్ చేయండి", - "Play": "खेलें", - "Playback_speed": "प्लेबैक स्पीड", - "Please_add_a_comment": "దయచేసి ఒక వ్యాఖ్యను చేర్చండి", - "Please_enter_your_password": "దయచేసి మీ పాస్‌వర్డ్ నమోదు చేయండి", - "Please_wait": "దయచేసి ఎక్కడ వుంటే ఉంచుకోండి.", - "Preferences": "అభిరుచులు", - "Presence_Cap_Warning_Description": "కార్యాలయంలో కనెక్షన్లు అంతర్గత వాడాల పరిమాణానికి పరిమితమయినది, కాబట్టి వాడాల స్థితిని చరిత్రానుబంధించడానికి సేవ అచ్చుమాటవంతం. ఇది కొన్నిసేపటికీ వార్క్‌స్పేస్ అమర్చాయిన అంగుళాలో మాన్యువల్ చేయబడవచ్చు.", - "Presence_Cap_Warning_Title": "వాడకు స్థితి అస్థాయితంగా అచ్చుమాట", - "Privacy_Policy": " గోప్యాచరణ విధానం", - "Private": "ప్రైవేట్", - "Private_channel": "निजी चैनल", - "Private_team": "निजी टीम", - "Processing": "प्रोसेस कर रहा है।", - "Profile": "ప్రొఫైల్", - "Profile_saved_successfully": "ప్రొఫైల్ యశస్విగా సేవ్ చేయబడింది!", - "Public": "పబ్లిక్", - "Public_channel": "सार्वजनिक चैनल", - "Push_Notifications": "పుష్ నోటిఫికేషన్లు", - "Push_Notifications_Alert_Info": "ఈ నోటిఫికేషన్లు మీకు అప్లికేషన్ ప్రారంభించలేకపోతే అందివేయబడింది", - "Queued_chats": "క్యూ చాట్‌లు", - "Quote": "ఉదాహరణ", - "React_with_emojjname": "{{emojiName}} के साथ प्रतिक्रिया दें", - "Reactions_are_disabled": "ప్రతిక్రియలు నిషేధించబడినవి", - "Reactions_are_enabled": "ప్రతిక్రియలు అనుమతించబడినవి", - "Read_External_Permission": "మీడియా అనుమతి", - "Read_External_Permission_Message": "రాకెట్.చాట్ మీ పరికరాల్లో ఫోటోలను, మీడియాను మరియు ఫైళ్లను ప్రవేశించాలి", - "Read_Only": "కేవలం చదవడానికి", - "Read_only_hint": "ఛానెల్ యజమానులు మాత్రమే క్రొత్త సందేశాలను పంపగలరు", - "Read_Receipt": "చదవడానికి సాక్షాత్కారం", - "Receive_Group_Mentions": "గ్రూప్ స్మరణలు స్వీకరించు", - "Receive_Group_Mentions_Info": "@all మరియు @here స్మరణలు స్వీకరించు", - "Receive_Notification": "నోటిఫికేషన్ స్వీకరించండి", - "Receive_notifications_from": "{{name}} నుండి నోటిఫికేషన్‌లు స్వీకరించండి", - "Recently_used": "हाल ही में उपयोग किया गया", - "Record_audio_message": "ऑडियो संदेश रिकॉर्ड करें", - "Register": "నమోదు", - "Registration_Succeeded": "నమోదు విజయవంతంగా చేయబడింది!", - "reject": "తిరస్కరించు", - "Remove": "తొలగించండి", - "remove": "తొలగించండి", - "Remove_from_room": "కొరకున్ని తీసివేయండి", - "Remove_from_Team": "టీమ్ నుండి తీసివేయండి", - "Remove_from_workspace_history": "कार्यस्थान इतिहास से निकालें।", - "Remove_Member": "సభ్యుడను తీసివేయండి", - "Remove_Team_Room_Warning": "మీరు ఈ ఛానల్‌ను టీమ్ నుండి తీసివేయాలా?", - "Remove_User_Team_Channels": "యూజర్ ను తీసివేయబడే ఛానల్‌లను ఎంచుకోండి.", - "Removed__roomName__from_the_team": "#{{roomName}} ని ఈ టీమ్ నుండి తీసివేసారు", - "Removed__username__from_the_team": "@{{userRemoved}} ని ఈ టీమ్ నుండి తీసివేసారు", - "Removed_user_as_role": "{{user}} నియమాలను {{role}} గించినారు", - "removing_team": "టీమ్ నుండి తీసివేస్తోంది", - "Removing_user_from_this_team": "మీరు {{user}} ను ఈ టీమ్ నుండి తీసివేస్తున్నారు", - "replies": "సమాధానాలు", - "Reply": "ప్రతిసారించండి", - "reply": "సమాధానం", - "Reply_in_direct_message": "నిర్దేశ సందేశంలో ప్రతిస్థానించండి", - "Reply_in_Thread": "థ్రెడ్లో సమాధానం", - "Report": "నివేదించండి", - "Report_reason_required": "कारण आवश्यक है।", - "Required": "అవసరమైనది", - "Resend": "మళ్ళీ పంపించు", - "RESET": "రీసెట్", - "Reset_E2EE_Password": "E2EE పాస్‌వర్డ్‌ను పునస్ధాపించండి", - "Reset_E2EE_Password_Description": "రిసెట్ చేయడం ద్వారా మీరు లాగ్ అవుట్ అవుతారు మరియు తిరిగి లాగిన్ అయినప్పుడు కొత్త E2EE పాస్‌వర్డ్ రూపొందించబడుతుంది.\n\nఆన్‌లైన్ సభ్యులు ఉన్న ఎన్క్రిప్ట్ చేయబడిన గదులకు మీరు మళ్లీ ప్రాప్తిని పొందుతారు, కాని సభ్యులు లేనివారికి మాత్రం ప్రాప్తి పొందలేరు.", - "Reset_password": "పాస్‌వర్డ్ను రీసెట్ చేయండి", - "resetting_password": "పాస్‌వర్డ్ను రీసెట్ చేస్తోంది", - "Resume": "క్రింద పోవడానికి", - "Return_to_waiting_line": "వేచివేచికలకు తిరిగి వెళ్ళండి", - "Review_app_desc": "{{store}}లో మాకు 5 నకలు ఇవ్వండి", - "Review_app_later": "తరువాత", - "Review_app_no": "కాదు", - "Review_app_title": "ఈ యాప్ నేను ఆనందిస్తున్నానా?", - "Review_app_unable_store": "{{store}} తెరవలేకపోయింది", - "Review_app_yes": "అవును!", - "Review_message": "समीक्षा संदेश", - "Review_this_app": "ఈ యాప్‌ను సమీక్షించండి", - "Rocket_Chat_Documentation": "Rocket.Chat డాక్యుమెంటేషన్", - "Roles": "పాత్రలు", - "room_allowed_reactions": "గదిలో ప్రతిక్రియలను అనుమతించారు", - "room_archived": "అభిలోఖిత కొరకు ఉన్నది", - "room_avatar_changed": "గది అవాటార్ మారింది", - "room_changed_topic_to": "గది టాపిక్‌ను మార్చారు: {{topic}}", - "room_changed_type": "గది రకాన్ని మార్చారు {{type}}", - "room_disallowed_reactions": "గదిలో ప్రతిక్రియలను అనుమతించలేదు", - "Room_Info": "గది సమాచారం", - "Room_Info_Edit": "గది సమాచారం సవరించు", - "Room_name_changed_to": "గది పేరును మార్చారు: {{name}}", - "Room_not_found": "కొన్ని కారణాలతో కమ్మిట్ చేయబడినవి లేవు", - "Room_Password": "గది పాస్‌వర్డ్", - "room_removed_read_only_permission": "గదిలో పఠనాధారిత అనుమతిని తొలగించారు", - "room_set_read_only_permission": "గదిని కేవలం చదవడానికి రూపొందించారు", - "room_unarchived": "అభిలోఖిత నుండి తీసుకొనబడింది", - "room-name-already-exists": "కొనసాగించబడిన కొత్త కొరకు", - "Rooms_With_#_Symbol": "# चिन्ह वाले कमरे", - "SAVE": "భద్రపరచు", - "Save": "భద్రపరచండి", - "Save_Changes": "మార్చిన మార్పులను భద్రపరచండి", - "Save_Your_E2E_Password": "మీ E2E పాస్‌వర్డ్‌ను భద్రపరచండి", - "Save_Your_Encryption_Password": "మీ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను భద్రపరచండి", - "Save_Your_Encryption_Password_info": "గమనించండి, మీ పాస్‌వర్డ్ కనిపించితే, అదనపు పొందడానికి ఎటువంటి మార్గం లేదు మరియు మీ సందేశాలకు ప్రవేశం కనిపిస్తుంది.", - "Save_Your_Encryption_Password_warning": "ఈ పాస్‌వర్డ్ ఎక్కడా భద్రపరచబడినది కాదు, అదనపు ఏకాధికారంగా ఇతర కడాకాలాను భద్రపరచండి.", - "Saved": "భద్రపరచబడింది", - "saved_to_gallery": "గ్యాలరీకి భద్రపరచబడింది", - "saving_preferences": "అభిరుచులను భద్రపరచారు", - "saving_profile": "ప్రొఫైల్‌ను భద్రపరచారు", - "saving_settings": "సెట్టింగులను భద్రపరచారు", - "Screen_lock": "స్క్రీన్ లాక్", - "Search": "వెతుకు", - "Search_by": "ద్వారా వెతుకు", - "Search_emoji": "ఎమోజిని వెతుకు", - "Search_global_users": "ప్రపంచవ్యాప్తంగా వాడుకరులను వెతుకు", - "Search_global_users_description": "మీరు ఆన్‌చర్చలోని అన్యాన్య కంపెనీలు లేదా పనుల కిందరా ఏ వాడుకరిని వెతుకుతున్నట్లు ఉంటే, మీరు ఇదను ఎంచుకోవచ్చు.", - "Search_Messages": "సందేశాలను వెతుకు", - "Search_messages": "సందేశాలను శోధించండి", - "Search_Results_found": "{{count}} ఫలితాలు కనుగొనబడ్డాయి।", - "Searching": "శోధిస్తోంది", - "Security_and_privacy": "భద్రత మరియు గోప్యత", - "Select": "ఎంచుకోండి", - "Select_a_Channel": "చానల్‌ను ఎంచుకోండి", - "Select_a_Department": "ఒక శాఖను ఎంచుకోండి", - "Select_a_User": "ఒక వాడుకరిని ఎంచుకోండి", - "Select_an_option": "ఒక ఐచేస్టు ఎంచుకోండి", - "Select_channels_to_delete": "ఇది పునఃస్థాపించబడదు. మీరు టీమ్‌ను తొలగిస్తే, అన్ని చాట్ విషయాలు మరియు కాన్ఫిగరేషన్ తొలగిపోవడం అంటే. \n\nమీరు తొలగించలేని ఛానల్‌లను ఎంచుకోండి. కాని మీరు భర్తికి రానివారింటిగా అందుబాటులో ఉంటారు. ప్రజా ఛానల్‌లు ఇక కూడా ప్రజాకు కలిగి ఉండవచ్చు.", - "Select_emoji_reaction": "प्रतिक्रिया के लिए इमोजी चुनें", - "Select_Members": "సభ్యులను ఎంచుకోండి", - "Select_Server": "పనితనం ఎంచుకోండి", - "Select_tags": "ట్యాగ్‌లను ఎంచుకోండి", - "Select_Team": "టీమ్ ఎంచుకోండి", - "Select_Team_Channels": "మీరు విడిచిపోవచ్చే టీమ్ ఛానల్‌లను ఎంచుకోండి.", - "Select_Team_Channels_To_Delete": "తొలగించాల్సిన టీమ్ ఛానల్‌లను ఎంచుకోండి, మీరు ఎంచుకోలేనివి వర్క్‌స్పేస్‌కు తరలబడతాయి. \n\nప్రజా ఛానల్‌లు ప్రజలకు ప్రజావాడుగా మరియు ప్రతివాడికి దరారుగా కనిపిస్తాయి.", - "Select_Uploaded_Image": "ఎంపడిన చిత్రాన్ని ఎంచుకోండి", - "Select_Users": "వాడుకరులను ఎంచుకోండి", - "Send": "పంపించండి", - "Send_audio_message": "ऑडियो संदेश भेजें", - "Send_crash_report": "క్రాష్ నివేదించండి", - "Send_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపండి", - "Send_message": "సందేశాన్ని పంపండి", - "Send_to": "పంపండి...", - "sending_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపబడుతోంది", - "Sending_to": "పంపిస్తోంది", - "Server": "పనితనం", - "Server_version": "పనితనం: {{version}}", - "Set_new_password": "नया पासवर्ड सेट करें", - "Set_username_subtitle": "ఇతరులకు మీరు సందేశాల్లో మీరుని స్మరించడానికి వాడుకరి పేరు ఉపయోగిస్తారు", - "Settings": "సెట్టింగులు", - "Settings_succesfully_changed": "సెట్టింగులను విజయవంతంగా మార్చారు!", - "Share": "భాగస్వామ్యం", - "Share_Link": "లింక్‌ను భాగస్వామ్యం చేయండి", - "Share_this_app": "ఈ యాప్‌ను భాగస్వామ్యం చేయండి", - "Sharing": "భాగస్వామ్యం", - "Shortcut": "షార్ట్‌కట్", - "Show_badge_for_mentions": "ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించు", - "Show_badge_for_mentions_Info": "కేవలం సర్వర్ల ఉపయోగించిన ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించాలి", - "Show_more": "మరింతగా చూపండి..", - "Show_Password": "पासवर्ड दिखाएं", - "Sign_Up": "నమోదు చేయండి", - "Skip": "స్కిప్", - "Smileys_and_people": "स्माइली और लोग", - "Sort_by": "సార్టు చేయండి", - "Sound": "ధ్వని", - "Star": "స్టార్", - "Starred": "స్టార్ చేసినవి", - "Start_a_call": "ఒక కాల్ ప్రారంభించండి", - "Start_a_Discussion": "చర్చాను ప్రారంభించండి", - "Started_call": "{{userBy}} ద్వారా కాల్ ప్రారంభించబడింది", - "Started_discussion": "ఒక చర్చను ప్రారంభించారు:", - "Status_saved_successfully": "స్థితి విజయవంతంగా భద్రపరచబడింది!", - "Status_text_limit_exceeded": "{{सीमा}} अक्षर की सीमा पार हो गई", - "Supported_versions_expired_description": "వార్క్‌స్పేస్ యాడ్మిన్ మొదటిగా మొబైల్ మరియు డెస్క్టాప్ యాప్‌ల నుండి ప్రవేశాన్ని మళ్లీ ప్రారంభించడానికి వార్క్‌స్పేస్‌ను నవీకరించాలి.", - "Supported_versions_expired_title": "{{workspace_name}} అసమర్థిత రాకెట్.చాట్ ఒరిజినల్ వెర్షన్‌ను పరిచయించిపోయింది", - "Supported_versions_warning_update_required": "నవీకరణ అవసరం", - "Symbols": "प्रतीकಗಳು", - "Table": "పటం", - "Tags": "ట్యాగ్‌లు", - "Take_a_photo": "ఫోటో తీసుకో", - "Take_a_video": "వీడియో తీసుకో", - "Take_it": "తీసుకో!", - "Team": "టీమ్", - "Team_hint_encrypted": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ టీమ్. ఎన్క్రిప్టెడ్ టీమ్‌తో శోధన పనులు పనిస్తాయి మరియు అధిసూచనలు సందేశాల విషయాన్ని చూపవచ్చు.", - "Team_hint_encrypted_not_available": "ప్రైవేట్ టీమ్‌కు మాత్రమే అందుబాటు", - "Team_hint_not_read_only": "ఈ టీమ్‌లో ఉన్న అన్ని వాడాలు సందేశాలను రాయగలరు", - "Team_hint_private": "కేవలం ఆహ్వానిత వాడాలు చేరవచ్చు", - "Team_hint_public": "అమర్చబడినప్పుడు, ఎవరైనా టీమ్‌కు చేరవచ్చు", - "Team_Name": "టీమ్ పేరు", - "Team_not_found": "టీమ్ కనబడలేదు", - "team-name-already-exists": "అంగీకరించిన పేరుతో టీమ్ ఇప్పటికే ఉంది", - "Teams": "టీమ్‌లు", - "Terms_of_Service": "సేవల షరతులు", - "The_autocomplete_options_are_available_above_the_input_composer": "इनपुट कंपोजर के ऊपर ऑटोकम्प्लीट विकल्प उपलब्ध हैं।", - "The_room_does_not_exist": "ఈ కమ్మిట్ ఉండదు లేదా మీకు ప్రవేశ అనుమతి ఉంది", - "The_user_will_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", - "The_user_will_be_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", - "The_user_wont_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", - "Theme": "థీమ్", - "There_was_an_error_while_action": "{{action}} ప్రవృత్తి ప్రారంభించడానికి ఒక లోపం ఉంది!", - "This_room_is_blocked": "ఈ గది నిషేధించబడింది", - "This_room_is_read_only": "ఈ గది కంటెంట్ చదవడానికి మాత్రమే", - "This_will_clear_all_your_offline_data": "ఇది మీ ఆఫ్‌లైన్ డేటాను అన్ని క్లియర్ చేస్తుంది.", - "This_will_remove_all_data_from_this_server": "ఇది ఈ వర్క్‌స్పేస్‌నుండి అన్ని డేటాను తొలగిస్తుంది.", - "Threads": "థ్రెడ్స్", - "Threads_displaying_all": "అన్నింటిని ప్రదర్శిస్తుంది", - "Threads_displaying_following": "అనుసరిస్తుంది", - "Threads_displaying_unread": "చదవనిచ్చినది ప్రదర్శిస్తుంది", - "Threads_dm_unread": "थ्रेड्स, {{unread}} अपठित, प्रत्यक्ष उल्लेख", - "Threads_group_unread": "थ्रेड्स, {{unread}} अपठित, समूह उल्लेख", - "Threads_unread": "थ्रेड्स, {{unread}} अपठित", - "Timezone": "సమయ మండలం", - "To_download": "डाउनलोड करने के लिए", - "Token_expired": "మీ సెషన్ అవుతోంది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", - "Topic": "విషయం", - "topic": "విషయం", - "totp-invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లదు", - "Translate": "అనువాదం", - "Travel_and_places": "यात्रा और स्थान", - "Try_again": "ప్రయత్నించండి", - "Turn_camera_off": "కెమెరాను ఆపివెయ్యి", - "Turn_camera_on": "కెమెరాను ఆన్ చేయండి", - "Turn_mic_off": "മൈക്ക് ഓഫ് ചെയ്യുക", - "Turn_mic_on": "మైక్ ఆన్ చేయి", - "Two_Factor_Authentication": "రెండు అంశ ప్రామాణీకరణ", - "Two_Factor_Success_message": "द्वि-घटक प्रमाणीकरण कोड भेज दिया गया है! कृपया अपना ईमेल जाँचें।", - "Type_message": "సందేశాన్ని టైప్ చేయండి", - "Types": "రకాలు", - "UNARCHIVE": "అనార్కైవ్", - "unarchive": "అనార్కైవ్", - "unauthorized": "అనుమతి లేదు", - "Unfavorite": "अनफेवरेट", - "Unfollow_thread": "थ्रेड को अनफ़ॉलो करें", - "Unfollowed_thread": "అన్‌ఫాలో థ్రెడ్", - "Unhide": "छिपाएं नहीं", - "Unignore": "పరిహరించాలి", - "Unmute": "ఆధ్వర్యపరచించండి", - "unmuted": "ఆధ్వర్యపరచించబడింది", - "Unpin": "పిన్ చేయకోండి", - "Unread": "చదవని", - "unread_messages": "చదవని", - "Unread_on_top": "చదవని పైన", - "Unstar": "స్టార్ తీసుకో", - "Unsupported_format": "అమాన్యమైన ఫార్మాట్", - "Unsupported_system_message": "అనుమతించబడని వ్యవస్థ సందేశం", - "Updating": "తాజాగా అప్డేట్ అవుతోంది...", - "Upload_image": "చిత్రం అప్‌లోడ్ చేయండి", - "Upload_in_progress": "అప్లోడ్ ప్రగతిలో ఉంది", - "Uploading": "అప్లోడ్ అవుతోంది", - "Use": "ఉపయోగించండి", - "User": "వాడుకరి", - "User__username__is_now_a_leader_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} యజమానిగా ఉన్నాడు", - "User__username__is_now_a_moderator_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} మాడరేటర్గా ఉన్నాడు", - "User__username__is_now_a_owner_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} యజమానిగా ఉన్నాడు", - "User__username__removed_from__room_name__leaders": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", - "User__username__removed_from__room_name__moderators": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", - "User__username__removed_from__room_name__owners": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", - "User_added_to": "{{userAdded}} నిలువబడింది", - "User_has_been_ignored": "వాడిని పరిహరించారు", - "User_has_been_key": "వాడుకరి {{key}} అయిపోయింది", - "User_has_been_muted": "{{userMuted}} నిశ్శబ్దం చేయబడింది", - "User_has_been_removed": "{{userRemoved}} తొలగించబడింది", - "User_has_been_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", - "User_has_been_unignored": "వాడు ఇక పరిహరించరాడు", - "User_has_been_unmuted": "{{userUnmuted}} నిశ్శబ్దం తీసుకోబడింది", - "User_Info": "వాడుకరి సమాచారం", - "User_joined_the_channel": "ఛానల్‌లో చేరారు", - "User_joined_the_conversation": "చర్చలో చేరారు", - "User_joined_the_team": "ఈ టీమ్‌లో చేరారు", - "User_left_this_channel": "ఛానల్‌ను వదిలిపోయారు", - "User_sent_an_attachment": "{{user}} అనుకూలంగా పంపించింది", - "Username": "వాడుకరి పేరు", - "Username_is_already_in_use": "उपयोगकर्ता नाम पहले से ही उपयोग में है।", - "Username_not_available": "उपयोगकर्ता नाम उपलब्ध नहीं है।", - "Username_or_email": "వాడుకరి పేరు లేదా ఇమెయిల్", - "Username_required": "यूज़रनेम आवश्यक है", - "Users": "వాడుకరులు", - "Uses_server_configuration": "పనితనం ఆకృతి ఉపయోగిస్తుంది", - "Verify_email_desc": "మేము మీ నమోదుని ధ్యానంలోకి పెంపొందాం. మీరు తక్షణం ఒక ఇమెయిల్ పొందరాక, దయచేసి మళ్ళీ ప్రయత్నించండి.", - "Version_no": "అనువర్తనం సంచిక: {{version}}", - "Video": "వీడియో", - "video-conf-provider-not-configured-body": "వార్క్‌స్పేస్ యాడ్మిన్ మొదలు కాన్ఫరెన్స్ కాల్స్ విశేషాలు ఏర్పాట్లో ఉన్నాయి.", - "video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", - "View_Original": "అసలు చూడండి", - "View_Thread": "థ్రెడ్‌ను వీక్షించండి", - "VoIP_Call_Issue": "కాల్‌లో సమస్య ఉంది, తర్వాత మళ్లీ ప్రయత్నించండి.", - "Wait_activation_warning": "మీరు లాగిన్ చేయడానికి మొదటి స్థాయింలో మీ ఖాతాను ఒక అడ్మినిస్ట్రేటర్ మానవారం ప్రత్యామ్నాయం చేయాలి.", - "Waiting_for_answer": "జవాబు కోసం ఎదురు ఉంది", - "Waiting_for_network": "నెట్వర్క్ కోసం వేచి ఉండి...", - "Waiting_for_server_connection": "సర్వర్ కనెక్షన్ కోసం ఎదురు ఉంది", - "Websocket_disabled": "ఈ పనితనంలో వెబ్‌సాకెట్ నిషేధించబడింది.\n{{contact}}", - "What_are_you_doing_right_now": "మీరు ఇప్పటికే ఏమి చేస్తున్నారు?", - "Whats_the_password_for_your_certificate": "మీ సర్టిఫికేట్ కోసం పాస్‌వర్డ్ ఏమిటి?", - "Wi_Fi": "Wi-Fi", - "Wi_Fi_and_mobile_data": "Wi-Fi మరియు మొబైల్ డేటా", - "Without_Servers": "పనితనం లేదా", - "Workspace_URL": "వర్క్‌స్పేస్ URL", - "Workspace_URL_Example": "open.rocket.chat", - "Workspaces": "వర్క్‌స్పేస్‌లు", - "Would_like_to_place_on_hold": "ఈ చాట్‌ను ఆఫ్‌లోడ్ చేయాలా?", - "Would_you_like_to_return_the_inquiry": "మీరు ప్రశ్నను వీక్షించాలా?", - "Write_External_Permission": "గ్యాలరీ అనుమతి", - "Write_External_Permission_Message": "Rocket.Chat మీ గ్యాలరీకి ప్రవేశించడానికి అనుమతిస్తుంది.", - "Yes": "అవును", - "Yes_action_it": "అవును, {{action}} చేయండి!", - "Yes_remove_user": "అవును, వాడిని తీసివేయండి!", - "Yesterday": "నిన్న", - "You": "మీరు", - "you": "మీరు", - "You_are_converting_the_team": "మీరు ఈ టీమ్‌ను ఒక ఛానల్‌కు మార్చుతున్నారు", - "You_are_deleting_the_team": "మీరు ఈ టీమ్‌ను తొలగిస్తున్నారు.", - "You_are_in_preview_mode": "మీరు ప్రివ్యూ మోడ్లో ఉన్నారు", - "You_are_leaving_the_team": "మీరు టీమ్ '{{team}}' ను విడిచిపోతున్నారు", - "You_can_search_using_RegExp_eg": "మీరు RegExp ఉపయోగించవచ్చు. ఉదా. `/^text$/i`", - "You_colon": "మీరు: ", - "You_dont_have_account": "మీ వద్ద ఖాతా లేదు?", - "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "ఏదిగానా ఏక Rocket.Chat వర్క్‌స్పేస్‌కి ప్రవేశించాలి కాబట్టి ఏదైనా షేర్ చేయడానికి.", - "You_need_to_verifiy_your_email_address_to_get_notications": "నోటిఫికేషన్‌లు పొందడానికి మీ ఇమెయిల్ చిరునామాని ధ్యానలోకి పెంచాలి", - "you_were_mentioned": "మీరు పేర్కొనబడింది", - "You_were_removed_from_channel": "మీరు {{channel}} నుంచి తొలగించబడింది", - "You_will_be_logged_out_from_other_locations": "మీరు ఇతర ప్రదేశాలనుండి లాగౌట్ అవుతారు.", - "You_will_be_logged_out_of_this_application": "మీరు ఈ అప్లికేషన్ నుండి లాగౌట్ అవుతారు.", - "You_will_not_be_able_to_recover_this_message": "మీరు ఈ సందేశాన్ని పునఃప్రాప్తి చేయలేదు!", - "You_will_unset_a_certificate_for_this_server": "ఈ వర్క్‌స్పేస్ కోసం మీరు ఒక సర్టిఫికేట్ అనాకరిస్తారు", - "Your_certificate": "మీ సర్టిఫికేట్", - "Your_invite_link_will_expire_after__usesLeft__uses": "మీ ఆహ్వాన లింక్ {{usesLeft}} ఉపయోగాల తరువాత అది కనబడిపోతుంది.", - "Your_invite_link_will_expire_on__date__": "మీ ఆహ్వాన లింక్ {{date}} లో అది కనబడిపోతుంది.", - "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "మీ ఆహ్వాన లింక్ {{date}} లేదా {{usesLeft}} ఉపయోగాల తరువాత అది కనబడిపోతుంది.", - "Your_invite_link_will_never_expire": "మీ ఆహ్వాన లింక్ ఎప్పుడూ కనబడదు.", - "Your_password_is": "మీ సంకేతపదం", - "Your_Password_Must_Have": "మీ పాస్‌వర్డ్ తప్పనిసరిగా ఉండాలి:", - "Your_workspace": "మీ వర్క్‌స్పేస్" -} \ No newline at end of file + "__count__empty_room_will_be_removed_automatically": "{{count}} ఖాళీ కొరకు స్వయంగా తొలగిపోతాయి.", + "__count__empty_rooms_will_be_removed_automatically": "{{count}} ఖాళీ కొరకులు స్వయంగా తొలగిపోతాయి.", + "1_person_reacted": "1 వ్యక్తి ప్రతిక్రియించింది", + "A_new_owner_will_be_assigned_automatically_to__count__room": "కొత్త యజమాని స్వయంగా నియమించబడుతుంది {{count}} అంగడాయినందు.", + "A_new_owner_will_be_assigned_automatically_to__count__rooms": "కొత్త యజమాని స్వయంగా నియమించబడుతుంది {{count}} అంగడులకు.", + "A11y_appearance_dialog_require_manual_dismissal": "మానవీయంగా మూసివేయాలి", + "A11y_appearance_dialogs": "డైలాగ్లు", + "A11y_appearance_show_alerts_as": "అలర్ట్‌లను ఇలా చూపించండి", + "A11y_appearance_toast_dismissed_automatically": "స్వయంచాలకంగా మూసివేయబడుతుంది", + "A11y_appearance_toasts": "టోస్ట్ నోటిఫికేషన్లు", + "A11y_in_app_notification": "{{name}} నుండి కొత్త సందేశం: {{message}}", + "A11y_incoming_call_dismiss": "ఖారు చేయండి", + "A11y_incoming_call_swipe_down_to_view_options": "క్రిందికి స్వైప్ చేయి, పరామితులను చూడండి", + "ABAC_disabled_action_reason": "ABAC-నిర్వహించబడే గదులలో అందుబాటులో లేదు", + "ABAC_managed": "ABAC నిర్వహించబడింది", + "ABAC_managed_description": "అట్రిబ్యూట్ ఆధారిత యాక్సెస్ నియంత్రిత గదులకు అనుకూలమైన వినియోగదారులు మాత్రమే ప్రాప్యతను కలిగి ఉంటారు. లక్షణాలు గది ప్రాప్యతను నిర్ణయిస్తాయి.", + "abac_removed_user_from_the_room": "ABAC ద్వారా తొలగించబడింది", + "ABAC_room_attributes": "గది లక్షణాలు", + "accept": "అంగీకరించు", + "Accessibility": "एक्सेसिबिलिटी", + "Accessibility_and_Appearance": "प्रवेशयोग्यता और रूपरेखा", + "Accessibility_statement": "పేరుబట్టి వివరణ", + "Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "వాడాకు 'కూడా చానల్‌కు పంపండి' పనికి అనుమతిస్తుంది", + "Actions": "చర్యలు", + "Activate_to_select_server": "సర్వర్‌ను ఎంచుకోవడానికి యాక్టివేట్ చేయండి", + "Activate_to_select_server_Available_actions_delete": "సర్వర్‌ను ఎంచుకోవడానికి ఆಕ್ಟివేట్ చేయండి. లభ్యమయ్యే చర్యలు: {{delete}}", + "Activity": "చట్టం", + "Add_Channel_to_Team": "ఛానల్‌ను టీమ్‌కు జోడించండి", + "Add_Existing": "ఇప్పటికే ఉన్నవిని జోడించండి", + "Add_Existing_Channel": "ఇప్పటికే ఉన్న ఛానల్‌ను జోడించండి", + "Add_Server": "వర్క్‌స్పేస్ చేర్చు", + "Add_server": "వర్క్‌స్పేస్ జోడించండి", + "Add_users": "వాడికి వాడుకలు చేర్చండి", + "added__roomName__to_this_team": "#{{roomName}} ని ఈ టీమ్‌కు చేర్చారు", + "Added__username__to_this_team": "@{{user_added}} ని ఈ టీమ్‌కు చేర్చారు", + "Admin_Panel": "యజమాని పేనల్", + "admin-no-active-video-conf-provider-body": "ఈ వార్క్‌స్పేస్‌లో ఇది అందుబాటు చేసేందుకు కాన్ఫరెన్స్ కాల్స్ కాన్ఫిగర్ చేసుకోవడానికి వార్క్‌స్పేస్ యాడ్మిన్ అవసరం.", + "admin-no-active-video-conf-provider-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", + "admin-no-videoconf-provider-app-body": "వార్క్‌స్పేస్ యొక్క మార్కెట్‌లో కాన్ఫరెన్స్ కాల్ యాప్స్ అందుబాటు.", + "admin-no-videoconf-provider-app-header": "కాన్ఫరెన్స్ కాల్ యాప్స్ చేరబడలేదు", + "admin-video-conf-provider-not-configured-body": "ఈ వార్క్‌స్పేస్‌లో ఇది అందుబాటు చేసేందుకు కాన్ఫరెన్స్ కాల్స్ కాన్ఫిగర్ చేసుకోవడానికి వార్క్‌స్పేస్ యాడ్మిన్ అవసరం.", + "admin-video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", + "After_seconds_set_by_admin": "అడ్మిన్ ద్వారా సెట్ చేయబడిన {{seconds}} సెకన్లలో", + "Agent": "ఏజెంట్", + "AirGapped_workspace_read_only_description": "నిర్వహకులు దీన్ని ఇంటర్నెట్‌తో కలుపుకోవడం లేదా ప్రీమియం ప్రణాళికకు మెరుగుపరచడం ద్వారా పూర్తి ఫంక్షనాలిటీని పునఃస్థాపించవచ్చు.", + "AirGapped_workspace_read_only_share_extension_title": "జోడించడం నిలిపివేయబడింది, ఎందుకంటే పనికోసం చదివే స్ధితిలో ఉంది.", + "AirGapped_workspace_read_only_title": "అయోమయ స్థితిలో ఉన్న పనికోసం.", + "Alert": "హెచ్చరిక", + "alert": "హెచ్చరిక", + "alerts": "హెచ్చరికలు", + "All": "అన్ని", + "All_Messages": "అన్ని సందేశాలు", + "All_users_in_the_channel_can_write_new_messages": "చానల్లో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", + "All_users_in_the_team_can_write_new_messages": "జట్టులో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", + "Allow_Reactions": "ప్రతిక్రియలను అనుమతించండి", + "Already_have_an_account": "మీకు ఇప్పటికే ఖాతా ఉందా?", + "Also_send_thread_message_to_channel_behavior": "చానల్‌కు థ్రెడ్ సందేశాన్ని కూడా పంపండి", + "and": "మరియు", + "and_N_more": "మరింత {{count}}", + "Animals_and_nature": "जानवर और प्रकृति", + "Announcement": "ప్రకటన", + "announcement": "ప్రకటన", + "Apply_Certificate": "సర్టిఫికేట్‌ని వర్తింపజేయండి", + "ARCHIVE": "ఆర్కైవ్", + "archive": "ఆర్కైవ్", + "are_typing": "రాయడం", + "Are_you_sure_question_mark": "మీరు ఖచ్చితంగా ఉన్నారా?", + "Are_you_sure_you_want_to_delete_your_account": "మీరు మీ ఖాతాను తొలగించాలా?", + "Are_you_sure_you_want_to_leave_the_room": "మీరు ఖచ్చితంగా కొరకుని వదిలిపోతున్నారా {{room}}?", + "At_Least_1_Lowercase_Letter": "కనీసం 1 చిన్న అక్షరం", + "At_Least_1_Number": "కనీసం 1 సంఖ్య", + "At_Least_1_Symbol": "కనీసం 1 చిహ్నం", + "At_Least_1_Uppercase_Letter": "कम से कम 1 बड़े अक्षर", + "At_Least_Characters": "कम से कम {{quantity}} अक्षर", + "At_Most_24_Characters": "గరిష్టంగా 24 అక్షరాలు", + "At_Most_Characters": "अधिकतम {{quantity}} अक्षर", + "Attention": "ध्यान दें", + "Audio": "ఆడియో", + "Auto_Translate": "స్వయం అనువదించండి", + "Auto-join": "స్వయం-చేరండి", + "Automatic": "స్వయంగా", + "Autoplay_gifs": "जीआईएफ़ का स्वतःप्ले", + "Avatar": "అవతార్", + "Avatar_changed_successfully": "అవతార్ విజయవంతంగా మారింది!", + "Avatar_default_photo": "डिफ़ॉल्ट अवतार {{username}} के लिए", + "Avatar_Photo": "{{username}} का अवतार", + "Avatar_Url": "అవతార్ URL", + "Avatars": "అవతార్లు", + "Away": "దూరంగా", + "Back": "वापस", + "Back_to_keyboard": "कीबोर्ड पर वापस", + "Bio": "జీవిత చరిత్ర", + "Black": "నలుపు", + "Broadcast": "బ్రాడ్‌కాస్ట్", + "Broadcast_hint": "కొనసాగించబడిన వాడాలు కొత్త సందేశాలను రాయగలరు, కాని ఇతర వాడాలు ఉత్తరం ఇవ్వగలరు", + "Browser": "బ్రౌజర్", + "Busy": "వ్యస్తంగా", + "Call": "కాల్", + "Call_again": "కాల్ మళ్ళీ", + "Call_already_ended": "కాల్ ఇప్పటివరకు ముగింపుగా ఉంది!", + "Call_back": "కాల్ బ్యాక్", + "Call_ended": "కాల్ ముగియింది", + "Call_ended_bold": "*వాయిస్ కాల్ ముగిసింది*", + "Call_failed_bold": "*వాయిస్ కాల్ విఫలమైంది*", + "Call_issue": "కాల్ సమస్య", + "Call_not_answered_bold": "*వాయిస్ కాల్ జవాబు ఇవ్వబడలేదు*", + "Call_ongoing": "కాల్ ప్రవర్తిస్తోంది", + "Call_rejected": "కాల్ తిరస్కరించబడింది", + "Call_room_name": "{{roomName}} को कॉल करें", + "Call_started": "కాల్ ప్రారంభించబడింది", + "Call_transferred_bold": "*వాయిస్ కాల్ బదిలీ చేయబడింది*", + "Call_was_canceled_before_being_answered": "కాల్ సమాధానం ఇవ్వబడకముందే రద్దు చేయబడింది", + "Call_was_not_answered": "కాల్ సమాధానించబడలేదు", + "Calling": "కాల్ చేస్తోంది", + "Cancel": "రద్దు", + "Cancel_and_delete_recording": "रिकॉर्डिंग रद्द करें और हटाएं।", + "Cancel_editing": "సవరించడానికి రద్దు చేయి", + "Cancel_recording": "రికార్డింగ్‌ను రద్దు చేయి", + "Cancel_upload": "अपलोड रद्द करें", + "Canned_Responses": "క్యాన్డ్ రిస్పాన్సెలు", + "Cannot_delete": "తొలగించలేరు", + "Cannot_leave": "విడిచలేరు", + "Cannot_remove": "తీసివేయలేరు", + "Certificate_password": "సర్టిఫికేట్ పాస్‌వర్డ్", + "Change_Language": "భాషను మార్చు", + "Change_language_loading": "భాషను మార్చాడు.", + "Change_my_password": "मेरा पासवर्ड बदलें।", + "changed_room_announcement": "గది ప్రకటనను మార్చారు: {{announcement}}", + "changed_room_description": "గది వివరాన్ని మార్చారు: {{description}}", + "changing_avatar": "అవతార్ మార్చడం", + "Channel": "చానల్", + "Channel_hint_encrypted": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ చానల్. ఎన్క్రిప్టెడ్ చానల్‌తో శోధన పనులు పనిస్తాయి మరియు అధిసూచనలు సందేశాల విషయాన్ని చూపవచ్చు.", + "Channel_hint_encrypted_not_available": "పబ్లిక్ చానల్‌కు అందుబాటు కాదు", + "Channel_hint_not_read_only": "చానల్‌లో ఉన్న అన్ని వాడాలు కొత్త సందేశాలను రాయగలరు", + "Channel_hint_private": "కేవలం ఆహ్వానిత వాడాలు ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", + "Channel_hint_public": "ప్రతిపక్షం ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", + "Channel_Name": "ఛానల్ పేరు", + "Channel_name_already_taken": "चैनल का नाम पहले से लिया जा चुका है।", + "Channel_name_required": "चैनल का नाम आवश्यक है।", + "Channels": "ఛానల్లు", + "Chat_closed_by_agent": "ఏజెంట్ ద్వారా చాట్ మూసబడింది", + "Chat_is_on_hold": "ఇది చాట్ అనాకరణం కారణంగా ఆఫ్‌లోడ్ ఉంది", + "Chat_started": "చాట్ ప్రారంభించబడింది", + "Chats": "చాట్లు", + "Check_canned_responses": "క్యాన్డ్ రిస్పాన్సెలను తనిఖీ చేయండి.", + "Choose": "चुनें", + "Choose_file": "ఫైల్ ఎంచుకో", + "Choose_from_library": "లైబ్రరీ నుండి ఎంచుకో", + "Choose_where_you_want_links_be_opened": "లింకులను ఎక్కువ ఉంచాలా ఎంచుకో", + "Clear": "క్లియర్", + "Clear_cache": "స్థానిక పనివెచ్చే క్యాష్ నిలిపివేయండి", + "Clear_cache_loading": "క్యాష్‌ను నిలిపివేస్తోంది.", + "Click_to_join": "చేరాలనుకోండి!", + "Close": "మూసివేయి", + "Close_Chat": "చాట్‌ను మూసివేయండి", + "Code_or_password_invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లనిది", + "Code_required": "कोड की आवश्यकता है।", + "Collaborative": "సహయోగం", + "Condensed": "సంక్షేపించబడిన", + "conference_call": "సభా కాల్", + "Confirm": "ఖచ్చితంగా చెప్పు", + "Confirm_password": "पासवर्ड की पुष्टि करें", + "Confirmation": "అనుమతి", + "Connect": "కనెక్ట్ చేయండి", + "Connect_to_server_as_user": "{{user}} के रूप में {{serverUrl}} से कनेक्ट करें।", + "Connecting": "కనెక్ట్ అవుతోంది...", + "Contact_us": "మాకు సంప్రదించండి", + "Contact_your_server_admin": "మీ పనిచేసే అడ్మిన్‌ని సంప్రదించండి.", + "Content": "కంటెంట్", + "Continue": "కొనసాగించు", + "Continue_with": "మరింతగా చేయండి", + "Conversation": "సంభాషణ", + "Conversation_closed": "సంభాషణ మూసబడింది", + "Convert": "మార్చు", + "Convert_ASCII_to_emoji": "ASCII को इमोजी में बदलें", + "Convert_to_Channel": "చానల్ కి మార్చండి", + "Convert_to_Team": "టీమ్‌కు మార్చు", + "Convert_to_Team_Warning": "మీరు ఈ ఛానల్‌ను టీమ్‌కు మార్చుతున్నారు. అన్ని సభ్యులు ఉంటారు.", + "Converted__roomName__to_a_channel": "#{{roomName}} ని చానల్ గా మార్చారు", + "Converted__roomName__to_a_team": "#{{roomName}} ని ఒక టీమ్ గా మార్చారు", + "Converting_Team_To_Channel": "టీమ్ ను చానల్‌కు మార్చేందుకు", + "Copied_to_clipboard": "క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది!", + "Copy": "నకలు", + "Crash_report_disclaimer": "మేము మీ చాట్ సామగ్రిని ట్రాక్ చేసాము. క్రాష్ రిపోర్ట్ మరియు అనలిటిక్స్ ఈవెంట్లు మాకు సమస్తమైన సమాచారం మాత్రమే కలిగి ఉన్నాయి, అని గుర్తించడానికి మరియు సమస్యలను పరిష్కరించడానికి మాత్రమే.", + "Create": "సృష్టించండి", + "Create_a_new_workspace": "కొత్త పనివెచ్చేలా సృష్టించండి", + "Create_account": "ఖాతా సృష్టించండి", + "Create_Channel": "ఛానల్ సృష్టించండి", + "Create_Direct_Messages": "సరాసరి సందేశాలను సృష్టించండి", + "Create_Discussion": "చర్చ సృష్టించండి", + "Create_New": "కొత్తగా సృష్టించండి", + "Create_new_channel_team_dm_discussion": "नया चैनल, टीम, सीधा संदेश या चर्चा बनाएँ।", + "Create_Team": "టీమ్ సృష్టించండి", + "Created_snippet": "ఒక స్నిపెట్ సృష్టించబడింది", + "creating_channel": "ఛానల్ సృష్టించడం", + "creating_discussion": "సంవాదాలను సృష్టిస్తోంది", + "creating_invite": "ఆహ్వానాన్ని సృష్టించడం", + "creating_team": "టీమ్ సృష్టిస్తోంది", + "Current_password": "वर्तमान पासवर्ड", + "Current_Status": "वर्तमान स्थिति", + "Custom": "कस्टम", + "Dark": "గాఢంగా", + "Dark_level": "గాఢంగా స్థాయి", + "decline": "నిరాకరించు", + "Default": "స్వచ్ఛందం", + "Default_browser": "స్వచ్ఛంద బ్రౌజర్", + "Defined_user_as_role": "{{user}} నియమాలను {{role}} గా ప్రవృత్తించారు", + "DELETE": "తొలగించండి", + "Delete": "తొలగించండి", + "delete": "తొలగించండి", + "Delete_Account": "ఖాతాను తొలగించండి", + "Delete_Account_confirm": "అవును, తొలగించండి", + "Delete_image": "చిత్రం తొలగించు", + "Delete_my_account": "నా ఖాతాను తొలగిస్తోంది", + "Delete_recording": "रिकॉर्डिंग हटाएं", + "Delete_Room_Warning": "ఒక కొరకుని మొత్తం పోస్ట్ చేసిన అన్ని సందేశాలను తొలగించడం. ఇది పునఃప్రారంభించబడదు.", + "Delete_Team": "టీమ్ ను తొలగిస్తోంది", + "Deleted__roomName__": "#{{roomName}} ని తొలగించారు", + "Deleted_The_Room_Successfully": "కింద కానున్న కుటుంబం విజయవంతంగా తొలగించబడింది", + "Deleted_The_Team_Successfully": "టీమ్ విజయవంతంగా తొలగించబడింది", + "Deleting_a_user_will_delete_all_messages": "ఒక వాడిని తొలగించడం ఆ వాడిని సహితం అన్ని సందేశాలను, కొరకులను మరియు జట్టులను తొలగించాలను. ఇది పునఃప్రారంభించబడదు.", + "Deleting_account": "ఖాతా తొలగిస్తోంది", + "deleting_room": "కొరకుని తొలగించడం", + "deleting_team": "టీమ్ ను తొలగిస్తోంది", + "Department": "విభాగం", + "Description": "వివరణ", + "description": "వివరణ", + "Direct_message": "సరిహద్దు సందేశం", + "Direct_Messages": "సరాసరి సందేశాలు", + "Directory": "డైరెక్టరీ", + "Disable_writing_in_room": "{{roomName}}లో రచన అనుమతించకోండి", + "Disabled_E2E_Encryption_for_this_room": "ఈ రూమ్‌కు E2E ఎన్క్రిప్షన్ అచ్చుమాటయింది", + "Discard": "తిరిగి వాడు", + "Discard_changes": "మార్పులను తిరిగి వాడండి?", + "Discard_changes_description": "మీరు సేవించకపోతే అన్ని మార్పులు కోలుక పడతాయి.", + "Discussion": "చర్చ", + "Discussion_Desc": "चर्चाएँ किसी चैनल या टीम के अंदर एक विशिष्ट विषय के बारे में अलग बातचीत की अनुमति देती हैं जहाँ किसी भी कार्यक्षेत्र के सदस्य को जोड़ा जा सकता है।", + "Discussion_name": "చర్చ పేరు", + "Discussion_name_required": "चर्चा के लिए नाम आवश्यक है।", + "Discussions": "చర్చలు", + "Display": "ప్రదర్శించు", + "Do_it_later": "తర్వాత చెయ్యి", + "Do_you_have_a_certificate": "ఈ వర్క్‌స్పేస్‌కు సర్టిఫికేట్ ఉందా?", + "Do_you_have_an_account": "మీకు ఖాతా ఉందా?", + "Do_you_really_want_to_key_this_room_question_mark": "మీరు ఖచ్చితంగా {{key}} ఈ కొరకుని తెచ్చాలా?", + "Dont_activate": "ఇప్పుడే సక్రియపరచడం లేదు", + "Dont_Have_An_Account": "మీకు ఖాతా లేదా?", + "Downloaded_file": "అప్లోడు చేసిన ఫైలు", + "E2E_Encryption": "E2E ఎన్క్రిప్షన్", + "E2E_encryption_change_password_confirmation": "అవును, అది మార్చండి", + "E2E_encryption_change_password_description": "మీరు ఇప్పుడు ఎన్క్రిప్టెడ్ ప్రైవేట్ గ్రూప్లు మరియు డైరెక్ట్ సందేశాలను సృష్టించవచ్చు. మీరు ప్రేపను ఎన్క్రిప్టెడ్ చేయవచ్చు. \nఇది ఎండ్ టు ఎండ్ ఎన్క్రిప్షన్, కానీ మీ సందేశాలను ఎన్కోడ్/డీకోడ్ చేయడానికి కీను వర్క్‌స్పేస్‌లో భద్రపరచడానికి సేవ్ కానీ కారణం లేదు. ఈ కారణంగా, మీరు మీ పాస్‌వర్డ్ను బాగా దానిని సేవ్ చేయాలి. మీరు వాటిని ఉపయోగించాలని మీరు ఇతర పరికరాలలో ప్రవేశించినప్పుడు అవసానంగా అంగీకరించాలి.", + "E2E_encryption_change_password_error": "E2E కీ పాస్‌వర్డ్ను మార్చడంలో దోషం!", + "E2E_encryption_change_password_message": "దయచేసి ఇతర స్థానాలలో దానిని బాగా భద్రపరచండి.", + "E2E_encryption_change_password_success": "E2E కీ పాస్‌వర్డ్ విజయవంతంగా మారింది!", + "E2E_encryption_change_password_title": "ఎన్క్రిప్షన్ పాస్‌వర్డ్ను మార్చండి", + "E2E_encryption_reset_button": "రీసెట్ E2E కీ", + "E2E_encryption_reset_confirmation": "అవును, అది రీసెట్ చేయండి", + "E2E_encryption_reset_description": "ఈ ఐచ్ఛికం మీ ప్రస్తుత E2E కీను తొలగించి, మీరు లాగౌట్ అవుతారు. \nమీరు మళ్ళీ లాగిన్ చేయడానికి, Rocket.Chat మీకు కొత్త కీని సృష్టించి అంగీకరించండి మరియు మీరు ఒకటి లేక ఏదో మార్గం సభ్యులు ఉన్న ఎన్క్రిప్టెడ్ రూమ్‌కు ప్రవేశం పొందవచ్చు. \nE2E ఎన్క్రిప్షన్ స్వభావం కారణంగా, Rocket.Chat ఎన్క్రిప్టెడ్ రూమ్‌కు ప్రవేశం పొందలేకపోతే ప్రవేశం పొందగలదు.", + "E2E_encryption_reset_error": "E2E కీని రీసెట్ చేయడంలో దోషం!", + "E2E_encryption_reset_message": "మీరు లాగౌట్ అవుతారు.", + "E2E_encryption_reset_title": "రీసెట్ E2E కీ", + "E2E_How_It_Works_info1": "మీరు ఇప్పటికే ఎన్క్రిప్టెడ్ ప్రైవేట్ గ్రూప్స్ మరియు సరాసరి సందేశాలను సృష్టించవచ్చు. మీరు అస్తిత్వం కలిగిన ప్రైవేట్ గ్రూప్లను లేదా డైరెక్ట్ సందేశాలను కూడా ఎన్క్రిప్టెడ్ చేయవచ్చు.", + "E2E_How_It_Works_info2": "ఇది * ఎండ్ టు ఎండ్ ఎన్క్రిప్షన్ * కాదా, మీ సందేశాలను ఎన్కోడ్ / డీకోడ్ చేయడానికి కీలు అని ఉండదు. ఈ కారణంతో * మీరు ఇక్కడికి ఉపయోగించే మూలం ఇప్పటివరకు ప్రదానించిపెట్టబడదు.", + "E2E_How_It_Works_info3": "మీరు ముందు నడుపదిని కొత్తగా ఉంచవచ్చు, అది స్వయంగా ఒక E2E పాస్‌వర్డ్ యాటోమేటిక్‌గా సృష్టించబడుతుంది.", + "E2E_How_It_Works_info4": "మీరు అనుమతి పొందకపోతే, మీరు ప్రస్తుతం ఉపయోగించిన E2E పాస్‌వర్డ్ నుండి ఎంక్రిప్షన్ కీకి కొత్త పాస్‌వర్డ్ సెట్ చేయవచ్చు.", + "E2EE_password": "E2EE పాస్వర్డ్", + "Edit": "సవరించు", + "Edit_Avatar": "अवतार संपादित करें", + "Edit_Invite": "ఆహ్వానాన్ని సవరించు", + "Edit_Room_Photo": "గది ఫోటోను సవరించండి", + "Edit_Status": "స్థితిని సవరించు", + "Email": "ईमेल", + "Email_associated_with_another_user": "अन्य उपयोगकर्ता के साथ संबद्ध ईमेल", + "Email_must_be_a_valid_email": "ईमेल एक मान्य ईमेल होना चाहिए।", + "Email_Notification_Mode_All": "ప్రతి ఉల్లేఖం / DM", + "Email_Notification_Mode_Disabled": "అచ్చుకోవడం లేదు", + "Email_required": "ईमेल आवश्यक है।", + "Emoji_selector": "इमोजी चयनकर्ता", + "Empty": "ఖాళీ", + "Enable_Auto_Translate": "స్వయం-అనువదించడం అనుమతించండి", + "Enable_encryption_button_label": "గూఢీకరణను ప్రారంభించు", + "Enable_Message_Parser": "సందేశ పార్సర్‌ను సక్రియం చేయండి", + "Enable_writing_in_room": "{{roomName}}లో రచన అనుమతించండి", + "Enabled_E2E_Encryption_for_this_room": "ఈ రూమ్‌కు E2E ఎన్క్రిప్షన్ ప్రారంభించబడింది", + "Encrypted": "ఎన్క్రిప్టెడ్", + "Encrypted_message": "ఎన్క్రిప్టెడ్ సందేశం", + "encrypted_room_description": "ప్రాప్యతకు మీ అంతిమ నుండి అంతిమ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను నమోదు చేయండి.", + "encrypted_room_title": "{{room_name}} ఎన్క్రిప్ట్ చేయబడింది", + "Encryption_error_desc": "आपकी एन्क्रिप्शन कुंजी को डिकोड करना संभव नहीं था।", + "Encryption_error_title": "गलत पासवर्ड", + "End_to_end_encrypted_room": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ రూం", + "Enter_E2EE_Password": "E2EE పాస్‌వర్డ్ నమోదు చేయండి", + "Enter_E2EE_Password_description": "ఎన్‌క్రిప్ట్ చేయబడిన సందేశాలను వీక్షించడానికి మరియు పంపడానికి మీ E2EE పాస్‌వర్డ్‌ని నమోదు చెయ్యండి.\n\nప్రతీ పరికరంలో పాస్‌వర్డ్‌ని నమోదు చేయాల్సి ఉంటుంది.", + "Enter_manually": "మాన్యువల్‌గా నమోదు చేయండి", + "Error_Download_file": "ఫైల్ డౌన్‌లోడ్ చేస్తున్నప్పుడు తప్పిబాటు", + "Error_incorrect_password": "गलत पासवर्ड", + "Error_prefix": "त्रुटि: {{संदेश}}", + "Error_uploading": "అప్‌లోడ్ లోపం", + "error-action-not-allowed": "{{action}} అనుమతించబడినది కాదు", + "error-avatar-invalid-url": "చెల్లింపు అవతార URL: {{url}}", + "error-duplicate-channel-name": "{{room_name}} పేరుతో చానల్ ఉంది", + "error-email-send-failed": "ఇమెయిల్ పంపడంలో లోపం: {{message}}", + "error-file-too-large": "ఫైలు అత్యంత పెద్దది", + "error-init-video-conf": "వీడియో కాల్‌ను ప్రారంభించడంలో లోపం", + "error-invalid-email": "చెల్లని ఇమెయిల్ {{email}}", + "error-invalid-file-type": "చెల్లని ఫైలు రకం", + "error-invalid-password": "చెల్లని పాస్‌వర్డ్", + "error-invalid-room-name": "{{room_name}} చెల్లని కొరకు పేరు", + "error-invitation-reply-action": "ఆహ్వాన ప్రతిస్పందనను పంపించడంలో లోపం", + "error-not-allowed": "అనుమతి లేదు", + "error-not-permission-to-upload-file": "మీకు ఫైలులను అప్‌లోడ్ చేయడానికి అనుమతి లేదు", + "error-save-image": "చిత్రం సేవ్ చేయడంలో లోపం", + "error-save-video": "వీడియోను సేవ్ చేయడంలో లోపం", + "error-team-creation": "తప్పిదమైన టీమ్ సృష్టి", + "error-too-many-requests": "లోపం, చాలా అనురోధాలు. దయచేసి నిమిషాల ముందు వేగంగా చేసేందుకు ప్రయాసించండి. మీరు మరికొన్ని సెకన్లు కావాలనుకుంటే {{seconds}} సెకన్లు వేచి ఉంచాలి.", + "error-you-are-last-owner": "మీరు చివరి యజమాని. కొన్ని క్షణాలకు అనుమతించిన తరువాత గమనించండి.", + "Everyone_can_access_this_channel": "ప్రతిఒక్కరూ ఈ ఛానల్ను ప్రవేశించవచ్చు", + "Everyone_can_access_this_team": "ప్రతిఒక్కరూ ఈ టీమ్‌ను ప్రవేశించవచ్చు", + "Expanded": "విస్తృతం", + "Expiration_Days": "కాలాంతరం (రోజులు)", + "Favorite": "पसंदीदा", + "Favorites": "ఇష్టాలు", + "Federation_Matrix_room_description_disabled": "ఈ వర్క్‌స్పేస్‌లో ఫెడరేషన్ ప్రస్తుతం నిలిపివేయబడింది", + "Federation_Matrix_room_description_invalid_version": "ఈ గది పాత ఫెడరేషన్ వెర్షన్‌తో సృష్టించబడింది మరియు నిరవధికంగా నిరోధించబడింది.", + "Federation_Matrix_room_description_missing_module": "ఫెడరేటెడ్ గదులలో చేరడం ఒక ప్రీమియం ఫీచర్", + "Fetch_image_from_URL": "URL నుండి చిత్రాన్ని పొందండి", + "Field_are_required": "{{field}} आवश्यक हैं", + "Field_is_required": "{{field}} आवश्यक है।", + "File_description": "పిలుస్తూనే వివరణ", + "Files": "పిలుస్తూనే", + "FileUpload_Error": "ఫైల్ అప్లోడ్ లోపం", + "Filter": "फिल्टर", + "Finish_recording": "రికార్డింగ్ ముగించండి", + "Flags": "ध्वज", + "Follow_thread": "थ्रेड का पालन करें", + "Following": "అనుసరించుతుంది", + "Following_thread": "అనుసరించుకోవడానికి థ్రెడ్", + "Food_and_drink": "भोजन और पेय", + "For_your_security_you_must_enter_your_current_password_to_continue": "आपकी सुरक्षा के लिए, जारी रखने के लिए आपको अपने खाते का पासवर्ड दर्ज करना होगा।", + "Forgot_E2EE_password": "E2EE పాస్‌వర్డ్ మర్చిపోయారా?", + "Forgot_password": "మీ పాస్‌వర్డ్ మరచిపోయారా?", + "Forgot_password_If_this_email_is_registered": "ఈ ఇ-మెయిల్ నమోదు చేసినట్లు, మేము మీ పాస్‌వర్డ్‌ను రీసెట్ చేయడానికి సూచనలు పంపబడిపోతాము. మీరు చాలా తక్కువగా ఒక ఇ-మెయిల్ లభిస్తే, దయచేసి మరియువకాయ ప్రయాసించండి.", + "Forward": "అగ్రగామించండి", + "Forward_Chat": "చాట్‌ను అగ్రగామించండి", + "Forward_message": "సందేశాన్ని ముందుకు పంపు", + "Forward_to_department": "శాఖకు అగ్రగామించండి", + "Forward_to_user": "వాడికి అగ్రగామించండి", + "Full_name": "పూర్తి పేరు", + "Full_table": "పూర్తి పటం చూడండి కొరకు క్లిక్ చేయండి", + "Generate_New_Link": "కొత్త లింక్‌ను రూపొందించండి", + "Generate_new_password": "కొత్త పాస్‌వర్డ్ రూపొందించండి", + "Get_help": "సహాయం పొందండి", + "Get_link": "లింక్ పొందండి", + "Glossary_of_simplified_terms": "సరళీకృత పదాల పదకోశం", + "Group_by": "గ్రూప్ చేయండి", + "Has_left_the_team": "టీమ్ ను వదిలిపోయారు", + "Help": "సహాయం", + "Hide": "छुपाएं", + "Hide_notification": "నోటిఫికేషన్ దాచు", + "Hide_Password": "पासवर्ड छिपाएं", + "Hide_System_Messages": "వ్యవస్థ సందేశాలను దాచండి", + "Hide_type_messages": "{{type}} సందేశాలను దాచండి", + "How_It_Works": "ఇది ఎలా పని చేస్తుంది", + "I_Saved_My_E2E_Password": "నా E2E పాస్‌వర్డ్ నేను భద్రంగా ఉంచాను", + "Ignore": "పరిహరించాలి", + "Images": "చిత్రాలు", + "Images_uploaded": "చిత్రాలు అప్‌లోడ్ అయ్యాయి", + "In_app": "యాప్‌లో", + "In_App_Alert_info": "ఈ నోటిఫికేషన్‌లు {{app}} తెరిచి ఉన్నప్పుడు మీకు పంపబడతాయి", + "In_App_And_Desktop": "యాప్ మరియు డెస్క్టాప్", + "In_App_and_Desktop_Alert_info": "యాప్ తెరాసినప్పటిని తెరాచినప్పటిని మేరకు పొడిస్తుంది, మరియు డెస్క్టాప్‌లో నోటిఫికేషన్‌ను ప్రదర్శిస్తుంది", + "In_App_Notification": "యాప్‌లోని నోటిఫికేషన్", + "Incoming_call_from": "నుండి రాబోయే కాల్", + "insert_Avatar_URL": "ఇక్కడ చిత్ర URL ను చేర్చండి", + "Insert_Join_Code": "చేరండి కోడ్ చేరించండి", + "Invalid_code": "अमान्य कोड", + "Invalid_or_expired_invite_token": "అమాయక లేదా అవధిచుక్తాయిన అమర్పు టోకెన్", + "Invalid_server_version": "మీరు కనెక్ట్ చేయడానికి ప్రయాసిస్తున్న వర్క్‌స్పేస్ యొక్క ఒక అవసరం లేదు: {{currentVersion}}.\n\nమేము వినియోగించే అప్లికేషన్ యొక్క ఆవశ్యకానికి అయితే మేము అవసరం ఉన్న సంస్కరణం: {{minVersion}}", + "Invalid_URL": "अमान्य URL", + "Invalid_workspace_URL": "చెల్లని వర్క్‌స్పేస్ URL", + "Invite_Link": "ఆమంత్రణ లింక్", + "Invite_users": "వాడికి ఆమంత్రణం పంపండి", + "Invited": "ఆహ్వానించబడింది", + "invited_room_description_channel": "మీరు ఆహ్వానించబడ్డారు", + "invited_room_description_dm": "మీరు సంభాషణ కలిగి ఉండడానికి ఆహ్వానించబడ్డారు", + "invited_room_title_channel": "{{room_name}} లో చేరడానికి ఆహ్వానం", + "invited_room_title_dm": "సందేశ అభ్యర్థన", + "IP": "IP", + "is_typing": "టైపు చేస్తోంది", + "Jitsi_authentication_before_making_calls": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి.", + "Jitsi_authentication_before_making_calls_admin": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల లోపాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి. ప్రాధికృత వీడియో కాల్లకు ఇన్‌ఫార్మేషన్ను నవీకరించడానికి, మీరు ప్రాధికృత యాప్‌ను నవీకరించవచ్చు.", + "Jitsi_authentication_before_making_calls_ask_admin": "Jitsi మరియు అదికాకాలే అవసరాలిగా ఉన్నాయని నమ్ముకున్నదిని వేటికి అడగించడానికి, వార్క్‌స్పేస్ యాడ్మిన్ సహాయానికి అడగండి.", + "Jitsi_may_require_authentication": "Jitsi పరిశోధన అవసరం ఉండవచ్చు", + "Join": "చేరండి", + "Join_Code": "చేరండి కోడ్", + "Joined": "చేరారు", + "Jump_to_last_message": "अंतिम संदेश पर जाएं", + "Just_invited_people_can_access_this_channel": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ ఛానల్‌కు ప్రవేశించవచ్చు", + "Just_invited_people_can_access_this_team": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ టీమ్‌కు ప్రవేశించవచ్చు", + "Label_Input_Two_Factor_Code": "कोड", + "Label_Input_Two_Factor_Password": "पासवर्ड", + "Language": "భాష", + "last_message": "చివరి సందేశం", + "Last_owner_team_room": "మీరు ఈ ఛానల్‌కు చివరి యజమాని. మీరు టీమ్ ను విడిచిపోతే, ఛానల్ టీమ్ లో ఉంటుంది కాని మీరు వాడు బాహ్యాంతరం నుండి అదనపుడు నిర్వహిస్తారు.", + "Last_updated": "अंतिम बार अपडेट किया गया", + "Last_updated_at": "अंतिम बार अद्यतन अपडेट किया गया", + "Last_updated_on": "आखिरी बार अपडेट किया गया:", + "last-owner-can-not-be-removed": "చివరి యజమానిని తీసివేయలేరు", + "Leader": "నాయకుడు", + "Learn_more": "మరింతగా అర్థం చేయండి", + "Leave": "వదిలిపోకూడని", + "leave": "వదిలిపోకూడని", + "Leave_Team": "టీమ్ ను విడిచిపోతున్నారు", + "leaving_room": "గడిచిపోవడం", + "Left_The_Room_Successfully": "విజయవంతంగా కింద రాను", + "Left_The_Team_Successfully": "సఫలంగా టీమ్ ను విడిచారు", + "Legal": "చట్టం", + "License": "లైసెన్స్", + "Light": "లైట్", + "Livechat_transfer_return_to_the_queue": "చాట్ను క్యూను తిరిగి ఇస్తే", + "Load_More": "మరిన్ని లోడ్ చేయండి", + "Load_Newer": "కొత్తగా లోడ్ చేయండి", + "Load_Older": "పాతకాలం లోడ్ చేయండి", + "Loading": "लोड हो रहा है", + "Local_authentication_auto_lock_1800": "30 నిమిషాల తరువాత", + "Local_authentication_auto_lock_300": "5 నిమిషాల తరువాత", + "Local_authentication_auto_lock_3600": "1 గంట తరువాత", + "Local_authentication_auto_lock_60": "1 నిమిషాల తరువాత", + "Local_authentication_auto_lock_900": "15 నిమిషాల తరువాత", + "Local_authentication_biometry_fallback": "పాస్‌కోడ్ ఉపయోగించండి", + "Local_authentication_biometry_title": "ధ్యానం పెట్టినవారు", + "Local_authentication_change_passcode": "పాస్‌కోడ్ను మార్చండి", + "Local_authentication_facial_recognition": "ముఖంలో గుర్తింపు", + "Local_authentication_fingerprint": "వంగ్ల గుర్తింపు", + "Local_authentication_info": "గమనించండి: మీరు పాస్‌కోడ్ను మరియుప్పటికేవి మరోసారి విసర్జించాలిపోతుంది, కాబట్టి అప్లికేషన్ నుంచి తొలగించాలిపోతుంది.", + "Local_authentication_unlock_option": "పాస్‌కోడ్ తో అన్లాక్ చేయండి", + "Local_authentication_unlock_with_label": "{{label}} తో అన్లాక్ చేయండి", + "Log_analytics_events": "లాగ్ విశ్లేషణ ఈవెంట్లు", + "Logged_out_by_server": "మీరు పనితనం ద్వారా లాగౌట్ చేయబడింది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", + "Logged_out_of_other_clients_successfully": "ఇతర గ్రాహకాల నుండి యథార్థంగా లాగౌట్ అవుతున్నారు", + "Logging_out": "లాగౌట్ అవుతోంది.", + "Login": "లాగిన్", + "Login_error": "మీ రుచియవి తిరిగి చూడబడలేదు! దయచేసి మళ్ళీ ప్రయత్నించండి.", + "Logout": "లాగౌట్", + "Logout_failed": "లాగౌట్ అయిపోయింది!", + "Logout_from_other_logged_in_locations": "ఇతర సెట్ అంగాల నుండి లాగౌట్ చేయండి", + "Mark_as_unread": "అచ్చుకోండి", + "Mark_as_unread_Info": "అచ్చుకోవడానికి సందేశాలు ఉన్నప్పుడు కొనసాగవచ్చు", + "Mark_read": "मार्क पढ़ें", + "Mark_unread": "अवाचन चिह्नित करें", + "Markdown_tools": "मार्कडाउन उपकरण", + "Max_number_of_users_allowed_is_number": "అనుమతించబడిన వాడకు గరిష్ఠ సంఖ్య {{maxUsers}} ఉంది", + "Max_number_of_uses": "ఉపయోగాల గరిష్ఠ సంఖ్య", + "Max_Repeating_Characters": "अधिकतम {{quantity}} दोहराए जाने वाले वर्ण", + "Media_auto_download": "మీడియా ఆటో-డౌన్‌లోడ్", + "Members": "సభ్యులు", + "members": "సభ్యులు", + "Mention_user": "उपयोगकर्ता का उल्लेख करें", + "Mentions": "స్మరణలు", + "Mentions_With_@_Symbol": "@ चिह्न के साथ उल्लेख", + "Menu": "मेनू", + "Message": "సందేశం", + "message": "సందేశం", + "Message_actions": "సందేశ చర్యలు", + "Message_composer_Send_to_channel": "ఛానల్కు పంపండి", + "Message_has_been_shared": "సందేశం పంచుకుంది", + "Message_HideType_added_user_to_team": "\"యూజర్ టీమ్‌కు చేర్చబడింది\" సందేశాలను దాచు", + "Message_HideType_au": "వాడు చేర్చబడినాడు", + "Message_HideType_mute_unmute": "వాడు ధ్వనిని నిలిపించాడు / తిరగాడు", + "Message_HideType_r": "ఛానల్ పేరు మారింది", + "Message_HideType_removed_user_from_team": "\"యూజర్ టీమ్ నుండి తీసివేయబడింది\" సందేశాలను దాచు", + "Message_HideType_rm": "సందేశం తీసిపోయింది", + "Message_HideType_room_archived": "రూమ్ ఆర్చైవ్ అయ్యింది", + "Message_HideType_room_unarchived": "రూమ్ ఆర్చైవ్ కాదు", + "Message_HideType_ru": "వాడు తీసిపోయినాడు", + "Message_HideType_subscription_role_added": "వ్యాసానికి హక్కు స్థాపించబడింది", + "Message_HideType_subscription_role_removed": "హక్కు లేకపోతే", + "Message_HideType_uj": "వాడు చేరిపోయినాడు", + "Message_HideType_ujt": "\"యూజర్ జాయిండ్ టీమ్‌లో\" సందేశాలను దాచు", + "Message_HideType_ul": "వాడు విడిచిపోయినాడు", + "Message_HideType_ult": "\"యూజర్ లేవేల్ టీమ్‌ను విడిచబడింది\" సందేశాలను దాచు", + "Message_HideType_user_added_room_to_team": "\"యూజర్ రూమ్ టీమ్‌కు చేర్చబడింది\" సందేశాలను దాచు", + "Message_HideType_user_converted_to_channel": "\"యూజర్ టీమ్ ను చానల్ కి మార్చారు\" సందేశాలను దాచు", + "Message_HideType_user_converted_to_team": "\"యూజర్ చానల్ ను టీమ్‌కు మార్చారు\" సందేశాలను దాచు", + "Message_HideType_user_deleted_room_from_team": "\"యూజర్ రూమ్ ని టీమ్ నుండి తొలగించారు\" సందేశాలను దాచు", + "Message_HideType_user_removed_room_from_team": "\"యూజర్ రూమ్ ని టీమ్ నుండి తీసివేయబడింది\" సందేశాలను దాచు", + "Message_HideType_ut": "వాడు చర్చలో చేరిపోయినాడు", + "Message_HideType_wm": "స్వాగతం", + "Message_Ignored": "సందేశం పరిహరించబడింది. ప్రదర్శించడానికి ప్రాణాలు నొక్కండి.", + "Message_removed": "సందేశం తీసివేయబడింది", + "Message_Reported": "సందేశం నివేదిస్తున్నాం", + "Message_starred": "సందేశం నకిలీయం చేసినది", + "Message_translated_into_idiom": "సందేశం {{idiom}} భాషలోకి అనువదించబడింది", + "Message_unstarred": "సందేశం నకిలీయం తీసివేయబడింది", + "Message_was_not_read": "संदेश नहीं पढ़ा गया था।", + "Message_was_read": "संदेश पढ़ा गया था।", + "messages": "సందేశాలు", + "Missed_call": "మిస్డ్ కాల్", + "missing_room_e2ee_description": "గది కోసం ఎన్క్రిప్షన్ కీలు నవీకరించబడాలి, దీని జరగాలంటే మరొక గది సభ్యుడు ఆన్లైన్‌లో ఉండాలి.", + "missing_room_e2ee_title": "కొన్ని క్షణాల్లో తిరిగి తనిఖీ చేయండి", + "Moderator": "మాడరేటర్", + "More": "अधिक", + "move": "తరలించుకో", + "Move_Channel_Paragraph": "ఛానల్ని టీమ్ కంటెక్స్ట్‌లో ప్రవేశించటం అనేది ఈ ఛానల్లను టీమ్‌కు చేర్చడం అనుకూలంగా ఉండండి, కాని టీమ్ సభ్యులు కాని తమ ఛానల్ యొక్క సభ్యులవిలేనంటే, కాని ఛానల్ సభ్యులకు ఇది అందిస్తారు. \n\nఅన్ని ఛానల్ నిర్వహణ అంగీకరించిన ఈ ఛానల్ యొక్క యజమానులు బాహ్యాంతరం నిర్వహిస్తారు. \n\nటీమ్ సభ్యులు మరియు టీమ్ యజమానులు, ఛానల్ సభ్యులు కాని దరారుగా ఛానల్ యొక్క కంటెంట్‌కు ప్రవేశించలేరు. \n\nదయచేసి గమనించండి టీమ్ యజమానులు సభ్యులను ఛానల్ నుండి తీసివేయడానికి అనుమతి ఉంది.", + "Move_to_Team": "టీమ్‌కు తరలించండి", + "Move_to_Team_Warning": "ఈ ప్రవృత్తి గురించి ముందుకు చదవిన నిర్దేశాలను చదవాలనుకుంటే, మీరు ఇప్పుడు ఈ ఛానల్‌ను ఎంచుకోవచ్చారా?", + "moving_channel_to_team": "ఛానల్ టీమ్‌కు తరలించండి", + "Mute": "నిషేధించు", + "muted": "నిషేధించబడింది", + "N_channels": "{{n}} ఛానల్‌లు", + "N_people_reacted": "{{n}} వ్యక్తులు ప్రతిసారి ప్రతిక్రియించారు", + "N_Selected_members": "{{n}} ఎంచుకోబడిన సభ్యులు", + "N_users": "{{n}} వాడుకరు", + "Name": "పేరు", + "Name_required": "नाम आवश्यक है।", + "Never": "ఎప్పటికప్పుడు", + "New_chat_transfer": "క్రొత్త చాట్ అంచనా: {{agent}} చాట్ను క్యూనుకు తిరిగి పంపించాడు", + "New_Message": "కొత్త సందేశం", + "New_Password": "కొత్త పాస్‌వర్డ్", + "Next": "తరువాత", + "Nickname": "ఉపనామం", + "No_available_agents_to_transfer": "స్థితిలో ఉన్న ఎజెంట్లు లేవు", + "No_canned_responses": "యావత్తులు క్యాన్డ్ రిస్పాన్సెలు లేవు", + "No_channels_in_team": "ఈ చర్చలో చానల్స్ లేవు", + "No_discussions": "సంవాదాలు లేవు", + "No_files": "ఏ కింద లేవు", + "No_label_provided": "{{label}} అంగడా ఇవ్వలేదు.", + "No_limit": "అమర్పు లేదు", + "No_match_found": "సరిపోలి అంశం కనబడలేదు.", + "No_members_found": "సభ్యులు దొరకలేదు", + "No_mentioned_messages": "స్మరణలేని సందేశాలు", + "No_Message": "సందేశం లేదు", + "No_messages_yet": "ఇంకా సందేశాలు లేవు", + "No_pinned_messages": "పిన్ చేసిన సందేశాలు లేవు", + "No_Reactions": "ప్రతిక్రియలేవు", + "No_Read_Receipts": "చదవడానికి సాక్షాత్కారాలేవు", + "No_results_found": "ఫలితాలు దొరకలేదు", + "No_rooms_found": "గదులు కనుగొనబడలేదు", + "No_starred_messages": "నకిలీయం చేసిన సందేశాలు లేవు", + "No_threads": "ఏ థ్రెడ్స్ లేవు", + "No_threads_following": "మీరు అనుసరిస్తున్న ఎవరూ లేవు", + "No_threads_unread": "చదవనిచ్చిన ఏ థ్రెడ్స్ లేవు", + "no-active-video-conf-provider-body": "వార్క్‌స్పేస్ యాడ్మిన్ మొదలు కాన్ఫరెన్స్ కాల్ విశేషాలు ఏర్పాట్లో ఉన్నాయి.", + "no-active-video-conf-provider-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", + "no-videoconf-provider-app-body": "వార్క్‌స్పేస్ అడ్మిన్ ద్వారా రాకెట్.చాట్ మార్కెట్‌లో కాన్ఫరెన్స్ కాల్ యాప్స్ ఇన్స్టాల్ చేయవచ్చు.", + "no-videoconf-provider-app-header": "కాన్ఫరెన్స్ కాల్ అంగడి లేదు", + "Not_RC_Server": "మీ వర్క్‌స్పేస్ అడ్మిన్‌ను సంప్రదించండి లేదా Rocket.Chat వర్క్‌స్పేస్ ఆహ్వానానికి మీ ఇమెయిల్ ఇన్‌బాక్స్‌ని శోధించండి.", + "Nothing": "ఏదో కాదు", + "Nothing_to_save": "ఉంది ఏమి సేవ్ చేయాలేదు!", + "Notification_Preferences": "నోటిఫికేషన్ అభిరుచులు", + "Notifications": "నోటిఫికేషన్‌లు", + "Notifications_vibrate_from_new_messages": "కొత్త సందేశాల కోసం వైబ్రేట్", + "Notify_active_in_this_room": "ఈ గదిలో సక్రియంగా ఉన్న వాడులను నవోదయించు", + "Notify_all_in_this_room": "ఈ గదిలో అన్నివారినీ నవోదయించు", + "Objects": "वस्तुएँ", + "Off": "ఆఫ్", + "Offline": "ऑफ़लाइन", + "Omnichannel": "ఒమ్నిచానెల్", + "Omnichannel_enable_alert": "మీరు ఒమ్నిచానెల్‌లో అందుబాటులేదు. మీరు అందుబాటునారా?", + "Omnichannel_on_hold_chat_resumed": "ఆఫ్‌లోడ్ లోని చాట్ పునఃప్రారంభించబడింది: {{comment}}", + "Omnichannel_placed_chat_on_hold": "చాట్ ఆఫ్‌లోడ్: {{comment}}", + "Omnichannel_queue": "ఆమ్నిచానల్ క్యూ", + "On_hold_Livechats": "ఆఫ్‌లోడ్ లోని లైవ్చాట్‌లు", + "Onboarding_agree_terms": "కొనసాగండి, మీరు రాకెట్.చాట్ అంగీకరిస్తున్నారు", + "Onboarding_less_options": "తక్కువ ఎంపికలు", + "Onboarding_more_options": "మరికొన్ని ఎంపికలు", + "Onboarding_subtitle": "దల సహయాకాంక్ష", + "One_result_found": "ఒక ఫలితం కనుగొనబడింది।", + "Online": "ఆన్‌లైన్", + "Only_authorized_users_can_write_new_messages": "కేవలం అనుమతించబడిన వాడులు కొత్త సందేశాలను రాయగలరు", + "Oops": "అయ్యో!", + "Open_Livechats": "లైవ్చాట్‌లు ప్రగతిలో", + "Open_servers_history": "सर्वर इतिहास खोलें", + "Open_sidebar": "साइडबार खोलें", + "Open_your_authentication_app_and_enter_the_code": "మీ ప్రమాణీకరణ అనువాద అప్లికేషన్ తెరిచండి మరియు కోడ్ నమోదు చేయండి.", + "OR": "లేదా", + "OS": "ఆపరేటింగ్ సిస్టమ్", + "Overwrites_the_server_configuration_and_use_room_config": "సర్వర్ ఆకృతిని మరియు గది ఆకృతిని విధానం చేయండి", + "Owner": "యజమాని", + "Parent_channel_or_group": "ప్రధాన ఛానల్ లేదా గ్రూప్", + "Passcode_app_locked_subtitle": "{{timeLeft}} సెకన్లలో మళ్ళీ ప్రయాసం చేయండి", + "Passcode_app_locked_title": "అనువాదం చేయబడింది", + "Passcode_choose_confirm_title": "మీ కొత్త పాస్‌కోడ్ను ధృవీకరించండి", + "Passcode_choose_error": "పాస్‌కోడ్‌లు సరిపోలడం లేదు. మళ్ళీ ప్రయాసం చేయండి.", + "Passcode_choose_force_set": "అడ్మిన్ ద్వారా అవసానంగా అవసానంగా సెట్ చేయబడింది", + "Passcode_choose_title": "మీ కొత్త పాస్‌కోడ్ను ఎంచుకోండి", + "Passcode_enter_title": "మీ పాస్‌కోడ్ నమోదు", + "Password": "పాస్‌వర్డ్", + "Password_Tip_Error": "शर्त पूरी नहीं हुई।", + "Password_Tip_Success": "शर्त पूरी हुई।", + "Passwords_do_not_match": "पासवर्ड मेल नहीं खाते", + "Pause": "विराम", + "Permalink_copied_to_clipboard": "పర్మాలింక్ కోపీ అయ్యింది!", + "Person_or_channel": "వ్యక్తి లేదా చానల్", + "Phone": "ఫోన్", + "Phone_state_permission_message": "మీరు ఇప్పటికే ఫోన్ లేదా VoIP కాల్‌లో ఉన్నారో లేదో Rocket.Chat గుర్తించడానికి ఇది సహాయపడుతుంది, తద్వారా ఇన్‌కమింగ్ కాల్‌లు సరిగ్గా నిర్వహించబడతాయి.", + "Phone_state_permission_title": "ఫోన్ స్థితి యాక్సెస్‌ను అనుమతించండి", + "Pin": "పిన్", + "Pinned": "పిన్ చేసినది", + "Pinned_a_message": "ఒక సందేశాన్ని పించింది:", + "Place_chat_on_hold": "చాట్‌ను ఆఫ్లోడ్ చేయండి", + "Play": "खेलें", + "Playback_speed": "प्लेबैक स्पीड", + "Please_add_a_comment": "దయచేసి ఒక వ్యాఖ్యను చేర్చండి", + "Please_enter_your_password": "దయచేసి మీ పాస్‌వర్డ్ నమోదు చేయండి", + "Please_wait": "దయచేసి ఎక్కడ వుంటే ఉంచుకోండి.", + "Preferences": "అభిరుచులు", + "Presence_Cap_Warning_Description": "కార్యాలయంలో కనెక్షన్లు అంతర్గత వాడాల పరిమాణానికి పరిమితమయినది, కాబట్టి వాడాల స్థితిని చరిత్రానుబంధించడానికి సేవ అచ్చుమాటవంతం. ఇది కొన్నిసేపటికీ వార్క్‌స్పేస్ అమర్చాయిన అంగుళాలో మాన్యువల్ చేయబడవచ్చు.", + "Presence_Cap_Warning_Title": "వాడకు స్థితి అస్థాయితంగా అచ్చుమాట", + "Privacy_Policy": " గోప్యాచరణ విధానం", + "Private": "ప్రైవేట్", + "Private_channel": "निजी चैनल", + "Private_team": "निजी टीम", + "Processing": "प्रोसेस कर रहा है।", + "Profile": "ప్రొఫైల్", + "Profile_saved_successfully": "ప్రొఫైల్ యశస్విగా సేవ్ చేయబడింది!", + "Public": "పబ్లిక్", + "Public_channel": "सार्वजनिक चैनल", + "Push_Notifications": "పుష్ నోటిఫికేషన్లు", + "Push_Notifications_Alert_Info": "ఈ నోటిఫికేషన్లు మీకు అప్లికేషన్ ప్రారంభించలేకపోతే అందివేయబడింది", + "Queued_chats": "క్యూ చాట్‌లు", + "Quote": "ఉదాహరణ", + "React_with_emojjname": "{{emojiName}} के साथ प्रतिक्रिया दें", + "Reactions_are_disabled": "ప్రతిక్రియలు నిషేధించబడినవి", + "Reactions_are_enabled": "ప్రతిక్రియలు అనుమతించబడినవి", + "Read_External_Permission": "మీడియా అనుమతి", + "Read_External_Permission_Message": "రాకెట్.చాట్ మీ పరికరాల్లో ఫోటోలను, మీడియాను మరియు ఫైళ్లను ప్రవేశించాలి", + "Read_Only": "కేవలం చదవడానికి", + "Read_only_hint": "ఛానెల్ యజమానులు మాత్రమే క్రొత్త సందేశాలను పంపగలరు", + "Read_Receipt": "చదవడానికి సాక్షాత్కారం", + "Receive_Group_Mentions": "గ్రూప్ స్మరణలు స్వీకరించు", + "Receive_Group_Mentions_Info": "@all మరియు @here స్మరణలు స్వీకరించు", + "Receive_Notification": "నోటిఫికేషన్ స్వీకరించండి", + "Receive_notifications_from": "{{name}} నుండి నోటిఫికేషన్‌లు స్వీకరించండి", + "Recently_used": "हाल ही में उपयोग किया गया", + "Record_audio_message": "ऑडियो संदेश रिकॉर्ड करें", + "Register": "నమోదు", + "Registration_Succeeded": "నమోదు విజయవంతంగా చేయబడింది!", + "reject": "తిరస్కరించు", + "Remove": "తొలగించండి", + "remove": "తొలగించండి", + "Remove_from_room": "కొరకున్ని తీసివేయండి", + "Remove_from_Team": "టీమ్ నుండి తీసివేయండి", + "Remove_from_workspace_history": "कार्यस्थान इतिहास से निकालें।", + "Remove_Member": "సభ్యుడను తీసివేయండి", + "Remove_Team_Room_Warning": "మీరు ఈ ఛానల్‌ను టీమ్ నుండి తీసివేయాలా?", + "Remove_User_Team_Channels": "యూజర్ ను తీసివేయబడే ఛానల్‌లను ఎంచుకోండి.", + "Removed__roomName__from_the_team": "#{{roomName}} ని ఈ టీమ్ నుండి తీసివేసారు", + "Removed__username__from_the_team": "@{{userRemoved}} ని ఈ టీమ్ నుండి తీసివేసారు", + "Removed_user_as_role": "{{user}} నియమాలను {{role}} గించినారు", + "removing_team": "టీమ్ నుండి తీసివేస్తోంది", + "Removing_user_from_this_team": "మీరు {{user}} ను ఈ టీమ్ నుండి తీసివేస్తున్నారు", + "replies": "సమాధానాలు", + "Reply": "ప్రతిసారించండి", + "reply": "సమాధానం", + "Reply_in_direct_message": "నిర్దేశ సందేశంలో ప్రతిస్థానించండి", + "Reply_in_Thread": "థ్రెడ్లో సమాధానం", + "Report": "నివేదించండి", + "Report_reason_required": "कारण आवश्यक है।", + "Required": "అవసరమైనది", + "Resend": "మళ్ళీ పంపించు", + "RESET": "రీసెట్", + "Reset_E2EE_Password": "E2EE పాస్‌వర్డ్‌ను పునస్ధాపించండి", + "Reset_E2EE_Password_Description": "రిసెట్ చేయడం ద్వారా మీరు లాగ్ అవుట్ అవుతారు మరియు తిరిగి లాగిన్ అయినప్పుడు కొత్త E2EE పాస్‌వర్డ్ రూపొందించబడుతుంది.\n\nఆన్‌లైన్ సభ్యులు ఉన్న ఎన్క్రిప్ట్ చేయబడిన గదులకు మీరు మళ్లీ ప్రాప్తిని పొందుతారు, కాని సభ్యులు లేనివారికి మాత్రం ప్రాప్తి పొందలేరు.", + "Reset_password": "పాస్‌వర్డ్ను రీసెట్ చేయండి", + "resetting_password": "పాస్‌వర్డ్ను రీసెట్ చేస్తోంది", + "Resume": "క్రింద పోవడానికి", + "Return_to_waiting_line": "వేచివేచికలకు తిరిగి వెళ్ళండి", + "Review_app_desc": "{{store}}లో మాకు 5 నకలు ఇవ్వండి", + "Review_app_later": "తరువాత", + "Review_app_no": "కాదు", + "Review_app_title": "ఈ యాప్ నేను ఆనందిస్తున్నానా?", + "Review_app_unable_store": "{{store}} తెరవలేకపోయింది", + "Review_app_yes": "అవును!", + "Review_message": "समीक्षा संदेश", + "Review_this_app": "ఈ యాప్‌ను సమీక్షించండి", + "Rocket_Chat_Documentation": "Rocket.Chat డాక్యుమెంటేషన్", + "Roles": "పాత్రలు", + "room_allowed_reactions": "గదిలో ప్రతిక్రియలను అనుమతించారు", + "room_archived": "అభిలోఖిత కొరకు ఉన్నది", + "room_avatar_changed": "గది అవాటార్ మారింది", + "room_changed_topic_to": "గది టాపిక్‌ను మార్చారు: {{topic}}", + "room_changed_type": "గది రకాన్ని మార్చారు {{type}}", + "room_disallowed_reactions": "గదిలో ప్రతిక్రియలను అనుమతించలేదు", + "Room_Info": "గది సమాచారం", + "Room_Info_Edit": "గది సమాచారం సవరించు", + "Room_name_changed_to": "గది పేరును మార్చారు: {{name}}", + "Room_not_found": "కొన్ని కారణాలతో కమ్మిట్ చేయబడినవి లేవు", + "Room_Password": "గది పాస్‌వర్డ్", + "room_removed_read_only_permission": "గదిలో పఠనాధారిత అనుమతిని తొలగించారు", + "room_set_read_only_permission": "గదిని కేవలం చదవడానికి రూపొందించారు", + "room_unarchived": "అభిలోఖిత నుండి తీసుకొనబడింది", + "room-name-already-exists": "కొనసాగించబడిన కొత్త కొరకు", + "Rooms_With_#_Symbol": "# चिन्ह वाले कमरे", + "SAVE": "భద్రపరచు", + "Save": "భద్రపరచండి", + "Save_Changes": "మార్చిన మార్పులను భద్రపరచండి", + "Save_Your_E2E_Password": "మీ E2E పాస్‌వర్డ్‌ను భద్రపరచండి", + "Save_Your_Encryption_Password": "మీ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను భద్రపరచండి", + "Save_Your_Encryption_Password_info": "గమనించండి, మీ పాస్‌వర్డ్ కనిపించితే, అదనపు పొందడానికి ఎటువంటి మార్గం లేదు మరియు మీ సందేశాలకు ప్రవేశం కనిపిస్తుంది.", + "Save_Your_Encryption_Password_warning": "ఈ పాస్‌వర్డ్ ఎక్కడా భద్రపరచబడినది కాదు, అదనపు ఏకాధికారంగా ఇతర కడాకాలాను భద్రపరచండి.", + "Saved": "భద్రపరచబడింది", + "saved_to_gallery": "గ్యాలరీకి భద్రపరచబడింది", + "saving_preferences": "అభిరుచులను భద్రపరచారు", + "saving_profile": "ప్రొఫైల్‌ను భద్రపరచారు", + "saving_settings": "సెట్టింగులను భద్రపరచారు", + "Screen_lock": "స్క్రీన్ లాక్", + "Search": "వెతుకు", + "Search_by": "ద్వారా వెతుకు", + "Search_emoji": "ఎమోజిని వెతుకు", + "Search_global_users": "ప్రపంచవ్యాప్తంగా వాడుకరులను వెతుకు", + "Search_global_users_description": "మీరు ఆన్‌చర్చలోని అన్యాన్య కంపెనీలు లేదా పనుల కిందరా ఏ వాడుకరిని వెతుకుతున్నట్లు ఉంటే, మీరు ఇదను ఎంచుకోవచ్చు.", + "Search_Messages": "సందేశాలను వెతుకు", + "Search_messages": "సందేశాలను శోధించండి", + "Search_Results_found": "{{count}} ఫలితాలు కనుగొనబడ్డాయి।", + "Searching": "శోధిస్తోంది", + "Security_and_privacy": "భద్రత మరియు గోప్యత", + "Select": "ఎంచుకోండి", + "Select_a_Channel": "చానల్‌ను ఎంచుకోండి", + "Select_a_Department": "ఒక శాఖను ఎంచుకోండి", + "Select_a_User": "ఒక వాడుకరిని ఎంచుకోండి", + "Select_an_option": "ఒక ఐచేస్టు ఎంచుకోండి", + "Select_channels_to_delete": "ఇది పునఃస్థాపించబడదు. మీరు టీమ్‌ను తొలగిస్తే, అన్ని చాట్ విషయాలు మరియు కాన్ఫిగరేషన్ తొలగిపోవడం అంటే. \n\nమీరు తొలగించలేని ఛానల్‌లను ఎంచుకోండి. కాని మీరు భర్తికి రానివారింటిగా అందుబాటులో ఉంటారు. ప్రజా ఛానల్‌లు ఇక కూడా ప్రజాకు కలిగి ఉండవచ్చు.", + "Select_emoji_reaction": "प्रतिक्रिया के लिए इमोजी चुनें", + "Select_Members": "సభ్యులను ఎంచుకోండి", + "Select_Server": "పనితనం ఎంచుకోండి", + "Select_tags": "ట్యాగ్‌లను ఎంచుకోండి", + "Select_Team": "టీమ్ ఎంచుకోండి", + "Select_Team_Channels": "మీరు విడిచిపోవచ్చే టీమ్ ఛానల్‌లను ఎంచుకోండి.", + "Select_Team_Channels_To_Delete": "తొలగించాల్సిన టీమ్ ఛానల్‌లను ఎంచుకోండి, మీరు ఎంచుకోలేనివి వర్క్‌స్పేస్‌కు తరలబడతాయి. \n\nప్రజా ఛానల్‌లు ప్రజలకు ప్రజావాడుగా మరియు ప్రతివాడికి దరారుగా కనిపిస్తాయి.", + "Select_Uploaded_Image": "ఎంపడిన చిత్రాన్ని ఎంచుకోండి", + "Select_Users": "వాడుకరులను ఎంచుకోండి", + "Send": "పంపించండి", + "Send_audio_message": "ऑडियो संदेश भेजें", + "Send_crash_report": "క్రాష్ నివేదించండి", + "Send_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపండి", + "Send_message": "సందేశాన్ని పంపండి", + "Send_to": "పంపండి...", + "sending_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపబడుతోంది", + "Sending_to": "పంపిస్తోంది", + "Server": "పనితనం", + "Server_version": "పనితనం: {{version}}", + "Set_new_password": "नया पासवर्ड सेट करें", + "Set_username_subtitle": "ఇతరులకు మీరు సందేశాల్లో మీరుని స్మరించడానికి వాడుకరి పేరు ఉపయోగిస్తారు", + "Settings": "సెట్టింగులు", + "Settings_succesfully_changed": "సెట్టింగులను విజయవంతంగా మార్చారు!", + "Share": "భాగస్వామ్యం", + "Share_Link": "లింక్‌ను భాగస్వామ్యం చేయండి", + "Share_this_app": "ఈ యాప్‌ను భాగస్వామ్యం చేయండి", + "Sharing": "భాగస్వామ్యం", + "Shortcut": "షార్ట్‌కట్", + "Show_badge_for_mentions": "ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించు", + "Show_badge_for_mentions_Info": "కేవలం సర్వర్ల ఉపయోగించిన ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించాలి", + "Show_more": "మరింతగా చూపండి..", + "Show_Password": "पासवर्ड दिखाएं", + "Sign_Up": "నమోదు చేయండి", + "Skip": "స్కిప్", + "Smileys_and_people": "स्माइली और लोग", + "Sort_by": "సార్టు చేయండి", + "Sound": "ధ్వని", + "Star": "స్టార్", + "Starred": "స్టార్ చేసినవి", + "Start_a_call": "ఒక కాల్ ప్రారంభించండి", + "Start_a_Discussion": "చర్చాను ప్రారంభించండి", + "Started_call": "{{userBy}} ద్వారా కాల్ ప్రారంభించబడింది", + "Started_discussion": "ఒక చర్చను ప్రారంభించారు:", + "Status_saved_successfully": "స్థితి విజయవంతంగా భద్రపరచబడింది!", + "Status_text_limit_exceeded": "{{सीमा}} अक्षर की सीमा पार हो गई", + "Supported_versions_expired_description": "వార్క్‌స్పేస్ యాడ్మిన్ మొదటిగా మొబైల్ మరియు డెస్క్టాప్ యాప్‌ల నుండి ప్రవేశాన్ని మళ్లీ ప్రారంభించడానికి వార్క్‌స్పేస్‌ను నవీకరించాలి.", + "Supported_versions_expired_title": "{{workspace_name}} అసమర్థిత రాకెట్.చాట్ ఒరిజినల్ వెర్షన్‌ను పరిచయించిపోయింది", + "Supported_versions_warning_update_required": "నవీకరణ అవసరం", + "Symbols": "प्रतीकಗಳು", + "Table": "పటం", + "Tags": "ట్యాగ్‌లు", + "Take_a_photo": "ఫోటో తీసుకో", + "Take_a_video": "వీడియో తీసుకో", + "Take_it": "తీసుకో!", + "Team": "టీమ్", + "Team_hint_encrypted": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ టీమ్. ఎన్క్రిప్టెడ్ టీమ్‌తో శోధన పనులు పనిస్తాయి మరియు అధిసూచనలు సందేశాల విషయాన్ని చూపవచ్చు.", + "Team_hint_encrypted_not_available": "ప్రైవేట్ టీమ్‌కు మాత్రమే అందుబాటు", + "Team_hint_not_read_only": "ఈ టీమ్‌లో ఉన్న అన్ని వాడాలు సందేశాలను రాయగలరు", + "Team_hint_private": "కేవలం ఆహ్వానిత వాడాలు చేరవచ్చు", + "Team_hint_public": "అమర్చబడినప్పుడు, ఎవరైనా టీమ్‌కు చేరవచ్చు", + "Team_Name": "టీమ్ పేరు", + "Team_not_found": "టీమ్ కనబడలేదు", + "team-name-already-exists": "అంగీకరించిన పేరుతో టీమ్ ఇప్పటికే ఉంది", + "Teams": "టీమ్‌లు", + "Terms_of_Service": "సేవల షరతులు", + "The_autocomplete_options_are_available_above_the_input_composer": "इनपुट कंपोजर के ऊपर ऑटोकम्प्लीट विकल्प उपलब्ध हैं।", + "The_room_does_not_exist": "ఈ కమ్మిట్ ఉండదు లేదా మీకు ప్రవేశ అనుమతి ఉంది", + "The_user_will_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", + "The_user_will_be_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", + "The_user_wont_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", + "Theme": "థీమ్", + "There_was_an_error_while_action": "{{action}} ప్రవృత్తి ప్రారంభించడానికి ఒక లోపం ఉంది!", + "This_room_is_blocked": "ఈ గది నిషేధించబడింది", + "This_room_is_read_only": "ఈ గది కంటెంట్ చదవడానికి మాత్రమే", + "This_will_clear_all_your_offline_data": "ఇది మీ ఆఫ్‌లైన్ డేటాను అన్ని క్లియర్ చేస్తుంది.", + "This_will_remove_all_data_from_this_server": "ఇది ఈ వర్క్‌స్పేస్‌నుండి అన్ని డేటాను తొలగిస్తుంది.", + "Threads": "థ్రెడ్స్", + "Threads_displaying_all": "అన్నింటిని ప్రదర్శిస్తుంది", + "Threads_displaying_following": "అనుసరిస్తుంది", + "Threads_displaying_unread": "చదవనిచ్చినది ప్రదర్శిస్తుంది", + "Threads_dm_unread": "थ्रेड्स, {{unread}} अपठित, प्रत्यक्ष उल्लेख", + "Threads_group_unread": "थ्रेड्स, {{unread}} अपठित, समूह उल्लेख", + "Threads_unread": "थ्रेड्स, {{unread}} अपठित", + "Timezone": "సమయ మండలం", + "To_download": "డౌన్‌లోడ్ చేయడానికి", + "Toggle_call_controls": "కాల్ నియంత్రణలను టోగల్ చేయండి", + "Token_expired": "మీ సెషన్ అవుతోంది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", + "Topic": "విషయం", + "topic": "విషయం", + "totp-invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లదు", + "Translate": "అనువాదం", + "Travel_and_places": "यात्रा और स्थान", + "Try_again": "ప్రయత్నించండి", + "Turn_camera_off": "కెమెరాను ఆపివెయ్యి", + "Turn_camera_on": "కెమెరాను ఆన్ చేయండి", + "Turn_mic_off": "മൈക്ക് ഓഫ് ചെയ്യുക", + "Turn_mic_on": "మైక్ ఆన్ చేయి", + "Two_Factor_Authentication": "రెండు అంశ ప్రామాణీకరణ", + "Two_Factor_Success_message": "द्वि-घटक प्रमाणीकरण कोड भेज दिया गया है! कृपया अपना ईमेल जाँचें।", + "Type_message": "సందేశాన్ని టైప్ చేయండి", + "Types": "రకాలు", + "UNARCHIVE": "అనార్కైవ్", + "unarchive": "అనార్కైవ్", + "unauthorized": "అనుమతి లేదు", + "Unfavorite": "अनफेवरेट", + "Unfollow_thread": "थ्रेड को अनफ़ॉलो करें", + "Unfollowed_thread": "అన్‌ఫాలో థ్రెడ్", + "Unhide": "छिपाएं नहीं", + "Unignore": "పరిహరించాలి", + "Unmute": "ఆధ్వర్యపరచించండి", + "unmuted": "ఆధ్వర్యపరచించబడింది", + "Unpin": "పిన్ చేయకోండి", + "Unread": "చదవని", + "unread_messages": "చదవని", + "Unread_on_top": "చదవని పైన", + "Unstar": "స్టార్ తీసుకో", + "Unsupported_format": "అమాన్యమైన ఫార్మాట్", + "Unsupported_system_message": "అనుమతించబడని వ్యవస్థ సందేశం", + "Updating": "తాజాగా అప్డేట్ అవుతోంది...", + "Upload_image": "చిత్రం అప్‌లోడ్ చేయండి", + "Upload_in_progress": "అప్లోడ్ ప్రగతిలో ఉంది", + "Uploading": "అప్లోడ్ అవుతోంది", + "Use": "ఉపయోగించండి", + "User": "వాడుకరి", + "User__username__is_now_a_leader_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} యజమానిగా ఉన్నాడు", + "User__username__is_now_a_moderator_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} మాడరేటర్గా ఉన్నాడు", + "User__username__is_now_a_owner_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} యజమానిగా ఉన్నాడు", + "User__username__removed_from__room_name__leaders": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", + "User__username__removed_from__room_name__moderators": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", + "User__username__removed_from__room_name__owners": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", + "User_added_to": "{{userAdded}} నిలువబడింది", + "User_has_been_ignored": "వాడిని పరిహరించారు", + "User_has_been_key": "వాడుకరి {{key}} అయిపోయింది", + "User_has_been_muted": "{{userMuted}} నిశ్శబ్దం చేయబడింది", + "User_has_been_removed": "{{userRemoved}} తొలగించబడింది", + "User_has_been_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", + "User_has_been_unignored": "వాడు ఇక పరిహరించరాడు", + "User_has_been_unmuted": "{{userUnmuted}} నిశ్శబ్దం తీసుకోబడింది", + "User_Info": "వాడుకరి సమాచారం", + "User_joined_the_channel": "ఛానల్‌లో చేరారు", + "User_joined_the_conversation": "చర్చలో చేరారు", + "User_joined_the_team": "ఈ టీమ్‌లో చేరారు", + "User_left_this_channel": "ఛానల్‌ను వదిలిపోయారు", + "User_sent_an_attachment": "{{user}} అనుకూలంగా పంపించింది", + "Username": "వాడుకరి పేరు", + "Username_is_already_in_use": "उपयोगकर्ता नाम पहले से ही उपयोग में है।", + "Username_not_available": "उपयोगकर्ता नाम उपलब्ध नहीं है।", + "Username_or_email": "వాడుకరి పేరు లేదా ఇమెయిల్", + "Username_required": "यूज़रनेम आवश्यक है", + "Users": "వాడుకరులు", + "Uses_server_configuration": "పనితనం ఆకృతి ఉపయోగిస్తుంది", + "Verify_email_desc": "మేము మీ నమోదుని ధ్యానంలోకి పెంపొందాం. మీరు తక్షణం ఒక ఇమెయిల్ పొందరాక, దయచేసి మళ్ళీ ప్రయత్నించండి.", + "Version_no": "అనువర్తనం సంచిక: {{version}}", + "Video": "వీడియో", + "video-conf-provider-not-configured-body": "వార్క్‌స్పేస్ యాడ్మిన్ మొదలు కాన్ఫరెన్స్ కాల్స్ విశేషాలు ఏర్పాట్లో ఉన్నాయి.", + "video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", + "View_Original": "అసలు చూడండి", + "View_Thread": "థ్రెడ్‌ను వీక్షించండి", + "VoIP_Call_Issue": "కాల్‌లో సమస్య ఉంది, తర్వాత మళ్లీ ప్రయత్నించండి.", + "Wait_activation_warning": "మీరు లాగిన్ చేయడానికి మొదటి స్థాయింలో మీ ఖాతాను ఒక అడ్మినిస్ట్రేటర్ మానవారం ప్రత్యామ్నాయం చేయాలి.", + "Waiting_for_answer": "జవాబు కోసం ఎదురు ఉంది", + "Waiting_for_network": "నెట్వర్క్ కోసం వేచి ఉండి...", + "Waiting_for_server_connection": "సర్వర్ కనెక్షన్ కోసం ఎదురు ఉంది", + "Websocket_disabled": "ఈ పనితనంలో వెబ్‌సాకెట్ నిషేధించబడింది.\n{{contact}}", + "What_are_you_doing_right_now": "మీరు ఇప్పటికే ఏమి చేస్తున్నారు?", + "Whats_the_password_for_your_certificate": "మీ సర్టిఫికేట్ కోసం పాస్‌వర్డ్ ఏమిటి?", + "Wi_Fi": "Wi-Fi", + "Wi_Fi_and_mobile_data": "Wi-Fi మరియు మొబైల్ డేటా", + "Without_Servers": "పనితనం లేదా", + "Workspace_URL": "వర్క్‌స్పేస్ URL", + "Workspace_URL_Example": "open.rocket.chat", + "Workspaces": "వర్క్‌స్పేస్‌లు", + "Would_like_to_place_on_hold": "ఈ చాట్‌ను ఆఫ్‌లోడ్ చేయాలా?", + "Would_you_like_to_return_the_inquiry": "మీరు ప్రశ్నను వీక్షించాలా?", + "Write_External_Permission": "గ్యాలరీ అనుమతి", + "Write_External_Permission_Message": "Rocket.Chat మీ గ్యాలరీకి ప్రవేశించడానికి అనుమతిస్తుంది.", + "Yes": "అవును", + "Yes_action_it": "అవును, {{action}} చేయండి!", + "Yes_remove_user": "అవును, వాడిని తీసివేయండి!", + "Yesterday": "నిన్న", + "You": "మీరు", + "you": "మీరు", + "You_are_converting_the_team": "మీరు ఈ టీమ్‌ను ఒక ఛానల్‌కు మార్చుతున్నారు", + "You_are_deleting_the_team": "మీరు ఈ టీమ్‌ను తొలగిస్తున్నారు.", + "You_are_in_preview_mode": "మీరు ప్రివ్యూ మోడ్లో ఉన్నారు", + "You_are_leaving_the_team": "మీరు టీమ్ '{{team}}' ను విడిచిపోతున్నారు", + "You_can_search_using_RegExp_eg": "మీరు RegExp ఉపయోగించవచ్చు. ఉదా. `/^text$/i`", + "You_colon": "మీరు: ", + "You_dont_have_account": "మీ వద్ద ఖాతా లేదు?", + "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "ఏదిగానా ఏక Rocket.Chat వర్క్‌స్పేస్‌కి ప్రవేశించాలి కాబట్టి ఏదైనా షేర్ చేయడానికి.", + "You_need_to_verifiy_your_email_address_to_get_notications": "నోటిఫికేషన్‌లు పొందడానికి మీ ఇమెయిల్ చిరునామాని ధ్యానలోకి పెంచాలి", + "you_were_mentioned": "మీరు పేర్కొనబడింది", + "You_were_removed_from_channel": "మీరు {{channel}} నుంచి తొలగించబడింది", + "You_will_be_logged_out_from_other_locations": "మీరు ఇతర ప్రదేశాలనుండి లాగౌట్ అవుతారు.", + "You_will_be_logged_out_of_this_application": "మీరు ఈ అప్లికేషన్ నుండి లాగౌట్ అవుతారు.", + "You_will_not_be_able_to_recover_this_message": "మీరు ఈ సందేశాన్ని పునఃప్రాప్తి చేయలేదు!", + "You_will_unset_a_certificate_for_this_server": "ఈ వర్క్‌స్పేస్ కోసం మీరు ఒక సర్టిఫికేట్ అనాకరిస్తారు", + "Your_certificate": "మీ సర్టిఫికేట్", + "Your_invite_link_will_expire_after__usesLeft__uses": "మీ ఆహ్వాన లింక్ {{usesLeft}} ఉపయోగాల తరువాత అది కనబడిపోతుంది.", + "Your_invite_link_will_expire_on__date__": "మీ ఆహ్వాన లింక్ {{date}} లో అది కనబడిపోతుంది.", + "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "మీ ఆహ్వాన లింక్ {{date}} లేదా {{usesLeft}} ఉపయోగాల తరువాత అది కనబడిపోతుంది.", + "Your_invite_link_will_never_expire": "మీ ఆహ్వాన లింక్ ఎప్పుడూ కనబడదు.", + "Your_password_is": "మీ సంకేతపదం", + "Your_Password_Must_Have": "మీ పాస్‌వర్డ్ తప్పనిసరిగా ఉండాలి:", + "Your_workspace": "మీ వర్క్‌స్పేస్" +} diff --git a/app/i18n/locales/tr.json b/app/i18n/locales/tr.json index 2cefc6d8732..b228bb5ba60 100644 --- a/app/i18n/locales/tr.json +++ b/app/i18n/locales/tr.json @@ -604,6 +604,7 @@ "Threads_unread": "Konular, {{unread}} okunmamış", "Timezone": "Saat dilimi", "To_download": "Indirmek için", + "Toggle_call_controls": "Arama denetimlerini aç/kapat", "Topic": "Konu", "topic": "konu", "Translate": "Çevir", diff --git a/app/i18n/locales/zh-CN.json b/app/i18n/locales/zh-CN.json index 1407c9f7217..acc0e7607b5 100644 --- a/app/i18n/locales/zh-CN.json +++ b/app/i18n/locales/zh-CN.json @@ -576,6 +576,7 @@ "Threads_unread": "主题,{{unread}} 未读", "Timezone": "时区", "To_download": "下载", + "Toggle_call_controls": "切换通话控制", "Topic": "主题", "topic": "主题", "Translate": "翻译", diff --git a/app/i18n/locales/zh-TW.json b/app/i18n/locales/zh-TW.json index f1cfa644d26..9055d8e11d5 100644 --- a/app/i18n/locales/zh-TW.json +++ b/app/i18n/locales/zh-TW.json @@ -604,6 +604,7 @@ "Threads_unread": "討論串,{{unread}} 未讀訊息", "Timezone": "時區", "To_download": "下載", + "Toggle_call_controls": "切換通話控制", "Topic": "主題", "topic": "主題", "Translate": "翻譯", From 112591bd10ba886f4ec95fa071ab36b5e6c201e5 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:03:46 -0300 Subject: [PATCH 06/24] feat(a11y): hide call buttons from screen reader when controls are not visible --- app/views/CallView/components/CallButtons.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/CallView/components/CallButtons.tsx b/app/views/CallView/components/CallButtons.tsx index 332b123a9c5..ae3dfaec55a 100644 --- a/app/views/CallView/components/CallButtons.tsx +++ b/app/views/CallView/components/CallButtons.tsx @@ -119,6 +119,7 @@ export const CallButtons = () => { containerStyle ]} pointerEvents={controlsVisible ? 'auto' : 'none'} + accessibilityElementsHidden={!controlsVisible} testID='call-buttons'> {layoutMode === 'wide' ? ( From 7722f5c25229af982aa026dc5f4e2c1ad19a7621 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:03:46 -0300 Subject: [PATCH 07/24] feat(a11y): add accessibility label and role to DialpadButton --- app/views/CallView/components/Dialpad/DialpadButton.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/views/CallView/components/Dialpad/DialpadButton.tsx b/app/views/CallView/components/Dialpad/DialpadButton.tsx index 05860e56cae..4258fd14031 100644 --- a/app/views/CallView/components/Dialpad/DialpadButton.tsx +++ b/app/views/CallView/components/Dialpad/DialpadButton.tsx @@ -25,6 +25,8 @@ const DialpadButton = ({ digit, letters }: IDialpadButton): React.ReactElement = return ( [ styles.button, { backgroundColor: pressed ? colors.buttonBackgroundSecondaryPress : colors.buttonBackgroundSecondaryDefault } From 1d51a0cd0801efda26ba1c7c647d554cf301eb73 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:03:46 -0300 Subject: [PATCH 08/24] feat(a11y): add accessibility label and role to PeerItem --- app/containers/NewMediaCall/PeerItem.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/containers/NewMediaCall/PeerItem.tsx b/app/containers/NewMediaCall/PeerItem.tsx index d316c86a3c4..e6be6c29b5c 100644 --- a/app/containers/NewMediaCall/PeerItem.tsx +++ b/app/containers/NewMediaCall/PeerItem.tsx @@ -14,6 +14,8 @@ export const PeerItem = ({ item, onSelectOption }: { item: TPeerItem; onSelectOp { backgroundColor: pressed && isIOS ? colors.surfaceSelected : colors.surfaceLight } ]} onPress={() => onSelectOption(item)} + accessibilityLabel={item.label} + accessibilityRole='button' testID={`new-media-call-option-${item.value}`} android_ripple={{ color: colors.surfaceSelected }}> From d2f7a0bf14beae2f7a149f29aab033ff5067b113 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:06:11 -0300 Subject: [PATCH 09/24] feat(a11y): keep call controls visible when screen reader is active --- app/lib/services/voip/useCallStore.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/lib/services/voip/useCallStore.ts b/app/lib/services/voip/useCallStore.ts index e4763234c64..1ed618f4893 100644 --- a/app/lib/services/voip/useCallStore.ts +++ b/app/lib/services/voip/useCallStore.ts @@ -5,6 +5,7 @@ import InCallManager from 'react-native-incall-manager'; import Navigation from '../../navigation/appNavigation'; import { hideActionSheetRef } from '../../../containers/ActionSheet'; +import { useIsScreenReaderEnabled } from '../../hooks/useIsScreenReaderEnabled'; const STALE_NATIVE_MS = 15_000; @@ -307,4 +308,8 @@ export const useCallState = () => { export const useCallContact = () => useCallStore(state => state.contact); export const useDialpadValue = () => useCallStore(state => state.dialpadValue); -export const useControlsVisible = () => useCallStore(state => state.controlsVisible); +export const useControlsVisible = () => { + const controlsVisible = useCallStore(state => state.controlsVisible); + const isScreenReaderEnabled = useIsScreenReaderEnabled(); + return controlsVisible || isScreenReaderEnabled; +}; From ac681a496b8fbc6339eb42173971b35b68ed90ae Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:20:01 -0300 Subject: [PATCH 10/24] feat(a11y): disable tap-to-hide controls when screen reader is active --- app/views/CallView/components/CallerInfo.tsx | 9 ++++++++- app/views/CallView/index.test.tsx | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/views/CallView/components/CallerInfo.tsx b/app/views/CallView/components/CallerInfo.tsx index 8a1f96f5862..26ca7006032 100644 --- a/app/views/CallView/components/CallerInfo.tsx +++ b/app/views/CallView/components/CallerInfo.tsx @@ -5,6 +5,7 @@ import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated' import AvatarContainer from '../../../containers/Avatar'; import I18n from '../../../i18n'; import { useCallContact, useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; +import { useIsScreenReaderEnabled } from '../../../lib/hooks/useIsScreenReaderEnabled'; import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; import { useTheme } from '../../../theme'; @@ -13,6 +14,7 @@ const CallerInfo = (): React.ReactElement => { const contact = useCallContact(); const toggleControlsVisible = useCallStore(state => state.toggleControlsVisible); const controlsVisible = useControlsVisible(); + const isScreenReaderEnabled = useIsScreenReaderEnabled(); const callerRowStyle = useAnimatedStyle(() => ({ opacity: withTiming(controlsVisible ? 1 : 0, { duration: CONTROLS_ANIMATION_DURATION }), @@ -23,7 +25,12 @@ const CallerInfo = (): React.ReactElement => { const avatarText = contact.username || name; return ( - + diff --git a/app/views/CallView/index.test.tsx b/app/views/CallView/index.test.tsx index 64ddb7f5e42..4a552eb4582 100644 --- a/app/views/CallView/index.test.tsx +++ b/app/views/CallView/index.test.tsx @@ -412,6 +412,7 @@ describe('CallView/CallView', () => { expect(getByText('Unmute')).toBeTruthy(); }); +<<<<<<< HEAD it('should render buttons in two rows on narrow layout', () => { mockWindowWidth = 350; setStoreState(); From 3922ca6431f7fcc7d52a6693f5de5bec3a53e730 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:32:02 -0300 Subject: [PATCH 11/24] feat(a11y): landscape layout for CallView --- app/views/CallView/CallView.stories.tsx | 1 + app/views/CallView/components/CallButtons.tsx | 1 + app/views/CallView/components/CallerInfo.tsx | 7 +++++-- app/views/CallView/index.test.tsx | 14 +------------- app/views/CallView/index.tsx | 11 ++++++++++- app/views/CallView/styles.ts | 16 ++++++++++++++++ 6 files changed, 34 insertions(+), 16 deletions(-) diff --git a/app/views/CallView/CallView.stories.tsx b/app/views/CallView/CallView.stories.tsx index ee045050d71..befdab9547a 100644 --- a/app/views/CallView/CallView.stories.tsx +++ b/app/views/CallView/CallView.stories.tsx @@ -118,6 +118,7 @@ export const SpeakerOn = () => { return ; }; +<<<<<<< HEAD // Tablet / wide layout stories — force layoutMode='wide' via ResponsiveLayoutContext width const TabletCallView = () => { const { colors } = useTheme(); diff --git a/app/views/CallView/components/CallButtons.tsx b/app/views/CallView/components/CallButtons.tsx index ae3dfaec55a..8dae1b7ce14 100644 --- a/app/views/CallView/components/CallButtons.tsx +++ b/app/views/CallView/components/CallButtons.tsx @@ -5,6 +5,7 @@ import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated' import I18n from '../../../i18n'; import { navigateToCallRoom } from '../../../lib/services/voip/navigateToCallRoom'; import { useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; +import { useResponsiveLayout } from '../../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; import CallActionButton from './CallActionButton'; import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; import { useTheme } from '../../../theme'; diff --git a/app/views/CallView/components/CallerInfo.tsx b/app/views/CallView/components/CallerInfo.tsx index 26ca7006032..7d863ea9944 100644 --- a/app/views/CallView/components/CallerInfo.tsx +++ b/app/views/CallView/components/CallerInfo.tsx @@ -6,6 +6,7 @@ import AvatarContainer from '../../../containers/Avatar'; import I18n from '../../../i18n'; import { useCallContact, useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; import { useIsScreenReaderEnabled } from '../../../lib/hooks/useIsScreenReaderEnabled'; +import { useResponsiveLayout } from '../../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; import { useTheme } from '../../../theme'; @@ -15,6 +16,8 @@ const CallerInfo = (): React.ReactElement => { const toggleControlsVisible = useCallStore(state => state.toggleControlsVisible); const controlsVisible = useControlsVisible(); const isScreenReaderEnabled = useIsScreenReaderEnabled(); + const { width, height } = useResponsiveLayout(); + const isLandscape = width > height; const callerRowStyle = useAnimatedStyle(() => ({ opacity: withTiming(controlsVisible ? 1 : 0, { duration: CONTROLS_ANIMATION_DURATION }), @@ -26,13 +29,13 @@ const CallerInfo = (): React.ReactElement => { return ( - + diff --git a/app/views/CallView/index.test.tsx b/app/views/CallView/index.test.tsx index 4a552eb4582..33628120815 100644 --- a/app/views/CallView/index.test.tsx +++ b/app/views/CallView/index.test.tsx @@ -8,6 +8,7 @@ import { useCallStore } from '../../lib/services/voip/useCallStore'; import { mockedStore } from '../../reducers/mockedStore'; import * as stories from './CallView.stories'; import { generateSnapshots } from '../../../.rnstorybook/generateSnapshots'; +import { ResponsiveLayoutContext } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; let mockWindowWidth = 350; jest.mock('react-native/Libraries/Utilities/useWindowDimensions', () => ({ @@ -412,19 +413,6 @@ describe('CallView/CallView', () => { expect(getByText('Unmute')).toBeTruthy(); }); -<<<<<<< HEAD - it('should render buttons in two rows on narrow layout', () => { - mockWindowWidth = 350; - setStoreState(); - const { getByTestId } = render( - - - - ); - expect(getByTestId('call-buttons-row-0')).toBeTruthy(); - expect(getByTestId('call-buttons-row-1')).toBeTruthy(); - }); - it('should render buttons in a single row on wide layout', () => { mockWindowWidth = 800; setStoreState(); diff --git a/app/views/CallView/index.tsx b/app/views/CallView/index.tsx index 3a8dd191a4c..e6d61dcf163 100644 --- a/app/views/CallView/index.tsx +++ b/app/views/CallView/index.tsx @@ -6,19 +6,28 @@ import CallerInfo from './components/CallerInfo'; import { styles } from './styles'; import { useTheme } from '../../theme'; import { CallButtons } from './components/CallButtons'; +import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; const CallView = (): React.ReactElement | null => { 'use memo'; const { colors } = useTheme(); const call = useCallStore(state => state.call); + const { width, height } = useResponsiveLayout(); + const isLandscape = width > height; if (!call) { return null; } return ( - + diff --git a/app/views/CallView/styles.ts b/app/views/CallView/styles.ts index fe2da8c513f..2c07aa47eff 100644 --- a/app/views/CallView/styles.ts +++ b/app/views/CallView/styles.ts @@ -80,5 +80,21 @@ export const styles = StyleSheet.create({ fontSize: 14, lineHeight: 20, textAlign: 'center' + }, + contentContainerLandscape: { + flexDirection: 'row', + alignItems: 'stretch' + }, + callerInfoContainerLandscape: { + flex: 2 + }, + buttonsContainerLandscape: { + flex: 3, + borderTopWidth: 0, + borderLeftWidth: StyleSheet.hairlineWidth, + justifyContent: 'center' + }, + buttonsRowLandscape: { + marginBottom: 16 } }); From 472ea403ad8a2e95a2529b742869392fe9051ca4 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 18:44:05 -0300 Subject: [PATCH 12/24] docs: update accessibility spec, plan, and conventions --- CLAUDE.md | 7 + UBIQUITOUS_LANGUAGE.md | 194 +++++++++--------- .../plans/2026-04-06-voip-accessibility.md | 61 ++++-- .../2026-04-06-voip-accessibility-design.md | 18 +- 4 files changed, 155 insertions(+), 125 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 5f53dc268b4..fd812398638 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -28,6 +28,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Accessibility (a11y) ### Screen reader + - All interactive elements need `accessibilityLabel` + `accessibilityRole` - Use `react-native-a11y-order` (`A11y.Order` / `A11y.Index`) when reading order differs from visual order - Use `AccessibilityInfo.setAccessibilityFocus()` to focus important elements on mount (e.g., incoming call) @@ -36,12 +37,18 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co - `accessibilityElementsHidden={true}` on containers that are visually hidden but still mounted ### Font scaling + - Text scales automatically — never set `allowFontScaling={false}` unless layout is provably broken - `useResponsiveLayout()` provides `fontScale`, `fontScaleLimited` (capped at `FONT_SCALE_LIMIT = 1.3`), `width`, `height` - Apply `fontScaleLimited` only where large font scales break fixed-size containers — not by default - Fixed-size touch targets (icon buttons, avatars) do not need to scale ### Landscape / responsive layout + - Always use `useResponsiveLayout()` (not `useWindowDimensions()` directly) to get `width` / `height` - Derive `isLandscape = width > height` from those values - `useResponsiveLayout` is the single source of truth for dimensions — avoids conflicts with tablet (Master Detail) layout + +## graphify + +Before answering codebase architecture questions, read `graphify-out/graph.json` for structure. Use the graph to find relevant files and connections instead of exploring blindly. diff --git a/UBIQUITOUS_LANGUAGE.md b/UBIQUITOUS_LANGUAGE.md index 4d2a7c70d12..d737440ddea 100644 --- a/UBIQUITOUS_LANGUAGE.md +++ b/UBIQUITOUS_LANGUAGE.md @@ -2,140 +2,140 @@ ## Rooms & Conversations -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Room** | A conversation space identified by `rid`, with a type (`t`) determining its behavior | Chat, conversation, chat room | -| **Channel** | A public room (`t='c'`) discoverable by all server users | Public group, open room | -| **Group** | A private room (`t='p'`) accessible only to invited members | Private channel, private room | -| **Direct** | A one-on-one or multi-party direct message room (`t='d'`) | DM, IM, instant message, private message | -| **Discussion** | A child room linked to a parent via `prid`, created from a message | Sub-room, nested channel | +| Term | Definition | Aliases to avoid | +| ---------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| **Room** | A conversation space identified by `rid`, with a type (`t`) determining its behavior | Chat, conversation, chat room | +| **Channel** | A public room (`t='c'`) discoverable by all server users | Public group, open room | +| **Group** | A private room (`t='p'`) accessible only to invited members | Private channel, private room | +| **Direct** | A one-on-one or multi-party direct message room (`t='d'`) | DM, IM, instant message, private message | +| **Discussion** | A child room linked to a parent via `prid`, created from a message | Sub-room, nested channel | | **Subscription** | A user's participation record in a room — tracks unread counts, favorites, drafts, and per-user state | Membership, room membership, joined room | -| **Broadcast** | A room mode where only admins can post; others can only react or reply in threads | Announcement channel, read-only channel | +| **Broadcast** | A room mode where only admins can post; others can only react or reply in threads | Announcement channel, read-only channel | ## Messages -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Message** | A content unit within a room, identified by `_id`, belonging to a room via `rid` | Chat message, text | -| **System Message** | A message with a type code (`t`) representing an automated event (user join, topic change, etc.) | Event, notification message, auto-message | -| **Thread** | A reply chain spawned from a parent message, linked via `tmid` (thread message ID) | Reply chain, conversation thread | -| **Thread Message** | An individual message within a thread, tracked separately with `subscription_id` | Reply, threaded reply | -| **Attachment** | Media or rich content embedded in a message — images, videos, audio, files, or nested cards | File, media, embed | -| **Reaction** | An emoji response on a message, storing the emoji and list of usernames who reacted | Emoji reaction, like | -| **Mention** | A reference to a user or channel within message text, parsed into structured data | Tag, @mention, ping | -| **Block** | A UIKit interactive element rendered within a message (buttons, selects, overflow menus) | UI block, interactive element, action block | -| **Markdown** (`md`) | The parsed markdown AST of a message, stored alongside raw `msg` text | Parsed message, rich text | +| Term | Definition | Aliases to avoid | +| ------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------- | +| **Message** | A content unit within a room, identified by `_id`, belonging to a room via `rid` | Chat message, text | +| **System Message** | A message with a type code (`t`) representing an automated event (user join, topic change, etc.) | Event, notification message, auto-message | +| **Thread** | A reply chain spawned from a parent message, linked via `tmid` (thread message ID) | Reply chain, conversation thread | +| **Thread Message** | An individual message within a thread, tracked separately with `subscription_id` | Reply, threaded reply | +| **Attachment** | Media or rich content embedded in a message — images, videos, audio, files, or nested cards | File, media, embed | +| **Reaction** | An emoji response on a message, storing the emoji and list of usernames who reacted | Emoji reaction, like | +| **Mention** | A reference to a user or channel within message text, parsed into structured data | Tag, @mention, ping | +| **Block** | A UIKit interactive element rendered within a message (buttons, selects, overflow menus) | UI block, interactive element, action block | +| **Markdown** (`md`) | The parsed markdown AST of a message, stored alongside raw `msg` text | Parsed message, rich text | ## Users & Identity -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **User** | An authenticated identity on a Rocket.Chat server, with `username`, `name`, and `status` | Account, member, person | -| **Logged User** | The currently authenticated user in the active session, carrying `token` and preferences | Current user, session user, me | -| **Status** | A user's availability state: `online`, `away`, `busy`, `offline`, or `disabled` | Presence, availability | -| **Role** | A named capability set assigned to a user at global (`Users`) or room (`Subscriptions`) scope | Permission group, access level | -| **Permission** | A specific action right (e.g., `create-c`) mapped to one or more roles | Privilege, access right, capability | +| Term | Definition | Aliases to avoid | +| --------------- | --------------------------------------------------------------------------------------------- | ----------------------------------- | +| **User** | An authenticated identity on a Rocket.Chat server, with `username`, `name`, and `status` | Account, member, person | +| **Logged User** | The currently authenticated user in the active session, carrying `token` and preferences | Current user, session user, me | +| **Status** | A user's availability state: `online`, `away`, `busy`, `offline`, or `disabled` | Presence, availability | +| **Role** | A named capability set assigned to a user at global (`Users`) or room (`Subscriptions`) scope | Permission group, access level | +| **Permission** | A specific action right (e.g., `create-c`) mapped to one or more roles | Privilege, access right, capability | ## Teams -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Team** | A named group of rooms and members, typed as `PUBLIC` (0) or `PRIVATE` (1) | Team channel, workspace | -| **Team Member** | A user's membership in a team, with team-specific roles | Team participant, team user | -| **Team Room** | A room belonging to a team, linked via `teamId`; the main room has `team_main=true` | Team channel | +| Term | Definition | Aliases to avoid | +| --------------- | ----------------------------------------------------------------------------------- | --------------------------- | +| **Team** | A named group of rooms and members, typed as `PUBLIC` (0) or `PRIVATE` (1) | Team channel, workspace | +| **Team Member** | A user's membership in a team, with team-specific roles | Team participant, team user | +| **Team Room** | A room belonging to a team, linked via `teamId`; the main room has `team_main=true` | Team channel | ## Omnichannel -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Omnichannel Room** | A room (`t='l'`) representing a customer support conversation from an external source | Livechat room, livechat, support chat | -| **Visitor** | An external customer initiating an omnichannel conversation, identified by `token` | Customer, client, livechat user, guest | -| **Agent** | A server user handling omnichannel conversations, with `statusLivechat` (available/unavailable) | Support agent, operator, representative | -| **Department** | An organizational unit grouping agents for omnichannel routing | Support team, queue, livechat department | -| **Inquiry** | A queued omnichannel conversation awaiting agent assignment | Queue item, pending chat, waiting conversation | -| **Canned Response** | A pre-written reply template with a `shortcut` trigger, scoped to user/department/global | Quick reply, saved response, macro | -| **Tag** | A label applied to omnichannel conversations for categorization and reporting | Livechat tag, label, category | -| **Source** | The origin of an omnichannel conversation: `widget`, `email`, `sms`, `app`, `api`, or `other` | Channel, origin, entry point | +| Term | Definition | Aliases to avoid | +| -------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------- | +| **Omnichannel Room** | A room (`t='l'`) representing a customer support conversation from an external source | Livechat room, livechat, support chat | +| **Visitor** | An external customer initiating an omnichannel conversation, identified by `token` | Customer, client, livechat user, guest | +| **Agent** | A server user handling omnichannel conversations, with `statusLivechat` (available/unavailable) | Support agent, operator, representative | +| **Department** | An organizational unit grouping agents for omnichannel routing | Support team, queue, livechat department | +| **Inquiry** | A queued omnichannel conversation awaiting agent assignment | Queue item, pending chat, waiting conversation | +| **Canned Response** | A pre-written reply template with a `shortcut` trigger, scoped to user/department/global | Quick reply, saved response, macro | +| **Tag** | A label applied to omnichannel conversations for categorization and reporting | Livechat tag, label, category | +| **Source** | The origin of an omnichannel conversation: `widget`, `email`, `sms`, `app`, `api`, or `other` | Channel, origin, entry point | ## End-to-End Encryption (E2E) -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **E2E Encryption** | Client-side encryption of message content so only room participants can decrypt | Encryption, end-to-end, E2EE | -| **E2E Key** (`E2EKey`) | The per-subscription group encryption key used to encrypt/decrypt room messages | Encryption key, room key, group key | -| **E2E Key ID** (`e2eKeyId`) | Identifier for the current encryption key version on a room | Key version, key identifier | -| **E2E Status** | Message encryption state: `pending` (not yet encrypted/decrypted) or `done` | Encryption status | -| **Encrypted Content** | The ciphertext payload stored in a message's `content` field, versioned as `rc.v1.aes-sha2` or `rc.v2.aes-sha2` | Cipher, encrypted message, encrypted payload | -| **Suggested Key** (`E2ESuggestedKey`) | A group key proposed to a user who wasn't present when the original key was distributed | Pending key, offered key | +| Term | Definition | Aliases to avoid | +| ------------------------------------- | --------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| **E2E Encryption** | Client-side encryption of message content so only room participants can decrypt | Encryption, end-to-end, E2EE | +| **E2E Key** (`E2EKey`) | The per-subscription group encryption key used to encrypt/decrypt room messages | Encryption key, room key, group key | +| **E2E Key ID** (`e2eKeyId`) | Identifier for the current encryption key version on a room | Key version, key identifier | +| **E2E Status** | Message encryption state: `pending` (not yet encrypted/decrypted) or `done` | Encryption status | +| **Encrypted Content** | The ciphertext payload stored in a message's `content` field, versioned as `rc.v1.aes-sha2` or `rc.v2.aes-sha2` | Cipher, encrypted message, encrypted payload | +| **Suggested Key** (`E2ESuggestedKey`) | A group key proposed to a user who wasn't present when the original key was distributed | Pending key, offered key | ## Video Conferencing -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Video Conference** | A real-time audio/video call session within a room, with status lifecycle: CALLING, STARTED, EXPIRED, ENDED, DECLINED | Video call, meeting, conference call | -| **Direct Call** | A 1:1 video conference between two users | Personal call, private call | -| **Group Call** | A multi-participant video conference in a room | Conference, group video | -| **Ringer** | The audio/UI component that plays when an incoming call is received | Call alert, ring, incoming call notification | +| Term | Definition | Aliases to avoid | +| -------------------- | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| **Video Conference** | A real-time audio/video call session within a room, with status lifecycle: CALLING, STARTED, EXPIRED, ENDED, DECLINED | Video call, meeting, conference call | +| **Direct Call** | A 1:1 video conference between two users | Personal call, private call | +| **Group Call** | A multi-participant video conference in a room | Conference, group video | +| **Ringer** | The audio/UI component that plays when an incoming call is received | Call alert, ring, incoming call notification | ## Server & Connection -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Server** | A Rocket.Chat instance the app connects to, identified by URL | Workspace, instance, host | -| **Server History** | A record of previously connected server URLs with associated usernames | Login history, saved servers | -| **Meteor Connect** | The DDP (Distributed Data Protocol) real-time connection to the server | WebSocket connection, real-time connection, DDP | -| **Enterprise Module** | A feature flag indicating availability of a paid/enterprise capability | License feature, premium module | -| **Supported Versions** | Server-declared compatible app version ranges, triggering warnings when outdated | Version compatibility, version check | +| Term | Definition | Aliases to avoid | +| ---------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------- | +| **Server** | A Rocket.Chat instance the app connects to, identified by URL | Workspace, instance, host | +| **Server History** | A record of previously connected server URLs with associated usernames | Login history, saved servers | +| **Meteor Connect** | The DDP (Distributed Data Protocol) real-time connection to the server | WebSocket connection, real-time connection, DDP | +| **Enterprise Module** | A feature flag indicating availability of a paid/enterprise capability | License feature, premium module | +| **Supported Versions** | Server-declared compatible app version ranges, triggering warnings when outdated | Version compatibility, version check | ## File & Media -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Upload** | A file being sent to a room, tracked with `progress` (0-100) and `error` state | File upload, attachment upload | -| **Custom Emoji** | A server-defined emoji with `name` and file `extension`, distinct from Unicode emoji | Server emoji, uploaded emoji | -| **Frequently Used Emoji** | A per-user emoji usage counter for emoji picker ordering | Recent emoji, emoji history | -| **URL Preview** | Rich metadata (OG image, title, description) extracted from links shared in messages | Link preview, unfurl, embed | +| Term | Definition | Aliases to avoid | +| ------------------------- | ------------------------------------------------------------------------------------ | ------------------------------ | +| **Upload** | A file being sent to a room, tracked with `progress` (0-100) and `error` state | File upload, attachment upload | +| **Custom Emoji** | A server-defined emoji with `name` and file `extension`, distinct from Unicode emoji | Server emoji, uploaded emoji | +| **Frequently Used Emoji** | A per-user emoji usage counter for emoji picker ordering | Recent emoji, emoji history | +| **URL Preview** | Rich metadata (OG image, title, description) extracted from links shared in messages | Link preview, unfurl, embed | ## Navigation & Deep Linking -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Deep Link** | A URL that routes the app to a specific room, message, or action | Universal link, app link | -| **Spotlight** | The quick-search feature returning matched users and rooms | Quick search, global search, jump-to | -| **Directory** | The browsable listing of all public channels and users on a server | Channel list, user directory | +| Term | Definition | Aliases to avoid | +| ------------- | ------------------------------------------------------------------ | ------------------------------------ | +| **Deep Link** | A URL that routes the app to a specific room, message, or action | Universal link, app link | +| **Spotlight** | The quick-search feature returning matched users and rooms | Quick search, global search, jump-to | +| **Directory** | The browsable listing of all public channels and users on a server | Channel list, user directory | ## Authentication -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Credentials** | Login payload supporting multiple methods: password, LDAP, SAML, CAS, OAuth, resume token | Login data, auth payload | -| **Two-Factor Authentication** (2FA) | Secondary verification via TOTP code or email code during login | MFA, second factor, verification code | -| **Resume Token** | A stored token allowing session restoration without re-entering credentials | Session token, refresh token, auth token | -| **Login Services** | External OAuth/SSO providers configured on the server (Google, GitHub, SAML, CAS, etc.) | OAuth providers, SSO, external auth | +| Term | Definition | Aliases to avoid | +| ----------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------- | +| **Credentials** | Login payload supporting multiple methods: password, LDAP, SAML, CAS, OAuth, resume token | Login data, auth payload | +| **Two-Factor Authentication** (2FA) | Secondary verification via TOTP code or email code during login | MFA, second factor, verification code | +| **Resume Token** | A stored token allowing session restoration without re-entering credentials | Session token, refresh token, auth token | +| **Login Services** | External OAuth/SSO providers configured on the server (Google, GitHub, SAML, CAS, etc.) | OAuth providers, SSO, external auth | ## App State & UI -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Master Detail** | The split-view layout on tablets showing room list and room content side-by-side | Split view, tablet layout, two-pane | -| **Sort Preferences** | User settings for room list ordering: `sortBy`, `groupByType`, `showFavorites`, `showUnread`, `displayMode` | List preferences, view settings | -| **Share Extension** | The OS-level share sheet integration that sends content from other apps into Rocket.Chat | Share sheet, sharing | -| **In-App Notification** | A banner shown inside the app when a push notification arrives while the app is foregrounded | Toast, notification banner | -| **Slash Command** | A `/`-prefixed command that triggers server-side or client-side actions | Command, bot command | +| Term | Definition | Aliases to avoid | +| ----------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------- | +| **Master Detail** | The split-view layout on tablets showing room list and room content side-by-side | Split view, tablet layout, two-pane | +| **Sort Preferences** | User settings for room list ordering: `sortBy`, `groupByType`, `showFavorites`, `showUnread`, `displayMode` | List preferences, view settings | +| **Share Extension** | The OS-level share sheet integration that sends content from other apps into Rocket.Chat | Share sheet, sharing | +| **In-App Notification** | A banner shown inside the app when a push notification arrives while the app is foregrounded | Toast, notification banner | +| **Slash Command** | A `/`-prefixed command that triggers server-side or client-side actions | Command, bot command | ## Accessibility (a11y) -| Term | Definition | Aliases to avoid | -|------|-----------|-----------------| -| **Accessibility Label** (`accessibilityLabel`) | A human-readable string announced by screen readers to describe an element | aria-label, alt text | -| **Accessibility Role** (`accessibilityRole`) | Semantic role of a component (`button`, `header`, `switch`, etc.) that tells screen readers how to treat the element | aria-role | -| **Accessibility Elements Hidden** (`accessibilityElementsHidden`) | Hides a subtree from the screen reader while keeping it visually mounted — used on containers that animate in/out | aria-hidden | -| **A11y Order** | Reading order control via `react-native-a11y-order` (`A11y.Order` / `A11y.Index`) — applied when visual layout order differs from logical reading order | Tab order, focus order | -| **Accessibility Focus** | Programmatic focus placement via `AccessibilityInfo.setAccessibilityFocus()` — used to guide screen reader to the most important element on screen (e.g., incoming call) | Focus management | -| **Screen Reader Announcement** | A message pushed to the screen reader via `AccessibilityInfo.announceForAccessibility()` without changing focus — used for dynamic state changes | Live region, aria-live | -| **Font Scale** (`fontScale`) | OS-level text size multiplier (1.0 = default). Exposed by `useResponsiveLayout()`. React Native `Text` respects it automatically | Text size, dynamic type | -| **Font Scale Limited** (`fontScaleLimited`) | `fontScale` capped at `FONT_SCALE_LIMIT = 1.3` via `useResponsiveLayout()` — applied only to fixed-size containers where uncapped scaling breaks layout | Capped font scale | -| **Screen Reader Enabled** | Runtime boolean from `useIsScreenReaderEnabled()` indicating VoiceOver (iOS) or TalkBack (Android) is active — used to adapt gesture-based interactions | VoiceOver active, TalkBack active | +| Term | Definition | Aliases to avoid | +| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | +| **Accessibility Label** (`accessibilityLabel`) | A human-readable string announced by screen readers to describe an element | aria-label, alt text | +| **Accessibility Role** (`accessibilityRole`) | Semantic role of a component (`button`, `header`, `switch`, etc.) that tells screen readers how to treat the element | aria-role | +| **Accessibility Elements Hidden** (`accessibilityElementsHidden`) | Hides a subtree from the screen reader while keeping it visually mounted — used on containers that animate in/out | aria-hidden | +| **A11y Order** | Reading order control via `react-native-a11y-order` (`A11y.Order` / `A11y.Index`) — applied when visual layout order differs from logical reading order | Tab order, focus order | +| **Accessibility Focus** | Programmatic focus placement via `AccessibilityInfo.setAccessibilityFocus()` — used to guide screen reader to the most important element on screen (e.g., incoming call) | Focus management | +| **Screen Reader Announcement** | A message pushed to the screen reader via `AccessibilityInfo.announceForAccessibility()` without changing focus — used for dynamic state changes | Live region, aria-live | +| **Font Scale** (`fontScale`) | OS-level text size multiplier (1.0 = default). Exposed by `useResponsiveLayout()`. React Native `Text` respects it automatically | Text size, dynamic type | +| **Font Scale Limited** (`fontScaleLimited`) | `fontScale` capped at `FONT_SCALE_LIMIT = 1.3` via `useResponsiveLayout()` — applied only to fixed-size containers where uncapped scaling breaks layout | Capped font scale | +| **Screen Reader Enabled** | Runtime boolean from `useIsScreenReaderEnabled()` indicating VoiceOver (iOS) or TalkBack (Android) is active — used to adapt gesture-based interactions | VoiceOver active, TalkBack active | ## Relationships diff --git a/docs/superpowers/plans/2026-04-06-voip-accessibility.md b/docs/superpowers/plans/2026-04-06-voip-accessibility.md index f5ec6b17412..935ec0dc2ea 100644 --- a/docs/superpowers/plans/2026-04-06-voip-accessibility.md +++ b/docs/superpowers/plans/2026-04-06-voip-accessibility.md @@ -12,32 +12,34 @@ ## File Map -| Action | File | Responsibility | -|--------|------|----------------| -| Create | `app/lib/hooks/useIsScreenReaderEnabled.ts` | Reactive boolean: VoiceOver/TalkBack active | -| Create | `app/lib/hooks/useIsScreenReaderEnabled.test.ts` | Tests for the hook | -| Modify | `app/lib/services/voip/useCallStore.ts:301` | `useControlsVisible` — always true when screen reader on | -| Modify | `app/i18n/locales/*.json` (25 files — all in `LANGUAGES` array) | Add `Toggle_call_controls` key | -| Modify | `app/views/CallView/components/CallerInfo.tsx` | Screen reader bypass + a11y label + landscape avatar | -| Modify | `app/views/CallView/components/CallButtons.tsx` | `accessibilityElementsHidden` + landscape styles | -| Modify | `app/views/CallView/index.tsx` | Landscape container flex direction | -| Modify | `app/views/CallView/styles.ts` | Landscape style variants | -| Modify | `app/views/CallView/index.test.tsx` | Screen reader + landscape tests | -| Modify | `app/views/CallView/CallView.stories.tsx` | Landscape story | -| Modify | `app/views/CallView/components/Dialpad/DialpadButton.tsx` | a11y label + role | -| Modify | `app/containers/NewMediaCall/PeerItem.tsx` | a11y label + role | +| Action | File | Responsibility | +| ------ | --------------------------------------------------------------- | -------------------------------------------------------- | +| Create | `app/lib/hooks/useIsScreenReaderEnabled.ts` | Reactive boolean: VoiceOver/TalkBack active | +| Create | `app/lib/hooks/useIsScreenReaderEnabled.test.ts` | Tests for the hook | +| Modify | `app/lib/services/voip/useCallStore.ts:301` | `useControlsVisible` — always true when screen reader on | +| Modify | `app/i18n/locales/*.json` (25 files — all in `LANGUAGES` array) | Add `Toggle_call_controls` key | +| Modify | `app/views/CallView/components/CallerInfo.tsx` | Screen reader bypass + a11y label + landscape avatar | +| Modify | `app/views/CallView/components/CallButtons.tsx` | `accessibilityElementsHidden` + landscape styles | +| Modify | `app/views/CallView/index.tsx` | Landscape container flex direction | +| Modify | `app/views/CallView/styles.ts` | Landscape style variants | +| Modify | `app/views/CallView/index.test.tsx` | Screen reader + landscape tests | +| Modify | `app/views/CallView/CallView.stories.tsx` | Landscape story | +| Modify | `app/views/CallView/components/Dialpad/DialpadButton.tsx` | a11y label + role | +| Modify | `app/containers/NewMediaCall/PeerItem.tsx` | a11y label + role | --- ## Task 1: `useIsScreenReaderEnabled` hook **Files:** + - Create: `app/lib/hooks/useIsScreenReaderEnabled.ts` - Create: `app/lib/hooks/useIsScreenReaderEnabled.test.ts` - [ ] **Step 1: Write the failing tests** `app/lib/hooks/useIsScreenReaderEnabled.test.ts`: + ```ts import { renderHook, act } from '@testing-library/react-native'; import { AccessibilityInfo } from 'react-native'; @@ -104,6 +106,7 @@ Expected: FAIL — `Cannot find module './useIsScreenReaderEnabled'` - [ ] **Step 3: Implement the hook** `app/lib/hooks/useIsScreenReaderEnabled.ts`: + ```ts import { useEffect, useState } from 'react'; import { AccessibilityInfo } from 'react-native'; @@ -151,6 +154,7 @@ Launch an agent with the following prompt: > You are adding a new i18n key to a React Native app. The key is `Toggle_call_controls` with the English value `"Toggle call controls"` — it labels a button that shows/hides the call controls on an ongoing phone call screen. > > Add this key to all 25 locale files listed below. For each file: +> > 1. Translate "Toggle call controls" into the appropriate language naturally (don't just copy English) > 2. Find the insertion point alphabetically — it goes between `"To_download"` and `"Token_expired"` (search for `Token_expired` in each file to locate it; if that key is missing, insert alphabetically between the nearest surrounding keys) > 3. Insert: `"Toggle_call_controls": "",` @@ -183,10 +187,13 @@ Launch an agent with the following prompt: > `zh-TW.json` → Traditional Chinese > > After editing all files, run: +> > ```bash > grep -rl "Toggle_call_controls" app/i18n/locales/ | wc -l > ``` +> > Expected: `25`. Then commit: +> > ```bash > git add app/i18n/locales/ > git commit -m "feat(a11y): add Toggle_call_controls i18n key to all locales" @@ -205,6 +212,7 @@ Expected: `25` ## Task 3: `useControlsVisible` — always true when screen reader is active **Files:** + - Modify: `app/lib/services/voip/useCallStore.ts:301` - [ ] **Step 1: Update `useControlsVisible`** @@ -249,6 +257,7 @@ git commit -m "feat(a11y): keep call controls visible when screen reader is acti ## Task 4: `CallerInfo` — screen reader fix + accessibility label **Files:** + - Modify: `app/views/CallView/components/CallerInfo.tsx` - Modify: `app/views/CallView/index.test.tsx` @@ -370,6 +379,7 @@ git commit -m "feat(a11y): disable tap-to-hide controls when screen reader is ac ## Task 5: `CallButtons` — hide from screen reader when visually hidden **Files:** + - Modify: `app/views/CallView/components/CallButtons.tsx` - [ ] **Step 1: Add `accessibilityElementsHidden` to the animated container** @@ -404,6 +414,7 @@ git commit -m "feat(a11y): hide call buttons from screen reader when controls ar ## Task 6: `DialpadButton` — accessibility label and role **Files:** + - Modify: `app/views/CallView/components/Dialpad/DialpadButton.tsx` - [ ] **Step 1: Add a11y props to the Pressable** @@ -441,6 +452,7 @@ git commit -m "feat(a11y): add accessibility label and role to DialpadButton" ## Task 7: `PeerItem` — accessibility label and role **Files:** + - Modify: `app/containers/NewMediaCall/PeerItem.tsx` - [ ] **Step 1: Add a11y props to the Pressable** @@ -480,6 +492,7 @@ git commit -m "feat(a11y): add accessibility label and role to PeerItem" ## Task 8: `CallView` landscape layout **Files:** + - Modify: `app/views/CallView/styles.ts` - Modify: `app/views/CallView/index.tsx` - Modify: `app/views/CallView/components/CallerInfo.tsx` @@ -500,7 +513,15 @@ Then add a helper and test inside `describe('CallView', ...)`: ```ts const LandscapeWrapper = ({ children }: { children: React.ReactNode }) => ( + value={{ + fontScale: 1, + width: 800, + height: 400, + isLargeFontScale: false, + fontScaleLimited: 1, + rowHeight: 75, + rowHeightCondensed: 60 + }}> {children} ); @@ -514,9 +535,7 @@ it('should apply landscape styles when width > height', () => { ); const container = getByTestId('call-view-container'); - expect(container.props.style).toEqual( - expect.arrayContaining([expect.objectContaining({ flexDirection: 'row' })]) - ); + expect(container.props.style).toEqual(expect.arrayContaining([expect.objectContaining({ flexDirection: 'row' })])); }); ``` @@ -579,7 +598,11 @@ const CallView = (): React.ReactElement | null => { return ( + style={[ + styles.contentContainer, + isLandscape && styles.contentContainerLandscape, + { backgroundColor: colors.surfaceLight } + ]}> diff --git a/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md b/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md index 6ac75b0b505..4a8fae72a20 100644 --- a/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md +++ b/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md @@ -35,13 +35,13 @@ Listens to `AccessibilityInfo.isScreenReaderEnabled()` and the `screenReaderChan ```ts export const useIsScreenReaderEnabled = (): boolean => { - const [enabled, setEnabled] = useState(false); - useEffect(() => { - AccessibilityInfo.isScreenReaderEnabled().then(setEnabled); - const sub = AccessibilityInfo.addEventListener('screenReaderChanged', setEnabled); - return () => sub.remove(); - }, []); - return enabled; + const [enabled, setEnabled] = useState(false); + useEffect(() => { + AccessibilityInfo.isScreenReaderEnabled().then(setEnabled); + const sub = AccessibilityInfo.addEventListener('screenReaderChanged', setEnabled); + return () => sub.remove(); + }, []); + return enabled; }; ``` @@ -113,8 +113,8 @@ Apply `fontScaleLimited` only where testing reveals actual layout breakage, foll ## i18n keys needed -| Key | Value (EN) | -|-----|-----------| +| Key | Value (EN) | +| ---------------------- | ---------------------- | | `Toggle_call_controls` | `Toggle call controls` | --- From 9f5e77402d43700436e96d67947ab18d3cbe95a4 Mon Sep 17 00:00:00 2001 From: diegolmello Date: Mon, 6 Apr 2026 21:47:32 +0000 Subject: [PATCH 13/24] chore: format code and fix lint issues --- app/lib/hooks/useIsScreenReaderEnabled.test.ts | 1 + app/sagas/deepLinking.js | 2 +- index.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/lib/hooks/useIsScreenReaderEnabled.test.ts b/app/lib/hooks/useIsScreenReaderEnabled.test.ts index 816430e68be..654c9afe4f6 100644 --- a/app/lib/hooks/useIsScreenReaderEnabled.test.ts +++ b/app/lib/hooks/useIsScreenReaderEnabled.test.ts @@ -1,5 +1,6 @@ import { renderHook, act } from '@testing-library/react-native'; import { AccessibilityInfo } from 'react-native'; + import { useIsScreenReaderEnabled } from './useIsScreenReaderEnabled'; describe('useIsScreenReaderEnabled', () => { diff --git a/app/sagas/deepLinking.js b/app/sagas/deepLinking.js index 9f746ab44db..fd55006be54 100644 --- a/app/sagas/deepLinking.js +++ b/app/sagas/deepLinking.js @@ -115,7 +115,7 @@ const handleVoipAcceptFailed = function* handleVoipAcceptFailed(params) { yield call( () => - new Promise((resolve) => { + new Promise(resolve => { InteractionManager.runAfterInteractions(() => resolve()); }) ); diff --git a/index.js b/index.js index a8ca1d5a6a0..a59c08135ce 100644 --- a/index.js +++ b/index.js @@ -47,7 +47,7 @@ if (process.env.USE_STORYBOOK) { console.log('RNCallKeep setup successful'); RNCallKeep.canMakeMultipleCalls(false); }) - .catch((error) => { + .catch(error => { console.error('Error setting up RNCallKeep:', error); }); } From 4b0a0873ffc833885c08d727b780907426daa408 Mon Sep 17 00:00:00 2001 From: diegolmello Date: Mon, 6 Apr 2026 22:54:08 +0000 Subject: [PATCH 14/24] chore: format code and fix lint issues --- app/sagas/deepLinking.js | 2 +- index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/sagas/deepLinking.js b/app/sagas/deepLinking.js index fd55006be54..9f746ab44db 100644 --- a/app/sagas/deepLinking.js +++ b/app/sagas/deepLinking.js @@ -115,7 +115,7 @@ const handleVoipAcceptFailed = function* handleVoipAcceptFailed(params) { yield call( () => - new Promise(resolve => { + new Promise((resolve) => { InteractionManager.runAfterInteractions(() => resolve()); }) ); diff --git a/index.js b/index.js index a59c08135ce..a8ca1d5a6a0 100644 --- a/index.js +++ b/index.js @@ -47,7 +47,7 @@ if (process.env.USE_STORYBOOK) { console.log('RNCallKeep setup successful'); RNCallKeep.canMakeMultipleCalls(false); }) - .catch(error => { + .catch((error) => { console.error('Error setting up RNCallKeep:', error); }); } From e7bcfee791d86957934a0548a940f44cf87eea47 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 6 Apr 2026 20:02:29 -0300 Subject: [PATCH 15/24] ignore worktrees --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index abdf800e711..cd762b8bd8e 100644 --- a/.gitignore +++ b/.gitignore @@ -91,4 +91,4 @@ e2e/e2e_account.ts skills-lock.json CLAUDE.local.md AGENTS.md -.superset/ \ No newline at end of file +.superset/ From 7822932fccdfe1718cac2ae6e16b9222243616e8 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 7 Apr 2026 10:29:42 -0300 Subject: [PATCH 16/24] test(voip): fix failing unit tests for CallView and CallButtons - CallButtons: use includeHiddenElements:true when querying hidden container - CallView landscape: fix useResponsiveLayout mock so hook and provider share the same context object - CallView screen reader: replace flaky async listener approach with direct useIsScreenReaderEnabled mock - Update snapshots to reflect corrected responsive layout values --- .../__snapshots__/PeerItem.test.tsx.snap | 6 +++ .../__snapshots__/PeerList.test.tsx.snap | 8 ++++ .../hooks/useIsScreenReaderEnabled.test.ts | 2 +- .../CallView/components/CallButtons.test.tsx | 2 +- .../__snapshots__/Dialpad.test.tsx.snap | 48 +++++++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/app/containers/NewMediaCall/__snapshots__/PeerItem.test.tsx.snap b/app/containers/NewMediaCall/__snapshots__/PeerItem.test.tsx.snap index 627400c6caf..baa9df2c6af 100644 --- a/app/containers/NewMediaCall/__snapshots__/PeerItem.test.tsx.snap +++ b/app/containers/NewMediaCall/__snapshots__/PeerItem.test.tsx.snap @@ -21,6 +21,8 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` User { it('updates when screenReaderChanged event fires', () => { let capturedListener: (enabled: boolean) => void = () => {}; jest.spyOn(AccessibilityInfo, 'addEventListener').mockImplementation((_event, cb) => { - capturedListener = cb as (enabled: boolean) => void; + capturedListener = cb as unknown as (enabled: boolean) => void; return { remove: jest.fn() } as any; }); diff --git a/app/views/CallView/components/CallButtons.test.tsx b/app/views/CallView/components/CallButtons.test.tsx index 9515f02a9cb..68941013e64 100644 --- a/app/views/CallView/components/CallButtons.test.tsx +++ b/app/views/CallView/components/CallButtons.test.tsx @@ -57,7 +57,7 @@ describe('CallButtons', () => { ); - const container = getByTestId('call-buttons'); + const container = getByTestId('call-buttons', { includeHiddenElements: true }); expect(container.props.pointerEvents).toBe('none'); }); diff --git a/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap b/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap index d042cf5898d..5f1472e5477 100644 --- a/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap +++ b/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap @@ -122,6 +122,8 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` } > Date: Tue, 7 Apr 2026 14:05:18 -0300 Subject: [PATCH 17/24] Fix briding header --- ios/NotificationService/NotificationService-Bridging-Header.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/NotificationService/NotificationService-Bridging-Header.h b/ios/NotificationService/NotificationService-Bridging-Header.h index 1d63c024204..5af2d5e909e 100644 --- a/ios/NotificationService/NotificationService-Bridging-Header.h +++ b/ios/NotificationService/NotificationService-Bridging-Header.h @@ -2,7 +2,7 @@ // Use this file to import your target's public headers that you would like to expose to Swift. // -#import "SecureStorage.h" +#import "../Libraries/SecureStorage.h" #import "../Shared/RocketChat/MMKVBridge.h" #import #import From 93722b0ad0d97a726ffd2698a79cd223d705dc29 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 8 Apr 2026 17:49:53 -0300 Subject: [PATCH 18/24] fix(a11y): remove debug style and fix screen reader hook race condition --- app/lib/hooks/useIsScreenReaderEnabled.ts | 18 +++++++++++++++--- app/views/CallView/styles.ts | 4 ---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/lib/hooks/useIsScreenReaderEnabled.ts b/app/lib/hooks/useIsScreenReaderEnabled.ts index 53d85bc6c43..2f5c17693a8 100644 --- a/app/lib/hooks/useIsScreenReaderEnabled.ts +++ b/app/lib/hooks/useIsScreenReaderEnabled.ts @@ -5,9 +5,21 @@ export const useIsScreenReaderEnabled = (): boolean => { const [enabled, setEnabled] = useState(false); useEffect(() => { - AccessibilityInfo.isScreenReaderEnabled().then(setEnabled); - const subscription = AccessibilityInfo.addEventListener('screenReaderChanged', setEnabled); - return () => subscription.remove(); + let ignore = false; + AccessibilityInfo.isScreenReaderEnabled().then(result => { + if (!ignore) { + setEnabled(result); + } + }); + const subscription = AccessibilityInfo.addEventListener('screenReaderChanged', result => { + if (!ignore) { + setEnabled(result); + } + }); + return () => { + ignore = true; + subscription.remove(); + }; }, []); return enabled; diff --git a/app/views/CallView/styles.ts b/app/views/CallView/styles.ts index 2c07aa47eff..9ba3782da0c 100644 --- a/app/views/CallView/styles.ts +++ b/app/views/CallView/styles.ts @@ -5,10 +5,6 @@ import sharedStyles from '../Styles'; export const CONTROLS_ANIMATION_DURATION = 300; export const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: 'red' - }, contentContainer: { flex: 1, justifyContent: 'space-between' From adfe401b05000610431e0659f4f41de701ef972a Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 9 Apr 2026 13:57:27 -0300 Subject: [PATCH 19/24] Fix conflicts --- CLAUDE.md | 108 +++++++++----- UBIQUITOUS_LANGUAGE.md | 280 ++++++++++++++++-------------------- app/i18n/locales/te-IN.json | 210 +++++++++++++-------------- 3 files changed, 303 insertions(+), 295 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index fd812398638..941547203b9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,53 +2,93 @@ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. +## Project Overview + +Rocket.Chat React Native mobile client. Single-package React Native app (not a monorepo) using Yarn 1.22.22 (npm won't work). Supports iOS 13.4+ and Android 6.0+. + +- React 19, React Native 0.79, Expo 53 +- TypeScript with strict mode, baseUrl set to `app/` (imports resolve from there) +- Min Node: 22.14.0 +- UBIQUITOUS_LANGUAGE has domains + ## Commands -- **Install:** `yarn` (postinstall runs patch-package), `yarn pod-install` for iOS -- **Run:** `yarn android`, `yarn ios` -- **Lint:** `yarn lint` — runs ESLint + `tsc` together -- **Test:** `yarn test` — single test: `yarn test --testPathPattern=` -- **Format:** `yarn prettier-lint` — always run before considering code done +```bash +# Install & setup +yarn # Install dependencies (postinstall runs patch-package) +yarn pod-install # Install iOS CocoaPods (required before iOS builds) + +# Run +yarn start # Start Metro bundler +yarn ios # Build and run on iOS +yarn android # Build and run on Android + +# Test +TZ=UTC yarn test # Run Jest unit tests (TZ=UTC is set in script) +yarn test -- --testPathPattern='path/to/test' # Run a single test file +yarn test-update # Update snapshots + +# Lint & format +yarn lint # ESLint + TypeScript compiler check +yarn prettier-lint # Prettier auto-fix + lint -## Conventions +# Storybook +yarn storybook:start # Start Metro with Storybook UI +yarn storybook-generate # Generate story snapshots +``` -- **Branches:** dot-separated — `feat.call-waiting`, `fix.crash-on-login`, `chore.bump-deps` -- **Commits:** conventional with scope — `feat(voip): add call waiting` -- **PRs:** target `develop` -- **TS imports:** use `import type { X }` or `import { type X }` -- **Imports:** `tsconfig.baseUrl` is `app/` — e.g., `import X from 'lib/foo'` resolves to `app/lib/foo` +## Code Style + +- **Prettier**: tabs, single quotes, 130 char width, no trailing commas, arrow parens avoid, bracket same line +- **ESLint**: `@rocket.chat/eslint-config` base with React, React Native, TypeScript, Jest plugins +- **Before committing**: Run `yarn prettier-lint` and `TZ=UTC yarn test` for modified files +- Pre-commit hooks enforce these checks ## Architecture -- Two app targets: **RocketChatRN** (experimental) and **Rocket.Chat** (official) -- Redux + Redux-Saga for state, WatermelonDB for local database -- React Compiler in annotation mode — opt-in per component -- E2E tests: `.mock.ts` files auto-prioritized by Metro (`RUNNING_E2E_TESTS=true`) +### State Management: Redux + Redux-Saga + +- **Actions** (`app/actions/`) — plain action creators +- **Reducers** (`app/reducers/`) — state shape (app, login, connect, rooms, encryption, etc.) +- **Sagas** (`app/sagas/`) — side effects (init, login, rooms, messages, encryption, deepLinking, videoConf) +- **Selectors** (`app/selectors/`) — memoized with reselect +- **Store** (`app/lib/store/`) — configures middleware (saga, app state, internet state) + +### Navigation: React Navigation 7 + +- **Stacks** (`app/stacks/`) — InsideStack (authenticated), OutsideStack (login/register), MasterDetailStack (tablets), ShareExtensionStack +- **Root** (`app/AppContainer.tsx`) — switches between auth states +- **Responsive layout** (`app/lib/hooks/useResponsiveLayout/`) — master-detail on tablets vs single stack on phones + +### Database: WatermelonDB (offline-first SQLite) -## Accessibility (a11y) +- **Models** (`app/lib/database/model/`) — Message, Room, Subscription, User, Thread, Upload, Server, CustomEmoji, Permission, Role, etc. +- **Schema** (`app/lib/database/schema/`) +- Local-first: UI reads from DB, sagas sync with server -### Screen reader +### API Layer -- All interactive elements need `accessibilityLabel` + `accessibilityRole` -- Use `react-native-a11y-order` (`A11y.Order` / `A11y.Index`) when reading order differs from visual order -- Use `AccessibilityInfo.setAccessibilityFocus()` to focus important elements on mount (e.g., incoming call) -- Use `AccessibilityInfo.announceForAccessibility()` for dynamic state changes (errors, call cancelled) -- Use `useIsScreenReaderEnabled` (`app/lib/hooks/useIsScreenReaderEnabled.ts`) to adapt behavior when a screen reader is active — e.g., disabling tap-to-hide gestures -- `accessibilityElementsHidden={true}` on containers that are visually hidden but still mounted +- **SDK** (`app/lib/services/sdk.ts`) — Rocket.Chat JS SDK for WebSocket real-time subscriptions +- **REST** (`app/lib/services/restApi.ts`) — HTTP via fetch +- **Connect** (`app/lib/services/connect.ts`) — server connection management -### Font scaling +### Views & Components -- Text scales automatically — never set `allowFontScaling={false}` unless layout is provably broken -- `useResponsiveLayout()` provides `fontScale`, `fontScaleLimited` (capped at `FONT_SCALE_LIMIT = 1.3`), `width`, `height` -- Apply `fontScaleLimited` only where large font scales break fixed-size containers — not by default -- Fixed-size touch targets (icon buttons, avatars) do not need to scale +- **Views** (`app/views/`) — 70+ screen components +- **Containers** (`app/containers/`) — reusable UI components +- **Theme** (`app/theme.tsx`) — theming context -### Landscape / responsive layout +### Other Key Systems -- Always use `useResponsiveLayout()` (not `useWindowDimensions()` directly) to get `width` / `height` -- Derive `isLandscape = width > height` from those values -- `useResponsiveLayout` is the single source of truth for dimensions — avoids conflicts with tablet (Master Detail) layout +- **i18n** (`app/i18n/`) — i18n-js with 40+ locales, RTL support +- **Encryption** (`app/lib/encryption/`) — E2E encryption via @rocket.chat/mobile-crypto +- **Enterprise** (`app/ee/`) — Omnichannel/livechat features +- **Definitions** (`app/definitions/`) — shared TypeScript types +- **VideoConf** (`app/sagas/videoConf.ts`, `app/lib/methods/videoConf.ts`) — server-managed video conferencing (Jitsi); uses Redux actions/reducers/sagas. May be replaced or removed in the future. +- **VoIP** (`app/lib/services/voip/`) — new WebRTC peer-to-peer audio calls with native CallKit (iOS) and Telecom (Android) integration; uses Zustand stores, not Redux. VoIP and VideoConf are entirely separate features — do not conflate them. -## graphify +### Entry Points -Before answering codebase architecture questions, read `graphify-out/graph.json` for structure. Use the graph to find relevant files and connections instead of exploring blindly. +- `index.js` — registers app, conditionally loads Storybook +- `app/index.tsx` — Redux provider, theme, navigation, notifications setup +- `app/AppContainer.tsx` — root navigation container diff --git a/UBIQUITOUS_LANGUAGE.md b/UBIQUITOUS_LANGUAGE.md index d737440ddea..1e65984bdc8 100644 --- a/UBIQUITOUS_LANGUAGE.md +++ b/UBIQUITOUS_LANGUAGE.md @@ -2,172 +2,144 @@ ## Rooms & Conversations -| Term | Definition | Aliases to avoid | -| ---------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------- | -| **Room** | A conversation space identified by `rid`, with a type (`t`) determining its behavior | Chat, conversation, chat room | -| **Channel** | A public room (`t='c'`) discoverable by all server users | Public group, open room | -| **Group** | A private room (`t='p'`) accessible only to invited members | Private channel, private room | -| **Direct** | A one-on-one or multi-party direct message room (`t='d'`) | DM, IM, instant message, private message | -| **Discussion** | A child room linked to a parent via `prid`, created from a message | Sub-room, nested channel | -| **Subscription** | A user's participation record in a room — tracks unread counts, favorites, drafts, and per-user state | Membership, room membership, joined room | -| **Broadcast** | A room mode where only admins can post; others can only react or reply in threads | Announcement channel, read-only channel | +| Term | Definition | Aliases to avoid | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | +| **Room** | A server-side conversation container with shared state (name, type, settings) | Chat, conversation | +| **Subscription** | A user's personal relationship to a Room, holding per-user state (unread count, favorite, muted, open) | Membership, room entry | +| **Channel** | A public Room (type `'c'`) visible to all server users | Public room | +| **Group** | A private Room (type `'p'`) visible only to invited members | Private room, private channel | +| **Direct Message** | A 1-on-1 private Room (type `'d'`) between two users | DM, PM, private message | +| **Thread** | A branched conversation spawned from a single Message, identified by `tmid` (thread message id) | Reply chain | +| **Discussion** | A separate Room spawned from a parent Room, identified by `prid` (parent room id) — unlike Threads, Discussions are full Rooms | Sub-room, sub-channel | +| **Team** | An organizational container that groups multiple Channels and users under a single entity | Workspace (ambiguous) | ## Messages -| Term | Definition | Aliases to avoid | -| ------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------- | -| **Message** | A content unit within a room, identified by `_id`, belonging to a room via `rid` | Chat message, text | -| **System Message** | A message with a type code (`t`) representing an automated event (user join, topic change, etc.) | Event, notification message, auto-message | -| **Thread** | A reply chain spawned from a parent message, linked via `tmid` (thread message ID) | Reply chain, conversation thread | -| **Thread Message** | An individual message within a thread, tracked separately with `subscription_id` | Reply, threaded reply | -| **Attachment** | Media or rich content embedded in a message — images, videos, audio, files, or nested cards | File, media, embed | -| **Reaction** | An emoji response on a message, storing the emoji and list of usernames who reacted | Emoji reaction, like | -| **Mention** | A reference to a user or channel within message text, parsed into structured data | Tag, @mention, ping | -| **Block** | A UIKit interactive element rendered within a message (buttons, selects, overflow menus) | UI block, interactive element, action block | -| **Markdown** (`md`) | The parsed markdown AST of a message, stored alongside raw `msg` text | Parsed message, rich text | - -## Users & Identity - -| Term | Definition | Aliases to avoid | -| --------------- | --------------------------------------------------------------------------------------------- | ----------------------------------- | -| **User** | An authenticated identity on a Rocket.Chat server, with `username`, `name`, and `status` | Account, member, person | -| **Logged User** | The currently authenticated user in the active session, carrying `token` and preferences | Current user, session user, me | -| **Status** | A user's availability state: `online`, `away`, `busy`, `offline`, or `disabled` | Presence, availability | -| **Role** | A named capability set assigned to a user at global (`Users`) or room (`Subscriptions`) scope | Permission group, access level | -| **Permission** | A specific action right (e.g., `create-c`) mapped to one or more roles | Privilege, access right, capability | - -## Teams - -| Term | Definition | Aliases to avoid | -| --------------- | ----------------------------------------------------------------------------------- | --------------------------- | -| **Team** | A named group of rooms and members, typed as `PUBLIC` (0) or `PRIVATE` (1) | Team channel, workspace | -| **Team Member** | A user's membership in a team, with team-specific roles | Team participant, team user | -| **Team Room** | A room belonging to a team, linked via `teamId`; the main room has `team_main=true` | Team channel | - -## Omnichannel - -| Term | Definition | Aliases to avoid | -| -------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| **Omnichannel Room** | A room (`t='l'`) representing a customer support conversation from an external source | Livechat room, livechat, support chat | -| **Visitor** | An external customer initiating an omnichannel conversation, identified by `token` | Customer, client, livechat user, guest | -| **Agent** | A server user handling omnichannel conversations, with `statusLivechat` (available/unavailable) | Support agent, operator, representative | -| **Department** | An organizational unit grouping agents for omnichannel routing | Support team, queue, livechat department | -| **Inquiry** | A queued omnichannel conversation awaiting agent assignment | Queue item, pending chat, waiting conversation | -| **Canned Response** | A pre-written reply template with a `shortcut` trigger, scoped to user/department/global | Quick reply, saved response, macro | -| **Tag** | A label applied to omnichannel conversations for categorization and reporting | Livechat tag, label, category | -| **Source** | The origin of an omnichannel conversation: `widget`, `email`, `sms`, `app`, `api`, or `other` | Channel, origin, entry point | - -## End-to-End Encryption (E2E) - -| Term | Definition | Aliases to avoid | -| ------------------------------------- | --------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -| **E2E Encryption** | Client-side encryption of message content so only room participants can decrypt | Encryption, end-to-end, E2EE | -| **E2E Key** (`E2EKey`) | The per-subscription group encryption key used to encrypt/decrypt room messages | Encryption key, room key, group key | -| **E2E Key ID** (`e2eKeyId`) | Identifier for the current encryption key version on a room | Key version, key identifier | -| **E2E Status** | Message encryption state: `pending` (not yet encrypted/decrypted) or `done` | Encryption status | -| **Encrypted Content** | The ciphertext payload stored in a message's `content` field, versioned as `rc.v1.aes-sha2` or `rc.v2.aes-sha2` | Cipher, encrypted message, encrypted payload | -| **Suggested Key** (`E2ESuggestedKey`) | A group key proposed to a user who wasn't present when the original key was distributed | Pending key, offered key | - -## Video Conferencing - -| Term | Definition | Aliases to avoid | -| -------------------- | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -| **Video Conference** | A real-time audio/video call session within a room, with status lifecycle: CALLING, STARTED, EXPIRED, ENDED, DECLINED | Video call, meeting, conference call | -| **Direct Call** | A 1:1 video conference between two users | Personal call, private call | -| **Group Call** | A multi-participant video conference in a room | Conference, group video | -| **Ringer** | The audio/UI component that plays when an incoming call is received | Call alert, ring, incoming call notification | +| Term | Definition | Aliases to avoid | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------- | +| **Message** | A unit of communication within a Room, identified by `_id` with content in `msg` and parsed markdown in `md` | Chat message, text | +| **Thread Message** | A Message that belongs to a Thread, identified by presence of `tmid` | Reply, thread reply | +| **System Message** | A Message generated by the server to record events (user joined, room archived, role changed) — identified by `t` (type) field | Event, notification | +| **Attachment** | Rich media or structured data embedded in a Message (image, video, audio, file, or action buttons) | File, media | +| **Reaction** | An emoji response to a Message, tracking which usernames reacted | Emoji reaction | +| **Mention** | An `@username` reference within a Message that triggers notifications | Tag, ping | +| **Draft Message** | A user's unsent composition stored on a Subscription or Thread (`draftMessage` field) | Unsent message | +| **Snippet** | A saved excerpt from a Message | — | + +## Message Status + +| Term | Definition | Aliases to avoid | +| ----------- | -------------------------------------------------------------------- | ---------------- | +| **Sent** | Message successfully delivered to server (status `0`) | Delivered | +| **Temp** | Message created locally but not yet confirmed by server (status `1`) | Pending, sending | +| **Error** | Message that failed to send (status `2`) | Failed | +| **Pinned** | Message flagged as important and pinned to the Room by a user | Bookmarked | +| **Starred** | Message bookmarked by the current user for personal reference | Saved | + +## Users & Roles + +| Term | Definition | Aliases to avoid | +| --------------- | ---------------------------------------------------------------------------------- | ----------------------- | +| **User** | An authenticated identity on the server with username, status, and roles | Account, profile | +| **Logged User** | The currently authenticated User session, holding auth token and preferences | Current user, session | +| **Role** | A named permission group assigned to Users (e.g., owner, moderator, leader, guest) | Permission group | +| **Permission** | A named capability mapped to one or more Roles | Privilege, access right | +| **Active User** | A User currently tracked as online/away/busy via real-time presence | Online user | +| **Member** | A User viewed in the context of a specific Room's membership list | Participant | + +## User Status + +| Term | Definition | Aliases to avoid | +| ----------- | -------------------------------- | ---------------- | +| **Online** | User is actively connected | Active | +| **Away** | User idle past timeout threshold | Idle | +| **Busy** | User has set do-not-disturb | DND | +| **Offline** | User is not connected | Disconnected | + +## Omnichannel / Livechat + +| Term | Definition | Aliases to avoid | +| ---------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------- | +| **Omnichannel Room** | A customer-service Room (type `'l'`) connecting a Visitor to an Agent | Livechat room, support chat | +| **Visitor** | An external customer who initiates an Omnichannel conversation, identified by a unique token | Client, customer, end-user | +| **Agent** | A User designated to handle Omnichannel conversations, with `statusLivechat` (available/unavailable) | Support agent, operator, rep | +| **Inquiry** | A queued Omnichannel request waiting to be picked up or routed to an Agent | Queue item, ticket | +| **Department** | An organizational unit that groups Agents for Omnichannel routing | Team (ambiguous), group | +| **Omnichannel Source** | How an Omnichannel conversation was initiated (widget, email, sms, app, api) | Channel origin | +| **Served By** | The Agent currently assigned to handle an Omnichannel Room | Assigned agent, handler | +| **On Hold** | An Omnichannel Room temporarily paused by the Agent | Paused, suspended | +| **Transfer** | Moving an Omnichannel Room to a different Agent or Department | Forward, reassign, handoff | + +## Encryption + +| Term | Definition | Aliases to avoid | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------- | ---------------- | +| **E2E Encryption** | End-to-end encryption for Room content using AES-SHA2, with two protocol versions (`rc.v1.aes-sha2`, `rc.v2.aes-sha2`) | Encryption, E2EE | +| **E2E Key** | A user's asymmetric key pair (public + private) for E2E Encryption | Crypto key | +| **OTR** | Off-The-Record messaging — ephemeral encrypted conversation mode between two users | — | + +## Video & Voice + +| Term | Definition | Aliases to avoid | +| --------------------------- | --------------------------------------------------------------------------------------------------- | ---------------------- | +| **Video Conference** | A video/voice call session with status lifecycle (calling, started, expired, ended, declined) | Video call, meeting | +| **Direct Video Conference** | A 1-on-1 Video Conference | — | +| **Group Video Conference** | A multi-participant Video Conference with title and anonymous user support | — | +| **VOIP** | Voice-over-IP phone-style call, separate from Video Conference — uses ICE servers and media streams | Phone call, voice call | ## Server & Connection -| Term | Definition | Aliases to avoid | -| ---------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------- | -| **Server** | A Rocket.Chat instance the app connects to, identified by URL | Workspace, instance, host | -| **Server History** | A record of previously connected server URLs with associated usernames | Login history, saved servers | -| **Meteor Connect** | The DDP (Distributed Data Protocol) real-time connection to the server | WebSocket connection, real-time connection, DDP | -| **Enterprise Module** | A feature flag indicating availability of a paid/enterprise capability | License feature, premium module | -| **Supported Versions** | Server-declared compatible app version ranges, triggering warnings when outdated | Version compatibility, version check | - -## File & Media - -| Term | Definition | Aliases to avoid | -| ------------------------- | ------------------------------------------------------------------------------------ | ------------------------------ | -| **Upload** | A file being sent to a room, tracked with `progress` (0-100) and `error` state | File upload, attachment upload | -| **Custom Emoji** | A server-defined emoji with `name` and file `extension`, distinct from Unicode emoji | Server emoji, uploaded emoji | -| **Frequently Used Emoji** | A per-user emoji usage counter for emoji picker ordering | Recent emoji, emoji history | -| **URL Preview** | Rich metadata (OG image, title, description) extracted from links shared in messages | Link preview, unfurl, embed | - -## Navigation & Deep Linking - -| Term | Definition | Aliases to avoid | -| ------------- | ------------------------------------------------------------------ | ------------------------------------ | -| **Deep Link** | A URL that routes the app to a specific room, message, or action | Universal link, app link | -| **Spotlight** | The quick-search feature returning matched users and rooms | Quick search, global search, jump-to | -| **Directory** | The browsable listing of all public channels and users on a server | Channel list, user directory | - -## Authentication - -| Term | Definition | Aliases to avoid | -| ----------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------- | -| **Credentials** | Login payload supporting multiple methods: password, LDAP, SAML, CAS, OAuth, resume token | Login data, auth payload | -| **Two-Factor Authentication** (2FA) | Secondary verification via TOTP code or email code during login | MFA, second factor, verification code | -| **Resume Token** | A stored token allowing session restoration without re-entering credentials | Session token, refresh token, auth token | -| **Login Services** | External OAuth/SSO providers configured on the server (Google, GitHub, SAML, CAS, etc.) | OAuth providers, SSO, external auth | - -## App State & UI - -| Term | Definition | Aliases to avoid | -| ----------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------- | -| **Master Detail** | The split-view layout on tablets showing room list and room content side-by-side | Split view, tablet layout, two-pane | -| **Sort Preferences** | User settings for room list ordering: `sortBy`, `groupByType`, `showFavorites`, `showUnread`, `displayMode` | List preferences, view settings | -| **Share Extension** | The OS-level share sheet integration that sends content from other apps into Rocket.Chat | Share sheet, sharing | -| **In-App Notification** | A banner shown inside the app when a push notification arrives while the app is foregrounded | Toast, notification banner | -| **Slash Command** | A `/`-prefixed command that triggers server-side or client-side actions | Command, bot command | - -## Accessibility (a11y) - -| Term | Definition | Aliases to avoid | -| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | -| **Accessibility Label** (`accessibilityLabel`) | A human-readable string announced by screen readers to describe an element | aria-label, alt text | -| **Accessibility Role** (`accessibilityRole`) | Semantic role of a component (`button`, `header`, `switch`, etc.) that tells screen readers how to treat the element | aria-role | -| **Accessibility Elements Hidden** (`accessibilityElementsHidden`) | Hides a subtree from the screen reader while keeping it visually mounted — used on containers that animate in/out | aria-hidden | -| **A11y Order** | Reading order control via `react-native-a11y-order` (`A11y.Order` / `A11y.Index`) — applied when visual layout order differs from logical reading order | Tab order, focus order | -| **Accessibility Focus** | Programmatic focus placement via `AccessibilityInfo.setAccessibilityFocus()` — used to guide screen reader to the most important element on screen (e.g., incoming call) | Focus management | -| **Screen Reader Announcement** | A message pushed to the screen reader via `AccessibilityInfo.announceForAccessibility()` without changing focus — used for dynamic state changes | Live region, aria-live | -| **Font Scale** (`fontScale`) | OS-level text size multiplier (1.0 = default). Exposed by `useResponsiveLayout()`. React Native `Text` respects it automatically | Text size, dynamic type | -| **Font Scale Limited** (`fontScaleLimited`) | `fontScale` capped at `FONT_SCALE_LIMIT = 1.3` via `useResponsiveLayout()` — applied only to fixed-size containers where uncapped scaling breaks layout | Capped font scale | -| **Screen Reader Enabled** | Runtime boolean from `useIsScreenReaderEnabled()` indicating VoiceOver (iOS) or TalkBack (Android) is active — used to adapt gesture-based interactions | VoiceOver active, TalkBack active | +| Term | Definition | Aliases to avoid | +| ------------------ | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | +| **Server** | A Rocket.Chat server instance the app connects to, with version, settings, and enterprise modules | Workspace (used by web but not consistently in mobile), instance | +| **Server History** | List of previously connected Servers for quick reconnection | Recent servers | +| **Meteor Connect** | The WebSocket connection to the Server's DDP (Distributed Data Protocol) endpoint | Socket, connection | + +## Navigation & Layout + +| Term | Definition | Aliases to avoid | +| -------------------- | ----------------------------------------------------------------------------------------- | ---------------------- | +| **Outside Stack** | Navigation screens shown when unauthenticated (server selection, login, register) | Auth stack, login flow | +| **Inside Stack** | Navigation screens shown when authenticated (rooms, settings, profile) | Main stack, app stack | +| **Master-Detail** | Tablet layout with room list (master pane) and room content (detail pane) side by side | Split view, two-pane | +| **Chats Stack** | The primary messaging navigation within Inside Stack (room list, room view, room actions) | — | +| **Drawer Navigator** | Side navigation containing tabs: Chats, Profile, Settings, Admin, Accessibility | Sidebar, menu | + +## Unread & Notification Indicators + +| Term | Definition | Aliases to avoid | +| ------------------ | -------------------------------------------------------------------------------------------------------- | ----------------- | +| **Unread** | Count of unread regular Messages in a Subscription | Badge count | +| **User Mentions** | Count of Messages that `@mentioned` the current user in a Subscription | Personal mentions | +| **Group Mentions** | Count of `@all` or `@here` mentions in a Subscription | Channel mentions | +| **Tunread** | Array of Thread IDs with unread replies | Thread unread | +| **Alert** | Boolean flag on a Subscription indicating it has unread mentions or special activity requiring attention | Notification flag | ## Relationships -- A **User** has many **Subscriptions**, each linking them to one **Room** -- A **Room** contains many **Messages**; a **Message** belongs to one **Room** (via `rid`) -- A **Message** can spawn a **Thread** (via `tmid`); a **Thread** contains **Thread Messages** -- A **Message** can create a **Discussion**, which is itself a child **Room** (linked via `prid`) -- A **Room** can belong to a **Team** (via `teamId`); a **Team** has one main **Room** (`team_main=true`) -- An **Omnichannel Room** is served by an **Agent**, belongs to a **Department**, and is initiated by a **Visitor** -- An **Inquiry** becomes an **Omnichannel Room** once an **Agent** accepts it -- A **Permission** maps to one or more **Roles**; a **Role** is scoped to either `Users` (global) or `Subscriptions` (per-room) -- An **E2E Key** is stored per **Subscription**, encrypting all **Messages** in that **Room** -- A **Video Conference** belongs to a **Room** and tracks participating **Users** -- A **Custom Emoji** is server-wide; a **Frequently Used Emoji** is per-user +- A **Room** can be of type **Channel**, **Group**, **Direct Message**, or **Omnichannel Room** +- A **Subscription** belongs to exactly one **Room** and one **User** +- A **Message** belongs to exactly one **Room** (via `rid`) +- A **Thread** is spawned from exactly one **Message** and contains one or more **Thread Messages** +- A **Discussion** creates a new **Room** linked to a parent **Room** (via `prid`) +- A **Team** has exactly one main **Room** and can contain multiple **Channels** +- An **Omnichannel Room** connects exactly one **Visitor** with zero or one **Agents** (via **Served By**) +- An **Agent** belongs to one or more **Departments** +- An **Inquiry** becomes an **Omnichannel Room** when picked up by an **Agent** ## Example dialogue -> **Dev:** "When a user opens the app, how do we know which rooms to show?" -> **Domain expert:** "We load all **Subscriptions** for the **Logged User** from WatermelonDB. Each **Subscription** points to a **Room** via `rid`. The list is ordered by **Sort Preferences**." -> **Dev:** "What about **Omnichannel Rooms** — do agents see those the same way?" -> **Domain expert:** "No. Omnichannel conversations first appear as **Inquiries** in a queue. The **Agent** must accept the **Inquiry**, which creates a **Subscription** and makes the **Omnichannel Room** visible in their list." -> **Dev:** "And if a customer sends a message before an agent accepts?" -> **Domain expert:** "The **Visitor**'s messages are stored in the **Omnichannel Room**, but no **Agent** has a **Subscription** to it yet. The **Inquiry** tracks queue position. Once accepted, the **Agent** gets the full **Message** history." -> **Dev:** "What about encrypted rooms — does the **Subscription** carry the key?" -> **Domain expert:** "Yes. The **E2E Key** is stored on the **Subscription**. When a new user joins, we use **Suggested Key** to propose the group key. Until they accept, their **E2E Status** on messages stays `pending`." +> **Dev:** "When a user opens the app, do they see their **Subscriptions** or their **Rooms**?" +> **Domain expert:** "**Subscriptions**. The sidebar shows the user's Subscriptions — each one points to a Room, but carries user-specific state like **Unread** count and **Alert** flag. A Room exists independently; a Subscription is the user's window into it." +> **Dev:** "So if someone starts a **Thread** in a **Channel**, does that create a new **Subscription**?" +> **Domain expert:** "No. A **Thread** lives inside the parent Room's **Subscription**. Thread unreads are tracked via **Tunread** on the Subscription. A **Discussion**, on the other hand, creates an entirely new Room with its own Subscription." +> **Dev:** "And for **Omnichannel** — when a **Visitor** sends a message from the widget, what happens?" +> **Domain expert:** "An **Inquiry** is created and queued. Once an **Agent** picks it up or routing assigns it, the Inquiry becomes an **Omnichannel Room** with the Agent recorded in **Served By**. If the Agent needs to escalate, they do a **Transfer** to another Agent or **Department**." ## Flagged ambiguities -- **`rid`** vs **`_id`** vs **`id`**: All three appear as room identifiers. `rid` is the canonical room reference on Subscriptions and Messages. `_id` is the document ID (often equals `rid` on rooms). `id` appears on WatermelonDB models as the local primary key. Use **`rid`** when referring to a room relationship, **`_id`** for the room document itself. -- **`t` (type)** is overloaded across domains: on Rooms/Subscriptions it's the room type (`c`/`d`/`p`/`l`), on Messages it's the system message type (`uj`/`ul`/`au`/etc.). Always qualify: "room type" or "message type." -- **"Livechat"** vs **"Omnichannel"**: The codebase uses both — `livechat` in API endpoints and database fields, `omnichannel` in types, UI, and enterprise modules. **Omnichannel** is the canonical term; **Livechat** is a legacy alias persisting in API/DB layers. -- **`fname`** vs **`name`**: Rooms have both — `name` is the slug/identifier, `fname` is the display-friendly formatted name. Use **`fname`** for display, **`name`** for lookups. -- **"Group"** vs **"Private Channel"**: The codebase maps `t='p'` to `ERoomType.p = 'group'`. The canonical term is **Group**; avoid "private channel." -- **`tmsg`** is used for both "translated message" and "thread message text" depending on context. On IMessage it holds the thread's root message text for display; on translations it holds the translated content. -- **"User" model** exists in both the app database (room participants) and servers database (logged-in user profile). The app-DB User is a lightweight participant record; the servers-DB User carries authentication tokens and preferences. +- **"Workspace"** is used by Rocket.Chat web to mean a server instance, but the mobile codebase uses **Server**. Use **Server** in mobile context to avoid confusion with the web admin concept. +- **"Room type `'e2e'`"** and **"Room type `'thread'`"** appear in `SubscriptionType` enum but are marked with FIXME in code — these are not true room types but flags. Do not treat them as room types in new code. +- **"Account"** is sometimes used loosely to mean either **User** (the identity) or **Server** (the connected instance). These are distinct: a **User** authenticates on a **Server**. +- **"Channel"** in everyday speech can mean any Room, but in domain terms it strictly means a public Room (type `'c'`). A private Room is a **Group** (type `'p'`). +- **"Forward"** in omnichannel context means **Transfer** (reassigning a room to another agent/department). The codebase uses both `forwardRoom` and "transfer" — prefer **Transfer** as the domain term. diff --git a/app/i18n/locales/te-IN.json b/app/i18n/locales/te-IN.json index 812fe282b3a..61602a65aac 100644 --- a/app/i18n/locales/te-IN.json +++ b/app/i18n/locales/te-IN.json @@ -18,8 +18,8 @@ "abac_removed_user_from_the_room": "ABAC ద్వారా తొలగించబడింది", "ABAC_room_attributes": "గది లక్షణాలు", "accept": "అంగీకరించు", - "Accessibility": "एक्सेसिबिलिटी", - "Accessibility_and_Appearance": "प्रवेशयोग्यता और रूपरेखा", + "Accessibility": "ప్రాప్యత", + "Accessibility_and_Appearance": "ప్రాప్యత మరియు రూపకల్పన", "Accessibility_statement": "పేరుబట్టి వివరణ", "Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "వాడాకు 'కూడా చానల్‌కు పంపండి' పనికి అనుమతిస్తుంది", "Actions": "చర్యలు", @@ -58,7 +58,7 @@ "Also_send_thread_message_to_channel_behavior": "చానల్‌కు థ్రెడ్ సందేశాన్ని కూడా పంపండి", "and": "మరియు", "and_N_more": "మరింత {{count}}", - "Animals_and_nature": "जानवर और प्रकृति", + "Animals_and_nature": "జంతువులు మరియు ప్రకృతి", "Announcement": "ప్రకటన", "announcement": "ప్రకటన", "Apply_Certificate": "సర్టిఫికేట్‌ని వర్తింపజేయండి", @@ -71,25 +71,25 @@ "At_Least_1_Lowercase_Letter": "కనీసం 1 చిన్న అక్షరం", "At_Least_1_Number": "కనీసం 1 సంఖ్య", "At_Least_1_Symbol": "కనీసం 1 చిహ్నం", - "At_Least_1_Uppercase_Letter": "कम से कम 1 बड़े अक्षर", - "At_Least_Characters": "कम से कम {{quantity}} अक्षर", + "At_Least_1_Uppercase_Letter": "కనీసం 1 పెద్ద అక్షరం", + "At_Least_Characters": "కనీసం {{quantity}} అక్షరాలు", "At_Most_24_Characters": "గరిష్టంగా 24 అక్షరాలు", - "At_Most_Characters": "अधिकतम {{quantity}} अक्षर", - "Attention": "ध्यान दें", + "At_Most_Characters": "గరిష్టంగా {{quantity}} అక్షరాలు", + "Attention": "శ్రద్ధ", "Audio": "ఆడియో", "Auto_Translate": "స్వయం అనువదించండి", "Auto-join": "స్వయం-చేరండి", "Automatic": "స్వయంగా", - "Autoplay_gifs": "जीआईएफ़ का स्वतःप्ले", + "Autoplay_gifs": "GIF లను స్వయంచాలకంగా ప్లే చేయండి", "Avatar": "అవతార్", "Avatar_changed_successfully": "అవతార్ విజయవంతంగా మారింది!", - "Avatar_default_photo": "डिफ़ॉल्ट अवतार {{username}} के लिए", - "Avatar_Photo": "{{username}} का अवतार", + "Avatar_default_photo": "{{username}} కోసం డిఫాల్ట్ అవతార్", + "Avatar_Photo": "{{username}} యొక్క అవతార్", "Avatar_Url": "అవతార్ URL", "Avatars": "అవతార్లు", "Away": "దూరంగా", - "Back": "वापस", - "Back_to_keyboard": "कीबोर्ड पर वापस", + "Back": "వెనుకకు", + "Back_to_keyboard": "కీబోర్డ్‌కు తిరిగి వెళ్ళండి", "Bio": "జీవిత చరిత్ర", "Black": "నలుపు", "Broadcast": "బ్రాడ్‌కాస్ట్", @@ -107,17 +107,17 @@ "Call_not_answered_bold": "*వాయిస్ కాల్ జవాబు ఇవ్వబడలేదు*", "Call_ongoing": "కాల్ ప్రవర్తిస్తోంది", "Call_rejected": "కాల్ తిరస్కరించబడింది", - "Call_room_name": "{{roomName}} को कॉल करें", + "Call_room_name": "{{roomName}} కు కాల్ చేయండి", "Call_started": "కాల్ ప్రారంభించబడింది", "Call_transferred_bold": "*వాయిస్ కాల్ బదిలీ చేయబడింది*", "Call_was_canceled_before_being_answered": "కాల్ సమాధానం ఇవ్వబడకముందే రద్దు చేయబడింది", "Call_was_not_answered": "కాల్ సమాధానించబడలేదు", "Calling": "కాల్ చేస్తోంది", "Cancel": "రద్దు", - "Cancel_and_delete_recording": "रिकॉर्डिंग रद्द करें और हटाएं।", + "Cancel_and_delete_recording": "రికార్డింగ్‌ను రద్దు చేసి తొలగించండి", "Cancel_editing": "సవరించడానికి రద్దు చేయి", "Cancel_recording": "రికార్డింగ్‌ను రద్దు చేయి", - "Cancel_upload": "अपलोड रद्द करें", + "Cancel_upload": "అప్‌లోడ్ రద్దు చేయండి", "Canned_Responses": "క్యాన్డ్ రిస్పాన్సెలు", "Cannot_delete": "తొలగించలేరు", "Cannot_leave": "విడిచలేరు", @@ -125,7 +125,7 @@ "Certificate_password": "సర్టిఫికేట్ పాస్‌వర్డ్", "Change_Language": "భాషను మార్చు", "Change_language_loading": "భాషను మార్చాడు.", - "Change_my_password": "मेरा पासवर्ड बदलें।", + "Change_my_password": "నా పాస్‌వర్డ్ మార్చండి", "changed_room_announcement": "గది ప్రకటనను మార్చారు: {{announcement}}", "changed_room_description": "గది వివరాన్ని మార్చారు: {{description}}", "changing_avatar": "అవతార్ మార్చడం", @@ -136,15 +136,15 @@ "Channel_hint_private": "కేవలం ఆహ్వానిత వాడాలు ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", "Channel_hint_public": "ప్రతిపక్షం ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", "Channel_Name": "ఛానల్ పేరు", - "Channel_name_already_taken": "चैनल का नाम पहले से लिया जा चुका है।", - "Channel_name_required": "चैनल का नाम आवश्यक है।", + "Channel_name_already_taken": "ఛానల్ పేరు ఇప్పటికే తీసుకోబడింది", + "Channel_name_required": "ఛానల్ పేరు అవసరం", "Channels": "ఛానల్లు", "Chat_closed_by_agent": "ఏజెంట్ ద్వారా చాట్ మూసబడింది", "Chat_is_on_hold": "ఇది చాట్ అనాకరణం కారణంగా ఆఫ్‌లోడ్ ఉంది", "Chat_started": "చాట్ ప్రారంభించబడింది", "Chats": "చాట్లు", "Check_canned_responses": "క్యాన్డ్ రిస్పాన్సెలను తనిఖీ చేయండి.", - "Choose": "चुनें", + "Choose": "ఎంచుకోండి", "Choose_file": "ఫైల్ ఎంచుకో", "Choose_from_library": "లైబ్రరీ నుండి ఎంచుకో", "Choose_where_you_want_links_be_opened": "లింకులను ఎక్కువ ఉంచాలా ఎంచుకో", @@ -155,15 +155,15 @@ "Close": "మూసివేయి", "Close_Chat": "చాట్‌ను మూసివేయండి", "Code_or_password_invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లనిది", - "Code_required": "कोड की आवश्यकता है।", + "Code_required": "కోడ్ అవసరం", "Collaborative": "సహయోగం", "Condensed": "సంక్షేపించబడిన", "conference_call": "సభా కాల్", "Confirm": "ఖచ్చితంగా చెప్పు", - "Confirm_password": "पासवर्ड की पुष्टि करें", + "Confirm_password": "పాస్‌వర్డ్‌ను నిర్ధారించండి", "Confirmation": "అనుమతి", "Connect": "కనెక్ట్ చేయండి", - "Connect_to_server_as_user": "{{user}} के रूप में {{serverUrl}} से कनेक्ट करें।", + "Connect_to_server_as_user": "{{serverUrl}} కు {{user}} గా కనెక్ట్ అవ్వండి", "Connecting": "కనెక్ట్ అవుతోంది...", "Contact_us": "మాకు సంప్రదించండి", "Contact_your_server_admin": "మీ పనిచేసే అడ్మిన్‌ని సంప్రదించండి.", @@ -173,7 +173,7 @@ "Conversation": "సంభాషణ", "Conversation_closed": "సంభాషణ మూసబడింది", "Convert": "మార్చు", - "Convert_ASCII_to_emoji": "ASCII को इमोजी में बदलें", + "Convert_ASCII_to_emoji": "ASCII ను ఎమోజీకి మార్చండి", "Convert_to_Channel": "చానల్ కి మార్చండి", "Convert_to_Team": "టీమ్‌కు మార్చు", "Convert_to_Team_Warning": "మీరు ఈ ఛానల్‌ను టీమ్‌కు మార్చుతున్నారు. అన్ని సభ్యులు ఉంటారు.", @@ -190,16 +190,16 @@ "Create_Direct_Messages": "సరాసరి సందేశాలను సృష్టించండి", "Create_Discussion": "చర్చ సృష్టించండి", "Create_New": "కొత్తగా సృష్టించండి", - "Create_new_channel_team_dm_discussion": "नया चैनल, टीम, सीधा संदेश या चर्चा बनाएँ।", + "Create_new_channel_team_dm_discussion": "కొత్త ఛానల్, టీమ్, ప్రత్యక్ష సందేశం లేదా చర్చను సృష్టించండి", "Create_Team": "టీమ్ సృష్టించండి", "Created_snippet": "ఒక స్నిపెట్ సృష్టించబడింది", "creating_channel": "ఛానల్ సృష్టించడం", "creating_discussion": "సంవాదాలను సృష్టిస్తోంది", "creating_invite": "ఆహ్వానాన్ని సృష్టించడం", "creating_team": "టీమ్ సృష్టిస్తోంది", - "Current_password": "वर्तमान पासवर्ड", - "Current_Status": "वर्तमान स्थिति", - "Custom": "कस्टम", + "Current_password": "ప్రస్తుత పాస్‌వర్డ్", + "Current_Status": "ప్రస్తుత స్థితి", + "Custom": "అనుకూలీకరించు", "Dark": "గాఢంగా", "Dark_level": "గాఢంగా స్థాయి", "decline": "నిరాకరించు", @@ -213,7 +213,7 @@ "Delete_Account_confirm": "అవును, తొలగించండి", "Delete_image": "చిత్రం తొలగించు", "Delete_my_account": "నా ఖాతాను తొలగిస్తోంది", - "Delete_recording": "रिकॉर्डिंग हटाएं", + "Delete_recording": "రికార్డింగ్ తొలగించండి", "Delete_Room_Warning": "ఒక కొరకుని మొత్తం పోస్ట్ చేసిన అన్ని సందేశాలను తొలగించడం. ఇది పునఃప్రారంభించబడదు.", "Delete_Team": "టీమ్ ను తొలగిస్తోంది", "Deleted__roomName__": "#{{roomName}} ని తొలగించారు", @@ -235,9 +235,9 @@ "Discard_changes": "మార్పులను తిరిగి వాడండి?", "Discard_changes_description": "మీరు సేవించకపోతే అన్ని మార్పులు కోలుక పడతాయి.", "Discussion": "చర్చ", - "Discussion_Desc": "चर्चाएँ किसी चैनल या टीम के अंदर एक विशिष्ट विषय के बारे में अलग बातचीत की अनुमति देती हैं जहाँ किसी भी कार्यक्षेत्र के सदस्य को जोड़ा जा सकता है।", + "Discussion_Desc": "చర్చలు ఛానల్ లేదా టీమ్ లోపల ఒక నిర్దిష్ట విషయం గురించి వేరు సంభాషణలను అనుమతిస్తాయి, అక్కడ ఏ వర్క్‌స్పేస్ సభ్యుడు కూడా చేర్చవచ్చు", "Discussion_name": "చర్చ పేరు", - "Discussion_name_required": "चर्चा के लिए नाम आवश्यक है।", + "Discussion_name_required": "చర్చ పేరు అవసరం", "Discussions": "చర్చలు", "Display": "ప్రదర్శించు", "Do_it_later": "తర్వాత చెయ్యి", @@ -266,17 +266,17 @@ "E2E_How_It_Works_info4": "మీరు అనుమతి పొందకపోతే, మీరు ప్రస్తుతం ఉపయోగించిన E2E పాస్‌వర్డ్ నుండి ఎంక్రిప్షన్ కీకి కొత్త పాస్‌వర్డ్ సెట్ చేయవచ్చు.", "E2EE_password": "E2EE పాస్వర్డ్", "Edit": "సవరించు", - "Edit_Avatar": "अवतार संपादित करें", + "Edit_Avatar": "అవతార్‌ను సంపాదించండి", "Edit_Invite": "ఆహ్వానాన్ని సవరించు", "Edit_Room_Photo": "గది ఫోటోను సవరించండి", "Edit_Status": "స్థితిని సవరించు", - "Email": "ईमेल", - "Email_associated_with_another_user": "अन्य उपयोगकर्ता के साथ संबद्ध ईमेल", - "Email_must_be_a_valid_email": "ईमेल एक मान्य ईमेल होना चाहिए।", + "Email": "ఇమెయిల్", + "Email_associated_with_another_user": "ఇమెయిల్ మరొక వాడుకరితో సంబంధం కలిగి ఉంది", + "Email_must_be_a_valid_email": "ఇమెయిల్ చెల్లుబాటులో ఉండాలి", "Email_Notification_Mode_All": "ప్రతి ఉల్లేఖం / DM", "Email_Notification_Mode_Disabled": "అచ్చుకోవడం లేదు", - "Email_required": "ईमेल आवश्यक है।", - "Emoji_selector": "इमोजी चयनकर्ता", + "Email_required": "ఇమెయిల్ అవసరం", + "Emoji_selector": "ఎమోజీ ఎంపికదారు", "Empty": "ఖాళీ", "Enable_Auto_Translate": "స్వయం-అనువదించడం అనుమతించండి", "Enable_encryption_button_label": "గూఢీకరణను ప్రారంభించు", @@ -287,15 +287,15 @@ "Encrypted_message": "ఎన్క్రిప్టెడ్ సందేశం", "encrypted_room_description": "ప్రాప్యతకు మీ అంతిమ నుండి అంతిమ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను నమోదు చేయండి.", "encrypted_room_title": "{{room_name}} ఎన్క్రిప్ట్ చేయబడింది", - "Encryption_error_desc": "आपकी एन्क्रिप्शन कुंजी को डिकोड करना संभव नहीं था।", - "Encryption_error_title": "गलत पासवर्ड", + "Encryption_error_desc": "మీ ఎన్‌క్రిప్షన్ కీను డికోడ్ చేయడం సాధ్యం కాలేదు", + "Encryption_error_title": "తప్పు పాస్‌వర్డ్", "End_to_end_encrypted_room": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ రూం", "Enter_E2EE_Password": "E2EE పాస్‌వర్డ్ నమోదు చేయండి", "Enter_E2EE_Password_description": "ఎన్‌క్రిప్ట్ చేయబడిన సందేశాలను వీక్షించడానికి మరియు పంపడానికి మీ E2EE పాస్‌వర్డ్‌ని నమోదు చెయ్యండి.\n\nప్రతీ పరికరంలో పాస్‌వర్డ్‌ని నమోదు చేయాల్సి ఉంటుంది.", "Enter_manually": "మాన్యువల్‌గా నమోదు చేయండి", "Error_Download_file": "ఫైల్ డౌన్‌లోడ్ చేస్తున్నప్పుడు తప్పిబాటు", - "Error_incorrect_password": "गलत पासवर्ड", - "Error_prefix": "त्रुटि: {{संदेश}}", + "Error_incorrect_password": "తప్పు పాస్‌వర్డ్", + "Error_prefix": "తప్పు: {{message}}", "Error_uploading": "అప్‌లోడ్ లోపం", "error-action-not-allowed": "{{action}} అనుమతించబడినది కాదు", "error-avatar-invalid-url": "చెల్లింపు అవతార URL: {{url}}", @@ -325,19 +325,19 @@ "Federation_Matrix_room_description_invalid_version": "ఈ గది పాత ఫెడరేషన్ వెర్షన్‌తో సృష్టించబడింది మరియు నిరవధికంగా నిరోధించబడింది.", "Federation_Matrix_room_description_missing_module": "ఫెడరేటెడ్ గదులలో చేరడం ఒక ప్రీమియం ఫీచర్", "Fetch_image_from_URL": "URL నుండి చిత్రాన్ని పొందండి", - "Field_are_required": "{{field}} आवश्यक हैं", - "Field_is_required": "{{field}} आवश्यक है।", + "Field_are_required": "{{field}} అవసరం", + "Field_is_required": "{{field}} అవసరం", "File_description": "పిలుస్తూనే వివరణ", "Files": "పిలుస్తూనే", "FileUpload_Error": "ఫైల్ అప్లోడ్ లోపం", "Filter": "फिल्टर", "Finish_recording": "రికార్డింగ్ ముగించండి", - "Flags": "ध्वज", - "Follow_thread": "थ्रेड का पालन करें", + "Flags": "ఫ్లాగ్‌లు", + "Follow_thread": "థ్రెడ్‌ను అనుసరించండి", "Following": "అనుసరించుతుంది", "Following_thread": "అనుసరించుకోవడానికి థ్రెడ్", - "Food_and_drink": "भोजन और पेय", - "For_your_security_you_must_enter_your_current_password_to_continue": "आपकी सुरक्षा के लिए, जारी रखने के लिए आपको अपने खाते का पासवर्ड दर्ज करना होगा।", + "Food_and_drink": "ఆహారం మరియు పానీయాలు", + "For_your_security_you_must_enter_your_current_password_to_continue": "మీ సురక్షత కోసం, కొనసాగించడానికి మీరు మీ ఖాతా పాస్‌వర్డ్‌ను నమోదు చేయాలి", "Forgot_E2EE_password": "E2EE పాస్‌వర్డ్ మర్చిపోయారా?", "Forgot_password": "మీ పాస్‌వర్డ్ మరచిపోయారా?", "Forgot_password_If_this_email_is_registered": "ఈ ఇ-మెయిల్ నమోదు చేసినట్లు, మేము మీ పాస్‌వర్డ్‌ను రీసెట్ చేయడానికి సూచనలు పంపబడిపోతాము. మీరు చాలా తక్కువగా ఒక ఇ-మెయిల్ లభిస్తే, దయచేసి మరియువకాయ ప్రయాసించండి.", @@ -356,9 +356,9 @@ "Group_by": "గ్రూప్ చేయండి", "Has_left_the_team": "టీమ్ ను వదిలిపోయారు", "Help": "సహాయం", - "Hide": "छुपाएं", + "Hide": "దాచు", "Hide_notification": "నోటిఫికేషన్ దాచు", - "Hide_Password": "पासवर्ड छिपाएं", + "Hide_Password": "పాస్‌వర్డ్ దాచు", "Hide_System_Messages": "వ్యవస్థ సందేశాలను దాచండి", "Hide_type_messages": "{{type}} సందేశాలను దాచండి", "How_It_Works": "ఇది ఎలా పని చేస్తుంది", @@ -374,10 +374,10 @@ "Incoming_call_from": "నుండి రాబోయే కాల్", "insert_Avatar_URL": "ఇక్కడ చిత్ర URL ను చేర్చండి", "Insert_Join_Code": "చేరండి కోడ్ చేరించండి", - "Invalid_code": "अमान्य कोड", + "Invalid_code": "చెల్లని కోడ్", "Invalid_or_expired_invite_token": "అమాయక లేదా అవధిచుక్తాయిన అమర్పు టోకెన్", "Invalid_server_version": "మీరు కనెక్ట్ చేయడానికి ప్రయాసిస్తున్న వర్క్‌స్పేస్ యొక్క ఒక అవసరం లేదు: {{currentVersion}}.\n\nమేము వినియోగించే అప్లికేషన్ యొక్క ఆవశ్యకానికి అయితే మేము అవసరం ఉన్న సంస్కరణం: {{minVersion}}", - "Invalid_URL": "अमान्य URL", + "Invalid_URL": "చెల్లని URL", "Invalid_workspace_URL": "చెల్లని వర్క్‌స్పేస్ URL", "Invite_Link": "ఆమంత్రణ లింక్", "Invite_users": "వాడికి ఆమంత్రణం పంపండి", @@ -395,17 +395,17 @@ "Join": "చేరండి", "Join_Code": "చేరండి కోడ్", "Joined": "చేరారు", - "Jump_to_last_message": "अंतिम संदेश पर जाएं", + "Jump_to_last_message": "చివరి సందేశానికి వెళ్ళండి", "Just_invited_people_can_access_this_channel": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ ఛానల్‌కు ప్రవేశించవచ్చు", "Just_invited_people_can_access_this_team": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ టీమ్‌కు ప్రవేశించవచ్చు", - "Label_Input_Two_Factor_Code": "कोड", - "Label_Input_Two_Factor_Password": "पासवर्ड", + "Label_Input_Two_Factor_Code": "కోడ్", + "Label_Input_Two_Factor_Password": "పాస్‌వర్డ్", "Language": "భాష", "last_message": "చివరి సందేశం", "Last_owner_team_room": "మీరు ఈ ఛానల్‌కు చివరి యజమాని. మీరు టీమ్ ను విడిచిపోతే, ఛానల్ టీమ్ లో ఉంటుంది కాని మీరు వాడు బాహ్యాంతరం నుండి అదనపుడు నిర్వహిస్తారు.", - "Last_updated": "अंतिम बार अपडेट किया गया", - "Last_updated_at": "अंतिम बार अद्यतन अपडेट किया गया", - "Last_updated_on": "आखिरी बार अपडेट किया गया:", + "Last_updated": "చివరిగా నవీకరించబడింది", + "Last_updated_at": "చివరిగా నవీకరించబడింది", + "Last_updated_on": "చివరిగా నవీకరించబడింది:", "last-owner-can-not-be-removed": "చివరి యజమానిని తీసివేయలేరు", "Leader": "నాయకుడు", "Learn_more": "మరింతగా అర్థం చేయండి", @@ -422,7 +422,7 @@ "Load_More": "మరిన్ని లోడ్ చేయండి", "Load_Newer": "కొత్తగా లోడ్ చేయండి", "Load_Older": "పాతకాలం లోడ్ చేయండి", - "Loading": "लोड हो रहा है", + "Loading": "లోడ్ అవుతోంది", "Local_authentication_auto_lock_1800": "30 నిమిషాల తరువాత", "Local_authentication_auto_lock_300": "5 నిమిషాల తరువాత", "Local_authentication_auto_lock_3600": "1 గంట తరువాత", @@ -447,19 +447,19 @@ "Logout_from_other_logged_in_locations": "ఇతర సెట్ అంగాల నుండి లాగౌట్ చేయండి", "Mark_as_unread": "అచ్చుకోండి", "Mark_as_unread_Info": "అచ్చుకోవడానికి సందేశాలు ఉన్నప్పుడు కొనసాగవచ్చు", - "Mark_read": "मार्क पढ़ें", - "Mark_unread": "अवाचन चिह्नित करें", - "Markdown_tools": "मार्कडाउन उपकरण", + "Mark_read": "చదివినట్లుగా గుర్తు పెట్టండి", + "Mark_unread": "చదవనిదిగా గుర్తు పెట్టండి", + "Markdown_tools": "మార్క్‌డౌన్ సాధనాలు", "Max_number_of_users_allowed_is_number": "అనుమతించబడిన వాడకు గరిష్ఠ సంఖ్య {{maxUsers}} ఉంది", "Max_number_of_uses": "ఉపయోగాల గరిష్ఠ సంఖ్య", - "Max_Repeating_Characters": "अधिकतम {{quantity}} दोहराए जाने वाले वर्ण", + "Max_Repeating_Characters": "గరిష్టంగా {{quantity}} పునరావృత అక్షరాలు", "Media_auto_download": "మీడియా ఆటో-డౌన్‌లోడ్", "Members": "సభ్యులు", "members": "సభ్యులు", "Mention_user": "उपयोगकर्ता का उल्लेख करें", "Mentions": "స్మరణలు", - "Mentions_With_@_Symbol": "@ चिह्न के साथ उल्लेख", - "Menu": "मेनू", + "Mentions_With_@_Symbol": "@ చిహ్నంతో పేర్కొనింపులు", + "Menu": "మెను", "Message": "సందేశం", "message": "సందేశం", "Message_actions": "సందేశ చర్యలు", @@ -493,8 +493,8 @@ "Message_starred": "సందేశం నకిలీయం చేసినది", "Message_translated_into_idiom": "సందేశం {{idiom}} భాషలోకి అనువదించబడింది", "Message_unstarred": "సందేశం నకిలీయం తీసివేయబడింది", - "Message_was_not_read": "संदेश नहीं पढ़ा गया था।", - "Message_was_read": "संदेश पढ़ा गया था।", + "Message_was_not_read": "సందేశం చదవలేదు", + "Message_was_read": "సందేశం చదవబడింది", "messages": "సందేశాలు", "Missed_call": "మిస్డ్ కాల్", "missing_room_e2ee_description": "గది కోసం ఎన్క్రిప్షన్ కీలు నవీకరించబడాలి, దీని జరగాలంటే మరొక గది సభ్యుడు ఆన్లైన్‌లో ఉండాలి.", @@ -513,7 +513,7 @@ "N_Selected_members": "{{n}} ఎంచుకోబడిన సభ్యులు", "N_users": "{{n}} వాడుకరు", "Name": "పేరు", - "Name_required": "नाम आवश्यक है।", + "Name_required": "పేరు అవసరం", "Never": "ఎప్పటికప్పుడు", "New_chat_transfer": "క్రొత్త చాట్ అంచనా: {{agent}} చాట్ను క్యూనుకు తిరిగి పంపించాడు", "New_Message": "కొత్త సందేశం", @@ -571,8 +571,8 @@ "Only_authorized_users_can_write_new_messages": "కేవలం అనుమతించబడిన వాడులు కొత్త సందేశాలను రాయగలరు", "Oops": "అయ్యో!", "Open_Livechats": "లైవ్చాట్‌లు ప్రగతిలో", - "Open_servers_history": "सर्वर इतिहास खोलें", - "Open_sidebar": "साइडबार खोलें", + "Open_servers_history": "సర్వర్ చరిత్రను తెరవండి", + "Open_sidebar": "సైడ్‌బార్ తెరవండి", "Open_your_authentication_app_and_enter_the_code": "మీ ప్రమాణీకరణ అనువాద అప్లికేషన్ తెరిచండి మరియు కోడ్ నమోదు చేయండి.", "OR": "లేదా", "OS": "ఆపరేటింగ్ సిస్టమ్", @@ -587,21 +587,19 @@ "Passcode_choose_title": "మీ కొత్త పాస్‌కోడ్ను ఎంచుకోండి", "Passcode_enter_title": "మీ పాస్‌కోడ్ నమోదు", "Password": "పాస్‌వర్డ్", - "Password_Tip_Error": "शर्त पूरी नहीं हुई।", - "Password_Tip_Success": "शर्त पूरी हुई।", - "Passwords_do_not_match": "पासवर्ड मेल नहीं खाते", - "Pause": "विराम", + "Password_Tip_Error": "షరతు నెరవేరలేదు", + "Password_Tip_Success": "షరతు నెరవేరింది", + "Passwords_do_not_match": "పాస్‌వర్డ్‌లు సరిపోలడం లేదు", + "Pause": "పాజ్ చేయండి", "Permalink_copied_to_clipboard": "పర్మాలింక్ కోపీ అయ్యింది!", "Person_or_channel": "వ్యక్తి లేదా చానల్", "Phone": "ఫోన్", - "Phone_state_permission_message": "మీరు ఇప్పటికే ఫోన్ లేదా VoIP కాల్‌లో ఉన్నారో లేదో Rocket.Chat గుర్తించడానికి ఇది సహాయపడుతుంది, తద్వారా ఇన్‌కమింగ్ కాల్‌లు సరిగ్గా నిర్వహించబడతాయి.", - "Phone_state_permission_title": "ఫోన్ స్థితి యాక్సెస్‌ను అనుమతించండి", "Pin": "పిన్", "Pinned": "పిన్ చేసినది", "Pinned_a_message": "ఒక సందేశాన్ని పించింది:", "Place_chat_on_hold": "చాట్‌ను ఆఫ్లోడ్ చేయండి", - "Play": "खेलें", - "Playback_speed": "प्लेबैक स्पीड", + "Play": "ప్లే చేయండి", + "Playback_speed": "ప్లేబ్యాక్ స్పీడ్", "Please_add_a_comment": "దయచేసి ఒక వ్యాఖ్యను చేర్చండి", "Please_enter_your_password": "దయచేసి మీ పాస్‌వర్డ్ నమోదు చేయండి", "Please_wait": "దయచేసి ఎక్కడ వుంటే ఉంచుకోండి.", @@ -610,18 +608,18 @@ "Presence_Cap_Warning_Title": "వాడకు స్థితి అస్థాయితంగా అచ్చుమాట", "Privacy_Policy": " గోప్యాచరణ విధానం", "Private": "ప్రైవేట్", - "Private_channel": "निजी चैनल", - "Private_team": "निजी टीम", - "Processing": "प्रोसेस कर रहा है।", + "Private_channel": "ప్రైవేట్ ఛానల్", + "Private_team": "ప్రైవేట్ టీమ్", + "Processing": "ప్రాసెస్ అవుతోంది", "Profile": "ప్రొఫైల్", "Profile_saved_successfully": "ప్రొఫైల్ యశస్విగా సేవ్ చేయబడింది!", "Public": "పబ్లిక్", - "Public_channel": "सार्वजनिक चैनल", + "Public_channel": "పబ్లిక్ ఛానల్", "Push_Notifications": "పుష్ నోటిఫికేషన్లు", "Push_Notifications_Alert_Info": "ఈ నోటిఫికేషన్లు మీకు అప్లికేషన్ ప్రారంభించలేకపోతే అందివేయబడింది", "Queued_chats": "క్యూ చాట్‌లు", "Quote": "ఉదాహరణ", - "React_with_emojjname": "{{emojiName}} के साथ प्रतिक्रिया दें", + "React_with_emojjname": "{{emojiName}} తో ప్రతిస్పందించండి", "Reactions_are_disabled": "ప్రతిక్రియలు నిషేధించబడినవి", "Reactions_are_enabled": "ప్రతిక్రియలు అనుమతించబడినవి", "Read_External_Permission": "మీడియా అనుమతి", @@ -633,8 +631,8 @@ "Receive_Group_Mentions_Info": "@all మరియు @here స్మరణలు స్వీకరించు", "Receive_Notification": "నోటిఫికేషన్ స్వీకరించండి", "Receive_notifications_from": "{{name}} నుండి నోటిఫికేషన్‌లు స్వీకరించండి", - "Recently_used": "हाल ही में उपयोग किया गया", - "Record_audio_message": "ऑडियो संदेश रिकॉर्ड करें", + "Recently_used": "ఇటీవల ఉపయోగించినవి", + "Record_audio_message": "ఆడియో సందేశాన్ని రికార్డ్ చేయండి", "Register": "నమోదు", "Registration_Succeeded": "నమోదు విజయవంతంగా చేయబడింది!", "reject": "తిరస్కరించు", @@ -642,7 +640,7 @@ "remove": "తొలగించండి", "Remove_from_room": "కొరకున్ని తీసివేయండి", "Remove_from_Team": "టీమ్ నుండి తీసివేయండి", - "Remove_from_workspace_history": "कार्यस्थान इतिहास से निकालें।", + "Remove_from_workspace_history": "వర్క్‌స్పేస్ చరిత్ర నుండి తీసివేయండి", "Remove_Member": "సభ్యుడను తీసివేయండి", "Remove_Team_Room_Warning": "మీరు ఈ ఛానల్‌ను టీమ్ నుండి తీసివేయాలా?", "Remove_User_Team_Channels": "యూజర్ ను తీసివేయబడే ఛానల్‌లను ఎంచుకోండి.", @@ -657,7 +655,7 @@ "Reply_in_direct_message": "నిర్దేశ సందేశంలో ప్రతిస్థానించండి", "Reply_in_Thread": "థ్రెడ్లో సమాధానం", "Report": "నివేదించండి", - "Report_reason_required": "कारण आवश्यक है।", + "Report_reason_required": "కారణం అవసరం", "Required": "అవసరమైనది", "Resend": "మళ్ళీ పంపించు", "RESET": "రీసెట్", @@ -673,7 +671,7 @@ "Review_app_title": "ఈ యాప్ నేను ఆనందిస్తున్నానా?", "Review_app_unable_store": "{{store}} తెరవలేకపోయింది", "Review_app_yes": "అవును!", - "Review_message": "समीक्षा संदेश", + "Review_message": "సందేశాన్ని సమీక్షించండి", "Review_this_app": "ఈ యాప్‌ను సమీక్షించండి", "Rocket_Chat_Documentation": "Rocket.Chat డాక్యుమెంటేషన్", "Roles": "పాత్రలు", @@ -692,7 +690,7 @@ "room_set_read_only_permission": "గదిని కేవలం చదవడానికి రూపొందించారు", "room_unarchived": "అభిలోఖిత నుండి తీసుకొనబడింది", "room-name-already-exists": "కొనసాగించబడిన కొత్త కొరకు", - "Rooms_With_#_Symbol": "# चिन्ह वाले कमरे", + "Rooms_With_#_Symbol": "# చిహ్నంతో గదులు", "SAVE": "భద్రపరచు", "Save": "భద్రపరచండి", "Save_Changes": "మార్చిన మార్పులను భద్రపరచండి", @@ -722,7 +720,7 @@ "Select_a_User": "ఒక వాడుకరిని ఎంచుకోండి", "Select_an_option": "ఒక ఐచేస్టు ఎంచుకోండి", "Select_channels_to_delete": "ఇది పునఃస్థాపించబడదు. మీరు టీమ్‌ను తొలగిస్తే, అన్ని చాట్ విషయాలు మరియు కాన్ఫిగరేషన్ తొలగిపోవడం అంటే. \n\nమీరు తొలగించలేని ఛానల్‌లను ఎంచుకోండి. కాని మీరు భర్తికి రానివారింటిగా అందుబాటులో ఉంటారు. ప్రజా ఛానల్‌లు ఇక కూడా ప్రజాకు కలిగి ఉండవచ్చు.", - "Select_emoji_reaction": "प्रतिक्रिया के लिए इमोजी चुनें", + "Select_emoji_reaction": "ఎమోజీ ప్రతిస్పందనను ఎంచుకోండి", "Select_Members": "సభ్యులను ఎంచుకోండి", "Select_Server": "పనితనం ఎంచుకోండి", "Select_tags": "ట్యాగ్‌లను ఎంచుకోండి", @@ -732,7 +730,7 @@ "Select_Uploaded_Image": "ఎంపడిన చిత్రాన్ని ఎంచుకోండి", "Select_Users": "వాడుకరులను ఎంచుకోండి", "Send": "పంపించండి", - "Send_audio_message": "ऑडियो संदेश भेजें", + "Send_audio_message": "ఆడియో సందేశాన్ని పంపండి", "Send_crash_report": "క్రాష్ నివేదించండి", "Send_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపండి", "Send_message": "సందేశాన్ని పంపండి", @@ -741,7 +739,7 @@ "Sending_to": "పంపిస్తోంది", "Server": "పనితనం", "Server_version": "పనితనం: {{version}}", - "Set_new_password": "नया पासवर्ड सेट करें", + "Set_new_password": "కొత్త పాస్‌వర్డ్ సెట్ చేయండి", "Set_username_subtitle": "ఇతరులకు మీరు సందేశాల్లో మీరుని స్మరించడానికి వాడుకరి పేరు ఉపయోగిస్తారు", "Settings": "సెట్టింగులు", "Settings_succesfully_changed": "సెట్టింగులను విజయవంతంగా మార్చారు!", @@ -753,10 +751,10 @@ "Show_badge_for_mentions": "ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించు", "Show_badge_for_mentions_Info": "కేవలం సర్వర్ల ఉపయోగించిన ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించాలి", "Show_more": "మరింతగా చూపండి..", - "Show_Password": "पासवर्ड दिखाएं", + "Show_Password": "పాస్‌వర్డ్ చూపించు", "Sign_Up": "నమోదు చేయండి", "Skip": "స్కిప్", - "Smileys_and_people": "स्माइली और लोग", + "Smileys_and_people": "స్మైలీలు మరియు వ్యక్తులు", "Sort_by": "సార్టు చేయండి", "Sound": "ధ్వని", "Star": "స్టార్", @@ -766,11 +764,11 @@ "Started_call": "{{userBy}} ద్వారా కాల్ ప్రారంభించబడింది", "Started_discussion": "ఒక చర్చను ప్రారంభించారు:", "Status_saved_successfully": "స్థితి విజయవంతంగా భద్రపరచబడింది!", - "Status_text_limit_exceeded": "{{सीमा}} अक्षर की सीमा पार हो गई", + "Status_text_limit_exceeded": "{{limit}} అక్షరాల పరిమితి మించిపోయింది", "Supported_versions_expired_description": "వార్క్‌స్పేస్ యాడ్మిన్ మొదటిగా మొబైల్ మరియు డెస్క్టాప్ యాప్‌ల నుండి ప్రవేశాన్ని మళ్లీ ప్రారంభించడానికి వార్క్‌స్పేస్‌ను నవీకరించాలి.", "Supported_versions_expired_title": "{{workspace_name}} అసమర్థిత రాకెట్.చాట్ ఒరిజినల్ వెర్షన్‌ను పరిచయించిపోయింది", "Supported_versions_warning_update_required": "నవీకరణ అవసరం", - "Symbols": "प्रतीकಗಳು", + "Symbols": "చిహ్నాలు", "Table": "పటం", "Tags": "ట్యాగ్‌లు", "Take_a_photo": "ఫోటో తీసుకో", @@ -787,7 +785,7 @@ "team-name-already-exists": "అంగీకరించిన పేరుతో టీమ్ ఇప్పటికే ఉంది", "Teams": "టీమ్‌లు", "Terms_of_Service": "సేవల షరతులు", - "The_autocomplete_options_are_available_above_the_input_composer": "इनपुट कंपोजर के ऊपर ऑटोकम्प्लीट विकल्प उपलब्ध हैं।", + "The_autocomplete_options_are_available_above_the_input_composer": "ఇన్‌పుట్ కంపోజర్ పైన ఆటోకంప్లీట్ ఎంపికలు అందుబాటులో ఉన్నాయి", "The_room_does_not_exist": "ఈ కమ్మిట్ ఉండదు లేదా మీకు ప్రవేశ అనుమతి ఉంది", "The_user_will_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", "The_user_will_be_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", @@ -802,34 +800,33 @@ "Threads_displaying_all": "అన్నింటిని ప్రదర్శిస్తుంది", "Threads_displaying_following": "అనుసరిస్తుంది", "Threads_displaying_unread": "చదవనిచ్చినది ప్రదర్శిస్తుంది", - "Threads_dm_unread": "थ्रेड्स, {{unread}} अपठित, प्रत्यक्ष उल्लेख", - "Threads_group_unread": "थ्रेड्स, {{unread}} अपठित, समूह उल्लेख", - "Threads_unread": "थ्रेड्स, {{unread}} अपठित", + "Threads_dm_unread": "థ్రెడ్స్, {{unread}} చదవనిది, ప్రత్యక్ష పేర్కొనింపు", + "Threads_group_unread": "థ్రెడ్స్, {{unread}} చదవనిది, గ్రూప్ పేర్కొనింపు", + "Threads_unread": "థ్రెడ్స్, {{unread}} చదవనిది", "Timezone": "సమయ మండలం", "To_download": "డౌన్‌లోడ్ చేయడానికి", - "Toggle_call_controls": "కాల్ నియంత్రణలను టోగల్ చేయండి", "Token_expired": "మీ సెషన్ అవుతోంది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", "Topic": "విషయం", "topic": "విషయం", "totp-invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లదు", "Translate": "అనువాదం", - "Travel_and_places": "यात्रा और स्थान", + "Travel_and_places": "ప్రయాణం మరియు స్థలాలు", "Try_again": "ప్రయత్నించండి", "Turn_camera_off": "కెమెరాను ఆపివెయ్యి", "Turn_camera_on": "కెమెరాను ఆన్ చేయండి", - "Turn_mic_off": "മൈക്ക് ഓഫ് ചെയ്യുക", + "Turn_mic_off": "మైక్ ఆఫ్ చేయండి", "Turn_mic_on": "మైక్ ఆన్ చేయి", "Two_Factor_Authentication": "రెండు అంశ ప్రామాణీకరణ", - "Two_Factor_Success_message": "द्वि-घटक प्रमाणीकरण कोड भेज दिया गया है! कृपया अपना ईमेल जाँचें।", + "Two_Factor_Success_message": "రెండు-అంశాల ప్రమాణీకరణ కోడ్ పంపబడింది! దయచేసి మీ ఇమెయిల్‌ను తనిఖీ చేయండి", "Type_message": "సందేశాన్ని టైప్ చేయండి", "Types": "రకాలు", "UNARCHIVE": "అనార్కైవ్", "unarchive": "అనార్కైవ్", "unauthorized": "అనుమతి లేదు", - "Unfavorite": "अनफेवरेट", - "Unfollow_thread": "थ्रेड को अनफ़ॉलो करें", + "Unfavorite": "ఇష్టం నుండి తీసివేయండి", + "Unfollow_thread": "థ్రెడ్‌ను అనుసరించడం నిలిపివేయండి", "Unfollowed_thread": "అన్‌ఫాలో థ్రెడ్", - "Unhide": "छिपाएं नहीं", + "Unhide": "దాచడం నిలిపివేయండి", "Unignore": "పరిహరించాలి", "Unmute": "ఆధ్వర్యపరచించండి", "unmuted": "ఆధ్వర్యపరచించబడింది", @@ -880,7 +877,6 @@ "video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", "View_Original": "అసలు చూడండి", "View_Thread": "థ్రెడ్‌ను వీక్షించండి", - "VoIP_Call_Issue": "కాల్‌లో సమస్య ఉంది, తర్వాత మళ్లీ ప్రయత్నించండి.", "Wait_activation_warning": "మీరు లాగిన్ చేయడానికి మొదటి స్థాయింలో మీ ఖాతాను ఒక అడ్మినిస్ట్రేటర్ మానవారం ప్రత్యామ్నాయం చేయాలి.", "Waiting_for_answer": "జవాబు కోసం ఎదురు ఉంది", "Waiting_for_network": "నెట్వర్క్ కోసం వేచి ఉండి...", @@ -927,4 +923,4 @@ "Your_password_is": "మీ సంకేతపదం", "Your_Password_Must_Have": "మీ పాస్‌వర్డ్ తప్పనిసరిగా ఉండాలి:", "Your_workspace": "మీ వర్క్‌స్పేస్" -} +} \ No newline at end of file From 19ab42a8f48ff84e5e7e9564fab8cf261b9286d4 Mon Sep 17 00:00:00 2001 From: diegolmello Date: Thu, 9 Apr 2026 16:58:05 +0000 Subject: [PATCH 20/24] action: organized translations --- app/i18n/locales/te-IN.json | 1848 +++++++++++++++++------------------ 1 file changed, 924 insertions(+), 924 deletions(-) diff --git a/app/i18n/locales/te-IN.json b/app/i18n/locales/te-IN.json index 61602a65aac..1de4179998e 100644 --- a/app/i18n/locales/te-IN.json +++ b/app/i18n/locales/te-IN.json @@ -1,926 +1,926 @@ { - "__count__empty_room_will_be_removed_automatically": "{{count}} ఖాళీ కొరకు స్వయంగా తొలగిపోతాయి.", - "__count__empty_rooms_will_be_removed_automatically": "{{count}} ఖాళీ కొరకులు స్వయంగా తొలగిపోతాయి.", - "1_person_reacted": "1 వ్యక్తి ప్రతిక్రియించింది", - "A_new_owner_will_be_assigned_automatically_to__count__room": "కొత్త యజమాని స్వయంగా నియమించబడుతుంది {{count}} అంగడాయినందు.", - "A_new_owner_will_be_assigned_automatically_to__count__rooms": "కొత్త యజమాని స్వయంగా నియమించబడుతుంది {{count}} అంగడులకు.", - "A11y_appearance_dialog_require_manual_dismissal": "మానవీయంగా మూసివేయాలి", - "A11y_appearance_dialogs": "డైలాగ్లు", - "A11y_appearance_show_alerts_as": "అలర్ట్‌లను ఇలా చూపించండి", - "A11y_appearance_toast_dismissed_automatically": "స్వయంచాలకంగా మూసివేయబడుతుంది", - "A11y_appearance_toasts": "టోస్ట్ నోటిఫికేషన్లు", - "A11y_in_app_notification": "{{name}} నుండి కొత్త సందేశం: {{message}}", - "A11y_incoming_call_dismiss": "ఖారు చేయండి", - "A11y_incoming_call_swipe_down_to_view_options": "క్రిందికి స్వైప్ చేయి, పరామితులను చూడండి", - "ABAC_disabled_action_reason": "ABAC-నిర్వహించబడే గదులలో అందుబాటులో లేదు", - "ABAC_managed": "ABAC నిర్వహించబడింది", - "ABAC_managed_description": "అట్రిబ్యూట్ ఆధారిత యాక్సెస్ నియంత్రిత గదులకు అనుకూలమైన వినియోగదారులు మాత్రమే ప్రాప్యతను కలిగి ఉంటారు. లక్షణాలు గది ప్రాప్యతను నిర్ణయిస్తాయి.", - "abac_removed_user_from_the_room": "ABAC ద్వారా తొలగించబడింది", - "ABAC_room_attributes": "గది లక్షణాలు", - "accept": "అంగీకరించు", - "Accessibility": "ప్రాప్యత", - "Accessibility_and_Appearance": "ప్రాప్యత మరియు రూపకల్పన", - "Accessibility_statement": "పేరుబట్టి వివరణ", - "Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "వాడాకు 'కూడా చానల్‌కు పంపండి' పనికి అనుమతిస్తుంది", - "Actions": "చర్యలు", - "Activate_to_select_server": "సర్వర్‌ను ఎంచుకోవడానికి యాక్టివేట్ చేయండి", - "Activate_to_select_server_Available_actions_delete": "సర్వర్‌ను ఎంచుకోవడానికి ఆಕ್ಟివేట్ చేయండి. లభ్యమయ్యే చర్యలు: {{delete}}", - "Activity": "చట్టం", - "Add_Channel_to_Team": "ఛానల్‌ను టీమ్‌కు జోడించండి", - "Add_Existing": "ఇప్పటికే ఉన్నవిని జోడించండి", - "Add_Existing_Channel": "ఇప్పటికే ఉన్న ఛానల్‌ను జోడించండి", - "Add_Server": "వర్క్‌స్పేస్ చేర్చు", - "Add_server": "వర్క్‌స్పేస్ జోడించండి", - "Add_users": "వాడికి వాడుకలు చేర్చండి", - "added__roomName__to_this_team": "#{{roomName}} ని ఈ టీమ్‌కు చేర్చారు", - "Added__username__to_this_team": "@{{user_added}} ని ఈ టీమ్‌కు చేర్చారు", - "Admin_Panel": "యజమాని పేనల్", - "admin-no-active-video-conf-provider-body": "ఈ వార్క్‌స్పేస్‌లో ఇది అందుబాటు చేసేందుకు కాన్ఫరెన్స్ కాల్స్ కాన్ఫిగర్ చేసుకోవడానికి వార్క్‌స్పేస్ యాడ్మిన్ అవసరం.", - "admin-no-active-video-conf-provider-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", - "admin-no-videoconf-provider-app-body": "వార్క్‌స్పేస్ యొక్క మార్కెట్‌లో కాన్ఫరెన్స్ కాల్ యాప్స్ అందుబాటు.", - "admin-no-videoconf-provider-app-header": "కాన్ఫరెన్స్ కాల్ యాప్స్ చేరబడలేదు", - "admin-video-conf-provider-not-configured-body": "ఈ వార్క్‌స్పేస్‌లో ఇది అందుబాటు చేసేందుకు కాన్ఫరెన్స్ కాల్స్ కాన్ఫిగర్ చేసుకోవడానికి వార్క్‌స్పేస్ యాడ్మిన్ అవసరం.", - "admin-video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", - "After_seconds_set_by_admin": "అడ్మిన్ ద్వారా సెట్ చేయబడిన {{seconds}} సెకన్లలో", - "Agent": "ఏజెంట్", - "AirGapped_workspace_read_only_description": "నిర్వహకులు దీన్ని ఇంటర్నెట్‌తో కలుపుకోవడం లేదా ప్రీమియం ప్రణాళికకు మెరుగుపరచడం ద్వారా పూర్తి ఫంక్షనాలిటీని పునఃస్థాపించవచ్చు.", - "AirGapped_workspace_read_only_share_extension_title": "జోడించడం నిలిపివేయబడింది, ఎందుకంటే పనికోసం చదివే స్ధితిలో ఉంది.", - "AirGapped_workspace_read_only_title": "అయోమయ స్థితిలో ఉన్న పనికోసం.", - "Alert": "హెచ్చరిక", - "alert": "హెచ్చరిక", - "alerts": "హెచ్చరికలు", - "All": "అన్ని", - "All_Messages": "అన్ని సందేశాలు", - "All_users_in_the_channel_can_write_new_messages": "చానల్లో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", - "All_users_in_the_team_can_write_new_messages": "జట్టులో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", - "Allow_Reactions": "ప్రతిక్రియలను అనుమతించండి", - "Already_have_an_account": "మీకు ఇప్పటికే ఖాతా ఉందా?", - "Also_send_thread_message_to_channel_behavior": "చానల్‌కు థ్రెడ్ సందేశాన్ని కూడా పంపండి", - "and": "మరియు", - "and_N_more": "మరింత {{count}}", - "Animals_and_nature": "జంతువులు మరియు ప్రకృతి", - "Announcement": "ప్రకటన", - "announcement": "ప్రకటన", - "Apply_Certificate": "సర్టిఫికేట్‌ని వర్తింపజేయండి", - "ARCHIVE": "ఆర్కైవ్", - "archive": "ఆర్కైవ్", - "are_typing": "రాయడం", - "Are_you_sure_question_mark": "మీరు ఖచ్చితంగా ఉన్నారా?", - "Are_you_sure_you_want_to_delete_your_account": "మీరు మీ ఖాతాను తొలగించాలా?", - "Are_you_sure_you_want_to_leave_the_room": "మీరు ఖచ్చితంగా కొరకుని వదిలిపోతున్నారా {{room}}?", - "At_Least_1_Lowercase_Letter": "కనీసం 1 చిన్న అక్షరం", - "At_Least_1_Number": "కనీసం 1 సంఖ్య", - "At_Least_1_Symbol": "కనీసం 1 చిహ్నం", - "At_Least_1_Uppercase_Letter": "కనీసం 1 పెద్ద అక్షరం", - "At_Least_Characters": "కనీసం {{quantity}} అక్షరాలు", - "At_Most_24_Characters": "గరిష్టంగా 24 అక్షరాలు", - "At_Most_Characters": "గరిష్టంగా {{quantity}} అక్షరాలు", - "Attention": "శ్రద్ధ", - "Audio": "ఆడియో", - "Auto_Translate": "స్వయం అనువదించండి", - "Auto-join": "స్వయం-చేరండి", - "Automatic": "స్వయంగా", - "Autoplay_gifs": "GIF లను స్వయంచాలకంగా ప్లే చేయండి", - "Avatar": "అవతార్", - "Avatar_changed_successfully": "అవతార్ విజయవంతంగా మారింది!", - "Avatar_default_photo": "{{username}} కోసం డిఫాల్ట్ అవతార్", - "Avatar_Photo": "{{username}} యొక్క అవతార్", - "Avatar_Url": "అవతార్ URL", - "Avatars": "అవతార్లు", - "Away": "దూరంగా", - "Back": "వెనుకకు", - "Back_to_keyboard": "కీబోర్డ్‌కు తిరిగి వెళ్ళండి", - "Bio": "జీవిత చరిత్ర", - "Black": "నలుపు", - "Broadcast": "బ్రాడ్‌కాస్ట్", - "Broadcast_hint": "కొనసాగించబడిన వాడాలు కొత్త సందేశాలను రాయగలరు, కాని ఇతర వాడాలు ఉత్తరం ఇవ్వగలరు", - "Browser": "బ్రౌజర్", - "Busy": "వ్యస్తంగా", - "Call": "కాల్", - "Call_again": "కాల్ మళ్ళీ", - "Call_already_ended": "కాల్ ఇప్పటివరకు ముగింపుగా ఉంది!", - "Call_back": "కాల్ బ్యాక్", - "Call_ended": "కాల్ ముగియింది", - "Call_ended_bold": "*వాయిస్ కాల్ ముగిసింది*", - "Call_failed_bold": "*వాయిస్ కాల్ విఫలమైంది*", - "Call_issue": "కాల్ సమస్య", - "Call_not_answered_bold": "*వాయిస్ కాల్ జవాబు ఇవ్వబడలేదు*", - "Call_ongoing": "కాల్ ప్రవర్తిస్తోంది", - "Call_rejected": "కాల్ తిరస్కరించబడింది", - "Call_room_name": "{{roomName}} కు కాల్ చేయండి", - "Call_started": "కాల్ ప్రారంభించబడింది", - "Call_transferred_bold": "*వాయిస్ కాల్ బదిలీ చేయబడింది*", - "Call_was_canceled_before_being_answered": "కాల్ సమాధానం ఇవ్వబడకముందే రద్దు చేయబడింది", - "Call_was_not_answered": "కాల్ సమాధానించబడలేదు", - "Calling": "కాల్ చేస్తోంది", - "Cancel": "రద్దు", - "Cancel_and_delete_recording": "రికార్డింగ్‌ను రద్దు చేసి తొలగించండి", - "Cancel_editing": "సవరించడానికి రద్దు చేయి", - "Cancel_recording": "రికార్డింగ్‌ను రద్దు చేయి", - "Cancel_upload": "అప్‌లోడ్ రద్దు చేయండి", - "Canned_Responses": "క్యాన్డ్ రిస్పాన్సెలు", - "Cannot_delete": "తొలగించలేరు", - "Cannot_leave": "విడిచలేరు", - "Cannot_remove": "తీసివేయలేరు", - "Certificate_password": "సర్టిఫికేట్ పాస్‌వర్డ్", - "Change_Language": "భాషను మార్చు", - "Change_language_loading": "భాషను మార్చాడు.", - "Change_my_password": "నా పాస్‌వర్డ్ మార్చండి", - "changed_room_announcement": "గది ప్రకటనను మార్చారు: {{announcement}}", - "changed_room_description": "గది వివరాన్ని మార్చారు: {{description}}", - "changing_avatar": "అవతార్ మార్చడం", - "Channel": "చానల్", - "Channel_hint_encrypted": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ చానల్. ఎన్క్రిప్టెడ్ చానల్‌తో శోధన పనులు పనిస్తాయి మరియు అధిసూచనలు సందేశాల విషయాన్ని చూపవచ్చు.", - "Channel_hint_encrypted_not_available": "పబ్లిక్ చానల్‌కు అందుబాటు కాదు", - "Channel_hint_not_read_only": "చానల్‌లో ఉన్న అన్ని వాడాలు కొత్త సందేశాలను రాయగలరు", - "Channel_hint_private": "కేవలం ఆహ్వానిత వాడాలు ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", - "Channel_hint_public": "ప్రతిపక్షం ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", - "Channel_Name": "ఛానల్ పేరు", - "Channel_name_already_taken": "ఛానల్ పేరు ఇప్పటికే తీసుకోబడింది", - "Channel_name_required": "ఛానల్ పేరు అవసరం", - "Channels": "ఛానల్లు", - "Chat_closed_by_agent": "ఏజెంట్ ద్వారా చాట్ మూసబడింది", - "Chat_is_on_hold": "ఇది చాట్ అనాకరణం కారణంగా ఆఫ్‌లోడ్ ఉంది", - "Chat_started": "చాట్ ప్రారంభించబడింది", - "Chats": "చాట్లు", - "Check_canned_responses": "క్యాన్డ్ రిస్పాన్సెలను తనిఖీ చేయండి.", - "Choose": "ఎంచుకోండి", - "Choose_file": "ఫైల్ ఎంచుకో", - "Choose_from_library": "లైబ్రరీ నుండి ఎంచుకో", - "Choose_where_you_want_links_be_opened": "లింకులను ఎక్కువ ఉంచాలా ఎంచుకో", - "Clear": "క్లియర్", - "Clear_cache": "స్థానిక పనివెచ్చే క్యాష్ నిలిపివేయండి", - "Clear_cache_loading": "క్యాష్‌ను నిలిపివేస్తోంది.", - "Click_to_join": "చేరాలనుకోండి!", - "Close": "మూసివేయి", - "Close_Chat": "చాట్‌ను మూసివేయండి", - "Code_or_password_invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లనిది", - "Code_required": "కోడ్ అవసరం", - "Collaborative": "సహయోగం", - "Condensed": "సంక్షేపించబడిన", - "conference_call": "సభా కాల్", - "Confirm": "ఖచ్చితంగా చెప్పు", - "Confirm_password": "పాస్‌వర్డ్‌ను నిర్ధారించండి", - "Confirmation": "అనుమతి", - "Connect": "కనెక్ట్ చేయండి", - "Connect_to_server_as_user": "{{serverUrl}} కు {{user}} గా కనెక్ట్ అవ్వండి", - "Connecting": "కనెక్ట్ అవుతోంది...", - "Contact_us": "మాకు సంప్రదించండి", - "Contact_your_server_admin": "మీ పనిచేసే అడ్మిన్‌ని సంప్రదించండి.", - "Content": "కంటెంట్", - "Continue": "కొనసాగించు", - "Continue_with": "మరింతగా చేయండి", - "Conversation": "సంభాషణ", - "Conversation_closed": "సంభాషణ మూసబడింది", - "Convert": "మార్చు", - "Convert_ASCII_to_emoji": "ASCII ను ఎమోజీకి మార్చండి", - "Convert_to_Channel": "చానల్ కి మార్చండి", - "Convert_to_Team": "టీమ్‌కు మార్చు", - "Convert_to_Team_Warning": "మీరు ఈ ఛానల్‌ను టీమ్‌కు మార్చుతున్నారు. అన్ని సభ్యులు ఉంటారు.", - "Converted__roomName__to_a_channel": "#{{roomName}} ని చానల్ గా మార్చారు", - "Converted__roomName__to_a_team": "#{{roomName}} ని ఒక టీమ్ గా మార్చారు", - "Converting_Team_To_Channel": "టీమ్ ను చానల్‌కు మార్చేందుకు", - "Copied_to_clipboard": "క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది!", - "Copy": "నకలు", - "Crash_report_disclaimer": "మేము మీ చాట్ సామగ్రిని ట్రాక్ చేసాము. క్రాష్ రిపోర్ట్ మరియు అనలిటిక్స్ ఈవెంట్లు మాకు సమస్తమైన సమాచారం మాత్రమే కలిగి ఉన్నాయి, అని గుర్తించడానికి మరియు సమస్యలను పరిష్కరించడానికి మాత్రమే.", - "Create": "సృష్టించండి", - "Create_a_new_workspace": "కొత్త పనివెచ్చేలా సృష్టించండి", - "Create_account": "ఖాతా సృష్టించండి", - "Create_Channel": "ఛానల్ సృష్టించండి", - "Create_Direct_Messages": "సరాసరి సందేశాలను సృష్టించండి", - "Create_Discussion": "చర్చ సృష్టించండి", - "Create_New": "కొత్తగా సృష్టించండి", - "Create_new_channel_team_dm_discussion": "కొత్త ఛానల్, టీమ్, ప్రత్యక్ష సందేశం లేదా చర్చను సృష్టించండి", - "Create_Team": "టీమ్ సృష్టించండి", - "Created_snippet": "ఒక స్నిపెట్ సృష్టించబడింది", - "creating_channel": "ఛానల్ సృష్టించడం", - "creating_discussion": "సంవాదాలను సృష్టిస్తోంది", - "creating_invite": "ఆహ్వానాన్ని సృష్టించడం", - "creating_team": "టీమ్ సృష్టిస్తోంది", - "Current_password": "ప్రస్తుత పాస్‌వర్డ్", - "Current_Status": "ప్రస్తుత స్థితి", - "Custom": "అనుకూలీకరించు", - "Dark": "గాఢంగా", - "Dark_level": "గాఢంగా స్థాయి", - "decline": "నిరాకరించు", - "Default": "స్వచ్ఛందం", - "Default_browser": "స్వచ్ఛంద బ్రౌజర్", - "Defined_user_as_role": "{{user}} నియమాలను {{role}} గా ప్రవృత్తించారు", - "DELETE": "తొలగించండి", - "Delete": "తొలగించండి", - "delete": "తొలగించండి", - "Delete_Account": "ఖాతాను తొలగించండి", - "Delete_Account_confirm": "అవును, తొలగించండి", - "Delete_image": "చిత్రం తొలగించు", - "Delete_my_account": "నా ఖాతాను తొలగిస్తోంది", - "Delete_recording": "రికార్డింగ్ తొలగించండి", - "Delete_Room_Warning": "ఒక కొరకుని మొత్తం పోస్ట్ చేసిన అన్ని సందేశాలను తొలగించడం. ఇది పునఃప్రారంభించబడదు.", - "Delete_Team": "టీమ్ ను తొలగిస్తోంది", - "Deleted__roomName__": "#{{roomName}} ని తొలగించారు", - "Deleted_The_Room_Successfully": "కింద కానున్న కుటుంబం విజయవంతంగా తొలగించబడింది", - "Deleted_The_Team_Successfully": "టీమ్ విజయవంతంగా తొలగించబడింది", - "Deleting_a_user_will_delete_all_messages": "ఒక వాడిని తొలగించడం ఆ వాడిని సహితం అన్ని సందేశాలను, కొరకులను మరియు జట్టులను తొలగించాలను. ఇది పునఃప్రారంభించబడదు.", - "Deleting_account": "ఖాతా తొలగిస్తోంది", - "deleting_room": "కొరకుని తొలగించడం", - "deleting_team": "టీమ్ ను తొలగిస్తోంది", - "Department": "విభాగం", - "Description": "వివరణ", - "description": "వివరణ", - "Direct_message": "సరిహద్దు సందేశం", - "Direct_Messages": "సరాసరి సందేశాలు", - "Directory": "డైరెక్టరీ", - "Disable_writing_in_room": "{{roomName}}లో రచన అనుమతించకోండి", - "Disabled_E2E_Encryption_for_this_room": "ఈ రూమ్‌కు E2E ఎన్క్రిప్షన్ అచ్చుమాటయింది", - "Discard": "తిరిగి వాడు", - "Discard_changes": "మార్పులను తిరిగి వాడండి?", - "Discard_changes_description": "మీరు సేవించకపోతే అన్ని మార్పులు కోలుక పడతాయి.", - "Discussion": "చర్చ", - "Discussion_Desc": "చర్చలు ఛానల్ లేదా టీమ్ లోపల ఒక నిర్దిష్ట విషయం గురించి వేరు సంభాషణలను అనుమతిస్తాయి, అక్కడ ఏ వర్క్‌స్పేస్ సభ్యుడు కూడా చేర్చవచ్చు", - "Discussion_name": "చర్చ పేరు", - "Discussion_name_required": "చర్చ పేరు అవసరం", - "Discussions": "చర్చలు", - "Display": "ప్రదర్శించు", - "Do_it_later": "తర్వాత చెయ్యి", - "Do_you_have_a_certificate": "ఈ వర్క్‌స్పేస్‌కు సర్టిఫికేట్ ఉందా?", - "Do_you_have_an_account": "మీకు ఖాతా ఉందా?", - "Do_you_really_want_to_key_this_room_question_mark": "మీరు ఖచ్చితంగా {{key}} ఈ కొరకుని తెచ్చాలా?", - "Dont_activate": "ఇప్పుడే సక్రియపరచడం లేదు", - "Dont_Have_An_Account": "మీకు ఖాతా లేదా?", - "Downloaded_file": "అప్లోడు చేసిన ఫైలు", - "E2E_Encryption": "E2E ఎన్క్రిప్షన్", - "E2E_encryption_change_password_confirmation": "అవును, అది మార్చండి", - "E2E_encryption_change_password_description": "మీరు ఇప్పుడు ఎన్క్రిప్టెడ్ ప్రైవేట్ గ్రూప్లు మరియు డైరెక్ట్ సందేశాలను సృష్టించవచ్చు. మీరు ప్రేపను ఎన్క్రిప్టెడ్ చేయవచ్చు. \nఇది ఎండ్ టు ఎండ్ ఎన్క్రిప్షన్, కానీ మీ సందేశాలను ఎన్కోడ్/డీకోడ్ చేయడానికి కీను వర్క్‌స్పేస్‌లో భద్రపరచడానికి సేవ్ కానీ కారణం లేదు. ఈ కారణంగా, మీరు మీ పాస్‌వర్డ్ను బాగా దానిని సేవ్ చేయాలి. మీరు వాటిని ఉపయోగించాలని మీరు ఇతర పరికరాలలో ప్రవేశించినప్పుడు అవసానంగా అంగీకరించాలి.", - "E2E_encryption_change_password_error": "E2E కీ పాస్‌వర్డ్ను మార్చడంలో దోషం!", - "E2E_encryption_change_password_message": "దయచేసి ఇతర స్థానాలలో దానిని బాగా భద్రపరచండి.", - "E2E_encryption_change_password_success": "E2E కీ పాస్‌వర్డ్ విజయవంతంగా మారింది!", - "E2E_encryption_change_password_title": "ఎన్క్రిప్షన్ పాస్‌వర్డ్ను మార్చండి", - "E2E_encryption_reset_button": "రీసెట్ E2E కీ", - "E2E_encryption_reset_confirmation": "అవును, అది రీసెట్ చేయండి", - "E2E_encryption_reset_description": "ఈ ఐచ్ఛికం మీ ప్రస్తుత E2E కీను తొలగించి, మీరు లాగౌట్ అవుతారు. \nమీరు మళ్ళీ లాగిన్ చేయడానికి, Rocket.Chat మీకు కొత్త కీని సృష్టించి అంగీకరించండి మరియు మీరు ఒకటి లేక ఏదో మార్గం సభ్యులు ఉన్న ఎన్క్రిప్టెడ్ రూమ్‌కు ప్రవేశం పొందవచ్చు. \nE2E ఎన్క్రిప్షన్ స్వభావం కారణంగా, Rocket.Chat ఎన్క్రిప్టెడ్ రూమ్‌కు ప్రవేశం పొందలేకపోతే ప్రవేశం పొందగలదు.", - "E2E_encryption_reset_error": "E2E కీని రీసెట్ చేయడంలో దోషం!", - "E2E_encryption_reset_message": "మీరు లాగౌట్ అవుతారు.", - "E2E_encryption_reset_title": "రీసెట్ E2E కీ", - "E2E_How_It_Works_info1": "మీరు ఇప్పటికే ఎన్క్రిప్టెడ్ ప్రైవేట్ గ్రూప్స్ మరియు సరాసరి సందేశాలను సృష్టించవచ్చు. మీరు అస్తిత్వం కలిగిన ప్రైవేట్ గ్రూప్లను లేదా డైరెక్ట్ సందేశాలను కూడా ఎన్క్రిప్టెడ్ చేయవచ్చు.", - "E2E_How_It_Works_info2": "ఇది * ఎండ్ టు ఎండ్ ఎన్క్రిప్షన్ * కాదా, మీ సందేశాలను ఎన్కోడ్ / డీకోడ్ చేయడానికి కీలు అని ఉండదు. ఈ కారణంతో * మీరు ఇక్కడికి ఉపయోగించే మూలం ఇప్పటివరకు ప్రదానించిపెట్టబడదు.", - "E2E_How_It_Works_info3": "మీరు ముందు నడుపదిని కొత్తగా ఉంచవచ్చు, అది స్వయంగా ఒక E2E పాస్‌వర్డ్ యాటోమేటిక్‌గా సృష్టించబడుతుంది.", - "E2E_How_It_Works_info4": "మీరు అనుమతి పొందకపోతే, మీరు ప్రస్తుతం ఉపయోగించిన E2E పాస్‌వర్డ్ నుండి ఎంక్రిప్షన్ కీకి కొత్త పాస్‌వర్డ్ సెట్ చేయవచ్చు.", - "E2EE_password": "E2EE పాస్వర్డ్", - "Edit": "సవరించు", - "Edit_Avatar": "అవతార్‌ను సంపాదించండి", - "Edit_Invite": "ఆహ్వానాన్ని సవరించు", - "Edit_Room_Photo": "గది ఫోటోను సవరించండి", - "Edit_Status": "స్థితిని సవరించు", - "Email": "ఇమెయిల్", - "Email_associated_with_another_user": "ఇమెయిల్ మరొక వాడుకరితో సంబంధం కలిగి ఉంది", - "Email_must_be_a_valid_email": "ఇమెయిల్ చెల్లుబాటులో ఉండాలి", - "Email_Notification_Mode_All": "ప్రతి ఉల్లేఖం / DM", - "Email_Notification_Mode_Disabled": "అచ్చుకోవడం లేదు", - "Email_required": "ఇమెయిల్ అవసరం", - "Emoji_selector": "ఎమోజీ ఎంపికదారు", - "Empty": "ఖాళీ", - "Enable_Auto_Translate": "స్వయం-అనువదించడం అనుమతించండి", - "Enable_encryption_button_label": "గూఢీకరణను ప్రారంభించు", - "Enable_Message_Parser": "సందేశ పార్సర్‌ను సక్రియం చేయండి", - "Enable_writing_in_room": "{{roomName}}లో రచన అనుమతించండి", - "Enabled_E2E_Encryption_for_this_room": "ఈ రూమ్‌కు E2E ఎన్క్రిప్షన్ ప్రారంభించబడింది", - "Encrypted": "ఎన్క్రిప్టెడ్", - "Encrypted_message": "ఎన్క్రిప్టెడ్ సందేశం", - "encrypted_room_description": "ప్రాప్యతకు మీ అంతిమ నుండి అంతిమ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను నమోదు చేయండి.", - "encrypted_room_title": "{{room_name}} ఎన్క్రిప్ట్ చేయబడింది", - "Encryption_error_desc": "మీ ఎన్‌క్రిప్షన్ కీను డికోడ్ చేయడం సాధ్యం కాలేదు", - "Encryption_error_title": "తప్పు పాస్‌వర్డ్", - "End_to_end_encrypted_room": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ రూం", - "Enter_E2EE_Password": "E2EE పాస్‌వర్డ్ నమోదు చేయండి", - "Enter_E2EE_Password_description": "ఎన్‌క్రిప్ట్ చేయబడిన సందేశాలను వీక్షించడానికి మరియు పంపడానికి మీ E2EE పాస్‌వర్డ్‌ని నమోదు చెయ్యండి.\n\nప్రతీ పరికరంలో పాస్‌వర్డ్‌ని నమోదు చేయాల్సి ఉంటుంది.", - "Enter_manually": "మాన్యువల్‌గా నమోదు చేయండి", - "Error_Download_file": "ఫైల్ డౌన్‌లోడ్ చేస్తున్నప్పుడు తప్పిబాటు", - "Error_incorrect_password": "తప్పు పాస్‌వర్డ్", - "Error_prefix": "తప్పు: {{message}}", - "Error_uploading": "అప్‌లోడ్ లోపం", - "error-action-not-allowed": "{{action}} అనుమతించబడినది కాదు", - "error-avatar-invalid-url": "చెల్లింపు అవతార URL: {{url}}", - "error-duplicate-channel-name": "{{room_name}} పేరుతో చానల్ ఉంది", - "error-email-send-failed": "ఇమెయిల్ పంపడంలో లోపం: {{message}}", - "error-file-too-large": "ఫైలు అత్యంత పెద్దది", - "error-init-video-conf": "వీడియో కాల్‌ను ప్రారంభించడంలో లోపం", - "error-invalid-email": "చెల్లని ఇమెయిల్ {{email}}", - "error-invalid-file-type": "చెల్లని ఫైలు రకం", - "error-invalid-password": "చెల్లని పాస్‌వర్డ్", - "error-invalid-room-name": "{{room_name}} చెల్లని కొరకు పేరు", - "error-invitation-reply-action": "ఆహ్వాన ప్రతిస్పందనను పంపించడంలో లోపం", - "error-not-allowed": "అనుమతి లేదు", - "error-not-permission-to-upload-file": "మీకు ఫైలులను అప్‌లోడ్ చేయడానికి అనుమతి లేదు", - "error-save-image": "చిత్రం సేవ్ చేయడంలో లోపం", - "error-save-video": "వీడియోను సేవ్ చేయడంలో లోపం", - "error-team-creation": "తప్పిదమైన టీమ్ సృష్టి", - "error-too-many-requests": "లోపం, చాలా అనురోధాలు. దయచేసి నిమిషాల ముందు వేగంగా చేసేందుకు ప్రయాసించండి. మీరు మరికొన్ని సెకన్లు కావాలనుకుంటే {{seconds}} సెకన్లు వేచి ఉంచాలి.", - "error-you-are-last-owner": "మీరు చివరి యజమాని. కొన్ని క్షణాలకు అనుమతించిన తరువాత గమనించండి.", - "Everyone_can_access_this_channel": "ప్రతిఒక్కరూ ఈ ఛానల్ను ప్రవేశించవచ్చు", - "Everyone_can_access_this_team": "ప్రతిఒక్కరూ ఈ టీమ్‌ను ప్రవేశించవచ్చు", - "Expanded": "విస్తృతం", - "Expiration_Days": "కాలాంతరం (రోజులు)", - "Favorite": "पसंदीदा", - "Favorites": "ఇష్టాలు", - "Federation_Matrix_room_description_disabled": "ఈ వర్క్‌స్పేస్‌లో ఫెడరేషన్ ప్రస్తుతం నిలిపివేయబడింది", - "Federation_Matrix_room_description_invalid_version": "ఈ గది పాత ఫెడరేషన్ వెర్షన్‌తో సృష్టించబడింది మరియు నిరవధికంగా నిరోధించబడింది.", - "Federation_Matrix_room_description_missing_module": "ఫెడరేటెడ్ గదులలో చేరడం ఒక ప్రీమియం ఫీచర్", - "Fetch_image_from_URL": "URL నుండి చిత్రాన్ని పొందండి", - "Field_are_required": "{{field}} అవసరం", - "Field_is_required": "{{field}} అవసరం", - "File_description": "పిలుస్తూనే వివరణ", - "Files": "పిలుస్తూనే", - "FileUpload_Error": "ఫైల్ అప్లోడ్ లోపం", - "Filter": "फिल्टर", - "Finish_recording": "రికార్డింగ్ ముగించండి", - "Flags": "ఫ్లాగ్‌లు", - "Follow_thread": "థ్రెడ్‌ను అనుసరించండి", - "Following": "అనుసరించుతుంది", - "Following_thread": "అనుసరించుకోవడానికి థ్రెడ్", - "Food_and_drink": "ఆహారం మరియు పానీయాలు", - "For_your_security_you_must_enter_your_current_password_to_continue": "మీ సురక్షత కోసం, కొనసాగించడానికి మీరు మీ ఖాతా పాస్‌వర్డ్‌ను నమోదు చేయాలి", - "Forgot_E2EE_password": "E2EE పాస్‌వర్డ్ మర్చిపోయారా?", - "Forgot_password": "మీ పాస్‌వర్డ్ మరచిపోయారా?", - "Forgot_password_If_this_email_is_registered": "ఈ ఇ-మెయిల్ నమోదు చేసినట్లు, మేము మీ పాస్‌వర్డ్‌ను రీసెట్ చేయడానికి సూచనలు పంపబడిపోతాము. మీరు చాలా తక్కువగా ఒక ఇ-మెయిల్ లభిస్తే, దయచేసి మరియువకాయ ప్రయాసించండి.", - "Forward": "అగ్రగామించండి", - "Forward_Chat": "చాట్‌ను అగ్రగామించండి", - "Forward_message": "సందేశాన్ని ముందుకు పంపు", - "Forward_to_department": "శాఖకు అగ్రగామించండి", - "Forward_to_user": "వాడికి అగ్రగామించండి", - "Full_name": "పూర్తి పేరు", - "Full_table": "పూర్తి పటం చూడండి కొరకు క్లిక్ చేయండి", - "Generate_New_Link": "కొత్త లింక్‌ను రూపొందించండి", - "Generate_new_password": "కొత్త పాస్‌వర్డ్ రూపొందించండి", - "Get_help": "సహాయం పొందండి", - "Get_link": "లింక్ పొందండి", - "Glossary_of_simplified_terms": "సరళీకృత పదాల పదకోశం", - "Group_by": "గ్రూప్ చేయండి", - "Has_left_the_team": "టీమ్ ను వదిలిపోయారు", - "Help": "సహాయం", - "Hide": "దాచు", - "Hide_notification": "నోటిఫికేషన్ దాచు", - "Hide_Password": "పాస్‌వర్డ్ దాచు", - "Hide_System_Messages": "వ్యవస్థ సందేశాలను దాచండి", - "Hide_type_messages": "{{type}} సందేశాలను దాచండి", - "How_It_Works": "ఇది ఎలా పని చేస్తుంది", - "I_Saved_My_E2E_Password": "నా E2E పాస్‌వర్డ్ నేను భద్రంగా ఉంచాను", - "Ignore": "పరిహరించాలి", - "Images": "చిత్రాలు", - "Images_uploaded": "చిత్రాలు అప్‌లోడ్ అయ్యాయి", - "In_app": "యాప్‌లో", - "In_App_Alert_info": "ఈ నోటిఫికేషన్‌లు {{app}} తెరిచి ఉన్నప్పుడు మీకు పంపబడతాయి", - "In_App_And_Desktop": "యాప్ మరియు డెస్క్టాప్", - "In_App_and_Desktop_Alert_info": "యాప్ తెరాసినప్పటిని తెరాచినప్పటిని మేరకు పొడిస్తుంది, మరియు డెస్క్టాప్‌లో నోటిఫికేషన్‌ను ప్రదర్శిస్తుంది", - "In_App_Notification": "యాప్‌లోని నోటిఫికేషన్", - "Incoming_call_from": "నుండి రాబోయే కాల్", - "insert_Avatar_URL": "ఇక్కడ చిత్ర URL ను చేర్చండి", - "Insert_Join_Code": "చేరండి కోడ్ చేరించండి", - "Invalid_code": "చెల్లని కోడ్", - "Invalid_or_expired_invite_token": "అమాయక లేదా అవధిచుక్తాయిన అమర్పు టోకెన్", - "Invalid_server_version": "మీరు కనెక్ట్ చేయడానికి ప్రయాసిస్తున్న వర్క్‌స్పేస్ యొక్క ఒక అవసరం లేదు: {{currentVersion}}.\n\nమేము వినియోగించే అప్లికేషన్ యొక్క ఆవశ్యకానికి అయితే మేము అవసరం ఉన్న సంస్కరణం: {{minVersion}}", - "Invalid_URL": "చెల్లని URL", - "Invalid_workspace_URL": "చెల్లని వర్క్‌స్పేస్ URL", - "Invite_Link": "ఆమంత్రణ లింక్", - "Invite_users": "వాడికి ఆమంత్రణం పంపండి", - "Invited": "ఆహ్వానించబడింది", - "invited_room_description_channel": "మీరు ఆహ్వానించబడ్డారు", - "invited_room_description_dm": "మీరు సంభాషణ కలిగి ఉండడానికి ఆహ్వానించబడ్డారు", - "invited_room_title_channel": "{{room_name}} లో చేరడానికి ఆహ్వానం", - "invited_room_title_dm": "సందేశ అభ్యర్థన", - "IP": "IP", - "is_typing": "టైపు చేస్తోంది", - "Jitsi_authentication_before_making_calls": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి.", - "Jitsi_authentication_before_making_calls_admin": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల లోపాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి. ప్రాధికృత వీడియో కాల్లకు ఇన్‌ఫార్మేషన్ను నవీకరించడానికి, మీరు ప్రాధికృత యాప్‌ను నవీకరించవచ్చు.", - "Jitsi_authentication_before_making_calls_ask_admin": "Jitsi మరియు అదికాకాలే అవసరాలిగా ఉన్నాయని నమ్ముకున్నదిని వేటికి అడగించడానికి, వార్క్‌స్పేస్ యాడ్మిన్ సహాయానికి అడగండి.", - "Jitsi_may_require_authentication": "Jitsi పరిశోధన అవసరం ఉండవచ్చు", - "Join": "చేరండి", - "Join_Code": "చేరండి కోడ్", - "Joined": "చేరారు", - "Jump_to_last_message": "చివరి సందేశానికి వెళ్ళండి", - "Just_invited_people_can_access_this_channel": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ ఛానల్‌కు ప్రవేశించవచ్చు", - "Just_invited_people_can_access_this_team": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ టీమ్‌కు ప్రవేశించవచ్చు", - "Label_Input_Two_Factor_Code": "కోడ్", - "Label_Input_Two_Factor_Password": "పాస్‌వర్డ్", - "Language": "భాష", - "last_message": "చివరి సందేశం", - "Last_owner_team_room": "మీరు ఈ ఛానల్‌కు చివరి యజమాని. మీరు టీమ్ ను విడిచిపోతే, ఛానల్ టీమ్ లో ఉంటుంది కాని మీరు వాడు బాహ్యాంతరం నుండి అదనపుడు నిర్వహిస్తారు.", - "Last_updated": "చివరిగా నవీకరించబడింది", - "Last_updated_at": "చివరిగా నవీకరించబడింది", - "Last_updated_on": "చివరిగా నవీకరించబడింది:", - "last-owner-can-not-be-removed": "చివరి యజమానిని తీసివేయలేరు", - "Leader": "నాయకుడు", - "Learn_more": "మరింతగా అర్థం చేయండి", - "Leave": "వదిలిపోకూడని", - "leave": "వదిలిపోకూడని", - "Leave_Team": "టీమ్ ను విడిచిపోతున్నారు", - "leaving_room": "గడిచిపోవడం", - "Left_The_Room_Successfully": "విజయవంతంగా కింద రాను", - "Left_The_Team_Successfully": "సఫలంగా టీమ్ ను విడిచారు", - "Legal": "చట్టం", - "License": "లైసెన్స్", - "Light": "లైట్", - "Livechat_transfer_return_to_the_queue": "చాట్ను క్యూను తిరిగి ఇస్తే", - "Load_More": "మరిన్ని లోడ్ చేయండి", - "Load_Newer": "కొత్తగా లోడ్ చేయండి", - "Load_Older": "పాతకాలం లోడ్ చేయండి", - "Loading": "లోడ్ అవుతోంది", - "Local_authentication_auto_lock_1800": "30 నిమిషాల తరువాత", - "Local_authentication_auto_lock_300": "5 నిమిషాల తరువాత", - "Local_authentication_auto_lock_3600": "1 గంట తరువాత", - "Local_authentication_auto_lock_60": "1 నిమిషాల తరువాత", - "Local_authentication_auto_lock_900": "15 నిమిషాల తరువాత", - "Local_authentication_biometry_fallback": "పాస్‌కోడ్ ఉపయోగించండి", - "Local_authentication_biometry_title": "ధ్యానం పెట్టినవారు", - "Local_authentication_change_passcode": "పాస్‌కోడ్ను మార్చండి", - "Local_authentication_facial_recognition": "ముఖంలో గుర్తింపు", - "Local_authentication_fingerprint": "వంగ్ల గుర్తింపు", - "Local_authentication_info": "గమనించండి: మీరు పాస్‌కోడ్ను మరియుప్పటికేవి మరోసారి విసర్జించాలిపోతుంది, కాబట్టి అప్లికేషన్ నుంచి తొలగించాలిపోతుంది.", - "Local_authentication_unlock_option": "పాస్‌కోడ్ తో అన్లాక్ చేయండి", - "Local_authentication_unlock_with_label": "{{label}} తో అన్లాక్ చేయండి", - "Log_analytics_events": "లాగ్ విశ్లేషణ ఈవెంట్లు", - "Logged_out_by_server": "మీరు పనితనం ద్వారా లాగౌట్ చేయబడింది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", - "Logged_out_of_other_clients_successfully": "ఇతర గ్రాహకాల నుండి యథార్థంగా లాగౌట్ అవుతున్నారు", - "Logging_out": "లాగౌట్ అవుతోంది.", - "Login": "లాగిన్", - "Login_error": "మీ రుచియవి తిరిగి చూడబడలేదు! దయచేసి మళ్ళీ ప్రయత్నించండి.", - "Logout": "లాగౌట్", - "Logout_failed": "లాగౌట్ అయిపోయింది!", - "Logout_from_other_logged_in_locations": "ఇతర సెట్ అంగాల నుండి లాగౌట్ చేయండి", - "Mark_as_unread": "అచ్చుకోండి", - "Mark_as_unread_Info": "అచ్చుకోవడానికి సందేశాలు ఉన్నప్పుడు కొనసాగవచ్చు", - "Mark_read": "చదివినట్లుగా గుర్తు పెట్టండి", - "Mark_unread": "చదవనిదిగా గుర్తు పెట్టండి", - "Markdown_tools": "మార్క్‌డౌన్ సాధనాలు", - "Max_number_of_users_allowed_is_number": "అనుమతించబడిన వాడకు గరిష్ఠ సంఖ్య {{maxUsers}} ఉంది", - "Max_number_of_uses": "ఉపయోగాల గరిష్ఠ సంఖ్య", - "Max_Repeating_Characters": "గరిష్టంగా {{quantity}} పునరావృత అక్షరాలు", - "Media_auto_download": "మీడియా ఆటో-డౌన్‌లోడ్", - "Members": "సభ్యులు", - "members": "సభ్యులు", - "Mention_user": "उपयोगकर्ता का उल्लेख करें", - "Mentions": "స్మరణలు", - "Mentions_With_@_Symbol": "@ చిహ్నంతో పేర్కొనింపులు", - "Menu": "మెను", - "Message": "సందేశం", - "message": "సందేశం", - "Message_actions": "సందేశ చర్యలు", - "Message_composer_Send_to_channel": "ఛానల్కు పంపండి", - "Message_has_been_shared": "సందేశం పంచుకుంది", - "Message_HideType_added_user_to_team": "\"యూజర్ టీమ్‌కు చేర్చబడింది\" సందేశాలను దాచు", - "Message_HideType_au": "వాడు చేర్చబడినాడు", - "Message_HideType_mute_unmute": "వాడు ధ్వనిని నిలిపించాడు / తిరగాడు", - "Message_HideType_r": "ఛానల్ పేరు మారింది", - "Message_HideType_removed_user_from_team": "\"యూజర్ టీమ్ నుండి తీసివేయబడింది\" సందేశాలను దాచు", - "Message_HideType_rm": "సందేశం తీసిపోయింది", - "Message_HideType_room_archived": "రూమ్ ఆర్చైవ్ అయ్యింది", - "Message_HideType_room_unarchived": "రూమ్ ఆర్చైవ్ కాదు", - "Message_HideType_ru": "వాడు తీసిపోయినాడు", - "Message_HideType_subscription_role_added": "వ్యాసానికి హక్కు స్థాపించబడింది", - "Message_HideType_subscription_role_removed": "హక్కు లేకపోతే", - "Message_HideType_uj": "వాడు చేరిపోయినాడు", - "Message_HideType_ujt": "\"యూజర్ జాయిండ్ టీమ్‌లో\" సందేశాలను దాచు", - "Message_HideType_ul": "వాడు విడిచిపోయినాడు", - "Message_HideType_ult": "\"యూజర్ లేవేల్ టీమ్‌ను విడిచబడింది\" సందేశాలను దాచు", - "Message_HideType_user_added_room_to_team": "\"యూజర్ రూమ్ టీమ్‌కు చేర్చబడింది\" సందేశాలను దాచు", - "Message_HideType_user_converted_to_channel": "\"యూజర్ టీమ్ ను చానల్ కి మార్చారు\" సందేశాలను దాచు", - "Message_HideType_user_converted_to_team": "\"యూజర్ చానల్ ను టీమ్‌కు మార్చారు\" సందేశాలను దాచు", - "Message_HideType_user_deleted_room_from_team": "\"యూజర్ రూమ్ ని టీమ్ నుండి తొలగించారు\" సందేశాలను దాచు", - "Message_HideType_user_removed_room_from_team": "\"యూజర్ రూమ్ ని టీమ్ నుండి తీసివేయబడింది\" సందేశాలను దాచు", - "Message_HideType_ut": "వాడు చర్చలో చేరిపోయినాడు", - "Message_HideType_wm": "స్వాగతం", - "Message_Ignored": "సందేశం పరిహరించబడింది. ప్రదర్శించడానికి ప్రాణాలు నొక్కండి.", - "Message_removed": "సందేశం తీసివేయబడింది", - "Message_Reported": "సందేశం నివేదిస్తున్నాం", - "Message_starred": "సందేశం నకిలీయం చేసినది", - "Message_translated_into_idiom": "సందేశం {{idiom}} భాషలోకి అనువదించబడింది", - "Message_unstarred": "సందేశం నకిలీయం తీసివేయబడింది", - "Message_was_not_read": "సందేశం చదవలేదు", - "Message_was_read": "సందేశం చదవబడింది", - "messages": "సందేశాలు", - "Missed_call": "మిస్డ్ కాల్", - "missing_room_e2ee_description": "గది కోసం ఎన్క్రిప్షన్ కీలు నవీకరించబడాలి, దీని జరగాలంటే మరొక గది సభ్యుడు ఆన్లైన్‌లో ఉండాలి.", - "missing_room_e2ee_title": "కొన్ని క్షణాల్లో తిరిగి తనిఖీ చేయండి", - "Moderator": "మాడరేటర్", - "More": "अधिक", - "move": "తరలించుకో", - "Move_Channel_Paragraph": "ఛానల్ని టీమ్ కంటెక్స్ట్‌లో ప్రవేశించటం అనేది ఈ ఛానల్లను టీమ్‌కు చేర్చడం అనుకూలంగా ఉండండి, కాని టీమ్ సభ్యులు కాని తమ ఛానల్ యొక్క సభ్యులవిలేనంటే, కాని ఛానల్ సభ్యులకు ఇది అందిస్తారు. \n\nఅన్ని ఛానల్ నిర్వహణ అంగీకరించిన ఈ ఛానల్ యొక్క యజమానులు బాహ్యాంతరం నిర్వహిస్తారు. \n\nటీమ్ సభ్యులు మరియు టీమ్ యజమానులు, ఛానల్ సభ్యులు కాని దరారుగా ఛానల్ యొక్క కంటెంట్‌కు ప్రవేశించలేరు. \n\nదయచేసి గమనించండి టీమ్ యజమానులు సభ్యులను ఛానల్ నుండి తీసివేయడానికి అనుమతి ఉంది.", - "Move_to_Team": "టీమ్‌కు తరలించండి", - "Move_to_Team_Warning": "ఈ ప్రవృత్తి గురించి ముందుకు చదవిన నిర్దేశాలను చదవాలనుకుంటే, మీరు ఇప్పుడు ఈ ఛానల్‌ను ఎంచుకోవచ్చారా?", - "moving_channel_to_team": "ఛానల్ టీమ్‌కు తరలించండి", - "Mute": "నిషేధించు", - "muted": "నిషేధించబడింది", - "N_channels": "{{n}} ఛానల్‌లు", - "N_people_reacted": "{{n}} వ్యక్తులు ప్రతిసారి ప్రతిక్రియించారు", - "N_Selected_members": "{{n}} ఎంచుకోబడిన సభ్యులు", - "N_users": "{{n}} వాడుకరు", - "Name": "పేరు", - "Name_required": "పేరు అవసరం", - "Never": "ఎప్పటికప్పుడు", - "New_chat_transfer": "క్రొత్త చాట్ అంచనా: {{agent}} చాట్ను క్యూనుకు తిరిగి పంపించాడు", - "New_Message": "కొత్త సందేశం", - "New_Password": "కొత్త పాస్‌వర్డ్", - "Next": "తరువాత", - "Nickname": "ఉపనామం", - "No_available_agents_to_transfer": "స్థితిలో ఉన్న ఎజెంట్లు లేవు", - "No_canned_responses": "యావత్తులు క్యాన్డ్ రిస్పాన్సెలు లేవు", - "No_channels_in_team": "ఈ చర్చలో చానల్స్ లేవు", - "No_discussions": "సంవాదాలు లేవు", - "No_files": "ఏ కింద లేవు", - "No_label_provided": "{{label}} అంగడా ఇవ్వలేదు.", - "No_limit": "అమర్పు లేదు", - "No_match_found": "సరిపోలి అంశం కనబడలేదు.", - "No_members_found": "సభ్యులు దొరకలేదు", - "No_mentioned_messages": "స్మరణలేని సందేశాలు", - "No_Message": "సందేశం లేదు", - "No_messages_yet": "ఇంకా సందేశాలు లేవు", - "No_pinned_messages": "పిన్ చేసిన సందేశాలు లేవు", - "No_Reactions": "ప్రతిక్రియలేవు", - "No_Read_Receipts": "చదవడానికి సాక్షాత్కారాలేవు", - "No_results_found": "ఫలితాలు దొరకలేదు", - "No_rooms_found": "గదులు కనుగొనబడలేదు", - "No_starred_messages": "నకిలీయం చేసిన సందేశాలు లేవు", - "No_threads": "ఏ థ్రెడ్స్ లేవు", - "No_threads_following": "మీరు అనుసరిస్తున్న ఎవరూ లేవు", - "No_threads_unread": "చదవనిచ్చిన ఏ థ్రెడ్స్ లేవు", - "no-active-video-conf-provider-body": "వార్క్‌స్పేస్ యాడ్మిన్ మొదలు కాన్ఫరెన్స్ కాల్ విశేషాలు ఏర్పాట్లో ఉన్నాయి.", - "no-active-video-conf-provider-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", - "no-videoconf-provider-app-body": "వార్క్‌స్పేస్ అడ్మిన్ ద్వారా రాకెట్.చాట్ మార్కెట్‌లో కాన్ఫరెన్స్ కాల్ యాప్స్ ఇన్స్టాల్ చేయవచ్చు.", - "no-videoconf-provider-app-header": "కాన్ఫరెన్స్ కాల్ అంగడి లేదు", - "Not_RC_Server": "మీ వర్క్‌స్పేస్ అడ్మిన్‌ను సంప్రదించండి లేదా Rocket.Chat వర్క్‌స్పేస్ ఆహ్వానానికి మీ ఇమెయిల్ ఇన్‌బాక్స్‌ని శోధించండి.", - "Nothing": "ఏదో కాదు", - "Nothing_to_save": "ఉంది ఏమి సేవ్ చేయాలేదు!", - "Notification_Preferences": "నోటిఫికేషన్ అభిరుచులు", - "Notifications": "నోటిఫికేషన్‌లు", - "Notifications_vibrate_from_new_messages": "కొత్త సందేశాల కోసం వైబ్రేట్", - "Notify_active_in_this_room": "ఈ గదిలో సక్రియంగా ఉన్న వాడులను నవోదయించు", - "Notify_all_in_this_room": "ఈ గదిలో అన్నివారినీ నవోదయించు", - "Objects": "वस्तुएँ", - "Off": "ఆఫ్", - "Offline": "ऑफ़लाइन", - "Omnichannel": "ఒమ్నిచానెల్", - "Omnichannel_enable_alert": "మీరు ఒమ్నిచానెల్‌లో అందుబాటులేదు. మీరు అందుబాటునారా?", - "Omnichannel_on_hold_chat_resumed": "ఆఫ్‌లోడ్ లోని చాట్ పునఃప్రారంభించబడింది: {{comment}}", - "Omnichannel_placed_chat_on_hold": "చాట్ ఆఫ్‌లోడ్: {{comment}}", - "Omnichannel_queue": "ఆమ్నిచానల్ క్యూ", - "On_hold_Livechats": "ఆఫ్‌లోడ్ లోని లైవ్చాట్‌లు", - "Onboarding_agree_terms": "కొనసాగండి, మీరు రాకెట్.చాట్ అంగీకరిస్తున్నారు", - "Onboarding_less_options": "తక్కువ ఎంపికలు", - "Onboarding_more_options": "మరికొన్ని ఎంపికలు", - "Onboarding_subtitle": "దల సహయాకాంక్ష", - "One_result_found": "ఒక ఫలితం కనుగొనబడింది।", - "Online": "ఆన్‌లైన్", - "Only_authorized_users_can_write_new_messages": "కేవలం అనుమతించబడిన వాడులు కొత్త సందేశాలను రాయగలరు", - "Oops": "అయ్యో!", - "Open_Livechats": "లైవ్చాట్‌లు ప్రగతిలో", - "Open_servers_history": "సర్వర్ చరిత్రను తెరవండి", - "Open_sidebar": "సైడ్‌బార్ తెరవండి", - "Open_your_authentication_app_and_enter_the_code": "మీ ప్రమాణీకరణ అనువాద అప్లికేషన్ తెరిచండి మరియు కోడ్ నమోదు చేయండి.", - "OR": "లేదా", - "OS": "ఆపరేటింగ్ సిస్టమ్", - "Overwrites_the_server_configuration_and_use_room_config": "సర్వర్ ఆకృతిని మరియు గది ఆకృతిని విధానం చేయండి", - "Owner": "యజమాని", - "Parent_channel_or_group": "ప్రధాన ఛానల్ లేదా గ్రూప్", - "Passcode_app_locked_subtitle": "{{timeLeft}} సెకన్లలో మళ్ళీ ప్రయాసం చేయండి", - "Passcode_app_locked_title": "అనువాదం చేయబడింది", - "Passcode_choose_confirm_title": "మీ కొత్త పాస్‌కోడ్ను ధృవీకరించండి", - "Passcode_choose_error": "పాస్‌కోడ్‌లు సరిపోలడం లేదు. మళ్ళీ ప్రయాసం చేయండి.", - "Passcode_choose_force_set": "అడ్మిన్ ద్వారా అవసానంగా అవసానంగా సెట్ చేయబడింది", - "Passcode_choose_title": "మీ కొత్త పాస్‌కోడ్ను ఎంచుకోండి", - "Passcode_enter_title": "మీ పాస్‌కోడ్ నమోదు", - "Password": "పాస్‌వర్డ్", - "Password_Tip_Error": "షరతు నెరవేరలేదు", - "Password_Tip_Success": "షరతు నెరవేరింది", - "Passwords_do_not_match": "పాస్‌వర్డ్‌లు సరిపోలడం లేదు", - "Pause": "పాజ్ చేయండి", - "Permalink_copied_to_clipboard": "పర్మాలింక్ కోపీ అయ్యింది!", - "Person_or_channel": "వ్యక్తి లేదా చానల్", - "Phone": "ఫోన్", - "Pin": "పిన్", - "Pinned": "పిన్ చేసినది", - "Pinned_a_message": "ఒక సందేశాన్ని పించింది:", - "Place_chat_on_hold": "చాట్‌ను ఆఫ్లోడ్ చేయండి", - "Play": "ప్లే చేయండి", - "Playback_speed": "ప్లేబ్యాక్ స్పీడ్", - "Please_add_a_comment": "దయచేసి ఒక వ్యాఖ్యను చేర్చండి", - "Please_enter_your_password": "దయచేసి మీ పాస్‌వర్డ్ నమోదు చేయండి", - "Please_wait": "దయచేసి ఎక్కడ వుంటే ఉంచుకోండి.", - "Preferences": "అభిరుచులు", - "Presence_Cap_Warning_Description": "కార్యాలయంలో కనెక్షన్లు అంతర్గత వాడాల పరిమాణానికి పరిమితమయినది, కాబట్టి వాడాల స్థితిని చరిత్రానుబంధించడానికి సేవ అచ్చుమాటవంతం. ఇది కొన్నిసేపటికీ వార్క్‌స్పేస్ అమర్చాయిన అంగుళాలో మాన్యువల్ చేయబడవచ్చు.", - "Presence_Cap_Warning_Title": "వాడకు స్థితి అస్థాయితంగా అచ్చుమాట", - "Privacy_Policy": " గోప్యాచరణ విధానం", - "Private": "ప్రైవేట్", - "Private_channel": "ప్రైవేట్ ఛానల్", - "Private_team": "ప్రైవేట్ టీమ్", - "Processing": "ప్రాసెస్ అవుతోంది", - "Profile": "ప్రొఫైల్", - "Profile_saved_successfully": "ప్రొఫైల్ యశస్విగా సేవ్ చేయబడింది!", - "Public": "పబ్లిక్", - "Public_channel": "పబ్లిక్ ఛానల్", - "Push_Notifications": "పుష్ నోటిఫికేషన్లు", - "Push_Notifications_Alert_Info": "ఈ నోటిఫికేషన్లు మీకు అప్లికేషన్ ప్రారంభించలేకపోతే అందివేయబడింది", - "Queued_chats": "క్యూ చాట్‌లు", - "Quote": "ఉదాహరణ", - "React_with_emojjname": "{{emojiName}} తో ప్రతిస్పందించండి", - "Reactions_are_disabled": "ప్రతిక్రియలు నిషేధించబడినవి", - "Reactions_are_enabled": "ప్రతిక్రియలు అనుమతించబడినవి", - "Read_External_Permission": "మీడియా అనుమతి", - "Read_External_Permission_Message": "రాకెట్.చాట్ మీ పరికరాల్లో ఫోటోలను, మీడియాను మరియు ఫైళ్లను ప్రవేశించాలి", - "Read_Only": "కేవలం చదవడానికి", - "Read_only_hint": "ఛానెల్ యజమానులు మాత్రమే క్రొత్త సందేశాలను పంపగలరు", - "Read_Receipt": "చదవడానికి సాక్షాత్కారం", - "Receive_Group_Mentions": "గ్రూప్ స్మరణలు స్వీకరించు", - "Receive_Group_Mentions_Info": "@all మరియు @here స్మరణలు స్వీకరించు", - "Receive_Notification": "నోటిఫికేషన్ స్వీకరించండి", - "Receive_notifications_from": "{{name}} నుండి నోటిఫికేషన్‌లు స్వీకరించండి", - "Recently_used": "ఇటీవల ఉపయోగించినవి", - "Record_audio_message": "ఆడియో సందేశాన్ని రికార్డ్ చేయండి", - "Register": "నమోదు", - "Registration_Succeeded": "నమోదు విజయవంతంగా చేయబడింది!", - "reject": "తిరస్కరించు", - "Remove": "తొలగించండి", - "remove": "తొలగించండి", - "Remove_from_room": "కొరకున్ని తీసివేయండి", - "Remove_from_Team": "టీమ్ నుండి తీసివేయండి", - "Remove_from_workspace_history": "వర్క్‌స్పేస్ చరిత్ర నుండి తీసివేయండి", - "Remove_Member": "సభ్యుడను తీసివేయండి", - "Remove_Team_Room_Warning": "మీరు ఈ ఛానల్‌ను టీమ్ నుండి తీసివేయాలా?", - "Remove_User_Team_Channels": "యూజర్ ను తీసివేయబడే ఛానల్‌లను ఎంచుకోండి.", - "Removed__roomName__from_the_team": "#{{roomName}} ని ఈ టీమ్ నుండి తీసివేసారు", - "Removed__username__from_the_team": "@{{userRemoved}} ని ఈ టీమ్ నుండి తీసివేసారు", - "Removed_user_as_role": "{{user}} నియమాలను {{role}} గించినారు", - "removing_team": "టీమ్ నుండి తీసివేస్తోంది", - "Removing_user_from_this_team": "మీరు {{user}} ను ఈ టీమ్ నుండి తీసివేస్తున్నారు", - "replies": "సమాధానాలు", - "Reply": "ప్రతిసారించండి", - "reply": "సమాధానం", - "Reply_in_direct_message": "నిర్దేశ సందేశంలో ప్రతిస్థానించండి", - "Reply_in_Thread": "థ్రెడ్లో సమాధానం", - "Report": "నివేదించండి", - "Report_reason_required": "కారణం అవసరం", - "Required": "అవసరమైనది", - "Resend": "మళ్ళీ పంపించు", - "RESET": "రీసెట్", - "Reset_E2EE_Password": "E2EE పాస్‌వర్డ్‌ను పునస్ధాపించండి", - "Reset_E2EE_Password_Description": "రిసెట్ చేయడం ద్వారా మీరు లాగ్ అవుట్ అవుతారు మరియు తిరిగి లాగిన్ అయినప్పుడు కొత్త E2EE పాస్‌వర్డ్ రూపొందించబడుతుంది.\n\nఆన్‌లైన్ సభ్యులు ఉన్న ఎన్క్రిప్ట్ చేయబడిన గదులకు మీరు మళ్లీ ప్రాప్తిని పొందుతారు, కాని సభ్యులు లేనివారికి మాత్రం ప్రాప్తి పొందలేరు.", - "Reset_password": "పాస్‌వర్డ్ను రీసెట్ చేయండి", - "resetting_password": "పాస్‌వర్డ్ను రీసెట్ చేస్తోంది", - "Resume": "క్రింద పోవడానికి", - "Return_to_waiting_line": "వేచివేచికలకు తిరిగి వెళ్ళండి", - "Review_app_desc": "{{store}}లో మాకు 5 నకలు ఇవ్వండి", - "Review_app_later": "తరువాత", - "Review_app_no": "కాదు", - "Review_app_title": "ఈ యాప్ నేను ఆనందిస్తున్నానా?", - "Review_app_unable_store": "{{store}} తెరవలేకపోయింది", - "Review_app_yes": "అవును!", - "Review_message": "సందేశాన్ని సమీక్షించండి", - "Review_this_app": "ఈ యాప్‌ను సమీక్షించండి", - "Rocket_Chat_Documentation": "Rocket.Chat డాక్యుమెంటేషన్", - "Roles": "పాత్రలు", - "room_allowed_reactions": "గదిలో ప్రతిక్రియలను అనుమతించారు", - "room_archived": "అభిలోఖిత కొరకు ఉన్నది", - "room_avatar_changed": "గది అవాటార్ మారింది", - "room_changed_topic_to": "గది టాపిక్‌ను మార్చారు: {{topic}}", - "room_changed_type": "గది రకాన్ని మార్చారు {{type}}", - "room_disallowed_reactions": "గదిలో ప్రతిక్రియలను అనుమతించలేదు", - "Room_Info": "గది సమాచారం", - "Room_Info_Edit": "గది సమాచారం సవరించు", - "Room_name_changed_to": "గది పేరును మార్చారు: {{name}}", - "Room_not_found": "కొన్ని కారణాలతో కమ్మిట్ చేయబడినవి లేవు", - "Room_Password": "గది పాస్‌వర్డ్", - "room_removed_read_only_permission": "గదిలో పఠనాధారిత అనుమతిని తొలగించారు", - "room_set_read_only_permission": "గదిని కేవలం చదవడానికి రూపొందించారు", - "room_unarchived": "అభిలోఖిత నుండి తీసుకొనబడింది", - "room-name-already-exists": "కొనసాగించబడిన కొత్త కొరకు", - "Rooms_With_#_Symbol": "# చిహ్నంతో గదులు", - "SAVE": "భద్రపరచు", - "Save": "భద్రపరచండి", - "Save_Changes": "మార్చిన మార్పులను భద్రపరచండి", - "Save_Your_E2E_Password": "మీ E2E పాస్‌వర్డ్‌ను భద్రపరచండి", - "Save_Your_Encryption_Password": "మీ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను భద్రపరచండి", - "Save_Your_Encryption_Password_info": "గమనించండి, మీ పాస్‌వర్డ్ కనిపించితే, అదనపు పొందడానికి ఎటువంటి మార్గం లేదు మరియు మీ సందేశాలకు ప్రవేశం కనిపిస్తుంది.", - "Save_Your_Encryption_Password_warning": "ఈ పాస్‌వర్డ్ ఎక్కడా భద్రపరచబడినది కాదు, అదనపు ఏకాధికారంగా ఇతర కడాకాలాను భద్రపరచండి.", - "Saved": "భద్రపరచబడింది", - "saved_to_gallery": "గ్యాలరీకి భద్రపరచబడింది", - "saving_preferences": "అభిరుచులను భద్రపరచారు", - "saving_profile": "ప్రొఫైల్‌ను భద్రపరచారు", - "saving_settings": "సెట్టింగులను భద్రపరచారు", - "Screen_lock": "స్క్రీన్ లాక్", - "Search": "వెతుకు", - "Search_by": "ద్వారా వెతుకు", - "Search_emoji": "ఎమోజిని వెతుకు", - "Search_global_users": "ప్రపంచవ్యాప్తంగా వాడుకరులను వెతుకు", - "Search_global_users_description": "మీరు ఆన్‌చర్చలోని అన్యాన్య కంపెనీలు లేదా పనుల కిందరా ఏ వాడుకరిని వెతుకుతున్నట్లు ఉంటే, మీరు ఇదను ఎంచుకోవచ్చు.", - "Search_Messages": "సందేశాలను వెతుకు", - "Search_messages": "సందేశాలను శోధించండి", - "Search_Results_found": "{{count}} ఫలితాలు కనుగొనబడ్డాయి।", - "Searching": "శోధిస్తోంది", - "Security_and_privacy": "భద్రత మరియు గోప్యత", - "Select": "ఎంచుకోండి", - "Select_a_Channel": "చానల్‌ను ఎంచుకోండి", - "Select_a_Department": "ఒక శాఖను ఎంచుకోండి", - "Select_a_User": "ఒక వాడుకరిని ఎంచుకోండి", - "Select_an_option": "ఒక ఐచేస్టు ఎంచుకోండి", - "Select_channels_to_delete": "ఇది పునఃస్థాపించబడదు. మీరు టీమ్‌ను తొలగిస్తే, అన్ని చాట్ విషయాలు మరియు కాన్ఫిగరేషన్ తొలగిపోవడం అంటే. \n\nమీరు తొలగించలేని ఛానల్‌లను ఎంచుకోండి. కాని మీరు భర్తికి రానివారింటిగా అందుబాటులో ఉంటారు. ప్రజా ఛానల్‌లు ఇక కూడా ప్రజాకు కలిగి ఉండవచ్చు.", - "Select_emoji_reaction": "ఎమోజీ ప్రతిస్పందనను ఎంచుకోండి", - "Select_Members": "సభ్యులను ఎంచుకోండి", - "Select_Server": "పనితనం ఎంచుకోండి", - "Select_tags": "ట్యాగ్‌లను ఎంచుకోండి", - "Select_Team": "టీమ్ ఎంచుకోండి", - "Select_Team_Channels": "మీరు విడిచిపోవచ్చే టీమ్ ఛానల్‌లను ఎంచుకోండి.", - "Select_Team_Channels_To_Delete": "తొలగించాల్సిన టీమ్ ఛానల్‌లను ఎంచుకోండి, మీరు ఎంచుకోలేనివి వర్క్‌స్పేస్‌కు తరలబడతాయి. \n\nప్రజా ఛానల్‌లు ప్రజలకు ప్రజావాడుగా మరియు ప్రతివాడికి దరారుగా కనిపిస్తాయి.", - "Select_Uploaded_Image": "ఎంపడిన చిత్రాన్ని ఎంచుకోండి", - "Select_Users": "వాడుకరులను ఎంచుకోండి", - "Send": "పంపించండి", - "Send_audio_message": "ఆడియో సందేశాన్ని పంపండి", - "Send_crash_report": "క్రాష్ నివేదించండి", - "Send_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపండి", - "Send_message": "సందేశాన్ని పంపండి", - "Send_to": "పంపండి...", - "sending_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపబడుతోంది", - "Sending_to": "పంపిస్తోంది", - "Server": "పనితనం", - "Server_version": "పనితనం: {{version}}", - "Set_new_password": "కొత్త పాస్‌వర్డ్ సెట్ చేయండి", - "Set_username_subtitle": "ఇతరులకు మీరు సందేశాల్లో మీరుని స్మరించడానికి వాడుకరి పేరు ఉపయోగిస్తారు", - "Settings": "సెట్టింగులు", - "Settings_succesfully_changed": "సెట్టింగులను విజయవంతంగా మార్చారు!", - "Share": "భాగస్వామ్యం", - "Share_Link": "లింక్‌ను భాగస్వామ్యం చేయండి", - "Share_this_app": "ఈ యాప్‌ను భాగస్వామ్యం చేయండి", - "Sharing": "భాగస్వామ్యం", - "Shortcut": "షార్ట్‌కట్", - "Show_badge_for_mentions": "ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించు", - "Show_badge_for_mentions_Info": "కేవలం సర్వర్ల ఉపయోగించిన ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించాలి", - "Show_more": "మరింతగా చూపండి..", - "Show_Password": "పాస్‌వర్డ్ చూపించు", - "Sign_Up": "నమోదు చేయండి", - "Skip": "స్కిప్", - "Smileys_and_people": "స్మైలీలు మరియు వ్యక్తులు", - "Sort_by": "సార్టు చేయండి", - "Sound": "ధ్వని", - "Star": "స్టార్", - "Starred": "స్టార్ చేసినవి", - "Start_a_call": "ఒక కాల్ ప్రారంభించండి", - "Start_a_Discussion": "చర్చాను ప్రారంభించండి", - "Started_call": "{{userBy}} ద్వారా కాల్ ప్రారంభించబడింది", - "Started_discussion": "ఒక చర్చను ప్రారంభించారు:", - "Status_saved_successfully": "స్థితి విజయవంతంగా భద్రపరచబడింది!", - "Status_text_limit_exceeded": "{{limit}} అక్షరాల పరిమితి మించిపోయింది", - "Supported_versions_expired_description": "వార్క్‌స్పేస్ యాడ్మిన్ మొదటిగా మొబైల్ మరియు డెస్క్టాప్ యాప్‌ల నుండి ప్రవేశాన్ని మళ్లీ ప్రారంభించడానికి వార్క్‌స్పేస్‌ను నవీకరించాలి.", - "Supported_versions_expired_title": "{{workspace_name}} అసమర్థిత రాకెట్.చాట్ ఒరిజినల్ వెర్షన్‌ను పరిచయించిపోయింది", - "Supported_versions_warning_update_required": "నవీకరణ అవసరం", - "Symbols": "చిహ్నాలు", - "Table": "పటం", - "Tags": "ట్యాగ్‌లు", - "Take_a_photo": "ఫోటో తీసుకో", - "Take_a_video": "వీడియో తీసుకో", - "Take_it": "తీసుకో!", - "Team": "టీమ్", - "Team_hint_encrypted": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ టీమ్. ఎన్క్రిప్టెడ్ టీమ్‌తో శోధన పనులు పనిస్తాయి మరియు అధిసూచనలు సందేశాల విషయాన్ని చూపవచ్చు.", - "Team_hint_encrypted_not_available": "ప్రైవేట్ టీమ్‌కు మాత్రమే అందుబాటు", - "Team_hint_not_read_only": "ఈ టీమ్‌లో ఉన్న అన్ని వాడాలు సందేశాలను రాయగలరు", - "Team_hint_private": "కేవలం ఆహ్వానిత వాడాలు చేరవచ్చు", - "Team_hint_public": "అమర్చబడినప్పుడు, ఎవరైనా టీమ్‌కు చేరవచ్చు", - "Team_Name": "టీమ్ పేరు", - "Team_not_found": "టీమ్ కనబడలేదు", - "team-name-already-exists": "అంగీకరించిన పేరుతో టీమ్ ఇప్పటికే ఉంది", - "Teams": "టీమ్‌లు", - "Terms_of_Service": "సేవల షరతులు", - "The_autocomplete_options_are_available_above_the_input_composer": "ఇన్‌పుట్ కంపోజర్ పైన ఆటోకంప్లీట్ ఎంపికలు అందుబాటులో ఉన్నాయి", - "The_room_does_not_exist": "ఈ కమ్మిట్ ఉండదు లేదా మీకు ప్రవేశ అనుమతి ఉంది", - "The_user_will_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", - "The_user_will_be_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", - "The_user_wont_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", - "Theme": "థీమ్", - "There_was_an_error_while_action": "{{action}} ప్రవృత్తి ప్రారంభించడానికి ఒక లోపం ఉంది!", - "This_room_is_blocked": "ఈ గది నిషేధించబడింది", - "This_room_is_read_only": "ఈ గది కంటెంట్ చదవడానికి మాత్రమే", - "This_will_clear_all_your_offline_data": "ఇది మీ ఆఫ్‌లైన్ డేటాను అన్ని క్లియర్ చేస్తుంది.", - "This_will_remove_all_data_from_this_server": "ఇది ఈ వర్క్‌స్పేస్‌నుండి అన్ని డేటాను తొలగిస్తుంది.", - "Threads": "థ్రెడ్స్", - "Threads_displaying_all": "అన్నింటిని ప్రదర్శిస్తుంది", - "Threads_displaying_following": "అనుసరిస్తుంది", - "Threads_displaying_unread": "చదవనిచ్చినది ప్రదర్శిస్తుంది", - "Threads_dm_unread": "థ్రెడ్స్, {{unread}} చదవనిది, ప్రత్యక్ష పేర్కొనింపు", - "Threads_group_unread": "థ్రెడ్స్, {{unread}} చదవనిది, గ్రూప్ పేర్కొనింపు", - "Threads_unread": "థ్రెడ్స్, {{unread}} చదవనిది", - "Timezone": "సమయ మండలం", - "To_download": "డౌన్‌లోడ్ చేయడానికి", - "Token_expired": "మీ సెషన్ అవుతోంది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", - "Topic": "విషయం", - "topic": "విషయం", - "totp-invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లదు", - "Translate": "అనువాదం", - "Travel_and_places": "ప్రయాణం మరియు స్థలాలు", - "Try_again": "ప్రయత్నించండి", - "Turn_camera_off": "కెమెరాను ఆపివెయ్యి", - "Turn_camera_on": "కెమెరాను ఆన్ చేయండి", - "Turn_mic_off": "మైక్ ఆఫ్ చేయండి", - "Turn_mic_on": "మైక్ ఆన్ చేయి", - "Two_Factor_Authentication": "రెండు అంశ ప్రామాణీకరణ", - "Two_Factor_Success_message": "రెండు-అంశాల ప్రమాణీకరణ కోడ్ పంపబడింది! దయచేసి మీ ఇమెయిల్‌ను తనిఖీ చేయండి", - "Type_message": "సందేశాన్ని టైప్ చేయండి", - "Types": "రకాలు", - "UNARCHIVE": "అనార్కైవ్", - "unarchive": "అనార్కైవ్", - "unauthorized": "అనుమతి లేదు", - "Unfavorite": "ఇష్టం నుండి తీసివేయండి", - "Unfollow_thread": "థ్రెడ్‌ను అనుసరించడం నిలిపివేయండి", - "Unfollowed_thread": "అన్‌ఫాలో థ్రెడ్", - "Unhide": "దాచడం నిలిపివేయండి", - "Unignore": "పరిహరించాలి", - "Unmute": "ఆధ్వర్యపరచించండి", - "unmuted": "ఆధ్వర్యపరచించబడింది", - "Unpin": "పిన్ చేయకోండి", - "Unread": "చదవని", - "unread_messages": "చదవని", - "Unread_on_top": "చదవని పైన", - "Unstar": "స్టార్ తీసుకో", - "Unsupported_format": "అమాన్యమైన ఫార్మాట్", - "Unsupported_system_message": "అనుమతించబడని వ్యవస్థ సందేశం", - "Updating": "తాజాగా అప్డేట్ అవుతోంది...", - "Upload_image": "చిత్రం అప్‌లోడ్ చేయండి", - "Upload_in_progress": "అప్లోడ్ ప్రగతిలో ఉంది", - "Uploading": "అప్లోడ్ అవుతోంది", - "Use": "ఉపయోగించండి", - "User": "వాడుకరి", - "User__username__is_now_a_leader_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} యజమానిగా ఉన్నాడు", - "User__username__is_now_a_moderator_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} మాడరేటర్గా ఉన్నాడు", - "User__username__is_now_a_owner_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} యజమానిగా ఉన్నాడు", - "User__username__removed_from__room_name__leaders": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", - "User__username__removed_from__room_name__moderators": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", - "User__username__removed_from__room_name__owners": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", - "User_added_to": "{{userAdded}} నిలువబడింది", - "User_has_been_ignored": "వాడిని పరిహరించారు", - "User_has_been_key": "వాడుకరి {{key}} అయిపోయింది", - "User_has_been_muted": "{{userMuted}} నిశ్శబ్దం చేయబడింది", - "User_has_been_removed": "{{userRemoved}} తొలగించబడింది", - "User_has_been_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", - "User_has_been_unignored": "వాడు ఇక పరిహరించరాడు", - "User_has_been_unmuted": "{{userUnmuted}} నిశ్శబ్దం తీసుకోబడింది", - "User_Info": "వాడుకరి సమాచారం", - "User_joined_the_channel": "ఛానల్‌లో చేరారు", - "User_joined_the_conversation": "చర్చలో చేరారు", - "User_joined_the_team": "ఈ టీమ్‌లో చేరారు", - "User_left_this_channel": "ఛానల్‌ను వదిలిపోయారు", - "User_sent_an_attachment": "{{user}} అనుకూలంగా పంపించింది", - "Username": "వాడుకరి పేరు", - "Username_is_already_in_use": "उपयोगकर्ता नाम पहले से ही उपयोग में है।", - "Username_not_available": "उपयोगकर्ता नाम उपलब्ध नहीं है।", - "Username_or_email": "వాడుకరి పేరు లేదా ఇమెయిల్", - "Username_required": "यूज़रनेम आवश्यक है", - "Users": "వాడుకరులు", - "Uses_server_configuration": "పనితనం ఆకృతి ఉపయోగిస్తుంది", - "Verify_email_desc": "మేము మీ నమోదుని ధ్యానంలోకి పెంపొందాం. మీరు తక్షణం ఒక ఇమెయిల్ పొందరాక, దయచేసి మళ్ళీ ప్రయత్నించండి.", - "Version_no": "అనువర్తనం సంచిక: {{version}}", - "Video": "వీడియో", - "video-conf-provider-not-configured-body": "వార్క్‌స్పేస్ యాడ్మిన్ మొదలు కాన్ఫరెన్స్ కాల్స్ విశేషాలు ఏర్పాట్లో ఉన్నాయి.", - "video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", - "View_Original": "అసలు చూడండి", - "View_Thread": "థ్రెడ్‌ను వీక్షించండి", - "Wait_activation_warning": "మీరు లాగిన్ చేయడానికి మొదటి స్థాయింలో మీ ఖాతాను ఒక అడ్మినిస్ట్రేటర్ మానవారం ప్రత్యామ్నాయం చేయాలి.", - "Waiting_for_answer": "జవాబు కోసం ఎదురు ఉంది", - "Waiting_for_network": "నెట్వర్క్ కోసం వేచి ఉండి...", - "Waiting_for_server_connection": "సర్వర్ కనెక్షన్ కోసం ఎదురు ఉంది", - "Websocket_disabled": "ఈ పనితనంలో వెబ్‌సాకెట్ నిషేధించబడింది.\n{{contact}}", - "What_are_you_doing_right_now": "మీరు ఇప్పటికే ఏమి చేస్తున్నారు?", - "Whats_the_password_for_your_certificate": "మీ సర్టిఫికేట్ కోసం పాస్‌వర్డ్ ఏమిటి?", - "Wi_Fi": "Wi-Fi", - "Wi_Fi_and_mobile_data": "Wi-Fi మరియు మొబైల్ డేటా", - "Without_Servers": "పనితనం లేదా", - "Workspace_URL": "వర్క్‌స్పేస్ URL", - "Workspace_URL_Example": "open.rocket.chat", - "Workspaces": "వర్క్‌స్పేస్‌లు", - "Would_like_to_place_on_hold": "ఈ చాట్‌ను ఆఫ్‌లోడ్ చేయాలా?", - "Would_you_like_to_return_the_inquiry": "మీరు ప్రశ్నను వీక్షించాలా?", - "Write_External_Permission": "గ్యాలరీ అనుమతి", - "Write_External_Permission_Message": "Rocket.Chat మీ గ్యాలరీకి ప్రవేశించడానికి అనుమతిస్తుంది.", - "Yes": "అవును", - "Yes_action_it": "అవును, {{action}} చేయండి!", - "Yes_remove_user": "అవును, వాడిని తీసివేయండి!", - "Yesterday": "నిన్న", - "You": "మీరు", - "you": "మీరు", - "You_are_converting_the_team": "మీరు ఈ టీమ్‌ను ఒక ఛానల్‌కు మార్చుతున్నారు", - "You_are_deleting_the_team": "మీరు ఈ టీమ్‌ను తొలగిస్తున్నారు.", - "You_are_in_preview_mode": "మీరు ప్రివ్యూ మోడ్లో ఉన్నారు", - "You_are_leaving_the_team": "మీరు టీమ్ '{{team}}' ను విడిచిపోతున్నారు", - "You_can_search_using_RegExp_eg": "మీరు RegExp ఉపయోగించవచ్చు. ఉదా. `/^text$/i`", - "You_colon": "మీరు: ", - "You_dont_have_account": "మీ వద్ద ఖాతా లేదు?", - "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "ఏదిగానా ఏక Rocket.Chat వర్క్‌స్పేస్‌కి ప్రవేశించాలి కాబట్టి ఏదైనా షేర్ చేయడానికి.", - "You_need_to_verifiy_your_email_address_to_get_notications": "నోటిఫికేషన్‌లు పొందడానికి మీ ఇమెయిల్ చిరునామాని ధ్యానలోకి పెంచాలి", - "you_were_mentioned": "మీరు పేర్కొనబడింది", - "You_were_removed_from_channel": "మీరు {{channel}} నుంచి తొలగించబడింది", - "You_will_be_logged_out_from_other_locations": "మీరు ఇతర ప్రదేశాలనుండి లాగౌట్ అవుతారు.", - "You_will_be_logged_out_of_this_application": "మీరు ఈ అప్లికేషన్ నుండి లాగౌట్ అవుతారు.", - "You_will_not_be_able_to_recover_this_message": "మీరు ఈ సందేశాన్ని పునఃప్రాప్తి చేయలేదు!", - "You_will_unset_a_certificate_for_this_server": "ఈ వర్క్‌స్పేస్ కోసం మీరు ఒక సర్టిఫికేట్ అనాకరిస్తారు", - "Your_certificate": "మీ సర్టిఫికేట్", - "Your_invite_link_will_expire_after__usesLeft__uses": "మీ ఆహ్వాన లింక్ {{usesLeft}} ఉపయోగాల తరువాత అది కనబడిపోతుంది.", - "Your_invite_link_will_expire_on__date__": "మీ ఆహ్వాన లింక్ {{date}} లో అది కనబడిపోతుంది.", - "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "మీ ఆహ్వాన లింక్ {{date}} లేదా {{usesLeft}} ఉపయోగాల తరువాత అది కనబడిపోతుంది.", - "Your_invite_link_will_never_expire": "మీ ఆహ్వాన లింక్ ఎప్పుడూ కనబడదు.", - "Your_password_is": "మీ సంకేతపదం", - "Your_Password_Must_Have": "మీ పాస్‌వర్డ్ తప్పనిసరిగా ఉండాలి:", - "Your_workspace": "మీ వర్క్‌స్పేస్" + "__count__empty_room_will_be_removed_automatically": "{{count}} ఖాళీ కొరకు స్వయంగా తొలగిపోతాయి.", + "__count__empty_rooms_will_be_removed_automatically": "{{count}} ఖాళీ కొరకులు స్వయంగా తొలగిపోతాయి.", + "1_person_reacted": "1 వ్యక్తి ప్రతిక్రియించింది", + "A_new_owner_will_be_assigned_automatically_to__count__room": "కొత్త యజమాని స్వయంగా నియమించబడుతుంది {{count}} అంగడాయినందు.", + "A_new_owner_will_be_assigned_automatically_to__count__rooms": "కొత్త యజమాని స్వయంగా నియమించబడుతుంది {{count}} అంగడులకు.", + "A11y_appearance_dialog_require_manual_dismissal": "మానవీయంగా మూసివేయాలి", + "A11y_appearance_dialogs": "డైలాగ్లు", + "A11y_appearance_show_alerts_as": "అలర్ట్‌లను ఇలా చూపించండి", + "A11y_appearance_toast_dismissed_automatically": "స్వయంచాలకంగా మూసివేయబడుతుంది", + "A11y_appearance_toasts": "టోస్ట్ నోటిఫికేషన్లు", + "A11y_in_app_notification": "{{name}} నుండి కొత్త సందేశం: {{message}}", + "A11y_incoming_call_dismiss": "ఖారు చేయండి", + "A11y_incoming_call_swipe_down_to_view_options": "క్రిందికి స్వైప్ చేయి, పరామితులను చూడండి", + "ABAC_disabled_action_reason": "ABAC-నిర్వహించబడే గదులలో అందుబాటులో లేదు", + "ABAC_managed": "ABAC నిర్వహించబడింది", + "ABAC_managed_description": "అట్రిబ్యూట్ ఆధారిత యాక్సెస్ నియంత్రిత గదులకు అనుకూలమైన వినియోగదారులు మాత్రమే ప్రాప్యతను కలిగి ఉంటారు. లక్షణాలు గది ప్రాప్యతను నిర్ణయిస్తాయి.", + "abac_removed_user_from_the_room": "ABAC ద్వారా తొలగించబడింది", + "ABAC_room_attributes": "గది లక్షణాలు", + "accept": "అంగీకరించు", + "Accessibility": "ప్రాప్యత", + "Accessibility_and_Appearance": "ప్రాప్యత మరియు రూపకల్పన", + "Accessibility_statement": "పేరుబట్టి వివరణ", + "Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "వాడాకు 'కూడా చానల్‌కు పంపండి' పనికి అనుమతిస్తుంది", + "Actions": "చర్యలు", + "Activate_to_select_server": "సర్వర్‌ను ఎంచుకోవడానికి యాక్టివేట్ చేయండి", + "Activate_to_select_server_Available_actions_delete": "సర్వర్‌ను ఎంచుకోవడానికి ఆಕ್ಟివేట్ చేయండి. లభ్యమయ్యే చర్యలు: {{delete}}", + "Activity": "చట్టం", + "Add_Channel_to_Team": "ఛానల్‌ను టీమ్‌కు జోడించండి", + "Add_Existing": "ఇప్పటికే ఉన్నవిని జోడించండి", + "Add_Existing_Channel": "ఇప్పటికే ఉన్న ఛానల్‌ను జోడించండి", + "Add_Server": "వర్క్‌స్పేస్ చేర్చు", + "Add_server": "వర్క్‌స్పేస్ జోడించండి", + "Add_users": "వాడికి వాడుకలు చేర్చండి", + "added__roomName__to_this_team": "#{{roomName}} ని ఈ టీమ్‌కు చేర్చారు", + "Added__username__to_this_team": "@{{user_added}} ని ఈ టీమ్‌కు చేర్చారు", + "Admin_Panel": "యజమాని పేనల్", + "admin-no-active-video-conf-provider-body": "ఈ వార్క్‌స్పేస్‌లో ఇది అందుబాటు చేసేందుకు కాన్ఫరెన్స్ కాల్స్ కాన్ఫిగర్ చేసుకోవడానికి వార్క్‌స్పేస్ యాడ్మిన్ అవసరం.", + "admin-no-active-video-conf-provider-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", + "admin-no-videoconf-provider-app-body": "వార్క్‌స్పేస్ యొక్క మార్కెట్‌లో కాన్ఫరెన్స్ కాల్ యాప్స్ అందుబాటు.", + "admin-no-videoconf-provider-app-header": "కాన్ఫరెన్స్ కాల్ యాప్స్ చేరబడలేదు", + "admin-video-conf-provider-not-configured-body": "ఈ వార్క్‌స్పేస్‌లో ఇది అందుబాటు చేసేందుకు కాన్ఫరెన్స్ కాల్స్ కాన్ఫిగర్ చేసుకోవడానికి వార్క్‌స్పేస్ యాడ్మిన్ అవసరం.", + "admin-video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", + "After_seconds_set_by_admin": "అడ్మిన్ ద్వారా సెట్ చేయబడిన {{seconds}} సెకన్లలో", + "Agent": "ఏజెంట్", + "AirGapped_workspace_read_only_description": "నిర్వహకులు దీన్ని ఇంటర్నెట్‌తో కలుపుకోవడం లేదా ప్రీమియం ప్రణాళికకు మెరుగుపరచడం ద్వారా పూర్తి ఫంక్షనాలిటీని పునఃస్థాపించవచ్చు.", + "AirGapped_workspace_read_only_share_extension_title": "జోడించడం నిలిపివేయబడింది, ఎందుకంటే పనికోసం చదివే స్ధితిలో ఉంది.", + "AirGapped_workspace_read_only_title": "అయోమయ స్థితిలో ఉన్న పనికోసం.", + "Alert": "హెచ్చరిక", + "alert": "హెచ్చరిక", + "alerts": "హెచ్చరికలు", + "All": "అన్ని", + "All_Messages": "అన్ని సందేశాలు", + "All_users_in_the_channel_can_write_new_messages": "చానల్లో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", + "All_users_in_the_team_can_write_new_messages": "జట్టులో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", + "Allow_Reactions": "ప్రతిక్రియలను అనుమతించండి", + "Already_have_an_account": "మీకు ఇప్పటికే ఖాతా ఉందా?", + "Also_send_thread_message_to_channel_behavior": "చానల్‌కు థ్రెడ్ సందేశాన్ని కూడా పంపండి", + "and": "మరియు", + "and_N_more": "మరింత {{count}}", + "Animals_and_nature": "జంతువులు మరియు ప్రకృతి", + "Announcement": "ప్రకటన", + "announcement": "ప్రకటన", + "Apply_Certificate": "సర్టిఫికేట్‌ని వర్తింపజేయండి", + "ARCHIVE": "ఆర్కైవ్", + "archive": "ఆర్కైవ్", + "are_typing": "రాయడం", + "Are_you_sure_question_mark": "మీరు ఖచ్చితంగా ఉన్నారా?", + "Are_you_sure_you_want_to_delete_your_account": "మీరు మీ ఖాతాను తొలగించాలా?", + "Are_you_sure_you_want_to_leave_the_room": "మీరు ఖచ్చితంగా కొరకుని వదిలిపోతున్నారా {{room}}?", + "At_Least_1_Lowercase_Letter": "కనీసం 1 చిన్న అక్షరం", + "At_Least_1_Number": "కనీసం 1 సంఖ్య", + "At_Least_1_Symbol": "కనీసం 1 చిహ్నం", + "At_Least_1_Uppercase_Letter": "కనీసం 1 పెద్ద అక్షరం", + "At_Least_Characters": "కనీసం {{quantity}} అక్షరాలు", + "At_Most_24_Characters": "గరిష్టంగా 24 అక్షరాలు", + "At_Most_Characters": "గరిష్టంగా {{quantity}} అక్షరాలు", + "Attention": "శ్రద్ధ", + "Audio": "ఆడియో", + "Auto_Translate": "స్వయం అనువదించండి", + "Auto-join": "స్వయం-చేరండి", + "Automatic": "స్వయంగా", + "Autoplay_gifs": "GIF లను స్వయంచాలకంగా ప్లే చేయండి", + "Avatar": "అవతార్", + "Avatar_changed_successfully": "అవతార్ విజయవంతంగా మారింది!", + "Avatar_default_photo": "{{username}} కోసం డిఫాల్ట్ అవతార్", + "Avatar_Photo": "{{username}} యొక్క అవతార్", + "Avatar_Url": "అవతార్ URL", + "Avatars": "అవతార్లు", + "Away": "దూరంగా", + "Back": "వెనుకకు", + "Back_to_keyboard": "కీబోర్డ్‌కు తిరిగి వెళ్ళండి", + "Bio": "జీవిత చరిత్ర", + "Black": "నలుపు", + "Broadcast": "బ్రాడ్‌కాస్ట్", + "Broadcast_hint": "కొనసాగించబడిన వాడాలు కొత్త సందేశాలను రాయగలరు, కాని ఇతర వాడాలు ఉత్తరం ఇవ్వగలరు", + "Browser": "బ్రౌజర్", + "Busy": "వ్యస్తంగా", + "Call": "కాల్", + "Call_again": "కాల్ మళ్ళీ", + "Call_already_ended": "కాల్ ఇప్పటివరకు ముగింపుగా ఉంది!", + "Call_back": "కాల్ బ్యాక్", + "Call_ended": "కాల్ ముగియింది", + "Call_ended_bold": "*వాయిస్ కాల్ ముగిసింది*", + "Call_failed_bold": "*వాయిస్ కాల్ విఫలమైంది*", + "Call_issue": "కాల్ సమస్య", + "Call_not_answered_bold": "*వాయిస్ కాల్ జవాబు ఇవ్వబడలేదు*", + "Call_ongoing": "కాల్ ప్రవర్తిస్తోంది", + "Call_rejected": "కాల్ తిరస్కరించబడింది", + "Call_room_name": "{{roomName}} కు కాల్ చేయండి", + "Call_started": "కాల్ ప్రారంభించబడింది", + "Call_transferred_bold": "*వాయిస్ కాల్ బదిలీ చేయబడింది*", + "Call_was_canceled_before_being_answered": "కాల్ సమాధానం ఇవ్వబడకముందే రద్దు చేయబడింది", + "Call_was_not_answered": "కాల్ సమాధానించబడలేదు", + "Calling": "కాల్ చేస్తోంది", + "Cancel": "రద్దు", + "Cancel_and_delete_recording": "రికార్డింగ్‌ను రద్దు చేసి తొలగించండి", + "Cancel_editing": "సవరించడానికి రద్దు చేయి", + "Cancel_recording": "రికార్డింగ్‌ను రద్దు చేయి", + "Cancel_upload": "అప్‌లోడ్ రద్దు చేయండి", + "Canned_Responses": "క్యాన్డ్ రిస్పాన్సెలు", + "Cannot_delete": "తొలగించలేరు", + "Cannot_leave": "విడిచలేరు", + "Cannot_remove": "తీసివేయలేరు", + "Certificate_password": "సర్టిఫికేట్ పాస్‌వర్డ్", + "Change_Language": "భాషను మార్చు", + "Change_language_loading": "భాషను మార్చాడు.", + "Change_my_password": "నా పాస్‌వర్డ్ మార్చండి", + "changed_room_announcement": "గది ప్రకటనను మార్చారు: {{announcement}}", + "changed_room_description": "గది వివరాన్ని మార్చారు: {{description}}", + "changing_avatar": "అవతార్ మార్చడం", + "Channel": "చానల్", + "Channel_hint_encrypted": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ చానల్. ఎన్క్రిప్టెడ్ చానల్‌తో శోధన పనులు పనిస్తాయి మరియు అధిసూచనలు సందేశాల విషయాన్ని చూపవచ్చు.", + "Channel_hint_encrypted_not_available": "పబ్లిక్ చానల్‌కు అందుబాటు కాదు", + "Channel_hint_not_read_only": "చానల్‌లో ఉన్న అన్ని వాడాలు కొత్త సందేశాలను రాయగలరు", + "Channel_hint_private": "కేవలం ఆహ్వానిత వాడాలు ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", + "Channel_hint_public": "ప్రతిపక్షం ఈ చానల్‌కు ప్రాప్తి ఉంచవచ్చు", + "Channel_Name": "ఛానల్ పేరు", + "Channel_name_already_taken": "ఛానల్ పేరు ఇప్పటికే తీసుకోబడింది", + "Channel_name_required": "ఛానల్ పేరు అవసరం", + "Channels": "ఛానల్లు", + "Chat_closed_by_agent": "ఏజెంట్ ద్వారా చాట్ మూసబడింది", + "Chat_is_on_hold": "ఇది చాట్ అనాకరణం కారణంగా ఆఫ్‌లోడ్ ఉంది", + "Chat_started": "చాట్ ప్రారంభించబడింది", + "Chats": "చాట్లు", + "Check_canned_responses": "క్యాన్డ్ రిస్పాన్సెలను తనిఖీ చేయండి.", + "Choose": "ఎంచుకోండి", + "Choose_file": "ఫైల్ ఎంచుకో", + "Choose_from_library": "లైబ్రరీ నుండి ఎంచుకో", + "Choose_where_you_want_links_be_opened": "లింకులను ఎక్కువ ఉంచాలా ఎంచుకో", + "Clear": "క్లియర్", + "Clear_cache": "స్థానిక పనివెచ్చే క్యాష్ నిలిపివేయండి", + "Clear_cache_loading": "క్యాష్‌ను నిలిపివేస్తోంది.", + "Click_to_join": "చేరాలనుకోండి!", + "Close": "మూసివేయి", + "Close_Chat": "చాట్‌ను మూసివేయండి", + "Code_or_password_invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లనిది", + "Code_required": "కోడ్ అవసరం", + "Collaborative": "సహయోగం", + "Condensed": "సంక్షేపించబడిన", + "conference_call": "సభా కాల్", + "Confirm": "ఖచ్చితంగా చెప్పు", + "Confirm_password": "పాస్‌వర్డ్‌ను నిర్ధారించండి", + "Confirmation": "అనుమతి", + "Connect": "కనెక్ట్ చేయండి", + "Connect_to_server_as_user": "{{serverUrl}} కు {{user}} గా కనెక్ట్ అవ్వండి", + "Connecting": "కనెక్ట్ అవుతోంది...", + "Contact_us": "మాకు సంప్రదించండి", + "Contact_your_server_admin": "మీ పనిచేసే అడ్మిన్‌ని సంప్రదించండి.", + "Content": "కంటెంట్", + "Continue": "కొనసాగించు", + "Continue_with": "మరింతగా చేయండి", + "Conversation": "సంభాషణ", + "Conversation_closed": "సంభాషణ మూసబడింది", + "Convert": "మార్చు", + "Convert_ASCII_to_emoji": "ASCII ను ఎమోజీకి మార్చండి", + "Convert_to_Channel": "చానల్ కి మార్చండి", + "Convert_to_Team": "టీమ్‌కు మార్చు", + "Convert_to_Team_Warning": "మీరు ఈ ఛానల్‌ను టీమ్‌కు మార్చుతున్నారు. అన్ని సభ్యులు ఉంటారు.", + "Converted__roomName__to_a_channel": "#{{roomName}} ని చానల్ గా మార్చారు", + "Converted__roomName__to_a_team": "#{{roomName}} ని ఒక టీమ్ గా మార్చారు", + "Converting_Team_To_Channel": "టీమ్ ను చానల్‌కు మార్చేందుకు", + "Copied_to_clipboard": "క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది!", + "Copy": "నకలు", + "Crash_report_disclaimer": "మేము మీ చాట్ సామగ్రిని ట్రాక్ చేసాము. క్రాష్ రిపోర్ట్ మరియు అనలిటిక్స్ ఈవెంట్లు మాకు సమస్తమైన సమాచారం మాత్రమే కలిగి ఉన్నాయి, అని గుర్తించడానికి మరియు సమస్యలను పరిష్కరించడానికి మాత్రమే.", + "Create": "సృష్టించండి", + "Create_a_new_workspace": "కొత్త పనివెచ్చేలా సృష్టించండి", + "Create_account": "ఖాతా సృష్టించండి", + "Create_Channel": "ఛానల్ సృష్టించండి", + "Create_Direct_Messages": "సరాసరి సందేశాలను సృష్టించండి", + "Create_Discussion": "చర్చ సృష్టించండి", + "Create_New": "కొత్తగా సృష్టించండి", + "Create_new_channel_team_dm_discussion": "కొత్త ఛానల్, టీమ్, ప్రత్యక్ష సందేశం లేదా చర్చను సృష్టించండి", + "Create_Team": "టీమ్ సృష్టించండి", + "Created_snippet": "ఒక స్నిపెట్ సృష్టించబడింది", + "creating_channel": "ఛానల్ సృష్టించడం", + "creating_discussion": "సంవాదాలను సృష్టిస్తోంది", + "creating_invite": "ఆహ్వానాన్ని సృష్టించడం", + "creating_team": "టీమ్ సృష్టిస్తోంది", + "Current_password": "ప్రస్తుత పాస్‌వర్డ్", + "Current_Status": "ప్రస్తుత స్థితి", + "Custom": "అనుకూలీకరించు", + "Dark": "గాఢంగా", + "Dark_level": "గాఢంగా స్థాయి", + "decline": "నిరాకరించు", + "Default": "స్వచ్ఛందం", + "Default_browser": "స్వచ్ఛంద బ్రౌజర్", + "Defined_user_as_role": "{{user}} నియమాలను {{role}} గా ప్రవృత్తించారు", + "DELETE": "తొలగించండి", + "Delete": "తొలగించండి", + "delete": "తొలగించండి", + "Delete_Account": "ఖాతాను తొలగించండి", + "Delete_Account_confirm": "అవును, తొలగించండి", + "Delete_image": "చిత్రం తొలగించు", + "Delete_my_account": "నా ఖాతాను తొలగిస్తోంది", + "Delete_recording": "రికార్డింగ్ తొలగించండి", + "Delete_Room_Warning": "ఒక కొరకుని మొత్తం పోస్ట్ చేసిన అన్ని సందేశాలను తొలగించడం. ఇది పునఃప్రారంభించబడదు.", + "Delete_Team": "టీమ్ ను తొలగిస్తోంది", + "Deleted__roomName__": "#{{roomName}} ని తొలగించారు", + "Deleted_The_Room_Successfully": "కింద కానున్న కుటుంబం విజయవంతంగా తొలగించబడింది", + "Deleted_The_Team_Successfully": "టీమ్ విజయవంతంగా తొలగించబడింది", + "Deleting_a_user_will_delete_all_messages": "ఒక వాడిని తొలగించడం ఆ వాడిని సహితం అన్ని సందేశాలను, కొరకులను మరియు జట్టులను తొలగించాలను. ఇది పునఃప్రారంభించబడదు.", + "Deleting_account": "ఖాతా తొలగిస్తోంది", + "deleting_room": "కొరకుని తొలగించడం", + "deleting_team": "టీమ్ ను తొలగిస్తోంది", + "Department": "విభాగం", + "Description": "వివరణ", + "description": "వివరణ", + "Direct_message": "సరిహద్దు సందేశం", + "Direct_Messages": "సరాసరి సందేశాలు", + "Directory": "డైరెక్టరీ", + "Disable_writing_in_room": "{{roomName}}లో రచన అనుమతించకోండి", + "Disabled_E2E_Encryption_for_this_room": "ఈ రూమ్‌కు E2E ఎన్క్రిప్షన్ అచ్చుమాటయింది", + "Discard": "తిరిగి వాడు", + "Discard_changes": "మార్పులను తిరిగి వాడండి?", + "Discard_changes_description": "మీరు సేవించకపోతే అన్ని మార్పులు కోలుక పడతాయి.", + "Discussion": "చర్చ", + "Discussion_Desc": "చర్చలు ఛానల్ లేదా టీమ్ లోపల ఒక నిర్దిష్ట విషయం గురించి వేరు సంభాషణలను అనుమతిస్తాయి, అక్కడ ఏ వర్క్‌స్పేస్ సభ్యుడు కూడా చేర్చవచ్చు", + "Discussion_name": "చర్చ పేరు", + "Discussion_name_required": "చర్చ పేరు అవసరం", + "Discussions": "చర్చలు", + "Display": "ప్రదర్శించు", + "Do_it_later": "తర్వాత చెయ్యి", + "Do_you_have_a_certificate": "ఈ వర్క్‌స్పేస్‌కు సర్టిఫికేట్ ఉందా?", + "Do_you_have_an_account": "మీకు ఖాతా ఉందా?", + "Do_you_really_want_to_key_this_room_question_mark": "మీరు ఖచ్చితంగా {{key}} ఈ కొరకుని తెచ్చాలా?", + "Dont_activate": "ఇప్పుడే సక్రియపరచడం లేదు", + "Dont_Have_An_Account": "మీకు ఖాతా లేదా?", + "Downloaded_file": "అప్లోడు చేసిన ఫైలు", + "E2E_Encryption": "E2E ఎన్క్రిప్షన్", + "E2E_encryption_change_password_confirmation": "అవును, అది మార్చండి", + "E2E_encryption_change_password_description": "మీరు ఇప్పుడు ఎన్క్రిప్టెడ్ ప్రైవేట్ గ్రూప్లు మరియు డైరెక్ట్ సందేశాలను సృష్టించవచ్చు. మీరు ప్రేపను ఎన్క్రిప్టెడ్ చేయవచ్చు. \nఇది ఎండ్ టు ఎండ్ ఎన్క్రిప్షన్, కానీ మీ సందేశాలను ఎన్కోడ్/డీకోడ్ చేయడానికి కీను వర్క్‌స్పేస్‌లో భద్రపరచడానికి సేవ్ కానీ కారణం లేదు. ఈ కారణంగా, మీరు మీ పాస్‌వర్డ్ను బాగా దానిని సేవ్ చేయాలి. మీరు వాటిని ఉపయోగించాలని మీరు ఇతర పరికరాలలో ప్రవేశించినప్పుడు అవసానంగా అంగీకరించాలి.", + "E2E_encryption_change_password_error": "E2E కీ పాస్‌వర్డ్ను మార్చడంలో దోషం!", + "E2E_encryption_change_password_message": "దయచేసి ఇతర స్థానాలలో దానిని బాగా భద్రపరచండి.", + "E2E_encryption_change_password_success": "E2E కీ పాస్‌వర్డ్ విజయవంతంగా మారింది!", + "E2E_encryption_change_password_title": "ఎన్క్రిప్షన్ పాస్‌వర్డ్ను మార్చండి", + "E2E_encryption_reset_button": "రీసెట్ E2E కీ", + "E2E_encryption_reset_confirmation": "అవును, అది రీసెట్ చేయండి", + "E2E_encryption_reset_description": "ఈ ఐచ్ఛికం మీ ప్రస్తుత E2E కీను తొలగించి, మీరు లాగౌట్ అవుతారు. \nమీరు మళ్ళీ లాగిన్ చేయడానికి, Rocket.Chat మీకు కొత్త కీని సృష్టించి అంగీకరించండి మరియు మీరు ఒకటి లేక ఏదో మార్గం సభ్యులు ఉన్న ఎన్క్రిప్టెడ్ రూమ్‌కు ప్రవేశం పొందవచ్చు. \nE2E ఎన్క్రిప్షన్ స్వభావం కారణంగా, Rocket.Chat ఎన్క్రిప్టెడ్ రూమ్‌కు ప్రవేశం పొందలేకపోతే ప్రవేశం పొందగలదు.", + "E2E_encryption_reset_error": "E2E కీని రీసెట్ చేయడంలో దోషం!", + "E2E_encryption_reset_message": "మీరు లాగౌట్ అవుతారు.", + "E2E_encryption_reset_title": "రీసెట్ E2E కీ", + "E2E_How_It_Works_info1": "మీరు ఇప్పటికే ఎన్క్రిప్టెడ్ ప్రైవేట్ గ్రూప్స్ మరియు సరాసరి సందేశాలను సృష్టించవచ్చు. మీరు అస్తిత్వం కలిగిన ప్రైవేట్ గ్రూప్లను లేదా డైరెక్ట్ సందేశాలను కూడా ఎన్క్రిప్టెడ్ చేయవచ్చు.", + "E2E_How_It_Works_info2": "ఇది * ఎండ్ టు ఎండ్ ఎన్క్రిప్షన్ * కాదా, మీ సందేశాలను ఎన్కోడ్ / డీకోడ్ చేయడానికి కీలు అని ఉండదు. ఈ కారణంతో * మీరు ఇక్కడికి ఉపయోగించే మూలం ఇప్పటివరకు ప్రదానించిపెట్టబడదు.", + "E2E_How_It_Works_info3": "మీరు ముందు నడుపదిని కొత్తగా ఉంచవచ్చు, అది స్వయంగా ఒక E2E పాస్‌వర్డ్ యాటోమేటిక్‌గా సృష్టించబడుతుంది.", + "E2E_How_It_Works_info4": "మీరు అనుమతి పొందకపోతే, మీరు ప్రస్తుతం ఉపయోగించిన E2E పాస్‌వర్డ్ నుండి ఎంక్రిప్షన్ కీకి కొత్త పాస్‌వర్డ్ సెట్ చేయవచ్చు.", + "E2EE_password": "E2EE పాస్వర్డ్", + "Edit": "సవరించు", + "Edit_Avatar": "అవతార్‌ను సంపాదించండి", + "Edit_Invite": "ఆహ్వానాన్ని సవరించు", + "Edit_Room_Photo": "గది ఫోటోను సవరించండి", + "Edit_Status": "స్థితిని సవరించు", + "Email": "ఇమెయిల్", + "Email_associated_with_another_user": "ఇమెయిల్ మరొక వాడుకరితో సంబంధం కలిగి ఉంది", + "Email_must_be_a_valid_email": "ఇమెయిల్ చెల్లుబాటులో ఉండాలి", + "Email_Notification_Mode_All": "ప్రతి ఉల్లేఖం / DM", + "Email_Notification_Mode_Disabled": "అచ్చుకోవడం లేదు", + "Email_required": "ఇమెయిల్ అవసరం", + "Emoji_selector": "ఎమోజీ ఎంపికదారు", + "Empty": "ఖాళీ", + "Enable_Auto_Translate": "స్వయం-అనువదించడం అనుమతించండి", + "Enable_encryption_button_label": "గూఢీకరణను ప్రారంభించు", + "Enable_Message_Parser": "సందేశ పార్సర్‌ను సక్రియం చేయండి", + "Enable_writing_in_room": "{{roomName}}లో రచన అనుమతించండి", + "Enabled_E2E_Encryption_for_this_room": "ఈ రూమ్‌కు E2E ఎన్క్రిప్షన్ ప్రారంభించబడింది", + "Encrypted": "ఎన్క్రిప్టెడ్", + "Encrypted_message": "ఎన్క్రిప్టెడ్ సందేశం", + "encrypted_room_description": "ప్రాప్యతకు మీ అంతిమ నుండి అంతిమ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను నమోదు చేయండి.", + "encrypted_room_title": "{{room_name}} ఎన్క్రిప్ట్ చేయబడింది", + "Encryption_error_desc": "మీ ఎన్‌క్రిప్షన్ కీను డికోడ్ చేయడం సాధ్యం కాలేదు", + "Encryption_error_title": "తప్పు పాస్‌వర్డ్", + "End_to_end_encrypted_room": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ రూం", + "Enter_E2EE_Password": "E2EE పాస్‌వర్డ్ నమోదు చేయండి", + "Enter_E2EE_Password_description": "ఎన్‌క్రిప్ట్ చేయబడిన సందేశాలను వీక్షించడానికి మరియు పంపడానికి మీ E2EE పాస్‌వర్డ్‌ని నమోదు చెయ్యండి.\n\nప్రతీ పరికరంలో పాస్‌వర్డ్‌ని నమోదు చేయాల్సి ఉంటుంది.", + "Enter_manually": "మాన్యువల్‌గా నమోదు చేయండి", + "Error_Download_file": "ఫైల్ డౌన్‌లోడ్ చేస్తున్నప్పుడు తప్పిబాటు", + "Error_incorrect_password": "తప్పు పాస్‌వర్డ్", + "Error_prefix": "తప్పు: {{message}}", + "Error_uploading": "అప్‌లోడ్ లోపం", + "error-action-not-allowed": "{{action}} అనుమతించబడినది కాదు", + "error-avatar-invalid-url": "చెల్లింపు అవతార URL: {{url}}", + "error-duplicate-channel-name": "{{room_name}} పేరుతో చానల్ ఉంది", + "error-email-send-failed": "ఇమెయిల్ పంపడంలో లోపం: {{message}}", + "error-file-too-large": "ఫైలు అత్యంత పెద్దది", + "error-init-video-conf": "వీడియో కాల్‌ను ప్రారంభించడంలో లోపం", + "error-invalid-email": "చెల్లని ఇమెయిల్ {{email}}", + "error-invalid-file-type": "చెల్లని ఫైలు రకం", + "error-invalid-password": "చెల్లని పాస్‌వర్డ్", + "error-invalid-room-name": "{{room_name}} చెల్లని కొరకు పేరు", + "error-invitation-reply-action": "ఆహ్వాన ప్రతిస్పందనను పంపించడంలో లోపం", + "error-not-allowed": "అనుమతి లేదు", + "error-not-permission-to-upload-file": "మీకు ఫైలులను అప్‌లోడ్ చేయడానికి అనుమతి లేదు", + "error-save-image": "చిత్రం సేవ్ చేయడంలో లోపం", + "error-save-video": "వీడియోను సేవ్ చేయడంలో లోపం", + "error-team-creation": "తప్పిదమైన టీమ్ సృష్టి", + "error-too-many-requests": "లోపం, చాలా అనురోధాలు. దయచేసి నిమిషాల ముందు వేగంగా చేసేందుకు ప్రయాసించండి. మీరు మరికొన్ని సెకన్లు కావాలనుకుంటే {{seconds}} సెకన్లు వేచి ఉంచాలి.", + "error-you-are-last-owner": "మీరు చివరి యజమాని. కొన్ని క్షణాలకు అనుమతించిన తరువాత గమనించండి.", + "Everyone_can_access_this_channel": "ప్రతిఒక్కరూ ఈ ఛానల్ను ప్రవేశించవచ్చు", + "Everyone_can_access_this_team": "ప్రతిఒక్కరూ ఈ టీమ్‌ను ప్రవేశించవచ్చు", + "Expanded": "విస్తృతం", + "Expiration_Days": "కాలాంతరం (రోజులు)", + "Favorite": "पसंदीदा", + "Favorites": "ఇష్టాలు", + "Federation_Matrix_room_description_disabled": "ఈ వర్క్‌స్పేస్‌లో ఫెడరేషన్ ప్రస్తుతం నిలిపివేయబడింది", + "Federation_Matrix_room_description_invalid_version": "ఈ గది పాత ఫెడరేషన్ వెర్షన్‌తో సృష్టించబడింది మరియు నిరవధికంగా నిరోధించబడింది.", + "Federation_Matrix_room_description_missing_module": "ఫెడరేటెడ్ గదులలో చేరడం ఒక ప్రీమియం ఫీచర్", + "Fetch_image_from_URL": "URL నుండి చిత్రాన్ని పొందండి", + "Field_are_required": "{{field}} అవసరం", + "Field_is_required": "{{field}} అవసరం", + "File_description": "పిలుస్తూనే వివరణ", + "Files": "పిలుస్తూనే", + "FileUpload_Error": "ఫైల్ అప్లోడ్ లోపం", + "Filter": "फिल्टर", + "Finish_recording": "రికార్డింగ్ ముగించండి", + "Flags": "ఫ్లాగ్‌లు", + "Follow_thread": "థ్రెడ్‌ను అనుసరించండి", + "Following": "అనుసరించుతుంది", + "Following_thread": "అనుసరించుకోవడానికి థ్రెడ్", + "Food_and_drink": "ఆహారం మరియు పానీయాలు", + "For_your_security_you_must_enter_your_current_password_to_continue": "మీ సురక్షత కోసం, కొనసాగించడానికి మీరు మీ ఖాతా పాస్‌వర్డ్‌ను నమోదు చేయాలి", + "Forgot_E2EE_password": "E2EE పాస్‌వర్డ్ మర్చిపోయారా?", + "Forgot_password": "మీ పాస్‌వర్డ్ మరచిపోయారా?", + "Forgot_password_If_this_email_is_registered": "ఈ ఇ-మెయిల్ నమోదు చేసినట్లు, మేము మీ పాస్‌వర్డ్‌ను రీసెట్ చేయడానికి సూచనలు పంపబడిపోతాము. మీరు చాలా తక్కువగా ఒక ఇ-మెయిల్ లభిస్తే, దయచేసి మరియువకాయ ప్రయాసించండి.", + "Forward": "అగ్రగామించండి", + "Forward_Chat": "చాట్‌ను అగ్రగామించండి", + "Forward_message": "సందేశాన్ని ముందుకు పంపు", + "Forward_to_department": "శాఖకు అగ్రగామించండి", + "Forward_to_user": "వాడికి అగ్రగామించండి", + "Full_name": "పూర్తి పేరు", + "Full_table": "పూర్తి పటం చూడండి కొరకు క్లిక్ చేయండి", + "Generate_New_Link": "కొత్త లింక్‌ను రూపొందించండి", + "Generate_new_password": "కొత్త పాస్‌వర్డ్ రూపొందించండి", + "Get_help": "సహాయం పొందండి", + "Get_link": "లింక్ పొందండి", + "Glossary_of_simplified_terms": "సరళీకృత పదాల పదకోశం", + "Group_by": "గ్రూప్ చేయండి", + "Has_left_the_team": "టీమ్ ను వదిలిపోయారు", + "Help": "సహాయం", + "Hide": "దాచు", + "Hide_notification": "నోటిఫికేషన్ దాచు", + "Hide_Password": "పాస్‌వర్డ్ దాచు", + "Hide_System_Messages": "వ్యవస్థ సందేశాలను దాచండి", + "Hide_type_messages": "{{type}} సందేశాలను దాచండి", + "How_It_Works": "ఇది ఎలా పని చేస్తుంది", + "I_Saved_My_E2E_Password": "నా E2E పాస్‌వర్డ్ నేను భద్రంగా ఉంచాను", + "Ignore": "పరిహరించాలి", + "Images": "చిత్రాలు", + "Images_uploaded": "చిత్రాలు అప్‌లోడ్ అయ్యాయి", + "In_app": "యాప్‌లో", + "In_App_Alert_info": "ఈ నోటిఫికేషన్‌లు {{app}} తెరిచి ఉన్నప్పుడు మీకు పంపబడతాయి", + "In_App_And_Desktop": "యాప్ మరియు డెస్క్టాప్", + "In_App_and_Desktop_Alert_info": "యాప్ తెరాసినప్పటిని తెరాచినప్పటిని మేరకు పొడిస్తుంది, మరియు డెస్క్టాప్‌లో నోటిఫికేషన్‌ను ప్రదర్శిస్తుంది", + "In_App_Notification": "యాప్‌లోని నోటిఫికేషన్", + "Incoming_call_from": "నుండి రాబోయే కాల్", + "insert_Avatar_URL": "ఇక్కడ చిత్ర URL ను చేర్చండి", + "Insert_Join_Code": "చేరండి కోడ్ చేరించండి", + "Invalid_code": "చెల్లని కోడ్", + "Invalid_or_expired_invite_token": "అమాయక లేదా అవధిచుక్తాయిన అమర్పు టోకెన్", + "Invalid_server_version": "మీరు కనెక్ట్ చేయడానికి ప్రయాసిస్తున్న వర్క్‌స్పేస్ యొక్క ఒక అవసరం లేదు: {{currentVersion}}.\n\nమేము వినియోగించే అప్లికేషన్ యొక్క ఆవశ్యకానికి అయితే మేము అవసరం ఉన్న సంస్కరణం: {{minVersion}}", + "Invalid_URL": "చెల్లని URL", + "Invalid_workspace_URL": "చెల్లని వర్క్‌స్పేస్ URL", + "Invite_Link": "ఆమంత్రణ లింక్", + "Invite_users": "వాడికి ఆమంత్రణం పంపండి", + "Invited": "ఆహ్వానించబడింది", + "invited_room_description_channel": "మీరు ఆహ్వానించబడ్డారు", + "invited_room_description_dm": "మీరు సంభాషణ కలిగి ఉండడానికి ఆహ్వానించబడ్డారు", + "invited_room_title_channel": "{{room_name}} లో చేరడానికి ఆహ్వానం", + "invited_room_title_dm": "సందేశ అభ్యర్థన", + "IP": "IP", + "is_typing": "టైపు చేస్తోంది", + "Jitsi_authentication_before_making_calls": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి.", + "Jitsi_authentication_before_making_calls_admin": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల లోపాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి. ప్రాధికృత వీడియో కాల్లకు ఇన్‌ఫార్మేషన్ను నవీకరించడానికి, మీరు ప్రాధికృత యాప్‌ను నవీకరించవచ్చు.", + "Jitsi_authentication_before_making_calls_ask_admin": "Jitsi మరియు అదికాకాలే అవసరాలిగా ఉన్నాయని నమ్ముకున్నదిని వేటికి అడగించడానికి, వార్క్‌స్పేస్ యాడ్మిన్ సహాయానికి అడగండి.", + "Jitsi_may_require_authentication": "Jitsi పరిశోధన అవసరం ఉండవచ్చు", + "Join": "చేరండి", + "Join_Code": "చేరండి కోడ్", + "Joined": "చేరారు", + "Jump_to_last_message": "చివరి సందేశానికి వెళ్ళండి", + "Just_invited_people_can_access_this_channel": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ ఛానల్‌కు ప్రవేశించవచ్చు", + "Just_invited_people_can_access_this_team": "కేవలం ఆమంత్రణపెట్టబడిన వారు ఈ టీమ్‌కు ప్రవేశించవచ్చు", + "Label_Input_Two_Factor_Code": "కోడ్", + "Label_Input_Two_Factor_Password": "పాస్‌వర్డ్", + "Language": "భాష", + "last_message": "చివరి సందేశం", + "Last_owner_team_room": "మీరు ఈ ఛానల్‌కు చివరి యజమాని. మీరు టీమ్ ను విడిచిపోతే, ఛానల్ టీమ్ లో ఉంటుంది కాని మీరు వాడు బాహ్యాంతరం నుండి అదనపుడు నిర్వహిస్తారు.", + "Last_updated": "చివరిగా నవీకరించబడింది", + "Last_updated_at": "చివరిగా నవీకరించబడింది", + "Last_updated_on": "చివరిగా నవీకరించబడింది:", + "last-owner-can-not-be-removed": "చివరి యజమానిని తీసివేయలేరు", + "Leader": "నాయకుడు", + "Learn_more": "మరింతగా అర్థం చేయండి", + "Leave": "వదిలిపోకూడని", + "leave": "వదిలిపోకూడని", + "Leave_Team": "టీమ్ ను విడిచిపోతున్నారు", + "leaving_room": "గడిచిపోవడం", + "Left_The_Room_Successfully": "విజయవంతంగా కింద రాను", + "Left_The_Team_Successfully": "సఫలంగా టీమ్ ను విడిచారు", + "Legal": "చట్టం", + "License": "లైసెన్స్", + "Light": "లైట్", + "Livechat_transfer_return_to_the_queue": "చాట్ను క్యూను తిరిగి ఇస్తే", + "Load_More": "మరిన్ని లోడ్ చేయండి", + "Load_Newer": "కొత్తగా లోడ్ చేయండి", + "Load_Older": "పాతకాలం లోడ్ చేయండి", + "Loading": "లోడ్ అవుతోంది", + "Local_authentication_auto_lock_1800": "30 నిమిషాల తరువాత", + "Local_authentication_auto_lock_300": "5 నిమిషాల తరువాత", + "Local_authentication_auto_lock_3600": "1 గంట తరువాత", + "Local_authentication_auto_lock_60": "1 నిమిషాల తరువాత", + "Local_authentication_auto_lock_900": "15 నిమిషాల తరువాత", + "Local_authentication_biometry_fallback": "పాస్‌కోడ్ ఉపయోగించండి", + "Local_authentication_biometry_title": "ధ్యానం పెట్టినవారు", + "Local_authentication_change_passcode": "పాస్‌కోడ్ను మార్చండి", + "Local_authentication_facial_recognition": "ముఖంలో గుర్తింపు", + "Local_authentication_fingerprint": "వంగ్ల గుర్తింపు", + "Local_authentication_info": "గమనించండి: మీరు పాస్‌కోడ్ను మరియుప్పటికేవి మరోసారి విసర్జించాలిపోతుంది, కాబట్టి అప్లికేషన్ నుంచి తొలగించాలిపోతుంది.", + "Local_authentication_unlock_option": "పాస్‌కోడ్ తో అన్లాక్ చేయండి", + "Local_authentication_unlock_with_label": "{{label}} తో అన్లాక్ చేయండి", + "Log_analytics_events": "లాగ్ విశ్లేషణ ఈవెంట్లు", + "Logged_out_by_server": "మీరు పనితనం ద్వారా లాగౌట్ చేయబడింది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", + "Logged_out_of_other_clients_successfully": "ఇతర గ్రాహకాల నుండి యథార్థంగా లాగౌట్ అవుతున్నారు", + "Logging_out": "లాగౌట్ అవుతోంది.", + "Login": "లాగిన్", + "Login_error": "మీ రుచియవి తిరిగి చూడబడలేదు! దయచేసి మళ్ళీ ప్రయత్నించండి.", + "Logout": "లాగౌట్", + "Logout_failed": "లాగౌట్ అయిపోయింది!", + "Logout_from_other_logged_in_locations": "ఇతర సెట్ అంగాల నుండి లాగౌట్ చేయండి", + "Mark_as_unread": "అచ్చుకోండి", + "Mark_as_unread_Info": "అచ్చుకోవడానికి సందేశాలు ఉన్నప్పుడు కొనసాగవచ్చు", + "Mark_read": "చదివినట్లుగా గుర్తు పెట్టండి", + "Mark_unread": "చదవనిదిగా గుర్తు పెట్టండి", + "Markdown_tools": "మార్క్‌డౌన్ సాధనాలు", + "Max_number_of_users_allowed_is_number": "అనుమతించబడిన వాడకు గరిష్ఠ సంఖ్య {{maxUsers}} ఉంది", + "Max_number_of_uses": "ఉపయోగాల గరిష్ఠ సంఖ్య", + "Max_Repeating_Characters": "గరిష్టంగా {{quantity}} పునరావృత అక్షరాలు", + "Media_auto_download": "మీడియా ఆటో-డౌన్‌లోడ్", + "Members": "సభ్యులు", + "members": "సభ్యులు", + "Mention_user": "उपयोगकर्ता का उल्लेख करें", + "Mentions": "స్మరణలు", + "Mentions_With_@_Symbol": "@ చిహ్నంతో పేర్కొనింపులు", + "Menu": "మెను", + "Message": "సందేశం", + "message": "సందేశం", + "Message_actions": "సందేశ చర్యలు", + "Message_composer_Send_to_channel": "ఛానల్కు పంపండి", + "Message_has_been_shared": "సందేశం పంచుకుంది", + "Message_HideType_added_user_to_team": "\"యూజర్ టీమ్‌కు చేర్చబడింది\" సందేశాలను దాచు", + "Message_HideType_au": "వాడు చేర్చబడినాడు", + "Message_HideType_mute_unmute": "వాడు ధ్వనిని నిలిపించాడు / తిరగాడు", + "Message_HideType_r": "ఛానల్ పేరు మారింది", + "Message_HideType_removed_user_from_team": "\"యూజర్ టీమ్ నుండి తీసివేయబడింది\" సందేశాలను దాచు", + "Message_HideType_rm": "సందేశం తీసిపోయింది", + "Message_HideType_room_archived": "రూమ్ ఆర్చైవ్ అయ్యింది", + "Message_HideType_room_unarchived": "రూమ్ ఆర్చైవ్ కాదు", + "Message_HideType_ru": "వాడు తీసిపోయినాడు", + "Message_HideType_subscription_role_added": "వ్యాసానికి హక్కు స్థాపించబడింది", + "Message_HideType_subscription_role_removed": "హక్కు లేకపోతే", + "Message_HideType_uj": "వాడు చేరిపోయినాడు", + "Message_HideType_ujt": "\"యూజర్ జాయిండ్ టీమ్‌లో\" సందేశాలను దాచు", + "Message_HideType_ul": "వాడు విడిచిపోయినాడు", + "Message_HideType_ult": "\"యూజర్ లేవేల్ టీమ్‌ను విడిచబడింది\" సందేశాలను దాచు", + "Message_HideType_user_added_room_to_team": "\"యూజర్ రూమ్ టీమ్‌కు చేర్చబడింది\" సందేశాలను దాచు", + "Message_HideType_user_converted_to_channel": "\"యూజర్ టీమ్ ను చానల్ కి మార్చారు\" సందేశాలను దాచు", + "Message_HideType_user_converted_to_team": "\"యూజర్ చానల్ ను టీమ్‌కు మార్చారు\" సందేశాలను దాచు", + "Message_HideType_user_deleted_room_from_team": "\"యూజర్ రూమ్ ని టీమ్ నుండి తొలగించారు\" సందేశాలను దాచు", + "Message_HideType_user_removed_room_from_team": "\"యూజర్ రూమ్ ని టీమ్ నుండి తీసివేయబడింది\" సందేశాలను దాచు", + "Message_HideType_ut": "వాడు చర్చలో చేరిపోయినాడు", + "Message_HideType_wm": "స్వాగతం", + "Message_Ignored": "సందేశం పరిహరించబడింది. ప్రదర్శించడానికి ప్రాణాలు నొక్కండి.", + "Message_removed": "సందేశం తీసివేయబడింది", + "Message_Reported": "సందేశం నివేదిస్తున్నాం", + "Message_starred": "సందేశం నకిలీయం చేసినది", + "Message_translated_into_idiom": "సందేశం {{idiom}} భాషలోకి అనువదించబడింది", + "Message_unstarred": "సందేశం నకిలీయం తీసివేయబడింది", + "Message_was_not_read": "సందేశం చదవలేదు", + "Message_was_read": "సందేశం చదవబడింది", + "messages": "సందేశాలు", + "Missed_call": "మిస్డ్ కాల్", + "missing_room_e2ee_description": "గది కోసం ఎన్క్రిప్షన్ కీలు నవీకరించబడాలి, దీని జరగాలంటే మరొక గది సభ్యుడు ఆన్లైన్‌లో ఉండాలి.", + "missing_room_e2ee_title": "కొన్ని క్షణాల్లో తిరిగి తనిఖీ చేయండి", + "Moderator": "మాడరేటర్", + "More": "अधिक", + "move": "తరలించుకో", + "Move_Channel_Paragraph": "ఛానల్ని టీమ్ కంటెక్స్ట్‌లో ప్రవేశించటం అనేది ఈ ఛానల్లను టీమ్‌కు చేర్చడం అనుకూలంగా ఉండండి, కాని టీమ్ సభ్యులు కాని తమ ఛానల్ యొక్క సభ్యులవిలేనంటే, కాని ఛానల్ సభ్యులకు ఇది అందిస్తారు. \n\nఅన్ని ఛానల్ నిర్వహణ అంగీకరించిన ఈ ఛానల్ యొక్క యజమానులు బాహ్యాంతరం నిర్వహిస్తారు. \n\nటీమ్ సభ్యులు మరియు టీమ్ యజమానులు, ఛానల్ సభ్యులు కాని దరారుగా ఛానల్ యొక్క కంటెంట్‌కు ప్రవేశించలేరు. \n\nదయచేసి గమనించండి టీమ్ యజమానులు సభ్యులను ఛానల్ నుండి తీసివేయడానికి అనుమతి ఉంది.", + "Move_to_Team": "టీమ్‌కు తరలించండి", + "Move_to_Team_Warning": "ఈ ప్రవృత్తి గురించి ముందుకు చదవిన నిర్దేశాలను చదవాలనుకుంటే, మీరు ఇప్పుడు ఈ ఛానల్‌ను ఎంచుకోవచ్చారా?", + "moving_channel_to_team": "ఛానల్ టీమ్‌కు తరలించండి", + "Mute": "నిషేధించు", + "muted": "నిషేధించబడింది", + "N_channels": "{{n}} ఛానల్‌లు", + "N_people_reacted": "{{n}} వ్యక్తులు ప్రతిసారి ప్రతిక్రియించారు", + "N_Selected_members": "{{n}} ఎంచుకోబడిన సభ్యులు", + "N_users": "{{n}} వాడుకరు", + "Name": "పేరు", + "Name_required": "పేరు అవసరం", + "Never": "ఎప్పటికప్పుడు", + "New_chat_transfer": "క్రొత్త చాట్ అంచనా: {{agent}} చాట్ను క్యూనుకు తిరిగి పంపించాడు", + "New_Message": "కొత్త సందేశం", + "New_Password": "కొత్త పాస్‌వర్డ్", + "Next": "తరువాత", + "Nickname": "ఉపనామం", + "No_available_agents_to_transfer": "స్థితిలో ఉన్న ఎజెంట్లు లేవు", + "No_canned_responses": "యావత్తులు క్యాన్డ్ రిస్పాన్సెలు లేవు", + "No_channels_in_team": "ఈ చర్చలో చానల్స్ లేవు", + "No_discussions": "సంవాదాలు లేవు", + "No_files": "ఏ కింద లేవు", + "No_label_provided": "{{label}} అంగడా ఇవ్వలేదు.", + "No_limit": "అమర్పు లేదు", + "No_match_found": "సరిపోలి అంశం కనబడలేదు.", + "No_members_found": "సభ్యులు దొరకలేదు", + "No_mentioned_messages": "స్మరణలేని సందేశాలు", + "No_Message": "సందేశం లేదు", + "No_messages_yet": "ఇంకా సందేశాలు లేవు", + "No_pinned_messages": "పిన్ చేసిన సందేశాలు లేవు", + "No_Reactions": "ప్రతిక్రియలేవు", + "No_Read_Receipts": "చదవడానికి సాక్షాత్కారాలేవు", + "No_results_found": "ఫలితాలు దొరకలేదు", + "No_rooms_found": "గదులు కనుగొనబడలేదు", + "No_starred_messages": "నకిలీయం చేసిన సందేశాలు లేవు", + "No_threads": "ఏ థ్రెడ్స్ లేవు", + "No_threads_following": "మీరు అనుసరిస్తున్న ఎవరూ లేవు", + "No_threads_unread": "చదవనిచ్చిన ఏ థ్రెడ్స్ లేవు", + "no-active-video-conf-provider-body": "వార్క్‌స్పేస్ యాడ్మిన్ మొదలు కాన్ఫరెన్స్ కాల్ విశేషాలు ఏర్పాట్లో ఉన్నాయి.", + "no-active-video-conf-provider-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", + "no-videoconf-provider-app-body": "వార్క్‌స్పేస్ అడ్మిన్ ద్వారా రాకెట్.చాట్ మార్కెట్‌లో కాన్ఫరెన్స్ కాల్ యాప్స్ ఇన్స్టాల్ చేయవచ్చు.", + "no-videoconf-provider-app-header": "కాన్ఫరెన్స్ కాల్ అంగడి లేదు", + "Not_RC_Server": "మీ వర్క్‌స్పేస్ అడ్మిన్‌ను సంప్రదించండి లేదా Rocket.Chat వర్క్‌స్పేస్ ఆహ్వానానికి మీ ఇమెయిల్ ఇన్‌బాక్స్‌ని శోధించండి.", + "Nothing": "ఏదో కాదు", + "Nothing_to_save": "ఉంది ఏమి సేవ్ చేయాలేదు!", + "Notification_Preferences": "నోటిఫికేషన్ అభిరుచులు", + "Notifications": "నోటిఫికేషన్‌లు", + "Notifications_vibrate_from_new_messages": "కొత్త సందేశాల కోసం వైబ్రేట్", + "Notify_active_in_this_room": "ఈ గదిలో సక్రియంగా ఉన్న వాడులను నవోదయించు", + "Notify_all_in_this_room": "ఈ గదిలో అన్నివారినీ నవోదయించు", + "Objects": "वस्तुएँ", + "Off": "ఆఫ్", + "Offline": "ऑफ़लाइन", + "Omnichannel": "ఒమ్నిచానెల్", + "Omnichannel_enable_alert": "మీరు ఒమ్నిచానెల్‌లో అందుబాటులేదు. మీరు అందుబాటునారా?", + "Omnichannel_on_hold_chat_resumed": "ఆఫ్‌లోడ్ లోని చాట్ పునఃప్రారంభించబడింది: {{comment}}", + "Omnichannel_placed_chat_on_hold": "చాట్ ఆఫ్‌లోడ్: {{comment}}", + "Omnichannel_queue": "ఆమ్నిచానల్ క్యూ", + "On_hold_Livechats": "ఆఫ్‌లోడ్ లోని లైవ్చాట్‌లు", + "Onboarding_agree_terms": "కొనసాగండి, మీరు రాకెట్.చాట్ అంగీకరిస్తున్నారు", + "Onboarding_less_options": "తక్కువ ఎంపికలు", + "Onboarding_more_options": "మరికొన్ని ఎంపికలు", + "Onboarding_subtitle": "దల సహయాకాంక్ష", + "One_result_found": "ఒక ఫలితం కనుగొనబడింది।", + "Online": "ఆన్‌లైన్", + "Only_authorized_users_can_write_new_messages": "కేవలం అనుమతించబడిన వాడులు కొత్త సందేశాలను రాయగలరు", + "Oops": "అయ్యో!", + "Open_Livechats": "లైవ్చాట్‌లు ప్రగతిలో", + "Open_servers_history": "సర్వర్ చరిత్రను తెరవండి", + "Open_sidebar": "సైడ్‌బార్ తెరవండి", + "Open_your_authentication_app_and_enter_the_code": "మీ ప్రమాణీకరణ అనువాద అప్లికేషన్ తెరిచండి మరియు కోడ్ నమోదు చేయండి.", + "OR": "లేదా", + "OS": "ఆపరేటింగ్ సిస్టమ్", + "Overwrites_the_server_configuration_and_use_room_config": "సర్వర్ ఆకృతిని మరియు గది ఆకృతిని విధానం చేయండి", + "Owner": "యజమాని", + "Parent_channel_or_group": "ప్రధాన ఛానల్ లేదా గ్రూప్", + "Passcode_app_locked_subtitle": "{{timeLeft}} సెకన్లలో మళ్ళీ ప్రయాసం చేయండి", + "Passcode_app_locked_title": "అనువాదం చేయబడింది", + "Passcode_choose_confirm_title": "మీ కొత్త పాస్‌కోడ్ను ధృవీకరించండి", + "Passcode_choose_error": "పాస్‌కోడ్‌లు సరిపోలడం లేదు. మళ్ళీ ప్రయాసం చేయండి.", + "Passcode_choose_force_set": "అడ్మిన్ ద్వారా అవసానంగా అవసానంగా సెట్ చేయబడింది", + "Passcode_choose_title": "మీ కొత్త పాస్‌కోడ్ను ఎంచుకోండి", + "Passcode_enter_title": "మీ పాస్‌కోడ్ నమోదు", + "Password": "పాస్‌వర్డ్", + "Password_Tip_Error": "షరతు నెరవేరలేదు", + "Password_Tip_Success": "షరతు నెరవేరింది", + "Passwords_do_not_match": "పాస్‌వర్డ్‌లు సరిపోలడం లేదు", + "Pause": "పాజ్ చేయండి", + "Permalink_copied_to_clipboard": "పర్మాలింక్ కోపీ అయ్యింది!", + "Person_or_channel": "వ్యక్తి లేదా చానల్", + "Phone": "ఫోన్", + "Pin": "పిన్", + "Pinned": "పిన్ చేసినది", + "Pinned_a_message": "ఒక సందేశాన్ని పించింది:", + "Place_chat_on_hold": "చాట్‌ను ఆఫ్లోడ్ చేయండి", + "Play": "ప్లే చేయండి", + "Playback_speed": "ప్లేబ్యాక్ స్పీడ్", + "Please_add_a_comment": "దయచేసి ఒక వ్యాఖ్యను చేర్చండి", + "Please_enter_your_password": "దయచేసి మీ పాస్‌వర్డ్ నమోదు చేయండి", + "Please_wait": "దయచేసి ఎక్కడ వుంటే ఉంచుకోండి.", + "Preferences": "అభిరుచులు", + "Presence_Cap_Warning_Description": "కార్యాలయంలో కనెక్షన్లు అంతర్గత వాడాల పరిమాణానికి పరిమితమయినది, కాబట్టి వాడాల స్థితిని చరిత్రానుబంధించడానికి సేవ అచ్చుమాటవంతం. ఇది కొన్నిసేపటికీ వార్క్‌స్పేస్ అమర్చాయిన అంగుళాలో మాన్యువల్ చేయబడవచ్చు.", + "Presence_Cap_Warning_Title": "వాడకు స్థితి అస్థాయితంగా అచ్చుమాట", + "Privacy_Policy": " గోప్యాచరణ విధానం", + "Private": "ప్రైవేట్", + "Private_channel": "ప్రైవేట్ ఛానల్", + "Private_team": "ప్రైవేట్ టీమ్", + "Processing": "ప్రాసెస్ అవుతోంది", + "Profile": "ప్రొఫైల్", + "Profile_saved_successfully": "ప్రొఫైల్ యశస్విగా సేవ్ చేయబడింది!", + "Public": "పబ్లిక్", + "Public_channel": "పబ్లిక్ ఛానల్", + "Push_Notifications": "పుష్ నోటిఫికేషన్లు", + "Push_Notifications_Alert_Info": "ఈ నోటిఫికేషన్లు మీకు అప్లికేషన్ ప్రారంభించలేకపోతే అందివేయబడింది", + "Queued_chats": "క్యూ చాట్‌లు", + "Quote": "ఉదాహరణ", + "React_with_emojjname": "{{emojiName}} తో ప్రతిస్పందించండి", + "Reactions_are_disabled": "ప్రతిక్రియలు నిషేధించబడినవి", + "Reactions_are_enabled": "ప్రతిక్రియలు అనుమతించబడినవి", + "Read_External_Permission": "మీడియా అనుమతి", + "Read_External_Permission_Message": "రాకెట్.చాట్ మీ పరికరాల్లో ఫోటోలను, మీడియాను మరియు ఫైళ్లను ప్రవేశించాలి", + "Read_Only": "కేవలం చదవడానికి", + "Read_only_hint": "ఛానెల్ యజమానులు మాత్రమే క్రొత్త సందేశాలను పంపగలరు", + "Read_Receipt": "చదవడానికి సాక్షాత్కారం", + "Receive_Group_Mentions": "గ్రూప్ స్మరణలు స్వీకరించు", + "Receive_Group_Mentions_Info": "@all మరియు @here స్మరణలు స్వీకరించు", + "Receive_Notification": "నోటిఫికేషన్ స్వీకరించండి", + "Receive_notifications_from": "{{name}} నుండి నోటిఫికేషన్‌లు స్వీకరించండి", + "Recently_used": "ఇటీవల ఉపయోగించినవి", + "Record_audio_message": "ఆడియో సందేశాన్ని రికార్డ్ చేయండి", + "Register": "నమోదు", + "Registration_Succeeded": "నమోదు విజయవంతంగా చేయబడింది!", + "reject": "తిరస్కరించు", + "Remove": "తొలగించండి", + "remove": "తొలగించండి", + "Remove_from_room": "కొరకున్ని తీసివేయండి", + "Remove_from_Team": "టీమ్ నుండి తీసివేయండి", + "Remove_from_workspace_history": "వర్క్‌స్పేస్ చరిత్ర నుండి తీసివేయండి", + "Remove_Member": "సభ్యుడను తీసివేయండి", + "Remove_Team_Room_Warning": "మీరు ఈ ఛానల్‌ను టీమ్ నుండి తీసివేయాలా?", + "Remove_User_Team_Channels": "యూజర్ ను తీసివేయబడే ఛానల్‌లను ఎంచుకోండి.", + "Removed__roomName__from_the_team": "#{{roomName}} ని ఈ టీమ్ నుండి తీసివేసారు", + "Removed__username__from_the_team": "@{{userRemoved}} ని ఈ టీమ్ నుండి తీసివేసారు", + "Removed_user_as_role": "{{user}} నియమాలను {{role}} గించినారు", + "removing_team": "టీమ్ నుండి తీసివేస్తోంది", + "Removing_user_from_this_team": "మీరు {{user}} ను ఈ టీమ్ నుండి తీసివేస్తున్నారు", + "replies": "సమాధానాలు", + "Reply": "ప్రతిసారించండి", + "reply": "సమాధానం", + "Reply_in_direct_message": "నిర్దేశ సందేశంలో ప్రతిస్థానించండి", + "Reply_in_Thread": "థ్రెడ్లో సమాధానం", + "Report": "నివేదించండి", + "Report_reason_required": "కారణం అవసరం", + "Required": "అవసరమైనది", + "Resend": "మళ్ళీ పంపించు", + "RESET": "రీసెట్", + "Reset_E2EE_Password": "E2EE పాస్‌వర్డ్‌ను పునస్ధాపించండి", + "Reset_E2EE_Password_Description": "రిసెట్ చేయడం ద్వారా మీరు లాగ్ అవుట్ అవుతారు మరియు తిరిగి లాగిన్ అయినప్పుడు కొత్త E2EE పాస్‌వర్డ్ రూపొందించబడుతుంది.\n\nఆన్‌లైన్ సభ్యులు ఉన్న ఎన్క్రిప్ట్ చేయబడిన గదులకు మీరు మళ్లీ ప్రాప్తిని పొందుతారు, కాని సభ్యులు లేనివారికి మాత్రం ప్రాప్తి పొందలేరు.", + "Reset_password": "పాస్‌వర్డ్ను రీసెట్ చేయండి", + "resetting_password": "పాస్‌వర్డ్ను రీసెట్ చేస్తోంది", + "Resume": "క్రింద పోవడానికి", + "Return_to_waiting_line": "వేచివేచికలకు తిరిగి వెళ్ళండి", + "Review_app_desc": "{{store}}లో మాకు 5 నకలు ఇవ్వండి", + "Review_app_later": "తరువాత", + "Review_app_no": "కాదు", + "Review_app_title": "ఈ యాప్ నేను ఆనందిస్తున్నానా?", + "Review_app_unable_store": "{{store}} తెరవలేకపోయింది", + "Review_app_yes": "అవును!", + "Review_message": "సందేశాన్ని సమీక్షించండి", + "Review_this_app": "ఈ యాప్‌ను సమీక్షించండి", + "Rocket_Chat_Documentation": "Rocket.Chat డాక్యుమెంటేషన్", + "Roles": "పాత్రలు", + "room_allowed_reactions": "గదిలో ప్రతిక్రియలను అనుమతించారు", + "room_archived": "అభిలోఖిత కొరకు ఉన్నది", + "room_avatar_changed": "గది అవాటార్ మారింది", + "room_changed_topic_to": "గది టాపిక్‌ను మార్చారు: {{topic}}", + "room_changed_type": "గది రకాన్ని మార్చారు {{type}}", + "room_disallowed_reactions": "గదిలో ప్రతిక్రియలను అనుమతించలేదు", + "Room_Info": "గది సమాచారం", + "Room_Info_Edit": "గది సమాచారం సవరించు", + "Room_name_changed_to": "గది పేరును మార్చారు: {{name}}", + "Room_not_found": "కొన్ని కారణాలతో కమ్మిట్ చేయబడినవి లేవు", + "Room_Password": "గది పాస్‌వర్డ్", + "room_removed_read_only_permission": "గదిలో పఠనాధారిత అనుమతిని తొలగించారు", + "room_set_read_only_permission": "గదిని కేవలం చదవడానికి రూపొందించారు", + "room_unarchived": "అభిలోఖిత నుండి తీసుకొనబడింది", + "room-name-already-exists": "కొనసాగించబడిన కొత్త కొరకు", + "Rooms_With_#_Symbol": "# చిహ్నంతో గదులు", + "SAVE": "భద్రపరచు", + "Save": "భద్రపరచండి", + "Save_Changes": "మార్చిన మార్పులను భద్రపరచండి", + "Save_Your_E2E_Password": "మీ E2E పాస్‌వర్డ్‌ను భద్రపరచండి", + "Save_Your_Encryption_Password": "మీ ఎన్క్రిప్షన్ పాస్‌వర్డ్‌ను భద్రపరచండి", + "Save_Your_Encryption_Password_info": "గమనించండి, మీ పాస్‌వర్డ్ కనిపించితే, అదనపు పొందడానికి ఎటువంటి మార్గం లేదు మరియు మీ సందేశాలకు ప్రవేశం కనిపిస్తుంది.", + "Save_Your_Encryption_Password_warning": "ఈ పాస్‌వర్డ్ ఎక్కడా భద్రపరచబడినది కాదు, అదనపు ఏకాధికారంగా ఇతర కడాకాలాను భద్రపరచండి.", + "Saved": "భద్రపరచబడింది", + "saved_to_gallery": "గ్యాలరీకి భద్రపరచబడింది", + "saving_preferences": "అభిరుచులను భద్రపరచారు", + "saving_profile": "ప్రొఫైల్‌ను భద్రపరచారు", + "saving_settings": "సెట్టింగులను భద్రపరచారు", + "Screen_lock": "స్క్రీన్ లాక్", + "Search": "వెతుకు", + "Search_by": "ద్వారా వెతుకు", + "Search_emoji": "ఎమోజిని వెతుకు", + "Search_global_users": "ప్రపంచవ్యాప్తంగా వాడుకరులను వెతుకు", + "Search_global_users_description": "మీరు ఆన్‌చర్చలోని అన్యాన్య కంపెనీలు లేదా పనుల కిందరా ఏ వాడుకరిని వెతుకుతున్నట్లు ఉంటే, మీరు ఇదను ఎంచుకోవచ్చు.", + "Search_Messages": "సందేశాలను వెతుకు", + "Search_messages": "సందేశాలను శోధించండి", + "Search_Results_found": "{{count}} ఫలితాలు కనుగొనబడ్డాయి।", + "Searching": "శోధిస్తోంది", + "Security_and_privacy": "భద్రత మరియు గోప్యత", + "Select": "ఎంచుకోండి", + "Select_a_Channel": "చానల్‌ను ఎంచుకోండి", + "Select_a_Department": "ఒక శాఖను ఎంచుకోండి", + "Select_a_User": "ఒక వాడుకరిని ఎంచుకోండి", + "Select_an_option": "ఒక ఐచేస్టు ఎంచుకోండి", + "Select_channels_to_delete": "ఇది పునఃస్థాపించబడదు. మీరు టీమ్‌ను తొలగిస్తే, అన్ని చాట్ విషయాలు మరియు కాన్ఫిగరేషన్ తొలగిపోవడం అంటే. \n\nమీరు తొలగించలేని ఛానల్‌లను ఎంచుకోండి. కాని మీరు భర్తికి రానివారింటిగా అందుబాటులో ఉంటారు. ప్రజా ఛానల్‌లు ఇక కూడా ప్రజాకు కలిగి ఉండవచ్చు.", + "Select_emoji_reaction": "ఎమోజీ ప్రతిస్పందనను ఎంచుకోండి", + "Select_Members": "సభ్యులను ఎంచుకోండి", + "Select_Server": "పనితనం ఎంచుకోండి", + "Select_tags": "ట్యాగ్‌లను ఎంచుకోండి", + "Select_Team": "టీమ్ ఎంచుకోండి", + "Select_Team_Channels": "మీరు విడిచిపోవచ్చే టీమ్ ఛానల్‌లను ఎంచుకోండి.", + "Select_Team_Channels_To_Delete": "తొలగించాల్సిన టీమ్ ఛానల్‌లను ఎంచుకోండి, మీరు ఎంచుకోలేనివి వర్క్‌స్పేస్‌కు తరలబడతాయి. \n\nప్రజా ఛానల్‌లు ప్రజలకు ప్రజావాడుగా మరియు ప్రతివాడికి దరారుగా కనిపిస్తాయి.", + "Select_Uploaded_Image": "ఎంపడిన చిత్రాన్ని ఎంచుకోండి", + "Select_Users": "వాడుకరులను ఎంచుకోండి", + "Send": "పంపించండి", + "Send_audio_message": "ఆడియో సందేశాన్ని పంపండి", + "Send_crash_report": "క్రాష్ నివేదించండి", + "Send_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపండి", + "Send_message": "సందేశాన్ని పంపండి", + "Send_to": "పంపండి...", + "sending_email_confirmation": "ఇమెయిల్ ధృవీకరణను పంపబడుతోంది", + "Sending_to": "పంపిస్తోంది", + "Server": "పనితనం", + "Server_version": "పనితనం: {{version}}", + "Set_new_password": "కొత్త పాస్‌వర్డ్ సెట్ చేయండి", + "Set_username_subtitle": "ఇతరులకు మీరు సందేశాల్లో మీరుని స్మరించడానికి వాడుకరి పేరు ఉపయోగిస్తారు", + "Settings": "సెట్టింగులు", + "Settings_succesfully_changed": "సెట్టింగులను విజయవంతంగా మార్చారు!", + "Share": "భాగస్వామ్యం", + "Share_Link": "లింక్‌ను భాగస్వామ్యం చేయండి", + "Share_this_app": "ఈ యాప్‌ను భాగస్వామ్యం చేయండి", + "Sharing": "భాగస్వామ్యం", + "Shortcut": "షార్ట్‌కట్", + "Show_badge_for_mentions": "ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించు", + "Show_badge_for_mentions_Info": "కేవలం సర్వర్ల ఉపయోగించిన ప్రస్తావనల కోసం బ్యాడ్జ్ చూపించాలి", + "Show_more": "మరింతగా చూపండి..", + "Show_Password": "పాస్‌వర్డ్ చూపించు", + "Sign_Up": "నమోదు చేయండి", + "Skip": "స్కిప్", + "Smileys_and_people": "స్మైలీలు మరియు వ్యక్తులు", + "Sort_by": "సార్టు చేయండి", + "Sound": "ధ్వని", + "Star": "స్టార్", + "Starred": "స్టార్ చేసినవి", + "Start_a_call": "ఒక కాల్ ప్రారంభించండి", + "Start_a_Discussion": "చర్చాను ప్రారంభించండి", + "Started_call": "{{userBy}} ద్వారా కాల్ ప్రారంభించబడింది", + "Started_discussion": "ఒక చర్చను ప్రారంభించారు:", + "Status_saved_successfully": "స్థితి విజయవంతంగా భద్రపరచబడింది!", + "Status_text_limit_exceeded": "{{limit}} అక్షరాల పరిమితి మించిపోయింది", + "Supported_versions_expired_description": "వార్క్‌స్పేస్ యాడ్మిన్ మొదటిగా మొబైల్ మరియు డెస్క్టాప్ యాప్‌ల నుండి ప్రవేశాన్ని మళ్లీ ప్రారంభించడానికి వార్క్‌స్పేస్‌ను నవీకరించాలి.", + "Supported_versions_expired_title": "{{workspace_name}} అసమర్థిత రాకెట్.చాట్ ఒరిజినల్ వెర్షన్‌ను పరిచయించిపోయింది", + "Supported_versions_warning_update_required": "నవీకరణ అవసరం", + "Symbols": "చిహ్నాలు", + "Table": "పటం", + "Tags": "ట్యాగ్‌లు", + "Take_a_photo": "ఫోటో తీసుకో", + "Take_a_video": "వీడియో తీసుకో", + "Take_it": "తీసుకో!", + "Team": "టీమ్", + "Team_hint_encrypted": "ఎండ్ టు ఎండ్ ఎన్క్రిప్టెడ్ టీమ్. ఎన్క్రిప్టెడ్ టీమ్‌తో శోధన పనులు పనిస్తాయి మరియు అధిసూచనలు సందేశాల విషయాన్ని చూపవచ్చు.", + "Team_hint_encrypted_not_available": "ప్రైవేట్ టీమ్‌కు మాత్రమే అందుబాటు", + "Team_hint_not_read_only": "ఈ టీమ్‌లో ఉన్న అన్ని వాడాలు సందేశాలను రాయగలరు", + "Team_hint_private": "కేవలం ఆహ్వానిత వాడాలు చేరవచ్చు", + "Team_hint_public": "అమర్చబడినప్పుడు, ఎవరైనా టీమ్‌కు చేరవచ్చు", + "Team_Name": "టీమ్ పేరు", + "Team_not_found": "టీమ్ కనబడలేదు", + "team-name-already-exists": "అంగీకరించిన పేరుతో టీమ్ ఇప్పటికే ఉంది", + "Teams": "టీమ్‌లు", + "Terms_of_Service": "సేవల షరతులు", + "The_autocomplete_options_are_available_above_the_input_composer": "ఇన్‌పుట్ కంపోజర్ పైన ఆటోకంప్లీట్ ఎంపికలు అందుబాటులో ఉన్నాయి", + "The_room_does_not_exist": "ఈ కమ్మిట్ ఉండదు లేదా మీకు ప్రవేశ అనుమతి ఉంది", + "The_user_will_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", + "The_user_will_be_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", + "The_user_wont_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", + "Theme": "థీమ్", + "There_was_an_error_while_action": "{{action}} ప్రవృత్తి ప్రారంభించడానికి ఒక లోపం ఉంది!", + "This_room_is_blocked": "ఈ గది నిషేధించబడింది", + "This_room_is_read_only": "ఈ గది కంటెంట్ చదవడానికి మాత్రమే", + "This_will_clear_all_your_offline_data": "ఇది మీ ఆఫ్‌లైన్ డేటాను అన్ని క్లియర్ చేస్తుంది.", + "This_will_remove_all_data_from_this_server": "ఇది ఈ వర్క్‌స్పేస్‌నుండి అన్ని డేటాను తొలగిస్తుంది.", + "Threads": "థ్రెడ్స్", + "Threads_displaying_all": "అన్నింటిని ప్రదర్శిస్తుంది", + "Threads_displaying_following": "అనుసరిస్తుంది", + "Threads_displaying_unread": "చదవనిచ్చినది ప్రదర్శిస్తుంది", + "Threads_dm_unread": "థ్రెడ్స్, {{unread}} చదవనిది, ప్రత్యక్ష పేర్కొనింపు", + "Threads_group_unread": "థ్రెడ్స్, {{unread}} చదవనిది, గ్రూప్ పేర్కొనింపు", + "Threads_unread": "థ్రెడ్స్, {{unread}} చదవనిది", + "Timezone": "సమయ మండలం", + "To_download": "డౌన్‌లోడ్ చేయడానికి", + "Token_expired": "మీ సెషన్ అవుతోంది. దయచేసి మళ్ళీ లాగిన్ అవ్వండి.", + "Topic": "విషయం", + "topic": "విషయం", + "totp-invalid": "కోడ్ లేదా పాస్‌వర్డ్ చెల్లదు", + "Translate": "అనువాదం", + "Travel_and_places": "ప్రయాణం మరియు స్థలాలు", + "Try_again": "ప్రయత్నించండి", + "Turn_camera_off": "కెమెరాను ఆపివెయ్యి", + "Turn_camera_on": "కెమెరాను ఆన్ చేయండి", + "Turn_mic_off": "మైక్ ఆఫ్ చేయండి", + "Turn_mic_on": "మైక్ ఆన్ చేయి", + "Two_Factor_Authentication": "రెండు అంశ ప్రామాణీకరణ", + "Two_Factor_Success_message": "రెండు-అంశాల ప్రమాణీకరణ కోడ్ పంపబడింది! దయచేసి మీ ఇమెయిల్‌ను తనిఖీ చేయండి", + "Type_message": "సందేశాన్ని టైప్ చేయండి", + "Types": "రకాలు", + "UNARCHIVE": "అనార్కైవ్", + "unarchive": "అనార్కైవ్", + "unauthorized": "అనుమతి లేదు", + "Unfavorite": "ఇష్టం నుండి తీసివేయండి", + "Unfollow_thread": "థ్రెడ్‌ను అనుసరించడం నిలిపివేయండి", + "Unfollowed_thread": "అన్‌ఫాలో థ్రెడ్", + "Unhide": "దాచడం నిలిపివేయండి", + "Unignore": "పరిహరించాలి", + "Unmute": "ఆధ్వర్యపరచించండి", + "unmuted": "ఆధ్వర్యపరచించబడింది", + "Unpin": "పిన్ చేయకోండి", + "Unread": "చదవని", + "unread_messages": "చదవని", + "Unread_on_top": "చదవని పైన", + "Unstar": "స్టార్ తీసుకో", + "Unsupported_format": "అమాన్యమైన ఫార్మాట్", + "Unsupported_system_message": "అనుమతించబడని వ్యవస్థ సందేశం", + "Updating": "తాజాగా అప్డేట్ అవుతోంది...", + "Upload_image": "చిత్రం అప్‌లోడ్ చేయండి", + "Upload_in_progress": "అప్లోడ్ ప్రగతిలో ఉంది", + "Uploading": "అప్లోడ్ అవుతోంది", + "Use": "ఉపయోగించండి", + "User": "వాడుకరి", + "User__username__is_now_a_leader_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} యజమానిగా ఉన్నాడు", + "User__username__is_now_a_moderator_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} మాడరేటర్గా ఉన్నాడు", + "User__username__is_now_a_owner_of__room_name_": "వాడు {{username}} ఇప్పటికే {{room_name}} యజమానిగా ఉన్నాడు", + "User__username__removed_from__room_name__leaders": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", + "User__username__removed_from__room_name__moderators": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", + "User__username__removed_from__room_name__owners": "వాడు {{username}} {{room_name}} నుండి తీసివేయబడింది", + "User_added_to": "{{userAdded}} నిలువబడింది", + "User_has_been_ignored": "వాడిని పరిహరించారు", + "User_has_been_key": "వాడుకరి {{key}} అయిపోయింది", + "User_has_been_muted": "{{userMuted}} నిశ్శబ్దం చేయబడింది", + "User_has_been_removed": "{{userRemoved}} తొలగించబడింది", + "User_has_been_removed_from_s": "వాడు {{s}} నుండి తీసివేయబడింది", + "User_has_been_unignored": "వాడు ఇక పరిహరించరాడు", + "User_has_been_unmuted": "{{userUnmuted}} నిశ్శబ్దం తీసుకోబడింది", + "User_Info": "వాడుకరి సమాచారం", + "User_joined_the_channel": "ఛానల్‌లో చేరారు", + "User_joined_the_conversation": "చర్చలో చేరారు", + "User_joined_the_team": "ఈ టీమ్‌లో చేరారు", + "User_left_this_channel": "ఛానల్‌ను వదిలిపోయారు", + "User_sent_an_attachment": "{{user}} అనుకూలంగా పంపించింది", + "Username": "వాడుకరి పేరు", + "Username_is_already_in_use": "उपयोगकर्ता नाम पहले से ही उपयोग में है।", + "Username_not_available": "उपयोगकर्ता नाम उपलब्ध नहीं है।", + "Username_or_email": "వాడుకరి పేరు లేదా ఇమెయిల్", + "Username_required": "यूज़रनेम आवश्यक है", + "Users": "వాడుకరులు", + "Uses_server_configuration": "పనితనం ఆకృతి ఉపయోగిస్తుంది", + "Verify_email_desc": "మేము మీ నమోదుని ధ్యానంలోకి పెంపొందాం. మీరు తక్షణం ఒక ఇమెయిల్ పొందరాక, దయచేసి మళ్ళీ ప్రయత్నించండి.", + "Version_no": "అనువర్తనం సంచిక: {{version}}", + "Video": "వీడియో", + "video-conf-provider-not-configured-body": "వార్క్‌స్పేస్ యాడ్మిన్ మొదలు కాన్ఫరెన్స్ కాల్స్ విశేషాలు ఏర్పాట్లో ఉన్నాయి.", + "video-conf-provider-not-configured-header": "కాన్ఫరెన్స్ కాల్ అనేకంగా లేదు", + "View_Original": "అసలు చూడండి", + "View_Thread": "థ్రెడ్‌ను వీక్షించండి", + "Wait_activation_warning": "మీరు లాగిన్ చేయడానికి మొదటి స్థాయింలో మీ ఖాతాను ఒక అడ్మినిస్ట్రేటర్ మానవారం ప్రత్యామ్నాయం చేయాలి.", + "Waiting_for_answer": "జవాబు కోసం ఎదురు ఉంది", + "Waiting_for_network": "నెట్వర్క్ కోసం వేచి ఉండి...", + "Waiting_for_server_connection": "సర్వర్ కనెక్షన్ కోసం ఎదురు ఉంది", + "Websocket_disabled": "ఈ పనితనంలో వెబ్‌సాకెట్ నిషేధించబడింది.\n{{contact}}", + "What_are_you_doing_right_now": "మీరు ఇప్పటికే ఏమి చేస్తున్నారు?", + "Whats_the_password_for_your_certificate": "మీ సర్టిఫికేట్ కోసం పాస్‌వర్డ్ ఏమిటి?", + "Wi_Fi": "Wi-Fi", + "Wi_Fi_and_mobile_data": "Wi-Fi మరియు మొబైల్ డేటా", + "Without_Servers": "పనితనం లేదా", + "Workspace_URL": "వర్క్‌స్పేస్ URL", + "Workspace_URL_Example": "open.rocket.chat", + "Workspaces": "వర్క్‌స్పేస్‌లు", + "Would_like_to_place_on_hold": "ఈ చాట్‌ను ఆఫ్‌లోడ్ చేయాలా?", + "Would_you_like_to_return_the_inquiry": "మీరు ప్రశ్నను వీక్షించాలా?", + "Write_External_Permission": "గ్యాలరీ అనుమతి", + "Write_External_Permission_Message": "Rocket.Chat మీ గ్యాలరీకి ప్రవేశించడానికి అనుమతిస్తుంది.", + "Yes": "అవును", + "Yes_action_it": "అవును, {{action}} చేయండి!", + "Yes_remove_user": "అవును, వాడిని తీసివేయండి!", + "Yesterday": "నిన్న", + "You": "మీరు", + "you": "మీరు", + "You_are_converting_the_team": "మీరు ఈ టీమ్‌ను ఒక ఛానల్‌కు మార్చుతున్నారు", + "You_are_deleting_the_team": "మీరు ఈ టీమ్‌ను తొలగిస్తున్నారు.", + "You_are_in_preview_mode": "మీరు ప్రివ్యూ మోడ్లో ఉన్నారు", + "You_are_leaving_the_team": "మీరు టీమ్ '{{team}}' ను విడిచిపోతున్నారు", + "You_can_search_using_RegExp_eg": "మీరు RegExp ఉపయోగించవచ్చు. ఉదా. `/^text$/i`", + "You_colon": "మీరు: ", + "You_dont_have_account": "మీ వద్ద ఖాతా లేదు?", + "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "ఏదిగానా ఏక Rocket.Chat వర్క్‌స్పేస్‌కి ప్రవేశించాలి కాబట్టి ఏదైనా షేర్ చేయడానికి.", + "You_need_to_verifiy_your_email_address_to_get_notications": "నోటిఫికేషన్‌లు పొందడానికి మీ ఇమెయిల్ చిరునామాని ధ్యానలోకి పెంచాలి", + "you_were_mentioned": "మీరు పేర్కొనబడింది", + "You_were_removed_from_channel": "మీరు {{channel}} నుంచి తొలగించబడింది", + "You_will_be_logged_out_from_other_locations": "మీరు ఇతర ప్రదేశాలనుండి లాగౌట్ అవుతారు.", + "You_will_be_logged_out_of_this_application": "మీరు ఈ అప్లికేషన్ నుండి లాగౌట్ అవుతారు.", + "You_will_not_be_able_to_recover_this_message": "మీరు ఈ సందేశాన్ని పునఃప్రాప్తి చేయలేదు!", + "You_will_unset_a_certificate_for_this_server": "ఈ వర్క్‌స్పేస్ కోసం మీరు ఒక సర్టిఫికేట్ అనాకరిస్తారు", + "Your_certificate": "మీ సర్టిఫికేట్", + "Your_invite_link_will_expire_after__usesLeft__uses": "మీ ఆహ్వాన లింక్ {{usesLeft}} ఉపయోగాల తరువాత అది కనబడిపోతుంది.", + "Your_invite_link_will_expire_on__date__": "మీ ఆహ్వాన లింక్ {{date}} లో అది కనబడిపోతుంది.", + "Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "మీ ఆహ్వాన లింక్ {{date}} లేదా {{usesLeft}} ఉపయోగాల తరువాత అది కనబడిపోతుంది.", + "Your_invite_link_will_never_expire": "మీ ఆహ్వాన లింక్ ఎప్పుడూ కనబడదు.", + "Your_password_is": "మీ సంకేతపదం", + "Your_Password_Must_Have": "మీ పాస్‌వర్డ్ తప్పనిసరిగా ఉండాలి:", + "Your_workspace": "మీ వర్క్‌స్పేస్" } \ No newline at end of file From be1ffd0297d779642577f40eee6151ac37dfef7f Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 9 Apr 2026 14:04:18 -0300 Subject: [PATCH 21/24] fix(voip): address PR review comments for a11y - Remove stray merge conflict marker in CallView.stories.tsx - Add importantForAccessibility='no-hide-descendants' for Android TalkBack - Remove unused useResponsiveLayout import from CallButtons.tsx - Remove unused ResponsiveLayoutContext import from index.test.tsx - Update snapshots to reflect new a11y props --- app/views/CallView/CallView.stories.tsx | 1 - .../__snapshots__/index.test.tsx.snap | 264 ++++++++++++------ app/views/CallView/components/CallButtons.tsx | 2 +- .../__snapshots__/Dialpad.test.tsx.snap | 48 ++++ .../__snapshots__/CallerInfo.test.tsx.snap | 38 ++- app/views/CallView/index.test.tsx | 1 - 6 files changed, 253 insertions(+), 101 deletions(-) diff --git a/app/views/CallView/CallView.stories.tsx b/app/views/CallView/CallView.stories.tsx index befdab9547a..ee045050d71 100644 --- a/app/views/CallView/CallView.stories.tsx +++ b/app/views/CallView/CallView.stories.tsx @@ -118,7 +118,6 @@ export const SpeakerOn = () => { return ; }; -<<<<<<< HEAD // Tablet / wide layout stories — force layoutMode='wide' via ResponsiveLayoutContext width const TabletCallView = () => { const { colors } = useTheme(); diff --git a/app/views/CallView/__snapshots__/index.test.tsx.snap b/app/views/CallView/__snapshots__/index.test.tsx.snap index d5c2e4b5ac8..51e40a589db 100644 --- a/app/views/CallView/__snapshots__/index.test.tsx.snap +++ b/app/views/CallView/__snapshots__/index.test.tsx.snap @@ -15,13 +15,17 @@ exports[`Story Snapshots: ConnectedCall should match snapshot 1`] = ` "flex": 1, "justifyContent": "space-between", }, + false, { "backgroundColor": "#FFFFFF", }, ] } + testID="call-view-container" > @@ -162,6 +169,8 @@ exports[`Story Snapshots: ConnectedCall should match snapshot 1`] = ` @@ -963,6 +979,8 @@ exports[`Story Snapshots: ConnectingCall should match snapshot 1`] = ` @@ -1772,6 +1797,8 @@ exports[`Story Snapshots: MutedAndOnHold should match snapshot 1`] = ` @@ -2573,6 +2607,8 @@ exports[`Story Snapshots: MutedCall should match snapshot 1`] = ` @@ -3374,6 +3417,8 @@ exports[`Story Snapshots: OnHoldCall should match snapshot 1`] = ` @@ -4175,6 +4227,8 @@ exports[`Story Snapshots: SpeakerOn should match snapshot 1`] = ` @@ -4976,6 +5035,8 @@ exports[`Story Snapshots: TabletConnectedCall should match snapshot 1`] = ` @@ -5766,6 +5832,8 @@ exports[`Story Snapshots: TabletConnectingCall should match snapshot 1`] = ` @@ -6564,6 +6637,8 @@ exports[`Story Snapshots: TabletMutedAndOnHold should match snapshot 1`] = ` @@ -7354,6 +7434,8 @@ exports[`Story Snapshots: TabletMutedCall should match snapshot 1`] = ` @@ -8144,6 +8231,8 @@ exports[`Story Snapshots: TabletOnHoldCall should match snapshot 1`] = ` @@ -8934,6 +9028,8 @@ exports[`Story Snapshots: TabletSpeakerOn should match snapshot 1`] = ` { ]} pointerEvents={controlsVisible ? 'auto' : 'none'} accessibilityElementsHidden={!controlsVisible} + importantForAccessibility={controlsVisible ? 'auto' : 'no-hide-descendants'} testID='call-buttons'> {layoutMode === 'wide' ? ( diff --git a/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap b/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap index fc501008c25..24657837e9d 100644 --- a/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap +++ b/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap @@ -1420,6 +1420,8 @@ exports[`Story Snapshots: TabletLandscape should match snapshot 1`] = ` } > @@ -164,6 +169,8 @@ exports[`Story Snapshots: UsernameOnly should match snapshot 1`] = ` } > diff --git a/app/views/CallView/index.test.tsx b/app/views/CallView/index.test.tsx index 33628120815..7d4afb462f9 100644 --- a/app/views/CallView/index.test.tsx +++ b/app/views/CallView/index.test.tsx @@ -8,7 +8,6 @@ import { useCallStore } from '../../lib/services/voip/useCallStore'; import { mockedStore } from '../../reducers/mockedStore'; import * as stories from './CallView.stories'; import { generateSnapshots } from '../../../.rnstorybook/generateSnapshots'; -import { ResponsiveLayoutContext } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; let mockWindowWidth = 350; jest.mock('react-native/Libraries/Utilities/useWindowDimensions', () => ({ From 8cd5b3a977c188bff918d2c19ee2f2eb16dfd657 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 9 Apr 2026 14:07:17 -0300 Subject: [PATCH 22/24] chore: remove superpowers docs from PR --- .../plans/2026-04-06-voip-accessibility.md | 855 ------------------ .../2026-04-06-voip-accessibility-design.md | 126 --- 2 files changed, 981 deletions(-) delete mode 100644 docs/superpowers/plans/2026-04-06-voip-accessibility.md delete mode 100644 docs/superpowers/specs/2026-04-06-voip-accessibility-design.md diff --git a/docs/superpowers/plans/2026-04-06-voip-accessibility.md b/docs/superpowers/plans/2026-04-06-voip-accessibility.md deleted file mode 100644 index 935ec0dc2ea..00000000000 --- a/docs/superpowers/plans/2026-04-06-voip-accessibility.md +++ /dev/null @@ -1,855 +0,0 @@ -# VoIP Accessibility Implementation Plan - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal:** Add screen reader support, landscape layout, and font scaling to new VoIP screens on `feat.voip-lib-new`. - -**Architecture:** New `useIsScreenReaderEnabled` hook wires into `useControlsVisible` so both `CallerInfo` and `CallButtons` automatically keep controls visible when a screen reader is active. Landscape layout is driven by `useResponsiveLayout()` (the existing shared context) — each component reads `width`/`height` from it and derives `isLandscape` independently, avoiding prop drilling and conflicts with tablet layout. - -**Tech Stack:** React Native, Zustand (`useCallStore`), `react-native-a11y-order`, `@testing-library/react-native`, `useResponsiveLayout` context. - ---- - -## File Map - -| Action | File | Responsibility | -| ------ | --------------------------------------------------------------- | -------------------------------------------------------- | -| Create | `app/lib/hooks/useIsScreenReaderEnabled.ts` | Reactive boolean: VoiceOver/TalkBack active | -| Create | `app/lib/hooks/useIsScreenReaderEnabled.test.ts` | Tests for the hook | -| Modify | `app/lib/services/voip/useCallStore.ts:301` | `useControlsVisible` — always true when screen reader on | -| Modify | `app/i18n/locales/*.json` (25 files — all in `LANGUAGES` array) | Add `Toggle_call_controls` key | -| Modify | `app/views/CallView/components/CallerInfo.tsx` | Screen reader bypass + a11y label + landscape avatar | -| Modify | `app/views/CallView/components/CallButtons.tsx` | `accessibilityElementsHidden` + landscape styles | -| Modify | `app/views/CallView/index.tsx` | Landscape container flex direction | -| Modify | `app/views/CallView/styles.ts` | Landscape style variants | -| Modify | `app/views/CallView/index.test.tsx` | Screen reader + landscape tests | -| Modify | `app/views/CallView/CallView.stories.tsx` | Landscape story | -| Modify | `app/views/CallView/components/Dialpad/DialpadButton.tsx` | a11y label + role | -| Modify | `app/containers/NewMediaCall/PeerItem.tsx` | a11y label + role | - ---- - -## Task 1: `useIsScreenReaderEnabled` hook - -**Files:** - -- Create: `app/lib/hooks/useIsScreenReaderEnabled.ts` -- Create: `app/lib/hooks/useIsScreenReaderEnabled.test.ts` - -- [ ] **Step 1: Write the failing tests** - -`app/lib/hooks/useIsScreenReaderEnabled.test.ts`: - -```ts -import { renderHook, act } from '@testing-library/react-native'; -import { AccessibilityInfo } from 'react-native'; -import { useIsScreenReaderEnabled } from './useIsScreenReaderEnabled'; - -describe('useIsScreenReaderEnabled', () => { - beforeEach(() => { - jest.spyOn(AccessibilityInfo, 'isScreenReaderEnabled').mockResolvedValue(false); - jest.spyOn(AccessibilityInfo, 'addEventListener').mockReturnValue({ remove: jest.fn() } as any); - }); - - afterEach(() => { - jest.restoreAllMocks(); - }); - - it('returns false initially', () => { - const { result } = renderHook(() => useIsScreenReaderEnabled()); - expect(result.current).toBe(false); - }); - - it('returns true after isScreenReaderEnabled resolves true', async () => { - jest.spyOn(AccessibilityInfo, 'isScreenReaderEnabled').mockResolvedValue(true); - const { result } = renderHook(() => useIsScreenReaderEnabled()); - await act(async () => {}); - expect(result.current).toBe(true); - }); - - it('updates when screenReaderChanged event fires', () => { - let capturedListener: (enabled: boolean) => void = () => {}; - jest.spyOn(AccessibilityInfo, 'addEventListener').mockImplementation((_event, cb) => { - capturedListener = cb as (enabled: boolean) => void; - return { remove: jest.fn() } as any; - }); - - const { result } = renderHook(() => useIsScreenReaderEnabled()); - - act(() => { - capturedListener(true); - }); - - expect(result.current).toBe(true); - }); - - it('removes the event listener on unmount', () => { - const removeMock = jest.fn(); - jest.spyOn(AccessibilityInfo, 'addEventListener').mockReturnValue({ remove: removeMock } as any); - - const { unmount } = renderHook(() => useIsScreenReaderEnabled()); - unmount(); - - expect(removeMock).toHaveBeenCalled(); - }); -}); -``` - -- [ ] **Step 2: Run tests to confirm they fail** - -```bash -yarn test --testPathPattern=useIsScreenReaderEnabled -``` - -Expected: FAIL — `Cannot find module './useIsScreenReaderEnabled'` - -- [ ] **Step 3: Implement the hook** - -`app/lib/hooks/useIsScreenReaderEnabled.ts`: - -```ts -import { useEffect, useState } from 'react'; -import { AccessibilityInfo } from 'react-native'; - -export const useIsScreenReaderEnabled = (): boolean => { - const [enabled, setEnabled] = useState(false); - - useEffect(() => { - AccessibilityInfo.isScreenReaderEnabled().then(setEnabled); - const subscription = AccessibilityInfo.addEventListener('screenReaderChanged', setEnabled); - return () => subscription.remove(); - }, []); - - return enabled; -}; -``` - -- [ ] **Step 4: Run tests to confirm they pass** - -```bash -yarn test --testPathPattern=useIsScreenReaderEnabled -``` - -Expected: PASS (4 tests) - -- [ ] **Step 5: Commit** - -```bash -git add app/lib/hooks/useIsScreenReaderEnabled.ts app/lib/hooks/useIsScreenReaderEnabled.test.ts -git commit -m "feat(a11y): add useIsScreenReaderEnabled hook" -``` - ---- - -## Task 2: i18n key — dispatch translation agent - -**Files:** All 25 locale files registered in the `LANGUAGES` array in `app/i18n/index.ts`: - -`en.json`, `ar.json`, `bn-IN.json`, `cs.json`, `de.json`, `es.json`, `fi.json`, `fr.json`, `hi-IN.json`, `hu.json`, `it.json`, `ja.json`, `nl.json`, `no.json`, `nn.json`, `pt-BR.json`, `pt-PT.json`, `ru.json`, `sl-SI.json`, `sv.json`, `ta-IN.json`, `te-IN.json`, `tr.json`, `zh-CN.json`, `zh-TW.json` - -- [ ] **Step 1: Dispatch a general-purpose agent to handle all translations** - -Launch an agent with the following prompt: - -> You are adding a new i18n key to a React Native app. The key is `Toggle_call_controls` with the English value `"Toggle call controls"` — it labels a button that shows/hides the call controls on an ongoing phone call screen. -> -> Add this key to all 25 locale files listed below. For each file: -> -> 1. Translate "Toggle call controls" into the appropriate language naturally (don't just copy English) -> 2. Find the insertion point alphabetically — it goes between `"To_download"` and `"Token_expired"` (search for `Token_expired` in each file to locate it; if that key is missing, insert alphabetically between the nearest surrounding keys) -> 3. Insert: `"Toggle_call_controls": "",` -> -> Files (all under `app/i18n/locales/`): -> `en.json` → "Toggle call controls" -> `ar.json` → Arabic -> `bn-IN.json` → Bengali -> `cs.json` → Czech -> `de.json` → German -> `es.json` → Spanish -> `fi.json` → Finnish -> `fr.json` → French -> `hi-IN.json` → Hindi -> `hu.json` → Hungarian -> `it.json` → Italian -> `ja.json` → Japanese -> `nl.json` → Dutch -> `no.json` → Norwegian Bokmål -> `nn.json` → Norwegian Nynorsk -> `pt-BR.json` → Brazilian Portuguese -> `pt-PT.json` → European Portuguese -> `ru.json` → Russian -> `sl-SI.json` → Slovenian -> `sv.json` → Swedish -> `ta-IN.json` → Tamil -> `te-IN.json` → Telugu -> `tr.json` → Turkish -> `zh-CN.json` → Simplified Chinese -> `zh-TW.json` → Traditional Chinese -> -> After editing all files, run: -> -> ```bash -> grep -rl "Toggle_call_controls" app/i18n/locales/ | wc -l -> ``` -> -> Expected: `25`. Then commit: -> -> ```bash -> git add app/i18n/locales/ -> git commit -m "feat(a11y): add Toggle_call_controls i18n key to all locales" -> ``` - -- [ ] **Step 2: Verify** - -```bash -grep -rl "Toggle_call_controls" app/i18n/locales/ | wc -l -``` - -Expected: `25` - ---- - -## Task 3: `useControlsVisible` — always true when screen reader is active - -**Files:** - -- Modify: `app/lib/services/voip/useCallStore.ts:301` - -- [ ] **Step 1: Update `useControlsVisible`** - -In `app/lib/services/voip/useCallStore.ts`, replace line 301: - -```ts -export const useControlsVisible = () => useCallStore(state => state.controlsVisible); -``` - -with: - -```ts -import { useIsScreenReaderEnabled } from '../../hooks/useIsScreenReaderEnabled'; - -export const useControlsVisible = () => { - const controlsVisible = useCallStore(state => state.controlsVisible); - const isScreenReaderEnabled = useIsScreenReaderEnabled(); - return controlsVisible || isScreenReaderEnabled; -}; -``` - -Add the import at the top of the file with the other imports. - -- [ ] **Step 2: Run existing CallView tests to confirm nothing breaks** - -```bash -yarn test --testPathPattern=CallView/index -``` - -Expected: PASS (all existing tests still pass) - -- [ ] **Step 3: Commit** - -```bash -git add app/lib/services/voip/useCallStore.ts -git commit -m "feat(a11y): keep call controls visible when screen reader is active" -``` - ---- - -## Task 4: `CallerInfo` — screen reader fix + accessibility label - -**Files:** - -- Modify: `app/views/CallView/components/CallerInfo.tsx` -- Modify: `app/views/CallView/index.test.tsx` - -- [ ] **Step 1: Write the failing test** - -Add `AccessibilityInfo` to the existing React Native import at the top of `app/views/CallView/index.test.tsx`: - -```ts -import { act } from '@testing-library/react-native'; -import { AccessibilityInfo } from 'react-native'; -``` - -Then add this test inside `describe('CallView', ...)`: - -```ts -it('should not call toggleControlsVisible when screen reader is enabled', async () => { - jest.spyOn(AccessibilityInfo, 'isScreenReaderEnabled').mockResolvedValue(false); - let capturedListener: (enabled: boolean) => void = () => {}; - jest.spyOn(AccessibilityInfo, 'addEventListener').mockImplementation((_event: string, cb: any) => { - capturedListener = cb; - return { remove: jest.fn() } as any; - }); - - setStoreState({ callState: 'active' }); - const toggleControlsVisible = jest.fn(); - useCallStore.setState({ toggleControlsVisible }); - - const { getByTestId } = render( - - - - ); - - await act(async () => { - capturedListener(true); - }); - - fireEvent.press(getByTestId('caller-info-toggle')); - expect(toggleControlsVisible).not.toHaveBeenCalled(); -}); -``` - -- [ ] **Step 2: Run test to confirm it fails** - -```bash -yarn test --testPathPattern=CallView/index -``` - -Expected: FAIL — `toggleControlsVisible` is called even with screen reader on - -- [ ] **Step 3: Update `CallerInfo.tsx`** - -```tsx -import React from 'react'; -import { Pressable, Text, View } from 'react-native'; -import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated'; - -import AvatarContainer from '../../../containers/Avatar'; -import I18n from '../../../i18n'; -import { useCallContact, useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; -import { useIsScreenReaderEnabled } from '../../../lib/hooks/useIsScreenReaderEnabled'; -import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; -import { useTheme } from '../../../theme'; - -const CallerInfo = (): React.ReactElement => { - const { colors } = useTheme(); - const contact = useCallContact(); - const toggleControlsVisible = useCallStore(state => state.toggleControlsVisible); - const controlsVisible = useControlsVisible(); - const isScreenReaderEnabled = useIsScreenReaderEnabled(); - - const callerRowStyle = useAnimatedStyle(() => ({ - opacity: withTiming(controlsVisible ? 1 : 0, { duration: CONTROLS_ANIMATION_DURATION }), - transform: [{ translateY: withTiming(controlsVisible ? 0 : 10, { duration: CONTROLS_ANIMATION_DURATION }) }] - })); - - const name = contact.displayName || contact.username || I18n.t('Unknown'); - const avatarText = contact.username || name; - - return ( - - - - - - - {name} - - - - ); -}; - -export default CallerInfo; -``` - -- [ ] **Step 4: Run tests to confirm they pass** - -```bash -yarn test --testPathPattern=CallView/index -``` - -Expected: PASS - -- [ ] **Step 5: Commit** - -```bash -git add app/views/CallView/components/CallerInfo.tsx app/views/CallView/index.test.tsx -git commit -m "feat(a11y): disable tap-to-hide controls when screen reader is active" -``` - ---- - -## Task 5: `CallButtons` — hide from screen reader when visually hidden - -**Files:** - -- Modify: `app/views/CallView/components/CallButtons.tsx` - -- [ ] **Step 1: Add `accessibilityElementsHidden` to the animated container** - -In `app/views/CallView/components/CallButtons.tsx`, update the `Animated.View` opening tag: - -```tsx - -``` - -- [ ] **Step 2: Run tests** - -```bash -yarn test --testPathPattern=CallView/index -``` - -Expected: PASS - -- [ ] **Step 3: Commit** - -```bash -git add app/views/CallView/components/CallButtons.tsx -git commit -m "feat(a11y): hide call buttons from screen reader when controls are not visible" -``` - ---- - -## Task 6: `DialpadButton` — accessibility label and role - -**Files:** - -- Modify: `app/views/CallView/components/Dialpad/DialpadButton.tsx` - -- [ ] **Step 1: Add a11y props to the Pressable** - -In `app/views/CallView/components/Dialpad/DialpadButton.tsx`, update the `Pressable`: - -```tsx - [ - styles.button, - { backgroundColor: pressed ? colors.buttonBackgroundSecondaryPress : colors.buttonBackgroundSecondaryDefault } - ]}> -``` - -- [ ] **Step 2: Run lint** - -```bash -yarn lint -``` - -Expected: no new errors - -- [ ] **Step 3: Commit** - -```bash -git add app/views/CallView/components/Dialpad/DialpadButton.tsx -git commit -m "feat(a11y): add accessibility label and role to DialpadButton" -``` - ---- - -## Task 7: `PeerItem` — accessibility label and role - -**Files:** - -- Modify: `app/containers/NewMediaCall/PeerItem.tsx` - -- [ ] **Step 1: Add a11y props to the Pressable** - -In `app/containers/NewMediaCall/PeerItem.tsx`, update the `Pressable`: - -```tsx - [ - styles.container, - { backgroundColor: pressed && isIOS ? colors.surfaceSelected : colors.surfaceLight } - ]} - onPress={() => onSelectOption(item)} - accessibilityLabel={item.label} - accessibilityRole='button' - testID={`new-media-call-option-${item.value}`} - android_ripple={{ color: colors.surfaceSelected }}> -``` - -- [ ] **Step 2: Run lint** - -```bash -yarn lint -``` - -Expected: no new errors - -- [ ] **Step 3: Commit** - -```bash -git add app/containers/NewMediaCall/PeerItem.tsx -git commit -m "feat(a11y): add accessibility label and role to PeerItem" -``` - ---- - -## Task 8: `CallView` landscape layout - -**Files:** - -- Modify: `app/views/CallView/styles.ts` -- Modify: `app/views/CallView/index.tsx` -- Modify: `app/views/CallView/components/CallerInfo.tsx` -- Modify: `app/views/CallView/components/CallButtons.tsx` -- Modify: `app/views/CallView/CallView.stories.tsx` -- Modify: `app/views/CallView/index.test.tsx` - -- [ ] **Step 1: Write the failing landscape test** - -Add to `app/views/CallView/index.test.tsx`. First, add this import at the top (alongside the existing `ResponsiveLayoutContext` import from the mock — the mock re-exports the actual module's context, so importing from the same path works): - -```ts -import { ResponsiveLayoutContext } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; -``` - -Then add a helper and test inside `describe('CallView', ...)`: - -```ts -const LandscapeWrapper = ({ children }: { children: React.ReactNode }) => ( - - {children} - -); - -it('should apply landscape styles when width > height', () => { - setStoreState({ callState: 'active' }); - const { getByTestId } = render( - - - - ); - - const container = getByTestId('call-view-container'); - expect(container.props.style).toEqual(expect.arrayContaining([expect.objectContaining({ flexDirection: 'row' })])); -}); -``` - -- [ ] **Step 2: Run test to confirm it fails** - -```bash -yarn test --testPathPattern=CallView/index -``` - -Expected: FAIL — `Unable to find an element with testID: call-view-container` - -- [ ] **Step 3: Add landscape styles to `styles.ts`** - -In `app/views/CallView/styles.ts`, add these entries to the `StyleSheet.create({...})` call: - -```ts -contentContainerLandscape: { - flexDirection: 'row', - alignItems: 'stretch' -}, -callerInfoContainerLandscape: { - flex: 2 -}, -buttonsContainerLandscape: { - flex: 3, - borderTopWidth: 0, - borderLeftWidth: StyleSheet.hairlineWidth, - justifyContent: 'center' -}, -buttonsRowLandscape: { - marginBottom: 16 -} -``` - -- [ ] **Step 4: Update `CallView/index.tsx`** - -```tsx -import React from 'react'; -import { View } from 'react-native'; - -import { useCallStore } from '../../lib/services/voip/useCallStore'; -import CallerInfo from './components/CallerInfo'; -import { styles } from './styles'; -import { useTheme } from '../../theme'; -import { CallButtons } from './components/CallButtons'; -import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; - -const CallView = (): React.ReactElement | null => { - 'use memo'; - - const { colors } = useTheme(); - const call = useCallStore(state => state.call); - const { width, height } = useResponsiveLayout(); - const isLandscape = width > height; - - if (!call) { - return null; - } - - return ( - - - - - ); -}; - -export default CallView; -``` - -- [ ] **Step 5: Update `CallerInfo.tsx` for landscape** - -In `app/views/CallView/components/CallerInfo.tsx`, add `useResponsiveLayout` import and landscape avatar size: - -```tsx -import React from 'react'; -import { Pressable, Text, View } from 'react-native'; -import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated'; - -import AvatarContainer from '../../../containers/Avatar'; -import I18n from '../../../i18n'; -import { useCallContact, useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; -import { useIsScreenReaderEnabled } from '../../../lib/hooks/useIsScreenReaderEnabled'; -import { useResponsiveLayout } from '../../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; -import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; -import { useTheme } from '../../../theme'; - -const CallerInfo = (): React.ReactElement => { - const { colors } = useTheme(); - const contact = useCallContact(); - const toggleControlsVisible = useCallStore(state => state.toggleControlsVisible); - const controlsVisible = useControlsVisible(); - const isScreenReaderEnabled = useIsScreenReaderEnabled(); - const { width, height } = useResponsiveLayout(); - const isLandscape = width > height; - - const callerRowStyle = useAnimatedStyle(() => ({ - opacity: withTiming(controlsVisible ? 1 : 0, { duration: CONTROLS_ANIMATION_DURATION }), - transform: [{ translateY: withTiming(controlsVisible ? 0 : 10, { duration: CONTROLS_ANIMATION_DURATION }) }] - })); - - const name = contact.displayName || contact.username || I18n.t('Unknown'); - const avatarText = contact.username || name; - - return ( - - - - - - - {name} - - - - ); -}; - -export default CallerInfo; -``` - -- [ ] **Step 6: Update `CallButtons.tsx` for landscape** - -In `app/views/CallView/components/CallButtons.tsx`, add `useResponsiveLayout` and landscape styles: - -```tsx -import React from 'react'; -import { View } from 'react-native'; -import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated'; - -import I18n from '../../../i18n'; -import { useCallStore, useControlsVisible } from '../../../lib/services/voip/useCallStore'; -import { useResponsiveLayout } from '../../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; -import CallActionButton from './CallActionButton'; -import { CONTROLS_ANIMATION_DURATION, styles } from '../styles'; -import { useTheme } from '../../../theme'; -import { showActionSheetRef } from '../../../containers/ActionSheet'; -import Dialpad from './Dialpad/Dialpad'; - -export const CallButtons = () => { - 'use memo'; - - const { colors } = useTheme(); - const { width, height } = useResponsiveLayout(); - const isLandscape = width > height; - - const callState = useCallStore(state => state.callState); - const isMuted = useCallStore(state => state.isMuted); - const isOnHold = useCallStore(state => state.isOnHold); - const isSpeakerOn = useCallStore(state => state.isSpeakerOn); - - const toggleMute = useCallStore(state => state.toggleMute); - const toggleHold = useCallStore(state => state.toggleHold); - const toggleSpeaker = useCallStore(state => state.toggleSpeaker); - const endCall = useCallStore(state => state.endCall); - - const controlsVisible = useControlsVisible(); - - const containerStyle = useAnimatedStyle(() => ({ - opacity: withTiming(controlsVisible ? 1 : 0, { duration: CONTROLS_ANIMATION_DURATION }), - transform: [{ translateY: withTiming(controlsVisible ? 0 : 100, { duration: CONTROLS_ANIMATION_DURATION }) }] - })); - - const isConnecting = callState === 'none' || callState === 'ringing' || callState === 'accepted'; - - const handleMessage = () => { - // TODO: Navigate to chat with caller - // Navigation.navigate('RoomView', { rid, t: 'd' }); - alert('Message'); - }; - - const handleDialpad = () => { - showActionSheetRef({ children: }); - }; - - const handleEndCall = () => { - endCall(); - }; - - return ( - - - - - - - - - - - - - - ); -}; -``` - -- [ ] **Step 7: Add landscape story to `CallView.stories.tsx`** - -In `app/views/CallView/CallView.stories.tsx`, add this story at the end and a landscape decorator helper: - -```tsx -const landscapeResponsiveLayoutValue = { - fontScale: 1, - fontScaleLimited: 1, - isLargeFontScale: false, - rowHeight: 75, - rowHeightCondensed: 60, - width: 800, - height: 400 -}; - -export const LandscapeConnectedCall = () => { - setStoreState({ callState: 'active', callStartTime: mockCallStartTime - 61000 }); - return ( - - - - ); -}; -``` - -- [ ] **Step 8: Run all CallView tests** - -```bash -yarn test --testPathPattern=CallView/index -``` - -Expected: PASS (all tests including the new landscape test) - -- [ ] **Step 9: Run lint** - -```bash -yarn lint -``` - -Expected: no errors - -- [ ] **Step 10: Commit** - -```bash -git add app/views/CallView/styles.ts app/views/CallView/index.tsx app/views/CallView/components/CallerInfo.tsx app/views/CallView/components/CallButtons.tsx app/views/CallView/CallView.stories.tsx app/views/CallView/index.test.tsx -git commit -m "feat(a11y): landscape layout for CallView" -``` - ---- - -## Final check - -- [ ] **Run full test suite** - -```bash -yarn test --testPathPattern="CallView|useIsScreenReaderEnabled|PeerItem|DialpadButton" -``` - -Expected: all PASS - -- [ ] **Run lint** - -```bash -yarn lint -``` - -Expected: no errors diff --git a/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md b/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md deleted file mode 100644 index 4a8fae72a20..00000000000 --- a/docs/superpowers/specs/2026-04-06-voip-accessibility-design.md +++ /dev/null @@ -1,126 +0,0 @@ -# VoIP Accessibility Design - -**Date:** 2026-04-06 -**Branch:** feat.voip-lib-new -**Scope:** Screen reader (VoiceOver/TalkBack), landscape layout, and font scaling for new VoIP screens. - ---- - -## Problem - -The new VoIP screens introduced in `feat.voip-lib-new` are missing accessibility support. Key gaps: - -- `CallView` has no landscape layout — controls overlap on rotation -- `CallerInfo` tap-to-hide controls is unusable by screen reader users -- `DialpadButton` and `PeerItem` are interactive with no accessible labels or roles -- `CallButtons` container remains focusable when visually hidden - -Already well-covered: `IncomingCallNotification`, `CallHeader`, `CallActionButton`, `EndCall`, `Collapse`. - ---- - -## Approach - -Prop-by-prop gap fill following existing codebase patterns. One new hook (`useIsScreenReaderEnabled`). No new abstractions beyond that. - ---- - -## Architecture - -### New hook — `useIsScreenReaderEnabled` - -**File:** `app/lib/hooks/useIsScreenReaderEnabled.ts` - -Listens to `AccessibilityInfo.isScreenReaderEnabled()` and the `screenReaderChanged` event. Returns a `boolean` that updates reactively. - -```ts -export const useIsScreenReaderEnabled = (): boolean => { - const [enabled, setEnabled] = useState(false); - useEffect(() => { - AccessibilityInfo.isScreenReaderEnabled().then(setEnabled); - const sub = AccessibilityInfo.addEventListener('screenReaderChanged', setEnabled); - return () => sub.remove(); - }, []); - return enabled; -}; -``` - -Used by `CallerInfo` to disable tap-to-hide when a screen reader is active. - ---- - -## Components - -### CallView — landscape layout - -**File:** `app/views/CallView/index.tsx` + `styles.ts` - -- Use `useResponsiveLayout()` (already in context) to derive `isLandscape = width > height`. Do **not** call `useWindowDimensions()` directly — `useResponsiveLayout` is the single source of truth for dimensions and avoids conflicts with tablet support. -- In landscape: `contentContainer` switches to `flexDirection: 'row'`. `CallerInfo` takes ~40% width (left), `CallButtons` takes ~60% width (right). -- `isLandscape` is passed as a prop to `CallerInfo` and `CallButtons`. -- Avatar shrinks from 120 → 80 in landscape to prevent overlap. -- Buttons grid retains 3×2 layout with reduced horizontal padding. - -### CallerInfo — screen reader fix + label - -**File:** `app/views/CallView/components/CallerInfo.tsx` - -- Import `useIsScreenReaderEnabled`. -- When screen reader is enabled: `onPress` is `undefined` (controls stay visible, toggling is disabled). -- `useControlsVisible` is modified to always return `true` when screen reader is enabled, so both `CallerInfo` and `CallButtons` derive the correct value automatically. -- Pressable gains `accessibilityLabel={I18n.t('Toggle_call_controls')}` and `accessibilityRole='button'`. - -### CallButtons — hide from screen reader when not visible - -**File:** `app/views/CallView/components/CallButtons.tsx` - -- `Animated.View` gains `accessibilityElementsHidden={!controlsVisible}`. -- Ensures screen reader skips hidden controls (belt-and-suspenders with the `useControlsVisible` fix above). - -### DialpadButton — label + role - -**File:** `app/views/CallView/components/Dialpad/DialpadButton.tsx` - -```tsx -accessibilityLabel={letters ? `${digit} ${letters}` : digit} -accessibilityRole='button' -``` - -- `fontScaleLimited` from `useResponsiveLayout` applied to digit font size if testing reveals overflow at large scales. - -### PeerItem — label + role - -**File:** `app/containers/NewMediaCall/PeerItem.tsx` - -```tsx -accessibilityLabel={item.label} -accessibilityRole='button' -``` - -`PeerItemInner` requires no changes — non-interactive, covered by parent label. - ---- - -## Font scaling - -All `Text` components in VoIP screens scale automatically (RN default, `allowFontScaling` defaults to `true`). No explicit opt-out. - -Fixed-size containers (`actionButton` 64×64, avatar 120px) are touch targets and do not need to scale. - -Apply `fontScaleLimited` only where testing reveals actual layout breakage, following the existing `FONT_SCALE_LIMIT = 1.3` pattern in `useResponsiveLayout`. - ---- - -## i18n keys needed - -| Key | Value (EN) | -| ---------------------- | ---------------------- | -| `Toggle_call_controls` | `Toggle call controls` | - ---- - -## What is NOT in scope - -- `IncomingCallNotification`, `CallHeader`, `CallActionButton`, `EndCall`, `Collapse` — already covered -- A11y ordering (`A11y.Order`) for CallView — buttons already have individual labels; ordering is not needed -- `announceForAccessibility` on call state changes — out of scope for this task From a37efccd390a9a5d3fc4d32817a7794003d3cfe4 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 9 Apr 2026 14:20:47 -0300 Subject: [PATCH 23/24] Fix lint --- .../__snapshots__/index.test.tsx.snap | 234 +++++++++++------- app/views/CallView/components/CallButtons.tsx | 15 +- app/views/CallView/components/CallerInfo.tsx | 2 +- 3 files changed, 155 insertions(+), 96 deletions(-) diff --git a/app/views/CallView/__snapshots__/index.test.tsx.snap b/app/views/CallView/__snapshots__/index.test.tsx.snap index 51e40a589db..ad5196e4414 100644 --- a/app/views/CallView/__snapshots__/index.test.tsx.snap +++ b/app/views/CallView/__snapshots__/index.test.tsx.snap @@ -195,11 +195,14 @@ exports[`Story Snapshots: ConnectedCall should match snapshot 1`] = ` > @@ -500,11 +503,14 @@ exports[`Story Snapshots: ConnectedCall should match snapshot 1`] = ` @@ -1005,11 +1011,14 @@ exports[`Story Snapshots: ConnectingCall should match snapshot 1`] = ` > @@ -1316,11 +1325,14 @@ exports[`Story Snapshots: ConnectingCall should match snapshot 1`] = ` @@ -1823,11 +1835,14 @@ exports[`Story Snapshots: MutedAndOnHold should match snapshot 1`] = ` > @@ -2128,11 +2143,14 @@ exports[`Story Snapshots: MutedAndOnHold should match snapshot 1`] = ` @@ -2633,11 +2651,14 @@ exports[`Story Snapshots: MutedCall should match snapshot 1`] = ` > @@ -2938,11 +2959,14 @@ exports[`Story Snapshots: MutedCall should match snapshot 1`] = ` @@ -3443,11 +3467,14 @@ exports[`Story Snapshots: OnHoldCall should match snapshot 1`] = ` > @@ -3748,11 +3775,14 @@ exports[`Story Snapshots: OnHoldCall should match snapshot 1`] = ` @@ -4253,11 +4283,14 @@ exports[`Story Snapshots: SpeakerOn should match snapshot 1`] = ` > @@ -4558,11 +4591,14 @@ exports[`Story Snapshots: SpeakerOn should match snapshot 1`] = ` @@ -5061,11 +5097,14 @@ exports[`Story Snapshots: TabletConnectedCall should match snapshot 1`] = ` > @@ -5858,11 +5897,14 @@ exports[`Story Snapshots: TabletConnectingCall should match snapshot 1`] = ` > @@ -6663,11 +6705,14 @@ exports[`Story Snapshots: TabletMutedAndOnHold should match snapshot 1`] = ` > @@ -7460,11 +7505,14 @@ exports[`Story Snapshots: TabletMutedCall should match snapshot 1`] = ` > @@ -8257,11 +8305,14 @@ exports[`Story Snapshots: TabletOnHoldCall should match snapshot 1`] = ` > @@ -9054,11 +9105,14 @@ exports[`Story Snapshots: TabletSpeakerOn should match snapshot 1`] = ` > diff --git a/app/views/CallView/components/CallButtons.tsx b/app/views/CallView/components/CallButtons.tsx index 694b0c545b8..eebe55ad8fc 100644 --- a/app/views/CallView/components/CallButtons.tsx +++ b/app/views/CallView/components/CallButtons.tsx @@ -11,6 +11,7 @@ import { useTheme } from '../../../theme'; import { showActionSheetRef } from '../../../containers/ActionSheet'; import Dialpad from './Dialpad/Dialpad'; import { useCallLayoutMode } from '../useCallLayoutMode'; +import { useResponsiveLayout } from '../../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; import { type TIconsName } from '../../../containers/CustomIcon'; interface ICallButtonConfig { @@ -27,6 +28,8 @@ export const CallButtons = () => { const { colors } = useTheme(); const { layoutMode } = useCallLayoutMode(); + const { width, height } = useResponsiveLayout(); + const isLandscape = width > height; const callState = useCallStore(state => state.callState); const isMuted = useCallStore(state => state.isMuted); @@ -114,8 +117,10 @@ export const CallButtons = () => { return ( { importantForAccessibility={controlsVisible ? 'auto' : 'no-hide-descendants'} testID='call-buttons'> {layoutMode === 'wide' ? ( - + {buttons.map(btn => ( { ) : ( <> - + {buttons.slice(0, 3).map(btn => ( { /> ))} - + {buttons.slice(3, 6).map(btn => ( { testID='caller-info-toggle' onPress={isScreenReaderEnabled ? undefined : toggleControlsVisible} accessibilityLabel={I18n.t('Toggle_call_controls')} - accessibilityRole='button'> + accessibilityRole={isScreenReaderEnabled ? 'none' : 'button'}> From 4067d1535697c929ef768a211e27d5ee8db18a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ot=C3=A1vio=20Stasiak?= <91474186+OtavioStasiak@users.noreply.github.com> Date: Fri, 10 Apr 2026 08:14:04 -0300 Subject: [PATCH 24/24] fix: podfile (#7122) --- ios/Podfile.lock | 74 ++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index d3561367b0f..7e43f3188bd 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -137,33 +137,33 @@ PODS: - ExpoModulesCore - fast_float (8.0.0) - FBLazyVector (0.81.5) - - Firebase/AnalyticsWithoutAdIdSupport (11.11.0): + - Firebase/AnalyticsWithoutAdIdSupport (11.10.0): - Firebase/CoreOnly - - FirebaseAnalytics/WithoutAdIdSupport (~> 11.11.0) - - Firebase/CoreOnly (11.11.0): - - FirebaseCore (~> 11.11.0) - - Firebase/Crashlytics (11.11.0): + - FirebaseAnalytics/WithoutAdIdSupport (~> 11.10.0) + - Firebase/CoreOnly (11.10.0): + - FirebaseCore (~> 11.10.0) + - Firebase/Crashlytics (11.10.0): - Firebase/CoreOnly - - FirebaseCrashlytics (~> 11.11.0) - - FirebaseAnalytics/WithoutAdIdSupport (11.11.0): - - FirebaseCore (~> 11.11.0) + - FirebaseCrashlytics (~> 11.10.0) + - FirebaseAnalytics/WithoutAdIdSupport (11.10.0): + - FirebaseCore (~> 11.10.0) - FirebaseInstallations (~> 11.0) - - GoogleAppMeasurement/WithoutAdIdSupport (= 11.11.0) + - GoogleAppMeasurement/WithoutAdIdSupport (= 11.10.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - FirebaseCore (11.11.0): - - FirebaseCoreInternal (~> 11.11.0) + - FirebaseCore (11.10.0): + - FirebaseCoreInternal (~> 11.10.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/Logger (~> 8.0) - - FirebaseCoreExtension (11.11.0): - - FirebaseCore (~> 11.11.0) - - FirebaseCoreInternal (11.11.0): + - FirebaseCoreExtension (11.10.0): + - FirebaseCore (~> 11.10.0) + - FirebaseCoreInternal (11.10.0): - "GoogleUtilities/NSData+zlib (~> 8.0)" - - FirebaseCrashlytics (11.11.0): - - FirebaseCore (~> 11.11.0) + - FirebaseCrashlytics (11.10.0): + - FirebaseCore (~> 11.10.0) - FirebaseInstallations (~> 11.0) - FirebaseRemoteConfigInterop (~> 11.0) - FirebaseSessions (~> 11.0) @@ -171,15 +171,15 @@ PODS: - GoogleUtilities/Environment (~> 8.0) - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - FirebaseInstallations (11.11.0): - - FirebaseCore (~> 11.11.0) + - FirebaseInstallations (11.10.0): + - FirebaseCore (~> 11.10.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) - PromisesObjC (~> 2.4) - FirebaseRemoteConfigInterop (11.15.0) - - FirebaseSessions (11.11.0): - - FirebaseCore (~> 11.11.0) - - FirebaseCoreExtension (~> 11.11.0) + - FirebaseSessions (11.10.0): + - FirebaseCore (~> 11.10.0) + - FirebaseCoreExtension (~> 11.10.0) - FirebaseInstallations (~> 11.0) - GoogleDataTransport (~> 10.0) - GoogleUtilities/Environment (~> 8.0) @@ -188,7 +188,7 @@ PODS: - PromisesSwift (~> 2.1) - fmt (11.0.2) - glog (0.3.5) - - GoogleAppMeasurement/WithoutAdIdSupport (11.11.0): + - GoogleAppMeasurement/WithoutAdIdSupport (11.10.0): - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) @@ -245,7 +245,7 @@ PODS: - libwebp/sharpyuv (1.5.0) - libwebp/webp (1.5.0): - libwebp/sharpyuv - - MobileCrypto (0.2.2): + - MobileCrypto (0.2.0): - boost - DoubleConversion - fast_float @@ -3026,15 +3026,15 @@ PODS: - Yoga - RNDeviceInfo (11.1.0): - React-Core - - RNFBAnalytics (21.14.0): - - Firebase/AnalyticsWithoutAdIdSupport (= 11.11.0) + - RNFBAnalytics (21.12.2): + - Firebase/AnalyticsWithoutAdIdSupport (= 11.10.0) - React-Core - RNFBApp - - RNFBApp (21.14.0): - - Firebase/CoreOnly (= 11.11.0) + - RNFBApp (21.12.2): + - Firebase/CoreOnly (= 11.10.0) - React-Core - - RNFBCrashlytics (21.14.0): - - Firebase/Crashlytics (= 11.11.0) + - RNFBCrashlytics (21.12.2): + - Firebase/Crashlytics (= 11.10.0) - FirebaseCoreExtension - React-Core - RNFBApp @@ -3934,15 +3934,15 @@ SPEC CHECKSUMS: ExpoWebBrowser: 17b064c621789e41d4816c95c93f429b84971f52 fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 FBLazyVector: 5beb8028d5a2e75dd9634917f23e23d3a061d2aa - Firebase: 6a8f201c61eda24e98f1ce2b44b1b9c2caf525cc - FirebaseAnalytics: acfa848bf81e1a4dbf60ef1f0eddd7328fe6673e - FirebaseCore: 2321536f9c423b1f857e047a82b8a42abc6d9e2c - FirebaseCoreExtension: 3a64994969dd05f4bcb7e6896c654eded238e75b - FirebaseCoreInternal: 31ee350d87b30a9349e907f84bf49ef8e6791e5a - FirebaseCrashlytics: 5058c465e10782f54337b394c37254e0595174e9 - FirebaseInstallations: 781e0e37aa0e1c92b44d00e739aba79ad31b2dba + Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2 + FirebaseAnalytics: 4e42333f02cf78ed93703a5c36f36dd518aebdef + FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7 + FirebaseCoreExtension: 6f357679327f3614e995dc7cf3f2d600bdc774ac + FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679 + FirebaseCrashlytics: 84b073c997235740e6a951b7ee49608932877e5c + FirebaseInstallations: 9980995bdd06ec8081dfb6ab364162bdd64245c3 FirebaseRemoteConfigInterop: 1c6135e8a094cc6368949f5faeeca7ee8948b8aa - FirebaseSessions: f5c6bfeb66a7202deaf33352017bb6365e395820 + FirebaseSessions: 9b3b30947b97a15370e0902ee7a90f50ef60ead6 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 GoogleAppMeasurement: 8a82b93a6400c8e6551c0bcd66a9177f2e067aed