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":"取消","clear":"清除","clearAll":"全部清除","close":"关闭","loading":"加载中...","success":"成功","pending":"进行中","failed":"失败","copy":"复制","copied":"已复制!","copyJson":"复制 JSON","collapseAll":"全部折叠","expandAll":"全部展开","viewOnNpm":"在 NPM 查看","later":"稍后","source":"来源","minimize":"最小化","tapToExpand":"点击展开","open":"打开","openInBrowser":"在浏览器中打开","openInBrowserPrompt":"确定要在外部浏览器中打开此 URL 吗?","add":"添加"},"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":"网络请求","logs":"日志","analytics":"数据埋点","redux":"Redux","crash":"崩溃保护","device":"设备信息","storage":"本地存储","media":"屏幕录制"},"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":"搜索状态或动作...","emptyTitle":"未连接 Redux Store","emptySubtitle":"连接你的 Store 以实时审查状态树和派发动作。","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":"活跃切片","totalState":"总状态大小","lastActionHeader":"最新动作","initialState":"初始状态 (暂无动作派发)","noStoreConnected":"未连接 Redux Store","connectStoreTip":"请在应用初始化时调用 connectReduxStore(store) 或添加 inspectorReduxMiddleware。"},"device":{"title":"设备信息","searchPlaceholder":"搜索硬件规格、UDID、IP、屏幕...","subTabs":{"overview":"概览","hardware":"硬件配置","network":"网络与 IP","display":"显示屏幕","runtime":"运行时环境","security":"安全与标识"},"sections":{"overview":"设备概览","hardware":"硬件与系统规格","network":"网络与连接状态","display":"屏幕与显示几何","runtime":"运行时与应用信息","security":"设备标识与安全"},"copied":"已复制 {{label}}","copiedJson":"已复制完整设备 JSON 报告!","copiedMarkdown":"Markdown 报告已复制到剪贴板!","live":"实时","ipAddress":"IP 地址","ramUsedTotal":"内存 (已用/总计)","uptime":"运行时长"},"storage":{"title":"本地存储","searchPlaceholder":"搜索键名、值、类型...","subTabs":{"asyncStorage":"AsyncStorage","mmkv":"MMKV"},"clearTitle":"清空存储驱动","clearMessage":"确定要删除 {{driver}} 中的所有键吗?此操作不可恢复。","clearConfirm":"全部清除","emptyTitle":"暂无存储记录","emptySubtitle":"当前驱动存储为空。","addKey":"添加键","add":"添加","editKey":"编辑键","createKey":"新建键","save":"保存","saveKey":"保存键","keyName":"键名","value":"值","valueContent":"数据内容","type":"类型","beautifyJson":"格式化 JSON","loading":"正在加载存储数据...","deleteKeyTitle":"删除键","deleteKeyMessage":"确定要删除键 \"{{key}}\" 吗?"},"footer":{"endOfList":"已到达列表末尾","loadMore":"加载更多 ({{count}})","showingOf":"正在显示 {{count}} / {{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":"树形视图","raw":"原始文本","table":"表格视图","emptyObject":"空对象","emptyPayload":"载荷为空","emptyTable":"空对象","fold":"折叠","expand":"展开","min":"压缩","indent":"缩进","wrap":"换行","copied":"已复制!","copy":"复制 JSON","key":"键","value":"值","lines":"行","line":"行"},"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":"取消","clear":"清除","clearAll":"全部清除","close":"关闭","loading":"加载中...","success":"成功","pending":"进行中","failed":"失败","copy":"复制","copied":"已复制!","copyJson":"复制 JSON","collapseAll":"全部折叠","expandAll":"全部展开","viewOnNpm":"在 NPM 查看","later":"稍后","source":"来源","minimize":"最小化","tapToExpand":"点击展开","open":"打开","openInBrowser":"在浏览器中打开","openInBrowserPrompt":"确定要在外部浏览器中打开此 URL 吗?","delete":"删除","reset":"重置","save":"保存","edit":"编辑","add":"添加","search":"搜索","filter":"筛选","sort":"排序","refresh":"刷新","retry":"重试","confirm":"确认","yes":"是","no":"否","ok":"确定","done":"完成","back":"返回","next":"下一步","show":"显示","hide":"隐藏","select":"选择","selectAll":"全选","deselectAll":"取消全选","noResults":"未找到结果","items":"项","of":"/","showing":"显示","active":"活跃","inactive":"不活跃","enabled":"已启用","disabled":"已禁用","live":"实时","connected":"已连接","disconnected":"未连接","version":"版本","update":"更新","unknown":"未知","share":"分享"},"header":{"rec":"REC","sourceFirebase":"FB","sourceManual":"MAN","aboutSpecs":"关于与规格","live":"实时","keys":"{{count}} 个键","frames":"{{count}} 个帧","updateAvailableTitle":"可用更新","updateAvailableMessage":"React-native-inapp-inspector v{{version}} 可在 NPM 上使用(已安装:v{{installed}})。","clearEverythingTitle":"清除一切","clearEverythingMessage":"这会清除所有选项卡 — API、日志、分析、Redux 时间线和崩溃历史记录。继续?","photo":"照片","record":"记录","clear":"清除","about":"关于","screenshotCaptured":"📸 截图并保存","screenshotFailed":"截图失败","screenshotError":"截图时出错","recordingStarted":"🔴视频录制开始","recordingSaved":"🎥 录音已保存({{duration}}s)","recordingError":"录音错误","recordingStartFailed":"无法开始录音","paramCount":"{{count}} 参数","paramCount_plural":"{{count}} 参数","firebase":"火力基地","manual":"手册","sliceBadge":"切片"},"tabs":{"apis":"网络请求","logs":"日志","analytics":"数据埋点","crash":"崩溃保护","device":"设备信息","storage":"本地存储","media":"屏幕录制","redux":"终极版","push":"推","socket":"WebSocket","debugging":"调试"},"settings":{"configureSubtitle":"配置模块参数","resetAlertTitle":"重置所有设置","resetAlertMessage":"这将恢复所有模块可见性和界面偏好设置为默认值。继续?","settingsReset":"设置已重置","settingsResetMessage":"所有设置已恢复为默认值。","pushHistoryCleared":"推送通知历史已清除","socketHistoryCleared":"WebSocket 历史已清除","mainTitle":"设置和模块","mainSubtitle":"管理模块和首选项","requiredBadge":"必填","defaultBadge":"默认值","notConnectedBadge":"未连接","notDetectedBadge":"未检测到","readOnlyBadge":"只读","coreBadge":"核心","activeBadge":"活跃","dormantBadge":"休眠状态","protectedBadge":"受保护","modulesAndTools":"模块和工具","uiPreferences":"用户界面与显示","ramLimits":"内存和限制","screenVideoCapture":"屏幕和视频捕捉","zeroOverheadTitle":"零背景开销","zeroOverheadDesc":"检查您想要激活的模块。禁用的模块在保存之前消耗 0% CPU 和内存。","unsavedPending":"● 未保存的选择待处理","allSynchronized":"所有模块同步","modulesActive":"{{active}} 个模块(共 {{total}} 个)处于活动状态","saveChanges":"保存更改","settingsSaved":"设置已保存","settingsSavedDesc":"活动模块配置已成功更新。","configure":"配置","appearanceTheme":"外观与主题","windowLayout":"窗口与布局","startupDefault":"启动和默认屏幕","logFiltersDeduplication":"日志过滤器和重复数据删除","resetSettings":"重置所有设置","resetSettingsDesc":"将自定义首选项恢复为默认值","reset":"重置","reduxNotConnectedTip":"Redux 存储未连接。调用connectReduxStore(store)或使用inspectorReduxMiddleware来启用。","analyticsNotConnectedTip":"分析未初始化。调用 setupAnalyticsLogger(analytics()) 启用。","tabVisibility":"选项卡可见性","tabVisibilityDescription":"选择检查器中显示的模块","settingsTitle":"设置","back":"返回","apis":{"title":"API设置","total":"总计:{{count}}","maxRequestLogs":"最大请求日志数","maxRequestLogsDescription":"内存中保存的网络请求缓冲区大小","clearNetworkLogs":"清除网络日志","clearNetworkLogsDescription":"已存储 {{count}} 个请求","networkLogsCleared":"网络日志已清除。","showStatusFilter":"状态过滤器","showStatusFilterDescription":"在 API 列表中显示状态芯片","showMethodFilter":"方法过滤器","showMethodFilterDescription":"在 API 列表中显示方法芯片","defaultTabDescription":"检查器打开的选项卡"},"logs":{"title":"日志设置","total":"总计:{{count}}","maxConsoleLogs":"最大控制台日志数","maxConsoleLogsDescription":"保留多少条控制台消息","logLevels":"日志严重性","logLevelsDescription":"选择要在日志中捕获的严重性","showInfo":"显示信息日志","showInfoDesc":"信息日志和调试打印","showWarn":"显示警告日志","showWarnDesc":"警告通知和弃用","showError":"显示错误日志","showErrorDesc":"运行时错误和异常","clearConsoleLogs":"清除控制台日志","clearConsoleLogsDescription":"已存储 {{count}} 日志","consoleLogsCleared":"控制台日志已清除。"},"analytics":{"title":"分析设置","total":"事件:{{count}}","maxAnalyticsEvents":"捕获的事件","maxAnalyticsEventsDescription":"{{count}} 分析事件存储在缓冲区中","clearAnalyticsEvents":"清除分析历史记录","clearAnalyticsEventsDescription":"擦除所有捕获的遥测事件","analyticsEventsCleared":"分析事件已清除。"},"redux":{"title":"终极版设置","reducers":"减速器:{{count}}","autoRefresh":"自动刷新商店","autoRefreshDescription":"在每次调度时捕获 Redux 存储状态树","defaultJsonExpandDepth":"默认 JSON 扩展深度","defaultJsonExpandDepthDescription":"Redux 状态树的初始深度自动扩展","clearReduxState":"清除 Redux 状态","clearReduxStateDescription":"在检查器中重置当前状态快照","clearReduxStateEmpty":"没有记录商店快照","reduxStateCleared":"Redux 状态快照已清除。","clearReduxTimeline":"清除 Redux 时间线","clearReduxTimelineDescription":"删除所有捕获的操作历史记录","reduxTimelineCleared":"Redux 操作历史记录已清除。"},"bundle":{"title":"捆绑设置","sourceBundler":"Metro 源捆绑器","sourceBundlerDesc":"解析实时模块树并计算二进制大小细分","clearCache":"清除捆绑包缓存","clearCacheDesc":"强制重新获取并解析 JS 包","cacheCleared":"捆绑分析缓存已清除。"},"performance":{"title":"性能设置","frameMeasurement":"实时帧测量","frameMeasurementDesc":"对 UI/JS 帧速率进行采样并检测浪费的重新渲染","clearEvents":"清晰的性能事件","clearEventsDesc":"重置记录的卡顿和 FPS 下降历史记录","eventsCleared":"性能事件已清除。"},"crash":{"title":"崩溃设置","maxCrashLogs":"最大崩溃日志","maxCrashLogsDesc":"历史上要保留多少事故记录","globalGuard":"全球防撞保护","globalGuardDesc":"直接拦截原生、JS、渲染错误","clearHistory":"清除崩溃历史记录","clearHistoryDesc":"{{count}} 已存储崩溃日志","historyCleared":"崩溃日志已清除。"},"media":{"title":"屏幕和视频捕捉","badge":"原生 H.264/GIF","desc":"配置屏幕截图格式、质量、视频 FPS、音频旁白、GIF 录制和存储","screenshotCardTitle":"屏幕截图格式和质量","screenshotCardDesc":"高分辨率全窗口快照配置","imageFormat":"图片格式","imageFormatDesc":"PNG(无损)、JPEG(压缩)或 WEBP","autoHide":"自动隐藏检查器覆盖","autoHideDesc":"从屏幕截图中排除检查器 UI","enabled":"启用","videoCardTitle":"视频和 GIF 录制","videoCardDesc":"H.264 MP4 录制和动画 GIF 导出","audioMode":"音频旁白模式","audioModeDesc":"静音、应用程序音频或语音旁白","frameRate":"帧率","frameRateDesc":"更高的 FPS 带来更流畅的录制","gifAutoOpt":"GIF 自动优化","gifAutoOptDesc":"转换 GitHub PR 和 Slack 的视频录制","purgeAll":"清除所有捕获的媒体","purgeAllDesc":"删除所有存储的屏幕截图、视频和 GIF","purgeCacheBtn":"清除缓存","purgeConfirmTitle":"清除介质存储","purgeConfirmMessage":"这将从本地缓存中删除所有捕获的媒体文件。继续?","purgedSuccess":"媒体存储已清除"},"general":{"darkMode":"深色模式主题","darkModeDescription":"切换时尚的深色美学或浅色对比","modalHeight":"检查窗口高度","modalHeightDescription":"模态屏幕覆盖率","modalAnimation":"过渡动画","modalAnimationDescription":"入场和退场演示风格","duplicateLogs":"显示重复日志","duplicateLogsDescription":"关闭:相同的重复条目折叠成 ×N 个徽章","defaultOpeningTab":"默认打开选项卡","defaultOpeningTabDesc":"点击启动器按钮时初始选项卡处于活动状态","activeConsoleLogLevels":"活动控制台日志级别","activeConsoleLogLevelsDesc":"选择要在日志中捕获的严重性","resetToDefaults":"重置为默认值","resetToDefaultsDescription":"恢复所有检查器设置","resetConfirmationTitle":"设置重置","resetConfirmationMessage":"所有设置已重置为默认值。","storageStatus":"持久存储","storageStatusEnabled":"设置存储:永久 ({{type}})","storageStatusEnabledDesc":"您的首选项和模块可见性在应用程序重新启动后仍然存在。","storageStatusDisabled":"设置存储:内存中(临时)","storageStatusDisabledDesc":"应用程序终止时重置首选项。将自定义存储传递给 <NetworkInspector storage={...} /> 以保留在 Android 上。","language":"语言","languageDescription":"选择界面显示语言","selectLanguage":"选择语言"},"memory":{"manualTitle":"手动内存清理","manualDescription":"修剪所有日志存储和空闲 RAM 中的旧条目","pruned":"从内存中删除了 {{count}} 项"},"simulator":{"salesforce":"模拟Salesforce营销云推送","fcm":"模拟 Firebase FCM 推送","apns":"模拟Apple APNs推送","deepLink":"模拟深度链接推送","chat":"模拟实时聊天 WebSocket 会话","crypto":"模拟币安加密股票流","socketio":"模拟 Socket.IO v4 会话","echo":"模拟WebSocket Echo测试","screenshotSaved":"截图并保存!"}},"network":{"urlHeader":"URL","jsonViewer":{"raw":"Raw","key":"Key","pretty":"漂亮","table":"表","emptyObject":"空对象","emptyTable":"空对象","value":"价值"},"showingRequests":"显示 {{count}} 个请求","showingFilteredRequests":"显示 {{filtered}} / {{total}} 个请求","status200":"200 成功","status201":"201 已创建","status204":"204 无内容","status304":"304 未修改","status400":"400 错误请求","status401":"401 未授权","status403":"403 禁止","status404":"404 未找到","status500":"500 错误","shareError":"分享错误","shareErrorMessage":"无法打开分享面板","title":"API","searchPlaceholder":"按 URL、状态或方法搜索...","emptyTitle":"尚未捕获任何 API 调用","emptySubtitle":"当您使用该应用程序时,网络请求将显示在此处。","reload":"重新加载","clearTitle":"清除网络日志","clearMessage":"您确定要清除所有捕获的网络日志吗?","detailTabs":{"metadata":"元数据","headers":"标头","request":"请求","response":"回应"},"requestTitle":"请求","responseTitle":"回应","searchRequest":"搜索请求...","searchResponse":"搜索回复...","searchHeaders":"搜索标题...","requestHeaders":"请求标头","responseHeaders":"响应头","diffTitle":"差异","noResponse":"无响应体","noRequest":"无请求正文","statusFailed":"失败","methodHeader":"方法","statusHeader":"状态","durationHeader":"持续时间","sizeHeader":"尺寸","triggeredAt":"触发于","contentType":"内容类型","sourcePage":"源页面","sourcePageUnknown":"来源不明","loadMore":"加载更多","groupByPage":"按页面分组","groupByDomain":"按域分组","groupByNone":"列表","domain":"域名","page":"页面","requests":"{{count}} 请求","requests_plural":"{{count}} 请求","noFilteredResults":"没有请求与当前过滤器匹配","scrollToTop":"滚动到顶部","copyCurl":"复制卷曲","copyFetch":"复制获取片段","emptyResponse":"空响应","bodyHidden":"{ 身体隐藏 }","queryParams":"查询参数","fullUrl":"完整网址","open":"打开","showMore":"显示更多","showLess":"显示较少","failedNetworkError":"失败(网络错误)","noMatchingHeaders":"没有匹配的标头","diffHidden":"{ 差异隐藏 }","noDiff":"与之前的 API 没有区别。","healthTitle":"网络健康与遥测","successRate":"成功率","avgLatency":"平均延迟","p95Latency":"P95 延迟","bandwidth":"带宽","fastest":"最快","slowest":"最慢","timingWaterfall":"时序瀑布和延迟","throughput":"吞吐量","performanceTier":"性能层","perf":{"fast":"快速(< 200 毫秒)","moderate":"中等(200-800 毫秒)","slow":"慢(> 800 毫秒)"}},"console":{"filterAll":"All","rawTraceView":"Raw","showingLogs":"显示 {{count}} 条日志","showingFilteredLogs":"显示 {{filtered}} / {{total}} 条日志","filteredBy":"按 {{filters}} 筛选({{filtered}} / {{total}} 条日志)","log":"日志","info":"信息","warning":"警告","error":"错误","debug":"调试","title":"日志","searchPlaceholder":"搜索日志...","emptyTitle":"尚无控制台日志","emptySubtitle":"您的应用程序的控制台输出将显示在此处。","analyticsBadge":"分析","userLogBadge":"用户日志","jsonTitle":"日志 JSON","messageTitle":"日志消息","search":"搜索日志...","searchJson":"搜索日志 JSON...","logMessage":"记录消息","consoleLog":"控制台日志","characters":"{{count}} 字符","duplicates":"×{{count}} 重复项","showMore":"显示更多","showLess":"显示较少","clearTitle":"清除日志","clearMessage":"您确定要清除所有控制台日志吗?","seeMore":"显示更多","noResults":"没有日志与当前过滤器匹配","filterInfo":"信息","filterWarn":"警告","filterError":"错误","filterUserLog":"用户日志","filterAnalytics":"分析","tabOutput":"输出","tabArgs":"参数 ({{count}})","tabStack":"堆栈跟踪","tabMetadata":"元数据","callStack":"调用堆栈({{count}} 帧)","errorStack":"错误异常堆栈({{count}} 帧)","callOriginStack":"调用源堆栈","errorThrownStack":"错误抛出堆栈","appCodeScope":"🎯 应用代码 ({{count}})","allFramesScope":"📜 所有帧 ({{count}})","cardsView":"卡片","noStackAvailable":"未找到与活动过滤器匹配的调用堆栈帧。","originBadge":"#1 起源","appCodeBadge":"应用程序代码","dependencyBadge":"依赖性","nativeBadge":"本地人","hermesVmBadge":"爱马仕虚拟机","fullStackTrace":"完整的堆栈跟踪","lineCol":"行 {{line}},列 {{col}}","lineColShort":"L{{line}}:C{{col}}","searchInLogDetails":"在日志详细信息中搜索..."},"analytics":{"timeNow":"NOW","allCategory":"All","title":"分析","searchPlaceholder":"搜索事件...","emptyTitle":"尚无分析事件","emptySubtitle":"当您的应用程序跟踪分析事件时,它们将显示在此处。","clearTitle":"清晰的分析","clearMessage":"您确定要清除所有分析事件吗?","eventParams":"{{count}} 参数","eventCount":"{{count}} 事件","userProperties":"用户属性","userId":"用户ID","defaultParameters":"默认参数","collectionEnabled":"已启用收集","screenView":"屏幕视图","eventDetails":"活动详情","parameters":"参数","noParams":"无参数","recentEvents":"近期活动","analyticsError":"分析错误","duplicate":"重复","params":"参数","props":"道具","item":"项目","items":"项目","pageViewCategory":"页面浏览量","ecommerceCategory":"电子商务","systemCategory":"系统","customCategory":"定制","realtimeStream":"实时活动","liveTelemetry":"实时遥测","eventsInWindow":"窗口中的事件","eventVelocity":"{{rate}} 电动车/分钟","peakVolume":"峰值:{{count}}","time30mAgo":"-30m","time20mAgo":"-20米","time10mAgo":"-10米","selectedBucket":"存储桶:{{time}}({{count}} 事件)","totalRevenue":"收入","activeDistribution":"类别划分","screensCategory":"屏幕","overviewTab":"概述","jsonTreeTab":"JSON 树","rawPayloadTab":"原始有效负载","sessionContext":"会话上下文","userPropertiesSnapshot":"用户属性快照","parameterKeys":"参数({{count}})","searchParameters":"搜索参数...","noParamsFound":"没有与您的搜索匹配的参数","sourceFirebase":"火力基地 GA4","sourceCustom":"定制/手动"},"redux":{"searchPlaceholder":"搜索状态或动作...","emptyTitle":"未连接 Redux Store","emptySubtitle":"连接你的 Store 以实时审查状态树和派发动作。","originUi":"UI","activeSlices":"活跃切片","totalState":"总状态大小","lastActionHeader":"最新动作","initialState":"初始状态 (暂无动作派发)","noStoreConnected":"未连接 Redux Store","connectStoreTip":"请在应用初始化时调用 connectReduxStore(store) 或添加 inspectorReduxMiddleware。","clearPersistedTitle":"清除持久化状态","clearPersistedMessage":"确定要删除 slice \"{{slice}}\" 的持久化存储吗?","clearedPersisted":"持久化状态已清除。","clearPersistedError":"清除持久化状态失败。","title":"终极版","stateTab":"状态","actionsTab":"行动","clearTitle":"清除 Redux 时间线","clearMessage":"您确定要清除已调度的操作历史记录吗?","noActions":"尚未采取任何行动。在应用程序中触发操作以填充历史记录。","noSearchResults":"没有与您的搜索匹配的操作。","lastAction":"最后行动","actionHistory":"行动史","affectedSlices":"受影响的切片","noAffectedSlices":"无","dispatchTime":"发送于","prevState":"以前的状态","nextState":"下一个状态","viewDiff":"查看差异","emptyState":"状态为空","rootState":"根状态","connectionStatus":"已连接","connectionStatusNone":"未连接","autoRefresh":"自动刷新","paused":"已暂停","liveState":"实时状态","timeline":"时间轴","persisted":"坚持","storage":"存储","metadata":"元数据","inMemory":"内存中","slice":"切片","rootKeys":"根键","size":"尺寸","actions":"行动","keys":"按键","last":"最后","live":"直播","loading":"加载中","error":"错误","empty":"空","payload":"有效载荷","actionPayload":"动作有效负载:","stateChangesDiff":"状态变化(差异):","tapToInspectAction":"点击以检查操作负载和差异更改","noDispatchedActions":"尚未记录该切片的已分派操作。","sliceJson":"切片 JSON","originSaga":"世嘉","originThunk":"重击","originDirect":"直接","originListener":"聆听者","triggeredFrom":"触发自:","openInEditor":"在编辑器中打开","callStack":"调用堆栈跟踪","sliceOrigin":"切片/原点"},"device":{"title":"设备信息","searchPlaceholder":"搜索硬件规格、UDID、IP、屏幕...","subTabs":{"overview":"概览","hardware":"硬件配置","network":"网络与 IP","display":"显示屏幕","runtime":"运行时环境","security":"安全与标识"},"sections":{"overview":"设备概览","hardware":"硬件与系统规格","network":"网络与连接状态","display":"屏幕与显示几何","runtime":"运行时与应用信息","security":"设备标识与安全"},"copied":"已复制 {{label}}","copiedJson":"已复制完整设备 JSON 报告!","copiedMarkdown":"Markdown 报告已复制到剪贴板!","live":"实时","ipAddress":"IP 地址","ramUsedTotal":"内存 (已用/总计)","uptime":"运行时长"},"storage":{"title":"本地存储","searchPlaceholder":"搜索键名、值、类型...","clearTitle":"清空存储驱动","clearMessage":"确定要删除 {{driver}} 中的所有键吗?此操作不可恢复。","clearConfirm":"全部清除","emptyTitle":"暂无存储记录","emptySubtitle":"当前驱动存储为空。","addKey":"添加键","add":"添加","editKey":"编辑键","createKey":"新建键","save":"保存","saveKey":"保存键","keyName":"键名","value":"值","valueContent":"数据内容","type":"类型","beautifyJson":"格式化 JSON","loading":"正在加载存储数据...","deleteKeyTitle":"删除键","deleteKeyMessage":"确定要删除键 \"{{key}}\" 吗?","deleteConfirm":"删除","cleared":"存储已清除","subTabs":{"asyncStorage":"异步存储","mmkv":"MMKV"},"asyncStorage":"异步存储","mmkv":"MMKV"},"footer":{"endOfList":"已到达列表末尾","loadMore":"加载更多 ({{count}})","showingOf":"正在显示 {{count}} / {{total}} {{label}}","loadMoreRequests":"加载 {{count}} 更多请求","allLoaded":"已加载所有 {{count}} 请求"},"performance":{"filterAll":"All","catAll":"All","catIo":"I/O","jscEngine":"JSC","fpsUnit":"FPS","title":"性能","fpsTarget":"60 FPS 目标监视器","healthScore":"FPS 健康评分","excellent":"优秀(60 FPS)","good":"好(轻微的垃圾)","needsOptimization":"需要优化","liveFps":"实时 FPS 和刷新周期","realtimeWindow":"实时(1s窗口)","uiRenderThread":"UI渲染线程","optimalFrame":"最佳(<16.6ms)","slowFrame":"慢帧(>16.6ms)","budgetUsage":"60 FPS 预算使用情况","avgFrameTime":"平均帧时间","peakTime":"高峰时间","jsThread":"JS线程","uiThread":"用户界面线程","jsiLatency":"JSI 延迟","heapImpact":"堆影响","optimizationTip":"优化提示:","recordedEvents":"记录的事件和互动","liveStream":"直播会话流","emptyTitle":"尚未捕获任何性能事件","emptySubtitle":"在应用程序中执行操作以查看线程计时、渲染成本和 FPS 跟踪。","tabOverview":"概述","tabRenders":"渲染图","tabInteractions":"互动","tabMemory":"内存","filterSlow":"慢(>16ms)","filterCritical":"严重(>33ms)","searchPlaceholder":"搜索组件、交互...","avgRenderTime":"平均渲染","totalRenders":"总渲染数","renderCost":"渲染成本","slowRenders":"渲染速度慢","unnecessaryRenders":"浪费渲染","heapAllocated":"堆分配","heapLimit":"堆限制","gcEvents":"GC活动","leakRisk":"泄漏风险","lowRisk":"低风险","mediumRisk":"中等风险","highRisk":"高风险","memoryTimeline":"记忆时间轴","clearPerformance":"清晰的性能数据","clearConfirmation":"您确定要清除所有效果跟踪数据吗?","liveFpsDip":"实时帧率下降 ({{fps}} FPS)","liveFpsDipDetail":"视图更新期间主线程帧持续时间延长至 {{duration}}ms。","liveFpsDipAdvice":"帧传递期间大量 JavaScript 执行延迟了显示呈现。","yogaLayout":"瑜伽 Flexbox 布局","hermesGc":"爱马仕垃圾收集","jsEngine":"JS引擎","uiReconciler":"用户界面协调器","memoryHeap":"内存堆","allLogs":"所有日志","jankySlow":"詹基/慢","navigation":"导航","components":"组件","memoryGc":"内存和GC","networkIo":"网络和输入/输出","catJanky":"詹基","catNavigation":"导航","catRender":"组件","catMemory":"内存","recording":"录音","paused":"已暂停","budgetHeadroom":"~{{time}}毫秒余量 ({{percent}}%)","jsExec":"JS 执行:{{time}} 毫秒","yogaLayoutTime":"瑜伽布局:{{time}}毫秒","uiRenderTime":"用户界面渲染:{{time}}毫秒","freeTime":"空闲:{{time}}毫秒","heapAllocatedSub":"{{allocated}} MB 已分配","hermesAot":"爱马仕 (AOT)","v8Jit":"V8(即时)","bytecodeCompiled":"字节码编译","jitEngine":"即时引擎","webkitEngine":"Webkit引擎","fabricJsi":"面料/JSI","paperBridge":"纸/桥","directCppBindings":"直接 C++ 绑定","asyncJsonBridge":"异步 JSON 桥","jsLag":"JS 滞后","jankRate":"卡顿率","fpsAreaChartTitle":"实时 FPS 流和抖动(30 秒)","fpsAreaChartSub":"具有连续帧方差测量的实时 60 FPS 目标","frameLatencyDistTitle":"帧延迟分布","frameLatencyDistSub":"在 16.6 毫秒预算内交付的帧比例","optimalBucket":"< 16.6 毫秒(60 帧/秒)","minorJankBucket":"16.7 - 33.3 毫秒(30-60 帧/秒)","noticeableJankBucket":"33.4 - 50.0 毫秒(20-30 帧/秒)","severeFreezeBucket":"> 50.0 毫秒(< 20 FPS)","hermesHeapTrendTitle":"内存和 Hermes 堆动态","hermesHeapTrendSub":"实时分配与分代 GC 清除周期","live":"直播","msTotal":"总计 {{duration}} 毫秒 • {{time}}","droppedFrames":"{{count}} 已删除","zeroDropped":"0 掉落","frameBudgetMs":"{{time}} 毫秒/帧({{budget}}% 预算)","target60Fps":"目标 60 FPS • 实际 {{fps}} FPS","frameDuration":"帧持续时间","frameDurationVal":"{{time}} 毫秒(16.67 毫秒预算)","frameUtilization":"超出框架预算","frameBudgetOk":"框架预算余量","bottleneck":"瓶颈","jsBound":"JS 线程绑定","uiBound":"UI线程绑定","balanced":"平衡","smooth":"流畅 60 FPS","minorJank":"轻微口吃","noticeableJank":"明显的卡顿","severeFreeze":"严重冻结","screenContext":"屏幕上下文","profileReason1":"内联箭头函数道具传递给子项 (onAddToCart={() => ...})","profileReason2":"未记忆的 Redux 选择器在每次调度时创建新的对象引用","profileReason3":"在渲染主体中创建的动态样式对象 ({ marginTop: insets.top + 10 })","profileReason4":"FlatList 缺少 getItemLayout 导致异步布局测量通道","profileReason5":"在 JSX 主体内匿名定义的 renderItem 函数","profileReason6":"列出未用 React.memo 包装的项目组件","profileReason7":"在键盘显示/隐藏事件上重新渲染父屏幕","profileReason8":"传递到结账按钮的回调引用不稳定","profileReason9":"TextInput 值状态会在每次击键时触发父级重新渲染,而不会去抖动","profileReason10":"将未记忆的过滤器对象({category, minPrice})传递给子芯片","profileReason11":"身份验证会话刷新时头像图像缓存重新验证","fixUseCallbackTitle":"将事件处理程序包装在 useCallback 中","fixUseCallbackDesc":"内联函数在每个渲染上重新创建一个新的内存引用,从而使子组件上的 React.memo 无效。","fixCreateSelectorTitle":"Memoize Redux / Zustand 选择器与shallowEqual","fixCreateSelectorDesc":"在 useSelector 中返回新对象或数组引用会强制在每个状态调度上自动重新渲染。","fixUseMemoStylesTitle":"提升样式或使用 useMemo 动态尺寸","fixUseMemoStylesDesc":"内联样式对象在每个帧传递上创建新的对象标识,从而导致 Yoga Flexbox 协调差异。","fixGetItemLayoutTitle":"为固定高度项目实现 getItemLayout","fixGetItemLayoutDesc":"提供 getItemLayout 允许 FlatList 立即计算滚动偏移和虚拟窗口,而无需异步测量视图。","fixReactMemoTitle":"在 React.memo 中包装列表项","fixReactMemoDesc":"当父列表状态(例如滚动位置或分页)更新时,防止重新呈现所有 50 多个可见列表项。","fixComponentSplittingTitle":"隔离叶组件中快速变化的状态","fixComponentSplittingDesc":"将键盘侦听器和模态动画状态移动到独立的子组件中,以便父组件不会重新渲染。","fixDebouncedInputTitle":"去抖动搜索输入或使用本地控制状态","fixDebouncedInputDesc":"不要立即将击键状态传播到全局存储中。使用 250ms 去抖或不受控制的参考。","fixPrimitivePropsTitle":"传递原始道具而不是大型物体","fixPrimitivePropsDesc":"仅传递categoryId字符串而不是整个类别对象可以防止在其他类别元数据更新时重新呈现。","fixUseRefForTrackingTitle":"使用 useRef 获取非视觉跟踪值","fixUseRefForTrackingDesc":"如果分析计时器、滚动偏移量或跟踪 ID 不直接更改 JSX 树,请勿将其存储在 useState 中。","highImpact":"高影响力","mediumImpact":"中等影响","bestPractice":"最佳实践","beforeUseCallback":"// ❌ <{{comp}} /> 之前(在每次渲染时重新创建函数引用):","afterUseCallback":"// ✅ 之后(稳定的记忆回调参考):","beforeCreateSelector":"// ❌ <{{comp}} /> 之前(每次渲染返回新对象引用):","afterCreateSelector":"// ✅ 之后(shallowEqual 会阻止重新渲染,除非值发生变化):","beforeMemo":"// ❌ 在 (<{{comp}} />) 之前:","afterMemo":"// ✅ 之后(如果 props 浅层相同则跳过渲染):","flatListOptimization":"// <{{comp}} /> 的 FlatList 优化","customComparator":"// <{{comp}} /> 的自定义相等函数","debounceInput":"// 对 <{{comp}} /> 内的输入进行去抖动以防止每次击键渲染:","isolateState":"// 将快速变化的状态从 <{{comp}} /> 隔离到子子树 // ✅ 将动画布局封装在隔离组件内:","beforeUseRef":"// ❌ <{{comp}} /> 之前(值更改时触发整个组件重新渲染):","afterUseRef":"// ✅ 之后(在渲染之间保留可变引用而不重新渲染):","fixInteractionManagerTitle":"使用 InteractionManager 推迟屏幕外逻辑","fixInteractionManagerDesc":"屏幕动画期间的繁重数据处理会导致丢帧。推迟到过渡完成。","beforeInteractionManager":"// ❌ <{{comp}} /> 之前(在过渡动画时运行大量计算): useEffect(() => { loadHeavyData(); }, []);","afterInteractionManager":"// ✅ After (等待转换顺利完成): useEffect(() => { const task = InteractionManager.runAfterInteractions(() => { loadHeavyData(); }); return () => task.cancel(); }, []);","fixFlatListWindowingTitle":"调整 FlatList 窗口属性","fixFlatListWindowingDesc":"配置 maxToRenderPerBatch 和 windowSize 以最大限度地减少屏幕外虚拟视图分配。","beforeFlatListWindowing":"// <{{comp}} /> 的 FlatList 窗口优化:<FlatList data={items} maxToRenderPerBatch={10} windowSize={5} initialNumToRender={8} removeClippedSubviews={true} />","fixImageCachingTitle":"优化图像缓存和缩小尺寸","fixImageCachingDesc":"使用优先级标头或 resizeMode 缩小规模以避免 Hermes 堆中的大量位图分配。","beforeImageCaching":"// <{{comp}} /> 的图像优化:<Image source={{ uri: imageUrl, cache: 'force-cache' }} resizeMode=\"cover\" fadeDuration={100} />","fixContextSplittingTitle":"将整体上下文拆分为细粒度的提供者","fixContextSplittingDesc":"即使未使用的状态属性发生变化,订阅大型上下文的组件也会重新渲染。","beforeContextSplitting":"// ❌ Before (<{{comp}} /> 消耗整个 AppContext): const { user, cart, theme } = useAppContext();","afterContextSplitting":"// ✅ 之后(订阅专用切片上下文): const theme = useThemeContext();","fixInlineStylesHoistTitle":"使用 StyleSheet.create 提升静态样式","fixInlineStylesHoistDesc":"内联样式对象在每个渲染通道上分配新的内存引用,从而导致 Yoga 协调开销。","beforeInlineStyles":"// ❌ Before (<{{comp}} /> 每帧分配内联对象): <View style={{ flex: 1, padding: 16, backgroundColor: '#ffffff' }} />","afterInlineStyles":"// ✅ 之后(提升的 StyleSheet 参考): const styles = StyleSheet.create({ container: { flex: 1, padding: 16, backgroundColor: '#ffffff' } }); <视图样式={styles.container} />","transitionEventLabel":"屏幕转换:{{screen}}","transitionEventDetail":"转换在 {{duration}} 毫秒内完成(TTI:{{tti}} 毫秒)。","transitionEventAdvice":"交互在 60 FPS 目标预算内完成。","heavyTaskEventLabel":"繁重的同步任务:{{taskName}}","heavyTaskEventDetail":"JS 线程在任务执行期间阻塞了 {{duration}} 毫秒。","heavyTaskEventAdvice":"考虑卸载到 Web Worker、InteractionManager 或分批批处理。","asyncOpEventLabel":"缓慢的异步操作:{{opName}}","asyncOpEventDetail":"异步任务需要 {{duration}} 毫秒才能解决。","renderLoopWarningLabel":"<{{comp}} /> 中的快速重新渲染峰值","renderLoopWarningDetail":"组件在 500 毫秒内重新渲染 {{count}} 次。潜在的无限循环或不稳定的依赖关系。","renderLoopWarningAdvice":"检查 useEffect / useCallback 依赖数组是否存在不稳定的对象或函数引用。","event1Label":"导航期间主线程峰值","event1Detail":"屏幕转换触发了繁重的布局协调和同步组件安装。","event1Advice":"使用 InteractionManager.runAfterInteractions 推迟非关键的离屏挂钩以保持 60 FPS。","event2Label":"FlatList 虚拟化重新渲染通道","event2Detail":"FlatList 在方向变化时同时渲染 25 个项目,无需记忆行组件。","event2Advice":"实现 getItemLayout 和 React.memo(LogCard) 以跳过冗余的比较过程。","event3Label":"本机模态上滑过渡","event3Detail":"硬件加速的本机驱动程序动画变换以持续 60 FPS 的速度平稳运行。","event3Advice":"使用nativeDriver: true成功地防止了动画期间JS线程的阻塞。","event4Label":"爱马仕世代垃圾收集","event4Detail":"次要分代 GC 周期清除了 4.2 MB 临时堆对象,线程暂停时间为亚毫秒级。","event4Advice":"Hermes 分代垃圾收集器在低于 5 毫秒的最佳限制内运行。","gcCycleLabel":"手动垃圾收集周期","gcCycleDetail":"回收了~{{amount}}MB未引用的堆对象和压缩的内存苗圃。","gcCycleAdvice":"堆使用优化。世代托儿所清理完毕。","liveFpsDropLabel":"实时帧率下降 ({{fps}} FPS)","liveFpsDropDetail":"视图更新期间主线程帧持续时间延长至 {{duration}}ms。","liveFpsDropAdvice":"帧传递期间大量 JavaScript 执行延迟了显示呈现。","event5Label":"大型 JSON 有效负载反序列化","event5Detail":"网络适配器中 50 项 API 响应解析开销(185 KB JSON 原始字符串)。","event5Advice":"如果负载大小超过 250 KB,请考虑对 API 负载进行分页或流式响应。","event6Label":"图像位图解码和光栅化","event6Detail":"Banner_dark.png 的视网膜光栅解码(1200×630px 光栅缓冲区分配)。","event6Advice":"缩小资产尺寸或转换为 WebP,以将解码延迟减少约 65%。","event7Label":"本机 TurboModule JSI 调用","event7Detail":"AsyncStorage / MMKV 首选项事务读取 32 个配置键。","event7Advice":"直接 C++ JSI Turbomodule 绑定完全绕过传统 JSON 桥序列化开销。","event8Label":"Redux Action 状态树比较","event8Detail":"Redux 调度过程评估了 6 个减速器切片并在 4.8 毫秒内发出状态通知。","event8Advice":"保留状态树不变性。记忆选择器阻止了冗余组件渲染。","event9Label":"触摸渲染事件延迟","event9Detail":"手势响应程序将点击事件发送到 TabBar 按钮,并立即做出 60 FPS 响应。","event9Advice":"触摸响应器延迟完全在标准 16.67 毫秒帧预算范围内。","event10Label":"C++ Yoga Flexbox 布局通道","event10Detail":"Inspector UI 多选项卡布局重新计算和字体规格在 C++ Yoga 引擎中传递。","event10Advice":"Flexbox 布局约束被有效地缓存和计算,并且回流惩罚为零。"},"bundle":{"mediaAuditorSuffix":"KB.","heroTitle":"捆绑包和资产架构","heroSubtitle":"所有资产、代码和依赖项的实时大小细分","heroSubtitleLive":"{{scriptUrl}} 的实时分析","liveAnalysisUnavailable":"实时捆绑分析不可用","liveAnalysisUnavailableSub":"无法到达 Metro 开发服务器,因此值是估计值。确保应用程序通过“npx react-native start”在开发中运行,并且 Inspector 可以到达您的 Metro 端口(8081、8082,...)。","bundleOverviewJson":"捆绑包概述 JSON","devBundleSize":"开发包大小","devBundleHint":"{{kb}} KB • {{modules}} 模块","trackedFilesHint":"{{count}} 跟踪的文件","imagesMedia":"图片与媒体","pctOfTrackedAssets":"所跟踪资产的 {{pct}}%","tsJsSource":"TS / JS 来源","jsEngine":"JS引擎","bytecodeAot":"字节码AOT","standard":"标准型","splitUpTitle":"开发包拆分","splitUpSub":"测量的 {{mb}} MB JS 包 • {{files}} 文件 • {{packages}} 包","splitUpJson":"拆分 JSON","splitAppSource":"应用程序源代码","splitNodeModules":"node_modules 依赖关系","splitAssetsMedia":"资产与媒体","splitMetroOverhead":"Metro 开发开销","splitSize":"{{kb}} KB • {{mb}} MB","productionFootprint":"生产足迹","productionValue":"iOS {{ios}} MB • Android {{android}} MB","productionDownload":"下载:iOS ~{{ios}} MB • AAB ~{{aab}} MB • APK ~{{apk}} MB","treemapTitle":"资产和文件类型比率树形图","treemapSub":"总计 ~{{mb}} MB","treemapJson":"比率树形图 JSON","legendImages":"图片:","legendTs":"多伦多/多伦多证券交易所:","legendJs":"JS 库:","legendFonts":"字体:","legendJson":"JSON:","categoryBreakdown":"类别细分","categoriesJson":"类别细分 JSON","catImagesTitle":"图片和媒体资产","catImagesDesc":"捆绑中的 PNG、WebP、SVG 和 JPG 资源","catJsTitle":"编译的节点模块和 JS","catJsDesc":"第三方依赖项和本机桥","catFontsTitle":"自定义字体和矢量字形","catFontsDesc":"捆绑中的字体资源","catTsTitle":"TypeScript 和 JSX 组件","catTsDesc":"应用程序屏幕组件、挂钩和业务逻辑","catJsonTitle":"JSON 数据和本地化","catJsonDesc":"i18n 翻译词典和静态配置","totalBundleAssets":"主机项目文件总数","totalBundleValue":"{{kb}} KB (~{{mb}} MB)","totalFormula":"主机源文件总和:{{images}} KB + {{js}} KB + {{fonts}} KB + {{ts}} KB + {{json}} KB = {{total}} KB({{count}} 项)","prodIosApp":"iOS 应用程序 (.ipa)","prodAndroidAab":"Android AAB (.aab)","prodAndroidApk":"通用 APK (.apk)","prodHeroTitleIos":"iOS 生产二进制足迹","prodHeroTitleAab":"Google Play 应用程序包 (.aab)","prodHeroTitleApk":"通用独立 APK (.apk)","prodHeroSubIos":"App Store 安装和无线蜂窝下载估算","prodHeroSubAab":"优化的每设备动态交付拆分 APK 架构","prodHeroSubApk":"用于侧面加载和直接分发的多 ABI 通用安装存档","prodInstallSize":"安装尺寸","prodInstallHint":"设备上未压缩的占用空间","prodDownloadSize":"下载大小","prodDownloadHint":"存储网络传输负载","prodCompression":"压缩","prodCompressionHint":"字节码&资产比例","prodFormatArch":"格式架构","prodFormatHintIos":"苹果ARM64运行时","prodFormatHintAab":"动态 Google Play 投放","prodFormatHintApk":"侧载通用包","prodArchTitle":"二进制组件架构","prodArchSub":"已编译的本机库、运行时字节码、资产和签名块","prodTotalIos":"iOS 应用程序二进制文件总数","prodTotalAab":"Android AAB 总包","prodTotalApk":"通用 APK 总数","prodTotalFormula":"从 {{devKb}} KB(~{{devMb}} MB • {{count}} 总资产)开发源包 → {{installMb}} MB 优化的本机二进制文件({{pct}}% 字节码/资产压缩)。","tabOverview":"概述","tabProduction":"生产 ({{count}})","tabFiles":"文件({{count}})","tabPackages":"套餐({{count}})","tabMedia":"媒体 ({{count}})","tabOptimizer":"优化器","analyzingTitle":"正在分析 Metro 中的主机应用程序包...","analyzingHint":"获取包并提取真实模块","searchFilesPlaceholder":"按文件名搜索(.png、.tsx、.ttf、路径)...","filteredFilesJson":"过滤后的文件 JSON","catAll":"所有文件","catUnused":"未消耗(死亡)","catConsumed":"使用中/活跃","catImages":"图片与媒体","catTypescript":"TypeScript / TSX","catJavascript":"JS 和节点模块","catFonts":"字体和字形","catJson":"JSON 和数据","treeView":"树视图","flatList":"平面列表","expand":"展开","collapse":"崩溃","showingFilesOf":"显示 {{shown}} 个文件(共 {{total}} 个)","filesOf":"{{count}} 个文件(共 {{total}} 个)","notConsumed":"未消耗","consumed":"已消耗","copyFileInfo":"复制 {{name}} 信息","fileDetailsJson":"文件详细信息 JSON","file":"文件","files":"文件","fileSizeKb":"{{size}} 知识库","fileSizeMb":"{{size}} MB","mbValue":"~{{size}} MB","kbMbValue":"{{kb}} KB ({{mb}} MB)","legendValue":"{{kb}} KB ({{pct}}%)","mediaSavings":"{{size}} 知识库","searchPackagesPlaceholder":"搜索包(react-native、axios、navigation)...","dependenciesJson":"依赖关系 JSON","showingDependencies":"显示 {{count}} 依赖项","versionPrefix":"v{{version}}","bundled":"捆绑的","deprecated":"已弃用","updateAvailable":"更新:v{{version}}","upToDate":"最新","bundledBadge":"捆绑式","packageDetailsJson":"包详细信息 JSON","direct":"直接","transitive":"及物","minified":"~{{size}} KB 缩小","npmLink":"npm ↗","dependenciesCount":"{{count}} 依赖项","mediaAuditorTitle":"媒体压缩审核器","mediaAssetsJson":"媒体资产 JSON","mediaAuditorPrefix":"图像和字体构成","mediaAuditorMid":"总资产 (~{{kb}} KB)。将 PNG 转换为 WebP 并设置字体子集可将大小减少最多","mediaAssetsList":"媒体资产和字体({{count}} 项)","mediaItemJson":"媒体项 JSON","mediaAndFonts":"{{count}} 媒体和字体","optimizerTitle":"React Native Bundle 优化清单","optimizationChecklist":"优化清单","optTip1Title":"将重型 PNG 转换为 WebP / SVG","optTip1Desc":"图片占最终应用下载大小的 40% 以上。将 2x/3x 光栅 PNG 转换为 WebP 可节省 60-70% 的大小,并且没有明显的保真度损失。","optTip2Title":"启用 Hermes 字节码引擎","optTip2DescActive":"赫尔墨斯活跃了! JavaScript 被提前编译成优化的字节码。","optTip2DescInactive":"赫尔墨斯是残疾人。在应用程序配置中启用 Hermes,可减少约 40% 的负载并实现即时 TTI 启动。","optTip3Title":"字体子集化和权重修剪","optTip3Desc":"仅包括您经常使用的字体粗细(例如常规和粗体)。删除未使用的字形范围以节省每个字体文件 100KB 以上的空间。","optTip4Title":"选择性路径导入(Tree-shaking)","optTip4Desc":"从特定子路径(例如 lodash/get 或特定矢量图标集)导入,而不是导入大型整体包。","optTip5Title":"屏幕延迟加载","optTip5Desc":"使用动态导入和 InteractionManager 延迟加载辅助屏幕和重型模式表,以减少初始捆绑评估。","highImpact":"高影响力","mediumImpact":"中等影响","bestPractice":"最佳实践","actionRequired":"需要采取的行动","active":"活跃","tipDetails":"提示详情","iosComp1Name":"框架和动态 Pod","iosComp1Desc":"React、Hermes 和 {{count}} 本机 pod 框架。","iosComp1Advice":"确保在发布模式下去除死代码 (STRIP_INSTALLED_PRODUCT = YES)。","iosComp2Name":"Mach-O 可执行文件 (ARM64)","iosComp2Desc":"Host App 编译了 Swift/Objective-C 和 C++ 本机桥。","iosComp2Advice":"在 Xcode 方案中启用整体式 LTO(链接时优化)。","iosComp3Name":"资产目录(Assets.car)","iosComp3Desc":"应用程序图标、启动画面、矢量字形和捆绑字体。","iosComp3Advice":"将图像编译到 Xcode 资产目录中以实现自动应用程序精简。","iosComp4Name":"Hermes 字节码(main.jsbundle)","iosComp4Desc":"主机应用程序 JavaScript 将 AOT 编译为 Hermes 字节码({{count}} 文件)。","iosComp4Advice":"AOT 字节码在设备启动时加载,编译延迟为 0 毫秒。","iosComp5Name":"元数据和代码签名","iosComp5Desc":"_CodeSignature、Info.plist 和权利块。","iosComp5Advice":"标准 Apple 代码签名和配置签名。","andComp1Name":"本机 C++ 库 (.so)","andComp1Desc":"libhermes.so、libfbjni.so 和 {{count}} C++ 本机适配器。","andComp1Advice":"使用 Android App Bundle (.aab) 进行部署,以提供按 ABI 拆分的 APK。","andComp2Name":"编译的DEX(classes.dex)","andComp2Desc":"编译了 Java 和 Kotlin 运行时、AndroidX 和 React Native 桥接器。","andComp2Advice":"在 build.gradle 中启用 R8 / ProGuard 收缩(minifyEnabled true)。","andComp3Name":"Android 资源 (res/)","andComp3Desc":"Drawables、矢量 XML、mipmap 密度、resources.arsc、字体。","andComp3Advice":"使用 WebP 和 VectorDrawables 避免多密度资源重复。","andComp4Name":"Hermes 字节码(Android)","andComp4Desc":"主机应用 JavaScript 编译为 Hermes 字节码({{count}} 文件)。","andComp4Advice":"在 assembleRelease gradle 任务期间预编译的字节码。","andComp5Name":"清单和签名 (META-INF)","andComp5Desc":"AndroidManifest.xml、签名证书、v2/v3/v4 APK 签名方案块。","andComp5Advice":"官方 Google Play 签名和签名块。","apkComp1Name":"多 ABI C++ 库 (.so)","apkComp1Desc":"捆绑通用多架构共享库 (.so),用于直接旁加载。","apkComp1Advice":"使用 Google Play 的 Android App Bundle (.aab) 可将安装大小减少 60%。","apkComp2Name":"编译后的DEX字节码(classes.dex)","apkComp2Desc":"已编译的 Java 和 Kotlin 运行时、AndroidX 库和本机桥接模块。","apkComp2Advice":"启用 R8 / ProGuard 收缩 (minifyEnabled true) 和shrinkResources true。","apkComp3Name":"Android 资源和资产 (res/)","apkComp3Desc":"Drawables、矢量 XML、mipmap 密度、resources.arsc、字体。","apkComp3Advice":"使用 WebP 和 VectorDrawables 避免多密度资源重复。","apkComp4Name":"Hermes 字节码捆绑包(Android)","apkComp4Desc":"主机应用 JavaScript 编译为 Hermes 字节码({{count}} 文件)。","apkComp4Advice":"在 assembleRelease gradle 任务期间预编译的字节码。","apkComp5Name":"清单和签名 (META-INF)","apkComp5Desc":"AndroidManifest.xml、签名证书、JAR 和 v2/v3/v4 APK 签名方案。","apkComp5Advice":"企业旁加载和直接安装签名块。"},"errors":{"appTag":"APP","title":"出了点问题","message":"发生意外错误。","retry":"再试一次","reset":"重置","close":"关闭","errorReport":"错误报告","modalTitle":"检查员坠毁","modalMessage":"检查员遇到了意外错误。您可以在下面重置它。","inlineTitle":"检查员错误","inlineMessage":"检查器内部发生意外错误。","networkError":"网络请求失败","crashIntercepted":"事故被拦截","protected":"受保护","rootCauseTitle":"根本原因诊断","rootCauseSubtitle":"检查器捕获此运行时错误以防止应用程序终止","exactLocation":"确切的源位置","file":"文件:","lineCol":"行/列:","lineColVal":"行 {{line}},列 {{col}}","function":"功能:","callStack":"调用堆栈帧","framesCount":"{{count}} 帧","tryAgainRecover":"再试一次/恢复","copyDiagnostics":"复制诊断","copy":"复制"},"jsonViewer":{"pretty":"树形视图","raw":"原始文本","table":"表格视图","emptyObject":"空对象","emptyPayload":"载荷为空","emptyTable":"空对象","fold":"折叠","expand":"展开","min":"压缩","indent":"缩进","wrap":"换行","copied":"已复制!","copy":"复制 JSON","key":"键","value":"值","lines":"行","line":"行"},"crash":{"filterAll":"All","frameApp":"APP","frameLib":"LIB","jsc":"JSC","filterPlatformIos":"iOS","title":"崩溃","searchPlaceholder":"搜索错误、消息、堆栈...","searchDetailPlaceholder":"在跟踪或 JSON 中搜索...","statCrashes":"崩溃","statFatal":"致命的","statJsErrors":"JS 错误","statPromises":"承诺","statRender":"渲染","statNative":"本地人","filterFatal":"致命的","filterJsError":"JS错误","filterPromise":"承诺","filterRender":"渲染","filterNative":"本地人","fatalBadge":"致命的","handledBadge":"处理","fatalCrash":"致命车祸","handledException":"处理异常","unknownException":"未知异常","report":"报告","inspect":"检查","copyReport":"复制报告","copied":"已复制","clearTitle":"清除崩溃历史记录","clearMessage":"您确定要清除所有拦截的崩溃记录吗?","clearCancel":"取消","clearConfirm":"全部清除","emptyTitle":"检测到零崩溃","emptySubtitle":"全局防撞保护已激活。所有本机和 JavaScript 异常都会被拦截和保护。","emptySearchSubtitle":"没有与您的搜索查询匹配的崩溃条目。","tabStack":"堆栈 ({{count}})","tabDiagnostics":"诊断","tabTrail":"踪迹 ({{count}})","tabRawJson":"原始 JSON","appFrames":"应用框架 ({{count}})","allFrames":"所有帧 ({{count}})","anonymous":"<匿名>","noStackTrace":"没有捕获此事件的堆栈跟踪。","deviceEnvironment":"设备与环境","platform":"平台","osVersion":"操作系统版本","reactNative":"反应本机","jsEngine":"JS引擎","hermesEngine":"赫尔墨斯引擎","architecture":"建筑","fabricNewArch":"面料(新拱门)","paperLegacy":"纸张(旧版)","appState":"应用程序状态","jsHeapMemory":"JS堆内存","usedHeap":"已用堆","totalHeap":"总堆","noBreadcrumbs":"此次崩溃之前没有记录任何面包屑事件。","simNativeMessage":"模拟本机致命异常","simPromiseMessage":"模拟未处理的承诺拒绝","simRenderMessage":"模拟React组件渲染错误","simJsMessage":"模拟 JavaScript 异常","reportTitle":"碰撞诊断报告","reportErrorName":"错误名称:","reportMessage":"留言:","reportType":"类型:","reportFatalYes":"是(致命)","reportFatalNo":"否(捕获/处理)","reportFatal":"致命:","reportTimestamp":"时间戳:","reportUptime":"应用程序正常运行时间:","reportUptimeValue":"{{seconds}} 秒","reportPlatform":"平台:","reportReactNative":"反应本机:","reportHermes":"爱马仕:","reportEnabled":"启用","reportDisabled":"残疾人","reportArchitecture":"架构:","reportFabricNew":"面料(新)","reportPaperLegacy":"纸张(旧版)","reportScreenSize":"屏幕尺寸:","reportAppState":"应用程序状态:","reportJsMemory":"JS内存:","reportStackTrace":"堆栈跟踪:","reportNoStackTrace":"没有可用的堆栈跟踪","reportComponentHierarchy":"组件层次结构:","reportRecentBreadcrumbs":"最近的面包屑:","mdReportTitle":"🚨 崩溃报告:{{name}}","mdStackTrace":"📦 堆栈跟踪","mdComponentHierarchy":"🌲 组件层次结构","mdRecentBreadcrumbs":"👣 最近的面包屑","mdSeverityFatal":"致命的","mdSeverityHandled":"处理","breadcrumbNavigation":"从“{{from}}”导航到“{{to}}”","breadcrumbAction":"行动:{{actionType}}","unknown":"未知","runtimeException":"运行时异常","logFatalCrash":"致命车祸","logUnhandledError":"未处理的错误","errorNameFatal":"致命错误","errorNameUnhandled":"未处理的异常","nativeCrashTitle":"本机崩溃","nativeUncaughtException":"本机未捕获异常","nativeException":"本机异常","unhandledPromiseRejection":"未处理的承诺拒绝","filterTitle":"碰撞过滤器","filterSubtitle":"诊断和报告","filterReset":"全部重置","filterTypeSection":"碰撞类型","filterTypeAll":"所有类型","filterTimeSection":"时间范围","filterTimeAll":"所有时间","filterTime15m":"最后 15 分钟","filterTime1h":"最后 1 小时","filterTime24h":"过去 24 小时","filterTime7d":"过去 7 天","filterPlatformSection":"平台","filterPlatformAll":"所有平台","filterPlatformAndroid":"安卓","filterEngineSection":"JS引擎","filterEngineAll":"所有发动机","filterEngineHermes":"赫尔墨斯","filterSortSection":"排序顺序","filterSortNewest":"最新的优先(默认)","filterSortOldest":"最旧的在前","filterDiscard":"丢弃","filterApply":"应用({{count}} 崩溃)","frameCopy":"复制","frameCopied":"已复制","componentHierarchy":"组件层次结构"},"socket":{"showingConnections":"显示 {{count}} 个连接","showingFilteredConnections":"显示 {{filtered}} / {{total}} 个连接","deletedCount":"已删除 {{count}} 个 WebSocket 日志","copiedUrls":"已复制 {{count}} 个 URL","webSocketTraffic":"WebSocket 流量({{count}} 个连接)","title":"WebSocket","messages":"留言","overview":"概述","params":"参数","rawAndCode":"原始和代码","totalFrames":"总帧数","sentRecv":"发送/接收","dataTransferred":"数据传输","searchFramesPlaceholder":"搜索帧有效负载或事件名称...","sent":"已发送","recv":"接收值","emptyFrames":"没有为此连接捕获任何帧","searchSocketsPlaceholder":"搜索 WebSocket URL 或消息...","noSockets":"无 WebSocket 连接","noSocketsDesc":"捕获的 WebSocket、Socket.IO 和 WSS 连接将实时显示在此处。","noMatching":"没有匹配的 WebSocket","adjustSearchFilter":"尝试调整您的搜索查询或过滤器芯片。","simulateTraffic":"模拟演示 WebSocket 流量","clearTitle":"清除所有 WebSocket 日志","clearMessage":"您确定要删除所有记录的 WebSocket 会话吗?","cleared":"所有 WebSocket 日志均已清除","deleteSelectedTitle":"删除选定的 WebSocket","deleteSelectedMsg":"您确定要删除 {{count}} 选定的 WebSocket 日志吗?","filterTitle":"过滤 WebSocket 连接"},"push":{"clearTitle":"清除推送历史","clearMessage":"确定要清除所有推送通知记录吗?","cleared":"推送通知历史已清除","foreground":"前台","background":"后台","quit":"已退出","title":"推送通知","preview":"预览","payload":"自定义有效负载","deliveryMetadata":"传递和消息元数据","rawPayload":"原始有效负载","link":"链接","appNotification":"应用程序通知","now":"现在","domainFields":"领域特定字段","searchPlaceholder":"搜索推送通知...","noNotifications":"无推送通知","noNotificationsDesc":"捕获的 Firebase FCM、Apple APNs、OneSignal 和自定义推送事件将实时显示在此处。","filterTitle":"过滤推送通知"},"about":{"title":"关于与规格","subtitle":"包信息、运行时规格和诊断数据","heroTitle":"应用内检查器","heroDescription":"为 React Native 和 Expo 应用设计的一体化设备端调试、日志记录和QA工具。","upToDate":"已是最新","versionAvailable":"v{{version}} 可用","copyUpgradeCommand":"复制升级命令 (v{{version}})","copiedUpgradeCommand":"已复制 npm 升级命令!","appInformation":"应用信息","appName":"应用名称","packageIdentifier":"包标识符","appVersion":"应用版本","environment":"环境","developmentDebug":"开发(调试)","productionRelease":"生产(发布)","platform":"平台","features":"检查器功能","featureNetwork":"网络流量监控","featureNetworkDesc":"检查 HTTP 和 HTTPS API 请求、响应、头部和服务器延迟。","featureConsole":"控制台日志","featureConsoleDesc":"实时查看控制台日志、警告和错误,包含格式化堆栈跟踪。","featureAnalytics":"分析遥测","featureAnalyticsDesc":"在设备上实时跟踪 Firebase 和自定义分析事件。","featureRedux":"Redux 状态和操作","featureReduxDesc":"检查分发的操作、有效载荷和状态树差异。","featureCapture":"屏幕和视频捕获","featureCaptureDesc":"截取屏幕截图并录制测试会话以与团队分享。","featureCrash":"崩溃捕获和诊断","featureCrashDesc":"防止原生崩溃并提供设备健康指标。","githubSub":"星标和源代码","npmRegistry":"NPM 注册表","npmRegistrySub":"包更新","documentation":"文档","documentationSub":"集成指南","reportIssue":"报告问题","reportIssueSub":"帮助和支持","releaseNotes":"版本说明","releaseNotesSub":"新功能","copyInstall":"复制安装","copyInstallSub":"npm / yarn 命令","copiedInstallCommand":"已复制包安装命令!","footerLicense":"React Native In-App Inspector · MIT 许可证","footerTagline":"零配置设备端调试工具","appleIos":"苹果iOS","googleAndroid":"谷歌安卓","github":"GitHub"},"codeSnippet":{"copy":"复制","copied":"复制了!","matchCount":"{{count}} 匹配","matchCount_plural":"{{count}} 匹配","noMatches":"没有匹配项","searchPlaceholder":"搜索...","prevMatch":"上一场比赛","nextMatch":"下一场比赛","clearSearch":"清除搜索"},"diffViewer":{"added":"添加了","removed":"已删除","changed":"改变了","noDiff":"没有差异","emptyTitle":"没有发现差异","emptySubtitle":"两个有效负载是相同的。"},"logCard":{"seeMore":"显示更多","seeLess":"显示较少","copy":"复制","copied":"复制了!"},"emptyState":{"title":"这里还什么都没有","subtitle":"当您使用该应用程序时,数据将显示在此处。","reload":"重新加载"},"errorBoundary":{"title":"出了点问题","message":"发生意外错误。","retry":"再试一次","reset":"重置","close":"关闭"},"mediaGallery":{"all":"全部 ({{count}})","photos":"照片","videos":"视频","gifs":"动图","purge":"清除 ({{size}})","purgeTitle":"清除所有媒体","purgeMessage":"这将永久删除所有{{count}}捕获的屏幕截图、视频和 GIF ({{size}})。继续?","noMediaTitle":"没有捕获的媒体","noMediaDesc":"使用工具栏中的“照片或视频录制”按钮捕获整个应用程序的屏幕截图、屏幕录制或 GIF。","deleted":"已删除的媒体项目","allPurged":"所有捕获的媒体均已清除","converting":"转换...","convertToGif":"转换为 GIF","playVideo":"播放视频","playError":"无法播放视频","convertedSuccess":"成功转换为 GIF 动画!","convertFailed":"转换为 GIF 失败","share":"分享","copyUri":"复制 URI","uriCopied":"文件 URI 已复制到剪贴板","delete":"删除","deleteSelected":"删除 ({{count}})","deleteSelectedTitle":"删除所选内容","deleteSelectedMessage":"您确定要删除 {{count}} 个选定的媒体项目吗?","deletedCount":"已删除 {{count}} 个媒体项目","deleteTitle":"删除媒体","deleteMessage":"您确定要删除 {{filename}} 吗?","shareUnavailable":"此设备上无法共享","showingResults":"显示 {{count}} 个结果","showingFilteredResults":"显示 {{count}} 个结果,共 {{total}} 个结果","selectedOfResults":"已选择 {{selected}} 个结果,共 {{total}} 个结果","minimize":"最小化","expand":"展开全屏","collapse":"退出全屏","speed":"速度","loop":"循环","pause":"暂停","play":"玩"},"debugging":{"title":"调试与工具","buildSuccess":"APK 构建生成成功!","buildFailed":"构建失败:{{error}}","buildCancelled":"构建被用户取消"}}
@@ -2,28 +2,28 @@ import React from 'react';
2
2
  import { NetworkInspectorProps } from './types';
