Files
HailMaryGuildTools/Locales/enUS.lua
Torsten Brendgen 01eeae9603 Refactor Buff Ending Announcer to Aura Expiry
- Deleted LibGroupInSpecT-1.1.toc, LibStub.lua, and lib.xml files as they are no longer needed.
- Updated localization files (deDE.lua, enUS.lua) to reflect the change from "Buff Ending" to "Aura Expiry".
- Renamed BuffEndingAnnouncer module to AuraExpiry and updated references throughout the codebase.
- Adjusted options and configuration to align with the new module name.
- Updated readme to describe the new Aura Expiry feature instead of Buff Ending Announcer.
2026-04-11 23:21:34 +02:00

486 lines
25 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Locales/enUS.lua
-- English (base locale all keys must be defined here)
local L = LibStub("AceLocale-3.0"):NewLocale("HailMaryGuildTools", "enUS", true)
-- true = this is the default locale; missing keys in other locales fall back here
-- ── Addon general ────────────────────────────────────────────
L["ADDON_TITLE"] = "Hail Mary Guild Tools"
L["ADDON_SUBTITLE"] = "Interrupt & Raid Cooldown Tracker v1.0"
L["ADDON_LOADED"] = "|cff00aaffHail Mary Guild Tools|r loaded. /hmgt for options."
L["FRAMES_LOCKED"] = "Frames locked."
L["FRAMES_UNLOCKED"] = "Frames unlocked."
L["DEMO_MODE_ACTIVE"] = "Demo mode active."
L["TEST_MODE_ACTIVE"] = "Test mode active."
-- ── Slash commands ───────────────────────────────────────────
L["SLASH_HINT"] = "/hmgt options | /hmgt lock/unlock | /hmgt demo | /hmgt test | /hmgt version | /hmgt debugdump [lines]"
L["VERSION_MISMATCH_CHAT"] = "Version mismatch with %s: %s"
L["VERSION_MISMATCH_POPUP"] = "HailMaryGuildTools mismatch with %s.\n%s\nSource: %s"
L["VERSION_WINDOW_TITLE"] = "HMGT Version Check"
L["VERSION_WINDOW_MESSAGE"] = "A new version of Hail Mary Guild Tools is available."
L["VERSION_WINDOW_DETAIL"] = "Detected via %s from %s.\n%s"
L["VERSION_WINDOW_NO_MISMATCH"] = "No newer HMGT version has been detected in your current group."
L["VERSION_WINDOW_CURRENT"] = "Current version: %s | Protocol: %s"
L["VERSION_WINDOW_DEBUG_ONLY"] = "HMGT: /hmgt version is only available while debug mode is enabled."
L["VERSION_WINDOW_DEVTOOLS_ONLY"] = "HMGT: /hmgt version is only available while developer tools are enabled."
-- ── Options: general ─────────────────────────────────────────
L["OPT_GENERAL"] = "General"
L["OPT_DESC"] = "Interrupt & Raid Cooldown Tracker for groups and raids.\n\n" ..
"|cffffff00/hmgt|r open options\n" ..
"|cffffff00/hmgt lock|r lock all frames\n" ..
"|cffffff00/hmgt unlock|r unlock all frames\n" ..
"|cffffff00/hmgt demo|r demo mode (dummy data)\n" ..
"|cffffff00/hmgt test|r test mode (your own spells)\n\n" ..
"Communication uses AceComm (addon messages). All group members need the addon."
L["OPT_LOCK_ALL"] = "Lock all frames"
L["OPT_UNLOCK_ALL"] = "Unlock all frames"
L["OPT_DEMO_MODE"] = "Demo mode"
L["OPT_DEMO_MODE_DESC"] = "Show demo data in the trackers"
L["OPT_TEST_MODE"] = "Test mode"
L["OPT_TEST_MODE_DESC"] = "Show your own spells in all trackers"
L["OPT_DEBUG_MODE"] = "Debug mode"
L["OPT_DEBUG_MODE_DESC"] = "Show debug information for important addon actions in a separate debug console"
L["OPT_DEBUG_LEVEL"] = "Debug level"
L["OPT_DEBUG_LEVEL_ERROR"]= "Errors only"
L["OPT_DEBUG_LEVEL_INFO"] = "Info (tracked CDs)"
L["OPT_DEBUG_LEVEL_VERBOSE"] = "Verbose (+ power spend)"
L["OPT_DEBUG_SCOPE"] = "Module filter"
L["OPT_DEBUG_SCOPE_ALL"] = "All modules"
L["OPT_DEBUG_OPEN"] = "Open debug console"
L["OPT_DEBUG_CLEAR"] = "Clear debug log"
L["OPT_DEBUG_SELECT_ALL"] = "Select all"
L["DEBUG_WINDOW_TITLE"] = "HMGT Debug Console"
L["DEBUG_WINDOW_HINT"] = "Mouse wheel scrolls, Ctrl+A selects all, Ctrl+C copies selected text"
L["OPT_DEVTOOLS_MODE"] = "Developer tools"
L["OPT_DEVTOOLS_MODE_DESC"] = "Enable the structured developer event console."
L["OPT_DEVTOOLS_LEVEL"] = "Capture level"
L["OPT_DEVTOOLS_LEVEL_ERROR"] = "Errors"
L["OPT_DEVTOOLS_LEVEL_TRACE"] = "Trace"
L["OPT_DEVTOOLS_SCOPE"] = "Scope filter"
L["OPT_DEVTOOLS_SCOPE_ALL"] = "All scopes"
L["OPT_DEVTOOLS_OPEN"] = "Open developer console"
L["OPT_DEVTOOLS_CLEAR"] = "Clear developer log"
L["OPT_DEVTOOLS_SELECT_ALL"] = "Select all"
L["OPT_DEVTOOLS_DISABLED"] = "HMGT: developer tools are not enabled."
L["DEVTOOLS_WINDOW_TITLE"] = "HMGT Developer Tools"
L["DEVTOOLS_WINDOW_HINT"] = "Structured developer events for the current session"
L["OPT_SYNC_REMOTE_CHARGES"] = "Sync remote charges"
L["OPT_SYNC_REMOTE_CHARGES_DESC"] = "Transmit charge information for cooldowns to group members"
L["OPT_CHANGELOG"] = "Changelog"
L["OPT_CHANGELOG_DESC"] = "Recent addon changes"
L["OPT_CHANGELOG_VERSION"]= "Version"
L["OPT_CHANGELOG_EMPTY"] = "No changelog entries available."
L["OPT_PROFILES"] = "Profiles"
L["OPT_TRACKER"] = "Tracker"
L["OPT_TRACKERS"] = "Tracker Bars"
L["OPT_TRACKERS_DESC"] = "Create tracker bars and bind them to one or more spell categories."
L["OPT_TRACKER_ACTIONS"] = "Tracker actions"
L["OPT_TRACKER_ACTIONS_DESC"] = "Global actions for all tracker frames."
L["OPT_TRACKER_NAME"] = "Tracker name"
L["OPT_TRACKER_CATEGORIES"] = "Categories"
L["OPT_TRACKER_CATEGORIES_DESC"] = "Select which spell categories this tracker should display."
L["OPT_TRACKER_TYPE"] = "Tracker type"
L["OPT_TRACKER_TYPE_DESC"] = "Choose whether this tracker uses one shared frame or separate frames per group member."
L["OPT_TRACKER_TYPE_NORMAL"] = "Normal tracker"
L["OPT_TRACKER_TYPE_GROUP"] = "Group-based tracker"
L["OPT_TRACKER_PER_MEMBER"] = "Create one frame per group member"
L["OPT_TRACKER_PER_MEMBER_DESC"] = "Use separate tracker frames for each party member instead of a single shared tracker frame."
L["OPT_INCLUDE_SELF_FRAME"] = "Create a frame for your own player too"
L["OPT_INCLUDE_SELF_FRAME_DESC"] = "Also provision a dedicated frame for your own player on group-based trackers."
L["OPT_ADD_TRACKER"] = "Add tracker"
L["OPT_REMOVE_TRACKER"] = "Remove tracker"
L["OPT_REMOVE_TRACKER_CONFIRM"] = 'Really remove tracker "%s"?'
L["OPT_TRACKERS_EMPTY"] = "No tracker bars configured yet."
L["OPT_TRACKED_SPELLS_DESC"] = "Changes here apply to all tracker bars that use the spell's categories."
L["OPT_TRACKED_SPELLS_EMPTY"] = "No spells are currently tracked by your tracker bars."
L["OPT_TRACKED_SPELLS_NO_MATCH"] = "No spells match the current filters."
L["OPT_MAP"] = "Map"
L["OPT_MAP_PLACEHOLDER"] = "Map module options will be available here."
L["OPT_MAP_ENABLED"] = "Enable map overlay"
L["OPT_MAP_ICON_SIZE"] = "Icon size"
L["OPT_MAP_ALPHA"] = "Icon alpha"
L["OPT_MAP_SHOW_LABELS"] = "Show labels"
L["OPT_MAP_POI_SECTION"] = "Custom POIs"
L["OPT_MAP_POI_MAPID"] = "Map ID"
L["OPT_MAP_POI_X"] = "X (0-100)"
L["OPT_MAP_POI_Y"] = "Y (0-100)"
L["OPT_MAP_POI_LABEL"] = "Label"
L["OPT_MAP_POI_CATEGORY"] = "Icon"
L["OPT_MAP_POI_USE_CURRENT"] = "Use current position"
L["OPT_MAP_POI_USE_CURRENT_DESC"] = "Fill map ID, X and Y from your current player position"
L["OPT_MAP_POI_ADD"] = "Add POI"
L["OPT_MAP_POI_UPDATE"] = "Update POI"
L["OPT_MAP_POI_REMOVE_INDEX"] = "Remove index"
L["OPT_MAP_POI_REMOVE"] = "Remove POI"
L["OPT_MAP_POI_LIST"] = "Current POIs"
L["OPT_MAP_POI_EMPTY"] = "No POIs configured."
L["OPT_MAP_POI_CURRENT_SET"] = "HMGT: current position copied"
L["OPT_MAP_POI_CURRENT_FAILED"] = "HMGT: could not determine current position"
L["OPT_MAP_POI_ADDED"] = "HMGT: POI added"
L["OPT_MAP_POI_ADD_FAILED"] = "HMGT: could not add POI"
L["OPT_MAP_POI_UPDATED"] = "HMGT: POI updated"
L["OPT_MAP_POI_UPDATE_FAILED"] = "HMGT: could not update POI"
L["OPT_MAP_POI_REMOVED"] = "HMGT: POI removed"
L["OPT_MAP_POI_REMOVE_FAILED"] = "HMGT: could not remove POI"
L["OPT_GENERAL_SETTINGS"] = "General Settings"
L["OPT_SHOW_MINIMAP_ICON"] = "Show Minimap Icon"
L["OPT_COMMANDS"] = "Commands"
L["OPT_MODULES"] = "Modules"
L["OPT_MODULE_TRACKER"] = "Tracker"
L["OPT_MODULE_BUFF_ENDING"] = "Aura Expiry"
L["OPT_MODULE_AURA_EXPIRY"] = "Aura Expiry"
L["OPT_MODULE_MAP_OVERLAY"] = "Map Overlay"
-- ── Options: tracker shared ───────────────────────────────────
L["OPT_SECTION_GENERAL"] = "General Settings"
L["OPT_ENABLED"] = "Enabled"
L["OPT_ENABLED_DESC"] = "Enable or disable this tracker"
L["OPT_DISPLAY_MODE"] = "Display mode"
L["OPT_DISPLAY_MODE_DESC"]= "Show as progress bars or icons"
L["OPT_DISPLAY_BAR"] = "Progress bars"
L["OPT_DISPLAY_ICON"] = "Icons"
L["OPT_SHOW_SPELL_TOOLTIP"] = "Blizzard tooltip on bars"
L["OPT_SHOW_SPELL_TOOLTIP_DESC"] = "Show the Blizzard spell tooltip when mousing over a progress bar"
L["OPT_SHOW_READY_TEXT"] = "Show ready text"
L["OPT_SHOW_CHARGES_ON_ICON"] = "Show charges on icon"
L["OPT_SHOW_REMAINING_ON_ICON"] = "Show remaining time on icon"
L["OPT_LOCKED"] = "Lock frame"
L["OPT_LOCKED_DESC"] = "Prevent the frame from being moved"
L["OPT_SHOW_NAME"] = "Show player names"
L["OPT_CLASS_COLOR"] = "Use class colours"
L["OPT_GROW_DIR"] = "Grow direction"
L["OPT_GROW_DOWN"] = "Downward"
L["OPT_GROW_UP"] = "Upward"
L["OPT_SECTION_ANCHOR"] = "Anchor"
L["OPT_ANCHOR_TO"] = "Anchor to"
L["OPT_ANCHOR_TO_DESC"] = "Attach this frame to another frame or to the screen"
L["OPT_ANCHOR_TARGET_UI"] = "Screen (UIParent)"
L["OPT_ANCHOR_TARGET_CUSTOM"] = "Custom frame name"
L["OPT_ANCHOR_CUSTOM_NAME"] = "Custom frame"
L["OPT_ANCHOR_CUSTOM_NAME_DESC"] = "Global frame name, e.g. ElvUF_Player"
L["OPT_ATTACH_PARTY_FRAME"] = "Attach to Party Frame"
L["OPT_ATTACH_PARTY_FRAME_DESC"] = "Anchor each group cooldown frame to its corresponding party unit frame"
L["OPT_ATTACH_PARTY_SIDE"] = "Attach side"
L["OPT_ATTACH_PARTY_OFFSET_X"] = "Attach X offset"
L["OPT_ATTACH_PARTY_OFFSET_Y"] = "Attach Y offset"
L["OPT_ATTACH_LEFT"] = "Left"
L["OPT_ATTACH_RIGHT"] = "Right"
L["OPT_ANCHOR_POINT"] = "Anchor point"
L["OPT_ANCHOR_POINT_DESC"]= "Point on this frame to use for anchoring"
L["OPT_ANCHOR_REL_POINT"] = "Relative point"
L["OPT_ANCHOR_REL_POINT_DESC"] = "Point on the target frame to anchor to"
L["OPT_ANCHOR_X"] = "X offset"
L["OPT_ANCHOR_Y"] = "Y offset"
L["OPT_SHOW_ONLY_ACTIVE"] = "Show only active cooldowns"
L["OPT_SHOW_ONLY_ACTIVE_DESC"] = "Hide entries that are currently ready"
L["OPT_SHOW_ONLY_READY"] = "Show only ready cooldowns"
L["OPT_SHOW_ONLY_READY_DESC"] = "Only show entries that are currently ready"
L["OPT_READY_SOON_SEC"] = "Ready soon threshold (sec)"
L["OPT_READY_SOON_SEC_DESC"] = "Show only cooldowns that are ready or below this remaining time (0 = disabled)"
L["OPT_PREPROVISION_UNKNOWN"] = "Pre-provision unknown players"
L["OPT_PREPROVISION_UNKNOWN_DESC"] = "Show prefilled spells for group members even before addon hello/sync was received"
L["OPT_ROLE_FILTER"] = "Role filter"
L["OPT_ROLE_FILTER_ALL"] = "All"
L["OPT_ROLE_FILTER_TANK"] = "Tank"
L["OPT_ROLE_FILTER_HEALER"] = "Healer"
L["OPT_ROLE_FILTER_DAMAGER"] = "Damage"
L["OPT_RANGE_CHECK"] = "Range check"
L["OPT_HIDE_OOR"] = "Hide out of range"
L["OPT_OOR_ALPHA"] = "Out of range alpha"
L["OPT_SECTION_SIZE"] = "Size & Width"
L["OPT_WIDTH"] = "Width (bars)"
L["OPT_BAR_HEIGHT"] = "Bar height"
L["OPT_ICON_SIZE"] = "Icon size"
L["OPT_ICON_COLS"] = "Icons per row"
L["OPT_SECTION_FONT"] = "Font"
L["OPT_FONT"] = "Typeface"
L["OPT_FONT_SIZE"] = "Font size"
L["OPT_FONT_OUTLINE"] = "Font outline"
L["OPT_OUTLINE_NONE"] = "None"
L["OPT_OUTLINE_NORMAL"] = "Outline"
L["OPT_OUTLINE_THICK"] = "Thick Outline"
L["OPT_OUTLINE_MONO"] = "Monochrome"
L["OPT_SECTION_SPELLS"] = "Tracked Spells"
L["OPT_SECTION_CUSTOM_SPELLS"] = "Custom Spells"
L["OPT_CUSTOM_SPELLS_INFO"] = "Add/remove custom spells for this tracker."
L["OPT_CUSTOM_SPELLS_ID"] = "Spell ID"
L["OPT_CUSTOM_SPELLS_CD"] = "Cooldown (sec)"
L["OPT_CUSTOM_SPELLS_CLASS"] = "Class"
L["OPT_CUSTOM_SPELLS_SPECS"] = "Specs (optional, e.g. 1,3)"
L["OPT_CUSTOM_SPELLS_CATEGORY"] = "Category"
L["OPT_CUSTOM_SPELLS_ADD"] = "Add Spell"
L["OPT_CUSTOM_SPELLS_REMOVE"] = "Remove SpellID"
L["OPT_CUSTOM_SPELLS_CURRENT"] = "Current custom spells"
L["OPT_CUSTOM_SPELLS_EMPTY"] = "No custom spells for this tracker."
L["OPT_CUSTOM_SPELLS_MSG_ADDED"] = "HMGT: custom spell added"
L["OPT_CUSTOM_SPELLS_MSG_INVALID"] = "HMGT: invalid custom spell input"
L["OPT_CUSTOM_SPELLS_MSG_REMOVED"] = "HMGT: custom spell removed"
L["OPT_CUSTOM_SPELLS_MSG_NOT_FOUND"] = "HMGT: spell not found"
L["OPT_SPELLS_DESC"] = "Enable or disable individual spells:\n"
L["OPT_SPELL_SELECT"] = "Select spells"
L["OPT_DISABLED"] = "Disabled"
L["OPT_VISIBILITY_NONE"] = "Hidden everywhere"
L["OPT_STATUS_MODE"] = "Mode"
L["OPT_STATUS_DISPLAY"] = "Display"
L["OPT_STATUS_VISIBILITY"]= "Visibility"
L["OPT_STATUS_GROWTH"] = "Growth"
L["OPT_STATUS_ATTACH"] = "Attach"
L["OPT_UI_GROUP_MODE"] = "Mode"
L["OPT_UI_GROUP_PLACEMENT"] = "Placement"
L["OPT_UI_GROUP_VISIBILITY"] = "Visibility"
L["OPT_UI_GROUP_LAYOUT"] = "Layout"
L["OPT_UI_GROUP_APPEARANCE"] = "Appearance"
L["OPT_SPELL_BROWSER"] = "Spell Browser"
L["OPT_SPELL_BROWSER_DESC"] = "Filter tracked spells by name or Spell ID and apply quick actions to the visible results."
L["OPT_SELECTION"] = "Selection"
L["OPT_RT_NAME"] = "Raid Timeline"
L["OPT_RT_ENABLED"] = "Enable Raid Timeline"
L["OPT_RT_LEAD_TIME"] = "Warning lead time"
L["OPT_RT_ASSIGNMENT_LEAD_TIME"] = "Assignment lead time"
L["OPT_RT_ASSIGNMENT_LEAD_TIME_DESC"] = "How many seconds before the planned use the assigned player should be selected."
L["OPT_RT_ALERT_HEADER"] = "Alert frame"
L["OPT_RT_UNLOCK"] = "Unlock alert frame"
L["OPT_RT_PREVIEW"] = "Preview alert"
L["OPT_RT_ALERT_COLOR"] = "Text colour"
L["OPT_RT_ALERT_PREVIEW"] = "Tranquility in 5"
L["OPT_RT_DESC"] = "Create encounter timelines here and open the interactive Ace3 timeline editor for visual planning."
L["OPT_RT_ALERT_UNLOCKED_HINT"] = "Raid Timeline Alert\nDrag to move"
L["OPT_RT_ALERT_TEMPLATE"] = "%s in %d"
L["OPT_RT_ENCOUNTERS_HEADER"] = "Encounter timelines"
L["OPT_RT_SECTION_GENERAL"] = "General"
L["OPT_RT_SECTION_MANAGE"] = "Manage encounters"
L["OPT_RT_ADD_ENCOUNTER_ID"] = "Encounter ID"
L["OPT_RT_ADD_ENCOUNTER_NAME"] = "Encounter name"
L["OPT_RT_ADD_RAID"] = "Raid"
L["OPT_RT_ADD_ENCOUNTER"] = "Add encounter"
L["OPT_RT_INVALID_ENCOUNTER"] = "HMGT: invalid encounter ID"
L["OPT_RT_EMPTY"] = "No encounter timelines configured yet."
L["OPT_RT_ENCOUNTER"] = "Encounter"
L["OPT_RT_ENCOUNTER_NAME"] = "Name"
L["OPT_RT_RAID_NAME"] = "Raid"
L["OPT_RT_RAID_ID"] = "Raid ID"
L["OPT_RT_RAID_DEFAULT"] = "Encounter"
L["OPT_RT_DELETE_ENCOUNTER_CONFIRM"] = "Delete raid timeline for encounter %d?"
L["OPT_RT_DIFFICULTY_HEADER"] = "Difficulties"
L["OPT_RT_DIFF_LFR"] = "LFR"
L["OPT_RT_DIFF_NORMAL"] = "Normal"
L["OPT_RT_DIFF_HEROIC"] = "HC"
L["OPT_RT_DIFF_MYTHIC"] = "Mythic"
L["OPT_RT_ADD_TIME"] = "Time (MM:SS)"
L["OPT_RT_ADD_SPELL"] = "Spell"
L["OPT_RT_ADD_PLAYER"] = "Target"
L["OPT_RT_ADD_PLAYER_DESC"] = "Optional. Comma-separated player names or variables like Group1, Group8, GroupEven, GroupOdd. If empty, sends to everyone."
L["OPT_RT_ADD_ENTRY"] = "Add entry"
L["OPT_RT_ADD_ENTRY_INVALID"] = "HMGT: invalid raid timeline entry"
L["OPT_RT_ENTRY_TIME"] = "Time"
L["OPT_RT_ENTRY_SPELL"] = "Spell"
L["OPT_RT_ENTRY_PLAYER"] = "Target"
L["OPT_NOTES_NAME"] = "Notes"
L["OPT_NOTES_ENABLED"] = "Enable notes"
L["OPT_NOTES_DESC"] = "Provides an MRT-style notes window with a main note, a personal note and encounter drafts."
L["OPT_NOTES_OPEN_WINDOW"] = "Open notes window"
L["OPT_NOTES_OPEN_SETTINGS"] = "Open settings"
L["OPT_NOTES_WINDOW_TITLE"] = "HMGT Notes"
L["OPT_NOTES_LIST"] = "Notes"
L["OPT_NOTES_EDITOR"] = "Editor"
L["OPT_NOTES_MAIN"] = "Main note"
L["OPT_NOTES_PERSONAL"] = "Personal note"
L["OPT_NOTES_DRAFT"] = "Draft"
L["OPT_NOTES_NEW_DRAFT"] = "New draft"
L["OPT_NOTES_DUPLICATE"] = "Duplicate"
L["OPT_NOTES_TITLE"] = "Title"
L["OPT_NOTES_ENCOUNTER"] = "Encounter"
L["OPT_NOTES_TEXT"] = "Text"
L["OPT_NOTES_NO_ENCOUNTER"] = "No encounter"
L["OPT_NOTES_SEND_CHAT"] = "Send to chat"
L["OPT_NOTES_SUMMARY"] = "Main note, personal note and %d drafts available."
L["OPT_RT_TRIGGER"] = "Trigger"
L["OPT_RT_TRIGGER_TIME"] = "Time"
L["OPT_RT_TRIGGER_BOSS_ABILITY"] = "Boss ability"
L["OPT_RT_ACTION"] = "Action"
L["OPT_RT_ACTION_TEXT"] = "Text"
L["OPT_RT_ACTION_RAID_COOLDOWN"] = "Raid Cooldown"
L["OPT_RT_INVALID_TIME"] = "HMGT: invalid time"
L["OPT_RT_INVALID_SPELL"] = "HMGT: invalid spell ID"
L["OPT_RT_TIMELINE_VIEWPORT"] = "Timeline window"
L["OPT_RT_TIMELINE_EMPTY_WINDOW"] = "No cooldowns in the current window."
L["OPT_RT_TIMELINE_EDITOR"] = "Interactive Timeline"
L["OPT_RT_OPEN_EDITOR"] = "Open timeline"
L["OPT_RT_START_TEST"] = "Start timeline test"
L["OPT_RT_STOP_TEST"] = "Stop test"
L["OPT_RT_TEST_HINT"] = "Runs the encounter timeline outside of combat so you can verify assignments, whispers and debug output."
L["OPT_RT_TIMELINE_SCROLL"] = "Scroll timeline"
L["OPT_RT_TIMELINE_ZOOM"] = "Zoom"
L["OPT_RT_TIMELINE_HINT"] = "Click the bar to add a cooldown. Drag markers horizontally to change the time. Mousewheel scrolls, Ctrl+Mousewheel zooms."
L["OPT_RT_ASSIGNMENT_EDITOR"] = "Assignment"
L["OPT_RT_ASSIGNMENT_NONE"] = "No cooldown selected"
L["OPT_SPELLS_VISIBLE"] = "Visible spells"
L["OPT_SPELLS_ENABLED_COUNT"] = "Enabled"
L["OPT_FILTER_SEARCH"] = "Search"
L["OPT_FILTER_SEARCH_DESC"] = "Search by spell name or Spell ID"
L["OPT_FILTER_ENABLED_ONLY"] = "Enabled only"
L["OPT_FILTER_RESET"] = "Reset filters"
L["OPT_SELECT_VISIBLE"] = "Select visible"
L["OPT_DESELECT_VISIBLE"] = "Deselect visible"
L["OPT_ALL_SPECS"] = "All specs"
L["OPT_CUSTOM_SPELLS_EDITOR"] = "Spell Editor"
L["OPT_CUSTOM_SPELLS_PREVIEW"] = "Preview"
L["OPT_CUSTOM_SPELLS_PREVIEW_EMPTY"] = "Enter a spell ID to preview the custom spell."
L["OPT_CUSTOM_SPELLS_LOAD"] = "Load into editor"
-- ── Tracker titles ────────────────────────────────────────────
L["IT_TITLE"] = "|cff00aaffInterrupts|r"
L["RCD_TITLE"] = "|cffff8800Raid Cooldowns|r"
L["GCD_TITLE"] = "|cff77dd77Group Cooldowns|r"
-- ── Options: tracker names ────────────────────────────────────
L["IT_NAME"] = "Interrupt Tracker"
L["RCD_NAME"] = "Raid Cooldown Tracker"
L["GCD_NAME"] = "Group Cooldown Tracker"
L["BEA_NAME"] = "Aura Expiry"
L["AE_NAME"] = "Aura Expiry"
L["AEM_NAME"] = "Auto Enemy Marker"
L["OPT_BEA_ENABLED"] = "Enable aura expiry"
L["OPT_BEA_ENABLED_DESC"] = "Announce countdowns for tracked auras and channels in /say"
L["OPT_BEA_ANNOUNCE_AT"] = "Announce from (sec)"
L["OPT_BEA_ANNOUNCE_AT_DESC"] = "Start countdown announcements when remaining buff duration is at or below this value"
L["OPT_BEA_DEFAULT_THRESHOLD"] = "Default threshold (sec)"
L["OPT_BEA_DEFAULT_THRESHOLD_DESC"] = "Used when you add a new tracked buff"
L["OPT_BEA_SECTION_GENERAL"] = "General"
L["OPT_BEA_SECTION_BUFFS"] = "Tracked buffs"
L["OPT_BEA_ADD_ID"] = "Add Spell ID"
L["OPT_BEA_ADD_THRESHOLD"] = "Threshold"
L["OPT_BEA_ADD_THRESHOLD_DESC"] = "Countdown start in seconds for this buff"
L["OPT_BEA_ADD"] = "Add buff"
L["OPT_BEA_REMOVE_ID"] = "Remove Spell ID"
L["OPT_BEA_REMOVE"] = "Remove buff"
L["OPT_BEA_CURRENT"] = "Current tracked buffs"
L["OPT_BEA_COL_ICON"] = "Icon"
L["OPT_BEA_COL_SPELL"] = "Spellname"
L["OPT_BEA_COL_THRESHOLD"] = "Threshold"
L["OPT_BEA_COL_ACTION"] = "Action"
L["OPT_BEA_EMPTY"] = "No buffs configured."
L["OPT_BEA_MSG_ADDED"] = "HMGT: buff added: %s"
L["OPT_BEA_MSG_REMOVED"] = "HMGT: buff removed: %s"
L["OPT_BEA_MSG_INVALID"] = "HMGT: invalid buff spell ID"
L["OPT_BEA_MSG_NOT_FOUND"] = "HMGT: buff not found"
L["OPT_BEA_MSG_THRESHOLD_INVALID"] = "HMGT: invalid threshold"
L["BEA_MSG_TEMPLATE"] = "%s ending in %d"
L["OPT_AEM_ENABLED"] = "Enable auto enemy marking"
L["OPT_AEM_ENABLED_DESC"] = "Marks configured enemy unit IDs on mouseover with rotating raid markers (out of combat)"
L["OPT_AEM_RESET_SESSION"] = "Reset marker cycle"
L["OPT_AEM_SECTION_UNITS"] = "Tracked unit IDs"
L["OPT_AEM_ADD_ID"] = "Add Unit ID"
L["OPT_AEM_ADD"] = "Add unit"
L["OPT_AEM_REMOVE_ID"] = "Remove Unit ID"
L["OPT_AEM_REMOVE"] = "Remove unit"
L["OPT_AEM_CURRENT"] = "Current unit IDs"
L["OPT_AEM_EMPTY"] = "No unit IDs configured."
L["OPT_AEM_MSG_ADDED"] = "HMGT: unit ID added: %s"
L["OPT_AEM_MSG_REMOVED"] = "HMGT: unit ID removed: %s"
L["OPT_AEM_MSG_INVALID"] = "HMGT: invalid unit ID"
L["OPT_AEM_MSG_NOT_FOUND"] = "HMGT: unit ID not found"
L["AEM_MSG_COMBAT_BLOCKED"] = "HMGT Auto Enemy Marker: automatic marking is blocked in combat by Blizzard secure restrictions."
L["AEM_MSG_API_BLOCKED"] = "HMGT Auto Enemy Marker: raid marker API call is blocked in this environment."
-- ── Tooltip ───────────────────────────────────────────────────
L["TT_DRAG"] = "|cff00aaffHMGT|r\nDrag to move\n|cffffff00/hmgt lock|r to lock"
L["TT_REMAINING"] = "Remaining: "
L["TT_READY"] = "Ready!"
L["TT_UNKNOWN"] = "Unknown"
-- ── Spell spell-toggle label format ──────────────────────────
-- used as: string.format(L["SPELL_LABEL"], classStr, name)
L["SPELL_LABEL"] = "[%s] %s"
-- used as: string.format(L["SPELL_DESC"], spellId, cooldown)
L["SPELL_DESC"] = "SpellID: %d | Cooldown: %ds"
-- ── Spell categories ─────────────────────────────────────────
L["CAT_lust"] = "Bloodlust / Lust"
L["CAT_offensive"] = "Offensive Cooldowns"
L["CAT_defensive"] = "Defensive Cooldowns"
L["CAT_tank"] = "Tank Cooldowns"
L["CAT_healing"] = "Healing Cooldowns"
L["CAT_utility"] = "Utility"
L["CAT_cc"] = "Crowd Control"
L["CAT_interrupt"] = "Interrupts"
L["CAT_raid"] = "Raid Cooldowns"
-- ── Config spell list ─────────────────────────────────────────
L["OPT_CD_LABEL"] = "%s (%ds)" -- icon+name, cooldown
L["OPT_SELECT_ALL"] = "Select all"
L["OPT_DESELECT_ALL"] = "Deselect all"
-- ── Bar-Mode options ─────────────────────────────────────────
L["OPT_BAR_TEXTURE"] = "Texture"
L["OPT_BAR_TEXTURE_DESC"] = "Texture of the progress bar"
L["OPT_BAR_SPACING"] = "Bar spacing"
-- ── Icon-Mode options ─────────────────────────────────────────
L["OPT_GROW_LEFT"] = "Leftward"
L["OPT_GROW_RIGHT"] = "Rightward"
L["OPT_ICON_COLS_DESC"] = "Number of icons per row (DOWN/UP) or per column (LEFT/RIGHT)"
L["OPT_ICON_OVERLAY"] = "Cooldown display"
L["OPT_ICON_OVERLAY_DESC"] = "How to show remaining cooldown on icons"
L["OPT_ICON_OVERLAY_SWEEP"] = "Cooldown sweep"
L["OPT_ICON_OVERLAY_TIMER"] = "Text timer (MM:SS)"
L["OPT_ICON_SPACING"] = "Icon spacing"
-- ── Visibility options ────────────────────────────────────────
L["OPT_SECTION_VISIBILITY"] = "Visibility"
L["OPT_SHOW_SOLO"] = "Show when solo"
L["OPT_SHOW_SOLO_DESC"] = "Show this tracker when not in a group"
L["OPT_SHOW_GROUP"] = "Show in group"
L["OPT_SHOW_GROUP_DESC"] = "Show this tracker in a party"
L["OPT_SHOW_RAID"] = "Show in raid"
L["OPT_SHOW_RAID_DESC"] = "Show this tracker in a raid group"
-- ── Border options ──────────────────────────────────────────────
L["OPT_BORDER_ENABLED"] = "Show border"
L["OPT_BORDER_ENABLED_DESC"] = "Show a 1px border around progress bars and icons"
L["OPT_BORDER_COLOR"] = "Border color"
L["OPT_BORDER_COLOR_DESC"] = "Color of the 1px border"
-- ── Text anchor (icon mode) ───────────────────────────────────
L["OPT_TEXT_ANCHOR"] = "Text position"
L["OPT_TEXT_ANCHOR_DESC"] = "Where to show name and timer relative to the icon"
L["OPT_ANCHOR_ON_ICON"] = "On icon (overlay)"
L["OPT_ANCHOR_ABOVE"] = "Above icon"
L["OPT_ANCHOR_BELOW"] = "Below icon"
L["OPT_ANCHOR_LEFT"] = "Left of icon"
L["OPT_ANCHOR_RIGHT"] = "Right of icon"
-- ── Talent mod types (tooltip / desc) ─────────────────────────
L["TALENTMOD_SET"] = "Talent sets CD to %ds"
L["TALENTMOD_MULTIPLY"] = "Talent multiplies CD by %.2f"
L["TALENTMOD_REDUCE"] = "Talent reduces CD by %d%%"
L["OPT_RT_ADD_TEXT"] = "Custom text"
L["OPT_RT_ENTRY_TEXT"] = "Custom text"
L["OPT_RT_NO_SPELL"] = "No spell"
L["OPT_RT_ADD_TYPE"] = "Type"
L["OPT_RT_ENTRY_TYPE"] = "Type"
L["OPT_RT_TYPE_SPELL"] = "Spell"
L["OPT_RT_TYPE_TEXT"] = "Text"
L["OPT_RT_TYPE_BOSS_ABILITY"] = "Boss ability"
L["OPT_RT_BOSSMOD"] = "Boss mod"
L["OPT_RT_BOSS_ABILITY"] = "Boss ability"
L["OPT_RT_BOSS_BAR_NAME"] = "Bossmod bar name"
L["OPT_RT_NO_BOSS_ABILITY"] = "No boss ability"
L["OPT_RT_CAST_COUNT"] = "Cast count"
L["OPT_RT_CAST_COUNT_DESC"] = "Use a number, All, Odd, or Even."
L["OPT_RT_CAST"] = "Cast"
L["OPT_RT_CAST_ALL"] = "All"
L["OPT_RT_CAST_ODD"] = "Odd"
L["OPT_RT_CAST_EVEN"] = "Even"
L["OPT_RT_ADD_TARGETS"] = "Targets"
L["OPT_RT_ENTRY_TARGETS"] = "Targets"
L["OPT_RT_TARGETS_DESC"] = "Use All, Odd, Even, raid groups like 1,2, 1-3 or player names separated by commas."