From df672062d70f3af0f0e4b7910278370816611b1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20=C5=A0=C4=87eki=C4=87?= Date: Wed, 23 Sep 2026 02:41:47 +0000 Subject: [PATCH] fix(mobile): remove developer feature-flag rows from Preferences MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Surface: mobile-app Explorer finding: 4 visual defects on android: The Preferences screen exposes internal ; On the selected 'Auto Efficient' row the; The blue top banner reads 'Refreshing... (+1 more) The user-agent explorer found these 4 while using the app like a user. They are one kind of defect on one platform, so they are ONE item: the pull request must fix and prove every one of them. One must-run scenario per finding: the plan needs 4 musts, one for each finding below. The explorer never edits product code. Evidence (from the device runs): --- Finding 1 of 4: account-en: The Preferences screen exposes internal feature-flag slugs and raw state as user-facing rows ('mobile-pr-review', 'mobile-quick-chat', 'Enabled · default · not loaded'), which are developer words with no user meaning. Flow: account-en Found on revision: f2181ae79 Repro: 1. set this state first: seed coding-plans:demo-data; seed coding-plans:available-credentials admin-overview; seed coding-plans:occupied-minimax-byok d43d5aa5-1e1b-4af7-8196-d26c8ff6117f admin-overview; credits 20; uimode day; battery 40 charging; relaunch; reviews 3; the device in light mode 2. open the app on emulator-5602 3. reach account-en 4. the capture shows the defect named below Observed: The Preferences screen exposes internal feature-flag slugs and raw state as user-facing rows ('mobile-pr-review', 'mobile-quick-chat', 'Enabled · default · not loaded'), which are developer words with no user meaning. Expected: the screen --- .../app-unlock-screen.test-helpers.tsx | 11 +- .../feature-flags-section.mounted.test.tsx | 144 ----------- .../src/components/feature-flags-section.tsx | 64 ----- ...nces-screen.feature-flags.mounted.test.tsx | 235 ------------------ .../preferences-screen.mounted.test.tsx | 27 +- .../src/components/preferences-screen.tsx | 3 - .../settings-screens-a11y.mounted.test.tsx | 3 - apps/mobile/src/i18n/locales/af.json | 5 - apps/mobile/src/i18n/locales/am.json | 5 - apps/mobile/src/i18n/locales/ar.json | 5 - apps/mobile/src/i18n/locales/az.json | 5 - apps/mobile/src/i18n/locales/be.json | 5 - apps/mobile/src/i18n/locales/bg.json | 5 - apps/mobile/src/i18n/locales/bn.json | 5 - apps/mobile/src/i18n/locales/bs.json | 5 - apps/mobile/src/i18n/locales/ca.json | 5 - apps/mobile/src/i18n/locales/ckb.json | 5 - apps/mobile/src/i18n/locales/cs.json | 5 - apps/mobile/src/i18n/locales/cy.json | 5 - apps/mobile/src/i18n/locales/da.json | 5 - apps/mobile/src/i18n/locales/de.json | 5 - apps/mobile/src/i18n/locales/el.json | 5 - apps/mobile/src/i18n/locales/en.json | 5 - apps/mobile/src/i18n/locales/es.json | 5 - apps/mobile/src/i18n/locales/et.json | 5 - apps/mobile/src/i18n/locales/eu.json | 5 - apps/mobile/src/i18n/locales/fa.json | 5 - apps/mobile/src/i18n/locales/fi.json | 5 - apps/mobile/src/i18n/locales/fil.json | 5 - apps/mobile/src/i18n/locales/fr.json | 5 - apps/mobile/src/i18n/locales/ga.json | 5 - apps/mobile/src/i18n/locales/gl.json | 5 - apps/mobile/src/i18n/locales/gu.json | 5 - apps/mobile/src/i18n/locales/ha.json | 5 - apps/mobile/src/i18n/locales/he.json | 5 - apps/mobile/src/i18n/locales/hi.json | 5 - apps/mobile/src/i18n/locales/hr.json | 5 - apps/mobile/src/i18n/locales/ht.json | 5 - apps/mobile/src/i18n/locales/hu.json | 5 - apps/mobile/src/i18n/locales/hy.json | 5 - apps/mobile/src/i18n/locales/id.json | 5 - apps/mobile/src/i18n/locales/ig.json | 5 - apps/mobile/src/i18n/locales/is.json | 5 - apps/mobile/src/i18n/locales/it.json | 5 - apps/mobile/src/i18n/locales/ja.json | 5 - apps/mobile/src/i18n/locales/ka.json | 5 - apps/mobile/src/i18n/locales/kk.json | 5 - apps/mobile/src/i18n/locales/km.json | 5 - apps/mobile/src/i18n/locales/kn.json | 5 - apps/mobile/src/i18n/locales/ko.json | 5 - apps/mobile/src/i18n/locales/lo.json | 5 - apps/mobile/src/i18n/locales/lt.json | 5 - apps/mobile/src/i18n/locales/lv.json | 5 - apps/mobile/src/i18n/locales/mg.json | 5 - apps/mobile/src/i18n/locales/mi.json | 5 - apps/mobile/src/i18n/locales/mk.json | 5 - apps/mobile/src/i18n/locales/ml.json | 5 - apps/mobile/src/i18n/locales/mn.json | 5 - apps/mobile/src/i18n/locales/mr.json | 5 - apps/mobile/src/i18n/locales/ms.json | 5 - apps/mobile/src/i18n/locales/mt.json | 5 - apps/mobile/src/i18n/locales/my.json | 5 - apps/mobile/src/i18n/locales/nb.json | 5 - apps/mobile/src/i18n/locales/ne.json | 5 - apps/mobile/src/i18n/locales/nl.json | 5 - apps/mobile/src/i18n/locales/om.json | 5 - apps/mobile/src/i18n/locales/or.json | 5 - apps/mobile/src/i18n/locales/pa.json | 5 - apps/mobile/src/i18n/locales/pl.json | 5 - apps/mobile/src/i18n/locales/ps.json | 5 - apps/mobile/src/i18n/locales/pt-BR.json | 5 - apps/mobile/src/i18n/locales/pt.json | 5 - apps/mobile/src/i18n/locales/ro.json | 5 - apps/mobile/src/i18n/locales/ru.json | 5 - apps/mobile/src/i18n/locales/si.json | 5 - apps/mobile/src/i18n/locales/sk.json | 5 - apps/mobile/src/i18n/locales/sl.json | 5 - apps/mobile/src/i18n/locales/so.json | 5 - apps/mobile/src/i18n/locales/sq.json | 5 - apps/mobile/src/i18n/locales/sr.json | 5 - apps/mobile/src/i18n/locales/sv.json | 5 - apps/mobile/src/i18n/locales/sw.json | 5 - apps/mobile/src/i18n/locales/ta.json | 5 - apps/mobile/src/i18n/locales/te.json | 5 - apps/mobile/src/i18n/locales/th.json | 5 - apps/mobile/src/i18n/locales/tr.json | 5 - apps/mobile/src/i18n/locales/uk.json | 5 - apps/mobile/src/i18n/locales/ur.json | 5 - apps/mobile/src/i18n/locales/uz.json | 5 - apps/mobile/src/i18n/locales/vi.json | 5 - apps/mobile/src/i18n/locales/yo.json | 5 - apps/mobile/src/i18n/locales/zh-Hans.json | 5 - apps/mobile/src/i18n/locales/zh-Hant.json | 5 - apps/mobile/src/i18n/locales/zu.json | 5 - .../analytics/posthog.feature-flags.test.ts | 95 ------- apps/mobile/src/lib/analytics/posthog.ts | 88 ------- apps/mobile/src/lib/feature-flags.ts | 2 +- tools/i18n/check-catalogs.mjs | 7 - 98 files changed, 27 insertions(+), 1087 deletions(-) delete mode 100644 apps/mobile/src/components/feature-flags-section.mounted.test.tsx delete mode 100644 apps/mobile/src/components/feature-flags-section.tsx delete mode 100644 apps/mobile/src/components/preferences-screen.feature-flags.mounted.test.tsx diff --git a/apps/mobile/src/components/app-unlock-screen.test-helpers.tsx b/apps/mobile/src/components/app-unlock-screen.test-helpers.tsx index 48cf092e4f..b5dcf10b85 100644 --- a/apps/mobile/src/components/app-unlock-screen.test-helpers.tsx +++ b/apps/mobile/src/components/app-unlock-screen.test-helpers.tsx @@ -344,14 +344,11 @@ vi.mock('@/lib/hooks/use-trusted-hosts', () => ({ useTrustedHosts: () => ({ trustedHosts: [], hasLoaded: true }), })); vi.mock('@/lib/picker-bridge', () => ({ setLanguagePickerBridge: vi.fn() })); -// The preferences screen mounts the feature-flag debug surface, which reads -// PostHog flag statuses; the real module pulls in expo-application's native -// chain, which no mounted test loads. An empty registry keeps the section -// out of these scenes. `subscribeToPostHogReady` is listed because the consent -// record module (reached through the (app) layout's TourAutoOpen) registers a -// load-time listener; these scenes never exercise telemetry readiness. +// `subscribeToPostHogReady` is listed because the consent record module +// (reached through the (app) layout's TourAutoOpen) registers a load-time +// listener; the real module pulls in expo-application's native chain, which no +// mounted test loads. These scenes never exercise telemetry readiness. vi.mock('@/lib/analytics/posthog', () => ({ - useFeatureFlagStatuses: () => [], subscribeToPostHogReady: () => () => undefined, })); diff --git a/apps/mobile/src/components/feature-flags-section.mounted.test.tsx b/apps/mobile/src/components/feature-flags-section.mounted.test.tsx deleted file mode 100644 index 9f30facf92..0000000000 --- a/apps/mobile/src/components/feature-flags-section.mounted.test.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import { createElement } from 'react'; -import { act, type ReactTestRenderer } from '@/test/renderer'; -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; - -import '@/i18n'; -import { FeatureFlagsSection } from '@/components/feature-flags-section'; -import { renderWithProviders } from '@/test/render-with-providers'; - -vi.hoisted(() => { - vi.stubGlobal('__DEV__', true); -}); -/** Statuses the mocked PostHog module reports; each test seeds this. */ -const posthog = vi.hoisted(() => ({ - statuses: [] as Record[], -})); -vi.mock('@/lib/analytics/posthog', () => ({ - useFeatureFlagStatuses: () => posthog.statuses, -})); - -vi.mock('react-native', () => ({ - View: 'View', -})); -vi.mock('@/components/ui/text', () => ({ Text: 'Text' })); - -let view: Awaited> | undefined = undefined; -async function flush(): Promise { - await act(async () => { - await vi.dynamicImportSettled(); - }); -} -async function mount(): Promise { - view = await renderWithProviders(createElement(FeatureFlagsSection)); - await flush(); - return view.renderer; -} - -/** All rendered Text strings, flattened (composed lines arrive as arrays). */ -function textLines(tree: ReactTestRenderer): string[] { - return tree.root - .findAll(node => typeof node.type === 'string' && (node.type as string) === 'Text') - .map(node => [node.props.children].flat().join('')); -} - -beforeEach(() => { - vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true); - vi.stubGlobal('__DEV__', true); - posthog.statuses = []; -}); -afterEach(() => { - view?.unmount(); - view = undefined; - vi.unstubAllGlobals(); -}); - -const applied = { - key: 'mobile-pr-review', - minAppVersion: '1.0.4', - defaultValue: true, - appVersion: '1.0.5', - applied: true, - value: true, - reason: 'applied', - loaded: true, -}; -const skipped = { - key: 'mobile-quick-chat', - minAppVersion: '1.0.6', - defaultValue: false, - appVersion: '1.0.5', - applied: false, - value: false, - reason: 'build-too-old', - loaded: true, -}; -const unloaded = { - key: 'mobile-pr-review', - minAppVersion: '1.0.4', - defaultValue: true, - appVersion: '1.0.8', - applied: false, - value: true, - reason: 'applied', - loaded: false, -}; - -describe('FeatureFlagsSection', () => { - it('lists every flag with the value the build acts on and why', async () => { - posthog.statuses = [applied, skipped]; - const tree = await mount(); - - const lines = textLines(tree); - expect(lines).toContain('Feature flags'); - expect(lines).toContain('mobile-pr-review'); - expect(lines).toContain('Enabled · remote · ≥ 1.0.4'); - expect(lines).toContain('mobile-quick-chat'); - expect(lines).toContain('Off · default · < 1.0.6'); - expect(lines).toContain('v1.0.5'); - }); - - it('marks a flag the build skips as default in use with the minimum version', async () => { - posthog.statuses = [skipped]; - const tree = await mount(); - - expect(textLines(tree)).toContain('Off · default · < 1.0.6'); - }); - - it('marks an applied flag as remote value in use', async () => { - posthog.statuses = [applied]; - const tree = await mount(); - - expect(textLines(tree)).toContain('Enabled · remote · ≥ 1.0.4'); - }); - - it('marks defaults in use while remote flags are not loaded yet', async () => { - posthog.statuses = [unloaded]; - const tree = await mount(); - - expect(textLines(tree)).toContain('Enabled · default · not loaded'); - }); - - it('marks a below-minimum flag with the version gate even before remote flags load', async () => { - // The staged v1.0.5 case: the gate is decided by the app version alone, so - // the row must read "< 1.0.6" whether or not PostHog ever returned a value. - posthog.statuses = [{ ...skipped, loaded: false }]; - const tree = await mount(); - - expect(textLines(tree)).toContain('Off · default · < 1.0.6'); - }); - - it('renders nothing when the registry is empty', async () => { - posthog.statuses = []; - const tree = await mount(); - - expect(textLines(tree)).toEqual([]); - }); - - it('renders nothing outside development', async () => { - vi.stubGlobal('__DEV__', false); - posthog.statuses = [applied]; - const tree = await mount(); - - expect(textLines(tree)).toEqual([]); - }); -}); diff --git a/apps/mobile/src/components/feature-flags-section.tsx b/apps/mobile/src/components/feature-flags-section.tsx deleted file mode 100644 index 001ee60072..0000000000 --- a/apps/mobile/src/components/feature-flags-section.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { View } from 'react-native'; -import { useTranslation } from 'react-i18next'; - -import { Text } from '@/components/ui/text'; -import { type FeatureFlagStatus, useFeatureFlagStatuses } from '@/lib/analytics/posthog'; - -/** - * Development-only debug surface for feature flags (Preferences). Lists every - * registered flag with what this build resolved it to and why, so a tester - * can see which flags the build applies and which it skips because the build - * predates the flag's minimum app version. Read-only: flags are controlled in - * PostHog. Renders nothing when `__DEV__` is false. - * - * Each row reads ` · · `, e.g. - * `Enabled · remote · ≥ 1.0.4`: the value the UI acts on, whether it came - * from PostHog or the flag's default, and the gate that decided. The source - * and relation copy is technical notation (see the i18n allowlist); the - * translated part is the value word and the section header. - */ -function FlagRow({ status }: { status: FeatureFlagStatus }) { - const { t } = useTranslation(); - const value = status.value ? t('common.enabled') : t('common.off'); - let reason = t('preferences.featureFlagNotLoaded'); - // A below-minimum build is decided by the app version alone: the gate copy - // must show even before (or without) a remote value arriving for the key. - if (status.loaded || status.reason === 'build-too-old') { - reason = status.applied - ? t('preferences.featureFlagApplied', { min: status.minAppVersion }) - : t('preferences.featureFlagSkipped', { min: status.minAppVersion }); - } - return ( - - {status.key} - - {value} · {reason} - - - ); -} - -export function FeatureFlagsSection() { - const { t } = useTranslation(); - const statuses = useFeatureFlagStatuses(); - if (!__DEV__ || statuses.length === 0) { - return null; - } - return ( - - - {t('preferences.featureFlags')} - - - {statuses.map(status => ( - - ))} - - - {t('preferences.featureFlagsBuild', { - version: statuses[0]?.appVersion ?? '?', - })} - - - ); -} diff --git a/apps/mobile/src/components/preferences-screen.feature-flags.mounted.test.tsx b/apps/mobile/src/components/preferences-screen.feature-flags.mounted.test.tsx deleted file mode 100644 index 75a385ad2c..0000000000 --- a/apps/mobile/src/components/preferences-screen.feature-flags.mounted.test.tsx +++ /dev/null @@ -1,235 +0,0 @@ -import { act, type ReactTestRenderer } from '@/test/renderer'; -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; - -import '@/i18n'; -import { PreferencesScreen } from '@/components/preferences-screen'; -import { AppUnlockProvider } from '@/lib/app-unlock-context'; -import { renderWithProviders } from '@/test/render-with-providers'; - -vi.hoisted(() => { - vi.stubGlobal('__DEV__', true); -}); -const push = vi.hoisted(() => vi.fn()); -const setLanguagePickerBridge = vi.hoisted(() => vi.fn()); -// The screen mounts the feature-flag debug surface, which reads PostHog flag -// statuses; the cases below seed the registry the section renders. -const posthog = vi.hoisted(() => ({ - statuses: [] as Record[], -})); -vi.mock('@/lib/analytics/posthog', () => ({ - useFeatureFlagStatuses: () => posthog.statuses, -})); -const native = vi.hoisted(() => ({ - hasHardwareAsync: vi.fn(), - isEnrolledAsync: vi.fn(), - getEnrolledLevelAsync: vi.fn(), - authenticateAsync: vi.fn(), - SecurityLevel: { NONE: 0, SECRET: 1, BIOMETRIC_WEAK: 2, BIOMETRIC_STRONG: 3 }, -})); -const storage = vi.hoisted(() => ({ - value: null as string | null, - getItemAsync: vi.fn(), - setItemAsync: vi.fn(), -})); -vi.mock('expo-local-authentication', () => native); -vi.mock('expo-secure-store', () => storage); -vi.mock('@/lib/config', () => ({ E2E_SECURE_STORE_FAULT_MS: 0 })); -vi.mock('react-native-safe-area-context', () => ({ - useSafeAreaInsets: () => ({ top: 0, bottom: 0, left: 0, right: 0 }), -})); -vi.mock('@/components/centered-state', () => ({ CenteredState: 'CenteredState' })); -vi.mock('@/components/centered-state-surface', () => ({ - NativeStateSurface: 'NativeStateSurface', - StateSurface: 'StateSurface', -})); -vi.mock('@/components/ui/skeleton', () => ({ Skeleton: 'Skeleton' })); -vi.mock('@/components/ui/activity-indicator', () => ({ ActivityIndicator: 'ActivityIndicator' })); -vi.mock('react-native', () => ({ - Switch: 'Switch', - View: 'View', - ActivityIndicator: 'ActivityIndicator', - Platform: { OS: 'android' }, - AccessibilityInfo: {}, - AppState: { currentState: 'active', addEventListener: () => ({ remove: () => undefined }) }, -})); -vi.mock('expo-router', () => ({ - useRouter: () => ({ push }), -})); -vi.mock('@/components/ui/icons', () => ({ - Bell: 'Bell', - Brain: 'Brain', - CornerDownLeft: 'CornerDownLeft', - Cpu: 'Cpu', - Globe: 'Globe', - MessageSquare: 'MessageSquare', - Mic: 'Mic', - Shield: 'Shield', - SlidersHorizontal: 'SlidersHorizontal', - Smartphone: 'Smartphone', - Wallet: 'Wallet', - WandSparkles: 'WandSparkles', -})); -vi.mock('@/components/language-picker-sheet', () => ({ - LanguagePickerSheet: 'LanguagePickerSheet', -})); -vi.mock('@/lib/auth/push-registration-reconciliation', () => ({ - attemptPushRegistrationReconciliation: vi.fn(), -})); -vi.mock('@/lib/hooks/use-current-user-id', () => ({ - useCurrentUserId: () => ({ userId: 'user-1' }), -})); -vi.mock('@/lib/hooks/use-language-preference', () => ({ - getResolvedLanguage: () => 'en', - useLanguagePreference: () => ({ preference: 'device', hasLoaded: true }), -})); -vi.mock('@/components/screen-header', () => ({ ScreenHeader: () => null })); -vi.mock('@/components/tab-screen', () => ({ TabScreenScrollView: 'ScrollView' })); -vi.mock('@/components/ui/configure-row', () => ({ ConfigureRow: 'ConfigureRow' })); -vi.mock('@/components/ui/segmented-control', () => ({ SegmentedControl: 'SegmentedControl' })); -vi.mock('@/components/ui/text', () => ({ Text: 'Text' })); -vi.mock('@/lib/picker-bridge', () => ({ - setLanguagePickerBridge, -})); -vi.mock('@/lib/hooks/use-keep-screen-on-preference', () => ({ - useKeepScreenOnPreference: () => ({ - keepScreenOn: false, - hasLoaded: true, - setKeepScreenOn: vi.fn(), - }), -})); -vi.mock('@/lib/hooks/use-pr-review-footer-preference', () => ({ - usePrReviewFooterPreference: () => ({ - prReviewFooter: true, - hasLoaded: true, - setPrReviewFooter: vi.fn(), - }), -})); -vi.mock('@/lib/hooks/use-reasoning-preference', () => ({ - useReasoningPreference: () => ({ - defaultExpanded: false, - hasLoaded: true, - setDefaultExpanded: vi.fn(), - }), -})); -vi.mock('@/lib/hooks/use-theme-preference', () => ({ - setThemePreference: vi.fn(), - useThemePreference: () => ({ preference: 'system' }), -})); -// The gateway preference store loads Sentry at module scope; the real RN CJS -// it transitively requires cannot resolve under vitest (see -// preferences-screen.mounted.test.tsx for the same mock). -vi.mock('@/lib/voice-input/gateway/gateway-transcription-preference', () => ({ - useGatewayTranscriptionPreference: () => ({ - gatewayTranscriptionEnabled: false, - hasLoaded: true, - setGatewayTranscriptionEnabled: vi.fn(), - }), - useGatewayTranscriptionModel: () => null, -})); -vi.mock('@/lib/hooks/use-return-sends-message-preference', () => ({ - useReturnSendsMessagePreference: () => ({ - returnSendsMessage: false, - hasLoaded: true, - setReturnSendsMessage: vi.fn(), - }), -})); -vi.mock('@/lib/hooks/use-theme-colors', () => ({ - useThemeColors: () => ({ secondaryForeground: '#000000', mutedForeground: '#000000' }), -})); -vi.mock('@/lib/hooks/use-trusted-hosts', () => ({ - useTrustedHosts: () => ({ trustedHosts: [], hasLoaded: true }), -})); - -let view: Awaited> | undefined = undefined; -async function flush(update?: () => void) { - await act(async () => { - update?.(); - await vi.dynamicImportSettled(); - }); -} -async function mountPreferences(): Promise { - storage.getItemAsync.mockResolvedValue(null); - view = await renderWithProviders(, { - wrapper: ({ children }) => ( - {children} - ), - }); - await flush(); - return view.renderer; -} -beforeEach(() => { - vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true); - vi.stubGlobal('__DEV__', true); - vi.resetAllMocks(); - posthog.statuses = []; - native.hasHardwareAsync.mockResolvedValue(true); - native.isEnrolledAsync.mockResolvedValue(true); - native.getEnrolledLevelAsync.mockResolvedValue(3); - native.authenticateAsync.mockResolvedValue({ success: true }); -}); -afterEach(() => { - view?.unmount(); - view = undefined; - vi.unstubAllGlobals(); -}); - -describe('PreferencesScreen feature-flag debug surface', () => { - it('hides the section outside development', async () => { - vi.stubGlobal('__DEV__', false); - posthog.statuses = [ - { - key: 'mobile-pr-review', - minAppVersion: '1.0.4', - defaultValue: true, - appVersion: '1.0.5', - applied: true, - value: true, - reason: 'applied', - loaded: true, - }, - ]; - const renderer = await mountPreferences(); - - const lines = renderer.root - .findAll(node => typeof node.type === 'string' && (node.type as string) === 'Text') - .map(node => [node.props.children].flat().join('')); - expect(lines).not.toContain('Feature flags'); - expect(lines).not.toContain('mobile-pr-review'); - }); - - it('lists which flags the build applies and which it skips, with reasons', async () => { - posthog.statuses = [ - { - key: 'mobile-pr-review', - minAppVersion: '1.0.4', - defaultValue: true, - appVersion: '1.0.5', - applied: true, - value: true, - reason: 'applied', - loaded: true, - }, - { - key: 'mobile-quick-chat', - minAppVersion: '1.0.6', - defaultValue: false, - appVersion: '1.0.5', - applied: false, - value: false, - reason: 'build-too-old', - loaded: true, - }, - ]; - const renderer = await mountPreferences(); - - const lines = renderer.root - .findAll(node => typeof node.type === 'string' && (node.type as string) === 'Text') - .map(node => [node.props.children].flat().join('')); - expect(lines).toContain('Feature flags'); - expect(lines).toContain('mobile-pr-review'); - expect(lines).toContain('Enabled · remote · ≥ 1.0.4'); - expect(lines).toContain('mobile-quick-chat'); - expect(lines).toContain('Off · default · < 1.0.6'); - expect(lines).toContain('v1.0.5'); - }); -}); diff --git a/apps/mobile/src/components/preferences-screen.mounted.test.tsx b/apps/mobile/src/components/preferences-screen.mounted.test.tsx index ff37cd92fe..832f00ee5a 100644 --- a/apps/mobile/src/components/preferences-screen.mounted.test.tsx +++ b/apps/mobile/src/components/preferences-screen.mounted.test.tsx @@ -9,11 +9,6 @@ vi.hoisted(() => { vi.stubGlobal('__DEV__', false); }); const push = vi.hoisted(() => vi.fn()); -// The screen tree imports the development-only feature-flag section; that -// surface is covered in preferences-screen.feature-flags.mounted.test.tsx. -vi.mock('@/lib/analytics/posthog', () => ({ - useFeatureFlagStatuses: () => [], -})); vi.mock('react-native', () => ({ View: 'View', })); @@ -134,4 +129,26 @@ describe('PreferencesScreen hub', () => { ]); expect(control[0]?.props.value).toBe('system'); }); + + it('renders no developer feature-flag rows in a development build', async () => { + // Every device round runs a dev client pointed at Metro, so `__DEV__` is + // true there; the product screen must carry only the navigation rows. + vi.stubGlobal('__DEV__', true); + const renderer = await mountPreferences(); + + const lines = renderer.root + .findAll(node => typeof node.type === 'string' && (node.type as string) === 'Text') + .map(node => [node.props.children].flat().join('')); + expect(lines).not.toContain('Feature flags'); + expect(lines).not.toContain('mobile-pr-review'); + expect(lines).not.toContain('Enabled · default · not loaded'); + + // The product rows still render. + expect(row(renderer, i18n.t('preferences.general')).props.title).toBe( + i18n.t('preferences.general') + ); + expect(row(renderer, i18n.t('preferences.account')).props.title).toBe( + i18n.t('preferences.account') + ); + }); }); diff --git a/apps/mobile/src/components/preferences-screen.tsx b/apps/mobile/src/components/preferences-screen.tsx index 95c4865561..4a9c83aa73 100644 --- a/apps/mobile/src/components/preferences-screen.tsx +++ b/apps/mobile/src/components/preferences-screen.tsx @@ -3,7 +3,6 @@ import { Bell, Globe, Mic, SlidersHorizontal, Wallet, WandSparkles } from '@/com import { View } from 'react-native'; import { useTranslation } from 'react-i18next'; -import { FeatureFlagsSection } from '@/components/feature-flags-section'; import { ScreenHeader } from '@/components/screen-header'; import { TabScreenScrollView } from '@/components/tab-screen'; import { ConfigureRow } from '@/components/ui/configure-row'; @@ -80,8 +79,6 @@ export function PreferencesScreen() { /> - {__DEV__ ? : null} - ({ Text: 'Text' })); vi.mock('expo-haptics', () => ({ selectionAsync: vi.fn() })); vi.mock('@/components/tab-screen', () => ({ TabScreenScrollView: 'ScrollView' })); vi.mock('@/components/offline-banner-space', () => ({ useOfflineBannerSpace: () => false })); -// The development-only flag surface pulls the Expo application module, which a -// node environment cannot load; it renders no control on these screens. -vi.mock('@/components/feature-flags-section', () => ({ FeatureFlagsSection: () => null })); vi.mock('@/lib/hooks/use-theme-colors', () => ({ useThemeColors: () => themeColors })); vi.mock('@/lib/hooks/use-theme-preference', () => ({ setThemePreference: vi.fn(), diff --git a/apps/mobile/src/i18n/locales/af.json b/apps/mobile/src/i18n/locales/af.json index d2c7ef2c71..cb0f1641f2 100644 --- a/apps/mobile/src/i18n/locales/af.json +++ b/apps/mobile/src/i18n/locales/af.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Wanneer dit af is, voeg die Return-toets 'n nuwe reël in agente se boodskapinvoer in.", "biometricUnlock": "Ontsluit met biometrie", "biometricUnlockSubtitle": "Ontsluit wanneer die toep begin en nadat dit vyf minute in die agtergrond was.", - "featureFlags": "Funksie-vlae", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Gateway-transkripsie", "gatewayTranscriptionSubtitle": "Transkribeer steminvoer met 'n Kilo Gateway-model in plaas van die toestel se spraakherkenning. Jou opname word na die Kilo Gateway gestuur.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/am.json b/apps/mobile/src/i18n/locales/am.json index c68441a88a..fda9cf34ae 100644 --- a/apps/mobile/src/i18n/locales/am.json +++ b/apps/mobile/src/i18n/locales/am.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "ሲጠፋ፣ የመመለሻ ቁልፍ በወኪል መልእክት ማስገቢያዎች ውስጥ አዲስ መስመር ያስገባል።", "biometricUnlock": "በባዮሜትሪክስ መክፈት", "biometricUnlockSubtitle": "መተግበሪያው ሲጀመር እና ከበስተጀርባ ለአምስት ደቂቃዎች ከቆየ በኋላ መክፈት ያስፈልጋል።", - "featureFlags": "የተግባር ባንዲራዎች", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "በKilo Gateway ድምጽን ወደ ጽሑፍ መቀየር", "gatewayTranscriptionSubtitle": "የድምፅ ግብዓትን በመሣሪያው የንግግር ማውቂያ ምትክ በKilo Gateway ሞዴል ወደ ጽሑፍ ቀይሩ። ቀረጻዎ ወደ Kilo Gateway ይላካል።", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ar.json b/apps/mobile/src/i18n/locales/ar.json index da58a4e841..0a412aaffa 100644 --- a/apps/mobile/src/i18n/locales/ar.json +++ b/apps/mobile/src/i18n/locales/ar.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "عند تعطيل هذا الخيار، يُدرج مفتاح الإدخال سطرًا جديدًا في حقول رسائل الوكلاء.", "biometricUnlock": "فتح القفل بالقياسات الحيوية", "biometricUnlockSubtitle": "يلزم فتح القفل عند تشغيل التطبيق وبعد بقائه في الخلفية لمدة خمس دقائق.", - "featureFlags": "أعلام الميزات", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "التفريغ الصوتي عبر Kilo Gateway", "gatewayTranscriptionSubtitle": "حوّل الإدخال الصوتي إلى نص باستخدام أحد نماذج Kilo Gateway بدلاً من التعرف على الكلام في جهازك. يُرسل تسجيلك إلى Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/az.json b/apps/mobile/src/i18n/locales/az.json index c76fbc5281..4f800dc03e 100644 --- a/apps/mobile/src/i18n/locales/az.json +++ b/apps/mobile/src/i18n/locales/az.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Bu seçim deaktiv olduqda sətirsonu düyməsi agentin mesaj sahəsinə yeni sətir əlavə edir.", "biometricUnlock": "Biometrik məlumatlarla kilidi aç", "biometricUnlockSubtitle": "Tətbiq başladıqda və arxa planda beş dəqiqə qaldıqdan sonra kilidi açmaq tələb olunur.", - "featureFlags": "Funksiya bayroqları", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Səsin Kilo Gateway ilə mətnə çevrilməsi", "gatewayTranscriptionSubtitle": "Səslə daxiletməni cihazın nitq tanımasının əvəzinə Kilo Gateway modeli ilə mətnə çevirin. Səs yazınız Kilo Gateway-e göndərilir.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/be.json b/apps/mobile/src/i18n/locales/be.json index a7bb6490d4..d082f0ddcd 100644 --- a/apps/mobile/src/i18n/locales/be.json +++ b/apps/mobile/src/i18n/locales/be.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Калі налада выключаная, клавіша ўводу ўстаўляе новы радок у палі ўводу паведамленняў агентам.", "biometricUnlock": "Біяметрычная разблакіроўка", "biometricUnlockSubtitle": "Разблакіроўка патрабуецца пры запуску праграмы і пасля пяці хвілін у фонавым рэжыме.", - "featureFlags": "Сцягі функцый", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Распазнаванне маўлення праз Kilo Gateway", "gatewayTranscriptionSubtitle": "Пераўтварайце галасавы ўвод у тэкст з дапамогай мадэлі Kilo Gateway замест распазнавання маўлення на самой прыладзе. Ваш запіс адпраўляецца ў Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/bg.json b/apps/mobile/src/i18n/locales/bg.json index 14003218da..6f28b48c40 100644 --- a/apps/mobile/src/i18n/locales/bg.json +++ b/apps/mobile/src/i18n/locales/bg.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Когато настройката е изключена, клавишът за нов ред вмъква нов ред в полетата за въвеждане на съобщения до агенти.", "biometricUnlock": "Отключване с биометрични данни", "biometricUnlockSubtitle": "Изисква се отключване при стартиране и след пет минути във фонов режим.", - "featureFlags": "Флагове на функции", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Транскрипция през Kilo Gateway", "gatewayTranscriptionSubtitle": "Преобразувай гласовото въвеждане с модел на Kilo Gateway вместо разпознаването на реч на устройството. Записът ти се изпраща до Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/bn.json b/apps/mobile/src/i18n/locales/bn.json index f4983e3148..0af2745854 100644 --- a/apps/mobile/src/i18n/locales/bn.json +++ b/apps/mobile/src/i18n/locales/bn.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "বন্ধ থাকলে, রিটার্ন কী এজেন্টের বার্তা লেখার ঘরে নতুন লাইন যোগ করে।", "biometricUnlock": "বায়োমেট্রিক আনলক", "biometricUnlockSubtitle": "অ্যাপ চালু করার সময় এবং ব্যাকগ্রাউন্ডে পাঁচ মিনিট থাকার পর আনলক করতে হবে।", - "featureFlags": "ফিচার ফ্ল্যাগ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway-এ কথা থেকে লেখা", "gatewayTranscriptionSubtitle": "ডিভাইসের স্পিচ রিকগনিশনের বদলে Kilo Gateway মডেল ব্যবহার করে ভয়েস ইনপুট থেকে লেখা তৈরি করুন। আপনার রেকর্ডিং Kilo Gateway-এ পাঠানো হবে।", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/bs.json b/apps/mobile/src/i18n/locales/bs.json index 1c38e736eb..2419f5a417 100644 --- a/apps/mobile/src/i18n/locales/bs.json +++ b/apps/mobile/src/i18n/locales/bs.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kada je isključeno, tipka za novi red umeće novi red u polja za unos poruke agentima.", "biometricUnlock": "Otključavanje biometrijom", "biometricUnlockSubtitle": "Otključavanje je obavezno pri pokretanju aplikacije i nakon pet minuta provedenih u pozadini.", - "featureFlags": "Zastavice funkcija", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkripcija putem Kilo Gatewaya", "gatewayTranscriptionSubtitle": "Prepiši glasovni unos modelom Kilo Gatewaya umjesto prepoznavanja govora na uređaju. Snimka se šalje na Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ca.json b/apps/mobile/src/i18n/locales/ca.json index 1522d821fd..1593085ba2 100644 --- a/apps/mobile/src/i18n/locales/ca.json +++ b/apps/mobile/src/i18n/locales/ca.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Quan està desactivat, la tecla de retorn insereix un salt de línia als camps de missatge dels agents.", "biometricUnlock": "Desbloqueja amb biometria", "biometricUnlockSubtitle": "Cal desbloquejar l'aplicació en iniciar-la i després de cinc minuts en segon pla.", - "featureFlags": "Indicadors de funcions", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transcripció amb Kilo Gateway", "gatewayTranscriptionSubtitle": "Transcriu el dictat amb un model de Kilo Gateway en lloc del reconeixement de veu del dispositiu. Enviarem la teva gravació a Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ckb.json b/apps/mobile/src/i18n/locales/ckb.json index 01feabf97f..547bca5faf 100644 --- a/apps/mobile/src/i18n/locales/ckb.json +++ b/apps/mobile/src/i18n/locales/ckb.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "کاتێک ئەم بژاردەیە ناچالاکە، دوگمەی گەڕانەوە دێڕێکی نوێ لە خانەکانی نووسینی پەیام بۆ ئەجێنت تێدەخات.", "biometricUnlock": "کردنەوەی قوفڵ بە بایۆمەتریک", "biometricUnlockSubtitle": "لە کاتی دەستپێکردنی ئەپەکە و دوای پێنج خولەک مانەوەی لە پاشبنەمادا، کردنەوەی قوفڵ پێویستە.", - "featureFlags": "ئاڵای تایبەتمەندییەکان", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "گۆڕینی دەنگ بۆ دەق بە Kilo Gateway", "gatewayTranscriptionSubtitle": "دەنگەکانت بە مۆدێلێکی Kilo Gateway بگۆڕە بۆ دەق، نەک بە ناسینەوەی قسەکردنی ئامێرەکەت. تۆمارەکەت بۆ Kilo Gateway دەنێردرێت.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/cs.json b/apps/mobile/src/i18n/locales/cs.json index dacdb34116..a5702bb9fc 100644 --- a/apps/mobile/src/i18n/locales/cs.json +++ b/apps/mobile/src/i18n/locales/cs.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Při vypnutí této volby klávesa Enter vloží nový řádek do pole pro zprávu agentovi.", "biometricUnlock": "Biometrické odemykání", "biometricUnlockSubtitle": "Vyžaduje odemknutí při spuštění aplikace a po pěti minutách na pozadí.", - "featureFlags": "Příznaky funkcí", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Přepis přes Kilo Gateway", "gatewayTranscriptionSubtitle": "Přepisujte diktování pomocí modelu Kilo Gateway místo rozpoznávání řeči ve vašem zařízení. Nahraný zvuk se odešle do Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/cy.json b/apps/mobile/src/i18n/locales/cy.json index cef62ec551..e43dbbb29d 100644 --- a/apps/mobile/src/i18n/locales/cy.json +++ b/apps/mobile/src/i18n/locales/cy.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Pan fydd yr opsiwn hwn wedi'i ddiffodd, mae'r fysell Dychwelyd yn mewnosod llinell newydd ym mlychau negeseuon yr asiantau.", "biometricUnlock": "Datgloi â biometreg", "biometricUnlockSubtitle": "Rhaid datgloi wrth gychwyn yr ap ac ar ôl pum munud yn y cefndir.", - "featureFlags": "Baneri nodweddion", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Trawsgrifio drwy Kilo Gateway", "gatewayTranscriptionSubtitle": "Trawsgrifiwch fewnbwn llais â model Kilo Gateway yn lle adnabod lleferydd y ddyfais. Anfonir eich recordiad i Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/da.json b/apps/mobile/src/i18n/locales/da.json index 3b18b27bda..33f54fba99 100644 --- a/apps/mobile/src/i18n/locales/da.json +++ b/apps/mobile/src/i18n/locales/da.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Når dette er slået fra, indsætter returtasten et linjeskift i agenternes beskedfelter.", "biometricUnlock": "Lås op med biometri", "biometricUnlockSubtitle": "Lås op ved opstart, og når appen har været i baggrunden i fem minutter.", - "featureFlags": "Funktionsflag", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transskription via Kilo Gateway", "gatewayTranscriptionSubtitle": "Transskribér stemmeinput med en Kilo Gateway-model i stedet for enhedens stemmegenkendelse. Din optagelse sendes til Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/de.json b/apps/mobile/src/i18n/locales/de.json index 54ec62ba64..4ea904b6ac 100644 --- a/apps/mobile/src/i18n/locales/de.json +++ b/apps/mobile/src/i18n/locales/de.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Ist diese Option deaktiviert, fügt die Eingabetaste im Eingabefeld für Agenten einen Zeilenumbruch ein.", "biometricUnlock": "Mit Biometrie entsperren", "biometricUnlockSubtitle": "Beim Start und nach fünf Minuten im Hintergrund ist das Entsperren erforderlich.", - "featureFlags": "Feature-Flags", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Gateway-Transkription", "gatewayTranscriptionSubtitle": "Transkribiere die Spracheingabe mit einem Kilo-Gateway-Modell statt mit der Spracherkennung des Geräts. Deine Aufnahme wird an das Kilo Gateway gesendet.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/el.json b/apps/mobile/src/i18n/locales/el.json index 58b7376a70..84bd5ae20f 100644 --- a/apps/mobile/src/i18n/locales/el.json +++ b/apps/mobile/src/i18n/locales/el.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Όταν η επιλογή είναι ανενεργή, το πλήκτρο Enter εισάγει νέα γραμμή στα πεδία μηνυμάτων των πρακτόρων.", "biometricUnlock": "Ξεκλείδωμα με βιομετρικά στοιχεία", "biometricUnlockSubtitle": "Απαιτείται ξεκλείδωμα κατά την εκκίνηση της εφαρμογής και αφού παραμείνει στο παρασκήνιο για πέντε λεπτά.", - "featureFlags": "Σημαίες λειτουργιών", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Απομαγνητοφώνηση μέσω Kilo Gateway", "gatewayTranscriptionSubtitle": "Η φωνητική πληκτρολόγηση μετατρέπεται σε κείμενο με ένα μοντέλο του Kilo Gateway αντί για την αναγνώριση ομιλίας της συσκευής. Η ηχογράφηση αποστέλλεται στο Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/en.json b/apps/mobile/src/i18n/locales/en.json index 8076bb5e54..9d5f21ebcc 100644 --- a/apps/mobile/src/i18n/locales/en.json +++ b/apps/mobile/src/i18n/locales/en.json @@ -275,11 +275,6 @@ "prReviewAttributionSubtitle": "Append a Reviewed via Kilo footer when you submit a review.", "returnSendsMessage": "Return key sends message", "returnSendsMessageSubtitle": "When off, Return inserts a newline in agent composers.", - "featureFlags": "Feature flags", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Gateway transcription", "gatewayTranscriptionSubtitle": "Transcribe voice input with a Kilo gateway model instead of the device's speech recognition. Your recording is sent to the Kilo gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/es.json b/apps/mobile/src/i18n/locales/es.json index 82ac4c423a..a6c5c40cc8 100644 --- a/apps/mobile/src/i18n/locales/es.json +++ b/apps/mobile/src/i18n/locales/es.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Si está desactivado, Intro inserta un salto de línea en los campos de mensaje del agente.", "biometricUnlock": "Desbloqueo biométrico", "biometricUnlockSubtitle": "Se requiere desbloquear la aplicación al iniciarla y después de cinco minutos en segundo plano.", - "featureFlags": "Indicadores de funciones", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transcripción con Kilo Gateway", "gatewayTranscriptionSubtitle": "Transcribe el dictado con un modelo de Kilo Gateway en lugar del reconocimiento de voz del dispositivo. Tu grabación se envía a Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/et.json b/apps/mobile/src/i18n/locales/et.json index 8d6095df9c..368664c12e 100644 --- a/apps/mobile/src/i18n/locales/et.json +++ b/apps/mobile/src/i18n/locales/et.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kui see on välja lülitatud, lisab sisestusklahv agentide sõnumi sisestusväljadel reavahetuse.", "biometricUnlock": "Biomeetriline lukust avamine", "biometricUnlockSubtitle": "Rakendus tuleb lukust avada käivitamisel ja pärast viit minutit taustal olemist.", - "featureFlags": "Funktsioonilipud", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kõnetuvastus Kilo Gateway kaudu", "gatewayTranscriptionSubtitle": "Kasuta häälsisestuse tekstiks teisendamiseks seadme kõnetuvastuse asemel Kilo Gateway mudelit. Sinu salvestus saadetakse Kilo Gateway'sse.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/eu.json b/apps/mobile/src/i18n/locales/eu.json index cadf7e5cd7..c1b272508d 100644 --- a/apps/mobile/src/i18n/locales/eu.json +++ b/apps/mobile/src/i18n/locales/eu.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Desgaituta dagoenean, Sartu teklak lerro-jauzia txertatzen du agenteen mezu-eremuetan.", "biometricUnlock": "Desblokeatu biometriarekin", "biometricUnlockSubtitle": "Desblokeatu aplikazioa abiaraztean eta atzeko planoan bost minutu igaro ondoren.", - "featureFlags": "Funtzio-bandera", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway bidezko transkripzioa", "gatewayTranscriptionSubtitle": "Transkribatu ahots-sarrera gailuaren hitz-sorgailuaren ordez Kilo Gateway eredu batekin. Zure grabaketa Kilo Gatewayra bidaltzen da.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/fa.json b/apps/mobile/src/i18n/locales/fa.json index 64d7e06034..db276919bd 100644 --- a/apps/mobile/src/i18n/locales/fa.json +++ b/apps/mobile/src/i18n/locales/fa.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "اگر این گزینه غیرفعال باشد، کلید اینتر در کادر پیام عامل یک خط جدید ایجاد می‌کند.", "biometricUnlock": "باز کردن قفل با احراز هویت زیست‌سنجی", "biometricUnlockSubtitle": "هنگام راه‌اندازی برنامه و پس از پنج دقیقه ماندن آن در پس‌زمینه، باز کردن قفل الزامی است.", - "featureFlags": "پرچم‌های ویژگی", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "تبدیل گفتار به متن با Kilo Gateway", "gatewayTranscriptionSubtitle": "ورودی صوتی را به‌جای تشخیص گفتار دستگاه، با یک مدل Kilo Gateway به متن تبدیل کنید. صدای ضبط‌شده شما به Kilo Gateway فرستاده می‌شود.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/fi.json b/apps/mobile/src/i18n/locales/fi.json index 8549ae9b31..03b236c8c7 100644 --- a/apps/mobile/src/i18n/locales/fi.json +++ b/apps/mobile/src/i18n/locales/fi.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kun asetus on pois päältä, Enter lisää rivinvaihdon agenttien viestikenttiin.", "biometricUnlock": "Avaa lukitus biometrisellä tunnistuksella", "biometricUnlockSubtitle": "Lukitus on avattava sovelluksen käynnistyessä ja sen oltua taustalla viisi minuuttia.", - "featureFlags": "Ominaisuusliput", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Puheentunnistus Kilo Gatewayn kautta", "gatewayTranscriptionSubtitle": "Muodosta äänisyötteestä teksti Kilo Gateway -mallilla laitteen puheentunnistuksen sijaan. Äänitteesi lähetetään Kilo Gatewayhin.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/fil.json b/apps/mobile/src/i18n/locales/fil.json index f6e0a484f7..a974d630ca 100644 --- a/apps/mobile/src/i18n/locales/fil.json +++ b/apps/mobile/src/i18n/locales/fil.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kapag naka-off, naglalagay ang Return ng bagong linya sa mga sulatan ng mensahe para sa ahente.", "biometricUnlock": "I-unlock gamit ang biometriko", "biometricUnlockSubtitle": "I-unlock ang app sa pagbukas at matapos ang limang minuto sa background.", - "featureFlags": "Mga feature flag", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Pagsasalin ng boses sa teksto gamit ang Kilo Gateway", "gatewayTranscriptionSubtitle": "Gamitin ang modelong Kilo Gateway sa pagsasalin ng boses sa teksto imbes na ang pagkilala sa tinig ng device. Ipinapadala sa Kilo Gateway ang iyong recording.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/fr.json b/apps/mobile/src/i18n/locales/fr.json index eea8fecb75..a6bd0d7aa5 100644 --- a/apps/mobile/src/i18n/locales/fr.json +++ b/apps/mobile/src/i18n/locales/fr.json @@ -2110,11 +2110,6 @@ "returnSendsMessageSubtitle": "Si cette option est désactivée, la touche Entrée insère un saut de ligne dans les champs de saisie des agents.", "biometricUnlock": "Déverrouillage biométrique", "biometricUnlockSubtitle": "Déverrouillage requis au lancement et après cinq minutes en arrière-plan.", - "featureFlags": "Indicateurs de fonctionnalités", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transcription via Kilo Gateway", "gatewayTranscriptionSubtitle": "Transcrivez la saisie vocale avec un modèle Kilo Gateway au lieu de la reconnaissance vocale de l'appareil. Votre enregistrement est envoyé à Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ga.json b/apps/mobile/src/i18n/locales/ga.json index c6d085435a..ed4e7663b6 100644 --- a/apps/mobile/src/i18n/locales/ga.json +++ b/apps/mobile/src/i18n/locales/ga.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Nuair atá sé seo as, cuireann an eochair aisfhillte líne nua isteach i mboscaí teachtaireachta na ngníomhairí.", "biometricUnlock": "Díghlasáil le bithmhéadracht", "biometricUnlockSubtitle": "Ní mór an aip a dhíghlasáil nuair a sheoltar í agus tar éis di cúig nóiméad a chaitheamh sa chúlra.", - "featureFlags": "Bratacha gnéithe", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Tras-scríobh tríd an Kilo Gateway", "gatewayTranscriptionSubtitle": "Déan an t-ionchur gutha a thras-scríobh le samhail Kilo Gateway in ionad aithint cainte an ghléis. Seoltar do thaifeadadh chuig an Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/gl.json b/apps/mobile/src/i18n/locales/gl.json index 6d1b53c778..77b9250c43 100644 --- a/apps/mobile/src/i18n/locales/gl.json +++ b/apps/mobile/src/i18n/locales/gl.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Cando está desactivado, Intro insire un salto de liña nos campos de mensaxe dos axentes.", "biometricUnlock": "Desbloquear con biometría", "biometricUnlockSubtitle": "Solicitar o desbloqueo ao abrir a aplicación e despois de cinco minutos en segundo plano.", - "featureFlags": "Bandeiras de funcións", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transcrición con Kilo Gateway", "gatewayTranscriptionSubtitle": "Transcribe o ditado cun modelo de Kilo Gateway no canto do recoñecemento de voz do dispositivo. A túa gravación envíaselle a Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/gu.json b/apps/mobile/src/i18n/locales/gu.json index 50e13efedb..d289f024e4 100644 --- a/apps/mobile/src/i18n/locales/gu.json +++ b/apps/mobile/src/i18n/locales/gu.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "આ બંધ હોય ત્યારે રિટર્ન કી એજન્ટના સંદેશના ખાનામાં નવી પંક્તિ ઉમેરે છે.", "biometricUnlock": "બાયોમેટ્રિક્સથી અનલૉક કરો", "biometricUnlockSubtitle": "એપ શરૂ કરતી વખતે અને પૃષ્ઠભૂમિમાં પાંચ મિનિટ રહ્યા પછી અનલૉક કરવું જરૂરી છે.", - "featureFlags": "ફીચર ફ્લેગ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway દ્વારા અવાજને લખાણમાં ફેરવવું", "gatewayTranscriptionSubtitle": "ઉપકરણની સ્પીચ રિકગ્નિશનને બદલે Kilo Gateway મોડેલ વડે વૉઇસ ઇનપુટને લખાણમાં ફેરવો. તમારું રેકોર્ડિંગ Kilo Gateway પર મોકલાય છે.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ha.json b/apps/mobile/src/i18n/locales/ha.json index 15773f0047..27264c1214 100644 --- a/apps/mobile/src/i18n/locales/ha.json +++ b/apps/mobile/src/i18n/locales/ha.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Idan an kashe wannan, maɓallin sabon layi yana saka sabon layi a wuraren rubuta saƙo ga wakilai.", "biometricUnlock": "Buɗe kulle da bayanan halittar jiki", "biometricUnlockSubtitle": "Ana buƙatar buɗe kulle lokacin fara manhajar da bayan ta yi minti biyar a baya.", - "featureFlags": "Tutocin sifofi", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Mayar da magana zuwa rubutu ta Kilo Gateway", "gatewayTranscriptionSubtitle": "Mayar da shigar da murya zuwa rubutu da samfurin Kilo Gateway maimakon gane magana na na'urar. Ana aika rikodinka zuwa Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/he.json b/apps/mobile/src/i18n/locales/he.json index 8e5d35beb5..73831bf4f9 100644 --- a/apps/mobile/src/i18n/locales/he.json +++ b/apps/mobile/src/i18n/locales/he.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "כשהאפשרות כבויה, מקש אנטר מוסיף שורה חדשה בשדות ההודעה של הסוכנים.", "biometricUnlock": "ביטול נעילה באמצעות זיהוי ביומטרי", "biometricUnlockSubtitle": "נדרש לבטל את הנעילה בעת הפעלת האפליקציה ולאחר חמש דקות ברקע.", - "featureFlags": "דגלי תכונות", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "תמלול דרך Kilo Gateway", "gatewayTranscriptionSubtitle": "תמלל את ההכתבה בעזרת מודל של Kilo Gateway במקום זיהוי הדיבור של המכשיר. ההקלטה נשלחת ל־Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/hi.json b/apps/mobile/src/i18n/locales/hi.json index 0c6115bd27..82fe293c77 100644 --- a/apps/mobile/src/i18n/locales/hi.json +++ b/apps/mobile/src/i18n/locales/hi.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "यह विकल्प बंद होने पर रिटर्न की दबाने से एजेंट के संदेश लिखने के बॉक्स में नई पंक्ति जुड़ती है।", "biometricUnlock": "बायोमेट्रिक्स से अनलॉक करें", "biometricUnlockSubtitle": "ऐप शुरू करने पर और पृष्ठभूमि में पाँच मिनट रहने के बाद अनलॉक करना आवश्यक है।", - "featureFlags": "फ़ीचर फ़्लैग", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway से आवाज़ को टेक्स्ट में बदलना", "gatewayTranscriptionSubtitle": "डिवाइस की स्पीच रिकग्निशन के बजाय Kilo Gateway मॉडल से वॉइस इनपुट को टेक्स्ट में बदलें। आपकी रिकॉर्डिंग Kilo Gateway भेजी जाती है।", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/hr.json b/apps/mobile/src/i18n/locales/hr.json index b0ce06343b..84b1b17c7b 100644 --- a/apps/mobile/src/i18n/locales/hr.json +++ b/apps/mobile/src/i18n/locales/hr.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kad je isključeno, tipka za novi redak umeće novi redak u polja za unos poruke agentima.", "biometricUnlock": "Otključavanje biometrijom", "biometricUnlockSubtitle": "Otključavanje je potrebno pri pokretanju aplikacije i nakon pet minuta u pozadini.", - "featureFlags": "Zastavice značajki", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkripcija putem Kilo Gatewaya", "gatewayTranscriptionSubtitle": "Prepiši glasovni unos modelom Kilo Gatewaya umjesto prepoznavanja govora na uređaju. Snimka se šalje na Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ht.json b/apps/mobile/src/i18n/locales/ht.json index 2e0499bde6..8fa0d8e8c3 100644 --- a/apps/mobile/src/i18n/locales/ht.json +++ b/apps/mobile/src/i18n/locales/ht.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Lè opsyon sa a dezaktive, bouton retou a ajoute yon nouvo liy nan chan mesaj ajan yo.", "biometricUnlock": "Debloke ak byometri", "biometricUnlockSubtitle": "Debloke aplikasyon an lè li kòmanse ak apre li pase senk minit an aryèplan.", - "featureFlags": "Drapo fonksyon", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkripsyon ak Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkripte dikte a ak yon modèl Kilo Gateway olye rekonesans vokal aparèy la. Yo voye anrejistrman ou a bay Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/hu.json b/apps/mobile/src/i18n/locales/hu.json index 82bf869565..dcba38092c 100644 --- a/apps/mobile/src/i18n/locales/hu.json +++ b/apps/mobile/src/i18n/locales/hu.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kikapcsolva az Enter új sort szúr be az ügynökök üzenetbeviteli mezőibe.", "biometricUnlock": "Feloldás biometrikus azonosítással", "biometricUnlockSubtitle": "Az alkalmazás indításakor és öt perc háttérben töltött idő után feloldás szükséges.", - "featureFlags": "Funkciójelzők", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Átírás Kilo Gateway-n keresztül", "gatewayTranscriptionSubtitle": "Írd át a hangbevitelt egy Kilo Gateway-modell segítségével az eszköz beszédfelismerése helyett. A felvételt elküldjük a Kilo Gateway-nek.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/hy.json b/apps/mobile/src/i18n/locales/hy.json index 6bfe40cc3d..0abba4f45b 100644 --- a/apps/mobile/src/i18n/locales/hy.json +++ b/apps/mobile/src/i18n/locales/hy.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Երբ անջատված է, մուտքի ստեղնը նոր տող է ավելացնում գործակալների հաղորդագրության մուտքագրման դաշտերում։", "biometricUnlock": "Ապակողպել կենսաչափական տվյալներով", "biometricUnlockSubtitle": "Հավելվածը գործարկելիս և ֆոնային ռեժիմում հինգ րոպե մնալուց հետո պահանջվում է ապակողպել այն։", - "featureFlags": "Ֆունկցիաների դրոշներ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Խոսքի տեքստի վերածում Kilo Gateway-ով", "gatewayTranscriptionSubtitle": "Ձայնային մուտքագրումը տեքստի վերածեք Kilo Gateway-ի մոդելով՝ սարքի խոսքի ճանաչման փոխարեն։ Ձեր ձայնագրությունը ուղարկվում է Kilo Gateway։", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/id.json b/apps/mobile/src/i18n/locales/id.json index 59312fb352..9e5d9603ca 100644 --- a/apps/mobile/src/i18n/locales/id.json +++ b/apps/mobile/src/i18n/locales/id.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Saat nonaktif, Enter menyisipkan baris baru di kolom pesan agen.", "biometricUnlock": "Buka kunci dengan biometrik", "biometricUnlockSubtitle": "Minta autentikasi biometrik saat aplikasi dibuka dan setelah lima menit di latar belakang.", - "featureFlags": "Bendera fitur", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkripsi dengan Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkripsikan masukan suara dengan model Kilo Gateway alih-alih pengenalan bicara perangkat. Rekaman Anda dikirim ke Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ig.json b/apps/mobile/src/i18n/locales/ig.json index 59e63001a3..7d714e4f44 100644 --- a/apps/mobile/src/i18n/locales/ig.json +++ b/apps/mobile/src/i18n/locales/ig.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Mgbe agbanyụrụ ya, igodo nloghachi na-etinye ahịrị ọhụrụ n'ebe ide ozi ndị nnọchi anya.", "biometricUnlock": "Mepee mkpọchi site na njirimara ahụ", "biometricUnlockSubtitle": "Wepụ mkpọchi mgbe ngwa malitere na mgbe ọ nọrọ nkeji ise n'azụ.", - "featureFlags": "Ọkọ atụmatụ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Ịtụgharị olu ka ọ bụrụ ederede site na Kilo Gateway", "gatewayTranscriptionSubtitle": "Ejila njirimaka okwu nke ngwaọrụ ahụ; jiri ihe nlereanya Kilo Gateway tụgharịa ntinye olu ka ọ bụrụ ederede. A na-eziga ndekọ gị na Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/is.json b/apps/mobile/src/i18n/locales/is.json index e08d5cefbc..c05db5e549 100644 --- a/apps/mobile/src/i18n/locales/is.json +++ b/apps/mobile/src/i18n/locales/is.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Þegar slökkt er á þessu setur færsluhnappurinn inn línuskil í ritlum fulltrúa.", "biometricUnlock": "Aflæsing með lífkennum", "biometricUnlockSubtitle": "Krefjast aflæsingar við ræsingu og eftir fimm mínútur í bakgrunni.", - "featureFlags": "Eiginleikafánar", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Umritun í gegnum Kilo Gateway", "gatewayTranscriptionSubtitle": "Umritið raddinnsláttinn með Kilo Gateway líkani í stað talaþekkingar tækisins. Upptakan er send í Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/it.json b/apps/mobile/src/i18n/locales/it.json index 9f43a0f811..a028e8463a 100644 --- a/apps/mobile/src/i18n/locales/it.json +++ b/apps/mobile/src/i18n/locales/it.json @@ -2175,11 +2175,6 @@ "returnSendsMessageSubtitle": "Se disattivato, il tasto Invio inserisce un'interruzione di riga nei campi dei messaggi agli agenti.", "biometricUnlock": "Sblocco biometrico", "biometricUnlockSubtitle": "Lo sblocco è richiesto all'avvio dell'app e dopo cinque minuti in secondo piano.", - "featureFlags": "Flag di funzionalità", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Trascrizione con Kilo Gateway", "gatewayTranscriptionSubtitle": "Trascrivi la dettatura con un modello Kilo Gateway anziché con il riconoscimento vocale del dispositivo. La registrazione viene inviata a Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ja.json b/apps/mobile/src/i18n/locales/ja.json index 0489a6fbb0..e01c3adcf6 100644 --- a/apps/mobile/src/i18n/locales/ja.json +++ b/apps/mobile/src/i18n/locales/ja.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "オフの場合、リターンキーでエージェントのメッセージ入力欄に改行を挿入します。", "biometricUnlock": "生体認証でロック解除", "biometricUnlockSubtitle": "アプリの起動時と、バックグラウンドで5分経過した後は、ロック解除が必要です。", - "featureFlags": "機能フラグ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gatewayによる文字起こし", "gatewayTranscriptionSubtitle": "デバイスの音声認識の代わりにKilo Gatewayのモデルで音声入力を文字起こしします。録音はKilo Gatewayに送信されます。", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ka.json b/apps/mobile/src/i18n/locales/ka.json index 8ae2a9970a..e81508ed31 100644 --- a/apps/mobile/src/i18n/locales/ka.json +++ b/apps/mobile/src/i18n/locales/ka.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "თუ გამორთულია, შეყვანის კლავიში აგენტის შეტყობინების ველში ახალ სტრიქონს ამატებს.", "biometricUnlock": "ბიომეტრიით განბლოკვა", "biometricUnlockSubtitle": "განბლოკვა საჭიროა აპის გაშვებისას და ფონურ რეჟიმში ხუთი წუთის გასვლის შემდეგ.", - "featureFlags": "ფუნქციების დროშები", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "ტრანსკრიფცია Kilo Gateway-ით", "gatewayTranscriptionSubtitle": "ხმოვანი შეყვანა აქციეთ ტექსტად Kilo Gateway-ის მოდელით, მოწყობილობის მეტყველების ამოცნობის ნაცვლად. თქვენი ჩანაწერი იგზავნება Kilo Gateway-ში.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/kk.json b/apps/mobile/src/i18n/locales/kk.json index 9bf069f48b..26e76a9daf 100644 --- a/apps/mobile/src/i18n/locales/kk.json +++ b/apps/mobile/src/i18n/locales/kk.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Бұл баптау өшірулі болса, Enter пернесі агентке хабарлама жазу өрісінде жаңа жолға ауыстырады.", "biometricUnlock": "Биометрия арқылы құлыпты ашу", "biometricUnlockSubtitle": "Қолданбаны ашқанда және ол фондық режимде бес минут болғаннан кейін құлыпты ашу қажет.", - "featureFlags": "Функция байрақтары", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway арқылы дауысты мәтінге айналдыру", "gatewayTranscriptionSubtitle": "Дауыстық енгізуді құрылғының сөзді тануының орнына Kilo Gateway моделі арқылы мәтінге айналдырыңыз. Жазбаңыз Kilo Gateway-ге жіберіледі.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/km.json b/apps/mobile/src/i18n/locales/km.json index 74a2167d0a..14f9985967 100644 --- a/apps/mobile/src/i18n/locales/km.json +++ b/apps/mobile/src/i18n/locales/km.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "នៅពេលបិទ គ្រាប់ចុចបញ្ចូលនឹងបញ្ចូលបន្ទាត់ថ្មីក្នុងប្រអប់សរសេរសារទៅភ្នាក់ងារ។", "biometricUnlock": "ដោះសោដោយប្រើជីវមាត្រ", "biometricUnlockSubtitle": "តម្រូវឱ្យដោះសោនៅពេលចាប់ផ្តើមកម្មវិធី និងបន្ទាប់ពីកម្មវិធីស្ថិតនៅផ្ទៃខាងក្រោយរយៈពេលប្រាំនាទី។", - "featureFlags": "ទង់លក្ខណៈពិសេស", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "ការបម្លែងសំឡេងជាអត្ថបទតាម Kilo Gateway", "gatewayTranscriptionSubtitle": "បម្លែងការបញ្ចូលដោយសំឡេងទៅជាអត្ថបទដោយប្រើម៉ូដែល Kilo Gateway ជំនួសឱ្យការចាប់សម្ដីរបស់ឧបករណ៍។ ការថតរបស់អ្នកត្រូវបានផ្ញើទៅ Kilo Gateway។", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/kn.json b/apps/mobile/src/i18n/locales/kn.json index c08165aab2..896692264b 100644 --- a/apps/mobile/src/i18n/locales/kn.json +++ b/apps/mobile/src/i18n/locales/kn.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "ಈ ಆಯ್ಕೆ ನಿಷ್ಕ್ರಿಯವಾಗಿದ್ದಾಗ ರಿಟರ್ನ್ ಕೀಲಿಯು ಏಜೆಂಟ್‌ನ ಸಂದೇಶ ಪೆಟ್ಟಿಗೆಯಲ್ಲಿ ಹೊಸ ಸಾಲನ್ನು ಸೇರಿಸುತ್ತದೆ.", "biometricUnlock": "ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಮೂಲಕ ಅನ್‌ಲಾಕ್ ಮಾಡಿ", "biometricUnlockSubtitle": "ಅಪ್ಲಿಕೇಶನ್ ಪ್ರಾರಂಭಿಸಿದಾಗ ಮತ್ತು ಐದು ನಿಮಿಷ ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಇದ್ದ ನಂತರ ಅನ್‌ಲಾಕ್ ಮಾಡಬೇಕು.", - "featureFlags": "ಫೀಚರ್ ಫ್ಲ್ಯಾಗ್ಗಳು", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway ಮೂಲಕ ಮಾತನ್ನು ಪಠ್ಯಕ್ಕೆ ಪರಿವರ್ತಿಸುವಿಕೆ", "gatewayTranscriptionSubtitle": "ಸಾಧನದ ಮಾತು ಗುರುತಿಸುವಿಕೆಗೆ ಬದಲಾಗಿ Kilo Gateway ಮಾದರಿಯನ್ನು ಬಳಸಿ ಧ್ವನಿ ಇನ್‌ಪುಟ್ ಅನ್ನು ಪಠ್ಯಕ್ಕೆ ಪರಿವರ್ತಿಸಿ. ನಿಮ್ಮ ಧ್ವನಿಮುದ್ರಣ Kilo Gateway ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ko.json b/apps/mobile/src/i18n/locales/ko.json index 60e1965fc0..973bbb84fc 100644 --- a/apps/mobile/src/i18n/locales/ko.json +++ b/apps/mobile/src/i18n/locales/ko.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "끄면 에이전트의 메시지 입력란에서 리턴 키로 줄바꿈을 삽입합니다.", "biometricUnlock": "생체 인증으로 잠금 해제", "biometricUnlockSubtitle": "앱을 실행할 때와 백그라운드에서 5분이 지난 후에는 잠금을 해제해야 합니다.", - "featureFlags": "기능 플래그", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway 음성 텍스트 변환", "gatewayTranscriptionSubtitle": "기기의 음성 인식 대신 Kilo Gateway 모델로 음성 입력을 텍스트로 변환합니다. 녹음 내용은 Kilo Gateway로 전송됩니다.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/lo.json b/apps/mobile/src/i18n/locales/lo.json index 1d89f1869d..c0e0e84d4c 100644 --- a/apps/mobile/src/i18n/locales/lo.json +++ b/apps/mobile/src/i18n/locales/lo.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "ເມື່ອປິດຕົວເລືອກນີ້ ປຸ່ມຂຶ້ນແຖວໃໝ່ຈະແຊກແຖວໃໝ່ໃນຊ່ອງຂຽນຂໍ້ຄວາມຫາຕົວແທນ.", "biometricUnlock": "ປົດລັອກດ້ວຍຂໍ້ມູນຊີວະມິຕິ", "biometricUnlockSubtitle": "ຕ້ອງປົດລັອກເມື່ອເປີດແອັບ ແລະ ຫຼັງຈາກແອັບຢູ່ໃນພື້ນຫຼັງເປັນເວລາຫ້ານາທີ.", - "featureFlags": "ທຸງຄຸນສົມບັດ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "ການຖອດສຽງເປັນຂໍ້ຄວາມຜ່ານ Kilo Gateway", "gatewayTranscriptionSubtitle": "ຖອດການປ້ອນຂໍ້ຄວາມດ້ວຍສຽງເປັນຂໍ້ຄວາມດ້ວຍໂມເດວ Kilo Gateway ແທນການຈຳລາສຽງພາຍໃນອຸປະກອນ. ໄຟລ໌ບັນທຶກສຽງຂອງທ່ານຈະຖືກສົ່ງໄປ Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/lt.json b/apps/mobile/src/i18n/locales/lt.json index 0483294fde..14c62a650c 100644 --- a/apps/mobile/src/i18n/locales/lt.json +++ b/apps/mobile/src/i18n/locales/lt.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Išjungus šią parinktį, įvesties klavišas agentų žinučių įvesties laukuose įterpia naują eilutę.", "biometricUnlock": "Atrakinti naudojant biometrinius duomenis", "biometricUnlockSubtitle": "Paleidus programėlę ir jai penkias minutes išbuvus fone, reikia ją atrakinti.", - "featureFlags": "Funkcijų vėliavėlės", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkribavimas per Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkribuok balso įvestį Kilo Gateway modeliu vietoj įrenginio kalbos atpažinimo. Įrašas siunčiamas į Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/lv.json b/apps/mobile/src/i18n/locales/lv.json index d1ffa1ab30..e79b477df0 100644 --- a/apps/mobile/src/i18n/locales/lv.json +++ b/apps/mobile/src/i18n/locales/lv.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Ja šī opcija ir izslēgta, ievades taustiņš aģenta ziņojuma ievades laukā ievieto jaunu rindu.", "biometricUnlock": "Biometriskā atbloķēšana", "biometricUnlockSubtitle": "Atbloķēšana ir nepieciešama, palaižot lietotni un pēc piecām fonā pavadītām minūtēm.", - "featureFlags": "Funkciju karodziņi", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkripcija, izmantojot Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkribē balss ievadi, izmantojot Kilo Gateway modeli, nevis ierīces runas atpazīšanu. Ieraksts tiek nosūtīts uz Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/mg.json b/apps/mobile/src/i18n/locales/mg.json index e8ccb027fb..01eb9cb4b5 100644 --- a/apps/mobile/src/i18n/locales/mg.json +++ b/apps/mobile/src/i18n/locales/mg.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Raha tsy mandeha ity safidy ity, dia mampiditra andalana vaovao ao amin'ny faritra fanoratana hafatra ho an'ny mpanampy ny bokotra fampidirana.", "biometricUnlock": "Vahao amin'ny biometrika ny hidy", "biometricUnlockSubtitle": "Ilaina ny mamaha ny hidy rehefa manomboka ny rindranasa sy rehefa tsy naseho nandritra ny dimy minitra.", - "featureFlags": "Saina endri-javatra", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Fanovana feo ho soratra amin'ny Kilo Gateway", "gatewayTranscriptionSubtitle": "Aova ho soratra amin'ny modely Kilo Gateway ny fampidirana amin'ny feo fa tsy ny famantarana ny feon'ny fitaovana. Alefa amin'ny Kilo Gateway ny rakitra nosoronanao.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/mi.json b/apps/mobile/src/i18n/locales/mi.json index 82c1a31b6a..411b314dbd 100644 --- a/apps/mobile/src/i18n/locales/mi.json +++ b/apps/mobile/src/i18n/locales/mi.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Ina weto, ka whakaurua he rārangi hōu mā te pātuhi tāuru ki ngā pouaka karere māngai.", "biometricUnlock": "Wetekina mā te tautuhi koiora", "biometricUnlockSubtitle": "Me wewete te taupānga ina tīmata, ā, ina hoki mai i muri i te rima meneti i te papamuri.", - "featureFlags": "Kāreti āhuatanga", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Tuhi ā-reo mā Kilo Gateway", "gatewayTranscriptionSubtitle": "Tuhia te tāuru reo mā tētahi tauira Kilo Gateway, kau mā te mōhio kōrero o te pūrere. Ka tukuna tō pūreko ki te Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/mk.json b/apps/mobile/src/i18n/locales/mk.json index f9a3c904d6..cc1c7b2e32 100644 --- a/apps/mobile/src/i18n/locales/mk.json +++ b/apps/mobile/src/i18n/locales/mk.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Кога е исклучено, копчето за нов ред вметнува нов ред во полињата за внес на пораки на агентите.", "biometricUnlock": "Отклучување со биометрија", "biometricUnlockSubtitle": "Потребно е отклучување при стартување на апликацијата и откако ќе помине пет минути во заднина.", - "featureFlags": "Знаменца на функции", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Транскрипција преку Kilo Gateway", "gatewayTranscriptionSubtitle": "Транскрибирај го гласовниот внес со модел на Kilo Gateway наместо со препознавањето на говор на уредот. Снимката се испраќа до Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ml.json b/apps/mobile/src/i18n/locales/ml.json index 086da77c07..84c59dec6c 100644 --- a/apps/mobile/src/i18n/locales/ml.json +++ b/apps/mobile/src/i18n/locales/ml.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "ഇത് ഓഫായിരിക്കുമ്പോൾ റിട്ടേൺ കീ ഏജന്റിന്റെ സന്ദേശ ബോക്സിൽ പുതിയ വരി ചേർക്കും.", "biometricUnlock": "ബയോമെട്രിക് അൺലോക്ക്", "biometricUnlockSubtitle": "ആപ്പ് ആരംഭിക്കുമ്പോഴും പശ്ചാത്തലത്തിൽ അഞ്ച് മിനിറ്റ് കഴിഞ്ഞ് തിരികെ വരുമ്പോഴും അൺലോക്ക് ചെയ്യണം.", - "featureFlags": "ഫീച്ചർ ഫ്ലാഗുകൾ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway വഴിയുള്ള ശബ്ദം ടെക്സ്റ്റാക്കൽ", "gatewayTranscriptionSubtitle": "ഉപകരണത്തിന്റെ സ്പീച്ച് റെക്കഗ്നിഷന് പകരം Kilo Gateway മോഡൽ ഉപയോഗിച്ച് ശബ്ദ ഇൻപുട്ട് ടെക്സ്റ്റാക്കുക. നിങ്ങളുടെ റെക്കോർഡിംഗ് Kilo Gateway-ലേക്ക് അയയ്ക്കുന്നു.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/mn.json b/apps/mobile/src/i18n/locales/mn.json index f5c01a3938..0ab1d06b45 100644 --- a/apps/mobile/src/i18n/locales/mn.json +++ b/apps/mobile/src/i18n/locales/mn.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Унтраалттай үед мөр шилжүүлэх товч агентын мессеж оруулах талбарт шинэ мөр оруулна.", "biometricUnlock": "Биометрээр түгжээ тайлах", "biometricUnlockSubtitle": "Аппыг эхлүүлэхэд болон арын горимд таван минут байсны дараа түгжээг тайлах шаардлагатай.", - "featureFlags": "Функцын флагууд", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway-р яриаг бичвэр болгох", "gatewayTranscriptionSubtitle": "Төхөөрөмжийн яриа танихын оронд Kilo Gateway загвар ашиглан дуугаар оруулж буй зүйлээ бичвэр болгоно уу. Таны бичлэг Kilo Gateway руу илгээгдэнэ.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/mr.json b/apps/mobile/src/i18n/locales/mr.json index f0ae0e8dff..8f8aadd36c 100644 --- a/apps/mobile/src/i18n/locales/mr.json +++ b/apps/mobile/src/i18n/locales/mr.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "हा पर्याय बंद असताना रिटर्न कळ दाबल्यास एजंटच्या संदेशपेटीत नवीन ओळ घातली जाते.", "biometricUnlock": "बायोमेट्रिक्स वापरून अनलॉक करा", "biometricUnlockSubtitle": "अ‍ॅप सुरू करताना आणि पाच मिनिटे पार्श्वभूमीत राहिल्यानंतर अनलॉक करणे आवश्यक आहे.", - "featureFlags": "वैशिष्ट्य ध्वज", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway द्वारे लिप्यंतरण", "gatewayTranscriptionSubtitle": "उपकरणाच्या स्पीच रेकग्निशनऐवजी Kilo Gateway मॉडेल वापरून व्हॉइस इनपुटचे लिप्यंतरण करा. तुमचे रेकॉर्डिंग Kilo Gateway कडे पाठवले जाते.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ms.json b/apps/mobile/src/i18n/locales/ms.json index 6b3ddcbcb0..e55de4f72e 100644 --- a/apps/mobile/src/i18n/locales/ms.json +++ b/apps/mobile/src/i18n/locales/ms.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Apabila tetapan ini dinyahdayakan, kekunci baris baharu menyisipkan baris baharu dalam ruang mesej ejen.", "biometricUnlock": "Buka kunci dengan biometrik", "biometricUnlockSubtitle": "Buka kunci apabila apl dilancarkan dan selepas lima minit di latar belakang.", - "featureFlags": "Bendera ciri", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkripsi dengan Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkripsikan input suara dengan model Kilo Gateway dan bukan pengecaman pertuturan peranti. Rakaman anda dihantar ke Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/mt.json b/apps/mobile/src/i18n/locales/mt.json index f97eb0b56c..ef665edc77 100644 --- a/apps/mobile/src/i18n/locales/mt.json +++ b/apps/mobile/src/i18n/locales/mt.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Meta din l-għażla tkun mitfija, it-tast tar-ritorn idaħħal linja ġdida fil-qasam tal-messaġġ lill-aġent.", "biometricUnlock": "Żblokka bil-bijometrija", "biometricUnlockSubtitle": "Żblokka l-applikazzjoni meta titnieda u wara ħames minuti fl-isfond.", - "featureFlags": "Flags tal-karatteristiċi", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Traskrizzjoni permezz ta' Kilo Gateway", "gatewayTranscriptionSubtitle": "Ittraskrivi d-dħul bil-vuċi b'mudell ta' Kilo Gateway minflok ir-rikonoxximent tal-vuċi tal-apparat. Ir-reġistrazzjoni tiegħek tintbagħat lil Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/my.json b/apps/mobile/src/i18n/locales/my.json index 0a016a7595..7aac816d5f 100644 --- a/apps/mobile/src/i18n/locales/my.json +++ b/apps/mobile/src/i18n/locales/my.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "ပိတ်ထားပါက စာကြောင်းပြန်ခလုတ်သည် အေးဂျင့်ထံ စာရေးသည့်အကွက်တွင် စာကြောင်းအသစ် ထည့်ပေးပါသည်။", "biometricUnlock": "ဇီဝအချက်အလက်ဖြင့် သော့ဖွင့်ခြင်း", "biometricUnlockSubtitle": "အက်ပ်ကို စတင်ဖွင့်သည့်အခါနှင့် နောက်ခံတွင် ငါးမိနစ်ကြာ ရှိနေပြီးနောက် သော့ဖွင့်ရန် လိုအပ်ပါသည်။", - "featureFlags": "လုပ်ဆောင်ချက်အလံများ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway ဖြင့် အသံမှစာသားပြောင်းခြင်း", "gatewayTranscriptionSubtitle": "စက်၏ အသံခွဲခြားသိရှိမှုအစား Kilo Gateway မော်ဒယ်ဖြင့် အသံထည့်သွင်းမှုကို စာသားပြောင်းပါ။ သင့်အသံသွင်းချက်ကို Kilo Gateway သို့ ပို့ပါမည်။", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/nb.json b/apps/mobile/src/i18n/locales/nb.json index 3e8e9fe518..0804df0d5e 100644 --- a/apps/mobile/src/i18n/locales/nb.json +++ b/apps/mobile/src/i18n/locales/nb.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Når dette er av, setter returtasten inn et linjeskift i agentenes meldingsfelt.", "biometricUnlock": "Lås opp med biometri", "biometricUnlockSubtitle": "Lås opp appen ved oppstart og etter fem minutter i bakgrunnen.", - "featureFlags": "Funksjonsflagg", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkripsjon via Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkribér diktering med en Kilo Gateway-modell i stedet for enhetens stemmgjenkjenning. Opptaket ditt sendes til Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ne.json b/apps/mobile/src/i18n/locales/ne.json index ba905d58bd..466315383f 100644 --- a/apps/mobile/src/i18n/locales/ne.json +++ b/apps/mobile/src/i18n/locales/ne.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "यो विकल्प बन्द हुँदा रिटर्न कुञ्जीले एजेन्टको सन्देश लेख्ने ठाउँमा नयाँ पङ्क्ति थप्छ।", "biometricUnlock": "बायोमेट्रिक अनलक", "biometricUnlockSubtitle": "एप सुरु गर्दा र पृष्ठभूमिमा पाँच मिनेट रहेपछि अनलक गर्नुपर्छ।", - "featureFlags": "विशेषता झन्डा", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway मार्फत बोलीलाई पाठमा रूपान्तरण", "gatewayTranscriptionSubtitle": "यन्त्रको वाणी पहिचानको सट्टा Kilo Gateway मोडेल प्रयोग गरेर भ्वाइस इनपुटलाई पाठमा रूपान्तरण गर्नुहोस्। तपाईंको रेकर्डिङ Kilo Gateway मा पठाइन्छ।", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/nl.json b/apps/mobile/src/i18n/locales/nl.json index 77571f0ef5..93a2a35775 100644 --- a/apps/mobile/src/i18n/locales/nl.json +++ b/apps/mobile/src/i18n/locales/nl.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Als dit uitstaat, voegt Return een nieuwe regel toe in het berichtveld van de agent.", "biometricUnlock": "Ontgrendelen met biometrie", "biometricUnlockSubtitle": "Ontgrendelen is vereist bij het starten van de app en nadat de app vijf minuten op de achtergrond heeft gestaan.", - "featureFlags": "Functievlaggen", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transcriptie via Kilo Gateway", "gatewayTranscriptionSubtitle": "Zet spraakinvoer om met een Kilo Gateway-model in plaats van de spraakherkenning van het apparaat. Je opname wordt naar Kilo Gateway verzonden.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/om.json b/apps/mobile/src/i18n/locales/om.json index 7abb8f1883..8a01db1a86 100644 --- a/apps/mobile/src/i18n/locales/om.json +++ b/apps/mobile/src/i18n/locales/om.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Yoo cufame, furtuun galchii iddoo ergaa ergamaa barreessuu keessatti sarara haaraa galchiti.", "biometricUnlock": "Baayoometirikisiin qulfii bani", "biometricUnlockSubtitle": "Appilikeeshinichi yeroo jalqabamu fi duubbee keessatti daqiiqaa shan erga turee booda qulfii bani.", - "featureFlags": "Albaasa amalaa", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Sagalee interneetiin barreeffamatti jijjiiruu Kilo Gateway'n", "gatewayTranscriptionSubtitle": "Sagalee galchuu mallattoo sagalee meeshaa irraa haa ta'u moodeela Kilo Gateway'ttiin barreeffamatti jijjiiri. Sagaleen kee Kilo Gateway'tti ergama.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/or.json b/apps/mobile/src/i18n/locales/or.json index 71793dc528..a02c1b687b 100644 --- a/apps/mobile/src/i18n/locales/or.json +++ b/apps/mobile/src/i18n/locales/or.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "ଏହା ବନ୍ଦ ଥିଲେ ରିଟର୍ନ କି ଏଜେଣ୍ଟର ବାର୍ତ୍ତା ଲେଖିବା ସ୍ଥାନରେ ନୂଆ ଧାଡ଼ି ଯୋଡ଼େ।", "biometricUnlock": "ବାୟୋମେଟ୍ରିକ୍ସ ସହିତ ଅନଲକ୍ କରନ୍ତୁ", "biometricUnlockSubtitle": "ଆପ୍ ଆରମ୍ଭ ହେବାବେଳେ ଏବଂ ପୃଷ୍ଠଭୂମିରେ ପାଞ୍ଚ ମିନିଟ୍ ରହିବା ପରେ ଅନଲକ୍ କରିବା ଆବଶ୍ୟକ।", - "featureFlags": "ବିଶେଷତ୍ୱ ପତାକା", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway ମାଧ୍ୟମରେ କଥାକୁ ଲେଖାରେ ବଦଳାଇବା", "gatewayTranscriptionSubtitle": "ଡିଭାଇସ୍‌ର ସ୍ପିଚ୍ ରେକଗ୍ନିସନ୍ ପରିବର୍ତ୍ତେ Kilo Gateway ମଡେଲ୍ ବ୍ୟବହାର କରି କହି ଲେଖିବାକୁ ଲେଖାରେ ବଦଳାନ୍ତୁ। ଆପଣଙ୍କ ରେକର୍ଡିଂ Kilo Gateway ପଠାଯାଏ।", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/pa.json b/apps/mobile/src/i18n/locales/pa.json index 4be9a03941..efb4101c06 100644 --- a/apps/mobile/src/i18n/locales/pa.json +++ b/apps/mobile/src/i18n/locales/pa.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "ਇਹ ਸੈਟਿੰਗ ਬੰਦ ਹੋਣ 'ਤੇ, ਰਿਟਰਨ ਕੁੰਜੀ ਏਜੰਟ ਨੂੰ ਸੁਨੇਹਾ ਲਿਖਣ ਵਾਲੇ ਖਾਨੇ ਵਿੱਚ ਨਵੀਂ ਲਾਈਨ ਪਾਉਂਦੀ ਹੈ।", "biometricUnlock": "ਬਾਇਓਮੈਟ੍ਰਿਕਸ ਨਾਲ ਅਨਲੌਕ ਕਰੋ", "biometricUnlockSubtitle": "ਐਪ ਚਾਲੂ ਕਰਨ ਵੇਲੇ ਅਤੇ ਪਿਛੋਕੜ ਵਿੱਚ ਪੰਜ ਮਿੰਟ ਰਹਿਣ ਤੋਂ ਬਾਅਦ ਅਨਲੌਕ ਕਰੋ।", - "featureFlags": "ਫ਼ੀਚਰ ਫ਼ਲੈਗ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway ਰਾਹੀਂ ਬੋਲੀ ਨੂੰ ਲਿਖਤ ਵਿੱਚ ਬਦਲਣਾ", "gatewayTranscriptionSubtitle": "ਡਿਵਾਈਸ ਦੀ ਸਪੀਚ ਰੈਕਗਨੀਸ਼ਨ ਦੀ ਥਾਂ Kilo Gateway ਮਾਡਲ ਨਾਲ ਵੌਇਸ ਇਨਪੁਟ ਨੂੰ ਲਿਖਤ ਵਿੱਚ ਬਦਲੋ। ਤੁਹਾਡੀ ਰਿਕਾਰਡਿੰਗ Kilo Gateway ਨੂੰ ਭੇਜੀ ਜਾਂਦੀ ਹੈ।", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/pl.json b/apps/mobile/src/i18n/locales/pl.json index 416bf21e81..57bce3862b 100644 --- a/apps/mobile/src/i18n/locales/pl.json +++ b/apps/mobile/src/i18n/locales/pl.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Gdy ta opcja jest wyłączona, klawisz Enter wstawia nowy wiersz w polach wiadomości agentów.", "biometricUnlock": "Odblokowywanie biometryczne", "biometricUnlockSubtitle": "Odblokowanie jest wymagane przy uruchomieniu aplikacji oraz po pięciu minutach w tle.", - "featureFlags": "Flagi funkcji", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkrypcja przez Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkrybuj dyktowanie modelem Kilo Gateway zamiast rozpoznawania mowy na urządzeniu. Twoje nagranie zostanie wysłane do Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ps.json b/apps/mobile/src/i18n/locales/ps.json index ddc6dfc047..00ea3f9ef2 100644 --- a/apps/mobile/src/i18n/locales/ps.json +++ b/apps/mobile/src/i18n/locales/ps.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "که دا تنظیم بند وي، د انټر کیلي د ایجنټ د پیغام لیکلو په ځای کې نوې کرښه زیاتوي.", "biometricUnlock": "د بایومیټریک له لارې د قلف خلاصول", "biometricUnlockSubtitle": "د اپلیکیشن د پیل پر مهال او په شالید کې له پنځو دقیقو تېرولو وروسته قلف خلاص کړئ.", - "featureFlags": "د ځانګړتیاوو بیرغونه", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "د Kilo Gateway له لارې د غږ متن ته بدلول", "gatewayTranscriptionSubtitle": "غږیز لیکل د وسیلې د ویې پېژندنې پر ځای د Kilo Gateway ماډل سره متن ته واړوئ. غږیز ریکارډ مو د Kilo Gateway ته لیږل کېږي.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/pt-BR.json b/apps/mobile/src/i18n/locales/pt-BR.json index 53c4817e36..f713c58367 100644 --- a/apps/mobile/src/i18n/locales/pt-BR.json +++ b/apps/mobile/src/i18n/locales/pt-BR.json @@ -2175,11 +2175,6 @@ "returnSendsMessageSubtitle": "Quando essa opção está desativada, a tecla Enter insere uma quebra de linha nos campos de mensagem dos agentes.", "biometricUnlock": "Desbloqueio por biometria", "biometricUnlockSubtitle": "Exigir o desbloqueio ao abrir o app e após cinco minutos em segundo plano.", - "featureFlags": "Sinalizadores de recursos", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transcrição com Kilo Gateway", "gatewayTranscriptionSubtitle": "Transcreva a digitação por voz com um modelo do Kilo Gateway em vez do reconhecimento de fala do dispositivo. Sua gravação é enviada para o Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/pt.json b/apps/mobile/src/i18n/locales/pt.json index 0f02e2d7d9..250fb2c5fe 100644 --- a/apps/mobile/src/i18n/locales/pt.json +++ b/apps/mobile/src/i18n/locales/pt.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Quando desativado, a tecla de retorno insere uma nova linha nos campos de mensagem dos agentes.", "biometricUnlock": "Desbloquear com biometria", "biometricUnlockSubtitle": "É necessário desbloquear ao iniciar e após cinco minutos em segundo plano.", - "featureFlags": "Sinalizadores de recursos", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transcrição com Kilo Gateway", "gatewayTranscriptionSubtitle": "Transcreva o ditado com um modelo do Kilo Gateway em vez do reconhecimento de fala do dispositivo. A sua gravação é enviada para o Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ro.json b/apps/mobile/src/i18n/locales/ro.json index 494d0b64b3..7785ff1e21 100644 --- a/apps/mobile/src/i18n/locales/ro.json +++ b/apps/mobile/src/i18n/locales/ro.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Când opțiunea este dezactivată, tasta Enter inserează o linie nouă în câmpurile de mesaj ale agenților.", "biometricUnlock": "Deblocare prin autentificare biometrică", "biometricUnlockSubtitle": "Deblocarea este necesară la pornirea aplicației și după cinci minute în fundal.", - "featureFlags": "Fanioane de funcții", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transcriere cu Kilo Gateway", "gatewayTranscriptionSubtitle": "Transcrie dictarea cu un model Kilo Gateway în loc de recunoașterea vocală a dispozitivului. Înregistrarea este trimisă către Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ru.json b/apps/mobile/src/i18n/locales/ru.json index 0cf1a4d1cf..62c49b5a34 100644 --- a/apps/mobile/src/i18n/locales/ru.json +++ b/apps/mobile/src/i18n/locales/ru.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Если отключено, клавиша ввода добавляет перенос строки в поле ввода сообщения агенту.", "biometricUnlock": "Разблокировка по биометрии", "biometricUnlockSubtitle": "Разблокировка требуется при запуске приложения и после пяти минут в фоновом режиме.", - "featureFlags": "Флаги функций", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Распознавание речи через Kilo Gateway", "gatewayTranscriptionSubtitle": "Распознавайте голосовой ввод с помощью модели Kilo Gateway вместо распознавания речи на устройстве. Запись отправляется в Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/si.json b/apps/mobile/src/i18n/locales/si.json index c9f22a5be7..5403b7443e 100644 --- a/apps/mobile/src/i18n/locales/si.json +++ b/apps/mobile/src/i18n/locales/si.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "මෙය අක්‍රීය කළ විට එන්ටර් යතුරෙන් නියෝජිත පණිවිඩ කොටුවල නව පේළියක් ඇතුළත් කරයි.", "biometricUnlock": "ජෛවමිතික දත්ත භාවිතයෙන් අගුළු හරින්න", "biometricUnlockSubtitle": "යෙදුම ආරම්භ කරන විට සහ පසුබිමේ මිනිත්තු පහක් පැවතීමෙන් පසු අගුළු හැරීම අවශ්‍ය වේ.", - "featureFlags": "විශේෂාංග ධ්වජ", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway හරහා හඬ පෙළට හැරවීම", "gatewayTranscriptionSubtitle": "උපාංගයේ කථන හඳුනාගැනීම වෙනුවට Kilo Gateway ආකෘතියක් භාවිතයෙන් හඬ ආදානය පෙළ බවට හරින්න. ඔබේ පටිගත කිරීම Kilo Gateway වෙත යවනු ලැබේ.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/sk.json b/apps/mobile/src/i18n/locales/sk.json index fbd1d00dbe..1f93084f7d 100644 --- a/apps/mobile/src/i18n/locales/sk.json +++ b/apps/mobile/src/i18n/locales/sk.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Keď je táto možnosť vypnutá, kláves Enter vloží nový riadok do poľa na správu agentovi.", "biometricUnlock": "Odomknúť pomocou biometrie", "biometricUnlockSubtitle": "Odomknutie sa vyžaduje pri spustení aplikácie a po piatich minútach na pozadí.", - "featureFlags": "Príznaky funkcií", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Prepis cez Kilo Gateway", "gatewayTranscriptionSubtitle": "Prepisujte hlasový vstup modelom Kilo Gateway namiesto rozpoznávania reči v zariadení. Nahrávka sa odošle do Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/sl.json b/apps/mobile/src/i18n/locales/sl.json index e39a8974eb..1b264ddf69 100644 --- a/apps/mobile/src/i18n/locales/sl.json +++ b/apps/mobile/src/i18n/locales/sl.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Ko je možnost izklopljena, tipka Enter vstavi novo vrstico v polja za vnos sporočil agentom.", "biometricUnlock": "Odklepanje z biometrijo", "biometricUnlockSubtitle": "Odklepanje je obvezno ob zagonu aplikacije in po petih minutah v ozadju.", - "featureFlags": "Zastavice funkcij", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Prepisovanje prek Kilo Gateway", "gatewayTranscriptionSubtitle": "Glasovni vnos prepiši z modelom Kilo Gateway namesto prepoznavanja govora naprave. Posnetje se pošlje v Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/so.json b/apps/mobile/src/i18n/locales/so.json index 56e91b4aa4..e51b73d830 100644 --- a/apps/mobile/src/i18n/locales/so.json +++ b/apps/mobile/src/i18n/locales/so.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Marka la damiyo, furaha gelintu wuxuu sadar cusub ku daraa goobaha farriimaha wakiilka lagu qoro.", "biometricUnlock": "Ku fur aqoonsiga astaamaha jirka", "biometricUnlockSubtitle": "Fur marka barnaamijku bilaabmo iyo marka uu shan daqiiqo gadaal ka shaqaynayay.", - "featureFlags": "Calaamadaha sifooyinka", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Qoraal u beddelidda codka ee Kilo Gateway", "gatewayTranscriptionSubtitle": "Codka ku beddel qoraal moodeelka Kilo Gateway adigoo aan isticmaalayn aqoonsiga hadalka ee qalabka. Duubistaada waxaa loo diraa Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/sq.json b/apps/mobile/src/i18n/locales/sq.json index 3f65b22d3f..54e663de8f 100644 --- a/apps/mobile/src/i18n/locales/sq.json +++ b/apps/mobile/src/i18n/locales/sq.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kur ky opsion është i çaktivizuar, tasti Enter shton një rresht të ri në fushën e mesazhit për agjentin.", "biometricUnlock": "Zhbllokim me biometri", "biometricUnlockSubtitle": "Zhbllokimi kërkohet kur hap aplikacionin dhe pasi ai qëndron pesë minuta në sfond.", - "featureFlags": "Flamujt e veçorive", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkriptim me Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkripto diktimin me një model Kilo Gateway në vend të njohjes së të folurit të pajisjes. Regjistrimi yt dërgohet te Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/sr.json b/apps/mobile/src/i18n/locales/sr.json index 55486d84ab..e19244ceda 100644 --- a/apps/mobile/src/i18n/locales/sr.json +++ b/apps/mobile/src/i18n/locales/sr.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kada je ova opcija isključena, taster za novi red umeće novi red u polje za poruku agentu.", "biometricUnlock": "Otključavanje biometrijom", "biometricUnlockSubtitle": "Otključavanje je obavezno pri pokretanju aplikacije i nakon pet minuta u pozadini.", - "featureFlags": "Zastavice funkcija", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkripcija preko Kilo Gateway-a", "gatewayTranscriptionSubtitle": "Prepiši glasovni unos modelom Kilo Gateway-a umesto prepoznavanja govora na uređaju. Snimak se šalje na Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/sv.json b/apps/mobile/src/i18n/locales/sv.json index 546f1079d5..97a5ed55e7 100644 --- a/apps/mobile/src/i18n/locales/sv.json +++ b/apps/mobile/src/i18n/locales/sv.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "När detta är avstängt infogar returtangenten en radbrytning i agenternas meddelandefält.", "biometricUnlock": "Lås upp med biometri", "biometricUnlockSubtitle": "Upplåsning krävs när appen startas och efter fem minuter i bakgrunden.", - "featureFlags": "Funktionsflaggor", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Transkribering via Kilo Gateway", "gatewayTranscriptionSubtitle": "Transkribera röstinmatningen med en Kilo Gateway-modell i stället för enhetens taligenkänning. Din inspelning skickas till Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/sw.json b/apps/mobile/src/i18n/locales/sw.json index 15aea47d96..56193c6ccb 100644 --- a/apps/mobile/src/i18n/locales/sw.json +++ b/apps/mobile/src/i18n/locales/sw.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kipengele hiki kikiwa kimezimwa, kitufe cha kuingiza huongeza mstari mpya kwenye sehemu za kuandika ujumbe kwa mawakala.", "biometricUnlock": "Fungua kwa bayometriki", "biometricUnlockSubtitle": "Kufungua kunahitajika unapoanzisha programu na baada ya programu kukaa chinichini kwa dakika tano.", - "featureFlags": "Alamu za vipengele", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Unukuzi wa sauti kupitia Kilo Gateway", "gatewayTranscriptionSubtitle": "Badilisha uingizaji wa sauti kuwa maandishi kwa modeli ya Kilo Gateway badala ya utambuzi wa sauti wa kifaa. Rekodi yako imetumwa kwa Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ta.json b/apps/mobile/src/i18n/locales/ta.json index d13a5e1406..bdf290e698 100644 --- a/apps/mobile/src/i18n/locales/ta.json +++ b/apps/mobile/src/i18n/locales/ta.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "இதை முடக்கினால், ஏஜென்ட்டின் செய்திப் பெட்டியில் என்டர் விசை புதிய வரியைச் செருகும்.", "biometricUnlock": "உயிரளவியல் மூலம் பூட்டைத் திறக்கவும்", "biometricUnlockSubtitle": "செயலியைத் தொடங்கும்போதும், பின்னணியில் ஐந்து நிமிடங்கள் இருந்த பிறகும் பூட்டைத் திறக்க வேண்டும்.", - "featureFlags": "அம்சக் கொடிகள்", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway மூலம் பேச்சு உரையாக்கம்", "gatewayTranscriptionSubtitle": "சாதனத்தின் பேச்சு அடையாளப்படுத்தலுக்குப் பதிலாக Kilo Gateway மாதிரியைப் பயன்படுத்தி குரல் உள்ளீட்டை உரையாக்குங்கள். உங்கள் பதிவு Kilo Gateway-க்கு அனுப்பப்படுகிறது.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/te.json b/apps/mobile/src/i18n/locales/te.json index 965c8f00c2..d5a81bc4b4 100644 --- a/apps/mobile/src/i18n/locales/te.json +++ b/apps/mobile/src/i18n/locales/te.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "దీన్ని ఆఫ్ చేస్తే, రిటర్న్ కీ ఏజెంట్ సందేశ పెట్టెల్లో కొత్త పంక్తిని చేర్చుతుంది.", "biometricUnlock": "బయోమెట్రిక్స్‌తో అన్‌లాక్ చేయండి", "biometricUnlockSubtitle": "యాప్‌ను తెరిచినప్పుడు, అలాగే అది నేపథ్యంలో ఐదు నిమిషాలు ఉన్న తర్వాత అన్‌లాక్ చేయాలి.", - "featureFlags": "ఫీచర్ ఫ్లాగులు", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway ద్వారా మాటలను వచనంగా మార్చడం", "gatewayTranscriptionSubtitle": "పరికరం యొక్క మాటల గుర్తింపుకు బదులు Kilo Gateway మోడల్‌తో వాయిస్ ఇన్‌పుట్‌ను వచనంగా మార్చండి. మీ రికార్డింగ్ Kilo Gatewayకు పంపబడుతుంది.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/th.json b/apps/mobile/src/i18n/locales/th.json index b2ad33b5cc..6aa3eb232a 100644 --- a/apps/mobile/src/i18n/locales/th.json +++ b/apps/mobile/src/i18n/locales/th.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "เมื่อปิด ปุ่มขึ้นบรรทัดใหม่จะแทรกบรรทัดใหม่ในช่องป้อนข้อความของเอเจนต์", "biometricUnlock": "ปลดล็อกด้วยข้อมูลชีวมิติ", "biometricUnlockSubtitle": "ต้องปลดล็อกเมื่อเปิดแอปและเมื่อกลับมาใช้งานหลังจากแอปอยู่เบื้องหลังครบห้านาที", - "featureFlags": "แฟล็กฟีเจอร์", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "การถอดเสียงผ่าน Kilo Gateway", "gatewayTranscriptionSubtitle": "ถอดเสียงจากการพิมพ์ด้วยเสียงด้วยโมเดลของ Kilo Gateway แทนการรู้จำเสียงของอุปกรณ์ ระบบจะส่งการบันทึกเสียงของคุณไปยัง Kilo Gateway", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/tr.json b/apps/mobile/src/i18n/locales/tr.json index f7f49c50c2..093593387c 100644 --- a/apps/mobile/src/i18n/locales/tr.json +++ b/apps/mobile/src/i18n/locales/tr.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Kapalıyken Enter tuşu, ajanla konuşurken mesaj alanına yeni satır ekler.", "biometricUnlock": "Biyometrik doğrulama ile kilit açma", "biometricUnlockSubtitle": "Uygulama başlatıldığında ve arka planda beş dakika kaldıktan sonra kilidin açılması gerekir.", - "featureFlags": "Özellik bayrakları", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway ile sesi metne dönüştürme", "gatewayTranscriptionSubtitle": "Sesli girişi cihazın konuşma tanıması yerine bir Kilo Gateway modeliyle metne dönüştürün. Kaydınız Kilo Gateway'e gönderilir.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/uk.json b/apps/mobile/src/i18n/locales/uk.json index a18bf3ddc6..a244770200 100644 --- a/apps/mobile/src/i18n/locales/uk.json +++ b/apps/mobile/src/i18n/locales/uk.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Якщо вимкнено, клавіша вводу вставляє новий рядок у полях введення повідомлень агентам.", "biometricUnlock": "Біометричне розблокування", "biometricUnlockSubtitle": "Запитувати біометричне розблокування під час запуску та після п'яти хвилин у фоновому режимі.", - "featureFlags": "Прапори функцій", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Розпізнавання мовлення через Kilo Gateway", "gatewayTranscriptionSubtitle": "Розпізнайте голосове введення за допомогою моделі Kilo Gateway замість розпізнавання мовлення на пристрої. Запис надсилається до Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/ur.json b/apps/mobile/src/i18n/locales/ur.json index 1cd26c3310..d5ae03f915 100644 --- a/apps/mobile/src/i18n/locales/ur.json +++ b/apps/mobile/src/i18n/locales/ur.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "اگر یہ ترتیب بند ہو تو ریٹرن کی دبانے سے ایجنٹ کو پیغام لکھنے کے خانے میں نئی سطر شامل ہوتی ہے۔", "biometricUnlock": "بایومیٹرکس سے انلاک کریں", "biometricUnlockSubtitle": "ایپ شروع کرنے پر اور پس منظر میں پانچ منٹ رہنے کے بعد انلاک کرنا ضروری ہے۔", - "featureFlags": "فیچر فلیگز", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Kilo Gateway کے ذریعے آواز کو متن میں بدلنا", "gatewayTranscriptionSubtitle": "ڈیوائس کی آواز کی پہچان کے بجائے Kilo Gateway ماڈل کے ذریعے آواز سے لکھنے کو متن میں بدلیں۔ آپ کی ریکارڈنگ Kilo Gateway کو بھیجی جاتی ہے۔", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/uz.json b/apps/mobile/src/i18n/locales/uz.json index 0da55578a6..4bb243ef88 100644 --- a/apps/mobile/src/i18n/locales/uz.json +++ b/apps/mobile/src/i18n/locales/uz.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "O'chirilganda Enter tugmasi agentga xabar kiritish maydonida yangi qator ochadi.", "biometricUnlock": "Biometriya yordamida qulfni ochish", "biometricUnlockSubtitle": "Ilova ishga tushirilganda va fonda besh daqiqa turgandan keyin qulfni ochish talab qilinadi.", - "featureFlags": "Funksiya bayroqlari", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Nutqni Kilo Gateway orqali matnga aylantirish", "gatewayTranscriptionSubtitle": "Qurilmaning nutqni tanishining o'rniga Kilo Gateway modeli yordamida ovozli kiritishni matnga aylantiring. Yozuvingiz Kilo Gatewayga yuboriladi.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/vi.json b/apps/mobile/src/i18n/locales/vi.json index b8e563bc84..328caef5bf 100644 --- a/apps/mobile/src/i18n/locales/vi.json +++ b/apps/mobile/src/i18n/locales/vi.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Khi tắt, phím xuống dòng sẽ chèn dòng mới vào ô nhập tin nhắn gửi cho tác nhân.", "biometricUnlock": "Mở khóa bằng sinh trắc học", "biometricUnlockSubtitle": "Yêu cầu mở khóa khi khởi chạy ứng dụng và sau khi ứng dụng ở chế độ nền trong năm phút.", - "featureFlags": "Cờ tính năng", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Chuyển giọng nói thành văn bản qua Kilo Gateway", "gatewayTranscriptionSubtitle": "Sử dụng mô hình Kilo Gateway để chuyển nội dung nhập bằng giọng nói thành văn bản thay vì nhận dạng giọng nói của thiết bị. Bản ghi của bạn được gửi tới Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/yo.json b/apps/mobile/src/i18n/locales/yo.json index 05aa762ead..be40518b4c 100644 --- a/apps/mobile/src/i18n/locales/yo.json +++ b/apps/mobile/src/i18n/locales/yo.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Tí èyí bá wà ní pípa, bọ́tìnì ìpadàbọ̀ máa ń fi ìlà tuntun sí ààyè ìkọ̀wé sí aṣojú.", "biometricUnlock": "Ṣí títìpa pẹ̀lú ìdánimọ̀ àbùdá ara", "biometricUnlockSubtitle": "Ṣí títìpa nígbà tí o bá ṣí ohun èlò àti lẹ́yìn ìṣẹ́jú márùn-ún tí kò sí níwájú iboju.", - "featureFlags": "Àṣì ẹ̀yà", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Yíyí ohùn sí ọ̀rọ̀ pẹ̀lú Kilo Gateway", "gatewayTranscriptionSubtitle": "Yí títẹ ọ̀rọ̀ pẹ̀lú ohùn sí ọ̀rọ̀-kíkọ pẹ̀lú àwòṣe Kilo Gateway dípò mímọ̀ ọ̀rọ̀ ẹ̀rọ náà. A ó fi àkọsílẹ̀ rẹ ránṣẹ́ sí Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/zh-Hans.json b/apps/mobile/src/i18n/locales/zh-Hans.json index 3ac4247487..7a20a78ab8 100644 --- a/apps/mobile/src/i18n/locales/zh-Hans.json +++ b/apps/mobile/src/i18n/locales/zh-Hans.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "关闭后,按回车键会在智能体的消息输入框中换行。", "biometricUnlock": "使用生物识别解锁", "biometricUnlockSubtitle": "启动应用时以及应用在后台停留五分钟后,均需解锁。", - "featureFlags": "功能标志", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "使用 Kilo Gateway 转写", "gatewayTranscriptionSubtitle": "使用 Kilo Gateway 模型转写语音输入,而不使用设备上的语音识别。您的录音将发送至 Kilo Gateway。", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/zh-Hant.json b/apps/mobile/src/i18n/locales/zh-Hant.json index ecfaab2248..0e4183325b 100644 --- a/apps/mobile/src/i18n/locales/zh-Hant.json +++ b/apps/mobile/src/i18n/locales/zh-Hant.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "關閉後,在智慧代理的訊息輸入框中按換行鍵只會換行。", "biometricUnlock": "使用生物辨識解鎖", "biometricUnlockSubtitle": "啟動應用程式時,以及在背景停留五分鐘後返回時,都需要解鎖。", - "featureFlags": "功能旗標", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "使用 Kilo Gateway 轉錄", "gatewayTranscriptionSubtitle": "使用 Kilo Gateway 模型將語音輸入轉錄成文字,而不使用裝置上的語音辨識。您的錄音將傳送至 Kilo Gateway。", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/i18n/locales/zu.json b/apps/mobile/src/i18n/locales/zu.json index 3d7af03ab2..14729e08a8 100644 --- a/apps/mobile/src/i18n/locales/zu.json +++ b/apps/mobile/src/i18n/locales/zu.json @@ -275,11 +275,6 @@ "returnSendsMessageSubtitle": "Uma lokhu kuvaliwe, inkinobho yokubuyela ifaka umugqa omusha ezindaweni zokubhalela abenzeli.", "biometricUnlock": "Vula ngebhayomethrikhi", "biometricUnlockSubtitle": "Vula uhlelo lokusebenza lapho luqala nangemva kokuba selunemizuzu emihlanu lusebenza ngemuva.", - "featureFlags": "Amaflagi ezici", - "featureFlagsBuild": "v{{version}}", - "featureFlagApplied": "remote · ≥ {{min}}", - "featureFlagSkipped": "default · < {{min}}", - "featureFlagNotLoaded": "default · not loaded", "gatewayTranscription": "Ukuguqulwa kwenkulumo ibe umbhalo nge-Kilo Gateway", "gatewayTranscriptionSubtitle": "Guqula ukufaka ngezwi kube umbhalo usebenzisa imodeli ye-Kilo Gateway kunokubona inkulumo kwedivayisi. Ukuqopha kwakho kuthunyelwa ku-Kilo Gateway.", "transcriptionModel": "$t(transcriptionModel.title)", diff --git a/apps/mobile/src/lib/analytics/posthog.feature-flags.test.ts b/apps/mobile/src/lib/analytics/posthog.feature-flags.test.ts index 58c6ff1994..e0577d4be1 100644 --- a/apps/mobile/src/lib/analytics/posthog.feature-flags.test.ts +++ b/apps/mobile/src/lib/analytics/posthog.feature-flags.test.ts @@ -2,8 +2,6 @@ import { createElement } from 'react'; import { act, TestRenderer } from '@/test/renderer'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { type FeatureFlagStatus } from './posthog'; - const hoisted = vi.hoisted(() => { const client = { register: vi.fn(), @@ -168,96 +166,3 @@ describe('version-aware feature flags', () => { expect(await readFlag('mobile-not-in-registry', false)).toBe(true); }); }); - -describe('feature flag statuses (debug surface)', () => { - it('reports which flags the build applies and which it skips, with reasons', async () => { - hoisted.application.nativeApplicationVersion = '1.0.5'; - hoisted.client.getFeatureFlag.mockImplementation( - (key: string) => (key === 'mobile-pr-review' ? false : undefined) as never - ); - const { initPostHog, getFeatureFlagStatuses } = await import('./posthog'); - initPostHog(); - - expect(getFeatureFlagStatuses()).toEqual([ - { - key: 'mobile-pr-review', - minAppVersion: '1.0.4', - defaultValue: true, - appVersion: '1.0.5', - applied: true, - value: false, - reason: 'applied', - loaded: true, - }, - { - key: 'mobile-quick-chat', - minAppVersion: '1.0.6', - defaultValue: false, - appVersion: '1.0.5', - applied: false, - value: false, - reason: 'build-too-old', - loaded: false, - }, - ]); - }); - - it('reports defaults in use while the client has no flag values', async () => { - const { initPostHog, getFeatureFlagStatuses } = await import('./posthog'); - initPostHog(); - - const statuses = getFeatureFlagStatuses(); - expect(statuses.every(status => !status.loaded)).toBe(true); - expect(statuses.every(status => !status.applied)).toBe(true); - expect(statuses.map(status => status.value)).toEqual( - statuses.map(status => status.defaultValue) - ); - }); - - it('reports a skipped flag even when a remote value exists', async () => { - hoisted.application.nativeApplicationVersion = '1.0.5'; - hoisted.client.getFeatureFlag.mockImplementation(() => true as never); - const { initPostHog, getFeatureFlagStatuses } = await import('./posthog'); - initPostHog(); - - const quickChat = getFeatureFlagStatuses().find(status => status.key === 'mobile-quick-chat'); - expect(quickChat).toMatchObject({ - applied: false, - reason: 'build-too-old', - value: false, - loaded: true, - }); - }); - - it('updates reactively when the client re-emits flags', async () => { - hoisted.client.getFeatureFlag.mockImplementation(() => undefined as never); - const posthog = await import('./posthog'); - posthog.initPostHog(); - - const statuses: FeatureFlagStatus[][] = []; - function Probe() { - statuses.push(posthog.useFeatureFlagStatuses()); - return null; - } - let renderer: TestRenderer.ReactTestRenderer | undefined = undefined; - act(() => { - renderer = TestRenderer.create(createElement(Probe)); - }); - - // Remote value arrives for the current build: statuses flip to applied. - hoisted.client.getFeatureFlag.mockImplementation( - (key: string) => (key === 'mobile-quick-chat' ? true : undefined) as never - ); - const onChange = hoisted.client.onFeatureFlags.mock.calls[0]?.[0] as () => void; - act(() => { - onChange(); - }); - - const latest = statuses.at(-1) ?? []; - const quickChat = latest.find(status => status.key === 'mobile-quick-chat'); - expect(quickChat).toMatchObject({ applied: true, value: true, reason: 'applied' }); - act(() => { - renderer?.unmount(); - }); - }); -}); diff --git a/apps/mobile/src/lib/analytics/posthog.ts b/apps/mobile/src/lib/analytics/posthog.ts index 982032ccff..196f3b4a21 100644 --- a/apps/mobile/src/lib/analytics/posthog.ts +++ b/apps/mobile/src/lib/analytics/posthog.ts @@ -11,7 +11,6 @@ import { useCallback, useSyncExternalStore } from 'react'; import { POSTHOG_API_KEY } from '@/lib/config'; import { currentAppVersion, - FEATURE_FLAG_DEFINITIONS, getFeatureFlagDefinition, isAppVersionAtLeast, } from '@/lib/feature-flags'; @@ -210,7 +209,6 @@ export function initPostHog(): void { customStorage: posthogCustomStorage, }); clientGeneration = currentGeneration(); - statusRevision += 1; notifyPostHogReady(); // Super property on every event so dashboards can filter mobile vs web // without relying on $lib. @@ -219,8 +217,6 @@ export function initPostHog(): void { // even before (or without) an identified user. Triggers a flag reload. client.setPersonPropertiesForFlags(appVersionProperties()); client.onFeatureFlags(() => { - // Remote values changed: the statuses snapshot is stale. - statusRevision += 1; for (const listener of flagListeners) { listener(); } @@ -354,7 +350,6 @@ export async function discardPostHog(): Promise { // oxlint-disable-next-line anti-slop/no-runtime-typeof -- see comment above: guards against a client that violates its own type's contract if (typeof c?.setPersistedProperty !== 'function') { client = null; - statusRevision += 1; notifyPostHogReady(); return; } @@ -371,7 +366,6 @@ export async function discardPostHog(): Promise { // Ready listeners persist — they must observe both the false transition // now and a true transition from a later initPostHog. client = null; - statusRevision += 1; notifyPostHogReady(); try { @@ -428,62 +422,6 @@ function isFeatureEnabled(key: string, defaultValue: boolean): boolean { return value === undefined ? defaultValue : value === true; } -/** How the version gate resolved for one flag (see `FeatureFlagStatus`). */ -export type FeatureFlagStatusReason = 'applied' | 'build-too-old'; - -/** One registry flag's resolved state for this build, for the debug surface. */ -export type FeatureFlagStatus = Readonly<{ - key: string; - minAppVersion: string; - defaultValue: boolean; - /** This build's version; null when the platform does not report one. */ - appVersion: string | null; - /** True when the remote value is trusted and used. */ - applied: boolean; - /** The value the UI acts on. */ - value: boolean; - reason: FeatureFlagStatusReason; - /** True when the client had a remote value for the key. */ - loaded: boolean; -}>; - -// `useFeatureFlagStatuses` returns a stable snapshot between flag updates, so -// `useSyncExternalStore` does not loop on a fresh array each read. -let statusRevision = 0; -let statusCache: { revision: number; statuses: FeatureFlagStatus[] } | null = null; - -function buildStatuses(): FeatureFlagStatus[] { - // Registry order is the row order on the debug surface. - return FEATURE_FLAG_DEFINITIONS.map(definition => { - const appVersion = currentAppVersion(); - const remote = client?.getFeatureFlag(definition.key); - const loaded = remote !== undefined; - const tooOld = !isAppVersionAtLeast(appVersion, definition.minAppVersion); - if (tooOld) { - return { - key: definition.key, - minAppVersion: definition.minAppVersion, - defaultValue: definition.defaultValue, - appVersion, - applied: false, - value: definition.defaultValue, - reason: 'build-too-old', - loaded, - }; - } - return { - key: definition.key, - minAppVersion: definition.minAppVersion, - defaultValue: definition.defaultValue, - appVersion, - applied: loaded, - value: loaded ? remote === true : definition.defaultValue, - reason: 'applied', - loaded, - }; - }); -} - /** * Reactively read a boolean feature flag. Fails open: while the client is * disabled (dev builds), uninitialized, or flags have not loaded yet, returns @@ -503,29 +441,3 @@ export function useFeatureFlag(key: string, defaultValue = false): boolean { const getSnapshot = useCallback(() => isFeatureEnabled(key, defaultValue), [key, defaultValue]); return useSyncExternalStore(subscribe, getSnapshot); } - -/** - * All registry flags' resolved state for this build (see `FeatureFlagStatus`), - * for the debug surface in Preferences. Stable reference between flag - * updates, so it is safe as a `useSyncExternalStore` snapshot. - */ -export function getFeatureFlagStatuses(): FeatureFlagStatus[] { - if (statusCache?.revision !== statusRevision) { - statusCache = { revision: statusRevision, statuses: buildStatuses() }; - } - return statusCache.statuses; -} - -/** - * Reactively read every registry flag's status. Updates with the same flag - * lifecycle as `useFeatureFlag`: on client creation, discard, and flag loads. - */ -export function useFeatureFlagStatuses(): FeatureFlagStatus[] { - const subscribe = useCallback((onChange: () => void) => { - flagListeners.add(onChange); - return () => { - flagListeners.delete(onChange); - }; - }, []); - return useSyncExternalStore(subscribe, getFeatureFlagStatuses); -} diff --git a/apps/mobile/src/lib/feature-flags.ts b/apps/mobile/src/lib/feature-flags.ts index 8c558aae41..c5b928ed5b 100644 --- a/apps/mobile/src/lib/feature-flags.ts +++ b/apps/mobile/src/lib/feature-flags.ts @@ -26,7 +26,7 @@ export type FeatureFlagDefinition = Readonly<{ }>; /** - * The registry the debug surface lists. Minimums record the first release that + * The registry the version gate reads. Minimums record the first release that * shipped each flag's reading code: * - `mobile-pr-review` (#4669) first released in 1.0.4. * - `mobile-quick-chat` (#5541) first released in 1.0.6. diff --git a/tools/i18n/check-catalogs.mjs b/tools/i18n/check-catalogs.mjs index e8e5044a14..4239a9b53b 100644 --- a/tools/i18n/check-catalogs.mjs +++ b/tools/i18n/check-catalogs.mjs @@ -79,13 +79,6 @@ const ENGLISH_IDENTICAL_ALLOWLIST = new Set([ 'profile.providerAnaconda', 'profile.providerApple', 'profile.providerDiscord', - // Feature-flag debug surface (Preferences): version comparisons and the - // source of a row's value are notation — flag keys, versions and the - // remote/default markers are technical tokens, not translatable prose. - 'preferences.featureFlagsBuild', - 'preferences.featureFlagApplied', - 'preferences.featureFlagSkipped', - 'preferences.featureFlagNotLoaded', 'common.github', 'common.gitlab', 'profile.providerGoogle',