3
3
  declare const NetworkInspectorWrapper: (props: NetworkInspectorProps) => React.JSX.Element;
4
4
  export default NetworkInspectorWrapper;
5
- export { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, addAxiosInterceptors, } from './customHooks/networkLogger';
6
- export { setupConsoleLogger, clearConsoleLogs, subscribeConsoleLogs, } from './customHooks/consoleLogger';
7
- export { setupAnalyticsLogger, logAnalyticsEvent, subscribeAnalyticsEvents, clearAnalyticsEvents, getCurrentUserProperties, getCurrentUserId, getDefaultEventParameters, getCollectionEnabled, } from './customHooks/analyticsLogger';
8
- export { setupGlobalCrashHandler, subscribeCrashEvents, emitCrashEvent, getCrashRecords, clearCrashRecords, simulateTestCrash, exportCrashReport, parseCrashStackTrace, recordCustomCrash, addCrashBreadcrumb, recordNavigationBreadcrumb, recordNetworkBreadcrumb, recordReduxBreadcrumb, recordUserActionBreadcrumb, computeCrashFingerprint, type CrashEventPayload, } from './customHooks/crashHandler';
5
+ export { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, addAxiosInterceptors, setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, getNetworkLogs, } from './customHooks/networkLogger';
6
+ export { setupConsoleLogger, clearConsoleLogs, subscribeConsoleLogs, setMaxConsoleLogsLimit, getMaxConsoleLogsLimit, pruneConsoleLogs, } from './customHooks/consoleLogger';
7
+ export { setupAnalyticsLogger, logAnalyticsEvent, subscribeAnalyticsEvents, clearAnalyticsEvents, getCurrentUserProperties, getCurrentUserId, getDefaultEventParameters, getCollectionEnabled, setMaxAnalyticsLogsLimit, getMaxAnalyticsLogsLimit, pruneAnalyticsLogs, } from './customHooks/analyticsLogger';
8
+ export { setupGlobalCrashHandler, subscribeCrashEvents, emitCrashEvent, getCrashRecords, clearCrashRecords, simulateTestCrash, exportCrashReport, parseCrashStackTrace, recordCustomCrash, addCrashBreadcrumb, recordNavigationBreadcrumb, recordNetworkBreadcrumb, recordReduxBreadcrumb, recordUserActionBreadcrumb, computeCrashFingerprint, getMaxCrashLogsLimit, pruneCrashRecords, type CrashEventPayload, } from './customHooks/crashHandler';
9
9
  export { default as CrashTab } from './components/Inspector/CrashTab';
