react-native-inapp-inspector 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.ar.md +163 -0
  2. package/README.de.md +163 -0
  3. package/README.es.md +164 -0
  4. package/README.fr.md +163 -0
  5. package/README.hi.md +163 -0
  6. package/README.ja.md +180 -0
  7. package/README.ko.md +163 -0
  8. package/README.md +340 -243
  9. package/README.pt-BR.md +163 -0
  10. package/README.ru.md +163 -0
  11. package/README.zh-CN.md +387 -0
  12. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +82 -21
  13. package/assets/banner_dark.svg +186 -0
  14. package/assets/banner_light.svg +186 -0
  15. package/assets/icon_circle.svg +148 -0
  16. package/assets/icon_square.svg +369 -0
  17. package/assets/inapp_inspector_icon.gif +0 -0
  18. package/assets/inapp_inspector_icon_original.gif +0 -0
  19. package/assets/social_preview.png +0 -0
  20. package/assets/walkthrough.gif +0 -0
  21. package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
  22. package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
  23. package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
  24. package/dist/commonjs/components/AppHeaderLogo.js +7 -5
  25. package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
  26. package/dist/commonjs/components/BrandSquareIcon.js +139 -0
  27. package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
  28. package/dist/commonjs/components/ConsoleLogCard.js +23 -39
  29. package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
  30. package/dist/commonjs/components/Inspector/AnalyticsTab.js +16 -16
  31. package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
  32. package/dist/commonjs/components/Inspector/ConfirmationModal.js +32 -0
  33. package/dist/commonjs/components/Inspector/ConsoleTab.js +15 -15
  34. package/dist/commonjs/components/Inspector/CrashTab.js +25 -23
  35. package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
  36. package/dist/commonjs/components/Inspector/FabLauncher.js +22 -30
  37. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
  38. package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  39. package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +90 -0
  40. package/dist/commonjs/components/Inspector/MainScreen.js +46 -33
  41. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +21 -19
  42. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +85 -101
  43. package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
  44. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
  45. package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
  46. package/dist/commonjs/components/Inspector/PushCard.js +5 -4
  47. package/dist/commonjs/components/Inspector/PushDetail.js +32 -23
  48. package/dist/commonjs/components/Inspector/PushTab.js +13 -13
  49. package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
  50. package/dist/commonjs/components/Inspector/ReduxTab.js +14 -14
  51. package/dist/commonjs/components/Inspector/SettingsPanel.js +258 -139
  52. package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
  53. package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
  54. package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
  55. package/dist/commonjs/components/Inspector/SocketDetail.js +317 -0
  56. package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
  57. package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
  58. package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
  59. package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
  60. package/dist/commonjs/components/Inspector/StorageTab.js +34 -32
  61. package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
  62. package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
  63. package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
  64. package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
  65. package/dist/commonjs/components/Inspector/TabBar.js +24 -23
  66. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
  67. package/dist/commonjs/components/JsonViewer.js +7 -7
  68. package/dist/commonjs/components/LogCard.d.ts +3 -2
  69. package/dist/commonjs/components/LogCard.js +17 -14
  70. package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
  71. package/dist/commonjs/components/ModuleErrorBoundary.js +2 -2
  72. package/dist/commonjs/components/NetworkIcons.d.ts +15 -0
  73. package/dist/commonjs/components/NetworkIcons.js +38 -3
  74. package/dist/commonjs/components/SegmentedTabs.js +1 -1
  75. package/dist/commonjs/constants/version.d.ts +1 -1
  76. package/dist/commonjs/constants/version.js +1 -1
  77. package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
  78. package/dist/commonjs/customHooks/socketLogger.js +2 -0
  79. package/dist/commonjs/helpers/index.js +3 -3
  80. package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
  81. package/dist/commonjs/helpers/memoryManager.js +1 -1
  82. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
  83. package/dist/commonjs/helpers/searchQueryParser.js +5 -1
  84. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  85. package/dist/commonjs/helpers/settingsStore.js +1 -1
  86. package/dist/commonjs/helpers/shareFormatter.d.ts +3 -1
  87. package/dist/commonjs/helpers/shareFormatter.js +8 -7
  88. package/dist/commonjs/i18n/index.d.ts +99 -1
  89. package/dist/commonjs/i18n/index.js +1 -1
  90. package/dist/commonjs/i18n/locales/ar.json +1 -1
  91. package/dist/commonjs/i18n/locales/bn.json +1 -0
  92. package/dist/commonjs/i18n/locales/de.json +1 -1
  93. package/dist/commonjs/i18n/locales/en.json +1 -1
  94. package/dist/commonjs/i18n/locales/es.json +1 -1
  95. package/dist/commonjs/i18n/locales/fr.json +1 -1
  96. package/dist/commonjs/i18n/locales/gu.json +1 -0
  97. package/dist/commonjs/i18n/locales/hi.json +1 -1
  98. package/dist/commonjs/i18n/locales/id.json +1 -0
  99. package/dist/commonjs/i18n/locales/it.json +1 -0
  100. package/dist/commonjs/i18n/locales/ja.json +1 -1
  101. package/dist/commonjs/i18n/locales/kn.json +1 -0
  102. package/dist/commonjs/i18n/locales/ko.json +1 -1
  103. package/dist/commonjs/i18n/locales/ml.json +1 -0
  104. package/dist/commonjs/i18n/locales/mr.json +1 -0
  105. package/dist/commonjs/i18n/locales/nl.json +1 -0
  106. package/dist/commonjs/i18n/locales/pa.json +1 -0
  107. package/dist/commonjs/i18n/locales/pl.json +1 -0
  108. package/dist/commonjs/i18n/locales/pt.json +1 -1
  109. package/dist/commonjs/i18n/locales/ru.json +1 -1
  110. package/dist/commonjs/i18n/locales/ta.json +1 -0
  111. package/dist/commonjs/i18n/locales/te.json +1 -0
  112. package/dist/commonjs/i18n/locales/tr.json +1 -0
  113. package/dist/commonjs/i18n/locales/vi.json +1 -0
  114. package/dist/commonjs/i18n/locales/zh.json +1 -1
  115. package/dist/commonjs/index.d.ts +13 -13
  116. package/dist/commonjs/index.js +5 -4
  117. package/dist/commonjs/native/NativeInspector.d.ts +1 -0
  118. package/dist/commonjs/socket.d.ts +4 -0
  119. package/dist/commonjs/socket.js +1 -0
  120. package/dist/commonjs/styles/index.d.ts +23 -0
  121. package/dist/commonjs/styles/index.js +1 -1
  122. package/dist/commonjs/types/enums.d.ts +40 -0
  123. package/dist/commonjs/types/enums.js +1 -1
  124. package/dist/commonjs/types/interfaces.d.ts +122 -1
  125. package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
  126. package/dist/esm/components/AnimatedBrandOwl.js +175 -0
  127. package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
  128. package/dist/esm/components/AppHeaderLogo.js +7 -5
  129. package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
  130. package/dist/esm/components/BrandSquareIcon.js +139 -0
  131. package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
  132. package/dist/esm/components/ConsoleLogCard.js +61 -77
  133. package/dist/esm/components/Inspector/AboutModal.js +85 -95
  134. package/dist/esm/components/Inspector/AnalyticsTab.js +31 -31
  135. package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
  136. package/dist/esm/components/Inspector/ConfirmationModal.js +32 -0
  137. package/dist/esm/components/Inspector/ConsoleTab.js +49 -49
  138. package/dist/esm/components/Inspector/CrashTab.js +40 -38
  139. package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
  140. package/dist/esm/components/Inspector/FabLauncher.js +50 -58
  141. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
  142. package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  143. package/dist/esm/components/Inspector/LanguageSelectorModal.js +90 -0
  144. package/dist/esm/components/Inspector/MainScreen.js +123 -110
  145. package/dist/esm/components/Inspector/MediaGalleryTab.js +64 -62
  146. package/dist/esm/components/Inspector/MediaPreviewModal.js +107 -123
  147. package/dist/esm/components/Inspector/NetworkTab.js +90 -90
  148. package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
  149. package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
  150. package/dist/esm/components/Inspector/PushCard.js +23 -22
  151. package/dist/esm/components/Inspector/PushDetail.js +34 -25
  152. package/dist/esm/components/Inspector/PushTab.js +25 -25
  153. package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
  154. package/dist/esm/components/Inspector/ReduxTab.js +35 -35
  155. package/dist/esm/components/Inspector/SettingsPanel.js +495 -376
  156. package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
  157. package/dist/esm/components/Inspector/SocketCard.js +116 -0
  158. package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
  159. package/dist/esm/components/Inspector/SocketDetail.js +317 -0
  160. package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
  161. package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
  162. package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
  163. package/dist/esm/components/Inspector/SocketTab.js +112 -0
  164. package/dist/esm/components/Inspector/StorageTab.js +136 -134
  165. package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
  166. package/dist/esm/components/Inspector/SupportModal.js +125 -0
  167. package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
  168. package/dist/esm/components/Inspector/SupportPage.js +227 -0
  169. package/dist/esm/components/Inspector/TabBar.js +36 -35
  170. package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
  171. package/dist/esm/components/JsonViewer.js +55 -55
  172. package/dist/esm/components/LogCard.d.ts +3 -2
  173. package/dist/esm/components/LogCard.js +61 -58
  174. package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
  175. package/dist/esm/components/ModuleErrorBoundary.js +23 -23
  176. package/dist/esm/components/NetworkIcons.d.ts +15 -0
  177. package/dist/esm/components/NetworkIcons.js +38 -3
  178. package/dist/esm/components/SegmentedTabs.js +7 -7
  179. package/dist/esm/constants/version.d.ts +1 -1
  180. package/dist/esm/constants/version.js +1 -1
  181. package/dist/esm/customHooks/socketLogger.d.ts +26 -0
  182. package/dist/esm/customHooks/socketLogger.js +2 -0
  183. package/dist/esm/helpers/index.js +3 -3
  184. package/dist/esm/helpers/memoryManager.d.ts +1 -0
  185. package/dist/esm/helpers/memoryManager.js +1 -1
  186. package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
  187. package/dist/esm/helpers/searchQueryParser.js +5 -1
  188. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  189. package/dist/esm/helpers/settingsStore.js +1 -1
  190. package/dist/esm/helpers/shareFormatter.d.ts +3 -1
  191. package/dist/esm/helpers/shareFormatter.js +8 -7
  192. package/dist/esm/i18n/index.d.ts +99 -1
  193. package/dist/esm/i18n/index.js +1 -1
  194. package/dist/esm/i18n/locales/ar.json +1 -1
  195. package/dist/esm/i18n/locales/bn.json +1 -0
  196. package/dist/esm/i18n/locales/de.json +1 -1
  197. package/dist/esm/i18n/locales/en.json +1 -1
  198. package/dist/esm/i18n/locales/es.json +1 -1
  199. package/dist/esm/i18n/locales/fr.json +1 -1
  200. package/dist/esm/i18n/locales/gu.json +1 -0
  201. package/dist/esm/i18n/locales/hi.json +1 -1
  202. package/dist/esm/i18n/locales/id.json +1 -0
  203. package/dist/esm/i18n/locales/it.json +1 -0
  204. package/dist/esm/i18n/locales/ja.json +1 -1
  205. package/dist/esm/i18n/locales/kn.json +1 -0
  206. package/dist/esm/i18n/locales/ko.json +1 -1
  207. package/dist/esm/i18n/locales/ml.json +1 -0
  208. package/dist/esm/i18n/locales/mr.json +1 -0
  209. package/dist/esm/i18n/locales/nl.json +1 -0
  210. package/dist/esm/i18n/locales/pa.json +1 -0
  211. package/dist/esm/i18n/locales/pl.json +1 -0
  212. package/dist/esm/i18n/locales/pt.json +1 -1
  213. package/dist/esm/i18n/locales/ru.json +1 -1
  214. package/dist/esm/i18n/locales/ta.json +1 -0
  215. package/dist/esm/i18n/locales/te.json +1 -0
  216. package/dist/esm/i18n/locales/tr.json +1 -0
  217. package/dist/esm/i18n/locales/vi.json +1 -0
  218. package/dist/esm/i18n/locales/zh.json +1 -1
  219. package/dist/esm/index.d.ts +13 -13
  220. package/dist/esm/index.js +8 -7
  221. package/dist/esm/native/NativeInspector.d.ts +1 -0
  222. package/dist/esm/socket.d.ts +4 -0
  223. package/dist/esm/socket.js +1 -0
  224. package/dist/esm/styles/index.d.ts +23 -0
  225. package/dist/esm/styles/index.js +1 -1
  226. package/dist/esm/types/enums.d.ts +40 -0
  227. package/dist/esm/types/enums.js +1 -1
  228. package/dist/esm/types/interfaces.d.ts +122 -1
  229. package/ios/NetworkInspectorModule.mm +102 -12
  230. package/package.json +204 -2
  231. package/src/native/NativeInspector.ts +8 -0
