11d05cddcSAtari911<?php 21d05cddcSAtari911/** 31d05cddcSAtari911 * English language file for Calendar plugin 41d05cddcSAtari911 */ 51d05cddcSAtari911 6*22228b0eSAtari911// Admin menu 71d05cddcSAtari911$lang['menu'] = 'Calendar Management'; 8*22228b0eSAtari911 9*22228b0eSAtari911// General 10*22228b0eSAtari911$lang['calendar'] = 'Calendar'; 11*22228b0eSAtari911$lang['events'] = 'Events'; 12*22228b0eSAtari911$lang['event'] = 'Event'; 13*22228b0eSAtari911$lang['today'] = 'Today'; 14*22228b0eSAtari911$lang['tomorrow'] = 'Tomorrow'; 15*22228b0eSAtari911$lang['yesterday'] = 'Yesterday'; 16*22228b0eSAtari911 17*22228b0eSAtari911// Event fields 18*22228b0eSAtari911$lang['title'] = 'Title'; 19*22228b0eSAtari911$lang['description'] = 'Description'; 20*22228b0eSAtari911$lang['date'] = 'Date'; 21*22228b0eSAtari911$lang['time'] = 'Time'; 22*22228b0eSAtari911$lang['start_time'] = 'Start Time'; 23*22228b0eSAtari911$lang['end_time'] = 'End Time'; 24*22228b0eSAtari911$lang['end_date'] = 'End Date'; 25*22228b0eSAtari911$lang['color'] = 'Color'; 26*22228b0eSAtari911$lang['namespace'] = 'Namespace'; 27*22228b0eSAtari911$lang['all_day'] = 'All Day'; 28*22228b0eSAtari911 29*22228b0eSAtari911// Actions 30*22228b0eSAtari911$lang['add_event'] = 'Add Event'; 31*22228b0eSAtari911$lang['edit_event'] = 'Edit Event'; 32*22228b0eSAtari911$lang['delete_event'] = 'Delete Event'; 33*22228b0eSAtari911$lang['save'] = 'Save'; 34*22228b0eSAtari911$lang['cancel'] = 'Cancel'; 35*22228b0eSAtari911$lang['close'] = 'Close'; 36*22228b0eSAtari911$lang['search'] = 'Search'; 37*22228b0eSAtari911$lang['clear'] = 'Clear'; 38*22228b0eSAtari911 39*22228b0eSAtari911// Task-related 40*22228b0eSAtari911$lang['task'] = 'Task'; 41*22228b0eSAtari911$lang['mark_as_task'] = 'Mark as Task'; 42*22228b0eSAtari911$lang['completed'] = 'Completed'; 43*22228b0eSAtari911$lang['past_due'] = 'Past Due'; 44*22228b0eSAtari911 45*22228b0eSAtari911// Recurring events 46*22228b0eSAtari911$lang['recurring'] = 'Recurring'; 47*22228b0eSAtari911$lang['repeat'] = 'Repeat'; 48*22228b0eSAtari911$lang['daily'] = 'Daily'; 49*22228b0eSAtari911$lang['weekly'] = 'Weekly'; 50*22228b0eSAtari911$lang['monthly'] = 'Monthly'; 51*22228b0eSAtari911$lang['yearly'] = 'Yearly'; 52*22228b0eSAtari911$lang['every'] = 'Every'; 53*22228b0eSAtari911$lang['days'] = 'days'; 54*22228b0eSAtari911$lang['weeks'] = 'weeks'; 55*22228b0eSAtari911$lang['months'] = 'months'; 56*22228b0eSAtari911$lang['years'] = 'years'; 57*22228b0eSAtari911$lang['repeat_on'] = 'Repeat on'; 58*22228b0eSAtari911$lang['ends'] = 'Ends'; 59*22228b0eSAtari911$lang['never'] = 'Never'; 60*22228b0eSAtari911$lang['after_occurrences'] = 'After occurrences'; 61*22228b0eSAtari911$lang['on_date'] = 'On date'; 62*22228b0eSAtari911 63*22228b0eSAtari911// Days of week 64*22228b0eSAtari911$lang['sunday'] = 'Sunday'; 65*22228b0eSAtari911$lang['monday'] = 'Monday'; 66*22228b0eSAtari911$lang['tuesday'] = 'Tuesday'; 67*22228b0eSAtari911$lang['wednesday'] = 'Wednesday'; 68*22228b0eSAtari911$lang['thursday'] = 'Thursday'; 69*22228b0eSAtari911$lang['friday'] = 'Friday'; 70*22228b0eSAtari911$lang['saturday'] = 'Saturday'; 71*22228b0eSAtari911$lang['sun'] = 'Sun'; 72*22228b0eSAtari911$lang['mon'] = 'Mon'; 73*22228b0eSAtari911$lang['tue'] = 'Tue'; 74*22228b0eSAtari911$lang['wed'] = 'Wed'; 75*22228b0eSAtari911$lang['thu'] = 'Thu'; 76*22228b0eSAtari911$lang['fri'] = 'Fri'; 77*22228b0eSAtari911$lang['sat'] = 'Sat'; 78*22228b0eSAtari911 79*22228b0eSAtari911// Months 80*22228b0eSAtari911$lang['january'] = 'January'; 81*22228b0eSAtari911$lang['february'] = 'February'; 82*22228b0eSAtari911$lang['march'] = 'March'; 83*22228b0eSAtari911$lang['april'] = 'April'; 84*22228b0eSAtari911$lang['may'] = 'May'; 85*22228b0eSAtari911$lang['june'] = 'June'; 86*22228b0eSAtari911$lang['july'] = 'July'; 87*22228b0eSAtari911$lang['august'] = 'August'; 88*22228b0eSAtari911$lang['september'] = 'September'; 89*22228b0eSAtari911$lang['october'] = 'October'; 90*22228b0eSAtari911$lang['november'] = 'November'; 91*22228b0eSAtari911$lang['december'] = 'December'; 92*22228b0eSAtari911 93*22228b0eSAtari911// Messages 94*22228b0eSAtari911$lang['no_events'] = 'No events'; 95*22228b0eSAtari911$lang['no_events_today'] = 'No events today'; 96*22228b0eSAtari911$lang['no_events_this_month'] = 'No events this month'; 97*22228b0eSAtari911$lang['no_events_found'] = 'No events match your search'; 98*22228b0eSAtari911$lang['event_saved'] = 'Event saved successfully'; 99*22228b0eSAtari911$lang['event_deleted'] = 'Event deleted successfully'; 100*22228b0eSAtari911$lang['confirm_delete'] = 'Are you sure you want to delete this event?'; 101*22228b0eSAtari911$lang['loading'] = 'Loading...'; 102*22228b0eSAtari911$lang['searching'] = 'Searching...'; 103*22228b0eSAtari911 104*22228b0eSAtari911// Search 105*22228b0eSAtari911$lang['search_this_month'] = 'Search this month'; 106*22228b0eSAtari911$lang['search_all_dates'] = 'Search all dates'; 107*22228b0eSAtari911$lang['found_events'] = 'Found %d event(s) across all dates'; 108*22228b0eSAtari911 109*22228b0eSAtari911// Sync 110*22228b0eSAtari911$lang['sync'] = 'Sync'; 111*22228b0eSAtari911$lang['sync_now'] = 'Sync Now'; 112*22228b0eSAtari911$lang['last_sync'] = 'Last sync'; 113*22228b0eSAtari911$lang['sync_successful'] = 'Sync completed successfully'; 114*22228b0eSAtari911$lang['sync_failed'] = 'Sync failed'; 115*22228b0eSAtari911 116*22228b0eSAtari911// Admin sections 117*22228b0eSAtari911$lang['manage_events'] = 'Manage Events'; 118*22228b0eSAtari911$lang['sync_settings'] = 'Sync Settings'; 119*22228b0eSAtari911$lang['backup_restore'] = 'Backup & Restore'; 120*22228b0eSAtari911$lang['statistics'] = 'Statistics'; 121*22228b0eSAtari911$lang['important_namespaces'] = 'Important Namespaces'; 122*22228b0eSAtari911$lang['cleanup_events'] = 'Cleanup Old Events'; 123*22228b0eSAtari911 124*22228b0eSAtari911// Sidebar widget 125*22228b0eSAtari911$lang['upcoming_events'] = 'Upcoming Events'; 126*22228b0eSAtari911$lang['important_events'] = 'Important Events'; 127*22228b0eSAtari911$lang['past_events'] = 'Past Events'; 128*22228b0eSAtari911 129*22228b0eSAtari911// Time conflicts 130*22228b0eSAtari911$lang['time_conflict'] = 'Time Conflict'; 131*22228b0eSAtari911$lang['conflicts_with'] = 'Conflicts with'; 132*22228b0eSAtari911 133*22228b0eSAtari911// Admin tabs 134*22228b0eSAtari911$lang['tab_manage'] = 'Manage Events'; 135*22228b0eSAtari911$lang['tab_update'] = 'Update Plugin'; 136*22228b0eSAtari911$lang['tab_sync'] = 'Outlook Sync'; 137*22228b0eSAtari911$lang['tab_themes'] = 'Themes'; 138*22228b0eSAtari911 139*22228b0eSAtari911// Admin manage tab sections 140*22228b0eSAtari911$lang['event_browser'] = 'Event Browser'; 141*22228b0eSAtari911$lang['important_namespaces'] = 'Important Namespaces'; 142*22228b0eSAtari911$lang['cleanup_events'] = 'Cleanup Old Events'; 143*22228b0eSAtari911$lang['backup_events'] = 'Backup Events'; 144*22228b0eSAtari911$lang['restore_events'] = 'Restore Events'; 145*22228b0eSAtari911 146*22228b0eSAtari911// Admin sync tab 147*22228b0eSAtari911$lang['outlook_sync_settings'] = 'Outlook Sync Settings'; 148*22228b0eSAtari911$lang['sync_url'] = 'Sync URL'; 149*22228b0eSAtari911$lang['sync_interval'] = 'Sync Interval'; 150*22228b0eSAtari911$lang['enable_sync'] = 'Enable Sync'; 151*22228b0eSAtari911$lang['test_connection'] = 'Test Connection'; 152*22228b0eSAtari911 153*22228b0eSAtari911// Admin themes tab 154*22228b0eSAtari911$lang['theme_preview'] = 'Theme Preview'; 155*22228b0eSAtari911$lang['select_theme'] = 'Select Theme'; 156*22228b0eSAtari911 157*22228b0eSAtari911// Buttons and actions 158*22228b0eSAtari911$lang['run_now'] = 'Run Now'; 159*22228b0eSAtari911$lang['download'] = 'Download'; 160*22228b0eSAtari911$lang['upload'] = 'Upload'; 161*22228b0eSAtari911$lang['delete'] = 'Delete'; 162*22228b0eSAtari911$lang['refresh'] = 'Refresh'; 163*22228b0eSAtari911$lang['view_log'] = 'View Log'; 164*22228b0eSAtari911$lang['clear_log'] = 'Clear Log'; 165*22228b0eSAtari911$lang['save'] = 'Save'; 166*22228b0eSAtari911$lang['cancel'] = 'Cancel'; 167*22228b0eSAtari911$lang['close'] = 'Close'; 168*22228b0eSAtari911$lang['preview'] = 'Preview'; 169*22228b0eSAtari911$lang['rescan'] = 'Rescan'; 170*22228b0eSAtari911$lang['select_all'] = 'All'; 171*22228b0eSAtari911$lang['select_none'] = 'None'; 172*22228b0eSAtari911$lang['move_to'] = 'Move to'; 173*22228b0eSAtari911 174*22228b0eSAtari911// Manage Events Tab 175*22228b0eSAtari911$lang['manage_calendar_events'] = 'Manage Calendar Events'; 176*22228b0eSAtari911$lang['events_manager'] = 'Events Manager'; 177*22228b0eSAtari911$lang['events_manager_desc'] = 'Scan, export, and import all calendar events across all namespaces.'; 178*22228b0eSAtari911$lang['total_events'] = 'Total Events'; 179*22228b0eSAtari911$lang['namespaces'] = 'Namespaces'; 180*22228b0eSAtari911$lang['json_files'] = 'JSON Files'; 181*22228b0eSAtari911$lang['recurring'] = 'Recurring'; 182*22228b0eSAtari911$lang['last_scanned'] = 'Last scanned'; 183*22228b0eSAtari911$lang['rescan_events'] = 'Re-scan Events'; 184*22228b0eSAtari911$lang['export_all_events'] = 'Export All Events'; 185*22228b0eSAtari911$lang['import_events'] = 'Import Events'; 186*22228b0eSAtari911$lang['import_confirm'] = 'Import will merge with existing events. Continue?'; 187*22228b0eSAtari911$lang['view_breakdown'] = 'View Breakdown by Namespace'; 188*22228b0eSAtari911$lang['events_column'] = 'Events'; 189*22228b0eSAtari911$lang['files_column'] = 'Files'; 190*22228b0eSAtari911$lang['default_ns'] = '(default)'; 191*22228b0eSAtari911 192*22228b0eSAtari911// Important Namespaces 193*22228b0eSAtari911$lang['important_namespaces'] = 'Important Namespaces'; 194*22228b0eSAtari911$lang['important_ns_desc'] = 'Events from these namespaces will be visually highlighted throughout the calendar:'; 195*22228b0eSAtari911$lang['visual_effects'] = 'Visual Effects'; 196*22228b0eSAtari911$lang['effect_grid'] = 'Calendar Grid: ⭐ star icon on event bars'; 197*22228b0eSAtari911$lang['effect_sidebar'] = 'Event Sidebar: ⭐ star + highlighted background + accent border'; 198*22228b0eSAtari911$lang['effect_widget'] = 'Sidebar Widget: Dedicated "Important Events" section + highlighting'; 199*22228b0eSAtari911$lang['effect_popup'] = 'Day Popup: Events shown with full details'; 200*22228b0eSAtari911$lang['important_ns_hint'] = 'Comma-separated list of namespace names (e.g., "important,urgent,bills")'; 201*22228b0eSAtari911 202*22228b0eSAtari911// Cleanup Events 203*22228b0eSAtari911$lang['cleanup_old_events'] = 'Cleanup Old Events'; 204*22228b0eSAtari911$lang['cleanup_desc'] = 'Delete events based on criteria below. Automatic backup created before deletion.'; 205*22228b0eSAtari911$lang['by_age'] = 'By Age'; 206*22228b0eSAtari911$lang['by_status'] = 'By Status'; 207*22228b0eSAtari911$lang['by_date_range'] = 'By Date Range'; 208*22228b0eSAtari911$lang['delete_older_than'] = 'Delete events older than'; 209*22228b0eSAtari911$lang['months'] = 'months'; 210*22228b0eSAtari911$lang['years'] = 'years'; 211*22228b0eSAtari911$lang['completed_tasks'] = 'Completed tasks'; 212*22228b0eSAtari911$lang['past_events'] = 'Past events'; 213*22228b0eSAtari911$lang['from_date'] = 'From'; 214*22228b0eSAtari911$lang['to_date'] = 'To'; 215*22228b0eSAtari911$lang['namespace_filter'] = 'Namespace'; 216*22228b0eSAtari911$lang['namespace_filter_hint'] = 'Leave empty for all, or specify: work, personal, etc.'; 217*22228b0eSAtari911$lang['backup_auto'] = 'Backup created automatically'; 218*22228b0eSAtari911$lang['cleanup_confirm'] = 'Are you sure you want to delete these events? A backup will be created first, but this action cannot be easily undone.'; 219*22228b0eSAtari911$lang['no_events_match'] = 'No events match the criteria. Nothing would be deleted.'; 220*22228b0eSAtari911$lang['events_would_delete'] = 'The following %d event(s) would be deleted:'; 221*22228b0eSAtari911$lang['loading_preview'] = 'Loading preview...'; 222*22228b0eSAtari911$lang['error_loading'] = 'Error loading preview'; 223*22228b0eSAtari911$lang['debug_info'] = 'Debug Info'; 224*22228b0eSAtari911 225*22228b0eSAtari911// Recurring Events 226*22228b0eSAtari911$lang['recurring_events'] = 'Recurring Events'; 227*22228b0eSAtari911$lang['trim_all_past'] = 'Trim All Past'; 228*22228b0eSAtari911$lang['rescan'] = 'Rescan'; 229*22228b0eSAtari911 230*22228b0eSAtari911// Namespace Explorer 231*22228b0eSAtari911$lang['namespace_explorer'] = 'Namespace Explorer'; 232*22228b0eSAtari911$lang['namespace_explorer_desc'] = 'Select events and move between namespaces. Drag & drop also supported.'; 233*22228b0eSAtari911$lang['search_events'] = 'Search events by title...'; 234*22228b0eSAtari911$lang['type_or_select'] = 'Type or select...'; 235*22228b0eSAtari911$lang['drop_target'] = 'Drop Target'; 236*22228b0eSAtari911$lang['drop_here'] = 'Drop here'; 237*22228b0eSAtari911 238*22228b0eSAtari911// Recurring Events Table 239*22228b0eSAtari911$lang['search_recurring'] = 'Search recurring events...'; 240*22228b0eSAtari911$lang['no_recurring_found'] = 'No recurring events found.'; 241*22228b0eSAtari911$lang['col_title'] = 'Title'; 242*22228b0eSAtari911$lang['col_namespace'] = 'Namespace'; 243*22228b0eSAtari911$lang['col_pattern'] = 'Pattern'; 244*22228b0eSAtari911$lang['col_range'] = 'Range'; 245*22228b0eSAtari911$lang['col_count'] = 'Count'; 246*22228b0eSAtari911$lang['col_source'] = 'Source'; 247*22228b0eSAtari911$lang['col_actions'] = 'Actions'; 248*22228b0eSAtari911$lang['source_flagged'] = 'Flagged'; 249*22228b0eSAtari911$lang['source_detected'] = 'Detected'; 250*22228b0eSAtari911$lang['btn_edit'] = 'Edit'; 251*22228b0eSAtari911$lang['btn_manage'] = 'Manage'; 252*22228b0eSAtari911$lang['btn_del'] = 'Del'; 253*22228b0eSAtari911$lang['total_series'] = 'Total: %d series'; 254*22228b0eSAtari911 255*22228b0eSAtari911// Recurrence patterns 256*22228b0eSAtari911$lang['pattern_daily'] = 'Daily'; 257*22228b0eSAtari911$lang['pattern_weekly'] = 'Weekly'; 258*22228b0eSAtari911$lang['pattern_monthly'] = 'Monthly'; 259*22228b0eSAtari911$lang['pattern_yearly'] = 'Yearly'; 260*22228b0eSAtari911$lang['pattern_custom'] = 'Custom'; 261*22228b0eSAtari911 262*22228b0eSAtari911// Namespace Explorer control bar 263*22228b0eSAtari911$lang['btn_move'] = 'Move'; 264*22228b0eSAtari911$lang['new_namespace'] = 'New Namespace'; 265*22228b0eSAtari911$lang['cleanup_empty'] = 'Cleanup'; 266*22228b0eSAtari911$lang['x_selected'] = '%d selected'; 267*22228b0eSAtari911$lang['zero_selected'] = '0 selected'; 268*22228b0eSAtari911 269*22228b0eSAtari911// Button tooltips 270*22228b0eSAtari911$lang['tooltip_edit'] = 'Edit title, time, namespace, pattern'; 271*22228b0eSAtari911$lang['tooltip_manage'] = 'Extend, trim, pause, change dates'; 272*22228b0eSAtari911$lang['tooltip_delete_all'] = 'Delete all occurrences'; 273*22228b0eSAtari911 274*22228b0eSAtari911// JavaScript messages 275*22228b0eSAtari911$lang['no_events_selected'] = 'No events selected'; 276*22228b0eSAtari911$lang['delete_confirm'] = "Delete %d selected event(s)?\n\nThis cannot be undone!"; 277*22228b0eSAtari911$lang['delete_ns_confirm'] = "Delete ENTIRE namespace: %s?\n\nThis will delete ALL events in this namespace!\n\nThis cannot be undone!"; 278*22228b0eSAtari911$lang['scanning'] = 'Scanning...'; 279*22228b0eSAtari911$lang['cleaning'] = 'Cleaning...'; 280*22228b0eSAtari911$lang['no_empty_ns'] = 'No empty namespaces or orphan calendar folders found.'; 281*22228b0eSAtari911$lang['found_items'] = 'Found %d item(s) to clean up'; 282*22228b0eSAtari911$lang['proceed_cleanup'] = 'Proceed with cleanup?'; 283*22228b0eSAtari911 284*22228b0eSAtari911// New Namespace dialog 285*22228b0eSAtari911$lang['enter_namespace'] = "Enter new namespace name:\n\nExamples:\n- work\n- personal\n- projects:alpha"; 286*22228b0eSAtari911$lang['invalid_namespace'] = "Invalid namespace name.\n\nUse only letters, numbers, underscore, hyphen, and colon.\nExample: work:projects:alpha"; 287*22228b0eSAtari911 288*22228b0eSAtari911// Rename namespace dialog 289*22228b0eSAtari911$lang['rename_namespace'] = "Rename namespace: %s\n\nEnter new name:"; 290*22228b0eSAtari911 291*22228b0eSAtari911// Delete recurring series 292*22228b0eSAtari911$lang['delete_recurring_confirm'] = "Delete ALL occurrences of: %s (%s)?\n\nThis cannot be undone!"; 293*22228b0eSAtari911 294*22228b0eSAtari911// Trim recurring events 295*22228b0eSAtari911$lang['no_past_recurring'] = 'No past recurring events found to remove.'; 296*22228b0eSAtari911$lang['found_past_recurring'] = "Found %d past recurring event(s) to remove.\n\nThis cannot be undone. Proceed?"; 297*22228b0eSAtari911$lang['counting'] = 'Counting...'; 298*22228b0eSAtari911$lang['trimming'] = 'Trimming...'; 299*22228b0eSAtari911 300*22228b0eSAtari911// Manage recurring dialog buttons 301*22228b0eSAtari911$lang['btn_trim'] = 'Trim'; 302*22228b0eSAtari911$lang['btn_change'] = 'Change'; 303*22228b0eSAtari911$lang['btn_shift'] = 'Shift'; 304*22228b0eSAtari911$lang['trim_confirm'] = 'Remove all occurrences before %s?'; 305*22228b0eSAtari911$lang['respace_confirm'] = 'Respace all future occurrences?'; 306*22228b0eSAtari911$lang['shift_confirm'] = 'Shift all occurrences to new start date?'; 307*22228b0eSAtari911 308*22228b0eSAtari911// Manage Recurring Dialog 309*22228b0eSAtari911$lang['manage_recurring_title'] = 'Manage Recurring Series'; 310*22228b0eSAtari911$lang['occurrences'] = 'occurrences'; 311*22228b0eSAtari911$lang['extend_series'] = 'Extend Series'; 312*22228b0eSAtari911$lang['add_occurrences'] = 'Add occurrences:'; 313*22228b0eSAtari911$lang['days_apart'] = 'Days apart:'; 314*22228b0eSAtari911$lang['btn_extend'] = 'Extend'; 315*22228b0eSAtari911$lang['trim_past_events'] = 'Trim Past Events'; 316*22228b0eSAtari911$lang['remove_before'] = 'Remove before:'; 317*22228b0eSAtari911$lang['change_pattern'] = 'Change Pattern'; 318*22228b0eSAtari911$lang['respace_note'] = 'Respaces future occurrences only. Past events stay in place.'; 319*22228b0eSAtari911$lang['new_interval'] = 'New interval:'; 320*22228b0eSAtari911$lang['change_start_date'] = 'Change Start Date'; 321*22228b0eSAtari911$lang['shift_note'] = 'Shifts ALL occurrences by the difference between old and new start date.'; 322*22228b0eSAtari911$lang['current_label'] = 'Current:'; 323*22228b0eSAtari911$lang['pause_series'] = 'Pause Series'; 324*22228b0eSAtari911$lang['resume_series'] = 'Resume Series'; 325*22228b0eSAtari911$lang['pause_note'] = 'Adds ⏸ prefix to future occurrences. They remain in the calendar but are visually marked as paused.'; 326*22228b0eSAtari911$lang['resume_note'] = 'Removes ⏸ prefix and paused flag from all occurrences.'; 327*22228b0eSAtari911$lang['btn_pause'] = 'Pause'; 328*22228b0eSAtari911$lang['btn_resume'] = 'Resume'; 329*22228b0eSAtari911$lang['btn_close'] = 'Close'; 330*22228b0eSAtari911 331*22228b0eSAtari911// Interval options 332*22228b0eSAtari911$lang['interval_daily'] = 'Daily'; 333*22228b0eSAtari911$lang['interval_weekly'] = 'Weekly'; 334*22228b0eSAtari911$lang['interval_biweekly'] = 'Bi-weekly'; 335*22228b0eSAtari911$lang['interval_monthly'] = 'Monthly'; 336*22228b0eSAtari911$lang['interval_quarterly'] = 'Quarterly'; 337*22228b0eSAtari911$lang['interval_yearly'] = 'Yearly'; 338*22228b0eSAtari911 339*22228b0eSAtari911// Edit Recurring Dialog 340*22228b0eSAtari911$lang['edit_recurring_title'] = 'Edit Recurring Event'; 341*22228b0eSAtari911$lang['changes_apply_to'] = 'Changes apply to ALL occurrences of:'; 342*22228b0eSAtari911$lang['field_title'] = 'TITLE'; 343*22228b0eSAtari911$lang['field_start_time'] = 'START TIME'; 344*22228b0eSAtari911$lang['field_end_time'] = 'END TIME'; 345*22228b0eSAtari911$lang['field_namespace'] = 'NAMESPACE'; 346*22228b0eSAtari911$lang['field_color'] = 'COLOR'; 347*22228b0eSAtari911$lang['recurrence_pattern'] = 'RECURRENCE PATTERN'; 348*22228b0eSAtari911$lang['every'] = 'Every'; 349*22228b0eSAtari911$lang['on_days'] = 'On days:'; 350*22228b0eSAtari911$lang['monthly_options'] = 'Monthly options:'; 351*22228b0eSAtari911$lang['day_of_month'] = 'Day of month:'; 352*22228b0eSAtari911$lang['ordinal_weekday'] = 'Ordinal weekday:'; 353*22228b0eSAtari911$lang['btn_save_changes'] = 'Save Changes'; 354*22228b0eSAtari911$lang['btn_cancel'] = 'Cancel'; 355*22228b0eSAtari911 356*22228b0eSAtari911// Ordinal labels 357*22228b0eSAtari911$lang['ordinal_first'] = 'First'; 358*22228b0eSAtari911$lang['ordinal_second'] = 'Second'; 359*22228b0eSAtari911$lang['ordinal_third'] = 'Third'; 360*22228b0eSAtari911$lang['ordinal_fourth'] = 'Fourth'; 361*22228b0eSAtari911$lang['ordinal_fifth'] = 'Fifth'; 362*22228b0eSAtari911$lang['ordinal_last'] = 'Last'; 363*22228b0eSAtari911 364*22228b0eSAtari911// Day names short 365*22228b0eSAtari911$lang['day_sun'] = 'Sun'; 366*22228b0eSAtari911$lang['day_mon'] = 'Mon'; 367*22228b0eSAtari911$lang['day_tue'] = 'Tue'; 368*22228b0eSAtari911$lang['day_wed'] = 'Wed'; 369*22228b0eSAtari911$lang['day_thu'] = 'Thu'; 370*22228b0eSAtari911$lang['day_fri'] = 'Fri'; 371*22228b0eSAtari911$lang['day_sat'] = 'Sat'; 372*22228b0eSAtari911 373*22228b0eSAtari911// Day names full 374*22228b0eSAtari911$lang['day_sunday'] = 'Sunday'; 375*22228b0eSAtari911$lang['day_monday'] = 'Monday'; 376*22228b0eSAtari911$lang['day_tuesday'] = 'Tuesday'; 377*22228b0eSAtari911$lang['day_wednesday'] = 'Wednesday'; 378*22228b0eSAtari911$lang['day_thursday'] = 'Thursday'; 379*22228b0eSAtari911$lang['day_friday'] = 'Friday'; 380*22228b0eSAtari911$lang['day_saturday'] = 'Saturday'; 381*22228b0eSAtari911 382*22228b0eSAtari911// Recurrence type labels 383*22228b0eSAtari911$lang['rec_days'] = 'Day(s)'; 384*22228b0eSAtari911$lang['rec_weeks'] = 'Week(s)'; 385*22228b0eSAtari911$lang['rec_months'] = 'Month(s)'; 386*22228b0eSAtari911$lang['rec_years'] = 'Year(s)'; 387*22228b0eSAtari911 388*22228b0eSAtari911// Backup Events 389*22228b0eSAtari911$lang['backup_events'] = 'Backup Events'; 390*22228b0eSAtari911$lang['backup_desc'] = 'Create full backups of all event data. Download or manage existing backups.'; 391*22228b0eSAtari911$lang['create_backup'] = 'Create Backup'; 392*22228b0eSAtari911$lang['available_backups'] = 'Available Backups'; 393*22228b0eSAtari911$lang['no_backups'] = 'No backups found'; 394*22228b0eSAtari911$lang['backup_date'] = 'Date'; 395*22228b0eSAtari911$lang['backup_size'] = 'Size'; 396*22228b0eSAtari911$lang['backup_actions'] = 'Actions'; 397*22228b0eSAtari911$lang['delete_selected'] = 'Delete Selected'; 398*22228b0eSAtari911$lang['confirm_delete_backups'] = 'Are you sure you want to delete the selected backups?'; 399*22228b0eSAtari911 400*22228b0eSAtari911// Edit Recurring Dialog additional strings 401*22228b0eSAtari911$lang['default_label'] = '(default)'; 402*22228b0eSAtari911$lang['current_suffix'] = '(current)'; 403*22228b0eSAtari911$lang['repeat_every'] = 'Repeat every'; 404*22228b0eSAtari911$lang['on_these_days'] = 'On these days:'; 405*22228b0eSAtari911$lang['repeat_on'] = 'Repeat on:'; 406*22228b0eSAtari911$lang['weekday_pattern'] = 'Weekday pattern'; 407*22228b0eSAtari911$lang['day_label'] = 'Day'; 408*22228b0eSAtari911$lang['of_each_month'] = 'of each month'; 409*22228b0eSAtari911$lang['repeat_until'] = 'Repeat Until (optional)'; 410*22228b0eSAtari911$lang['repeat_until_hint'] = 'Leave empty to keep existing end date'; 411*22228b0eSAtari911 412*22228b0eSAtari911// Update Plugin Tab 413*22228b0eSAtari911$lang['update_plugin'] = 'Update Plugin'; 414*22228b0eSAtari911$lang['current_version'] = 'Current Version'; 415*22228b0eSAtari911$lang['version_label'] = 'Version'; 416*22228b0eSAtari911$lang['author'] = 'Author'; 417*22228b0eSAtari911$lang['description_label'] = 'Description'; 418*22228b0eSAtari911$lang['location'] = 'Location'; 419*22228b0eSAtari911$lang['permissions'] = 'Permissions'; 420*22228b0eSAtari911$lang['permissions_ok'] = 'OK - ready to update'; 421*22228b0eSAtari911$lang['permissions_issues'] = 'Issues detected'; 422*22228b0eSAtari911$lang['plugin_dir_not_writable'] = 'Plugin directory not writable'; 423*22228b0eSAtari911$lang['parent_dir_not_writable'] = 'Parent directory not writable'; 424*22228b0eSAtari911$lang['fix_with'] = 'Fix with'; 425*22228b0eSAtari911$lang['or_label'] = 'Or'; 426*22228b0eSAtari911$lang['upload_new_version'] = 'Upload New Version'; 427*22228b0eSAtari911$lang['upload_desc'] = 'Upload a calendar plugin ZIP file to update. Your configuration will be preserved.'; 428*22228b0eSAtari911$lang['backup_before_update'] = 'Create backup before updating (Recommended)'; 429*22228b0eSAtari911$lang['upload_install'] = 'Upload & Install'; 430*22228b0eSAtari911$lang['clear_cache'] = 'Clear Cache'; 431*22228b0eSAtari911$lang['clear_cache_confirm'] = 'Clear all DokuWiki cache? This will refresh all plugin files.'; 432*22228b0eSAtari911$lang['clear_cache_hint'] = 'Clear the DokuWiki cache if changes aren\'t appearing or after updating the plugin.'; 433*22228b0eSAtari911$lang['important_notes'] = 'Important Notes'; 434*22228b0eSAtari911$lang['note_replace_files'] = 'This will replace all plugin files'; 435*22228b0eSAtari911$lang['note_preserve_config'] = 'Configuration files (sync_config.php) will be preserved'; 436*22228b0eSAtari911$lang['note_data_safe'] = 'Event data will not be affected'; 437*22228b0eSAtari911$lang['note_backup_location'] = 'Backup will be saved to'; 438*22228b0eSAtari911$lang['note_valid_zip'] = 'Make sure the ZIP file is a valid calendar plugin'; 439*22228b0eSAtari911$lang['version_history'] = 'Version History'; 440*22228b0eSAtari911$lang['x_of_y'] = '%d of %d'; 441*22228b0eSAtari911$lang['current_release'] = 'Current Release'; 442*22228b0eSAtari911$lang['running'] = 'RUNNING'; 443*22228b0eSAtari911$lang['no_details_recorded'] = 'No detailed changes recorded'; 444*22228b0eSAtari911$lang['no_versions_found'] = 'No versions found in changelog'; 445*22228b0eSAtari911$lang['changelog_not_available'] = 'Changelog not available'; 446*22228b0eSAtari911$lang['backups'] = 'Backups'; 447*22228b0eSAtari911$lang['create_backup_now'] = 'Create Backup Now'; 448*22228b0eSAtari911$lang['create_backup_confirm'] = 'Create a backup of the current plugin version?'; 449*22228b0eSAtari911$lang['restore_hint'] = 'Click the Restore button to reinstall from a backup. This uses DokuWiki\'s Extension Manager for safe installation. Alternatively, download the ZIP and upload via <strong>Admin → Extension Manager → Install</strong>.'; 450*22228b0eSAtari911$lang['select_all'] = 'Select All'; 451*22228b0eSAtari911$lang['x_selected_backups'] = '(%d selected)'; 452*22228b0eSAtari911$lang['selected'] = 'selected'; 453*22228b0eSAtari911$lang['backup_file'] = 'Backup File'; 454*22228b0eSAtari911$lang['size'] = 'Size'; 455*22228b0eSAtari911$lang['actions'] = 'Actions'; 456*22228b0eSAtari911$lang['download'] = 'Download'; 457*22228b0eSAtari911$lang['restore'] = 'Restore'; 458*22228b0eSAtari911$lang['rename'] = 'Rename'; 459*22228b0eSAtari911$lang['no_backups_yet'] = 'No backups yet. Click "Create Backup Now" to create your first backup.'; 460*22228b0eSAtari911$lang['select_zip_file'] = 'Please select a ZIP file'; 461*22228b0eSAtari911$lang['confirm_upload'] = 'Upload and install new plugin version?'; 462*22228b0eSAtari911$lang['restore_confirm'] = "Restore from backup: %s?\n\nThis will replace the current plugin files with the backup version."; 463*22228b0eSAtari911$lang['restore_error'] = 'Restore failed: Backup file not found.'; 464*22228b0eSAtari911$lang['enter_new_name'] = 'Enter new name for the backup:'; 465*22228b0eSAtari911$lang['delete_backup_confirm'] = 'Delete this backup: %s?'; 466*22228b0eSAtari911$lang['delete_selected_confirm'] = 'Delete %d selected backup(s)?'; 467*22228b0eSAtari911 468*22228b0eSAtari911// Outlook Sync Tab 469*22228b0eSAtari911$lang['outlook_sync_config'] = 'Outlook Sync Configuration'; 470*22228b0eSAtari911$lang['export_config'] = 'Export Config'; 471*22228b0eSAtari911$lang['import_config'] = 'Import Config'; 472*22228b0eSAtari911$lang['importing'] = 'Importing...'; 473*22228b0eSAtari911$lang['import_success'] = 'Import successful! Reloading...'; 474*22228b0eSAtari911$lang['azure_credentials'] = 'Microsoft Azure App Credentials'; 475*22228b0eSAtari911$lang['azure_register_hint'] = 'Register at Azure Portal → App registrations'; 476*22228b0eSAtari911$lang['tenant_id'] = 'Tenant ID'; 477*22228b0eSAtari911$lang['client_id'] = 'Client ID (Application ID)'; 478*22228b0eSAtari911$lang['client_secret'] = 'Client Secret'; 479*22228b0eSAtari911$lang['keep_secret_safe'] = 'Keep this secret safe!'; 480*22228b0eSAtari911$lang['outlook_settings'] = 'Outlook Settings'; 481*22228b0eSAtari911$lang['user_email'] = 'User Email'; 482*22228b0eSAtari911$lang['timezone'] = 'Timezone'; 483*22228b0eSAtari911$lang['default_category'] = 'Default Category'; 484*22228b0eSAtari911$lang['reminder_minutes'] = 'Reminder (minutes)'; 485*22228b0eSAtari911$lang['sync_options'] = 'Sync Options'; 486*22228b0eSAtari911$lang['sync_completed_tasks'] = 'Sync completed tasks'; 487*22228b0eSAtari911$lang['delete_from_outlook'] = 'Delete from Outlook when removed'; 488*22228b0eSAtari911$lang['sync_all_namespaces'] = 'Sync all namespaces'; 489*22228b0eSAtari911$lang['select_namespaces_to_sync'] = 'Select namespaces to sync:'; 490*22228b0eSAtari911$lang['namespace_to_category'] = 'Namespace → Category'; 491*22228b0eSAtari911$lang['ns_mapping_hint'] = 'One per line: namespace=Category'; 492*22228b0eSAtari911$lang['color_to_category'] = 'Event Color → Category'; 493*22228b0eSAtari911$lang['color_mapping_hint'] = 'Map calendar colors to Outlook categories'; 494*22228b0eSAtari911$lang['none'] = '-- None --'; 495*22228b0eSAtari911$lang['save_configuration'] = 'Save Configuration'; 496*22228b0eSAtari911$lang['config_exported'] = 'Config exported successfully!'; 497*22228b0eSAtari911$lang['config_export_warning'] = "This file contains encrypted credentials.\nKeep it secure!"; 498*22228b0eSAtari911$lang['export_failed'] = 'Export failed'; 499*22228b0eSAtari911$lang['error'] = 'Error'; 500*22228b0eSAtari911$lang['sync_status'] = 'Sync Status'; 501*22228b0eSAtari911$lang['sync_now'] = 'Sync Now'; 502*22228b0eSAtari911$lang['stop_sync'] = 'Stop Sync'; 503*22228b0eSAtari911$lang['syncing'] = 'Syncing...'; 504*22228b0eSAtari911$lang['last_sync_label'] = 'Last sync'; 505*22228b0eSAtari911$lang['never_synced'] = 'Never'; 506*22228b0eSAtari911$lang['sync_log'] = 'Sync Log'; 507*22228b0eSAtari911$lang['download_log'] = 'Download Log'; 508*22228b0eSAtari911$lang['clear_log'] = 'Clear Log'; 509*22228b0eSAtari911$lang['no_log_entries'] = 'No log entries'; 510*22228b0eSAtari911$lang['log_cleared'] = 'Log cleared'; 511*22228b0eSAtari911 512*22228b0eSAtari911// Themes Tab 513*22228b0eSAtari911$lang['sidebar_widget_settings'] = 'Sidebar Widget Settings'; 514*22228b0eSAtari911$lang['sidebar_widget_desc'] = 'Customize the appearance and behavior of the sidebar calendar widget.'; 515*22228b0eSAtari911$lang['week_start_day'] = 'Week Start Day'; 516*22228b0eSAtari911$lang['week_start_desc'] = 'Choose which day the week calendar grid starts with:'; 517*22228b0eSAtari911$lang['monday'] = 'Monday'; 518*22228b0eSAtari911$lang['sunday'] = 'Sunday'; 519*22228b0eSAtari911$lang['week_starts_monday'] = 'Week starts on Monday (ISO standard)'; 520*22228b0eSAtari911$lang['week_starts_sunday'] = 'Week starts on Sunday (US/Canada standard)'; 521*22228b0eSAtari911$lang['itinerary_section'] = 'Itinerary Section'; 522*22228b0eSAtari911$lang['itinerary_desc'] = 'Choose whether the Today/Tomorrow/Important Events sections are expanded or collapsed by default:'; 523*22228b0eSAtari911$lang['expanded'] = 'Expanded'; 524*22228b0eSAtari911$lang['collapsed'] = 'Collapsed'; 525*22228b0eSAtari911$lang['show_itinerary_default'] = 'Show itinerary sections by default'; 526*22228b0eSAtari911$lang['hide_itinerary_default'] = 'Hide itinerary sections by default (click bar to expand)'; 527*22228b0eSAtari911$lang['visual_theme'] = 'Visual Theme'; 528*22228b0eSAtari911$lang['theme_matrix'] = 'Matrix Edition'; 529*22228b0eSAtari911$lang['theme_matrix_desc'] = 'Dark green theme with Matrix-style glow effects and neon accents'; 530*22228b0eSAtari911$lang['theme_purple'] = 'Purple Dream'; 531*22228b0eSAtari911$lang['theme_purple_desc'] = 'Rich purple theme with elegant violet accents and soft glow'; 532*22228b0eSAtari911$lang['theme_professional'] = 'Professional Blue'; 533*22228b0eSAtari911$lang['theme_professional_desc'] = 'Clean blue and grey theme with modern professional styling, no glow effects'; 534*22228b0eSAtari911$lang['theme_pink'] = 'Pink Bling'; 535*22228b0eSAtari911$lang['theme_pink_desc'] = 'Glamorous hot pink theme with maximum sparkle, hearts, and diamonds ✨'; 536*22228b0eSAtari911$lang['theme_wiki'] = 'Wiki Default'; 537*22228b0eSAtari911$lang['theme_wiki_desc'] = 'Automatically matches your DokuWiki template theme using CSS variables - adapts to light and dark themes'; 538*22228b0eSAtari911$lang['preview'] = 'Preview'; 539*22228b0eSAtari911$lang['save_settings'] = 'Save Settings'; 540*22228b0eSAtari911$lang['settings_saved'] = 'Settings saved successfully!'; 541*22228b0eSAtari911 542*22228b0eSAtari911// Sync Controls 543*22228b0eSAtari911$lang['sync_controls'] = 'Sync Controls'; 544*22228b0eSAtari911$lang['run_sync_now'] = 'Run Sync Now'; 545*22228b0eSAtari911$lang['stop_sync'] = 'Stop Sync'; 546*22228b0eSAtari911$lang['no_cron_detected'] = 'No cron job detected'; 547*22228b0eSAtari911$lang['running'] = 'Running...'; 548*22228b0eSAtari911$lang['starting_sync'] = 'Starting sync...'; 549*22228b0eSAtari911$lang['stopping_sync'] = 'Stopping sync...'; 550*22228b0eSAtari911$lang['duplicate_log_warning'] = 'Duplicate log entries: Your crontab has a >> redirect. The sync script logs internally, so this causes duplicate entries. Remove the redirect from your crontab.'; 551*22228b0eSAtari911$lang['show_cron_details'] = 'Show cron details'; 552*22228b0eSAtari911$lang['cron_setup_hint'] = 'To enable automatic syncing, add to crontab:'; 553*22228b0eSAtari911$lang['cron_note'] = 'Note: The script logs to %s automatically. Do not use >> redirect.'; 554*22228b0eSAtari911$lang['log_not_writable'] = 'Log file not writable. Run:'; 555*22228b0eSAtari911 556*22228b0eSAtari911// Live Sync Log 557*22228b0eSAtari911$lang['live_sync_log'] = 'Live Sync Log'; 558*22228b0eSAtari911$lang['log_location'] = 'Location:'; 559*22228b0eSAtari911$lang['updates_interval'] = 'Updates every 2 seconds'; 560*22228b0eSAtari911$lang['pause'] = 'Pause'; 561*22228b0eSAtari911$lang['resume'] = 'Resume'; 562*22228b0eSAtari911$lang['loading_log'] = 'Loading log...'; 563*22228b0eSAtari911$lang['no_log_data'] = 'No log data available'; 564*22228b0eSAtari911$lang['clear_log_confirm'] = "Clear the sync log file?\n\nThis will delete all log entries."; 565*22228b0eSAtari911$lang['log_cleared_success'] = 'Log cleared successfully'; 566*22228b0eSAtari911 567*22228b0eSAtari911// Color names for color mapping 568*22228b0eSAtari911$lang['color_blue'] = 'Blue'; 569*22228b0eSAtari911$lang['color_green'] = 'Green'; 570*22228b0eSAtari911$lang['color_red'] = 'Red'; 571*22228b0eSAtari911$lang['color_orange'] = 'Orange'; 572*22228b0eSAtari911$lang['color_purple'] = 'Purple'; 573*22228b0eSAtari911$lang['color_teal'] = 'Teal'; 574*22228b0eSAtari911 575*22228b0eSAtari911// Placeholder texts 576*22228b0eSAtari911$lang['enter_client_secret'] = 'Enter client secret'; 577*22228b0eSAtari911 578*22228b0eSAtari911// Error messages 579*22228b0eSAtari911$lang['error_admin_required'] = 'Admin access required'; 580*22228b0eSAtari911$lang['error_unknown_action'] = 'Unknown admin action'; 581*22228b0eSAtari911$lang['error_save_config'] = 'Error: Could not save configuration file'; 582*22228b0eSAtari911$lang['error_log_not_writable'] = 'Log file not writable'; 583*22228b0eSAtari911 584*22228b0eSAtari911// Update Plugin JavaScript strings 585*22228b0eSAtari911$lang['select_zip_file'] = 'Please select a ZIP file'; 586*22228b0eSAtari911$lang['upload_confirm'] = "Upload and install: %s?\n\nThis will replace all plugin files.\nYour configuration and data will be preserved.\n\nContinue?"; 587*22228b0eSAtari911$lang['selected'] = 'selected'; 588*22228b0eSAtari911$lang['no_backups_selected'] = 'No backups selected'; 589*22228b0eSAtari911$lang['delete_selected_confirm'] = "Delete %d selected backup(s)?\n\n%s\n\nThis cannot be undone!"; 590*22228b0eSAtari911$lang['deleted_with_errors'] = 'Deleted %d backups. Errors: %s'; 591*22228b0eSAtari911$lang['rename_prompt'] = "Enter new backup name (without .zip extension):\n\nCurrent: %s"; 592*22228b0eSAtari911$lang['invalid_filename'] = 'Invalid filename. Use only letters, numbers, dots, dashes, and underscores.'; 593*22228b0eSAtari911 594*22228b0eSAtari911// Additional error and status messages 595*22228b0eSAtari911$lang['no_log_file'] = 'No log file found. Sync hasn\'t run yet.'; 596*22228b0eSAtari911$lang['admin_access_required'] = 'Admin access required'; 597*22228b0eSAtari911$lang['unknown_admin_action'] = 'Unknown admin action'; 598*22228b0eSAtari911 599*22228b0eSAtari911// Configuration save messages 600*22228b0eSAtari911$lang['config_saved_success'] = 'Configuration saved successfully!'; 601*22228b0eSAtari911$lang['config_save_error'] = 'Error: Could not save configuration file'; 602*22228b0eSAtari911$lang['important_ns_saved'] = 'Important namespaces saved'; 603*22228b0eSAtari911 604*22228b0eSAtari911// Import/Export config messages 605*22228b0eSAtari911$lang['export_success'] = "Config exported successfully!\n\n⚠️ This file contains encrypted credentials.\nKeep it secure!"; 606*22228b0eSAtari911$lang['export_failed'] = 'Export failed'; 607*22228b0eSAtari911$lang['importing'] = 'Importing...'; 608*22228b0eSAtari911$lang['import_successful'] = 'Import successful! Reloading...'; 609*22228b0eSAtari911$lang['import_failed'] = 'Import failed'; 610*22228b0eSAtari911 611*22228b0eSAtari911// Cleanup messages 612*22228b0eSAtari911$lang['cleanup_complete'] = 'Cleanup complete'; 613*22228b0eSAtari911$lang['failed'] = 'Failed'; 614*22228b0eSAtari911 615*22228b0eSAtari911// Recurring pattern descriptions 616*22228b0eSAtari911$lang['every_x_days'] = 'Every %d days'; 617*22228b0eSAtari911$lang['every_x_weeks'] = 'Every %d weeks'; 618*22228b0eSAtari911$lang['every_x_months'] = 'Every %d months'; 619*22228b0eSAtari911$lang['every_x_years'] = 'Every %d years'; 620*22228b0eSAtari911 621*22228b0eSAtari911// Upload/restore messages 622*22228b0eSAtari911$lang['failed_to_add'] = 'Failed to add: %s'; 623*22228b0eSAtari911$lang['cannot_read'] = 'Cannot read: %s'; 624*22228b0eSAtari911 625*22228b0eSAtari911// Import/cleanup messages 626*22228b0eSAtari911$lang['import_complete'] = 'Import complete! Imported %d new events'; 627*22228b0eSAtari911$lang['cleanup_deleted'] = 'Cleanup complete! Deleted %d event(s). Backup created: %s'; 628*22228b0eSAtari911 629*22228b0eSAtari911// Recurring pattern labels 630*22228b0eSAtari911$lang['daily'] = 'Daily'; 631*22228b0eSAtari911$lang['weekly'] = 'Weekly'; 632*22228b0eSAtari911$lang['bi_weekly'] = 'Bi-weekly'; 633*22228b0eSAtari911$lang['monthly'] = 'Monthly'; 634*22228b0eSAtari911$lang['quarterly'] = 'Quarterly'; 635*22228b0eSAtari911$lang['semi_annual'] = 'Semi-annual'; 636*22228b0eSAtari911$lang['yearly'] = 'Yearly'; 637*22228b0eSAtari911 638*22228b0eSAtari911// Day abbreviations for patterns 639*22228b0eSAtari911$lang['day_sun'] = 'Sun'; 640*22228b0eSAtari911$lang['day_mon'] = 'Mon'; 641*22228b0eSAtari911$lang['day_tue'] = 'Tue'; 642*22228b0eSAtari911$lang['day_wed'] = 'Wed'; 643*22228b0eSAtari911$lang['day_thu'] = 'Thu'; 644*22228b0eSAtari911$lang['day_fri'] = 'Fri'; 645*22228b0eSAtari911$lang['day_sat'] = 'Sat'; 646*22228b0eSAtari911 647*22228b0eSAtari911// Ordinal labels 648*22228b0eSAtari911$lang['ordinal_1st'] = '1st'; 649*22228b0eSAtari911$lang['ordinal_2nd'] = '2nd'; 650*22228b0eSAtari911$lang['ordinal_3rd'] = '3rd'; 651*22228b0eSAtari911$lang['ordinal_4th'] = '4th'; 652*22228b0eSAtari911$lang['ordinal_5th'] = '5th'; 653*22228b0eSAtari911$lang['ordinal_last'] = 'Last'; 654*22228b0eSAtari911 655*22228b0eSAtari911// Pattern format strings 656*22228b0eSAtari911$lang['pattern_day_x'] = '%s (day %s)'; 657*22228b0eSAtari911$lang['pattern_ordinal_day'] = '%s (%s %s)'; 658*22228b0eSAtari911 659*22228b0eSAtari911// Import status 660*22228b0eSAtari911$lang['skipped_duplicates'] = ', skipped %d duplicates'; 661*22228b0eSAtari911 662*22228b0eSAtari911// AJAX response messages 663*22228b0eSAtari911$lang['removed_past_recurring'] = 'Removed %d past recurring occurrences'; 664*22228b0eSAtari911$lang['added_occurrences'] = 'Added %d new occurrences'; 665*22228b0eSAtari911$lang['removed_past_before'] = 'Removed %d past occurrences before %s'; 666*22228b0eSAtari911$lang['paused_occurrences'] = 'Paused %d future occurrences'; 667*22228b0eSAtari911$lang['resumed_occurrences'] = 'Resumed %d occurrences'; 668*22228b0eSAtari911$lang['start_date_unchanged'] = 'Start date unchanged'; 669*22228b0eSAtari911$lang['shifted_occurrences'] = 'Shifted %d occurrences %s by %d days'; 670*22228b0eSAtari911$lang['respaced_occurrences'] = 'Respaced %d future occurrences to %s (%d days)'; 671*22228b0eSAtari911$lang['sync_script_not_found'] = 'Sync script not found at: %s'; 672*22228b0eSAtari911$lang['cannot_create_log_dir'] = 'Cannot create log directory: %s'; 673*22228b0eSAtari911$lang['cannot_create_log_file'] = 'Cannot create log file: %s'; 674*22228b0eSAtari911$lang['log_not_writable_chmod'] = 'Log file not writable: %s - Run: chmod 666 %s'; 675*22228b0eSAtari911$lang['cannot_find_php'] = 'Cannot find PHP binary'; 676*22228b0eSAtari911$lang['sync_completed'] = 'Sync completed! Check log for details.'; 677*22228b0eSAtari911$lang['stop_signal_sent'] = 'Stop signal sent to sync process'; 678*22228b0eSAtari911$lang['failed_abort_flag'] = 'Failed to create abort flag'; 679*22228b0eSAtari911$lang['config_not_found'] = 'Config file not found'; 680*22228b0eSAtari911$lang['config_exported'] = 'Config exported successfully'; 681*22228b0eSAtari911$lang['no_config_data'] = 'No config data provided'; 682*22228b0eSAtari911$lang['decryption_failed'] = 'Decryption failed. This config file was exported from a different DokuWiki installation (different secret key).'; 683*22228b0eSAtari911 684*22228b0eSAtari911// Direction strings for shift 685*22228b0eSAtari911$lang['forward'] = 'forward'; 686*22228b0eSAtari911$lang['back'] = 'back'; 687*22228b0eSAtari911 688*22228b0eSAtari911// Additional AJAX/backend messages 689*22228b0eSAtari911$lang['no_future_to_respace'] = 'No future occurrences to respace'; 690*22228b0eSAtari911$lang['sync_failed_exit'] = 'Sync failed (exit code: %d)'; 691*22228b0eSAtari911$lang['theme_saved_refresh'] = '✓ Theme and settings saved successfully! Refresh any page with the sidebar to see changes.'; 692*22228b0eSAtari911 693*22228b0eSAtari911// Upload/Update error messages 694*22228b0eSAtari911$lang['upload_failed'] = 'Upload failed: %s'; 695*22228b0eSAtari911$lang['no_file_uploaded'] = 'No file uploaded'; 696*22228b0eSAtari911$lang['dir_not_writable'] = 'Plugin directory is not writable. Please check permissions: %s'; 697*22228b0eSAtari911$lang['parent_dir_not_writable'] = 'Plugin parent directory is not writable. Please check permissions: %s'; 698*22228b0eSAtari911$lang['invalid_file_type'] = 'Invalid file type. Please upload a ZIP file.'; 699*22228b0eSAtari911$lang['backup_not_created'] = 'Backup file was not created'; 700*22228b0eSAtari911$lang['backup_too_small'] = 'Backup file is too small (%s). Only %d files were added. Backup aborted.'; 701*22228b0eSAtari911$lang['backup_incomplete'] = 'Backup incomplete: Only %d files were added (expected 30+). Backup aborted.'; 702*22228b0eSAtari911$lang['backup_zip_failed'] = 'Failed to create backup ZIP file'; 703*22228b0eSAtari911$lang['backup_failed'] = 'Backup failed: %s'; 704*22228b0eSAtari911$lang['open_zip_failed'] = 'Failed to open ZIP file'; 705*22228b0eSAtari911$lang['plugin_updated'] = 'Plugin updated successfully!'; 706*22228b0eSAtari911$lang['backup_saved_as'] = ' Backup saved as: %s'; 707*22228b0eSAtari911$lang['no_backup_specified'] = 'No backup file specified'; 708*22228b0eSAtari911$lang['invalid_backup_filename'] = 'Invalid backup filename'; 709*22228b0eSAtari911$lang['backup_not_found'] = 'Backup file not found'; 710*22228b0eSAtari911$lang['backup_deleted'] = 'Backup deleted: %s'; 711*22228b0eSAtari911$lang['delete_backup_failed'] = 'Failed to delete backup. Check file permissions.'; 712*22228b0eSAtari911$lang['missing_filenames'] = 'Missing filename(s)'; 713*22228b0eSAtari911$lang['invalid_filename_format'] = 'Invalid filename format'; 714*22228b0eSAtari911$lang['file_exists'] = 'A file with the new name already exists'; 715*22228b0eSAtari911$lang['backup_renamed'] = 'Backup renamed: %s → %s'; 716*22228b0eSAtari911$lang['rename_backup_failed'] = 'Failed to rename backup. Check file permissions.'; 717*22228b0eSAtari911$lang['extension_manager_unavailable'] = 'DokuWiki Extension Manager not available. Please install manually: Download the backup, go to Admin → Extension Manager → Install, and upload the ZIP file.'; 718*22228b0eSAtari911$lang['plugin_restored'] = 'Plugin restored from backup: %s (via Extension Manager)'; 719*22228b0eSAtari911$lang['restore_failed'] = 'Restore failed: %s'; 720*22228b0eSAtari911$lang['dir_not_readable'] = 'Plugin directory is not readable. Please check permissions.'; 721*22228b0eSAtari911$lang['cannot_save_backup'] = 'Plugin parent directory is not writable. Cannot save backup.'; 722*22228b0eSAtari911$lang['backup_created_success'] = '✓ Manual backup created successfully: %s (%s, %d files)'; 723*22228b0eSAtari911$lang['dir_does_not_exist'] = 'Directory does not exist: %s'; 724*22228b0eSAtari911$lang['dir_not_readable_err'] = 'Directory is not readable: %s'; 725*22228b0eSAtari911 726*22228b0eSAtari911// Config import/export additional messages 727*22228b0eSAtari911$lang['invalid_config_php_tag'] = 'Invalid config file: missing PHP opening tag. The file may be corrupted or from a different installation.'; 728*22228b0eSAtari911$lang['invalid_config_prohibited'] = 'Invalid config file: contains prohibited code patterns'; 729*22228b0eSAtari911$lang['invalid_config_return'] = 'Invalid config file: must contain a return array statement'; 730*22228b0eSAtari911$lang['config_write_failed'] = 'Failed to write config file'; 731*22228b0eSAtari911$lang['config_imported'] = 'Config imported successfully'; 732*22228b0eSAtari911 733*22228b0eSAtari911// Log file messages 734*22228b0eSAtari911$lang['log_file_created'] = 'Log file created'; 735*22228b0eSAtari911$lang['log_not_exist_create'] = 'Log file does not exist and cannot be created: %s'; 736*22228b0eSAtari911$lang['log_not_writable_sudo'] = 'Log file not writable. Run: sudo chmod 666 %s'; 737*22228b0eSAtari911$lang['file_put_failed'] = 'file_put_contents failed on: %s'; 738*22228b0eSAtari911 739*22228b0eSAtari911// Cache messages 740*22228b0eSAtari911$lang['cache_cleared'] = 'Cache cleared successfully!'; 741*22228b0eSAtari911$lang['cache_not_found'] = 'Cache directory not found'; 742*22228b0eSAtari911 743*22228b0eSAtari911// Recurring event messages 744*22228b0eSAtari911$lang['deleted_recurring'] = 'Deleted %d occurrences of recurring event: %s'; 745*22228b0eSAtari911$lang['updated_recurring'] = 'Updated %d occurrences of recurring event%s'; 746*22228b0eSAtari911 747*22228b0eSAtari911// Event management messages 748*22228b0eSAtari911$lang['no_events_selected'] = 'No events selected'; 749*22228b0eSAtari911$lang['moved_events'] = 'Moved %d event(s) to namespace: %s'; 750*22228b0eSAtari911$lang['event_file_not_found'] = 'Event file not found'; 751*22228b0eSAtari911$lang['event_read_failed'] = 'Could not read event file'; 752*22228b0eSAtari911$lang['event_not_found'] = 'Event not found'; 753*22228b0eSAtari911$lang['moved_event'] = 'Moved "%s" to %s'; 754*22228b0eSAtari911 755*22228b0eSAtari911// Namespace management messages 756*22228b0eSAtari911$lang['namespace_empty'] = 'Namespace name cannot be empty'; 757*22228b0eSAtari911$lang['namespace_invalid'] = 'Invalid namespace name. Use only letters, numbers, underscore, hyphen, and colon.'; 758*22228b0eSAtari911$lang['namespace_exists'] = 'Namespace \'%s\' already exists with events'; 759*22228b0eSAtari911$lang['namespace_create_failed'] = 'Failed to create namespace directory'; 760*22228b0eSAtari911$lang['namespace_created'] = 'Created namespace: %s'; 761*22228b0eSAtari911$lang['namespace_traversal'] = 'Invalid namespace: path traversal not allowed'; 762*22228b0eSAtari911$lang['namespace_not_found'] = 'Namespace directory not found: %s'; 763*22228b0eSAtari911$lang['namespace_deleted'] = 'Deleted namespace \'%s\': %d events in %d files'; 764*22228b0eSAtari911$lang['namespace_renamed'] = 'Renamed namespace \'%s\' to \'%s\': %d events in %d files'; 765*22228b0eSAtari911$lang['old_namespace_invalid'] = 'Invalid old namespace name. Use only letters, numbers, underscore, hyphen, and colon.'; 766*22228b0eSAtari911$lang['new_namespace_invalid'] = 'Invalid new namespace name. Use only letters, numbers, underscore, hyphen, and colon.'; 767*22228b0eSAtari911$lang['old_namespace_not_found'] = 'Old namespace directory not found: %s'; 768*22228b0eSAtari911$lang['new_namespace_exists'] = 'New namespace directory already exists: %s'; 769*22228b0eSAtari911$lang['rename_failed'] = 'Failed to rename directory'; 770*22228b0eSAtari911$lang['cannot_rename_empty'] = 'Cannot rename to empty namespace'; 771*22228b0eSAtari911$lang['source_namespace_not_found'] = 'Source namespace not found: %s'; 772*22228b0eSAtari911$lang['target_namespace_exists'] = 'Target namespace already exists: %s'; 773*22228b0eSAtari911$lang['rename_namespace_failed'] = 'Failed to rename namespace'; 774*22228b0eSAtari911$lang['deleted_events'] = 'Deleted %d event(s)'; 775*22228b0eSAtari911 776*22228b0eSAtari911// Cron interval strings 777*22228b0eSAtari911$lang['runs_every_minute'] = 'Runs every minute'; 778*22228b0eSAtari911$lang['runs_every_x_minutes'] = 'Runs every %d minutes'; 779*22228b0eSAtari911$lang['runs_hourly'] = 'Runs hourly'; 780*22228b0eSAtari911$lang['runs_every_hour'] = 'Runs every hour'; 781*22228b0eSAtari911$lang['runs_every_x_hours'] = 'Runs every %d hours'; 782*22228b0eSAtari911$lang['runs_daily'] = 'Runs daily'; 783*22228b0eSAtari911$lang['custom_schedule'] = 'Custom schedule'; 784*22228b0eSAtari911 785*22228b0eSAtari911// ========== SIDEBAR WIDGET / FRONTEND STRINGS ========== 786*22228b0eSAtari911 787*22228b0eSAtari911// Navigation & buttons 788*22228b0eSAtari911$lang['today_btn'] = 'Today'; 789*22228b0eSAtari911$lang['add_btn'] = '+ Add'; 790*22228b0eSAtari911$lang['search_placeholder'] = ' Search...'; 791*22228b0eSAtari911$lang['search_this_month'] = 'Search this month only'; 792*22228b0eSAtari911$lang['click_to_jump'] = 'Click to jump to month'; 793*22228b0eSAtari911$lang['events_header'] = 'Events'; 794*22228b0eSAtari911 795*22228b0eSAtari911// Itinerary section headers 796*22228b0eSAtari911$lang['itinerary_today'] = 'Today'; 797*22228b0eSAtari911$lang['itinerary_tomorrow'] = 'Tomorrow'; 798*22228b0eSAtari911$lang['itinerary_important'] = 'Important Events'; 799*22228b0eSAtari911$lang['important_tooltip'] = 'Important'; 800*22228b0eSAtari911 801*22228b0eSAtari911// Event dialog - title 802*22228b0eSAtari911$lang['dialog_add_event'] = 'Add Event'; 803*22228b0eSAtari911$lang['dialog_edit_event'] = 'Edit Event'; 804*22228b0eSAtari911 805*22228b0eSAtari911// Event dialog - labels 806*22228b0eSAtari911$lang['field_title'] = ' Title'; 807*22228b0eSAtari911$lang['field_title_placeholder'] = 'Event or task title...'; 808*22228b0eSAtari911$lang['field_namespace'] = ' Namespace'; 809*22228b0eSAtari911$lang['field_namespace_placeholder'] = 'Type to search or leave empty for default...'; 810*22228b0eSAtari911$lang['field_description'] = ' Description'; 811*22228b0eSAtari911$lang['field_description_placeholder'] = 'Optional details...'; 812*22228b0eSAtari911$lang['field_start_date'] = ' Start Date'; 813*22228b0eSAtari911$lang['field_end_date'] = ' End Date'; 814*22228b0eSAtari911$lang['field_start_time'] = ' Start Time'; 815*22228b0eSAtari911$lang['field_end_time'] = ' End Time'; 816*22228b0eSAtari911$lang['field_color'] = ' Color'; 817*22228b0eSAtari911 818*22228b0eSAtari911// Event dialog - time options 819*22228b0eSAtari911$lang['time_all_day'] = 'All day'; 820*22228b0eSAtari911$lang['time_same_as_start'] = 'Same as start'; 821*22228b0eSAtari911 822*22228b0eSAtari911// Event dialog - recurring options 823*22228b0eSAtari911$lang['recurring_label'] = ' Repeating Event'; 824*22228b0eSAtari911$lang['recurring_repeat_every'] = 'Repeat every'; 825*22228b0eSAtari911$lang['recurring_days'] = 'Day(s)'; 826*22228b0eSAtari911$lang['recurring_weeks'] = 'Week(s)'; 827*22228b0eSAtari911$lang['recurring_months'] = 'Month(s)'; 828*22228b0eSAtari911$lang['recurring_years'] = 'Year(s)'; 829*22228b0eSAtari911$lang['recurring_on_these_days'] = 'On these days:'; 830*22228b0eSAtari911$lang['recurring_repeat_on'] = 'Repeat on:'; 831*22228b0eSAtari911$lang['recurring_day_of_month'] = 'Day of month'; 832*22228b0eSAtari911$lang['recurring_weekday_pattern'] = 'Weekday pattern'; 833*22228b0eSAtari911$lang['recurring_day'] = 'Day'; 834*22228b0eSAtari911$lang['recurring_of_each_month'] = 'of each month'; 835*22228b0eSAtari911$lang['recurring_until'] = 'Repeat Until (optional)'; 836*22228b0eSAtari911$lang['recurring_until_hint'] = 'Leave empty for 1 year of events'; 837*22228b0eSAtari911 838*22228b0eSAtari911// Ordinal positions 839*22228b0eSAtari911$lang['ordinal_first'] = 'First'; 840*22228b0eSAtari911$lang['ordinal_second'] = 'Second'; 841*22228b0eSAtari911$lang['ordinal_third'] = 'Third'; 842*22228b0eSAtari911$lang['ordinal_fourth'] = 'Fourth'; 843*22228b0eSAtari911$lang['ordinal_fifth'] = 'Fifth'; 844*22228b0eSAtari911$lang['ordinal_last'] = 'Last'; 845*22228b0eSAtari911 846*22228b0eSAtari911// Day names (short) 847*22228b0eSAtari911$lang['day_sun'] = 'Sun'; 848*22228b0eSAtari911$lang['day_mon'] = 'Mon'; 849*22228b0eSAtari911$lang['day_tue'] = 'Tue'; 850*22228b0eSAtari911$lang['day_wed'] = 'Wed'; 851*22228b0eSAtari911$lang['day_thu'] = 'Thu'; 852*22228b0eSAtari911$lang['day_fri'] = 'Fri'; 853*22228b0eSAtari911$lang['day_sat'] = 'Sat'; 854*22228b0eSAtari911 855*22228b0eSAtari911// Day names (full) 856*22228b0eSAtari911$lang['day_sunday'] = 'Sunday'; 857*22228b0eSAtari911$lang['day_monday'] = 'Monday'; 858*22228b0eSAtari911$lang['day_tuesday'] = 'Tuesday'; 859*22228b0eSAtari911$lang['day_wednesday'] = 'Wednesday'; 860*22228b0eSAtari911$lang['day_thursday'] = 'Thursday'; 861*22228b0eSAtari911$lang['day_friday'] = 'Friday'; 862*22228b0eSAtari911$lang['day_saturday'] = 'Saturday'; 863*22228b0eSAtari911 864*22228b0eSAtari911// Color names 865*22228b0eSAtari911$lang['color_blue'] = ' Blue'; 866*22228b0eSAtari911$lang['color_green'] = ' Green'; 867*22228b0eSAtari911$lang['color_red'] = ' Red'; 868*22228b0eSAtari911$lang['color_orange'] = ' Orange'; 869*22228b0eSAtari911$lang['color_purple'] = ' Purple'; 870*22228b0eSAtari911$lang['color_pink'] = ' Pink'; 871*22228b0eSAtari911$lang['color_teal'] = ' Teal'; 872*22228b0eSAtari911$lang['color_custom'] = ' Custom...'; 873*22228b0eSAtari911 874*22228b0eSAtari911// Task checkbox 875*22228b0eSAtari911$lang['task_label'] = ' This is a task (can be checked off)'; 876*22228b0eSAtari911 877*22228b0eSAtari911// Dialog buttons 878*22228b0eSAtari911$lang['btn_cancel'] = 'Cancel'; 879*22228b0eSAtari911$lang['btn_save'] = ' Save'; 880*22228b0eSAtari911$lang['btn_delete'] = 'Delete'; 881*22228b0eSAtari911 882*22228b0eSAtari911// Default event title 883*22228b0eSAtari911$lang['default_event'] = 'Event'; 884*22228b0eSAtari911$lang['no_upcoming_events'] = 'No upcoming events'; 885*22228b0eSAtari911 886*22228b0eSAtari911// Range headers 887*22228b0eSAtari911$lang['range_today'] = 'Today'; 888*22228b0eSAtari911$lang['range_this_week'] = 'This Week'; 889*22228b0eSAtari911 890*22228b0eSAtari911// Month names (full) - for JavaScript 891*22228b0eSAtari911$lang['month_january'] = 'January'; 892*22228b0eSAtari911$lang['month_february'] = 'February'; 893*22228b0eSAtari911$lang['month_march'] = 'March'; 894*22228b0eSAtari911$lang['month_april'] = 'April'; 895*22228b0eSAtari911$lang['month_may'] = 'May'; 896*22228b0eSAtari911$lang['month_june'] = 'June'; 897*22228b0eSAtari911$lang['month_july'] = 'July'; 898*22228b0eSAtari911$lang['month_august'] = 'August'; 899*22228b0eSAtari911$lang['month_september'] = 'September'; 900*22228b0eSAtari911$lang['month_october'] = 'October'; 901*22228b0eSAtari911$lang['month_november'] = 'November'; 902*22228b0eSAtari911$lang['month_december'] = 'December'; 903*22228b0eSAtari911 904*22228b0eSAtari911// Month names (short) - for JavaScript 905*22228b0eSAtari911$lang['month_jan'] = 'Jan'; 906*22228b0eSAtari911$lang['month_feb'] = 'Feb'; 907*22228b0eSAtari911$lang['month_mar'] = 'Mar'; 908*22228b0eSAtari911$lang['month_apr'] = 'Apr'; 909*22228b0eSAtari911$lang['month_may_short'] = 'May'; 910*22228b0eSAtari911$lang['month_jun'] = 'Jun'; 911*22228b0eSAtari911$lang['month_jul'] = 'Jul'; 912*22228b0eSAtari911$lang['month_aug'] = 'Aug'; 913*22228b0eSAtari911$lang['month_sep'] = 'Sep'; 914*22228b0eSAtari911$lang['month_oct'] = 'Oct'; 915*22228b0eSAtari911$lang['month_nov'] = 'Nov'; 916*22228b0eSAtari911$lang['month_dec'] = 'Dec'; 917*22228b0eSAtari911 918*22228b0eSAtari911// JavaScript UI strings 919*22228b0eSAtari911$lang['events_for_date'] = 'Events - %s'; 920*22228b0eSAtari911$lang['past_events'] = 'Past Events (%d)'; 921*22228b0eSAtari911$lang['no_events_day'] = 'No events on this day'; 922*22228b0eSAtari911$lang['add_event_btn'] = '+ Add Event'; 923*22228b0eSAtari911$lang['add_event_short'] = '+ ADD EVENT'; 924*22228b0eSAtari911$lang['delete_event_confirm'] = 'Delete this event?'; 925*22228b0eSAtari911 926*22228b0eSAtari911// Badge labels 927*22228b0eSAtari911$lang['badge_past_due'] = 'PAST DUE'; 928*22228b0eSAtari911$lang['badge_today'] = 'TODAY'; 929*22228b0eSAtari911 930*22228b0eSAtari911// Additional messages 931*22228b0eSAtari911$lang['no_events_month'] = 'No events this month'; 932*22228b0eSAtari911$lang['no_events_week'] = 'No events this week'; 933