10
10
  export { default as ErrorBoundary } from './components/ErrorBoundary';
11
- export { connectReduxStore, inspectorReduxMiddleware, getReduxState, subscribeReduxState, getActionHistory, clearActionHistory, getLastActionForReducer, } from './customHooks/reduxLogger';
11
+ export { connectReduxStore, inspectorReduxMiddleware, getReduxState, subscribeReduxState, getActionHistory, clearActionHistory, getLastActionForReducer, setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, isReduxConnected, } from './customHooks/reduxLogger';
12
12
  export { getEventCategory, registerGAPlugin, type GAPlugin, } from './helpers/gaAnalyticsRegistry';
13
13
  export { InspectLog, InspectTrackTime, InspectCatch, type InspectLogOptions, } from './decorators';
14
14
  export { getNativeDeviceMetrics, enableNativeCrashProtection, subscribeNativeCrashes, showNativeFloatingButton, hideNativeFloatingButton, setNativeFloatingButtonBadge, subscribeNativeFloatingButtonPress, subscribeNativeDeviceShake, startNativeFpsMonitoring, stopNativeFpsMonitoring, getNativeFpsMetrics, getNativeStorageItem, setNativeStorageItem, isNativeModuleAvailable, type NativeDeviceMetrics, type NativeCrashEvent, type FloatingButtonOptions, type NativeFpsMetrics, } from './native/NativeInspector';
