en.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. // WeCom Center - English (base language). Copy this file to <lang>.php to add a language.
  3. return [
  4. 'menu.title' => 'WeCom Center',
  5. 'page.title' => 'WeCom Center',
  6. 'tab.alert' => 'Alert',
  7. 'tab.opt' => 'Optimization',
  8. 'tab.maint' => 'Maintenance',
  9. // section headings
  10. 'sec.robot' => 'WeCom group robot',
  11. 'sec.strategy' => 'Alert strategy (pick one, then Apply)',
  12. 'sec.threshold' => 'Manual threshold (overrides the strategy)',
  13. 'sec.tuning' => 'Server tuning generator',
  14. 'sec.template' => 'Template import',
  15. 'sec.map' => 'Map marker',
  16. 'sec.triggers' => 'Per-trigger alerting switch',
  17. // media type
  18. 'lbl.mediatype' => 'Alert media type',
  19. 'lbl.alerting_on' => 'Alerting enabled',
  20. 'lbl.severity' => 'Severities that will notify',
  21. 'lbl.key' => 'Robot key (global macro {$WECOM_KEY})',
  22. 'lbl.strategy_hint' => 'Every strategy pins the "must alert" classes to the highest severity (Disaster) so they always fire, and sets a threshold for the rest. Apply is safe and repeatable.',
  23. 'lbl.threshold_hint' => 'The strategy sets this automatically. Change it here only for a one-off adjustment.',
  24. 'lbl.tuning_hint' => 'This only GENERATES the settings and command — nothing is changed. Copy them onto the Zabbix host and recreate the server container yourself.',
  25. // buttons
  26. 'btn.save' => 'Save',
  27. 'btn.test' => 'Send test',
  28. 'btn.import' => 'Import template',
  29. 'btn.preview' => 'Preview',
  30. 'btn.apply' => 'Apply',
  31. 'btn.generate' => 'Generate',
  32. 'btn.search' => 'Search',
  33. // severities
  34. 'sev.1' => 'Not classified',
  35. 'sev.2' => 'Information',
  36. 'sev.3' => 'Warning',
  37. 'sev.4' => 'Average',
  38. 'sev.5' => 'High',
  39. 'sev.6' => 'Disaster',
  40. // trigger classes
  41. 'cls.device_down' => 'Device down / unreachable',
  42. 'cls.hw_fault' => 'Hardware fault (fan/power/temperature)',
  43. 'cls.restarted' => 'Device restarted',
  44. 'cls.core_link' => 'Core/uplink link down',
  45. 'cls.interface_down' => 'Access interface down',
  46. 'cls.perf' => 'Performance (bandwidth/error/CPU)',
  47. 'cls.other' => 'Other (unchanged)',
  48. 'cls.col.class' => 'Class',
  49. 'cls.col.target' => 'Severity',
  50. 'cls.col.count' => 'Triggers',
  51. 'cls.col.changes' => 'Will change',
  52. 'cls.total' => 'Total',
  53. // strategy presets
  54. 'preset.current' => '(current)',
  55. 'preset.col.name' => 'Strategy',
  56. 'preset.col.desc' => 'Description',
  57. 'preset.col.action' => 'Actions',
  58. 'preset.steady' => 'Steady operations',
  59. 'preset.steady.desc' => 'Must-alert always fires; rest only High+. Balanced for daily production.',
  60. 'preset.core' => 'Core essentials only',
  61. 'preset.core.desc' => 'Only must-alert classes fire (Disaster). Everything else muted — max noise reduction.',
  62. 'preset.observe' => 'Full observation',
  63. 'preset.observe.desc' => 'Notify from Warning up. For onboarding / troubleshooting periods.',
  64. 'preset.night' => 'Night quiet',
  65. 'preset.night.desc' => 'Disaster only. For night shifts / on-call quiet hours.',
  66. 'preset.balanced' => 'Core strict / access loose',
  67. 'preset.balanced.desc'=> 'Must-alert + Average up. Slightly broader than steady.',
  68. // preview
  69. 'preview.title' => 'Preview — dry run for "{1}" (nothing written)',
  70. 'preview.hint' => 'These are the hosted triggers that would change. Apply to actually write them.',
  71. // templates
  72. 'tpl.choose' => 'Bundled template',
  73. 'tpl.none' => 'No bundled template found',
  74. // map
  75. 'map.choose_host' => '-- select host --',
  76. 'map.host' => 'Marker host',
  77. 'map.lat' => 'Latitude',
  78. 'map.lon' => 'Longitude',
  79. 'map.hint' => 'The map uses one representative point (the Zabbix server). Note: the Geomap widget needs the browser to reach the internet for base-map tiles.',
  80. // tuning
  81. 'tuning.choose' => 'Hardware profile',
  82. 'tuning.small' => 'Small (< 200 hosts)',
  83. 'tuning.medium' => 'Medium (~ 500 hosts)',
  84. 'tuning.large' => 'Large (1000+ hosts)',
  85. 'tuning.env' => 'Settings (paste into .env / compose environment):',
  86. 'tuning.cmd' => 'Then apply:',
  87. // triggers / maintenance
  88. 'lbl.trig_search' => 'Search triggers by description (e.g. CPU, disk)',
  89. 'lbl.trig_list' => 'Triggers (checked = alerting enabled)',
  90. 'lbl.trig_hint' => 'There are {1} triggers. Type a keyword above to search (max 200 shown).',
  91. // messages
  92. 'msg.saved' => 'Alert settings saved.',
  93. 'msg.robot_saved' => 'Robot key saved.',
  94. 'msg.tested' => 'Test message sent successfully (errcode 0).',
  95. 'msg.test_failed' => 'Test failed (HTTP {1}): {2}',
  96. 'msg.imported' => 'Template imported. Templates: {1}',
  97. 'msg.map_saved' => 'Map coordinates saved.',
  98. 'msg.no_mediatype'=> 'No webhook media type found.',
  99. 'msg.no_url' => 'Robot key is empty (set {$WECOM_KEY}).',
  100. 'msg.no_template' => 'Please choose a template.',
  101. 'msg.no_host' => 'Please choose a host.',
  102. 'msg.no_template_host' => 'Huawei walk template not found on this server.',
  103. 'msg.no_server_host' => 'Host "Zabbix server" not found.',
  104. 'msg.bad_scheme' => 'Unknown strategy.',
  105. 'msg.unknown_op' => 'Unknown operation.',
  106. 'msg.no_triggers' => 'No trigger selected.',
  107. 'msg.triggers_saved' => 'Trigger alerting updated: {1} trigger(s).',
  108. 'msg.no_trig_search' => 'No triggers matched your search.',
  109. 'msg.strategy_applied' => 'Strategy "{1}" applied — template triggers: {2}, prototypes: {3}, discovered triggers: {4}.',
  110. // hero + template switch
  111. 'hero.sub' => 'WeCom group alerts, one-click alert strategy, server tuning, template migration and per-trigger control — all in one place.',
  112. 'lbl.template_hint' => 'Bundled templates ship with the module. Importing an existing template updates it in place; importing a new one creates it. Use the switch card below to move devices from an old template to the new one.',
  113. 'sec.switch' => 'Template switch (migrate devices)',
  114. 'lbl.switch_hint' => 'Pick the OLD template and the NEW template. Preview lists the affected devices; confirm replaces the template link on every one of them. This is the "import, then switch?" step.',
  115. 'switch.pick' => '-- select template --',
  116. 'switch.src' => 'From template (old)',
  117. 'switch.dst' => 'To template (new)',
  118. 'switch.none' => 'No device currently uses "{1}". Nothing to switch.',
  119. 'switch.result' => '{1} device(s) on "{2}" will be moved to "{3}".',
  120. 'btn.confirm' => 'Confirm switch',
  121. 'msg.need_both' => 'Please choose both source and target template.',
  122. 'msg.same_tpl' => 'Source and target template must differ.',
  123. 'msg.switch_applied' => 'Switched {1} device(s) to the new template.',
  124. ];