@@ -1 +1 @@
1
- {"common":{"cancel":"Annuler","clear":"Effacer","clearAll":"Tout effacer","close":"Fermer","loading":"Chargement...","success":"Succès","pending":"En attente","failed":"Échoué","copy":"Copier","copied":"Copié !","copyJson":"Copier JSON","collapseAll":"Tout réduire","expandAll":"Tout développer","viewOnNpm":"Voir sur NPM","later":"Plus tard","source":"SOURCE","minimize":"Réduire","tapToExpand":"Appuyez pour développer","open":"Ouvrir","openInBrowser":"Ouvrir dans le navigateur","openInBrowserPrompt":"Voulez-vous ouvrir cette URL dans votre navigateur externe ?","add":"Ajouter"},"header":{"updateAvailableTitle":"Update Available","updateAvailableMessage":"react-native-inapp-inspector v{{version}} is available on NPM (installed: v{{installed}}).","clearEverythingTitle":"Clear Everything","clearEverythingMessage":"This clears all tabs — APIs, Logs, Analytics, Redux timeline and Crash history. Continue?","photo":"Photo","record":"Record","rec":"REC","clear":"Clear","about":"About","screenshotCaptured":"📸 Screenshot captured & saved","screenshotFailed":"Failed to capture screenshot","screenshotError":"Error taking screenshot","recordingStarted":"🔴 Video recording started","recordingSaved":"🎥 Recording saved ({{duration}}s)","recordingError":"Recording error","recordingStartFailed":"Failed to start recording","paramCount":"{{count}} param","paramCount_plural":"{{count}} params","sourceFirebase":"FB","sourceManual":"MAN","firebase":"firebase","manual":"manual"},"tabs":{"apis":"APIs","logs":"Journaux","analytics":"Analytique","redux":"Redux","crash":"Crashs","device":"Appareil","storage":"Stockage","media":"Capture"},"settings":{"mainTitle":"Settings & Modules","mainSubtitle":"Manage modules and preferences","requiredBadge":"REQUIRED","defaultBadge":"DEFAULT","notConnectedBadge":"NOT CONNECTED","notDetectedBadge":"NOT DETECTED","readOnlyBadge":"READ ONLY","coreBadge":"CORE","activeBadge":"ACTIVE","dormantBadge":"DORMANT","protectedBadge":"PROTECTED","modulesAndTools":"Modules & Tools","uiPreferences":"UI & Display","ramLimits":"RAM & Limits","screenVideoCapture":"Screen & Video Capture","zeroOverheadTitle":"Zero Background Overhead","zeroOverheadDesc":"Check the modules you wish to activate. Disabled modules consume 0% CPU & memory until saved.","unsavedPending":"● Unsaved selections pending","allSynchronized":"All modules synchronized","modulesActive":"{{active}} of {{total}} Modules Active","saveChanges":"Save Changes","settingsSaved":"Settings Saved","settingsSavedDesc":"Active module configurations have been successfully updated.","configure":"Configure","appearanceTheme":"APPEARANCE & THEME","windowLayout":"WINDOW & LAYOUT","startupDefault":"STARTUP & DEFAULT SCREEN","logFiltersDeduplication":"LOG FILTERS & DEDUPLICATION","resetSettings":"Reset All Settings","resetSettingsDesc":"Wipe customized preferences back to default","reset":"Reset","reduxNotConnectedTip":"Redux store is not connected. Call connectReduxStore(store) or use inspectorReduxMiddleware to enable.","analyticsNotConnectedTip":"Analytics is not initialized. Call setupAnalyticsLogger(analytics()) to enable.","tabVisibility":"Tab Visibility","tabVisibilityDescription":"Choose which modules appear in the inspector","settingsTitle":"Settings","back":"Back","apis":{"title":"APIs Settings","total":"Total: {{count}}","maxRequestLogs":"Max Request Logs","maxRequestLogsDescription":"Buffer size of network requests preserved in memory","clearNetworkLogs":"Clear Network Logs","clearNetworkLogsDescription":"{{count}} requests stored","networkLogsCleared":"Network logs cleared.","showStatusFilter":"Status Filter","showStatusFilterDescription":"Show status chips in the APIs list","showMethodFilter":"Method Filter","showMethodFilterDescription":"Show method chips in the APIs list","defaultTabDescription":"Tab the inspector opens on"},"logs":{"title":"Logs Settings","total":"Total: {{count}}","maxConsoleLogs":"Max Console Logs","maxConsoleLogsDescription":"How many console messages to retain","logLevels":"Log Severities","logLevelsDescription":"Select which severities to capture in Logs","showInfo":"Show Info logs","showInfoDesc":"Informational logs & debug prints","showWarn":"Show Warning logs","showWarnDesc":"Warning notices & deprecations","showError":"Show Error logs","showErrorDesc":"Runtime errors & exceptions","clearConsoleLogs":"Clear Console Logs","clearConsoleLogsDescription":"{{count}} logs stored","consoleLogsCleared":"Console logs cleared."},"analytics":{"title":"Analytics Settings","total":"Events: {{count}}","maxAnalyticsEvents":"Events Captured","maxAnalyticsEventsDescription":"{{count}} analytics events stored in buffer","clearAnalyticsEvents":"Clear Analytics History","clearAnalyticsEventsDescription":"Wipe all captured telemetry events","analyticsEventsCleared":"Analytics events cleared."},"redux":{"title":"Redux Settings","reducers":"Reducers: {{count}}","autoRefresh":"Auto-refresh Store","autoRefreshDescription":"Capture Redux store state tree on every dispatch","defaultJsonExpandDepth":"Default JSON Expand Depth","defaultJsonExpandDepthDescription":"Initial depth of Redux state tree to auto-expand","clearReduxState":"Clear Redux State","clearReduxStateDescription":"Reset current state snapshot in inspector","clearReduxStateEmpty":"No store snapshot recorded","reduxStateCleared":"Redux state snapshot cleared.","clearReduxTimeline":"Clear Redux Timeline","clearReduxTimelineDescription":"Remove all captured action history","reduxTimelineCleared":"Redux action history cleared."},"bundle":{"title":"Bundle Settings","sourceBundler":"Metro Source Bundler","sourceBundlerDesc":"Parses live module trees and calculates binary size breakdowns","clearCache":"Clear Bundle Cache","clearCacheDesc":"Force re-fetching and parsing of JS bundle","cacheCleared":"Bundle analysis cache cleared."},"performance":{"title":"Performance Settings","frameMeasurement":"Live Frame Measurement","frameMeasurementDesc":"Samples UI/JS frame rates & detects wasteful re-renders","clearEvents":"Clear Performance Events","clearEventsDesc":"Reset recorded jank and FPS drops history","eventsCleared":"Performance events cleared."},"crash":{"title":"Crash Settings","maxCrashLogs":"Max Crash Logs","maxCrashLogsDesc":"How many crash records to preserve in history","globalGuard":"Global Crash Guard","globalGuardDesc":"Intercepts native, JS, and render errors directly","clearHistory":"Clear Crash History","clearHistoryDesc":"{{count}} crash logs stored","historyCleared":"Crash logs cleared."},"media":{"title":"Screen & Video Capture","badge":"Native H.264 / GIF","desc":"Configure screenshot formats, quality, video FPS, audio narration, GIF recording & storage","screenshotCardTitle":"Screenshot Formats & Quality","screenshotCardDesc":"High-resolution full-window snapshot configuration","imageFormat":"Image Format","imageFormatDesc":"PNG (lossless), JPEG (compact), or WEBP","autoHide":"Auto-Hide Inspector Overlay","autoHideDesc":"Excludes inspector UI from screenshots","enabled":"ENABLED","videoCardTitle":"Video & GIF Recording","videoCardDesc":"H.264 MP4 recording & animated GIF export","audioMode":"Audio Narration Mode","audioModeDesc":"Muted, App Audio, or Voice Narration","frameRate":"Frame Rate","frameRateDesc":"Higher FPS yields smoother recordings","gifAutoOpt":"GIF Auto-Optimization","gifAutoOptDesc":"Converts video recordings for GitHub PRs & Slack","purgeAll":"Purge All Captured Media","purgeAllDesc":"Deletes all stored screenshots, videos, and GIFs","purgeCacheBtn":"Purge Cache","purgeConfirmTitle":"Purge Media Storage","purgeConfirmMessage":"This deletes all captured media files from local cache. Continue?","purgedSuccess":"Media storage purged"},"general":{"darkMode":"Dark Mode Theme","darkModeDescription":"Toggle sleek dark aesthetic or light contrast","modalHeight":"Inspector Window Height","modalHeightDescription":"Modal screen coverage percentage","modalAnimation":"Transition Animation","modalAnimationDescription":"Entrance and dismissal presentation style","duplicateLogs":"Show Duplicate Logs","duplicateLogsDescription":"Off: Identical repeated entries collapse into ×N badges","defaultOpeningTab":"Default Opening Tab","defaultOpeningTabDesc":"Initial tab active when launcher button is tapped","activeConsoleLogLevels":"Active Console Log Levels","activeConsoleLogLevelsDesc":"Select which severities to capture in Logs","resetToDefaults":"Reset to Defaults","resetToDefaultsDescription":"Restore all inspector settings","resetConfirmationTitle":"Settings Reset","resetConfirmationMessage":"All settings have been reset to default values.","storageStatus":"Persistent Storage","storageStatusEnabled":"Settings Storage: Persistent ({{type}})","storageStatusEnabledDesc":"Your preferences and module visibility persist across app reboots.","storageStatusDisabled":"Settings Storage: In-Memory (Temporary)","storageStatusDisabledDesc":"Preferences reset on app kill. Pass custom storage to <NetworkInspector storage={...} /> to persist on Android."}},"network":{"title":"APIs","searchPlaceholder":"Search by URL, status or method...","emptyTitle":"No API calls captured yet","emptySubtitle":"Network requests will appear here as you use the app.","reload":"Reload","clearTitle":"Clear Network Logs","clearMessage":"Are you sure you want to clear all captured network logs?","detailTabs":{"metadata":"Metadata","headers":"Headers","request":"Request","response":"Response"},"requestTitle":"Request","responseTitle":"Response","searchRequest":"Search request...","searchResponse":"Search response...","searchHeaders":"Search headers...","requestHeaders":"Request Headers","responseHeaders":"Response Headers","diffTitle":"Diff","noResponse":"No response body","noRequest":"No request body","statusFailed":"Failed","urlHeader":"URL","methodHeader":"Method","statusHeader":"Status","durationHeader":"Duration","sizeHeader":"Size","triggeredAt":"Triggered at","contentType":"Content-Type","sourcePage":"Source Page","sourcePageUnknown":"Unknown source","loadMore":"Load more","groupByPage":"Group by page","groupByDomain":"Group by domain","groupByNone":"List","domain":"Domain","page":"Page","requests":"{{count}} requests","requests_plural":"{{count}} requests","noFilteredResults":"No requests match the current filters","scrollToTop":"Scroll to top","copyCurl":"Copy cURL","copyFetch":"Copy fetch snippet","emptyResponse":"Empty response","bodyHidden":"{ Body hidden }","queryParams":"Query Params","fullUrl":"Full URL","open":"Open","showMore":"Show More","showLess":"Show Less","failedNetworkError":"Failed (Network Error)","noMatchingHeaders":"No matching headers","diffHidden":"{ Diff hidden }","noDiff":"No differences from previous API.","healthTitle":"Network Health & Telemetry","successRate":"Success Rate","avgLatency":"Avg Latency","p95Latency":"P95 Latency","bandwidth":"Bandwidth","fastest":"Fastest","slowest":"Slowest","timingWaterfall":"Timing Waterfall & Latency","throughput":"Throughput","performanceTier":"Performance Tier","perf":{"fast":"Fast (< 200ms)","moderate":"Moderate (200-800ms)","slow":"Slow (> 800ms)"},"jsonViewer":{"pretty":"Pretty","raw":"Raw","table":"Table","emptyObject":"Empty Object","emptyTable":"Empty Object","key":"Key","value":"Value"}},"console":{"title":"Logs","searchPlaceholder":"Search logs...","emptyTitle":"No console logs yet","emptySubtitle":"Console output from your app will appear here.","analyticsBadge":"Analytics","userLogBadge":"user-log","jsonTitle":"Log JSON","messageTitle":"Log Message","search":"Search log...","searchJson":"Search log JSON...","logMessage":"Log message","consoleLog":"Console Log","characters":"{{count}} chars","duplicates":"×{{count}} duplicates","showMore":"Show more","showLess":"Show less","clearTitle":"Clear Logs","clearMessage":"Are you sure you want to clear all console logs?","seeMore":"Show more","noResults":"No logs match the current filters","filterAll":"All","filterInfo":"Info","filterWarn":"Warn","filterError":"Error","filterUserLog":"User Log","filterAnalytics":"Analytics","tabOutput":"Output","tabArgs":"Args ({{count}})","tabStack":"Stack Trace","tabMetadata":"Metadata","callStack":"Call Stack ({{count}} frames)","errorStack":"Error Exception Stack ({{count}} frames)","callOriginStack":"Call Origin Stack","errorThrownStack":"Error Thrown Stack","appCodeScope":"🎯 App Code ({{count}})","allFramesScope":"📜 All Frames ({{count}})","cardsView":"Cards","rawTraceView":"Raw","noStackAvailable":"No call stack frames found matching the active filter.","originBadge":"#1 ORIGIN","appCodeBadge":"App Code","dependencyBadge":"Dependency","nativeBadge":"Native","hermesVmBadge":"Hermes VM","fullStackTrace":"Full Stack Trace","lineCol":"Line {{line}}, Col {{col}}","lineColShort":"L{{line}}:C{{col}}","searchInLogDetails":"Search in log details..."},"analytics":{"title":"Analytics","searchPlaceholder":"Search events...","emptyTitle":"No analytics events yet","emptySubtitle":"Analytics events will appear here as your app tracks them.","clearTitle":"Clear Analytics","clearMessage":"Are you sure you want to clear all analytics events?","eventParams":"{{count}} params","eventCount":"{{count}} events","userProperties":"User Properties","userId":"User ID","defaultParameters":"Default Parameters","collectionEnabled":"Collection Enabled","screenView":"screen_view","eventDetails":"Event Details","parameters":"Parameters","noParams":"No parameters","recentEvents":"Recent Events","analyticsError":"Analytics Error","duplicate":"Duplicate","params":"params","props":"props","item":"item","items":"items","pageViewCategory":"Page View","ecommerceCategory":"Ecommerce","systemCategory":"System","customCategory":"Custom","realtimeStream":"Realtime Activity","liveTelemetry":"Live Telemetry","eventsInWindow":"events in window","eventVelocity":"{{rate}} ev/min","peakVolume":"Peak: {{count}}","time30mAgo":"-30m","time20mAgo":"-20m","time10mAgo":"-10m","timeNow":"NOW","selectedBucket":"Bucket: {{time}} ({{count}} events)","totalRevenue":"Revenue","activeDistribution":"Category Split","allCategory":"All","screensCategory":"Screens","overviewTab":"Overview","jsonTreeTab":"JSON Tree","rawPayloadTab":"Raw Payload","sessionContext":"Session Context","userPropertiesSnapshot":"User Properties Snapshot","parameterKeys":"Parameters ({{count}})","searchParameters":"Search parameters...","noParamsFound":"No parameters match your search","sourceFirebase":"FIREBASE GA4","sourceCustom":"CUSTOM / MANUAL"},"redux":{"title":"Redux","searchPlaceholder":"Rechercher état ou actions...","emptyTitle":"Aucun store Redux connecté","emptySubtitle":"Connectez votre store pour inspecter l'état et les actions.","stateTab":"State","actionsTab":"Actions","clearTitle":"Clear Redux Timeline","clearMessage":"Are you sure you want to clear the dispatched action history?","noActions":"No actions dispatched yet. Trigger an action in the app to populate history.","noSearchResults":"No actions match your search.","lastAction":"Last action","actionHistory":"Action History","affectedSlices":"Affected slices","noAffectedSlices":"None","dispatchTime":"Dispatched at","prevState":"Previous State","nextState":"Next State","viewDiff":"View Diff","emptyState":"State is empty","rootState":"Root State","connectionStatus":"Connected","connectionStatusNone":"Not connected","autoRefresh":"Auto-refresh","paused":"Paused","liveState":"Live State","timeline":"Timeline","persisted":"Persisted","storage":"Storage","metadata":"Metadata","inMemory":"In-Memory","slice":"SLICE","rootKeys":"Root Keys","size":"Size","actions":"actions","keys":"Keys","last":"Last","live":"Live","loading":"Loading","error":"Error","empty":"Empty","payload":"Payload","actionPayload":"Action Payload:","stateChangesDiff":"State Changes (Diff):","tapToInspectAction":"Tap to inspect action payload & diff changes","noDispatchedActions":"No dispatched actions recorded for this slice yet.","sliceJson":"Slice JSON","originSaga":"SAGA","originThunk":"THUNK","originUi":"UI","originDirect":"DIRECT","originListener":"LISTENER","triggeredFrom":"Triggered From:","openInEditor":"Open in Editor","callStack":"Call Stack Trace","sliceOrigin":"Slice / Origin","activeSlices":"SLICES ACTIFS","totalState":"ÉTAT TOTAL","lastActionHeader":"DERNIÈRE ACTION","initialState":"État initial (aucune action émise)","noStoreConnected":"Aucun store Redux connecté","connectStoreTip":"Appelez connectReduxStore(store) ou utilisez inspectorReduxMiddleware au lancement."},"device":{"title":"Appareil","searchPlaceholder":"Rechercher spécifications, UDID, IP, écran...","subTabs":{"overview":"Aperçu","hardware":"Matériel","network":"Réseau et IP","display":"Affichage","runtime":"Exécution & App","security":"Sécurité & IDs"},"sections":{"overview":"APERÇU DE L'APPAREIL","hardware":"SPÉCIFICATIONS MATÉRIELLES & SYSTÈME","network":"RÉSEAU & CONNECTIVITÉ","display":"AFFICHAGE & GÉOMÉTRIE","runtime":"EXÉCUTION & ENVIRONNEMENT","security":"IDENTIFIANTS & SÉCURITÉ"},"copied":"{{label}} copié","copiedJson":"Rapport JSON complet de l'appareil copié !","copiedMarkdown":"Rapport Markdown copié dans le presse-papiers !","live":"EN DIRECT","ipAddress":"ADRESSE IP","ramUsedTotal":"RAM (UTILISÉE/TOTALE)","uptime":"TEMPS DE FONCTIONNEMENT"},"storage":{"title":"Stockage","searchPlaceholder":"Rechercher clés, valeurs, types...","subTabs":{"asyncStorage":"AsyncStorage","mmkv":"MMKV"},"clearTitle":"Vider le stockage","clearMessage":"Voulez-vous vraiment supprimer toutes les clés dans {{driver}} ?","clearConfirm":"Tout effacer","emptyTitle":"Aucune entrée de stockage","emptySubtitle":"Le stockage est vide pour ce pilote.","addKey":"Ajouter une clé","add":"Ajouter","editKey":"Modifier la clé","createKey":"Créer une clé","save":"Enregistrer","saveKey":"Enregistrer la clé","keyName":"Nom de clé","value":"Valeur","valueContent":"Contenu de la valeur","type":"Type","beautifyJson":"Formater JSON","loading":"Chargement des entrées...","deleteKeyTitle":"Supprimer la clé","deleteKeyMessage":"Voulez-vous vraiment supprimer la clé \"{{key}}\" ?"},"footer":{"endOfList":"Vous avez atteint la fin de la liste","loadMore":"Charger {{count}} de plus","showingOf":"Affichage de {{count}} sur {{total}} {{label}}"},"performance":{"title":"Performance","fpsTarget":"60 FPS Target Monitor","healthScore":"FPS Health Score","excellent":"Excellent (60 FPS)","good":"Good (Minor Janks)","needsOptimization":"Needs Optimization","liveFps":"Live FPS & Refresh Cycle","realtimeWindow":"Real-Time (1s window)","uiRenderThread":"UI Render Thread","optimalFrame":"Optimal (<16.6ms)","slowFrame":"Slow Frame (>16.6ms)","budgetUsage":"60 FPS Budget Usage","avgFrameTime":"Avg Frame Time","peakTime":"Peak Time","jsThread":"JS Thread","uiThread":"UI Thread","jsiLatency":"JSI Latency","heapImpact":"Heap Impact","optimizationTip":"Optimization Tip:","recordedEvents":"Recorded Events & Interactions","liveStream":"Live Session Stream","emptyTitle":"No performance events captured yet","emptySubtitle":"Perform actions in your app to see thread timings, render cost, and FPS tracking.","tabOverview":"Overview","tabRenders":"Renders","tabInteractions":"Interactions","tabMemory":"Memory","filterAll":"All","filterSlow":"Slow (>16ms)","filterCritical":"Critical (>33ms)","searchPlaceholder":"Search component, interaction...","avgRenderTime":"Avg Render","totalRenders":"Total Renders","renderCost":"Render Cost","slowRenders":"Slow Renders","unnecessaryRenders":"Wasteful Renders","heapAllocated":"Heap Allocated","heapLimit":"Heap Limit","gcEvents":"GC Events","leakRisk":"Leak Risk","lowRisk":"Low Risk","mediumRisk":"Medium Risk","highRisk":"High Risk","memoryTimeline":"Memory Timeline","clearPerformance":"Clear Performance Data","clearConfirmation":"Are you sure you want to clear all performance tracking data?","liveFpsDip":"Live Frame Rate Dip ({{fps}} FPS)","liveFpsDipDetail":"Main thread frame duration extended to {{duration}}ms during view update.","liveFpsDipAdvice":"Heavy JavaScript execution during frame pass delayed display presentation.","yogaLayout":"Yoga Flexbox Layout","hermesGc":"Hermes Garbage Collection","jsEngine":"JS Engine","uiReconciler":"UI Reconciler","memoryHeap":"Memory Heap","allLogs":"All Logs","jankySlow":"Janky / Slow","navigation":"Navigation","components":"Components","memoryGc":"Memory & GC","networkIo":"Network & I/O","catAll":"All","catJanky":"Janky","catNavigation":"Navigation","catRender":"Components","catMemory":"Memory","catIo":"I/O","recording":"Recording","paused":"Paused","budgetHeadroom":"~{{time}}ms Headroom ({{percent}}%)","jsExec":"JS Exec: {{time}}ms","yogaLayoutTime":"Yoga Layout: {{time}}ms","uiRenderTime":"UI Render: {{time}}ms","freeTime":"Free: {{time}}ms","heapAllocatedSub":"{{allocated}} MB allocated","hermesAot":"Hermes (AOT)","v8Jit":"V8 (JIT)","jscEngine":"JSC","bytecodeCompiled":"Bytecode compiled","jitEngine":"JIT Engine","webkitEngine":"Webkit Engine","fabricJsi":"Fabric / JSI","paperBridge":"Paper / Bridge","directCppBindings":"Direct C++ bindings","asyncJsonBridge":"Async JSON Bridge","fpsUnit":"FPS","jsLag":"JS Lag","jankRate":"Jank Rate","fpsAreaChartTitle":"Real-Time FPS Stream & Jitter (30s)","fpsAreaChartSub":"Live 60 FPS target with continuous frame variance measurement","frameLatencyDistTitle":"Frame Latency Distribution","frameLatencyDistSub":"Proportion of frames delivered within 16.6ms budget","optimalBucket":"< 16.6ms (60 FPS)","minorJankBucket":"16.7 - 33.3ms (30-60 FPS)","noticeableJankBucket":"33.4 - 50.0ms (20-30 FPS)","severeFreezeBucket":"> 50.0ms (< 20 FPS)","hermesHeapTrendTitle":"Memory & Hermes Heap Dynamics","hermesHeapTrendSub":"Live allocation vs generational GC scavenge cycles","live":"Live","msTotal":"{{duration}}ms total • {{time}}","droppedFrames":"{{count}} Dropped","zeroDropped":"0 Dropped","frameBudgetMs":"{{time}}ms / frame ({{budget}}% budget)","target60Fps":"Target 60 FPS • Actual {{fps}} FPS","frameDuration":"Frame Duration","frameDurationVal":"{{time}} ms (16.67ms budget)","frameUtilization":"Frame Budget Exceeded","frameBudgetOk":"Frame Budget Headroom","bottleneck":"Bottleneck","jsBound":"JS Thread Bound","uiBound":"UI Thread Bound","balanced":"Balanced","smooth":"Smooth 60 FPS","minorJank":"Minor Stutter","noticeableJank":"Noticeable Jank","severeFreeze":"Severe Freeze","screenContext":"Screen Context","profileReason1":"Inline arrow function props passed to children (onAddToCart={() => ...})","profileReason2":"Unmemoized Redux selector creating new object reference on every dispatch","profileReason3":"Dynamic style object created in render body ({ marginTop: insets.top + 10 })","profileReason4":"FlatList missing getItemLayout causing async layout measuring passes","profileReason5":"renderItem function defined anonymously inside JSX body","profileReason6":"List item components not wrapped with React.memo","profileReason7":"Parent screen re-rendered on keyboard show/hide event","profileReason8":"Unstable callback reference passed into checkout button","profileReason9":"TextInput value state triggers parent re-render on every keystroke without debouncing","profileReason10":"Passing unmemoized filter object ({ category, minPrice }) down to child chips","profileReason11":"Avatar image cache re-validation on auth session refresh","fixUseCallbackTitle":"Wrap Event Handlers in useCallback","fixUseCallbackDesc":"Inline functions recreate a new memory reference on every render, invalidating React.memo on child components.","fixCreateSelectorTitle":"Memoize Redux / Zustand Selectors with shallowEqual","fixCreateSelectorDesc":"Returning new object or array references inside useSelector forces an automatic re-render on every state dispatch.","fixUseMemoStylesTitle":"Hoist Styles or Use useMemo for Dynamic Dimensions","fixUseMemoStylesDesc":"Inline style objects create new object identities on every frame pass, causing Yoga Flexbox reconciliation diffs.","fixGetItemLayoutTitle":"Implement getItemLayout for Fixed-Height Items","fixGetItemLayoutDesc":"Supplying getItemLayout allows FlatList to immediately compute scroll offsets and virtual windows without measuring views asynchronously.","fixReactMemoTitle":"Wrap List Items in React.memo","fixReactMemoDesc":"Prevents all 50+ visible list items from re-rendering when parent list state (e.g. scroll position or pagination) updates.","fixComponentSplittingTitle":"Isolate Fast-Changing State in Leaf Components","fixComponentSplittingDesc":"Move keyboard listeners and modal animation state into self-contained subcomponents so the parent does not re-render.","fixDebouncedInputTitle":"Debounce Search Input or Use Local Controlled State","fixDebouncedInputDesc":"Do not propagate keystroke state into global store immediately. Use a 250ms debounce or uncontrolled ref.","fixPrimitivePropsTitle":"Pass Primitive Props Instead of Large Objects","fixPrimitivePropsDesc":"Passing only categoryId string instead of whole category object prevents re-renders when other category metadata updates.","fixUseRefForTrackingTitle":"Use useRef for Non-Visual Tracking Values","fixUseRefForTrackingDesc":"Do not store analytics timers, scroll offsets, or tracking IDs in useState if they do not directly alter the JSX tree.","highImpact":"High Impact","mediumImpact":"Medium Impact","bestPractice":"Best Practice","beforeUseCallback":"// ❌ Before in <{{comp}} /> (re-creates function reference on every render):","afterUseCallback":"// ✅ After (stable memoized callback reference):","beforeCreateSelector":"// ❌ Before in <{{comp}} /> (returns new object reference every render):","afterCreateSelector":"// ✅ After (shallowEqual prevents re-render unless values change):","beforeMemo":"// ❌ Before (<{{comp}} />):","afterMemo":"// ✅ After (skips render if props are shallowly identical):","flatListOptimization":"// FlatList Optimization for <{{comp}} />","customComparator":"// Custom equality function for <{{comp}} />","debounceInput":"// Debounce input inside <{{comp}} /> to prevent per-keystroke renders:","isolateState":"// Isolate rapidly changing state from <{{comp}} /> to child sub-tree\n// ✅ Encapsulate animated layout inside isolated component:","beforeUseRef":"// ❌ Before in <{{comp}} /> (triggers whole component re-render on value change):","afterUseRef":"// ✅ After (preserves mutable reference across renders without re-rendering):","fixInteractionManagerTitle":"Defer Offscreen Logic with InteractionManager","fixInteractionManagerDesc":"Heavy data processing during screen animations drops frames. Defer until transition finishes.","beforeInteractionManager":"// ❌ Before in <{{comp}} /> (runs heavy computation while transition animates):\nuseEffect(() => {\n loadHeavyData();\n}, []);","afterInteractionManager":"// ✅ After (waits until transition completes smoothly):\nuseEffect(() => {\n const task = InteractionManager.runAfterInteractions(() => {\n loadHeavyData();\n });\n return () => task.cancel();\n}, []);","fixFlatListWindowingTitle":"Tune FlatList Windowing Properties","fixFlatListWindowingDesc":"Configure maxToRenderPerBatch and windowSize to minimize offscreen virtualized view allocations.","beforeFlatListWindowing":"// FlatList Windowing Optimization for <{{comp}} />:\n<FlatList\n data={items}\n maxToRenderPerBatch={10}\n windowSize={5}\n initialNumToRender={8}\n removeClippedSubviews={true}\n/>","fixImageCachingTitle":"Optimize Image Caching and Downscaling","fixImageCachingDesc":"Use priority headers or resizeMode downscaling to avoid massive bitmap allocations in the Hermes heap.","beforeImageCaching":"// Image Optimization for <{{comp}} />:\n<Image\n source={{ uri: imageUrl, cache: 'force-cache' }}\n resizeMode=\"cover\"\n fadeDuration={100}\n/>","fixContextSplittingTitle":"Split Monolithic Context into Granular Providers","fixContextSplittingDesc":"Components subscribing to a large context re-render even when unused state properties change.","beforeContextSplitting":"// ❌ Before (<{{comp}} /> consumes entire AppContext):\nconst { user, cart, theme } = useAppContext();","afterContextSplitting":"// ✅ After (subscribe to dedicated slice context):\nconst theme = useThemeContext();","fixInlineStylesHoistTitle":"Hoist Static Styles with StyleSheet.create","fixInlineStylesHoistDesc":"Inline style objects allocate new memory references on each render pass, causing Yoga reconciliation overhead.","beforeInlineStyles":"// ❌ Before (<{{comp}} /> allocates inline object every frame):\n<View style={{ flex: 1, padding: 16, backgroundColor: '#ffffff' }} />","afterInlineStyles":"// ✅ After (hoisted StyleSheet reference):\nconst styles = StyleSheet.create({ container: { flex: 1, padding: 16, backgroundColor: '#ffffff' } });\n<View style={styles.container} />","transitionEventLabel":"Screen Transition: {{screen}}","transitionEventDetail":"Transition completed in {{duration}}ms (TTI: {{tti}}ms).","transitionEventAdvice":"Interaction completed within 60 FPS target budget.","heavyTaskEventLabel":"Heavy Synchronous Task: {{taskName}}","heavyTaskEventDetail":"JS thread blocked for {{duration}}ms during task execution.","heavyTaskEventAdvice":"Consider offloading to web worker, InteractionManager, or batching in chunks.","asyncOpEventLabel":"Slow Async Operation: {{opName}}","asyncOpEventDetail":"Async task took {{duration}}ms to resolve.","renderLoopWarningLabel":"Rapid Re-render Spike in <{{comp}} />","renderLoopWarningDetail":"Component re-rendered {{count}} times in 500ms. Potential infinite loop or unstable dependencies.","renderLoopWarningAdvice":"Check useEffect / useCallback dependency arrays for unstable object or function references.","event1Label":"Main Thread Spike during Navigation","event1Detail":"Screen transition triggered heavy layout reconciliation and simultaneous component mounts.","event1Advice":"Defer non-critical offscreen hooks with InteractionManager.runAfterInteractions to preserve 60 FPS.","event2Label":"FlatList Virtualization Re-render Pass","event2Detail":"FlatList rendered 25 items simultaneously on orientation change without memoized row component.","event2Advice":"Implement getItemLayout and React.memo(LogCard) to skip redundant diffing passes.","event3Label":"Native Modal Slide-Up Transition","event3Detail":"Hardware accelerated native driver animated transform running smoothly at sustained 60 FPS.","event3Advice":"Using nativeDriver: true successfully prevents JS thread blocking during animations.","event4Label":"Hermes Generational Garbage Collection","event4Detail":"Minor generational GC cycle scavenged 4.2 MB ephemeral heap objects with sub-millisecond thread pause.","event4Advice":"Hermes generational garbage collector is operating within optimal sub-5ms limits.","gcCycleLabel":"Manual Garbage Collection Cycle","gcCycleDetail":"Reclaimed ~{{amount}} MB unreferenced heap objects and compacted memory nursery.","gcCycleAdvice":"Heap usage optimized. Generational nursery cleared.","liveFpsDropLabel":"Live Frame Rate Dip ({{fps}} FPS)","liveFpsDropDetail":"Main thread frame duration extended to {{duration}}ms during view update.","liveFpsDropAdvice":"Heavy JavaScript execution during frame pass delayed display presentation.","event5Label":"Large JSON Payload Deserialization","event5Detail":"50-item API response parse overhead in network adapter (185 KB JSON raw string).","event5Advice":"Consider paginating API payloads or streaming responses if payload size exceeds 250 KB.","event6Label":"Image Bitmap Decode & Rasterization","event6Detail":"Retina raster decode for banner_dark.png (1200×630px raster buffer allocation).","event6Advice":"Downscale asset dimensions or convert to WebP to reduce decode latency by ~65%.","event7Label":"Native TurboModule JSI Invocation","event7Detail":"AsyncStorage / MMKV preferences transaction read across 32 configuration keys.","event7Advice":"Direct C++ JSI Turbomodule bindings completely bypass legacy JSON bridge serialization overhead.","event8Label":"Redux Action State Tree Diffing","event8Detail":"Redux dispatch pass evaluated 6 reducer slices and emitted state notification in 4.8ms.","event8Advice":"State tree immutability preserved. Memoized selectors prevented redundant component renders.","event9Label":"Touch-to-Render Event Latency","event9Detail":"Gesture responder dispatched tap event to TabBar button with immediate 60 FPS response.","event9Advice":"Touch responder latency is well within standard 16.67ms frame budget.","event10Label":"C++ Yoga Flexbox Layout Pass","event10Detail":"Inspector UI multi-tab card layout recalculation and font metrics pass in C++ Yoga engine.","event10Advice":"Flexbox layout constraints are cached and computed efficiently with zero reflow penalties."},"bundle":{"heroTitle":"Bundle & Asset Architecture","heroSubtitle":"Real-time size breakdown across all assets, code, and dependencies","heroSubtitleLive":"Live analysis of {{scriptUrl}}","liveAnalysisUnavailable":"Live bundle analysis unavailable","liveAnalysisUnavailableSub":"Could not reach the Metro dev server, so values are estimates. Make sure the app runs in development via `npx react-native start` and the Inspector can reach your Metro port (8081, 8082, ...).","bundleOverviewJson":"Bundle Overview JSON","devBundleSize":"DEV BUNDLE SIZE","devBundleHint":"{{kb}} KB • {{modules}} modules","trackedFilesHint":"{{count}} Tracked files","imagesMedia":"IMAGES & MEDIA","pctOfTrackedAssets":"{{pct}}% of tracked assets","tsJsSource":"TS / JS SOURCE","jsEngine":"JS ENGINE","bytecodeAot":"Bytecode AOT","standard":"Standard","splitUpTitle":"Development Bundle Split-Up","splitUpSub":"Measured {{mb}} MB JS bundle • {{files}} files • {{packages}} packages","splitUpJson":"Split-Up JSON","splitAppSource":"App Source Code","splitNodeModules":"node_modules Dependencies","splitAssetsMedia":"Assets & Media","splitMetroOverhead":"Metro Dev Overhead","splitSize":"{{kb}} KB • {{mb}} MB","productionFootprint":"PRODUCTION FOOTPRINT","productionValue":"iOS {{ios}} MB • Android {{android}} MB","productionDownload":"Download: iOS ~{{ios}} MB • AAB ~{{aab}} MB • APK ~{{apk}} MB","treemapTitle":"Asset & File Type Ratio Treemap","treemapSub":"Total ~{{mb}} MB","treemapJson":"Ratio Treemap JSON","legendImages":"Images:","legendTs":"TS/TSX:","legendJs":"JS Libs:","legendFonts":"Fonts:","legendJson":"JSON:","categoryBreakdown":"Category Breakdown","categoriesJson":"Categories Breakdown JSON","catImagesTitle":"Images & Media Assets","catImagesDesc":"PNG, WebP, SVG, and JPG assets in bundle","catJsTitle":"Compiled Node Modules & JS","catJsDesc":"Third-party dependencies and native bridges","catFontsTitle":"Custom Fonts & Vector Glyphs","catFontsDesc":"Font assets in bundle","catTsTitle":"TypeScript & JSX Components","catTsDesc":"App screen components, hooks, and business logic","catJsonTitle":"JSON Data & Localizations","catJsonDesc":"i18n translation dictionaries and static configs","totalBundleAssets":"TOTAL HOST PROJECT FILES","totalBundleValue":"{{kb}} KB (~{{mb}} MB)","totalFormula":"Sum of host source files: {{images}} KB + {{js}} KB + {{fonts}} KB + {{ts}} KB + {{json}} KB = {{total}} KB ({{count}} items)","prodIosApp":"iOS App (.ipa)","prodAndroidAab":"Android AAB (.aab)","prodAndroidApk":"Universal APK (.apk)","prodHeroTitleIos":"iOS Production Binary Footprint","prodHeroTitleAab":"Google Play App Bundle (.aab)","prodHeroTitleApk":"Universal Standalone APK (.apk)","prodHeroSubIos":"App Store install & over-the-air cellular download estimates","prodHeroSubAab":"Optimized per-device dynamic delivery split APK architecture","prodHeroSubApk":"Multi-ABI universal install archive for sideloading & direct distribution","prodInstallSize":"INSTALL SIZE","prodInstallHint":"On-device uncompressed footprint","prodDownloadSize":"DOWNLOAD SIZE","prodDownloadHint":"Store network transfer payload","prodCompression":"COMPRESSION","prodCompressionHint":"Bytecode & asset ratio","prodFormatArch":"FORMAT ARCHITECTURE","prodFormatHintIos":"Apple ARM64 runtime","prodFormatHintAab":"Dynamic Google Play delivery","prodFormatHintApk":"Sideload universal package","prodArchTitle":"Binary Component Architecture","prodArchSub":"Compiled native libraries, runtime bytecodes, assets, and signature blocks","prodTotalIos":"TOTAL IOS APP BINARY","prodTotalAab":"TOTAL ANDROID AAB BUNDLE","prodTotalApk":"TOTAL UNIVERSAL APK","prodTotalFormula":"From {{devKb}} KB (~{{devMb}} MB • {{count}} total assets) dev source bundle → {{installMb}} MB optimized native binary ({{pct}}% bytecode/asset compression).","tabOverview":"Overview","tabProduction":"Production ({{count}})","tabFiles":"Files ({{count}})","tabPackages":"Packages ({{count}})","tabMedia":"Media ({{count}})","tabOptimizer":"Optimizer","analyzingTitle":"Analyzing host app bundle from Metro…","analyzingHint":"Fetching bundle & extracting real modules","searchFilesPlaceholder":"Search by file name (.png, .tsx, .ttf, path)...","filteredFilesJson":"Filtered Files JSON","catAll":"All Files","catUnused":"Not Consumed (Dead)","catConsumed":"In-Use / Active","catImages":"Images & Media","catTypescript":"TypeScript / TSX","catJavascript":"JS & Node Modules","catFonts":"Fonts & Glyphs","catJson":"JSON & Data","treeView":"Tree View","flatList":"Flat List","expand":"Expand","collapse":"Collapse","showingFilesOf":"Showing {{shown}} of {{total}} files","filesOf":"{{count}} of {{total}} Files","notConsumed":"Not Consumed","consumed":"Consumed","copyFileInfo":"Copy {{name}} Info","fileDetailsJson":"File Details JSON","file":"file","files":"files","fileSizeKb":"{{size}} KB","fileSizeMb":"{{size}} MB","mbValue":"~{{size}} MB","kbMbValue":"{{kb}} KB ({{mb}} MB)","legendValue":"{{kb}} KB ({{pct}}%)","mediaSavings":"{{size}} KB","searchPackagesPlaceholder":"Search package (react-native, axios, navigation)...","dependenciesJson":"Dependencies JSON","showingDependencies":"Showing {{count}} dependencies","versionPrefix":"v{{version}}","bundled":"bundled","deprecated":"DEPRECATED","updateAvailable":"Update: v{{version}}","upToDate":"Up to date","bundledBadge":"Bundled","packageDetailsJson":"Package Details JSON","direct":"Direct","transitive":"Transitive","minified":"~{{size}} KB minified","npmLink":"npm ↗","dependenciesCount":"{{count}} Dependencies","mediaAuditorTitle":"Media Compression Auditor","mediaAssetsJson":"Media Assets JSON","mediaAuditorPrefix":"Images & Fonts constitute","mediaAuditorMid":"of total assets (~{{kb}} KB). Converting PNGs to WebP and font subsetting can reduce size by up to","mediaAuditorSuffix":"KB.","mediaAssetsList":"Media Assets & Fonts ({{count}} items)","mediaItemJson":"Media Item JSON","mediaAndFonts":"{{count}} Media & Fonts","optimizerTitle":"React Native Bundle Optimization Checklist","optimizationChecklist":"Optimization Checklist","optTip1Title":"Convert Heavy PNGs to WebP / SVGs","optTip1Desc":"Images account for >40% of final app download size. Converting 2x/3x raster PNGs to WebP saves 60-70% size with no visible fidelity loss.","optTip2Title":"Enable Hermes Bytecode Engine","optTip2DescActive":"Hermes is active! JavaScript is compiled into optimized bytecode Ahead-Of-Time.","optTip2DescInactive":"Hermes is disabled. Enable hermes in your app config for ~40% smaller payload and instant TTI startup.","optTip3Title":"Font Subsetting & Weight Pruning","optTip3Desc":"Include only the font weights you actively use (e.g. Regular & Bold). Remove unused glyph ranges to save 100KB+ per font file.","optTip4Title":"Selective Path Imports (Tree-shaking)","optTip4Desc":"Import from specific subpaths (e.g. lodash/get or specific vector icon sets) instead of importing large monolithic packages.","optTip5Title":"Screen Lazy-Loading","optTip5Desc":"Lazy load secondary screens and heavy modal sheets using dynamic imports and InteractionManager to reduce initial bundle evaluation.","highImpact":"High Impact","mediumImpact":"Medium Impact","bestPractice":"Best Practice","actionRequired":"Action Required","active":"Active","tipDetails":"Tip Details","iosComp1Name":"Frameworks & Dynamic Pods","iosComp1Desc":"React, Hermes, and {{count}} native pod frameworks.","iosComp1Advice":"Ensure Dead Code Stripping (STRIP_INSTALLED_PRODUCT = YES) in Release mode.","iosComp2Name":"Mach-O Executable (ARM64)","iosComp2Desc":"Host App compiled Swift/Objective-C and C++ native bridges.","iosComp2Advice":"Enable Monolithic LTO (Link-Time Optimization) in Xcode Scheme.","iosComp3Name":"Asset Catalog (Assets.car)","iosComp3Desc":"AppIcons, splash screens, vector glyphs, and bundled fonts.","iosComp3Advice":"Compile images into Xcode Asset Catalog for automatic App Thinning.","iosComp4Name":"Hermes Bytecode (main.jsbundle)","iosComp4Desc":"Host app JavaScript compiled AOT into Hermes bytecode ({{count}} files).","iosComp4Advice":"AOT bytecode loads with 0ms compile latency on device launch.","iosComp5Name":"Metadata & Code Signatures","iosComp5Desc":"_CodeSignature, Info.plist, and entitlements block.","iosComp5Advice":"Standard Apple Code Signing & provisioning signature.","andComp1Name":"Native C++ Libraries (.so)","andComp1Desc":"libhermes.so, libfbjni.so, and {{count}} C++ native adapters.","andComp1Advice":"Deploy with Android App Bundle (.aab) to deliver per-ABI split APKs.","andComp2Name":"Compiled DEX (classes.dex)","andComp2Desc":"Compiled Java & Kotlin runtime, AndroidX, and React Native bridges.","andComp2Advice":"Enable R8 / ProGuard shrinking (minifyEnabled true) in build.gradle.","andComp3Name":"Android Resources (res/)","andComp3Desc":"Drawables, vector XMLs, mipmap densities, resources.arsc, fonts.","andComp3Advice":"Use WebP and VectorDrawables to avoid multi-density asset duplication.","andComp4Name":"Hermes Bytecode (Android)","andComp4Desc":"Host app JavaScript compiled into Hermes bytecode ({{count}} files).","andComp4Advice":"Pre-compiled bytecode during assembleRelease gradle task.","andComp5Name":"Manifest & Signatures (META-INF)","andComp5Desc":"AndroidManifest.xml, signing certs, v2/v3/v4 APK Signature Scheme blocks.","andComp5Advice":"Official Google Play signing & signature block.","apkComp1Name":"Multi-ABI C++ Libraries (.so)","apkComp1Desc":"Universal multi-architecture shared libraries (.so) bundled for direct sideloading.","apkComp1Advice":"Use Android App Bundle (.aab) for Google Play to reduce install size by 60%.","apkComp2Name":"Compiled DEX Bytecode (classes.dex)","apkComp2Desc":"Compiled Java & Kotlin runtime, AndroidX libraries, and native bridge modules.","apkComp2Advice":"Enable R8 / ProGuard shrinking (minifyEnabled true) and shrinkResources true.","apkComp3Name":"Android Resources & Assets (res/)","apkComp3Desc":"Drawables, vector XMLs, mipmap densities, resources.arsc, fonts.","apkComp3Advice":"Use WebP and VectorDrawables to avoid multi-density asset duplication.","apkComp4Name":"Hermes Bytecode Bundle (Android)","apkComp4Desc":"Host app JavaScript compiled into Hermes bytecode ({{count}} files).","apkComp4Advice":"Pre-compiled bytecode during assembleRelease gradle task.","apkComp5Name":"Manifest & Signatures (META-INF)","apkComp5Desc":"AndroidManifest.xml, signing certs, JAR & v2/v3/v4 APK Signature Scheme.","apkComp5Advice":"Enterprise sideload & direct install signature block."},"errors":{"title":"Something went wrong","message":"An unexpected error occurred.","retry":"Try Again","reset":"Reset","close":"Close","errorReport":"Error report","modalTitle":"Inspector crashed","modalMessage":"The inspector hit an unexpected error. You can reset it below.","inlineTitle":"Inspector error","inlineMessage":"An unexpected error occurred inside the inspector.","networkError":"Network request failed","crashIntercepted":"CRASH INTERCEPTED","protected":"PROTECTED","rootCauseTitle":"Root Cause Diagnostics","rootCauseSubtitle":"Inspector caught this runtime error to prevent app termination","exactLocation":"EXACT SOURCE LOCATION","file":"File:","lineCol":"Line / Col:","lineColVal":"Line {{line}}, Col {{col}}","function":"Function:","callStack":"CALL STACK FRAMES","framesCount":"{{count}} frames","tryAgainRecover":"Try Again / Recover","copyDiagnostics":"Copy Diagnostics","appTag":"APP","copy":"Copy"},"jsonViewer":{"pretty":"Structuré","raw":"Brut","table":"Tableau","emptyObject":"Objet vide","emptyPayload":"Charge utile vide","emptyTable":"Objet vide","fold":"Plier","expand":"Développer","min":"Min","indent":"Indenter","wrap":"Retour ligne","copied":"Copié !","copy":"Copier JSON","key":"Clé","value":"Valeur","lines":"lignes","line":"ligne"},"codeSnippet":{"copy":"Copy","copied":"Copied!","matchCount":"{{count}} match","matchCount_plural":"{{count}} matches","noMatches":"No matches","searchPlaceholder":"Search...","prevMatch":"Previous match","nextMatch":"Next match","clearSearch":"Clear search"},"diffViewer":{"added":"added","removed":"removed","changed":"changed","noDiff":"No differences","emptyTitle":"No differences found","emptySubtitle":"The two payloads are identical."},"logCard":{"seeMore":"Show more","seeLess":"Show less","copy":"Copy","copied":"Copied!"},"emptyState":{"title":"Nothing here yet","subtitle":"Data will appear here as you use the app.","reload":"Reload"},"errorBoundary":{"title":"Something went wrong","message":"An unexpected error occurred.","retry":"Try Again","reset":"Reset","close":"Close"},"crash":{"title":"Crash","searchPlaceholder":"Search error, message, stack...","searchDetailPlaceholder":"Search in trace or JSON...","statCrashes":"Crashes","statFatal":"Fatal","statJsErrors":"JS Errors","statPromises":"Promises","statRender":"Render","statNative":"Native","filterAll":"All","filterFatal":"Fatal","filterJsError":"JS Error","filterPromise":"Promise","filterRender":"Render","filterNative":"Native","fatalBadge":"FATAL","handledBadge":"HANDLED","fatalCrash":"FATAL CRASH","handledException":"HANDLED EXCEPTION","unknownException":"Unknown Exception","report":"Report","inspect":"Inspect","copyReport":"Copy Report","copied":"Copied","clearTitle":"Clear Crash History","clearMessage":"Are you sure you want to clear all intercepted crash records?","clearCancel":"Cancel","clearConfirm":"Clear All","emptyTitle":"Zero Crashes Detected","emptySubtitle":"Global crash guard is active. All native and JavaScript exceptions are intercepted and protected.","emptySearchSubtitle":"No crash entries matched your search query.","tabStack":"Stack ({{count}})","tabDiagnostics":"Diagnostics","tabTrail":"Trail ({{count}})","tabRawJson":"Raw JSON","appFrames":"App Frames ({{count}})","allFrames":"All Frames ({{count}})","frameApp":"APP","frameLib":"LIB","anonymous":"<anonymous>","noStackTrace":"No stack trace captured for this event.","deviceEnvironment":"Device & Environment","platform":"Platform","osVersion":"OS Version","reactNative":"React Native","jsEngine":"JS Engine","hermesEngine":"Hermes Engine","jsc":"JSC","architecture":"Architecture","fabricNewArch":"Fabric (New Arch)","paperLegacy":"Paper (Legacy)","appState":"App State","jsHeapMemory":"JS Heap Memory","usedHeap":"Used Heap","totalHeap":"Total Heap","noBreadcrumbs":"No breadcrumb events recorded prior to this crash.","simNativeMessage":"Simulated native fatal exception","simPromiseMessage":"Simulated unhandled promise rejection","simRenderMessage":"Simulated React component render error","simJsMessage":"Simulated JavaScript exception","reportTitle":"CRASH DIAGNOSTIC REPORT","reportErrorName":"Error Name:","reportMessage":"Message:","reportType":"Type:","reportFatalYes":"YES (Fatal)","reportFatalNo":"NO (Caught/Handled)","reportFatal":"Fatal:","reportTimestamp":"Timestamp:","reportUptime":"App Uptime:","reportUptimeValue":"{{seconds}} seconds","reportPlatform":"Platform:","reportReactNative":"React Native:","reportHermes":"Hermes:","reportEnabled":"Enabled","reportDisabled":"Disabled","reportArchitecture":"Architecture:","reportFabricNew":"Fabric (New)","reportPaperLegacy":"Paper (Legacy)","reportScreenSize":"Screen Size:","reportAppState":"App State:","reportJsMemory":"JS Memory:","reportStackTrace":"STACK TRACE:","reportNoStackTrace":"No stack trace available","reportComponentHierarchy":"COMPONENT HIERARCHY:","reportRecentBreadcrumbs":"RECENT BREADCRUMBS:","mdReportTitle":"🚨 Crash Report: {{name}}","mdStackTrace":"📦 Stack Trace","mdComponentHierarchy":"🌲 Component Hierarchy","mdRecentBreadcrumbs":"👣 Recent Breadcrumbs","mdSeverityFatal":"FATAL","mdSeverityHandled":"HANDLED","breadcrumbNavigation":"Navigated from \"{{from}}\" to \"{{to}}\"","breadcrumbAction":"Action: {{actionType}}","unknown":"Unknown","runtimeException":"Runtime Exception","logFatalCrash":"Fatal Crash","logUnhandledError":"Unhandled Error","errorNameFatal":"FatalError","errorNameUnhandled":"UnhandledException","nativeCrashTitle":"Native Crash","nativeUncaughtException":"Native Uncaught Exception","nativeException":"Native Exception","unhandledPromiseRejection":"Unhandled Promise Rejection","filterTitle":"Crash Filters","filterSubtitle":"Diagnostics & Reports","filterReset":"Reset All","filterTypeSection":"CRASH TYPE","filterTypeAll":"All Types","filterTimeSection":"TIME HORIZON","filterTimeAll":"All Time","filterTime15m":"Last 15 mins","filterTime1h":"Last 1 hour","filterTime24h":"Last 24 hours","filterTime7d":"Last 7 days","filterPlatformSection":"PLATFORM","filterPlatformAll":"All Platforms","filterPlatformIos":"iOS","filterPlatformAndroid":"Android","filterEngineSection":"JS ENGINE","filterEngineAll":"All Engines","filterEngineHermes":"Hermes","filterSortSection":"SORT ORDER","filterSortNewest":"Newest First (Default)","filterSortOldest":"Oldest First","filterDiscard":"Discard","filterApply":"Apply ({{count}} Crashes)","frameCopy":"Copy","frameCopied":"Copied","componentHierarchy":"Component Hierarchy"},"mediaGallery":{"all":"All ({{count}})","photos":"Photos","videos":"Videos","gifs":"GIFs","purge":"Purge ({{size}})","purgeTitle":"Purge All Media","purgeMessage":"This will permanently delete all {{count}} captured screenshots, videos, and GIFs ({{size}}). Continue?","noMediaTitle":"No Captured Media","noMediaDesc":"Use the Photo or Video Record button in the toolbar to capture whole-app screenshots, screen recordings, or GIFs.","deleted":"Deleted media item","allPurged":"All captured media purged","converting":"Converting...","convertToGif":"Convert to GIF","playVideo":"Play Video","playError":"Unable to play video","convertedSuccess":"Converted to Animated GIF successfully!","convertFailed":"Failed to convert to GIF","share":"Share","copyUri":"Copy URI","uriCopied":"File URI copied to clipboard","delete":"Delete","deleteSelected":"Delete ({{count}})","deleteSelectedTitle":"Delete Selected","deleteSelectedMessage":"Are you sure you want to delete {{count}} selected media items?","deletedCount":"Deleted {{count}} media items","deleteTitle":"Delete Media","deleteMessage":"Are you sure you want to delete {{filename}}?","shareUnavailable":"Sharing not available on this device","showingResults":"Showing {{count}} results","showingFilteredResults":"Showing {{count}} of {{total}} results","selectedOfResults":"Selected {{selected}} of {{total}} results","minimize":"Minimize","expand":"Expand Fullscreen","collapse":"Exit Fullscreen","speed":"Speed","loop":"Loop","pause":"Pause","play":"Play"}}
1
+ {"common":{"cancel":"Annuler","clear":"Effacer","clearAll":"Tout effacer","close":"Fermer","loading":"Chargement...","success":"Succès","pending":"En attente","failed":"Échoué","copy":"Copier","copied":"Copié !","copyJson":"Copier JSON","collapseAll":"Tout réduire","expandAll":"Tout développer","viewOnNpm":"Voir sur NPM","later":"Plus tard","minimize":"Réduire","tapToExpand":"Appuyez pour développer","open":"Ouvrir","openInBrowser":"Ouvrir dans le navigateur","openInBrowserPrompt":"Voulez-vous ouvrir cette URL dans votre navigateur externe ?","delete":"Supprimer","reset":"Réinitialiser","save":"Enregistrer","edit":"Modifier","add":"Ajouter","search":"Rechercher","filter":"Filtrer","sort":"Trier","refresh":"Actualiser","retry":"Réessayer","confirm":"Confirmer","yes":"Oui","no":"Non","ok":"OK","done":"Terminé","back":"Retour","next":"Suivant","show":"Afficher","hide":"Masquer","select":"Sélectionner","selectAll":"Tout sélectionner","deselectAll":"Tout désélectionner","noResults":"Aucun résultat trouvé","items":"éléments","of":"de","showing":"Affichage","active":"Actif","inactive":"Inactif","enabled":"Activé","disabled":"Désactivé","live":"En direct","connected":"Connecté","disconnected":"Déconnecté","update":"MISE À JOUR","unknown":"Inconnu","source":"SOURCE","share":"Partager","version":"Version"},"header":{"rec":"REC","sourceFirebase":"FB","sourceManual":"MAN","aboutSpecs":"À propos et spécifications","live":"En direct","keys":"{{count}} clés","frames":"{{count}} images","updateAvailableTitle":"Mise à jour disponible","updateAvailableMessage":"réagir-native-inapp-inspector v{{version}} est disponible sur NPM (installé : v{{installed}}).","clearEverythingTitle":"Tout effacer","clearEverythingMessage":"Cela efface tous les onglets : API, journaux, analyses, chronologie Redux et historique des crashs. Continuer?","photo":"Photos","record":"Enregistrer","clear":"Effacer","about":"À propos","screenshotCaptured":"📸 Capture d'écran capturée et enregistrée","screenshotFailed":"Échec de la capture d'écran","screenshotError":"Erreur lors de la capture d'écran","recordingStarted":"🔴 L'enregistrement vidéo a commencé","recordingSaved":"🎥 Enregistrement enregistré ({{duration}}s)","recordingError":"Erreur d'enregistrement","recordingStartFailed":"Échec du démarrage de l'enregistrement","paramCount":"{{count}} paramètre","paramCount_plural":"{{count}} paramètres","firebase":"base de feu","manual":"manuel","sliceBadge":"TRANCHE"},"tabs":{"logs":"Journaux","analytics":"Analytique","crash":"Crashs","device":"Appareil","storage":"Stockage","media":"Capture","apis":"API","redux":"Redux","push":"Pousser","socket":"WebSocket","debugging":"Débogage"},"settings":{"configureSubtitle":"Configurer les paramètres du module","resetAlertTitle":"Réinitialiser tous les paramètres","resetAlertMessage":"Cela restaure la visibilité des modules et les préférences d'interface par défaut. Continuer ?","settingsReset":"Paramètres réinitialisés","settingsResetMessage":"Tous les paramètres ont été réinitialisés.","pushHistoryCleared":"Historique des notifications push effacé","socketHistoryCleared":"Historique WebSocket effacé","mainTitle":"Paramètres et modules","mainSubtitle":"Gérer les modules et les préférences","requiredBadge":"OBLIGATOIRE","defaultBadge":"PAR DÉFAUT","notConnectedBadge":"NON CONNECTÉ","notDetectedBadge":"NON DÉTECTÉ","readOnlyBadge":"LECTURE SEULE","coreBadge":"NOYAU","activeBadge":"ACTIF","dormantBadge":"DORMANT","protectedBadge":"PROTÉGÉ","modulesAndTools":"Modules et outils","uiPreferences":"Interface utilisateur et affichage","ramLimits":"RAM et limites","screenVideoCapture":"Capture d'écran et vidéo","zeroOverheadTitle":"Zéro surcharge en arrière-plan","zeroOverheadDesc":"Cochez les modules que vous souhaitez activer. Les modules désactivés consomment 0 % de CPU et de mémoire jusqu'à leur sauvegarde.","unsavedPending":"● Sélections non enregistrées en attente","allSynchronized":"Tous les modules synchronisés","modulesActive":"{{active}} sur {{total}} modules actifs","saveChanges":"Enregistrer les modifications","settingsSaved":"Paramètres enregistrés","settingsSavedDesc":"Les configurations des modules actifs ont été mises à jour avec succès.","configure":"Configurer","appearanceTheme":"APPARENCE ET THÈME","windowLayout":"FENÊTRE ET DISPOSITION","startupDefault":"ÉCRAN DE DÉMARRAGE ET PAR DÉFAUT","logFiltersDeduplication":"FILTRES DE JOURNAUX ET DÉDUPLICATION","resetSettings":"Réinitialiser tous les paramètres","resetSettingsDesc":"Effacer les préférences personnalisées par défaut","reset":"Réinitialiser","reduxNotConnectedTip":"Le magasin Redux n'est pas connecté. Appelez connectReduxStore(store) ou utilisez l'inspecteurReduxMiddleware pour l'activer.","analyticsNotConnectedTip":"Analytics n'est pas initialisé. Appelez setupAnalyticsLogger(analytics()) pour l’activer.","tabVisibility":"Visibilité des onglets","tabVisibilityDescription":"Choisissez quels modules apparaissent dans l'inspecteur","settingsTitle":"Paramètres","back":"Retour","apis":{"title":"Paramètres des API","total":"Total : {{count}}","maxRequestLogs":"Journaux de requêtes maximum","maxRequestLogsDescription":"Taille du tampon des requêtes réseau conservées en mémoire","clearNetworkLogs":"Effacer les journaux réseau","clearNetworkLogsDescription":"{{count}} requêtes stockées","networkLogsCleared":"Journaux réseau effacés.","showStatusFilter":"Filtre d'état","showStatusFilterDescription":"Afficher les puces d'état dans la liste des API","showMethodFilter":"Filtre de méthode","showMethodFilterDescription":"Afficher les puces de méthode dans la liste des API","defaultTabDescription":"Onglet sur lequel l'inspecteur s'ouvre"},"logs":{"title":"Paramètres des journaux","total":"Total : {{count}}","maxConsoleLogs":"Journaux maximum de la console","maxConsoleLogsDescription":"Combien de messages de console conserver","logLevels":"Sévérité des journaux","logLevelsDescription":"Sélectionnez les gravités à capturer dans les journaux","showInfo":"Afficher les journaux d'informations","showInfoDesc":"Journaux d'informations et impressions de débogage","showWarn":"Afficher les journaux d'avertissement","showWarnDesc":"Avertissements et dépréciations","showError":"Afficher les journaux d'erreurs","showErrorDesc":"Erreurs d'exécution et exceptions","clearConsoleLogs":"Effacer les journaux de la console","clearConsoleLogsDescription":"{{count}} journaux stockés","consoleLogsCleared":"Journaux de la console effacés."},"analytics":{"title":"Paramètres d'analyse","total":"Événements : {{count}}","maxAnalyticsEvents":"Événements capturés","maxAnalyticsEventsDescription":"{{count}} événements d'analyse stockés dans la mémoire tampon","clearAnalyticsEvents":"Effacer l'historique des analyses","clearAnalyticsEventsDescription":"Effacer tous les événements de télémétrie capturés","analyticsEventsCleared":"Événements d'analyse effacés."},"redux":{"title":"Paramètres de redux","reducers":"Réducteurs : {{count}}","autoRefresh":"Magasin d'actualisation automatique","autoRefreshDescription":"Capturez l'arborescence d'état du magasin Redux à chaque expédition","defaultJsonExpandDepth":"Profondeur d'extension JSON par défaut","defaultJsonExpandDepthDescription":"Profondeur initiale de l'arborescence d'état Redux à développer automatiquement","clearReduxState":"Effacer l'état Redux","clearReduxStateDescription":"Réinitialiser l'instantané de l'état actuel dans l'inspecteur","clearReduxStateEmpty":"Aucun instantané du magasin enregistré","reduxStateCleared":"Instantané d’état Redux effacé.","clearReduxTimeline":"Effacer la chronologie Redux","clearReduxTimelineDescription":"Supprimer tout l'historique des actions capturées","reduxTimelineCleared":"L'historique des actions Redux a été effacé."},"bundle":{"title":"Paramètres du paquet","sourceBundler":"Regroupeur de sources métropolitaines","sourceBundlerDesc":"Analyse les arborescences de modules en direct et calcule les répartitions de taille binaire","clearCache":"Vider le cache du bundle","clearCacheDesc":"Forcer la récupération et l'analyse du bundle JS","cacheCleared":"Cache d'analyse de bundle vidé."},"performance":{"title":"Paramètres de performances","frameMeasurement":"Mesure d'image en direct","frameMeasurementDesc":"Échantillonne les fréquences d'images UI/JS et détecte les rendus inutiles","clearEvents":"Effacer les événements de performance","clearEventsDesc":"Réinitialiser les fichiers indésirables enregistrés et l'historique des suppressions de FPS","eventsCleared":"Événements de performance effacés."},"crash":{"title":"Paramètres de crash","maxCrashLogs":"Journaux de crash maximum","maxCrashLogsDesc":"Combien d'enregistrements d'accidents conserver dans l'historique","globalGuard":"Protection mondiale contre les accidents","globalGuardDesc":"Intercepte directement les erreurs natives, JS et de rendu","clearHistory":"Effacer l'historique des crashs","clearHistoryDesc":"{{count}} journaux d'incidents stockés","historyCleared":"Journaux de crash effacés."},"media":{"title":"Capture d'écran et vidéo","badge":"H.264 natif / GIF","desc":"Configurer les formats de capture d'écran, la qualité, les FPS vidéo, la narration audio, l'enregistrement et le stockage GIF","screenshotCardTitle":"Formats et qualité de capture d'écran","screenshotCardDesc":"Configuration d'instantanés haute résolution en pleine fenêtre","imageFormat":"Format d'image","imageFormatDesc":"PNG (sans perte), JPEG (compact) ou WEBP","autoHide":"Masquer automatiquement la superposition de l'inspecteur","autoHideDesc":"Exclut l'interface utilisateur de l'inspecteur des captures d'écran","enabled":"ACTIVÉ","videoCardTitle":"Enregistrement vidéo et GIF","videoCardDesc":"Enregistrement MP4 H.264 et exportation GIF animé","audioMode":"Mode de narration audio","audioModeDesc":"Muet, audio de l'application ou narration vocale","frameRate":"Fréquence d'images","frameRateDesc":"Des FPS plus élevés donnent des enregistrements plus fluides","gifAutoOpt":"Optimisation automatique GIF","gifAutoOptDesc":"Convertit les enregistrements vidéo pour les PR GitHub et Slack","purgeAll":"Purger tous les médias capturés","purgeAllDesc":"Supprime toutes les captures d'écran, vidéos et GIF stockés","purgeCacheBtn":"Purger le cache","purgeConfirmTitle":"Purger le stockage multimédia","purgeConfirmMessage":"Cela supprime tous les fichiers multimédias capturés du cache local. Continuer?","purgedSuccess":"Stockage multimédia purgé"},"general":{"darkMode":"Thème du mode sombre","darkModeDescription":"Basculer entre une esthétique sombre et élégante ou un contraste clair","modalHeight":"Hauteur de la fenêtre de l'inspecteur","modalHeightDescription":"Pourcentage de couverture d'écran modal","modalAnimation":"Animation de transitions","modalAnimationDescription":"Style de présentation d’entrée et de sortie","duplicateLogs":"Afficher les journaux en double","duplicateLogsDescription":"Désactivé : les entrées répétées identiques se transforment en badges ×N","defaultOpeningTab":"Onglet d'ouverture par défaut","defaultOpeningTabDesc":"Onglet initial actif lorsque le bouton du lanceur est enfoncé","activeConsoleLogLevels":"Niveaux de journalisation de la console active","activeConsoleLogLevelsDesc":"Sélectionnez les gravités à capturer dans les journaux","resetToDefaults":"Réinitialiser aux valeurs par défaut","resetToDefaultsDescription":"Restaurer tous les paramètres de l'inspecteur","resetConfirmationTitle":"Réinitialisation des paramètres","resetConfirmationMessage":"Tous les paramètres ont été réinitialisés aux valeurs par défaut.","storageStatus":"Stockage persistant","storageStatusEnabled":"Stockage des paramètres : persistant ({{type}})","storageStatusEnabledDesc":"Vos préférences et la visibilité du module persistent lors des redémarrages de l'application.","storageStatusDisabled":"Stockage des paramètres : en mémoire (temporaire)","storageStatusDisabledDesc":"Les préférences sont réinitialisées lors de la suppression de l'application. Transmettez le stockage personnalisé à <NetworkInspector storage={...} /> pour persister sur Android.","language":"Langue","languageDescription":"Sélectionner la langue d'affichage de l'interface","selectLanguage":"Sélectionnez la langue"},"memory":{"manualTitle":"Nettoyage manuel de la mémoire","manualDescription":"Élaguez les anciennes entrées dans tous les magasins de journaux et dans la RAM libre","pruned":"{{count}} éléments supprimés de la mémoire"},"simulator":{"salesforce":"Simulation de poussée Salesforce Marketing Cloud","fcm":"Push FCM Firebase simulé","apns":"Push APN Apple simulé","deepLink":"Push Link profond simulé","chat":"Session WebSocket de chat en temps réel simulée","crypto":"Flux de ticker Binance Crypto simulé","socketio":"Session Socket.IO v4 simulée","echo":"Test d'écho WebSocket simulé","screenshotSaved":"Capture d'écran capturée et enregistrée !"}},"network":{"urlHeader":"URL","jsonViewer":{"raw":"Raw","key":"Key","pretty":"Jolie","table":"Tableau","emptyObject":"Objet vide","emptyTable":"Objet vide","value":"Valeur"},"showingRequests":"Affichage de {{count}} requêtes","showingFilteredRequests":"Affichage de {{filtered}} sur {{total}} requêtes","status201":"201 Créé","status204":"204 Pas de contenu","status304":"304 Non modifié","status400":"400 Requête incorrecte","status401":"401 Non autorisé","status403":"403 Interdit","status404":"404 Non trouvé","status500":"500 Erreur","shareError":"Erreur de partage","shareErrorMessage":"Impossible d'ouvrir la feuille de partage","title":"API","searchPlaceholder":"Rechercher par URL, statut ou méthode...","emptyTitle":"Aucun appel API capturé pour l'instant","emptySubtitle":"Les requêtes réseau apparaîtront ici lorsque vous utiliserez l'application.","reload":"Recharger","clearTitle":"Effacer les journaux réseau","clearMessage":"Êtes-vous sûr de vouloir effacer tous les journaux réseau capturés ?","detailTabs":{"metadata":"Métadonnées","headers":"En-têtes","request":"Demande","response":"Réponse"},"requestTitle":"Demande","responseTitle":"Réponse","searchRequest":"Demande de recherche...","searchResponse":"Rechercher une réponse...","searchHeaders":"Rechercher des en-têtes...","requestHeaders":"En-têtes de demande","responseHeaders":"En-têtes de réponse","diffTitle":"Différence","noResponse":"Aucun corps de réponse","noRequest":"Aucun corps de requête","statusFailed":"Échec","methodHeader":"Méthode","statusHeader":"Statut","durationHeader":"Durée","sizeHeader":"Taille","triggeredAt":"Déclenché à","contentType":"Type de contenu","sourcePage":"Page source","sourcePageUnknown":"Source inconnue","loadMore":"Charger plus","groupByPage":"Regrouper par page","groupByDomain":"Regrouper par domaine","groupByNone":"Liste","domain":"Domaine","page":"Pages","requests":"{{count}} demandes","requests_plural":"{{count}} demandes","noFilteredResults":"Aucune demande ne correspond aux filtres actuels","scrollToTop":"Faire défiler vers le haut","copyCurl":"Copier cURL","copyFetch":"Copier l'extrait de récupération","emptyResponse":"Réponse vide","bodyHidden":"{Corps caché}","queryParams":"Paramètres de requête","fullUrl":"URL complète","open":"Ouvert","showMore":"Afficher plus","showLess":"Afficher moins","failedNetworkError":"Échec (erreur réseau)","noMatchingHeaders":"Aucun en-tête correspondant","diffHidden":"{ Différent masqué }","noDiff":"Aucune différence par rapport à l'API précédente.","healthTitle":"Santé du réseau et télémétrie","successRate":"Taux de réussite","avgLatency":"Latence moyenne","p95Latency":"Latence P95","bandwidth":"Bande passante","fastest":"Le plus rapide","slowest":"Le plus lent","timingWaterfall":"Cascade de synchronisation et latence","throughput":"Débit","performanceTier":"Niveau de performances","perf":{"fast":"Rapide (< 200 ms)","moderate":"Modéré (200-800 ms)","slow":"Lent (> 800 ms)"},"status200":"200 OK"},"console":{"filterAll":"All","rawTraceView":"Raw","showingLogs":"Affichage de {{count}} journaux","showingFilteredLogs":"Affichage de {{filtered}} sur {{total}} journaux","filteredBy":"Filtré par {{filters}} ({{filtered}} sur {{total}} journaux)","log":"Journal","warning":"Avertissement","error":"Erreur","debug":"Débogage","title":"Journaux","searchPlaceholder":"Rechercher des journaux...","emptyTitle":"Aucun journal de console pour l'instant","emptySubtitle":"La sortie de la console de votre application apparaîtra ici.","analyticsBadge":"Analyse","userLogBadge":"journal utilisateur","jsonTitle":"Journal JSON","messageTitle":"Message du journal","search":"Journal de recherche...","searchJson":"Journal de recherche JSON...","logMessage":"Message du journal","consoleLog":"Journal de la console","characters":"{{count}} caractères","duplicates":"×{{count}} doublons","showMore":"Afficher plus","showLess":"Afficher moins","clearTitle":"Effacer les journaux","clearMessage":"Êtes-vous sûr de vouloir effacer tous les journaux de la console ?","seeMore":"Afficher plus","noResults":"Aucun journal ne correspond aux filtres actuels","filterInfo":"Informations","filterWarn":"Avertir","filterError":"Erreur","filterUserLog":"Journal utilisateur","filterAnalytics":"Analyse","tabOutput":"Sortie","tabArgs":"Args ({{count}})","tabStack":"Trace de pile","tabMetadata":"Métadonnées","callStack":"Pile d'appels ({{count}} frames)","errorStack":"Pile d'exceptions d'erreur ({{count}} trames)","callOriginStack":"Pile d'origine des appels","errorThrownStack":"Erreur de pile lancée","appCodeScope":"🎯 Code d'application ({{count}})","allFramesScope":"📜 Tous les cadres ({{count}})","cardsView":"Cartes","noStackAvailable":"Aucune trame de pile d'appels correspondant au filtre actif trouvée.","originBadge":"ORIGINE #1","appCodeBadge":"Code d'application","dependencyBadge":"Dépendance","nativeBadge":"Natif","hermesVmBadge":"Hermès VM","fullStackTrace":"Trace de pile complète","lineCol":"Ligne {{line}}, Col {{col}}","lineColShort":"L{{line}}:C{{col}}","searchInLogDetails":"Rechercher dans les détails du journal...","info":"Informations"},"analytics":{"timeNow":"NOW","allCategory":"All","title":"Analyse","searchPlaceholder":"Rechercher des événements...","emptyTitle":"Aucun événement d'analyse pour l'instant","emptySubtitle":"Les événements Analytics apparaîtront ici au fur et à mesure que votre application les suivra.","clearTitle":"Des analyses claires","clearMessage":"Êtes-vous sûr de vouloir effacer tous les événements d'analyse ?","eventParams":"{{count}} paramètres","eventCount":"{{count}} événements","userProperties":"Propriétés utilisateur","userId":"Identifiant utilisateur","defaultParameters":"Paramètres par défaut","collectionEnabled":"Collecte activée","screenView":"vue_écran","eventDetails":"Détails de l'événement","parameters":"Paramètres","noParams":"Aucun paramètre","recentEvents":"Événements récents","analyticsError":"Erreur d'analyse","duplicate":"Dupliquer","params":"paramètres","props":"accessoires","item":"article","items":"articles","pageViewCategory":"Vue de la page","ecommerceCategory":"Commerce électronique","systemCategory":"Système","customCategory":"Personnalisé","realtimeStream":"Activité en temps réel","liveTelemetry":"Télémétrie en direct","eventsInWindow":"événements dans la fenêtre","eventVelocity":"{{rate}} ev/min","peakVolume":"Pic : {{count}}","time30mAgo":"-30m","time20mAgo":"-20m","time10mAgo":"-10m","selectedBucket":"Compartiment : {{time}} ({{count}} événements)","totalRevenue":"Revenus","activeDistribution":"Répartition des catégories","screensCategory":"Écrans","overviewTab":"Aperçu","jsonTreeTab":"Arbre JSON","rawPayloadTab":"Charge utile brute","sessionContext":"Contexte de la séance","userPropertiesSnapshot":"Instantané des propriétés utilisateur","parameterKeys":"Paramètres ({{count}})","searchParameters":"Paramètres de recherche...","noParamsFound":"Aucun paramètre ne correspond à votre recherche","sourceFirebase":"BASE DE FEU GA4","sourceCustom":"PERSONNALISÉ / MANUEL"},"redux":{"searchPlaceholder":"Rechercher état ou actions...","emptyTitle":"Aucun store Redux connecté","emptySubtitle":"Connectez votre store pour inspecter l'état et les actions.","originUi":"UI","activeSlices":"SLICES ACTIFS","totalState":"ÉTAT TOTAL","lastActionHeader":"DERNIÈRE ACTION","initialState":"État initial (aucune action émise)","noStoreConnected":"Aucun store Redux connecté","connectStoreTip":"Appelez connectReduxStore(store) ou utilisez inspectorReduxMiddleware au lancement.","clearPersistedTitle":"Effacer l'état persisté","clearPersistedMessage":"Êtes-vous sûr de vouloir supprimer le stockage persisté du slice \"{{slice}}\" ?","clearedPersisted":"L'état persisté a été effacé.","clearPersistedError":"Échec de la suppression de l'état persisté.","title":"Redux","stateTab":"État","actionsTab":"Actions","clearTitle":"Effacer la chronologie Redux","clearMessage":"Êtes-vous sûr de vouloir effacer l'historique des actions envoyées ?","noActions":"Aucune action envoyée pour l'instant. Déclenchez une action dans l'application pour remplir l'historique.","noSearchResults":"Aucune action ne correspond à votre recherche.","lastAction":"Dernière action","actionHistory":"Historique des actions","affectedSlices":"Tranches concernées","noAffectedSlices":"Aucun","dispatchTime":"Expédié à","prevState":"État précédent","nextState":"État suivant","viewDiff":"Voir la différence","emptyState":"L'état est vide","rootState":"État racine","connectionStatus":"Connecté","connectionStatusNone":"Non connecté","autoRefresh":"Actualisation automatique","paused":"En pause","liveState":"État en direct","timeline":"Chronologie","persisted":"Persisté","storage":"Stockage","metadata":"Métadonnées","inMemory":"En mémoire","slice":"TRANCHE","rootKeys":"Clés racine","size":"Taille","actions":"actes","keys":"Clés","last":"Dernier","live":"En direct","loading":"Chargement","error":"Erreur","empty":"Vide","payload":"Charge utile","actionPayload":"Charge utile de l'action :","stateChangesDiff":"Changements d'état (Diff) :","tapToInspectAction":"Appuyez pour inspecter la charge utile de l'action et les modifications des différences","noDispatchedActions":"Aucune action distribuée enregistrée pour cette tranche pour le moment.","sliceJson":"Trancher JSON","originSaga":"SAGA","originThunk":"PENSEZ","originDirect":"DIRECTEMENT","originListener":"AUDITEUR","triggeredFrom":"Déclenché à partir de :","openInEditor":"Ouvrir dans l'éditeur","callStack":"Trace de la pile d'appels","sliceOrigin":"Tranche / Origine"},"device":{"title":"Appareil","searchPlaceholder":"Rechercher spécifications, UDID, IP, écran...","subTabs":{"overview":"Aperçu","hardware":"Matériel","network":"Réseau et IP","display":"Affichage","runtime":"Exécution & App","security":"Sécurité & IDs"},"sections":{"overview":"APERÇU DE L'APPAREIL","hardware":"SPÉCIFICATIONS MATÉRIELLES & SYSTÈME","network":"RÉSEAU & CONNECTIVITÉ","display":"AFFICHAGE & GÉOMÉTRIE","runtime":"EXÉCUTION & ENVIRONNEMENT","security":"IDENTIFIANTS & SÉCURITÉ"},"copied":"{{label}} copié","copiedJson":"Rapport JSON complet de l'appareil copié !","copiedMarkdown":"Rapport Markdown copié dans le presse-papiers !","live":"EN DIRECT","ipAddress":"ADRESSE IP","ramUsedTotal":"RAM (UTILISÉE/TOTALE)","uptime":"TEMPS DE FONCTIONNEMENT"},"storage":{"title":"Stockage","searchPlaceholder":"Rechercher clés, valeurs, types...","clearTitle":"Vider le stockage","clearMessage":"Voulez-vous vraiment supprimer toutes les clés dans {{driver}} ?","clearConfirm":"Tout effacer","emptyTitle":"Aucune entrée de stockage","emptySubtitle":"Le stockage est vide pour ce pilote.","addKey":"Ajouter une clé","add":"Ajouter","editKey":"Modifier la clé","createKey":"Créer une clé","save":"Enregistrer","saveKey":"Enregistrer la clé","keyName":"Nom de clé","value":"Valeur","valueContent":"Contenu de la valeur","beautifyJson":"Formater JSON","loading":"Chargement des entrées...","deleteKeyTitle":"Supprimer la clé","deleteKeyMessage":"Voulez-vous vraiment supprimer la clé \"{{key}}\" ?","deleteConfirm":"Supprimer","cleared":"Stockage effacé","subTabs":{"asyncStorage":"Stockage asynchrone","mmkv":"MMKV"},"type":"Tapez","asyncStorage":"Stockage asynchrone","mmkv":"MMKV"},"footer":{"endOfList":"Vous avez atteint la fin de la liste","loadMore":"Charger {{count}} de plus","showingOf":"Affichage de {{count}} sur {{total}} {{label}}","loadMoreRequests":"Charger {{count}} Plus de demandes","allLoaded":"Toutes les requêtes {{count}} chargées"},"performance":{"filterAll":"All","catAll":"All","catIo":"I/O","jscEngine":"JSC","fpsUnit":"FPS","title":"Performances","fpsTarget":"Moniteur cible 60 FPS","healthScore":"Score de santé FPS","excellent":"Excellent (60 FPS)","good":"Bon (Janks mineurs)","needsOptimization":"Besoin d’optimisation","liveFps":"FPS en direct et cycle de rafraîchissement","realtimeWindow":"Temps réel (fenêtre 1 s)","uiRenderThread":"Fil de rendu de l'interface utilisateur","optimalFrame":"Optimale (<16,6 ms)","slowFrame":"Image lente (> 16,6 ms)","budgetUsage":"Utilisation du budget de 60 FPS","avgFrameTime":"Temps de trame moyen","peakTime":"Heure de pointe","jsThread":"Sujet JS","uiThread":"Sujet de l'interface utilisateur","jsiLatency":"Latence JSI","heapImpact":"Impact sur le tas","optimizationTip":"Conseil d'optimisation :","recordedEvents":"Événements et interactions enregistrés","liveStream":"Flux de session en direct","emptyTitle":"Aucun événement de performance capturé pour l'instant","emptySubtitle":"Effectuez des actions dans votre application pour connaître la durée des threads, le coût de rendu et le suivi FPS.","tabOverview":"Aperçu","tabRenders":"Rendus","tabInteractions":"Interactions","tabMemory":"Mémoire","filterSlow":"Lent (> 16 ms)","filterCritical":"Critique (>33 ms)","searchPlaceholder":"Composant de recherche, interaction...","avgRenderTime":"Rendu moyen","totalRenders":"Rendus totaux","renderCost":"Coût du rendu","slowRenders":"Rendus lents","unnecessaryRenders":"Rendus inutiles","heapAllocated":"Tas alloué","heapLimit":"Limite de tas","gcEvents":"Événements du GC","leakRisk":"Risque de fuite","lowRisk":"Faible risque","mediumRisk":"Risque moyen","highRisk":"Risque élevé","memoryTimeline":"Chronologie de la mémoire","clearPerformance":"Données de performances claires","clearConfirmation":"Êtes-vous sûr de vouloir effacer toutes les données de suivi des performances ?","liveFpsDip":"Baisse de la fréquence d'images en direct ({{fps}} FPS)","liveFpsDipDetail":"Durée de l'image du thread principal étendue à {{duration}} ms lors de la mise à jour de la vue.","liveFpsDipAdvice":"Exécution lourde de JavaScript lors de la présentation d'affichage retardée du passage d'image.","yogaLayout":"Disposition de la boîte flexible de yoga","hermesGc":"Collecte des déchets Hermès","jsEngine":"Moteur JS","uiReconciler":"Réconciliateur d'interface utilisateur","memoryHeap":"Tas de mémoire","allLogs":"Tous les journaux","jankySlow":"Branlant / Lent","navigation":"Navigation","components":"Composants","memoryGc":"Mémoire et CPG","networkIo":"Réseau et E/S","catJanky":"Janky","catNavigation":"Navigation","catRender":"Composants","catMemory":"Mémoire","recording":"Enregistrement","paused":"En pause","budgetHeadroom":"~{{time}}ms de marge ({{percent}}%)","jsExec":"Exécution JS : {{time}} ms","yogaLayoutTime":"Disposition du yoga : {{time}} ms","uiRenderTime":"Rendu de l'interface utilisateur : {{time}} ms","freeTime":"Gratuit : {{time}}ms","heapAllocatedSub":"{{allocated}} Mo alloués","hermesAot":"Hermès (AOT)","v8Jit":"V8 (JIT)","bytecodeCompiled":"Bytecode compilé","jitEngine":"Moteur JIT","webkitEngine":"Moteur de kit Web","fabricJsi":"Tissu / JSI","paperBridge":"Papier / Pont","directCppBindings":"Liaisons C++ directes","asyncJsonBridge":"Pont JSON asynchrone","jsLag":"Décalage JS","jankRate":"Taux de déchets","fpsAreaChartTitle":"Flux FPS et gigue en temps réel (30 s)","fpsAreaChartSub":"Cible en direct de 60 FPS avec mesure continue de la variance d'image","frameLatencyDistTitle":"Distribution de la latence des images","frameLatencyDistSub":"Proportion de trames livrées dans un budget de 16,6 ms","optimalBucket":"< 16,6 ms (60 ips)","minorJankBucket":"16,7 à 33,3 ms (30 à 60 images par seconde)","noticeableJankBucket":"33,4 à 50,0 ms (20 à 30 images par seconde)","severeFreezeBucket":"> 50,0 ms (< 20 FPS)","hermesHeapTrendTitle":"Mémoire et dynamique du tas Hermes","hermesHeapTrendSub":"Allocation en direct par rapport aux cycles de récupération générationnels du GC","live":"En direct","msTotal":"{{duration}}ms au total • {{time}}","droppedFrames":"{{count}} abandonné","zeroDropped":"0 abandonné","frameBudgetMs":"{{time}}ms/image ({{budget}}% du budget)","target60Fps":"Cible de 60 FPS • {{fps}} FPS réels","frameDuration":"Durée de l'image","frameDurationVal":"{{time}} ms (budget de 16,67 ms)","frameUtilization":"Budget cadre dépassé","frameBudgetOk":"Marge budgétaire du cadre","bottleneck":"Goulot d'étranglement","jsBound":"Fil JS lié","uiBound":"Lié au fil de l'interface utilisateur","balanced":"Équilibré","smooth":"Fluide 60 FPS","minorJank":"Bégaiement mineur","noticeableJank":"Jank notable","severeFreeze":"Gel sévère","screenContext":"Contexte de l'écran","profileReason1":"Accessoires de fonction de flèche en ligne transmis aux enfants (onAddToCart={() => ...})","profileReason2":"Sélecteur Redux non mémorisé créant une nouvelle référence d'objet à chaque envoi","profileReason3":"Objet de style dynamique créé dans le corps de rendu ({ marginTop : insets.top + 10 })","profileReason4":"FlatList manquant getItemLayout provoquant des passes de mesure de mise en page asynchrone","profileReason5":"Fonction renderItem définie de manière anonyme dans le corps JSX","profileReason6":"Répertorier les composants de l'élément non enveloppés avec React.memo","profileReason7":"Écran parent restitué lors de l'événement Afficher/Masquer le clavier","profileReason8":"Référence de rappel instable transmise au bouton de paiement","profileReason9":"L'état de la valeur TextInput déclenche le rendu parent à chaque frappe sans rebond","profileReason10":"Passer l'objet filtre non mémorisé ({category, minPrice}) aux puces enfants","profileReason11":"Revalidation du cache d'images d'avatar lors de l'actualisation de la session d'authentification","fixUseCallbackTitle":"Envelopper les gestionnaires d'événements dans useCallback","fixUseCallbackDesc":"Les fonctions en ligne recréent une nouvelle référence mémoire à chaque rendu, invalidant React.memo sur les composants enfants.","fixCreateSelectorTitle":"Sélecteurs Memoize Redux / Zustand avec ShallowEqual","fixCreateSelectorDesc":"Le renvoi de nouvelles références d'objet ou de tableau dans useSelector force un nouveau rendu automatique à chaque répartition d'état.","fixUseMemoStylesTitle":"Styles de levage ou utilisation de useMemo pour les dimensions dynamiques","fixUseMemoStylesDesc":"Les objets de style en ligne créent de nouvelles identités d'objet à chaque passage d'image, provoquant des différences de réconciliation Yoga Flexbox.","fixGetItemLayoutTitle":"Implémenter getItemLayout pour les éléments à hauteur fixe","fixGetItemLayoutDesc":"La fourniture de getItemLayout permet à FlatList de calculer immédiatement les décalages de défilement et les fenêtres virtuelles sans mesurer les vues de manière asynchrone.","fixReactMemoTitle":"Éléments de la liste de synthèse dans React.memo","fixReactMemoDesc":"Empêche les plus de 50 éléments de liste visibles de s'afficher à nouveau lorsque l'état de la liste parent (par exemple, position de défilement ou pagination) est mis à jour.","fixComponentSplittingTitle":"Isoler l'état à évolution rapide dans les composants feuilles","fixComponentSplittingDesc":"Déplacez les écouteurs de clavier et l'état d'animation modale dans des sous-composants autonomes afin que le parent ne soit pas restitué.","fixDebouncedInputTitle":"Entrée de recherche anti-rebond ou utilisation de l'état contrôlé local","fixDebouncedInputDesc":"Ne propagez pas immédiatement l’état de frappe dans le magasin global. Utilisez un anti-rebond de 250 ms ou une réf.","fixPrimitivePropsTitle":"Passez des accessoires primitifs au lieu de gros objets","fixPrimitivePropsDesc":"Le fait de transmettre uniquement la chaîne CategoryId au lieu de l'objet de catégorie entier empêche le nouveau rendu lors de la mise à jour des autres métadonnées de catégorie.","fixUseRefForTrackingTitle":"Utilisez useRef pour les valeurs de suivi non visuelles","fixUseRefForTrackingDesc":"Ne stockez pas les minuteurs d'analyse, les décalages de défilement ou les ID de suivi dans useState s'ils ne modifient pas directement l'arborescence JSX.","highImpact":"Fort impact","mediumImpact":"Impact moyen","bestPractice":"Meilleure pratique","beforeUseCallback":"// ❌ Avant dans <{{comp}} /> (recrée la référence de fonction à chaque rendu) :","afterUseCallback":"// ✅ Après (référence de rappel mémorisée stable) :","beforeCreateSelector":"// ❌ Avant dans <{{comp}} /> (renvoie une nouvelle référence d'objet à chaque rendu) :","afterCreateSelector":"// ✅ Après (shallowEqual empêche le nouveau rendu à moins que les valeurs ne changent) :","beforeMemo":"// ❌ Avant (<{{comp}} />) :","afterMemo":"// ✅ Après (ignore le rendu si les accessoires sont légèrement identiques) :","flatListOptimization":"// Optimisation FlatList pour <{{comp}} />","customComparator":"// Fonction d'égalité personnalisée pour <{{comp}} />","debounceInput":"// Entrée anti-rebond à l'intérieur de <{{comp}} /> pour empêcher les rendus par frappe :","isolateState":"// Isoler l'état en évolution rapide de <{{comp}} /> vers la sous-arborescence enfant // ✅ Encapsuler la mise en page animée à l'intérieur du composant isolé :","beforeUseRef":"// ❌ Avant dans <{{comp}} /> (déclenche le nouveau rendu du composant entier lors d'un changement de valeur) :","afterUseRef":"// ✅ Après (préserve la référence mutable dans les rendus sans restituer) :","fixInteractionManagerTitle":"Différer la logique hors écran avec InteractionManager","fixInteractionManagerDesc":"Le traitement intensif des données lors des animations d'écran fait perdre des images. Reportez jusqu’à la fin de la transition.","beforeInteractionManager":"// ❌ Avant dans <{{comp}} /> (exécute des calculs lourds pendant que la transition s'anime) : useEffect(() => { loadHeavyData(); }, []);","afterInteractionManager":"// ✅ Après (attend que la transition se termine en douceur) : useEffect(() => { const task = InteractionManager.runAfterInteractions(() => { loadHeavyData(); }); return () => task.cancel(); }, []);","fixFlatListWindowingTitle":"Ajuster les propriétés de fenêtrage FlatList","fixFlatListWindowingDesc":"Configurez maxToRenderPerBatch et windowSize pour minimiser les allocations de vues virtualisées hors écran.","beforeFlatListWindowing":"// Optimisation du fenêtrage FlatList pour <{{comp}} /> : <FlatList data={items} maxToRenderPerBatch={10} windowSize={5} initialNumToRender={8} removeClippedSubviews={true} />","fixImageCachingTitle":"Optimiser la mise en cache et la réduction d'image des images","fixImageCachingDesc":"Utilisez les en-têtes de priorité ou la réduction d'échelle resizeMode pour éviter les allocations massives de bitmap dans le tas Hermes.","beforeImageCaching":"// Optimisation de l'image pour <{{comp}} /> : <Image source={{ uri : imageUrl, cache : 'force-cache' }} resizeMode=\"cover\" fadeDuration={100} />","fixContextSplittingTitle":"Diviser le contexte monolithique en fournisseurs granulaires","fixContextSplittingDesc":"Les composants s'abonnant à un contexte étendu sont restitués même lorsque les propriétés d'état inutilisées changent.","beforeContextSplitting":"// ❌ Avant (<{{comp}} /> consomme tout AppContext) : const { user, cart, theme } = useAppContext();","afterContextSplitting":"// ✅ Après (s'abonner au contexte de tranche dédié) : const theme = useThemeContext();","fixInlineStylesHoistTitle":"Lever les styles statiques avec StyleSheet.create","fixInlineStylesHoistDesc":"Les objets de style en ligne allouent de nouvelles références de mémoire à chaque passe de rendu, ce qui entraîne une surcharge de réconciliation Yoga.","beforeInlineStyles":"// ❌ Avant (<{{comp}} /> alloue un objet en ligne à chaque image) : <View style={{ flex : 1, padding : 16, backgroundColor : '#ffffff' }} />","afterInlineStyles":"// ✅ Après (référence StyleSheet hissée) : const styles = StyleSheet.create({ containers: { flex: 1, padding: 16, backgroundColor: '#ffffff' } }); <View style={styles.container} />","transitionEventLabel":"Transition d'écran : {{screen}}","transitionEventDetail":"Transition terminée en {{duration}}ms (TTI : {{tti}}ms).","transitionEventAdvice":"Interaction terminée dans le budget cible de 60 FPS.","heavyTaskEventLabel":"Tâche synchrone lourde : {{taskName}}","heavyTaskEventDetail":"Thread JS bloqué pendant {{duration}}ms lors de l'exécution de la tâche.","heavyTaskEventAdvice":"Envisagez de décharger vers Web Worker, InteractionManager ou de regrouper par lots.","asyncOpEventLabel":"Opération asynchrone lente : {{opName}}","asyncOpEventDetail":"La tâche asynchrone a mis {{duration}} ms à être résolue.","renderLoopWarningLabel":"Pic de rendu rapide dans <{{comp}} />","renderLoopWarningDetail":"Le composant a été restitué {{count}} fois en 500 ms. Boucle infinie potentielle ou dépendances instables.","renderLoopWarningAdvice":"Vérifiez les tableaux de dépendances useEffect / useCallback pour les références d'objets ou de fonctions instables.","event1Label":"Pic du fil principal pendant la navigation","event1Detail":"La transition d'écran a déclenché une réconciliation importante de la disposition et des montages simultanés de composants.","event1Advice":"Différez les hooks hors écran non critiques avec InteractionManager.runAfterInteractions pour préserver 60 FPS.","event2Label":"Passe de re-rendu de la virtualisation FlatList","event2Detail":"FlatList a rendu 25 éléments simultanément lors d'un changement d'orientation sans composant de ligne mémorisé.","event2Advice":"Implémentez getItemLayout et React.memo(LogCard) pour ignorer les passes de comparaison redondantes.","event3Label":"Transition coulissante modale native","event3Detail":"La transformation animée du pilote natif accélérée par le matériel fonctionne correctement à 60 FPS soutenus.","event3Advice":"L'utilisation de nativeDriver: true empêche avec succès le blocage des threads JS pendant les animations.","event4Label":"Collecte des déchets générationnelle Hermès","event4Detail":"Un cycle GC générationnel mineur a récupéré des objets de tas éphémères de 4,2 Mo avec une pause de thread inférieure à la milliseconde.","event4Advice":"Le garbage collector générationnel Hermes fonctionne dans des limites optimales inférieures à 5 ms.","gcCycleLabel":"Cycle de collecte manuelle des déchets","gcCycleDetail":"Récupération de ~{{amount}} Mo d'objets de tas non référencés et de pépinière de mémoire compactée.","gcCycleAdvice":"Utilisation du tas optimisée. Crèche générationnelle libérée.","liveFpsDropLabel":"Baisse de la fréquence d'images en direct ({{fps}} FPS)","liveFpsDropDetail":"Durée de l'image du thread principal étendue à {{duration}} ms lors de la mise à jour de la vue.","liveFpsDropAdvice":"Exécution lourde de JavaScript lors de la présentation d'affichage retardée du passage d'image.","event5Label":"Désérialisation de charges utiles JSON volumineuses","event5Detail":"Frais généraux d'analyse de réponse API de 50 éléments dans la carte réseau (chaîne brute JSON de 185 Ko).","event5Advice":"Envisagez de paginer les charges utiles de l'API ou de diffuser les réponses en continu si la taille de la charge utile dépasse 250 Ko.","event6Label":"Décodage et rastérisation d'image Bitmap","event6Detail":"Décodage raster Retina pour banner_dark.png (allocation de tampon raster 1200 × 630px).","event6Advice":"Réduisez les dimensions des actifs ou convertissez-les en WebP pour réduire la latence de décodage d'environ 65 %.","event7Label":"Invocation JSI du TurboModule natif","event7Detail":"Transaction de préférences AsyncStorage / MMKV lue sur 32 clés de configuration.","event7Advice":"Les liaisons directes du turbomodule C++ JSI contournent complètement la surcharge de sérialisation du pont JSON hérité.","event8Label":"Différence d'arborescence d'état d'action Redux","event8Detail":"La passe de répartition Redux a évalué 6 tranches de réduction et émis une notification d'état en 4,8 ms.","event8Advice":"Immuabilité de l’arbre d’état préservée. Les sélecteurs mémorisés ont empêché les rendus de composants redondants.","event9Label":"Latence des événements tactiles pour le rendu","event9Detail":"Le répondeur gestuel a envoyé un événement Tap au bouton TabBar avec une réponse immédiate à 60 FPS.","event9Advice":"La latence du répondeur tactile se situe bien dans les limites du budget de trame standard de 16,67 ms.","event10Label":"Passe de mise en page C++ Yoga Flexbox","event10Detail":"Le recalcul de la disposition des cartes multi-onglets de l'interface utilisateur de l'inspecteur et les métriques de police sont transmises dans le moteur C++ Yoga.","event10Advice":"Les contraintes de mise en page Flexbox sont mises en cache et calculées efficacement sans aucune pénalité de redistribution."},"bundle":{"mediaAuditorSuffix":"KB.","heroTitle":"Architecture des offres groupées et des actifs","heroSubtitle":"Répartition de la taille en temps réel pour tous les actifs, codes et dépendances","heroSubtitleLive":"Analyse en direct de {{scriptUrl}}","liveAnalysisUnavailable":"Analyse groupée en direct indisponible","liveAnalysisUnavailableSub":"Impossible d'atteindre le serveur de développement Metro, les valeurs sont donc des estimations. Assurez-vous que l'application fonctionne en développement via `npxreact-native start` et que l'inspecteur peut atteindre votre port Metro (8081, 8082, ...).","bundleOverviewJson":"Présentation du bundle JSON","devBundleSize":"TAILLE DU PACK DE DÉVELOPPEMENT","devBundleHint":"{{kb}} Ko • {{modules}} modules","trackedFilesHint":"{{count}} Fichiers suivis","imagesMedia":"IMAGES ET MÉDIAS","pctOfTrackedAssets":"{{pct}}% des actifs suivis","tsJsSource":"SOURCES TS/JS","jsEngine":"MOTEUR JS","bytecodeAot":"Bytecode AOT","standard":"Norme","splitUpTitle":"Séparation du bundle de développement","splitUpSub":"Ensemble {{mb}} Mo JS mesuré • {{files}} fichiers • {{packages}} packages","splitUpJson":"JSON fractionné","splitAppSource":"Code source de l'application","splitNodeModules":"Dépendances node_modules","splitAssetsMedia":"Actifs et médias","splitMetroOverhead":"Frais généraux de développement de Metro","splitSize":"{{kb}} Ko • {{mb}} Mo","productionFootprint":"EMPREINTE DE PRODUCTION","productionValue":"iOS {{ios}} Mo • Android {{android}} Mo","productionDownload":"Téléchargement : iOS ~{{ios}} Mo • AAB ~{{aab}} Mo • APK ~{{apk}} Mo","treemapTitle":"Treemap du rapport entre les actifs et les types de fichiers","treemapSub":"Total ~{{mb}} Mo","treemapJson":"Treemap de ratio JSON","legendImages":"Images :","legendTs":"TS/TSX :","legendJs":"Bibliothèques JS :","legendFonts":"Polices :","legendJson":"JSON :","categoryBreakdown":"Répartition des catégories","categoriesJson":"Répartition des catégories JSON","catImagesTitle":"Images et ressources multimédias","catImagesDesc":"Actifs PNG, WebP, SVG et JPG regroupés","catJsTitle":"Modules de nœuds compilés et JS","catJsDesc":"Dépendances tierces et ponts natifs","catFontsTitle":"Polices personnalisées et glyphes vectoriels","catFontsDesc":"Éléments de police dans le lot","catTsTitle":"Composants TypeScript et JSX","catTsDesc":"Composants d'écran d'application, hooks et logique métier","catJsonTitle":"Données JSON et localisations","catJsonDesc":"Dictionnaires de traduction i18n et configurations statiques","totalBundleAssets":"TOTAL DES DOSSIERS DE PROJETS HÔTES","totalBundleValue":"{{kb}} Ko (~{{mb}} Mo)","totalFormula":"Somme des fichiers source de l'hôte : {{images}} Ko + {{js}} Ko + {{fonts}} Ko + {{ts}} Ko + {{json}} Ko = {{total}} Ko ({{count}} éléments)","prodIosApp":"Application iOS (.ipa)","prodAndroidAab":"Android AAB (.aab)","prodAndroidApk":"APK universel (.apk)","prodHeroTitleIos":"Empreinte binaire de production iOS","prodHeroTitleAab":"Offre groupée d'applications Google Play (.aab)","prodHeroTitleApk":"APK autonome universel (.apk)","prodHeroSubIos":"Estimations d’installation sur l’App Store et de téléchargement cellulaire en direct","prodHeroSubAab":"Architecture APK fractionnée de livraison dynamique optimisée par appareil","prodHeroSubApk":"Archive d'installation universelle multi-ABI pour le chargement latéral et la distribution directe","prodInstallSize":"TAILLE D'INSTALLATION","prodInstallHint":"Empreinte non compressée sur l'appareil","prodDownloadSize":"TAILLE DU TÉLÉCHARGEMENT","prodDownloadHint":"Stocker la charge utile de transfert réseau","prodCompression":"COMPRESSION","prodCompressionHint":"Ratio de bytecode et d'actifs","prodFormatArch":"ARCHITECTURE DES FORMATS","prodFormatHintIos":"Exécution Apple ARM64","prodFormatHintAab":"Diffusion dynamique sur Google Play","prodFormatHintApk":"Pack universel à chargement latéral","prodArchTitle":"Architecture des composants binaires","prodArchSub":"Bibliothèques natives compilées, bytecodes d'exécution, ressources et blocs de signature","prodTotalIos":"BINAIRE TOTAL DE L'APPLICATION IOS","prodTotalAab":"PACK TOTAL ANDROID AAB","prodTotalApk":"TOTAL UNIVERSEL APK","prodTotalFormula":"À partir de {{devKb}} Ko (~{{devMb}} Mo • {{count}} actifs totaux) ensemble de sources de développement → {{installMb}} Mo binaire natif optimisé ({{pct}} % de compression de bytecode/asset).","tabOverview":"Aperçu","tabProduction":"Production ({{count}})","tabFiles":"Fichiers ({{count}})","tabPackages":"Forfaits ({{count}})","tabMedia":"Médias ({{count}})","tabOptimizer":"Optimiseur","analyzingTitle":"Analyse du bundle d'applications hôtes de Metro…","analyzingHint":"Récupération du bundle et extraction de vrais modules","searchFilesPlaceholder":"Recherche par nom de fichier (.png, .tsx, .ttf, chemin)...","filteredFilesJson":"Fichiers filtrés JSON","catAll":"Tous les fichiers","catUnused":"Non consommé (mort)","catConsumed":"En cours d'utilisation/actif","catImages":"Images et médias","catTypescript":"TypeScript / TSX","catJavascript":"Modules JS et nœuds","catFonts":"Polices et glyphes","catJson":"JSON et données","treeView":"Vue arborescente","flatList":"Liste plate","expand":"Développer","collapse":"Réduire","showingFilesOf":"Affichage de {{shown}} fichiers sur {{total}}","filesOf":"{{count}} sur {{total}} fichiers","notConsumed":"Non consommé","consumed":"Consommé","copyFileInfo":"Copier les informations {{name}}","fileDetailsJson":"Détails du fichier JSON","file":"fichier","files":"fichiers","fileSizeKb":"{{size}} Ko","fileSizeMb":"{{size}} Mo","mbValue":"~{{size}} Mo","kbMbValue":"{{kb}} Ko ({{mb}} Mo)","legendValue":"{{kb}} Ko ({{pct}}%)","mediaSavings":"{{size}} Ko","searchPackagesPlaceholder":"Package de recherche (react-native, axios, navigation)...","dependenciesJson":"Dépendances JSON","showingDependencies":"Affichage des dépendances {{count}}","versionPrefix":"v{{version}}","bundled":"groupé","deprecated":"DÉCONSEILLÉ","updateAvailable":"Mise à jour : v{{version}}","upToDate":"À jour","bundledBadge":"Regroupé","packageDetailsJson":"Détails du package JSON","direct":"Direct","transitive":"Transitif","minified":"~{{size}} Ko réduits","npmLink":"npm ↗","dependenciesCount":"{{count}} Dépendances","mediaAuditorTitle":"Auditeur de compression multimédia","mediaAssetsJson":"Actifs multimédias JSON","mediaAuditorPrefix":"Les images et les polices constituent","mediaAuditorMid":"du total des actifs (~{{kb}} Ko). La conversion de fichiers PNG en WebP et en sous-ensembles de polices peut réduire la taille jusqu'à","mediaAssetsList":"Éléments multimédias et polices ({{count}} éléments)","mediaItemJson":"Élément multimédia JSON","mediaAndFonts":"{{count}} Médias et polices","optimizerTitle":"Liste de contrôle d'optimisation du bundle React Native","optimizationChecklist":"Liste de contrôle d'optimisation","optTip1Title":"Convertir des PNG lourds en WebP/SVG","optTip1Desc":"Les images représentent plus de 40 % de la taille finale du téléchargement de l’application. La conversion de PNG raster 2x/3x en WebP permet d'économiser 60 à 70 % de taille sans perte de fidélité visible.","optTip2Title":"Activer le moteur de bytecode Hermes","optTip2DescActive":"Hermès est actif ! JavaScript est compilé en bytecode optimisé à l'avance.","optTip2DescInactive":"Hermès est handicapé. Activez Hermes dans la configuration de votre application pour une charge utile réduite d'environ 40 % et un démarrage TTI instantané.","optTip3Title":"Sous-ensemble de polices et élagage de poids","optTip3Desc":"Incluez uniquement les épaisseurs de police que vous utilisez activement (par exemple, Regular et Bold). Supprimez les plages de glyphes inutilisées pour économiser plus de 100 Ko par fichier de police.","optTip4Title":"Importations de chemins sélectifs (Tree-shaking)","optTip4Desc":"Importez à partir de sous-chemins spécifiques (par exemple lodash/get ou des jeux d'icônes vectorielles spécifiques) au lieu d'importer de gros packages monolithiques.","optTip5Title":"Chargement paresseux de l'écran","optTip5Desc":"Chargement paresseux d'écrans secondaires et de feuilles modales lourdes à l'aide d'importations dynamiques et d'InteractionManager pour réduire l'évaluation initiale du bundle.","highImpact":"Fort impact","mediumImpact":"Impact moyen","bestPractice":"Meilleure pratique","actionRequired":"Action requise","active":"Actif","tipDetails":"Détails du pourboire","iosComp1Name":"Frameworks et modules dynamiques","iosComp1Desc":"Frameworks de pods natifs React, Hermes et {{count}}.","iosComp1Advice":"Assurez la suppression du code mort (STRIP_INSTALLED_PRODUCT = YES) en mode Release.","iosComp2Name":"Exécutable Mach-O (ARM64)","iosComp2Desc":"L'application hôte a compilé des ponts natifs Swift/Objective-C et C++.","iosComp2Advice":"Activez le LTO monolithique (Link-Time Optimization) dans le schéma Xcode.","iosComp3Name":"Catalogue d'actifs (Assets.car)","iosComp3Desc":"AppIcons, écrans de démarrage, glyphes vectoriels et polices groupées.","iosComp3Advice":"Compilez les images dans le catalogue d'actifs Xcode pour une réduction automatique des applications.","iosComp4Name":"Bytecode Hermès (main.jsbundle)","iosComp4Desc":"L'application hôte JavaScript a compilé AOT dans le bytecode Hermes (fichiers {{count}}).","iosComp4Advice":"Le bytecode AOT se charge avec une latence de compilation de 0 ms au lancement de l'appareil.","iosComp5Name":"Métadonnées et signatures de code","iosComp5Desc":"_CodeSignature, Info.plist et bloc de droits.","iosComp5Advice":"Signature de code Apple standard et signature de provisionnement.","andComp1Name":"Bibliothèques C++ natives (.so)","andComp1Desc":"Adaptateurs natifs libhermes.so, libfbjni.so et {{count}} C++.","andComp1Advice":"Déployez avec Android App Bundle (.aab) pour fournir des APK divisés par ABI.","andComp2Name":"DEX compilé (classes.dex)","andComp2Desc":"Compilation du runtime Java & Kotlin, des ponts AndroidX et React Native.","andComp2Advice":"Activez la réduction R8 / ProGuard (minifyEnabled true) dans build.gradle.","andComp3Name":"Ressources Android (res/)","andComp3Desc":"Drawables, XML vectoriels, densités mipmap, resources.arsc, polices.","andComp3Advice":"Utilisez WebP et VectorDrawables pour éviter la duplication d'actifs multi-densité.","andComp4Name":"Bytecode Hermès (Android)","andComp4Desc":"JavaScript de l'application hôte compilé dans le bytecode Hermes (fichiers {{count}}).","andComp4Advice":"Bytecode précompilé lors de la tâche de graduation assembleRelease.","andComp5Name":"Manifeste et signatures (META-INF)","andComp5Desc":"AndroidManifest.xml, certificats de signature, blocs du schéma de signature APK v2/v3/v4.","andComp5Advice":"Bloc de signature et de signature officiel de Google Play.","apkComp1Name":"Bibliothèques multi-ABI C++ (.so)","apkComp1Desc":"Bibliothèques partagées multi-architecture universelles (.so) regroupées pour un chargement latéral direct.","apkComp1Advice":"Utilisez Android App Bundle (.aab) pour Google Play afin de réduire la taille de l'installation de 60 %.","apkComp2Name":"Bytecode DEX compilé (classes.dex)","apkComp2Desc":"Runtime Java et Kotlin compilé, bibliothèques AndroidX et modules de pont natifs.","apkComp2Advice":"Activez la réduction R8 / ProGuard (minifyEnabled true) et ShrinkResources true.","apkComp3Name":"Ressources et actifs Android (res/)","apkComp3Desc":"Drawables, XML vectoriels, densités mipmap, resources.arsc, polices.","apkComp3Advice":"Utilisez WebP et VectorDrawables pour éviter la duplication d'actifs multi-densité.","apkComp4Name":"Pack de bytecode Hermes (Android)","apkComp4Desc":"JavaScript de l'application hôte compilé dans le bytecode Hermes (fichiers {{count}}).","apkComp4Advice":"Bytecode précompilé lors de la tâche de graduation assembleRelease.","apkComp5Name":"Manifeste et signatures (META-INF)","apkComp5Desc":"AndroidManifest.xml, certificats de signature, schéma de signature JAR et APK v2/v3/v4.","apkComp5Advice":"Chargement latéral d'entreprise et bloc de signature d'installation directe."},"errors":{"appTag":"APP","title":"Quelque chose s'est mal passé","message":"Une erreur inattendue s'est produite.","retry":"Réessayez","reset":"Réinitialiser","close":"Fermer","errorReport":"Rapport d'erreur","modalTitle":"L'inspecteur s'est écrasé","modalMessage":"L'inspecteur a rencontré une erreur inattendue. Vous pouvez le réinitialiser ci-dessous.","inlineTitle":"Erreur de l'inspecteur","inlineMessage":"Une erreur inattendue s'est produite dans l'inspecteur.","networkError":"La requête réseau a échoué","crashIntercepted":"CRASH INTERCEPTÉ","protected":"PROTÉGÉ","rootCauseTitle":"Diagnostic des causes profondes","rootCauseSubtitle":"L'inspecteur a détecté cette erreur d'exécution pour empêcher la fermeture de l'application","exactLocation":"EMPLACEMENT EXACT DE LA SOURCE","file":"Fichier :","lineCol":"Ligne / Col :","lineColVal":"Ligne {{line}}, Col {{col}}","function":"Fonction :","callStack":"CADRES DE PILE D'APPELS","framesCount":"{{count}} images","tryAgainRecover":"Réessayez / Récupérez","copyDiagnostics":"Copier les diagnostics","copy":"Copier"},"jsonViewer":{"pretty":"Structuré","raw":"Brut","table":"Tableau","emptyObject":"Objet vide","emptyPayload":"Charge utile vide","emptyTable":"Objet vide","fold":"Plier","expand":"Développer","min":"Min","indent":"Indenter","wrap":"Retour ligne","copied":"Copié !","copy":"Copier JSON","key":"Clé","value":"Valeur","lines":"lignes","line":"ligne"},"crash":{"filterAll":"All","frameApp":"APP","frameLib":"LIB","jsc":"JSC","filterPlatformIos":"iOS","title":"Accident","searchPlaceholder":"Erreur de recherche, message, pile...","searchDetailPlaceholder":"Rechercher dans trace ou JSON...","statCrashes":"Crashes","statFatal":"Mortel","statJsErrors":"Erreurs JS","statPromises":"Promesses","statRender":"Rendu","statNative":"Natif","filterFatal":"Mortel","filterJsError":"Erreur JS","filterPromise":"Promesse","filterRender":"Rendu","filterNative":"Natif","fatalBadge":"MORTEL","handledBadge":"MANIPULÉ","fatalCrash":"ACCIDENT MORTEL","handledException":"EXCEPTION GÉRÉE","unknownException":"Exception inconnue","report":"Rapport","inspect":"Inspecter","copyReport":"Copier le rapport","copied":"Copié","clearTitle":"Effacer l'historique des crashs","clearMessage":"Êtes-vous sûr de vouloir effacer tous les enregistrements de crash interceptés ?","clearCancel":"Annuler","clearConfirm":"Tout effacer","emptyTitle":"Zéro crash détecté","emptySubtitle":"La protection anti-collision globale est active. Toutes les exceptions natives et JavaScript sont interceptées et protégées.","emptySearchSubtitle":"Aucune entrée de crash ne correspond à votre requête de recherche.","tabStack":"Pile ({{count}})","tabDiagnostics":"Diagnostic","tabTrail":"Sentier ({{count}})","tabRawJson":"JSON brut","appFrames":"Cadres d'application ({{count}})","allFrames":"Toutes les images ({{count}})","anonymous":"<anonyme>","noStackTrace":"Aucune trace de pile capturée pour cet événement.","deviceEnvironment":"Appareil et environnement","platform":"Plateforme","osVersion":"Version du système d'exploitation","reactNative":"Réagir natif","jsEngine":"Moteur JS","hermesEngine":"Moteur Hermès","architecture":"Architecture","fabricNewArch":"Tissu (nouvelle arche)","paperLegacy":"Papier (ancien)","appState":"État de l'application","jsHeapMemory":"Mémoire de tas JS","usedHeap":"Tas utilisé","totalHeap":"Tas total","noBreadcrumbs":"Aucun événement de fil d'Ariane enregistré avant ce crash.","simNativeMessage":"Exception fatale native simulée","simPromiseMessage":"Rejet de promesse non géré simulé","simRenderMessage":"Erreur de rendu du composant React simulé","simJsMessage":"Exception JavaScript simulée","reportTitle":"RAPPORT DE DIAGNOSTIC D'ACCIDENT","reportErrorName":"Nom de l'erreur :","reportMessage":"Message :","reportType":"Tapez :","reportFatalYes":"OUI (Fatal)","reportFatalNo":"NON (Attrapé/Géré)","reportFatal":"Mortel :","reportTimestamp":"Horodatage :","reportUptime":"Temps de disponibilité de l'application :","reportUptimeValue":"{{seconds}} secondes","reportPlatform":"Plateforme :","reportReactNative":"Réagissez natif :","reportHermes":"Hermès :","reportEnabled":"Activé","reportDisabled":"Désactivé","reportArchitecture":"Architecture :","reportFabricNew":"Tissu (Nouveau)","reportPaperLegacy":"Papier (ancien)","reportScreenSize":"Taille de l'écran :","reportAppState":"État de l'application :","reportJsMemory":"Mémoire JS :","reportStackTrace":"TRAÇAGE DE LA PILE :","reportNoStackTrace":"Aucune trace de pile disponible","reportComponentHierarchy":"HIÉRARCHIE DES COMPOSANTS :","reportRecentBreadcrumbs":"Fil d'Ariane récent :","mdReportTitle":"🚨 Rapport de crash : {{name}}","mdStackTrace":"📦 Trace de pile","mdComponentHierarchy":"🌲 Hiérarchie des composants","mdRecentBreadcrumbs":"👣 Fil d'Ariane récent","mdSeverityFatal":"MORTEL","mdSeverityHandled":"MANIPULÉ","breadcrumbNavigation":"Navigation de \"{{from}}\" à \"{{to}}\"","breadcrumbAction":"Action : {{actionType}}","unknown":"Inconnu","runtimeException":"Exception d'exécution","logFatalCrash":"Accident mortel","logUnhandledError":"Erreur non gérée","errorNameFatal":"Erreur fatale","errorNameUnhandled":"Exception non gérée","nativeCrashTitle":"Crash natif","nativeUncaughtException":"Exception native non capturée","nativeException":"Exception native","unhandledPromiseRejection":"Rejet de promesse non géré","filterTitle":"Filtres de crash","filterSubtitle":"Diagnostics et rapports","filterReset":"Tout réinitialiser","filterTypeSection":"TYPE D'ACCIDENT","filterTypeAll":"Tous types","filterTimeSection":"HORIZON TEMPS","filterTimeAll":"Tout le temps","filterTime15m":"15 dernières minutes","filterTime1h":"Dernière 1 heure","filterTime24h":"Dernières 24 heures","filterTime7d":"7 derniers jours","filterPlatformSection":"PLATEFORME","filterPlatformAll":"Toutes les plateformes","filterPlatformAndroid":"Android","filterEngineSection":"MOTEUR JS","filterEngineAll":"Tous les moteurs","filterEngineHermes":"Hermès","filterSortSection":"ORDRE DE TRI","filterSortNewest":"Le plus récent en premier (par défaut)","filterSortOldest":"Le plus âgé en premier","filterDiscard":"Jeter","filterApply":"Appliquer ({{count}} plantages)","frameCopy":"Copier","frameCopied":"Copié","componentHierarchy":"Hiérarchie des composants"},"socket":{"showingConnections":"Affichage de {{count}} connexions","showingFilteredConnections":"Affichage de {{filtered}} sur {{total}} connexions","deletedCount":"{{count}} journaux WebSocket supprimés","copiedUrls":"{{count}} URLs copiées","webSocketTraffic":"Trafic WebSocket ({{count}} connexions)","title":"WebSocket","messages":"Messages","overview":"Aperçu","params":"Paramètres","rawAndCode":"Brut et code","totalFrames":"CADRES TOTALS","sentRecv":"ENVOYÉ / RECV","dataTransferred":"DONNÉES TRANSFÉRÉES","searchFramesPlaceholder":"Rechercher des charges utiles de cadre ou des noms d'événements...","sent":"Envoyé","recv":"Réception","emptyFrames":"Aucune image capturée pour cette connexion","searchSocketsPlaceholder":"Rechercher des URL ou des messages WebSocket...","noSockets":"Aucune connexion WebSocket","noSocketsDesc":"Les connexions WebSocket, Socket.IO et WSS capturées apparaîtront ici en temps réel.","noMatching":"Aucun WebSocket correspondant","adjustSearchFilter":"Essayez d'ajuster votre requête de recherche ou de filtrer les puces.","simulateTraffic":"Simuler le trafic WebSocket de démonstration","clearTitle":"Effacer tous les journaux WebSocket","clearMessage":"Êtes-vous sûr de vouloir supprimer toutes les sessions WebSocket enregistrées ?","cleared":"Tous les journaux WebSocket effacés","deleteSelectedTitle":"Supprimer les WebSockets sélectionnés","deleteSelectedMsg":"Voulez-vous vraiment supprimer les {{count}} journaux WebSocket sélectionnés ?","filterTitle":"Filtrer les connexions WebSocket"},"push":{"clearTitle":"Effacer l'historique push","clearMessage":"Êtes-vous sûr de vouloir effacer tous les enregistrements de notifications push ?","cleared":"Historique des notifications push effacé","foreground":"Premier plan","background":"Arrière-plan","quit":"Fermé","title":"Notifications poussées","preview":"Aperçu","payload":"Charge utile personnalisée","deliveryMetadata":"Métadonnées de livraison et de message","rawPayload":"Charge utile brute","link":"Lien","appNotification":"Notification d'application","now":"maintenant","domainFields":"Champs spécifiques au domaine","searchPlaceholder":"Rechercher des notifications push...","noNotifications":"Aucune notification push","noNotificationsDesc":"Les événements Firebase FCM, Apple APN, OneSignal et push personnalisés capturés apparaîtront ici en temps réel.","filterTitle":"Filtrer les notifications push"},"about":{"title":"À propos et spécifications","subtitle":"Infos du package, spécifications d'exécution et diagnostic","heroTitle":"Inspecteur intégré","heroDescription":"L'outil tout-en-un de débogage, journalisation et QA sur l'appareil pour les applications React Native et Expo.","upToDate":"À jour","versionAvailable":"v{{version}} Disponible","copyUpgradeCommand":"Copier la commande de mise à jour (v{{version}})","copiedUpgradeCommand":"Commande npm copiée !","appInformation":"INFORMATIONS DE L'APP","appName":"Nom de l'app","packageIdentifier":"Identifiant du package","appVersion":"Version de l'app","environment":"Environnement","developmentDebug":"Développement (Débogage)","platform":"Plateforme","features":"CE QUE FAIT L'INSPECTEUR","featureNetwork":"Moniteur de trafic réseau","featureNetworkDesc":"Inspectez les requêtes HTTP et HTTPS, les réponses, les en-têtes et la latence du serveur.","featureConsole":"Journal de console","featureConsoleDesc":"Consultez les journaux de console, avertissements et erreurs en temps réel.","featureAnalytics":"Télémétrie analytique","featureAnalyticsDesc":"Suivez les événements Firebase et analytiques personnalisés en direct.","featureRedux":"État et actions Redux","featureReduxDesc":"Inspectez les actions envoyées, les charges utiles et les différences de l'arbre d'état.","featureCapture":"Capture d'écran et vidéo","featureCaptureDesc":"Prenez des captures d'écran et enregistrez des sessions de test à partager.","featureCrash":"Détection des plantages et diagnostic","featureCrashDesc":"Protège contre les plantages natifs et fournit les métriques de santé de l'appareil.","githubSub":"Étoile et code source","npmRegistry":"Registre NPM","npmRegistrySub":"Mises à jour du package","documentationSub":"Guide d'intégration","reportIssue":"Signaler un problème","reportIssueSub":"Aide et support","releaseNotes":"Notes de version","releaseNotesSub":"Nouveautés","copyInstall":"Copier l'installation","copyInstallSub":"commande npm / yarn","copiedInstallCommand":"Commande d'installation copiée !","footerLicense":"React Native In-App Inspector · Licence MIT","footerTagline":"Outil de débogage sans configuration","productionRelease":"Production (sortie)","appleIos":"AppleiOS","googleAndroid":"Google-Android","github":"GitHub","documentation":"Documentation"},"codeSnippet":{"copy":"Copier","copied":"Copié!","matchCount":"{{count}} correspondance","matchCount_plural":"{{count}} correspondances","noMatches":"Aucune correspondance","searchPlaceholder":"Rechercher...","prevMatch":"Match précédent","nextMatch":"Prochain match","clearSearch":"Effacer la recherche"},"diffViewer":{"added":"ajouté","removed":"supprimé","changed":"changé","noDiff":"Aucune différence","emptyTitle":"Aucune différence trouvée","emptySubtitle":"Les deux charges utiles sont identiques."},"logCard":{"seeMore":"Afficher plus","seeLess":"Afficher moins","copy":"Copier","copied":"Copié!"},"emptyState":{"title":"Rien ici encore","subtitle":"Les données apparaîtront ici lorsque vous utiliserez l'application.","reload":"Recharger"},"errorBoundary":{"title":"Quelque chose s'est mal passé","message":"Une erreur inattendue s'est produite.","retry":"Réessayez","reset":"Réinitialiser","close":"Fermer"},"mediaGallery":{"all":"Tous ({{count}})","photos":"Photos","videos":"Vidéos","gifs":"GIF","purge":"Purger ({{size}})","purgeTitle":"Purger tous les médias","purgeMessage":"Cela supprimera définitivement toutes les {{count}} captures d'écran, vidéos et GIF capturés ({{size}}). Continuer?","noMediaTitle":"Aucun média capturé","noMediaDesc":"Utilisez le bouton Enregistrer une photo ou une vidéo dans la barre d'outils pour capturer des captures d'écran, des enregistrements d'écran ou des GIF de l'ensemble de l'application.","deleted":"Élément multimédia supprimé","allPurged":"Tous les médias capturés purgés","converting":"Conversion...","convertToGif":"Convertir en GIF","playVideo":"Lire la vidéo","playError":"Impossible de lire la vidéo","convertedSuccess":"Converti en GIF animé avec succès !","convertFailed":"Échec de la conversion en GIF","share":"Partager","copyUri":"Copier l'URI","uriCopied":"URI du fichier copié dans le presse-papiers","delete":"Supprimer","deleteSelected":"Supprimer ({{count}})","deleteSelectedTitle":"Supprimer la sélection","deleteSelectedMessage":"Voulez-vous vraiment supprimer {{count}} éléments multimédias sélectionnés ?","deletedCount":"{{count}} éléments multimédias supprimés","deleteTitle":"Supprimer le média","deleteMessage":"Voulez-vous vraiment supprimer {{filename}} ?","shareUnavailable":"Partage non disponible sur cet appareil","showingResults":"Affichage de {{count}} résultats","showingFilteredResults":"Affichage de {{count}} résultats sur {{total}}","selectedOfResults":"{{selected}} résultats sélectionnés sur {{total}}","minimize":"Réduire","expand":"Développer le plein écran","collapse":"Quitter le plein écran","speed":"Vitesse","loop":"Boucle","pause":"Pause","play":"Jouer"},"debugging":{"title":"Débogage et outils","buildSuccess":"Création de l'APK générée avec succès !","buildFailed":"Échec de la construction : {{error}}","buildCancelled":"Construction annulée par l'utilisateur"}}