15
15
  export { setupMemoryWarningHandler, pruneAllLogs, subscribeMemoryWarning, type MemoryPruneSummary, } from './helpers';
16
- export { setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
17
- export { setMaxConsoleLogsLimit, getMaxConsoleLogsLimit, pruneConsoleLogs, } from './customHooks/consoleLogger';
18
- export { setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, } from './customHooks/reduxLogger';
19
- export { setMaxAnalyticsLogsLimit, getMaxAnalyticsLogsLimit, pruneAnalyticsLogs, } from './customHooks/analyticsLogger';
20
- export { getMaxCrashLogsLimit, pruneCrashRecords, } from './customHooks/crashHandler';
21
16
  export { recordPushNotification, recordSalesforcePush, getPushRecords, clearPushRecords, subscribePushEvents, simulateTestPush, autoSetupPushLogger, setMaxPushRecordsLimit, getDiscoveredPushSources, prunePushRecords, } from './customHooks/pushNotificationLogger';
22
- export { shareApiReport, sharePushReport, shareCrashReport, shareAnalyticsReport, shareReduxReport, shareLogReport, formatApiReport, formatPushReport, formatCrashReport, formatAnalyticsReport, formatReduxReport, formatLogReport, } from './helpers/shareFormatter';
23
- export { BrandCircleIcon, BellIcon, CloudPushIcon, } from './components/NetworkIcons';
17
+ export { setupSocketLogger, clearSocketRecords, subscribeSocketRecords, getSocketRecords, setSocketModuleEnabled, getSocketModuleEnabled, setMaxSocketRecordsLimit, getMaxSocketRecordsLimit, pruneSocketRecords, recordSocketConnection, recordSocketFrame, recordSocketClose, recordSocketError, simulateTestSocket, analyzeSocketPayload, } from './customHooks/socketLogger';
18
+ export { default as SocketTab } from './components/Inspector/SocketTab';
19
+ export { default as SocketDetail } from './components/Inspector/SocketDetail';
20
+ export { default as SocketCard } from './components/Inspector/SocketCard';
21
+ export { shareApiReport, sharePushReport, shareSocketReport, shareCrashReport, shareAnalyticsReport, shareReduxReport, shareLogReport, formatApiReport, formatPushReport, formatSocketReport, formatCrashReport, formatAnalyticsReport, formatReduxReport, formatLogReport, } from './helpers/shareFormatter';
22
+ export { BrandCircleIcon, BrandSquareIcon, BellIcon, CloudPushIcon, WebsocketIcon, SocketIcon, } from './components/NetworkIcons';
24
23
  export { ModuleErrorBoundary, type ModuleErrorBoundaryProps, } from './components/ModuleErrorBoundary';
24
+ export { SkeletonPlaceholder, type SkeletonPlaceholderProps, } from './components/SkeletonPlaceholder';
25
25
  export { connectAsyncStorage, connectMMKV, isAsyncStorageConnected, isMMKVConnected, getRegisteredMMKVInstanceIds, fetchStorageEntries, setStorageEntry, removeStorageEntry, clearStorageDriver, subscribeToStorageChanges, type StorageEntry, type StorageDriver, } from './customHooks/storageInspector';
26
- export { ActiveTab, Method, StatusFilter, SortOrder, LocalFilter, ModalAnimationType, SettingsPage, SettingsSubTab, LogFilter, ConsoleLogType, AnalyticsEventSource, GAEventCategory, StackFrameType, DiffResultType, CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, PushAppState, PushActionType, PushDetailSubTab, PushFilterType, type PushNotificationRecord, type PushSource, type PushFilterState, type PushStats, } from './types';
26
+ export { ActiveTab, Method, StatusFilter, SortOrder, LocalFilter, ModalAnimationType, SettingsPage, SettingsSubTab, LogFilter, ConsoleLogType, AnalyticsEventSource, GAEventCategory, StackFrameType, DiffResultType, CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, PushAppState, PushActionType, PushDetailSubTab, PushFilterType, SocketStatus, SocketFrameDirection, SocketFrameType, SocketDetailSubTab, SocketFilterType, type PushNotificationRecord, type PushSource, type PushFilterState, type PushStats, type SocketConnectionRecord, type SocketFrame, type SocketFilterState, type SocketStats, } from './types';
27
27
  export { AppFonts, setAppFonts, type AppFontConfig, } from './styles/AppFonts';
28
28
  export { AppColors, setAppColors, getThemeColors, updateAppColorsTheme, } from './styles/AppColors';
29
29
  export { t, i18n, useTranslation, setLanguage, addTranslations, setTranslations, I18nextProvider, SUPPORTED_LANGUAGES, type SupportedLanguageCode, } from './i18n';