demeter
Autonomous Hydroponic Intelligencegit clone https://github.com/maydayv7/demeter
frontend/src/utils/translations.js (54359B)
1// Translations - English + Hindi
2
3const en = {
4 // Navigation & Sidebar
5 nav_crops: "Crops",
6 nav_alerts: "Alerts",
7 nav_analytics: "Analytics",
8 nav_intelligence: "Intelligence",
9 nav_settings: "Settings",
10 nav_help: "Help",
11 nav_system_online: "SYSTEM ONLINE",
12 nav_alert_status: "ALERT STATUS",
13 nav_crops_need_attention: "{n} crop{s} need attention",
14 nav_all_clear: "All clear",
15 nav_harvest_ready: "ЁЯМ╛ {n} ready to harvest",
16 sidebar_agri_ai: "AGRI┬╖AI┬╖v4",
17 sidebar_connecting: "CONNECTINGтАж",
18 sidebar_farm_online: "FARM ONLINE",
19 sidebar_no_data: "NO DATA",
20
21 // Landing Page
22 landing_hero_1: "The Farm",
23 landing_hero_2: "Thinks",
24 landing_hero_3: "For Itself.",
25 landing_hero_sub:
26 "Demeter is a cognitive hydroponic system. Seven specialized AI agents collaborate to perceive, reason, and act - optimizing your crops 24/7 without human intervention.",
27 landing_enter_dash: "Enter Dashboard",
28 landing_intelligence: "Intelligence",
29 landing_active_crops: "Active Crops",
30 landing_crop_types: "Crop Types",
31 landing_total_cycles: "Total Cycles",
32 landing_active_alerts: "Active Alerts",
33 landing_capabilities: "// CORE CAPABILITIES",
34 landing_live_feed: "demeter://live-feed",
35 landing_feature_rl: "Reinforcement Learning",
36 landing_feature_rl_desc: "Contextual bandit that learns with every cycle",
37 landing_feature_cv: "Computer Vision",
38 landing_feature_cv_desc: "Azure CV-powered disease detection",
39 landing_feature_vector: "Vector Memory",
40 landing_feature_vector_desc: "Qdrant-backed long-term plant biographies",
41 landing_feature_sim: "Physics Simulation",
42 landing_feature_sim_desc: "LLM-based digital twin before every action",
43 landing_optimal: "тЧП OPTIMAL",
44 landing_alert: "тЧП ALERT",
45 landing_recent_activity: "RECENT AGENT ACTIVITY",
46 landing_no_cycles:
47 "No cycles recorded yet. Run the agent loop to see activity.",
48
49 // Dashboard
50 dash_title: "Crops Overview",
51 dash_subtitle: "{filtered} of {total} crops shown",
52 dash_add_crop: "Add Crop",
53 dash_search_placeholder: "Search crops, IDs, stagesтАж",
54 dash_filters: "Filters",
55 dash_clear_all: "Clear all",
56 dash_healthy: "Healthy",
57 dash_attention: "Attention",
58 dash_critical: "Critical",
59 dash_maturity: "Maturity",
60 dash_days_left: "{n}d left",
61 dash_ready: "Ready",
62 dash_no_crops: "No crops yet",
63 dash_no_crops_sub: "Start by adding your first crop batch",
64 dash_add_first: "Add Your First Crop",
65 dash_no_match: "No crops match your filters",
66 dash_clear_filters: "Clear filters",
67 dash_harvest_banner: "{n} crop{s} ready to harvest!",
68 dash_harvest_badge: "HARVEST READY",
69 dash_harvest_banner_sub: "Tap a crop card to view details and plan harvest",
70 dash_harvest_action: "View Ready Crops",
71 dash_status_growing: "Growing",
72
73 // Crop Details
74 details_not_found: "Crop not found",
75 details_live: "LIVE",
76 details_tab_overview: "Overview",
77 details_tab_sensors: "Sensors",
78 details_tab_log: "Log",
79 details_ai_reasoning: "AI DECISION REASONING",
80 details_chain_thought:
81 "Chain-of-thought log generated by the Explainer agent",
82 details_expand: "Expand",
83 details_collapse: "Collapse",
84 details_pending_exp:
85 "Explanation will be generated after the agent completes its first analysis cycle for this crop.",
86 details_hist_ph: "HISTORICAL pH TRACE",
87 details_latest_cmd: "LATEST ACTUATOR COMMAND",
88 details_temp_hum: "TEMP & HUMIDITY",
89 details_ec_conc: "EC CONCENTRATION",
90 details_event_log: "EVENT LOG - {total} ENTRIES (showing last {limit})",
91 details_hide: "Hide",
92 details_why: "Why?",
93 details_more_lines: "+ {n} more lines",
94
95 // CropDetails - Info tab
96 details_tab_info: "Info",
97 details_planted: "Planted",
98 details_cycle_duration: "Cycle Duration",
99 details_location: "Location",
100 details_total_sequences: "Total Sequences",
101 details_sensor_hardware: "SENSOR HARDWARE",
102 details_sensor_online: "Online",
103 details_days_since: "{n} days since planting",
104 details_days_remain: "{n} days remaining",
105 details_notes: "Notes",
106 details_run_cycle_btn: "Run Agent Cycle",
107 details_lifecycle_progress: "Lifecycle Progress",
108 details_hours_per_cycle: "{n}h per cycle",
109
110 // Agent Widgets
111 widget_acid: "Acid Dosage",
112 widget_base: "Base Dosage",
113 widget_nutrients: "Nutrients",
114 widget_fan: "Fan Speed",
115 widget_water: "Water Refill",
116 widget_ph_down: "pH Down",
117 widget_ph_up: "pH Up",
118 widget_ec_boost: "EC Boost",
119 widget_airflow: "Airflow",
120 widget_dilution: "Dilution",
121 outcome_improved: "IMPROVED",
122 outcome_deteriorated: "DETERIORATED",
123 outcome_stable: "STABLE",
124 reward_label: "Reward",
125
126 // Stages
127 stage_all: "All",
128 stage_seedling: "Seedling",
129 stage_vegetative: "Vegetative",
130 stage_flowering: "Flowering",
131 stage_fruiting: "Fruiting",
132
133 // Sensor readings
134 sensor_temp: "Temperature",
135 sensor_ph: "pH Level",
136 sensor_ec: "EC",
137 sensor_humidity: "Humidity",
138 sensor_ph_desc: "Water acidity - ideal range: 5.5 to 6.5",
139 sensor_ec_desc: "Nutrient strength in water - ideal: 0.8 to 2.5 dS/m",
140 sensor_temp_desc: "Air temperature - ideal: 18┬░C to 28┬░C",
141 sensor_humidity_desc: "Moisture in air - ideal: 40% to 80%",
142
143 // Add Crop
144 add_title: "Register New Crop",
145 add_subtitle: "Register a new crop batch in the system",
146 add_plant_image: "PLANT IMAGE",
147 add_drop_image: "Drop crop image here",
148 add_image_hint: "PNG or JPG ┬╖ helps AI detect disease",
149 add_sensor_params: "SENSOR READINGS",
150 add_start: "Start Monitoring",
151 add_running: "AI RunningтАж",
152 add_run_another: "Run Another Cycle",
153 add_view_dashboard: "Go to Dashboard",
154 add_run_next: "Run Next Cycle",
155 add_cycle_done: "Cycle complete - crop registered тЬУ",
156 add_cycle_fail: "Failed to connect to agent pipeline",
157 add_cycles_done: "{n} CYCLE{s} DONE",
158 add_field_location: "Location",
159 add_field_location_hint: "Where this crop is physically placed",
160 add_field_location_placeholder: "e.g. Rack A - Shelf 3",
161 add_field_notes: "Notes",
162 add_field_notes_placeholder: "Optional notes about this crop batch",
163 add_auto_cycle_duration: "Cycle Duration (auto)",
164 add_auto_cycle_hint:
165 "Auto-determined based on crop type: {crop} cycles every {hours}h",
166 add_register_btn: "Register Crop",
167 add_registering: "Creating...",
168 add_register_success: "Crop registered successfully!",
169 add_run_first_cycle: "Run First Cycle",
170 add_lifecycle_label: "Growth Timeline",
171 add_crop_id_exists: "This Crop ID already exists",
172
173 // Add Crop fields
174 add_field_ph: "pH Level",
175 add_field_ec: "EC (Nutrient Strength)",
176 add_field_temp: "Temperature (┬░C)",
177 add_field_humidity: "Humidity (%)",
178 add_field_crop_type: "Crop Type",
179 add_field_stage: "Growth Stage",
180 add_field_crop_id: "Batch / Crop ID",
181 add_field_stage_hint:
182 "Seedling = just planted ┬╖ Vegetative = growing leaves ┬╖ Flowering = making flowers ┬╖ Fruiting = making fruit",
183 add_field_crop_id_hint:
184 "Give this crop batch a unique name so you can track it easily",
185 add_field_crop_id_placeholder: "e.g. Batch_A1 (optional)",
186
187 // Add Crop pipeline phases & logs
188 add_phase_fetch: "Fetch",
189 add_phase_judge: "Judge",
190 add_phase_strategy: "Strategy",
191 add_phase_research: "Research",
192 add_phase_plan: "Plan",
193 add_phase_execute: "Execute",
194 add_log_live: "AGENT PIPELINE - LIVE",
195 add_log_done: "CYCLE COMPLETE",
196 add_log_idle: "PIPELINE LOG",
197 add_log_lines: "{n} lines",
198 add_actuator_dispatched: "ACTUATOR COMMANDS DISPATCHED",
199
200 // Run Cycle page
201 run_title: "Run Agent Cycle",
202 run_subtitle: "Execute AI monitoring cycle for {crop}",
203 run_for_crop: "Running for: {crop}",
204 run_loading_crop: "Loading cropтАж",
205 run_growth_progress: "Growth Progress",
206 run_streaming: "STREAMING",
207 run_log_waiting: "Waiting for agent outputтАж",
208 run_cycles_complete: "{n} cycle{s} completed",
209 run_agents_working: "Agents WorkingтАж",
210 run_harvest_ready: "тЬВ Ready to harvest",
211 run_days_until: "{n}d until harvest",
212
213 // Alerts
214 alerts_title: "Alerts",
215 alerts_subtitle_loading: "Analyzing sensor historyтАж",
216 alerts_subtitle: "{unacked} unacknowledged ┬╖ {total} total",
217 alerts_ack_all: "Ack all",
218 alerts_ack_all_btn: "Acknowledge All",
219 alerts_unacked: "UNACKNOWLEDGED ┬╖ {n}",
220 alerts_acknowledged: "ACKNOWLEDGED ┬╖ {n}",
221 alerts_empty_connected: "All clear for the selected filter",
222 alerts_empty_nodata: "No data loaded - connect your farm and run some cycles",
223 alerts_unacked_only: "Unacked only",
224 alerts_show_all: "All",
225 alerts_filter_harvest: "ЁЯМ╛ Harvest",
226 alerts_filter_warning: "Warning",
227 alerts_filter_info: "Info",
228 alerts_crop_label: "Crop: {crop}",
229 alerts_severity_critical: "CRITICAL",
230 alerts_severity_warning: "WARNING",
231 alerts_severity_info: "INFO",
232 alerts_severity_harvest: "HARVEST",
233
234 // Alert titles & descriptions
235 alert_harvest_title: "Crop ready for harvest",
236 alert_harvest_desc:
237 "{crop} ({id}) has reached {pct}% maturity - time to harvest!",
238 alert_ph_low_title: "pH critically low",
239 alert_ph_low_desc:
240 "{crop} ({id}): pH at {val} - immediate base dosing required.",
241 alert_ph_high_title: "pH critically high",
242 alert_ph_high_desc:
243 "{crop} ({id}): pH at {val} - acid dosing required immediately.",
244 alert_ec_high_title: "EC dangerously high",
245 alert_ec_high_desc:
246 "{crop} ({id}): EC at {val} dS/m - severe nutrient burn risk.",
247 alert_temp_cold_title: "Temperature too cold",
248 alert_temp_cold_desc:
249 "{crop} ({id}): Air temp at {val}┬░C - root damage risk.",
250 alert_temp_hot_title: "Temperature too hot",
251 alert_temp_hot_desc:
252 "{crop} ({id}): Air temp at {val}┬░C - heat stress and root rot risk.",
253 alert_disease_title: "Disease or pest detected",
254 alert_disease_desc: '{crop} ({id}): Visual anomaly. Outcome: "{outcome}"',
255 alert_cycle_fail_title: "Cycle failure recorded",
256 alert_cycle_fail_desc: '{crop} ({id}): Seq #{seq} outcome: "{outcome}"',
257 alert_ph_warn_low_title: "pH below optimal range",
258 alert_ph_warn_desc: "{crop} ({id}): pH at {val}. Target 5.5-6.5.",
259 alert_ph_warn_high_title: "pH above optimal range",
260 alert_ec_warn_title: "EC approaching high limit",
261 alert_ec_warn_desc:
262 "{crop} ({id}): EC at {val} dS/m - nutrient burn risk increasing.",
263 alert_temp_warn_low_title: "Temperature on the low side",
264 alert_temp_warn_low_desc: "{crop} ({id}): {val}┬░C - slow growth expected.",
265 alert_temp_warn_high_title: "Temperature elevated",
266 alert_temp_warn_high_desc: "{crop} ({id}): {val}┬░C - heat stress likely.",
267 alert_deteriorating_title: "Condition deteriorating",
268 alert_deteriorating_desc: '{crop} ({id}): Seq #{seq} - "{outcome}"',
269 alert_cycle_done_title: "Cycle #{seq} completed",
270 alert_cycle_done_desc: "{crop} ({id}): Sequence stored. {extra}",
271
272 // Analytics
273 analytics_title: "Analytics",
274 analytics_subtitle_loading: "LoadingтАж",
275 analytics_subtitle: "{points} data points across {crops} crops",
276 analytics_export: "Export CSV",
277 analytics_avg_ph: "AVG pH",
278 analytics_avg_ec: "AVG EC",
279 analytics_avg_temp: "AVG TEMP",
280 analytics_total_seq: "TOTAL SEQUENCES",
281 analytics_vs_prior: "% vs prior",
282 analytics_trace: "{range} TRACE",
283 analytics_ph_over_time: "pH Over Time",
284 analytics_ec_conc: "EC Concentration",
285 analytics_temp_hum: "Temperature & Humidity",
286 analytics_daily_act: "DAILY ACTIVITY",
287 analytics_seq_per_day: "Sequences Logged per Day",
288 analytics_param_health: "PARAMETER HEALTH",
289 analytics_in_range_score: "In-Range Score (%)",
290 analytics_per_crop: "PER CROP",
291 analytics_latest_sensor: "Latest Sensor Summary",
292 analytics_derived_act: "DERIVED FROM STORED ACTIONS",
293 analytics_agent_act: "Agent Activity",
294 analytics_no_data_range: "Not enough data for this range",
295 analytics_no_data_days: "Need 2+ days of data",
296 analytics_no_data_points: "Not enough data points",
297 analytics_th_crop_id: "Crop ID",
298 analytics_th_type: "Type",
299 analytics_th_stage: "Stage",
300 analytics_th_ph: "pH",
301 analytics_th_ec: "EC",
302 analytics_th_temp: "Temp",
303 analytics_th_seq: "Sequences",
304 analytics_th_agent: "Agent",
305 analytics_th_apps: "Appearances",
306 analytics_th_success: "Success Rate",
307 analytics_th_status: "Status",
308 analytics_online: "ONLINE",
309
310 // Charts
311 chart_temp: "Temp ┬░C",
312 chart_humidity: "Humidity %",
313 chart_ec: "EC dS/m",
314 chart_ph: "pH",
315 chart_sequences: "Sequences",
316 chart_in_range: "In-range %",
317
318 // Intelligence
319 intel_title: "Farm Intelligence",
320 intel_subtitle: "Query your crops ┬╖ Ask Demeter anything ┬╖ Explore patterns",
321 intel_search: "Search",
322 intel_ask_ai: "Ask AI",
323 intel_total_crops: "Total Crops",
324 intel_healthy: "Healthy",
325 intel_needs_attention: "Needs Attention",
326 intel_critical: "Critical",
327 intel_fleet_wide: "FLEET-WIDE",
328 intel_crop_aware: "CROP-AWARE",
329 intel_search_placeholder: "Search crops - 'Show all Tomato'...",
330 intel_ask_placeholder_fleet:
331 "Ask anything about your farm - decisions, trends...",
332 intel_ask_placeholder_crop: "Ask anything about {crop}тАж",
333 intel_filter_by: "FILTER BY:",
334 intel_ask_about: "ASK ABOUT:",
335 intel_context_loaded: "Context loaded",
336 intel_heard: "Heard:",
337 intel_suggested_global: "QUICK QUERIES",
338 intel_suggested_crop: "SUGGESTED QUESTIONS FOR {crop}",
339 intel_results_found: "{n} RESULT{s} FOUND",
340 intel_no_results: "NO RESULTS",
341 intel_view_logic: "View query logic",
342 intel_hide_logic: "Hide query logic",
343 intel_qdrant_filter: "QDRANT FILTER",
344 intel_no_match: "No crops matched",
345 intel_try_ask: "Try Ask AI instead",
346 intel_empty_ask_title: "Ask Demeter anything about your farm",
347 intel_empty_search_title: "Search your crop database",
348 intel_empty_ask_desc:
349 "Select a specific crop for targeted questions, or ask fleet-wide questions. The AI uses live sensor data, agent decisions, and explanation logs to answer.",
350 intel_empty_search_desc:
351 "Use natural language to filter crops by type, stage, status or outcome. The supervisor translates your query into precise database filters.",
352 intel_ai_reasoning: "THINKING PROCESS",
353 intel_steps: "{n} steps",
354 intel_similar_crops: "SIMILAR CROPS IN DATABASE",
355 intel_match: "{n}% match",
356 intel_last_cmd: "LAST COMMAND",
357 intel_all_crops_filter: "All Crops",
358 intel_all_crops_desc: "Fleet-wide query",
359 intel_thinking: "Thinking",
360 intel_demeter: "Demeter",
361 intel_select_crop: "Select a crop ({n} total)",
362 intel_fleet_query: "Query across all crops",
363 intel_logic_header: "Query Translation Logic",
364 intel_query_logic: "Query Logic",
365 intel_no_response: "No response generated.",
366 intel_llm_fail: "Failed to get a response. Please check your connection.",
367 intel_llm_fail_toast: "LLM query failed",
368 intel_search_fail_toast: "Search failed",
369 intel_context: "Context",
370
371 // Suggested questions
372 sug_g1: "Show all crops",
373 sug_g2: "Which crops are critical?",
374 sug_g3: "Find crops in flowering stage",
375 sug_g4: "List recent negative outcomes",
376 sug_g5: "Show Tomato batches",
377 sug_g6: "Find crops with high EC",
378 sug_c1: "Why did we take the last decision for {crop}?",
379 sug_c2: "Explain the current action for {crop}",
380 sug_c3: "Is {crop} performing well?",
381 sug_c4: "What should I watch out for with {crop}?",
382 sug_c5: "How has {crop} been trending lately?",
383 sug_c6: "Compare {crop} to similar crops",
384
385 // Settings
386 settings_title: "Settings",
387 settings_subtitle: "Preferences, appearance & account",
388 settings_save: "Save Changes",
389 settings_reset: "Reset",
390 settings_saved: "Saved!",
391 settings_profile: "Profile",
392 settings_profile_sub: "Your name and role shown in the sidebar",
393 settings_display_name: "Display Name",
394 settings_designation: "Designation",
395 settings_initials: "Initials",
396 settings_initials_hint: "Shown in the sidebar avatar (max 2 chars)",
397 settings_appearance: "Appearance",
398 settings_appearance_sub: "Theme and display options",
399 settings_theme: "Theme",
400 settings_theme_hint: "Controls the overall color scheme of the application",
401 settings_dark: "Dark",
402 settings_light: "Light",
403 settings_system: "System",
404 settings_compact: "Compact Mode",
405 settings_compact_hint: "Reduces spacing for denser information display",
406 settings_language: "Language / рднрд╛рд╖рд╛",
407 settings_language_sub: "Choose your preferred display language",
408 settings_lang_en: "English",
409 settings_lang_hi: "рд╣рд┐рдВрджреА (Hindi)",
410 settings_display_section: "Display",
411 settings_display_sub: "Pagination and results",
412 settings_max_crops: "Max Crops Per Page",
413 settings_max_crops_hint: "Dashboard grid page size",
414 settings_history_limit: "History Log Limit",
415 settings_history_hint: "Max entries shown in crop event log",
416 settings_alerts_section: "Alerts",
417 settings_alerts_sub: "Notification preferences",
418 settings_show_acked: "Show Acknowledged Alerts by Default",
419 settings_data_source: "Data Source",
420 settings_data_sub: "Backend connection settings",
421 settings_mock_mode: "Mock Data Mode",
422 settings_live_mode: "Live Backend Connected",
423 settings_mock_hint:
424 "To connect to live data, set USE_MOCK_DATA = false in src/data/mockData.js",
425 settings_onboarding: "Help & Onboarding",
426 settings_onboarding_sub: "Restart the welcome guide",
427 settings_restart_onboarding: "Restart Guide",
428
429 // Help
430 help_title: "Help & Glossary",
431 help_subtitle: "Everything you need to know - explained simply",
432 help_section_terms: "ЁЯУК Sensor Terms Explained",
433 help_section_agents: "ЁЯдЦ How AI Works for You",
434 help_section_stages: "ЁЯМ▒ Growth Stages",
435 help_section_manual: "ЁЯЦР When You Need to Act",
436 help_section_ai_cta: "Still have questions?",
437 help_ai_cta_desc: "Ask our Farm Intelligence AI anything about your crops",
438 help_ai_cta_btn: "Ask AI тЖТ",
439 help_range_label: "Ideal Range",
440 help_low_label: "Too Low",
441 help_high_label: "Too High",
442 help_ai_label: "AI Auto-Action",
443 help_manual_label: "Manual Needed When",
444 help_agri_label: "Why It Matters",
445 help_tab_simple: "Simple",
446 help_tab_detail: "Detailed",
447
448 // Onboarding
449 onboarding_step: "Step {n} of {total}",
450 onboarding_skip: "Skip",
451 onboarding_next: "Next",
452 onboarding_finish: "Get Started!",
453 onboarding_s1_title: "Welcome to Demeter! ЁЯМ▒",
454 onboarding_s1_desc:
455 "Your smart farm assistant. Demeter automatically monitors your crops and adjusts water, nutrients, and temperature - 24 hours a day. No manual work needed.",
456 onboarding_s2_title: "Your Crop Dashboard",
457 onboarding_s2_desc:
458 "See all your crops at a glance. Each card shows the health of that crop:\n\nЁЯЯв Green (Healthy) - Everything is fine\nЁЯЯб Yellow (Attention) - Needs checking\nЁЯФ┤ Red (Critical) - Act immediately",
459 onboarding_s3_title: "Adding a Crop",
460 onboarding_s3_desc:
461 'Tap "Add Crop" to register a new batch. Choose the crop type (Lettuce, Tomato, Basil, or Strawberry), give it a unique ID, and the system will set up everything automatically - cycle duration, default sensors, and growth tracking. Once registered, you can run AI monitoring cycles from the crop\'s detail page.',
462 onboarding_s4_title: "Alerts Keep You Informed",
463 onboarding_s4_desc:
464 "When a crop needs attention, a red number appears on the Alerts menu. Check it daily to keep your crops healthy. Critical alerts should be addressed immediately!",
465 onboarding_s5_title: "Harvest Time ЁЯМ╛",
466 onboarding_s5_desc:
467 'When a crop is ready to harvest, a special banner will appear on your dashboard. The crop card will show a "HARVEST READY" badge so you never miss the right moment.',
468 onboarding_s6_title: "Always Here to Help",
469 onboarding_s6_desc:
470 "Stuck on a farming term or need quick advice? Check out our Help & Glossary for simple explanations, or ask our Farm Intelligence AI for instant, personalized guidance.",
471
472 // Common
473 common_loading: "LoadingтАж",
474 common_back: "Back",
475 common_enabled: "Enabled",
476 common_disabled: "Disabled",
477 common_showing_all: "Showing all",
478 common_hiding_acked: "Hiding acknowledged",
479 common_per_page: "per page",
480 common_last: "Last",
481 common_entries: "entries",
482 common_live: "LIVE",
483 common_all: "All",
484 common_crop: "Crop",
485 common_unknown: "Unknown",
486 common_time_just_now: "just now",
487 common_time_min_ago: "{n} min ago",
488 common_time_hr_ago: "{n} hr ago",
489 common_time_day_ago: "1 day ago",
490 common_time_days_ago: "{n} days ago",
491};
492
493const hi = {
494 // Navigation & Sidebar
495 nav_crops: "рдлрд╕рд▓реЗрдВ",
496 nav_alerts: "рдЕрд▓рд░реНрдЯ",
497 nav_analytics: "рд╡рд┐рд╢реНрд▓реЗрд╖рдг",
498 nav_intelligence: "рдмреБрджреНрдзрд┐рдорддреНрддрд╛",
499 nav_settings: "рд╕реЗрдЯрд┐рдВрдЧреНрд╕",
500 nav_help: "рд╕рд╣рд╛рдпрддрд╛",
501 nav_system_online: "рд╕рд┐рд╕реНрдЯрдо рдЪрд╛рд▓реВ рд╣реИ",
502 nav_alert_status: "рдЕрд▓рд░реНрдЯ рд╕реНрдерд┐рддрд┐",
503 nav_crops_need_attention: "{n} рдлрд╕рд▓{s} рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ",
504 nav_all_clear: "рд╕рдм рдареАрдХ рд╣реИ",
505 nav_harvest_ready: "ЁЯМ╛ {n} рдХрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░",
506 sidebar_agri_ai: "рдХреГрд╖рд┐┬╖рдПрдЖрдИ┬╖v2",
507 sidebar_connecting: "рдЬреБрдбрд╝ рд░рд╣рд╛ рд╣реИтАж",
508 sidebar_farm_online: "рдлрд╛рд░реНрдо рдСрдирд▓рд╛рдЗрди",
509 sidebar_no_data: "рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ",
510
511 // Landing Page
512 landing_hero_1: "рдпрд╣ рдлрд╛рд░реНрдо",
513 landing_hero_2: "рдЦреБрдж",
514 landing_hero_3: "рд╕реЛрдЪрддрд╛ рд╣реИред",
515 landing_hero_sub:
516 "рдбреЗрдореАрдЯрд░ рдПрдХ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рд╣рд╛рдЗрдбреНрд░реЛрдкреЛрдирд┐рдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИред рд╕рд╛рдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ AI рдПрдЬреЗрдВрдЯ рдПрдХ рд╕рд╛рде рдорд┐рд▓рдХрд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рд╕рдордЭрддреЗ рд╣реИрдВ рдФрд░ 24/7 рдЖрдкрдХреА рдлрд╕рд▓реЛрдВ рдХреЛ рдЗрд╖реНрдЯрддрдо рдХрд░рддреЗ рд╣реИрдВ - рдмрд┐рдирд╛ рдХрд┐рд╕реА рдорд╛рдирд╡реАрдп рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗред",
517 landing_enter_dash: "рдбреИрд╢рдмреЛрд░реНрдб рдЦреЛрд▓реЗрдВ",
518 landing_intelligence: "рдмреБрджреНрдзрд┐рдорддреНрддрд╛",
519 landing_active_crops: "рд╕рдХреНрд░рд┐рдп рдлрд╕рд▓реЗрдВ",
520 landing_crop_types: "рдлрд╕рд▓реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░",
521 landing_total_cycles: "рдХреБрд▓ рдЪрдХреНрд░",
522 landing_active_alerts: "рд╕рдХреНрд░рд┐рдп рдЕрд▓рд░реНрдЯ",
523 landing_capabilities: "// рдореБрдЦреНрдп рдХреНрд╖рдорддрд╛рдПрдВ",
524 landing_live_feed: "рдбреЗрдореАрдЯрд░://рд▓рд╛рдЗрд╡-рдлреАрдб",
525 landing_feature_rl: "рд╕реБрджреГрдвреАрдХрд░рдг рд╕реАрдЦрдирд╛ (RL)",
526 landing_feature_rl_desc: "рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмреИрдВрдбрд┐рдЯ рдЬреЛ рд╣рд░ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рд╕реАрдЦрддрд╛ рд╣реИ",
527 landing_feature_cv: "рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬрди",
528 landing_feature_cv_desc: "Azure CV рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдмреАрдорд╛рд░реА рдкрд╣рдЪрд╛рди",
529 landing_feature_vector: "рд╡реЗрдХреНрдЯрд░ рдореЗрдореЛрд░реА",
530 landing_feature_vector_desc: "Qdrant рдЖрдзрд╛рд░рд┐рдд рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдкреМрдзреЗ рдХреА рдЬреАрд╡рдирд┐рдпрд╛рдВ",
531 landing_feature_sim: "рднреМрддрд┐рдХреА рд╕рд┐рдореБрд▓реЗрд╢рди",
532 landing_feature_sim_desc: "рд╣рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдкрд╣рд▓реЗ LLM-рдЖрдзрд╛рд░рд┐рдд рдбрд┐рдЬрд┐рдЯрд▓ рдЬреБрдбрд╝рд╡рд╛рдВ",
533 landing_optimal: "тЧП рдЗрд╖реНрдЯрддрдо",
534 landing_alert: "тЧП рдЕрд▓рд░реНрдЯ",
535 landing_recent_activity: "рд╣рд╛рд▓ рдХреА рдПрдЬреЗрдВрдЯ рдЧрддрд┐рд╡рд┐рдзрд┐",
536 landing_no_cycles: "рдЕрднреА рддрдХ рдХреЛрдИ рдЪрдХреНрд░ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред",
537
538 // Dashboard
539 dash_title: "рдлрд╕рд▓реЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди",
540 dash_subtitle: "{total} рдореЗрдВ рд╕реЗ {filtered} рдлрд╕рд▓реЗрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИрдВ",
541 dash_add_crop: "рдлрд╕рд▓ рдЬреЛрдбрд╝реЗрдВ",
542 dash_search_placeholder: "рдлрд╕рд▓ рдЦреЛрдЬреЗрдВ...",
543 dash_filters: "рдлрд╝рд┐рд▓реНрдЯрд░",
544 dash_clear_all: "рд╕рднреА рд╣рдЯрд╛рдПрдВ",
545 dash_healthy: "рд╕реНрд╡рд╕реНрде",
546 dash_attention: "рдзреНрдпрд╛рди рджреЗрдВ",
547 dash_critical: "рдЧрдВрднреАрд░",
548 dash_maturity: "рдкрд░рд┐рдкрдХреНрд╡рддрд╛",
549 dash_days_left: "{n} рджрд┐рди рдмрд╛рдХреА",
550 dash_ready: "рддреИрдпрд╛рд░",
551 dash_no_crops: "рдХреЛрдИ рдлрд╕рд▓ рдирд╣реАрдВ",
552 dash_no_crops_sub: "рдЕрдкрдиреА рдкрд╣рд▓реА рдлрд╕рд▓ рдЬреЛрдбрд╝рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ",
553 dash_add_first: "рдкрд╣рд▓реА рдлрд╕рд▓ рдЬреЛрдбрд╝реЗрдВ",
554 dash_no_match: "рдХреЛрдИ рдлрд╕рд▓ рдирд╣реАрдВ рдорд┐рд▓реА",
555 dash_clear_filters: "рдлрд╝рд┐рд▓реНрдЯрд░ рд╣рдЯрд╛рдПрдВ",
556 dash_harvest_banner: "{n} рдлрд╕рд▓{s} рдХрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░!",
557 dash_harvest_badge: "рдХрдЯрд╛рдИ рддреИрдпрд╛рд░",
558 dash_harvest_banner_sub: "рдлрд╕рд▓ рдХрд╛рд░реНрдб рджрдмрд╛рдПрдВ рдФрд░ рдХрдЯрд╛рдИ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ",
559 dash_harvest_action: "рддреИрдпрд╛рд░ рдлрд╕рд▓реЗрдВ рджреЗрдЦреЗрдВ",
560 dash_status_growing: "рдмрдврд╝ рд░рд╣реА рд╣реИ",
561
562 // Crop Details
563 details_not_found: "рдлрд╕рд▓ рдирд╣реАрдВ рдорд┐рд▓реА",
564 details_live: "рд▓рд╛рдЗрд╡",
565 details_tab_overview: "рдЕрд╡рд▓реЛрдХрди",
566 details_tab_sensors: "рд╕реЗрдВрд╕рд░",
567 details_tab_log: "рд▓реЙрдЧ",
568 details_ai_reasoning: "AI рдирд┐рд░реНрдгрдп рддрд░реНрдХ",
569 details_chain_thought: "рдПрдХреНрд╕реНрдкреНрд▓реЗрдирд░ рдПрдЬреЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд┐рдЪрд╛рд░-рд╢реНрд░реГрдВрдЦрд▓рд╛",
570 details_expand: "рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ",
571 details_collapse: "рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░реЗрдВ",
572 details_pending_exp:
573 "рдПрдЬреЗрдВрдЯ рдХреЗ рдкрд╣рд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред",
574 details_hist_ph: "рдРрддрд┐рд╣рд╛рд╕рд┐рдХ pH рдЧреНрд░рд╛рдл",
575 details_latest_cmd: "рдирд╡реАрдирддрдо рдПрдХреНрдЪреБрдПрдЯрд░ рдХрдорд╛рдВрдб",
576 details_temp_hum: "рддрд╛рдкрдорд╛рди рдФрд░ рдирдореА",
577 details_ec_conc: "EC рд╕рд╛рдВрджреНрд░рддрд╛",
578 details_event_log:
579 "рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ - {total} рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ (рдЕрдВрддрд┐рдо {limit} рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ)",
580 details_hide: "рдЫрд┐рдкрд╛рдПрдВ",
581 details_why: "рдХреНрдпреЛрдВ?",
582 details_more_lines: "+ {n} рдФрд░ рдкрдВрдХреНрддрд┐рдпрд╛рдВ",
583
584 // CropDetails - Info tab
585 details_tab_info: "рдЬрд╛рдирдХрд╛рд░реА",
586 details_planted: "рдмреЛрдпрд╛ рдЧрдпрд╛",
587 details_cycle_duration: "рдЪрдХреНрд░ рдЕрд╡рдзрд┐",
588 details_location: "рд╕реНрдерд╛рди",
589 details_total_sequences: "рдХреБрд▓ рдЕрдиреБрдХреНрд░рдо",
590 details_sensor_hardware: "рд╕реЗрдВрд╕рд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░",
591 details_sensor_online: "рдСрдирд▓рд╛рдЗрди",
592 details_days_since: "{n} рджрд┐рди рдмреЛрдиреЗ рдХреЗ рдмрд╛рдж",
593 details_days_remain: "{n} рджрд┐рди рд╢реЗрд╖",
594 details_notes: "рдиреЛрдЯреНрд╕",
595 details_run_cycle_btn: "рдПрдЬреЗрдВрдЯ рдЪрдХреНрд░ рдЪрд▓рд╛рдПрдВ",
596 details_lifecycle_progress: "рдЬреАрд╡рдирдЪрдХреНрд░ рдкреНрд░рдЧрддрд┐",
597 details_hours_per_cycle: "рдкреНрд░рддрд┐ рдЪрдХреНрд░ {n} рдШрдВрдЯреЗ",
598
599 // Agent Widgets
600 widget_acid: "рдПрд╕рд┐рдб рдЦреБрд░рд╛рдХ",
601 widget_base: "рдмреЗрд╕ рдЦреБрд░рд╛рдХ",
602 widget_nutrients: "рдкреЛрд╖рдХ рддрддреНрд╡",
603 widget_fan: "рдкрдВрдЦреЗ рдХреА рдЧрддрд┐",
604 widget_water: "рдкрд╛рдиреА рднрд░рдирд╛",
605 widget_ph_down: "pH рдХрдо рдХрд░реЗрдВ",
606 widget_ph_up: "pH рдмрдврд╝рд╛рдПрдВ",
607 widget_ec_boost: "EC рдмрдврд╝рд╛рдПрдВ",
608 widget_airflow: "рд╣рд╡рд╛ рдХрд╛ рдмрд╣рд╛рд╡",
609 widget_dilution: "рдкрддрд▓рд╛рдкрди",
610 outcome_improved: "рд╕реБрдзрд╛рд░ рд╣реБрдЖ",
611 outcome_deteriorated: "рд╕реНрдерд┐рддрд┐ рдмрд┐рдЧрдбрд╝реА",
612 outcome_stable: "рд╕реНрдерд┐рд░",
613 reward_label: "рдЗрдирд╛рдо",
614
615 // Stages
616 stage_all: "рд╕рднреА",
617 stage_seedling: "рдЕрдВрдХреБрд░",
618 stage_vegetative: "рд╡рд╛рдирд╕реНрдкрддрд┐рдХ",
619 stage_flowering: "рдлреВрд▓",
620 stage_fruiting: "рдлрд▓",
621
622 // Sensor readings
623 sensor_temp: "рддрд╛рдкрдорд╛рди",
624 sensor_ph: "pH рд╕реНрддрд░",
625 sensor_ec: "EC",
626 sensor_humidity: "рдирдореА",
627 sensor_ph_desc: "рдкрд╛рдиреА рдХреА рдЕрдореНрд▓рддрд╛ - рд╕рд╣реА: 5.5 рд╕реЗ 6.5",
628 sensor_ec_desc: "рдкрд╛рдиреА рдореЗрдВ рдкреЛрд╖рдХ рддрддреНрд╡ - рд╕рд╣реА: 0.8 рд╕реЗ 2.5",
629 sensor_temp_desc: "рд╣рд╡рд╛ рдХрд╛ рддрд╛рдкрдорд╛рди - рд╕рд╣реА: 18┬░C рд╕реЗ 28┬░C",
630 sensor_humidity_desc: "рд╣рд╡рд╛ рдореЗрдВ рдирдореА - рд╕рд╣реА: 40% рд╕реЗ 80%",
631
632 // Add Crop
633 add_title: "рдирдИ рдлрд╕рд▓ рджрд░реНрдЬ рдХрд░реЗрдВ",
634 add_subtitle: "рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдирдИ рдлрд╕рд▓ рджрд░реНрдЬ рдХрд░реЗрдВ",
635 add_plant_image: "рдкреМрдзреЗ рдХреА рддрд╕реНрд╡реАрд░",
636 add_drop_image: "рдлрд╕рд▓ рдХреА рддрд╕реНрд╡реАрд░ рдпрд╣рд╛рдБ рдбрд╛рд▓реЗрдВ",
637 add_image_hint: "PNG рдпрд╛ JPG ┬╖ рдмреАрдорд╛рд░реА рдкрд╣рдЪрд╛рди рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ",
638 add_sensor_params: "рд╕реЗрдВрд╕рд░ рд░реАрдбрд┐рдВрдЧ",
639 add_start: "рдирд┐рдЧрд░рд╛рдиреА рд╢реБрд░реВ рдХрд░реЗрдВ",
640 add_running: "AI рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИтАж",
641 add_run_another: "рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдПрдВ",
642 add_view_dashboard: "рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдЬрд╛рдПрдВ",
643 add_run_next: "рдЕрдЧрд▓рд╛ рдЪрдХреНрд░ рдЪрд▓рд╛рдПрдВ",
644 add_cycle_done: "рдЪрдХреНрд░ рдкреВрд░рд╛ - рдлрд╕рд▓ рджрд░реНрдЬ рд╣реЛ рдЧрдИ тЬУ",
645 add_cycle_fail: "рдПрдЬреЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛",
646 add_cycles_done: "{n} рдЪрдХреНрд░ рдкреВрд░реЗ",
647 add_field_location: "рд╕реНрдерд╛рди",
648 add_field_location_hint: "рдпрд╣ рдлрд╕рд▓ рдХрд╣рд╛рдБ рд░рдЦреА рд╣реИ",
649 add_field_location_placeholder: "рдЬреИрд╕реЗ рд░реИрдХ A - рд╢реЗрд▓реНрдл 3",
650 add_field_notes: "рдиреЛрдЯреНрд╕",
651 add_field_notes_placeholder: "рдЗрд╕ рдмреИрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреЛрдЯреНрд╕",
652 add_auto_cycle_duration: "рдЪрдХреНрд░ рдЕрд╡рдзрд┐ (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд)",
653 add_auto_cycle_hint: "рдлрд╕рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░: {crop} рд╣рд░ {hours} рдШрдВрдЯреЗ рдореЗрдВ",
654 add_register_btn: "рдлрд╕рд▓ рджрд░реНрдЬ рдХрд░реЗрдВ",
655 add_registering: "рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ...",
656 add_register_success: "рдлрд╕рд▓ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рджрд░реНрдЬ рд╣реЛ рдЧрдИ!",
657 add_run_first_cycle: "рдкрд╣рд▓рд╛ рдЪрдХреНрд░ рдЪрд▓рд╛рдПрдВ",
658 add_lifecycle_label: "рд╡рд┐рдХрд╛рд╕ рд╕рдордпрд░реЗрдЦрд╛",
659 add_crop_id_exists: "рдпрд╣ рдлрд╕рд▓ ID рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ",
660
661 // Add Crop fields
662 add_field_ph: "pH рд╕реНрддрд░",
663 add_field_ec: "EC (рдкреЛрд╖рдХ рддрддреНрд╡)",
664 add_field_temp: "рддрд╛рдкрдорд╛рди (┬░C)",
665 add_field_humidity: "рдирдореА (%)",
666 add_field_crop_type: "рдлрд╕рд▓ рдХрд╛ рдкреНрд░рдХрд╛рд░",
667 add_field_stage: "рд╡рд┐рдХрд╛рд╕ рдЕрд╡рд╕реНрдерд╛",
668 add_field_crop_id: "рдмреИрдЪ / ID",
669 add_field_stage_hint:
670 "рдЕрдВрдХреБрд░ = рдЕрднреА рдмреЛрдпрд╛ ┬╖ рд╡рд╛рдирд╕реНрдкрддрд┐рдХ = рдкрддреНрддрд┐рдпрд╛рдВ ┬╖ рдлреВрд▓ = рдлреВрд▓ ┬╖ рдлрд▓ = рдлрд▓",
671 add_field_crop_id_hint: "рдЗрд╕ рдлрд╕рд▓ рдмреИрдЪ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рджреЗрдВ",
672 add_field_crop_id_placeholder: "рдЬреИрд╕реЗ Batch_A1 (рд╡реИрдХрд▓реНрдкрд┐рдХ)",
673
674 // Add Crop pipeline phases
675 add_phase_fetch: "рдбреЗрдЯрд╛ рд▓рд╛рдПрдВ",
676 add_phase_judge: "рдЬрд╛рдВрдЪ",
677 add_phase_strategy: "рд░рдгрдиреАрддрд┐",
678 add_phase_research: "рдЕрдиреБрд╕рдВрдзрд╛рди",
679 add_phase_plan: "рдпреЛрдЬрдирд╛",
680 add_phase_execute: "рдХрд╛рд░реНрд░рд╡рд╛рдИ",
681 add_log_live: "рдПрдЬреЗрдВрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди - рд▓рд╛рдЗрд╡",
682 add_log_done: "рдЪрдХреНрд░ рдкреВрд░рд╛ рд╣реБрдЖ",
683 add_log_idle: "рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓реЙрдЧ",
684 add_log_lines: "{n} рдкрдВрдХреНрддрд┐рдпрд╛рдВ",
685 add_actuator_dispatched: "рдПрдХреНрдЪреБрдПрдЯрд░ рдХрдорд╛рдВрдб рднреЗрдЬреЗ рдЧрдП",
686
687 // Run Cycle page
688 run_title: "рдПрдЬреЗрдВрдЯ рдЪрдХреНрд░ рдЪрд▓рд╛рдПрдВ",
689 run_subtitle: "{crop} рдХреЗ рд▓рд┐рдП AI рдЪрдХреНрд░ рдЪрд▓рд╛рдПрдВ",
690 run_for_crop: "рдлрд╕рд▓: {crop} рдХреЗ рд▓рд┐рдП",
691 run_loading_crop: "рдлрд╕рд▓ рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИтАж",
692 run_growth_progress: "рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдЧрддрд┐",
693 run_streaming: "рд▓рд╛рдЗрд╡",
694 run_log_waiting: "рдПрдЬреЗрдВрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛тАж",
695 run_cycles_complete: "{n} рдЪрдХреНрд░ рдкреВрд░реЗ рд╣реБрдП",
696 run_agents_working: "рдПрдЬреЗрдВрдЯ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВтАж",
697 run_harvest_ready: "тЬВ рдХрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░",
698 run_days_until: "рдХрдЯрд╛рдИ рдореЗрдВ {n} рджрд┐рди рдмрд╛рдХреА",
699
700 // Alerts
701 alerts_title: "рдЕрд▓рд░реНрдЯ",
702 alerts_subtitle_loading: "рд╕реЗрдВрд╕рд░ рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдЬрд╛рдВрдЪ рд╣реЛ рд░рд╣реА рд╣реИтАж",
703 alerts_subtitle: "{unacked} рдЕрдирджреЗрдЦреЗ ┬╖ {total} рдХреБрд▓",
704 alerts_ack_all: "рд╕рднреА рджреЗрдЦреЗ",
705 alerts_ack_all_btn: "рд╕рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ",
706 alerts_unacked: "рдЕрдирджреЗрдЦреЗ ┬╖ {n}",
707 alerts_acknowledged: "рджреЗрдЦреЗ рдЧрдП ┬╖ {n}",
708 alerts_empty_connected: "рдЪреБрдиреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдм рдареАрдХ рд╣реИ",
709 alerts_empty_nodata: "рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ - рдлрд╛рд░реНрдо рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЪрдХреНрд░ рдЪрд▓рд╛рдПрдВ",
710 alerts_unacked_only: "рдХреЗрд╡рд▓ рдЕрдирджреЗрдЦреЗ",
711 alerts_show_all: "рд╕рднреА",
712 alerts_filter_harvest: "ЁЯМ╛ рдХрдЯрд╛рдИ",
713 alerts_filter_warning: "рдЪреЗрддрд╛рд╡рдиреА",
714 alerts_filter_info: "рдЬрд╛рдирдХрд╛рд░реА",
715 alerts_crop_label: "рдлрд╕рд▓: {crop}",
716 alerts_severity_critical: "рдЧрдВрднреАрд░",
717 alerts_severity_warning: "рдЪреЗрддрд╛рд╡рдиреА",
718 alerts_severity_info: "рдЬрд╛рдирдХрд╛рд░реА",
719 alerts_severity_harvest: "рдХрдЯрд╛рдИ",
720
721 // Alert titles & descriptions
722 alert_harvest_title: "рдлрд╕рд▓ рдХрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░",
723 alert_harvest_desc: "{crop} ({id}) рдХреА рдкрд░рд┐рдкрдХреНрд╡рддрд╛ {pct}% - рдХрдЯрд╛рдИ рдХрд╛ рд╕рдордп!",
724 alert_ph_low_title: "pH рдмрд╣реБрдд рдХрдо",
725 alert_ph_low_desc: "{crop} ({id}): pH {val} - рддреБрд░рдВрдд рдмреЗрд╕ рдбреЛрдЬрд╝рд┐рдВрдЧ рдЬрд░реВрд░реАред",
726 alert_ph_high_title: "pH рдмрд╣реБрдд рдЕрдзрд┐рдХ",
727 alert_ph_high_desc: "{crop} ({id}): pH {val} - рддреБрд░рдВрдд рдПрд╕рд┐рдб рдбреЛрдЬрд╝рд┐рдВрдЧ рдЬрд░реВрд░реАред",
728 alert_ec_high_title: "EC рдЦрддрд░рдирд╛рдХ рд╕реНрддрд░ рдкрд░",
729 alert_ec_high_desc: "{crop} ({id}): EC {val} dS/m - рдкреЛрд╖рдХ рддрддреНрд╡ рдЬрд▓рдиреЗ рдХрд╛ рдЦрддрд░рд╛ред",
730 alert_temp_cold_title: "рддрд╛рдкрдорд╛рди рдмрд╣реБрдд рдХрдо",
731 alert_temp_cold_desc:
732 "{crop} ({id}): рддрд╛рдкрдорд╛рди {val}┬░C - рдЬрдбрд╝реЗрдВ рдЦрд░рд╛рдм рд╣реЛ рд╕рдХрддреА рд╣реИрдВред",
733 alert_temp_hot_title: "рддрд╛рдкрдорд╛рди рдмрд╣реБрдд рдЕрдзрд┐рдХ",
734 alert_temp_hot_desc:
735 "{crop} ({id}): рддрд╛рдкрдорд╛рди {val}┬░C - рдЧрд░реНрдореА рдХрд╛ рддрдирд╛рд╡ рдФрд░ рдЬрдбрд╝ рд╕рдбрд╝рдиреЗ рдХрд╛ рдЦрддрд░рд╛ред",
736 alert_disease_title: "рдмреАрдорд╛рд░реА рдпрд╛ рдХреАрдЯ рдкрд╛рдпрд╛ рдЧрдпрд╛",
737 alert_disease_desc: '{crop} ({id}): рджреГрд╢реНрдп рдЕрд╕рд╛рдорд╛рдиреНрдпрддрд╛ред рдкрд░рд┐рдгрд╛рдо: "{outcome}"',
738 alert_cycle_fail_title: "рдЪрдХреНрд░ рд╡рд┐рдлрд▓",
739 alert_cycle_fail_desc: '{crop} ({id}): рдЪрдХреНрд░ #{seq} рдкрд░рд┐рдгрд╛рдо: "{outcome}"',
740 alert_ph_warn_low_title: "pH рдЗрд╖реНрдЯрддрдо рд╕реЗ рдХрдо",
741 alert_ph_warn_desc: "{crop} ({id}): pH {val}ред рд▓рдХреНрд╖реНрдп: 5.5-6.5ред",
742 alert_ph_warn_high_title: "pH рдЗрд╖реНрдЯрддрдо рд╕реЗ рдЕрдзрд┐рдХ",
743 alert_ec_warn_title: "EC рд╕реАрдорд╛ рдХреЗ рдкрд╛рд╕",
744 alert_ec_warn_desc:
745 "{crop} ({id}): EC {val} dS/m - рдкреЛрд╖рдХ рддрддреНрд╡ рдЬрд▓рдиреЗ рдХрд╛ рдЦрддрд░рд╛ рдмрдврд╝ рд░рд╣рд╛ рд╣реИред",
746 alert_temp_warn_low_title: "рддрд╛рдкрдорд╛рди рдереЛрдбрд╝рд╛ рдХрдо",
747 alert_temp_warn_low_desc: "{crop} ({id}): {val}┬░C - рдзреАрдореА рд╡реГрджреНрдзрд┐ рд╕рдВрднрд╡ред",
748 alert_temp_warn_high_title: "рддрд╛рдкрдорд╛рди рдмрдврд╝рд╛ рд╣реБрдЖ",
749 alert_temp_warn_high_desc: "{crop} ({id}): {val}┬░C - рдЧрд░реНрдореА рдХрд╛ рддрдирд╛рд╡ рд╕рдВрднрд╡ред",
750 alert_deteriorating_title: "рд╕реНрдерд┐рддрд┐ рдмрд┐рдЧрдбрд╝ рд░рд╣реА рд╣реИ",
751 alert_deteriorating_desc: '{crop} ({id}): рдЪрдХреНрд░ #{seq} - "{outcome}"',
752 alert_cycle_done_title: "рдЪрдХреНрд░ #{seq} рдкреВрд░рд╛",
753 alert_cycle_done_desc: "{crop} ({id}): рдЕрдиреБрдХреНрд░рдо рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ред {extra}",
754
755 // Analytics
756 analytics_title: "рд╡рд┐рд╢реНрд▓реЗрд╖рдг",
757 analytics_subtitle_loading: "рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИтАж",
758 analytics_subtitle: "{crops} рдлрд╕рд▓реЛрдВ рдХреЗ {points} рдбреЗрдЯрд╛",
759 analytics_export: "CSV рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ",
760 analytics_avg_ph: "рдФрд╕рдд pH",
761 analytics_avg_ec: "рдФрд╕рдд EC",
762 analytics_avg_temp: "рдФрд╕рдд рддрд╛рдкрдорд╛рди",
763 analytics_total_seq: "рдХреБрд▓ рдЪрдХреНрд░",
764 analytics_vs_prior: "% рдкрд╣рд▓реЗ рд╕реЗ",
765 analytics_trace: "{range} рдЧреНрд░рд╛рдл",
766 analytics_ph_over_time: "pH рд╕рдордп рдХреЗ рд╕рд╛рде",
767 analytics_ec_conc: "EC рд╕рд╛рдВрджреНрд░рддрд╛",
768 analytics_temp_hum: "рддрд╛рдкрдорд╛рди рдФрд░ рдирдореА",
769 analytics_daily_act: "рджреИрдирд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐",
770 analytics_seq_per_day: "рдкреНрд░рддрд┐ рджрд┐рди рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдЪрдХреНрд░",
771 analytics_param_health: "рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп",
772 analytics_in_range_score: "рд╕реАрдорд╛ рдореЗрдВ рд╕реНрдХреЛрд░ (%)",
773 analytics_per_crop: "рдкреНрд░рддрд┐ рдлрд╕рд▓",
774 analytics_latest_sensor: "рдирд╡реАрдирддрдо рд╕реЗрдВрд╕рд░ рд╕рд╛рд░рд╛рдВрд╢",
775 analytics_derived_act: "рд╕рдВрдЧреНрд░рд╣реАрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд",
776 analytics_agent_act: "рдПрдЬреЗрдВрдЯ рдЧрддрд┐рд╡рд┐рдзрд┐",
777 analytics_no_data_range: "рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ",
778 analytics_no_data_days: "рдХрдо рд╕реЗ рдХрдо 2 рджрд┐рди рдХрд╛ рдбреЗрдЯрд╛ рдЪрд╛рд╣рд┐рдП",
779 analytics_no_data_points: "рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИрдВ",
780 analytics_th_crop_id: "рдлрд╕рд▓ ID",
781 analytics_th_type: "рдкреНрд░рдХрд╛рд░",
782 analytics_th_stage: "рдЕрд╡рд╕реНрдерд╛",
783 analytics_th_ph: "pH",
784 analytics_th_ec: "EC",
785 analytics_th_temp: "рддрд╛рдкрдорд╛рди",
786 analytics_th_seq: "рдЪрдХреНрд░",
787 analytics_th_agent: "рдПрдЬреЗрдВрдЯ",
788 analytics_th_apps: "рдЙрдкрд╕реНрдерд┐рддрд┐",
789 analytics_th_success: "рд╕рдлрд▓рддрд╛ рджрд░",
790 analytics_th_status: "рд╕реНрдерд┐рддрд┐",
791 analytics_online: "рдСрдирд▓рд╛рдЗрди",
792
793 // Charts
794 chart_temp: "рддрд╛рдкрдорд╛рди ┬░C",
795 chart_humidity: "рдирдореА %",
796 chart_ec: "EC dS/m",
797 chart_ph: "pH",
798 chart_sequences: "рдЪрдХреНрд░",
799 chart_in_range: "рд╕реАрдорд╛ рдореЗрдВ %",
800
801 // Intelligence
802 intel_title: "рдлрд╛рд░реНрдо рдмреБрджреНрдзрд┐рдорддреНрддрд╛",
803 intel_subtitle: "рдлрд╕рд▓реЗрдВ рдЦреЛрдЬреЗрдВ ┬╖ Demeter рд╕реЗ рдкреВрдЫреЗрдВ ┬╖ рдкреИрдЯрд░реНрди рджреЗрдЦреЗрдВ",
804 intel_search: "рдЦреЛрдЬреЗрдВ",
805 intel_ask_ai: "AI рд╕реЗ рдкреВрдЫреЗрдВ",
806 intel_total_crops: "рдХреБрд▓ рдлрд╕рд▓реЗрдВ",
807 intel_healthy: "рд╕реНрд╡рд╕реНрде",
808 intel_needs_attention: "рдзреНрдпрд╛рди рдЪрд╛рд╣рд┐рдП",
809 intel_critical: "рдЧрдВрднреАрд░",
810 intel_fleet_wide: "рд╕рднреА рдлрд╕рд▓реЗрдВ",
811 intel_crop_aware: "рдлрд╕рд▓-рд╡рд┐рд╢реЗрд╖",
812 intel_search_placeholder: "рдлрд╕рд▓реЗрдВ рдЦреЛрдЬреЗрдВ - 'рдЯрдорд╛рдЯрд░ рджрд┐рдЦрд╛рдПрдВ'...",
813 intel_ask_placeholder_fleet: "рдЕрдкрдиреЗ рдлрд╛рд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкреВрдЫреЗрдВ...",
814 intel_ask_placeholder_crop: "{crop} рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкреВрдЫреЗрдВтАж",
815 intel_filter_by: "рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ:",
816 intel_ask_about: "рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫреЗрдВ:",
817 intel_context_loaded: "рд╕рдВрджрд░реНрдн рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛",
818 intel_heard: "рд╕реБрдирд╛:",
819 intel_suggested_global: "рддреНрд╡рд░рд┐рдд рдкреНрд░рд╢реНрди",
820 intel_suggested_crop: "{crop} рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рдП рдЧрдП рдкреНрд░рд╢реНрди",
821 intel_results_found: "{n} рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗ",
822 intel_no_results: "рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ",
823 intel_view_logic: "рдХреНрд╡реЗрд░реА рддрд░реНрдХ рджреЗрдЦреЗрдВ",
824 intel_hide_logic: "рдХреНрд╡реЗрд░реА рддрд░реНрдХ рдЫрд┐рдкрд╛рдПрдВ",
825 intel_qdrant_filter: "Qdrant рдлрд╝рд┐рд▓реНрдЯрд░",
826 intel_no_match: "рдХреЛрдИ рдлрд╕рд▓ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА",
827 intel_try_ask: "рдЗрд╕рдХреЗ рдмрдЬрд╛рдп AI рд╕реЗ рдкреВрдЫреЗрдВ",
828 intel_empty_ask_title: "Demeter рд╕реЗ рдЕрдкрдиреЗ рдлрд╛рд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкреВрдЫреЗрдВ",
829 intel_empty_search_title: "рдЕрдкрдиреЗ рдлрд╕рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЦреЛрдЬреЗрдВ",
830 intel_empty_ask_desc:
831 "рд▓рдХреНрд╖рд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╕рд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдпрд╛ рдкреВрд░реЗ рдлрд╛рд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВред AI рд▓рд╛рдЗрд╡ рд╕реЗрдВрд╕рд░ рдбреЗрдЯрд╛, рдПрдЬреЗрдВрдЯ рдирд┐рд░реНрдгрдпреЛрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред",
832 intel_empty_search_desc:
833 "рдкреНрд░рдХрд╛рд░, рдЕрд╡рд╕реНрдерд╛, рд╕реНрдерд┐рддрд┐ рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╕рд▓реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред",
834 intel_ai_reasoning: "рд╕реЛрдЪрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛",
835 intel_steps: "{n} рдЪрд░рдг",
836 intel_similar_crops: "рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдорд╛рди рдлрд╕рд▓реЗрдВ",
837 intel_match: "{n}% рдореЗрд▓",
838 intel_last_cmd: "рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб",
839 intel_all_crops_filter: "рд╕рднреА рдлрд╕рд▓реЗрдВ",
840 intel_all_crops_desc: "рдкреВрд░реЗ рдлрд╛рд░реНрдо рдореЗрдВ рдЦреЛрдЬреЗрдВ",
841 intel_thinking: "рд╕реЛрдЪ рд░рд╣рд╛ рд╣реИ",
842 intel_demeter: "рдбреЗрдореАрдЯрд░",
843 intel_select_crop: "рдлрд╕рд▓ рдЪреБрдиреЗрдВ (рдХреБрд▓ {n})",
844 intel_fleet_query: "рд╕рднреА рдлрд╕рд▓реЛрдВ рдореЗрдВ рдЦреЛрдЬреЗрдВ",
845 intel_logic_header: "рдХреНрд╡реЗрд░реА рдЕрдиреБрд╡рд╛рдж рддрд░реНрдХ",
846 intel_query_logic: "рдХреНрд╡реЗрд░реА рддрд░реНрдХ",
847 intel_no_response: "рдХреЛрдИ рдЙрддреНрддрд░ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдЖред",
848 intel_llm_fail: "рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ред рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдХрдиреЗрдХреНрд╢рди рдЬрд╛рдВрдЪреЗрдВред",
849 intel_llm_fail_toast: "LLM рдХреНрд╡реЗрд░реА рд╡рд┐рдлрд▓",
850 intel_search_fail_toast: "рдЦреЛрдЬ рд╡рд┐рдлрд▓",
851 intel_context: "рд╕рдВрджрд░реНрдн",
852
853 // Suggested questions
854 sug_g1: "рд╕рднреА рдлрд╕рд▓реЗрдВ рджрд┐рдЦрд╛рдПрдВ",
855 sug_g2: "рдХреМрди рд╕реА рдлрд╕рд▓реЗрдВ рдЧрдВрднреАрд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ?",
856 sug_g3: "рдлреВрд▓ рдЖрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рд╡рд╛рд▓реА рдлрд╕рд▓реЗрдВ рдЦреЛрдЬреЗрдВ",
857 sug_g4: "рд╣рд╛рд▓ рдХреЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ",
858 sug_g5: "рдЯрдорд╛рдЯрд░ рдХреЗ рдмреИрдЪ рджрд┐рдЦрд╛рдПрдВ",
859 sug_g6: "рдЙрдЪреНрдЪ EC рд╡рд╛рд▓реА рдлрд╕рд▓реЗрдВ рдЦреЛрдЬреЗрдВ",
860 sug_c1: "рд╣рдордиреЗ {crop} рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп рдХреНрдпреЛрдВ рд▓рд┐рдпрд╛?",
861 sug_c2: "{crop} рдХреА рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВ",
862 sug_c3: "рдХреНрдпрд╛ {crop} рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд░рд╣реА рд╣реИ?",
863 sug_c4: "{crop} рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдХрд┐рд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?",
864 sug_c5: "рд╣рд╛рд▓ рд╣реА рдореЗрдВ {crop} рдХрд╛ рд░реБрдЭрд╛рди рдХреИрд╕рд╛ рд░рд╣рд╛ рд╣реИ?",
865 sug_c6: "{crop} рдХреА рддреБрд▓рдирд╛ рд╕рдорд╛рди рдлрд╕рд▓реЛрдВ рд╕реЗ рдХрд░реЗрдВ",
866
867 // Settings
868 settings_title: "рд╕реЗрдЯрд┐рдВрдЧреНрд╕",
869 settings_subtitle: "рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ, рджрд┐рдЦрд╛рд╡рдЯ рдФрд░ рдЦрд╛рддрд╛",
870 settings_save: "рдмрджрд▓рд╛рд╡ рд╕рд╣реЗрдЬреЗрдВ",
871 settings_reset: "рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ",
872 settings_saved: "рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛!",
873 settings_profile: "рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓",
874 settings_profile_sub: "рд╕рд╛рдЗрдбрдмрд╛рд░ рдореЗрдВ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдирд╛рдо рдФрд░ рдкрдж",
875 settings_display_name: "рдирд╛рдо",
876 settings_designation: "рдкрдж",
877 settings_initials: "рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо",
878 settings_initials_hint: "рд╕рд╛рдЗрдбрдмрд╛рд░ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ (рдЕрдзрд┐рдХрддрдо 2 рдЕрдХреНрд╖рд░)",
879 settings_appearance: "рджрд┐рдЦрд╛рд╡рдЯ",
880 settings_appearance_sub: "рдереАрдо рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╡рд┐рдХрд▓реНрдк",
881 settings_theme: "рдереАрдо",
882 settings_theme_hint: "рдРрдк рдХрд╛ рд░рдВрдЧ рдмрджрд▓реЗрдВ",
883 settings_dark: "рдЧрд╣рд░рд╛",
884 settings_light: "рд╣рд▓реНрдХрд╛",
885 settings_system: "рд╕рд┐рд╕реНрдЯрдо",
886 settings_compact: "рдХреЙрдореНрдкреИрдХреНрдЯ рдореЛрдб",
887 settings_compact_hint: "рдХрдо рдЬрдЧрд╣ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдПрдВ",
888 settings_language: "рднрд╛рд╖рд╛ / Language",
889 settings_language_sub: "рдЕрдкрдиреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдЪреБрдиреЗрдВ",
890 settings_lang_en: "English",
891 settings_lang_hi: "рд╣рд┐рдВрджреА (Hindi)",
892 settings_display_section: "рдбрд┐рд╕реНрдкреНрд▓реЗ",
893 settings_display_sub: "рдкреЗрдЬ рдФрд░ рдкрд░рд┐рдгрд╛рдо",
894 settings_max_crops: "рдкреНрд░рддрд┐ рдкреЗрдЬ рдЕрдзрд┐рдХрддрдо рдлрд╕рд▓реЗрдВ",
895 settings_max_crops_hint: "рдбреИрд╢рдмреЛрд░реНрдб рдкреЗрдЬ рд╕рд╛рдЗрдЬрд╝",
896 settings_history_limit: "рдЗрддрд┐рд╣рд╛рд╕ рд▓реЙрдЧ рд╕реАрдорд╛",
897 settings_history_hint: "рдлрд╕рд▓ рд▓реЙрдЧ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдПрдВрдЯреНрд░реА",
898 settings_alerts_section: "рдЕрд▓рд░реНрдЯ",
899 settings_alerts_sub: "рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ",
900 settings_show_acked: "рджреЗрдЦреЗ рдЧрдП рдЕрд▓рд░реНрдЯ рднреА рджрд┐рдЦрд╛рдПрдВ",
901 settings_data_source: "рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд",
902 settings_data_sub: "рдмреИрдХрдПрдВрдб рдХрдиреЗрдХреНрд╢рди",
903 settings_mock_mode: "рдореЙрдХ рдбреЗрдЯрд╛ рдореЛрдб",
904 settings_live_mode: "рд▓рд╛рдЗрд╡ рдмреИрдХрдПрдВрдб рдЬреБрдбрд╝рд╛ рд╣реИ",
905 settings_mock_hint:
906 "рд▓рд╛рдЗрд╡ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП mockData.js рдореЗрдВ USE_MOCK_DATA = false рдХрд░реЗрдВ",
907 settings_onboarding: "рд╕рд╣рд╛рдпрддрд╛ рдФрд░ рдЧрд╛рдЗрдб",
908 settings_onboarding_sub: "рд╕реНрд╡рд╛рдЧрдд рдЧрд╛рдЗрдб рджреЛрдмрд╛рд░рд╛ рджреЗрдЦреЗрдВ",
909 settings_restart_onboarding: "рдЧрд╛рдЗрдб рджреЛрдмрд╛рд░рд╛ рд╢реБрд░реВ рдХрд░реЗрдВ",
910
911 // Help
912 help_title: "рд╕рд╣рд╛рдпрддрд╛ рдФрд░ рд╢рдмреНрджрдХреЛрд╢",
913 help_subtitle: "рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛",
914 help_section_terms: "ЁЯУК рд╕реЗрдВрд╕рд░ рд╢рдмреНрдж рд╕рдордЭрд╛рдП рдЧрдП",
915 help_section_agents: "ЁЯдЦ AI рдЖрдкрдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ",
916 help_section_stages: "ЁЯМ▒ рд╡рд┐рдХрд╛рд╕ рдХреА рдЕрд╡рд╕реНрдерд╛рдПрдВ",
917 help_section_manual: "ЁЯЦР рдЬрдм рдЖрдкрдХреЛ рдХрджрдо рдЙрдард╛рдирд╛ рд╣реЛ",
918 help_section_ai_cta: "рдЕрднреА рднреА рд╕рд╡рд╛рд▓ рд╣реИрдВ?",
919 help_ai_cta_desc:
920 "рд╣рдорд╛рд░реЗ рдлрд╛рд░реНрдо рдмреБрджреНрдзрд┐рдорддреНрддрд╛ AI рд╕реЗ рдЕрдкрдиреА рдлрд╕рд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкреВрдЫреЗрдВ",
921 help_ai_cta_btn: "AI рд╕реЗ рдкреВрдЫреЗрдВ тЖТ",
922 help_range_label: "рдЖрджрд░реНрд╢ рд╕реАрдорд╛",
923 help_low_label: "рдмрд╣реБрдд рдХрдо рд╣реЛ рддреЛ",
924 help_high_label: "рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рддреЛ",
925 help_ai_label: "AI рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ",
926 help_manual_label: "рдорд╛рдирд╡реАрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрдм рдЬрд░реВрд░реА",
927 help_agri_label: "рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ",
928 help_tab_simple: "рд╕рд░рд▓",
929 help_tab_detail: "рд╡рд┐рд╕реНрддреГрдд",
930
931 // Onboarding
932 onboarding_step: "рдЪрд░рдг {n} / {total}",
933 onboarding_skip: "рдЫреЛрдбрд╝реЗрдВ",
934 onboarding_next: "рдЕрдЧрд▓рд╛",
935 onboarding_finish: "рд╢реБрд░реВ рдХрд░реЗрдВ!",
936 onboarding_s1_title: "Demeter рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! ЁЯМ▒",
937 onboarding_s1_desc:
938 "рдпрд╣ рдЖрдкрдХрд╛ рд╕реНрдорд╛рд░реНрдЯ рдлрд╛рд░реНрдо рд╕рд╣рд╛рдпрдХ рд╣реИред Demeter рдЖрдкрдХреА рдлрд╕рд▓реЛрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╛рдиреА, рдкреЛрд╖рдХ рддрддреНрд╡ рдФрд░ рддрд╛рдкрдорд╛рди рдХреЛ 24 рдШрдВрдЯреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред",
939 onboarding_s2_title: "рдЖрдкрдХрд╛ рдлрд╕рд▓ рдбреИрд╢рдмреЛрд░реНрдб",
940 onboarding_s2_desc:
941 "рдпрд╣рд╛рдБ рд╕рднреА рдлрд╕рд▓реЗрдВ рдПрдХ рд╕рд╛рде рджреЗрдЦреЗрдВред рд╣рд░ рдХрд╛рд░реНрдб рдлрд╕рд▓ рдХреА рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:\n\nЁЯЯв рд╣рд░рд╛ (рд╕реНрд╡рд╕реНрде) - рд╕рдм рдареАрдХ рд╣реИ\nЁЯЯб рдкреАрд▓рд╛ (рдзреНрдпрд╛рди рджреЗрдВ) - рдЬрд╛рдВрдЪ рдЬрд░реВрд░реА\nЁЯФ┤ рд▓рд╛рд▓ (рдЧрдВрднреАрд░) - рддреБрд░рдВрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдВ",
942 onboarding_s3_title: "рдлрд╕рд▓ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ",
943 onboarding_s3_desc:
944 '"рдлрд╕рд▓ рдЬреЛрдбрд╝реЗрдВ" рдкрд░ рдЯреИрдк рдХрд░реЗрдВред рдлрд╕рд▓ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЪреБрдиреЗрдВ (рд▓реЗрдЯреНрдпреВрд╕, рдЯрдорд╛рдЯрд░, рддреБрд▓рд╕реА рдпрд╛ рд╕реНрдЯреНрд░реЙрдмреЗрд░реА), рдПрдХ рдЕрдиреЛрдЦреА ID рджреЗрдВ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╕рдм рдХреБрдЫ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛ - рдЪрдХреНрд░ рдЕрд╡рдзрд┐, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдВрд╕рд░, рдФрд░ рд╡рд┐рдХрд╛рд╕ рдЯреНрд░реИрдХрд┐рдВрдЧред рдПрдХ рдмрд╛рд░ рджрд░реНрдЬ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╕рд▓ рдХреЗ рд╡рд┐рд╡рд░рдг рдкреГрд╖реНрда рд╕реЗ AI рдирд┐рдЧрд░рд╛рдиреА рдЪрдХреНрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред',
945 onboarding_s4_title: "рдЕрд▓рд░реНрдЯ рд╕реЗ рдЕрдкрдбреЗрдЯ рд░рд╣реЗрдВ",
946 onboarding_s4_desc:
947 "рдЬрдм рдХрд┐рд╕реА рдлрд╕рд▓ рдХреЛ рдзреНрдпрд╛рди рдХреА рдЬрд░реВрд░рдд рд╣реЛ, рдЕрд▓рд░реНрдЯ рдореЗрдиреВ рдкрд░ рд▓рд╛рд▓ рдирдВрдмрд░ рджрд┐рдЦреЗрдЧрд╛ред рдЕрдкрдиреА рдлрд╕рд▓реЗрдВ рд╕реНрд╡рд╕реНрде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдЬрд╝ рдЬрд╛рдВрдЪреЗрдВ!",
948 onboarding_s5_title: "рдХрдЯрд╛рдИ рдХрд╛ рд╕рдордп ЁЯМ╛",
949 onboarding_s5_desc:
950 "рдЬрдм рдлрд╕рд▓ рдХрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ, рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдПрдХ рдмреИрдирд░ рдФрд░ рдлрд╕рд▓ рдХрд╛рд░реНрдб рдкрд░ 'рдХрдЯрд╛рдИ рддреИрдпрд╛рд░' рдмреИрдЬ рджрд┐рдЦреЗрдЧрд╛ред рд╕рд╣реА рд╕рдордп рдкрд░ рдХрдЯрд╛рдИ рдХрднреА рди рдЪреВрдХреЗрдВ!",
951 onboarding_s6_title: "рд╣рдореЗрд╢рд╛ рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░",
952 onboarding_s6_desc:
953 "рдЦреЗрддреА рдХреЗ рдХрд┐рд╕реА рд╢рдмреНрдж рдХреЛ рд▓реЗрдХрд░ рдЙрд▓рдЭрди рдореЗрдВ рд╣реИрдВ рдпрд╛ рддреБрд░рдВрдд рд╕рд▓рд╛рд╣ рдЪрд╛рд╣рд┐рдП? рдЖрд╕рд╛рди рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рд╢рдмреНрджрдХреЛрд╢ рджреЗрдЦреЗрдВ, рдпрд╛ рддреБрд░рдВрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдлрд╛рд░реНрдо рдмреБрджреНрдзрд┐рдорддреНрддрд╛ AI рд╕реЗ рдкреВрдЫреЗрдВред",
954
955 // Common
956 common_loading: "рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИтАж",
957 common_back: "рд╡рд╛рдкрд╕",
958 common_enabled: "рдЪрд╛рд▓реВ",
959 common_disabled: "рдмрдВрдж",
960 common_showing_all: "рд╕рднреА рджрд┐рдЦрд╛рдП",
961 common_hiding_acked: "рджреЗрдЦреЗ рд╣реБрдП рдЫреБрдкрд╛рдП",
962 common_per_page: "рдкреНрд░рддрд┐ рдкреЗрдЬ",
963 common_last: "рдЕрдВрддрд┐рдо",
964 common_entries: "рдПрдВрдЯреНрд░реА",
965 common_live: "рд▓рд╛рдЗрд╡",
966 common_all: "рд╕рднреА",
967 common_crop: "рдлрд╕рд▓",
968 common_unknown: "рдЕрдЬреНрдЮрд╛рдд",
969 common_time_just_now: "рдЕрднреА-рдЕрднреА",
970 common_time_min_ago: "{n} рдорд┐рдирдЯ рдкрд╣рд▓реЗ",
971 common_time_hr_ago: "{n} рдШрдВрдЯреЗ рдкрд╣рд▓реЗ",
972 common_time_day_ago: "1 рджрд┐рди рдкрд╣рд▓реЗ",
973 common_time_days_ago: "{n} рджрд┐рди рдкрд╣рд▓реЗ",
974};
975
976export const TRANSLATIONS = { en, hi };
977
978// Translates a key, replacing {placeholder} tokens
979export function translate(lang, key, vars = {}) {
980 const dict = TRANSLATIONS[lang] || TRANSLATIONS.en;
981 let str = dict[key] ?? TRANSLATIONS.en[key] ?? key;
982 Object.entries(vars).forEach(([k, v]) => {
983 str = str.replace(new RegExp(`\\{${k}\\}`, "g"), String(v));
984 });
985 return str;
986}
987
988// Dynamically translates known agent explanation strings, outcomes, and crops to Hindi
989export function translateDynamic(text, lang) {
990 if (!text || lang !== "hi") return text;
991 let translated = text;
992
993 const replacements = [
994 [/Observation/gi, "рдЕрд╡рд▓реЛрдХрди (Observation)"],
995 [/Precedent/gi, "рдкреВрд░реНрд╡ рдЙрджрд╛рд╣рд░рдг (Precedent)"],
996 [/Logic/gi, "рддрд░реНрдХ (Logic)"],
997 [/Conclusion/gi, "рдирд┐рд╖реНрдХрд░реНрд╖ (Conclusion)"],
998 [/Sensors show/gi, "рд╕реЗрдВрд╕рд░ рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ"],
999 [/within acceptable range/gi, "рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реАрдорд╛ рдХреЗ рднреАрддрд░"],
1000 [/disease was detected/gi, "рдмреАрдорд╛рд░реА рдкрд╛рдИ рдЧрдИ"],
1001 [/Action Taken:/gi, "рдХреА рдЧрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ:"],
1002 [/Outcome:/gi, "рдкрд░рд┐рдгрд╛рдо:"],
1003 [/PENDING_ANALYSIS/gi, "рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд▓рдВрдмрд┐рдд рд╣реИ..."],
1004 [/IMPROVED/gi, "рд╕реБрдзрд╛рд░ рд╣реБрдЖ"],
1005 [/DETERIORATED/gi, "рд╕реНрдерд┐рддрд┐ рдмрд┐рдЧрдбрд╝реА"],
1006 [/STABLE/gi, "рд╕реНрдерд┐рд░"],
1007 [/Reward:/gi, "рдЗрдирд╛рдо:"],
1008
1009 // Crops and Stages
1010 [/\bLettuce\b/gi, "рд▓реЗрдЯреНрдпреВрд╕ (Lettuce)"],
1011 [/\bTomato\b/gi, "рдЯрдорд╛рдЯрд░ (Tomato)"],
1012 [/\bCucumber\b/gi, "рдЦреАрд░рд╛ (Cucumber)"],
1013 [/\bBasil\b/gi, "рддреБрд▓рд╕реА (Basil)"],
1014 [/\bSpinach\b/gi, "рдкрд╛рд▓рдХ (Spinach)"],
1015 [/\bKale\b/gi, "рдХреЗрд▓ (Kale)"],
1016 [/\bStrawberry\b/gi, "рд╕реНрдЯреНрд░реЙрдмреЗрд░реА (Strawberry)"],
1017 [/\bPepper\b/gi, "рд╢рд┐рдорд▓рд╛ рдорд┐рд░реНрдЪ (Pepper)"],
1018 [/\bSeedling\b/gi, "рдЕрдВрдХреБрд░ (Seedling)"],
1019 [/\bVegetative\b/gi, "рд╡рд╛рдирд╕реНрдкрддрд┐рдХ (Vegetative)"],
1020 [/\bFlowering\b/gi, "рдлреВрд▓ (Flowering)"],
1021 [/\bFruiting\b/gi, "рдлрд▓ (Fruiting)"],
1022 [/\bUnknown\b/gi, "рдЕрдЬреНрдЮрд╛рдд"],
1023 [/\bHealthy\b/gi, "рд╕реНрд╡рд╕реНрде"],
1024 [/\bAttention\b/gi, "рдзреНрдпрд╛рди рджреЗрдВ"],
1025 [/\bCritical\b/gi, "рдЧрдВрднреАрд░"],
1026 ];
1027
1028 replacements.forEach(([regex, replacement]) => {
1029 translated = translated.replace(regex, replacement);
1030 });
1031
1032 return translated;
1033}