xref: /plugin/calendar/lang/en/lang.php (revision 22228b0ea77db31a6d52d5b3db63727729c1a5e0)
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