1<?php
2/**
3 * English language file for Calendar plugin
4 */
5
6// Admin menu
7$lang['menu'] = 'Calendar Management';
8
9// General
10$lang['calendar'] = 'Calendar';
11$lang['events'] = 'Events';
12$lang['event'] = 'Event';
13$lang['today'] = 'Today';
14$lang['tomorrow'] = 'Tomorrow';
15$lang['yesterday'] = 'Yesterday';
16
17// Event fields
18$lang['title'] = 'Title';
19$lang['description'] = 'Description';
20$lang['date'] = 'Date';
21$lang['time'] = 'Time';
22$lang['start_time'] = 'Start Time';
23$lang['end_time'] = 'End Time';
24$lang['end_date'] = 'End Date';
25$lang['color'] = 'Color';
26$lang['namespace'] = 'Namespace';
27$lang['all_day'] = 'All Day';
28
29// Actions
30$lang['add_event'] = 'Add Event';
31$lang['edit_event'] = 'Edit Event';
32$lang['delete_event'] = 'Delete Event';
33$lang['save'] = 'Save';
34$lang['cancel'] = 'Cancel';
35$lang['close'] = 'Close';
36$lang['search'] = 'Search';
37$lang['clear'] = 'Clear';
38
39// Task-related
40$lang['task'] = 'Task';
41$lang['mark_as_task'] = 'Mark as Task';
42$lang['completed'] = 'Completed';
43$lang['past_due'] = 'Past Due';
44
45// Recurring events
46$lang['recurring'] = 'Recurring';
47$lang['repeat'] = 'Repeat';
48$lang['daily'] = 'Daily';
49$lang['weekly'] = 'Weekly';
50$lang['monthly'] = 'Monthly';
51$lang['yearly'] = 'Yearly';
52$lang['every'] = 'Every';
53$lang['days'] = 'days';
54$lang['weeks'] = 'weeks';
55$lang['months'] = 'months';
56$lang['years'] = 'years';
57$lang['repeat_on'] = 'Repeat on';
58$lang['ends'] = 'Ends';
59$lang['never'] = 'Never';
60$lang['after_occurrences'] = 'After occurrences';
61$lang['on_date'] = 'On date';
62
63// Days of week
64$lang['sunday'] = 'Sunday';
65$lang['monday'] = 'Monday';
66$lang['tuesday'] = 'Tuesday';
67$lang['wednesday'] = 'Wednesday';
68$lang['thursday'] = 'Thursday';
69$lang['friday'] = 'Friday';
70$lang['saturday'] = 'Saturday';
71$lang['sun'] = 'Sun';
72$lang['mon'] = 'Mon';
73$lang['tue'] = 'Tue';
74$lang['wed'] = 'Wed';
75$lang['thu'] = 'Thu';
76$lang['fri'] = 'Fri';
77$lang['sat'] = 'Sat';
78
79// Months
80$lang['january'] = 'January';
81$lang['february'] = 'February';
82$lang['march'] = 'March';
83$lang['april'] = 'April';
84$lang['may'] = 'May';
85$lang['june'] = 'June';
86$lang['july'] = 'July';
87$lang['august'] = 'August';
88$lang['september'] = 'September';
89$lang['october'] = 'October';
90$lang['november'] = 'November';
91$lang['december'] = 'December';
92
93// Messages
94$lang['no_events'] = 'No events';
95$lang['no_events_today'] = 'No events today';
96$lang['no_events_this_month'] = 'No events this month';
97$lang['no_events_found'] = 'No events match your search';
98$lang['event_saved'] = 'Event saved successfully';
99$lang['event_deleted'] = 'Event deleted successfully';
100$lang['confirm_delete'] = 'Are you sure you want to delete this event?';
101$lang['loading'] = 'Loading...';
102$lang['searching'] = 'Searching...';
103
104// Search
105$lang['search_this_month'] = 'Search this month';
106$lang['search_all_dates'] = 'Search all dates';
107$lang['found_events'] = 'Found %d event(s) across all dates';
108
109// Sync
110$lang['sync'] = 'Sync';
111$lang['sync_now'] = 'Sync Now';
112$lang['last_sync'] = 'Last sync';
113$lang['sync_successful'] = 'Sync completed successfully';
114$lang['sync_failed'] = 'Sync failed';
115
116// Admin sections
117$lang['manage_events'] = 'Manage Events';
118$lang['sync_settings'] = 'Sync Settings';
119$lang['backup_restore'] = 'Backup & Restore';
120$lang['statistics'] = 'Statistics';
121$lang['important_namespaces'] = 'Important Namespaces';
122$lang['cleanup_events'] = 'Cleanup Old Events';
123
124// Sidebar widget
125$lang['upcoming_events'] = 'Upcoming Events';
126$lang['important_events'] = 'Important Events';
127$lang['past_events'] = 'Past Events';
128
129// Time conflicts
130$lang['time_conflict'] = 'Time Conflict';
131$lang['conflicts_with'] = 'Conflicts with';
132
133// Admin tabs
134$lang['tab_manage'] = 'Manage Events';
135$lang['tab_update'] = 'Update Plugin';
136$lang['tab_sync'] = 'Outlook Sync';
137$lang['tab_themes'] = 'Themes';
138
139// Admin manage tab sections
140$lang['event_browser'] = 'Event Browser';
141$lang['important_namespaces'] = 'Important Namespaces';
142$lang['cleanup_events'] = 'Cleanup Old Events';
143$lang['backup_events'] = 'Backup Events';
144$lang['restore_events'] = 'Restore Events';
145
146// Admin sync tab
147$lang['outlook_sync_settings'] = 'Outlook Sync Settings';
148$lang['sync_url'] = 'Sync URL';
149$lang['sync_interval'] = 'Sync Interval';
150$lang['enable_sync'] = 'Enable Sync';
151$lang['test_connection'] = 'Test Connection';
152
153// Admin themes tab
154$lang['theme_preview'] = 'Theme Preview';
155$lang['select_theme'] = 'Select Theme';
156
157// Buttons and actions
158$lang['run_now'] = 'Run Now';
159$lang['download'] = 'Download';
160$lang['upload'] = 'Upload';
161$lang['delete'] = 'Delete';
162$lang['refresh'] = 'Refresh';
163$lang['view_log'] = 'View Log';
164$lang['clear_log'] = 'Clear Log';
165$lang['save'] = 'Save';
166$lang['cancel'] = 'Cancel';
167$lang['close'] = 'Close';
168$lang['preview'] = 'Preview';
169$lang['rescan'] = 'Rescan';
170$lang['select_all'] = 'All';
171$lang['select_none'] = 'None';
172$lang['move_to'] = 'Move to';
173
174// Manage Events Tab
175$lang['manage_calendar_events'] = 'Manage Calendar Events';
176$lang['events_manager'] = 'Events Manager';
177$lang['events_manager_desc'] = 'Scan, export, and import all calendar events across all namespaces.';
178$lang['total_events'] = 'Total Events';
179$lang['namespaces'] = 'Namespaces';
180$lang['json_files'] = 'JSON Files';
181$lang['recurring'] = 'Recurring';
182$lang['last_scanned'] = 'Last scanned';
183$lang['rescan_events'] = 'Re-scan Events';
184$lang['export_all_events'] = 'Export All Events';
185$lang['import_events'] = 'Import Events';
186$lang['import_confirm'] = 'Import will merge with existing events. Continue?';
187$lang['view_breakdown'] = 'View Breakdown by Namespace';
188$lang['events_column'] = 'Events';
189$lang['files_column'] = 'Files';
190$lang['default_ns'] = '(default)';
191
192// Important Namespaces
193$lang['important_namespaces'] = 'Important Namespaces';
194$lang['important_ns_desc'] = 'Events from these namespaces will be visually highlighted throughout the calendar:';
195$lang['visual_effects'] = 'Visual Effects';
196$lang['effect_grid'] = 'Calendar Grid: ⭐ star icon on event bars';
197$lang['effect_sidebar'] = 'Event Sidebar: ⭐ star + highlighted background + accent border';
198$lang['effect_widget'] = 'Sidebar Widget: Dedicated "Important Events" section + highlighting';
199$lang['effect_popup'] = 'Day Popup: Events shown with full details';
200$lang['important_ns_hint'] = 'Comma-separated list of namespace names (e.g., "important,urgent,bills")';
201
202// Cleanup Events
203$lang['cleanup_old_events'] = 'Cleanup Old Events';
204$lang['cleanup_desc'] = 'Delete events based on criteria below. Automatic backup created before deletion.';
205$lang['by_age'] = 'By Age';
206$lang['by_status'] = 'By Status';
207$lang['by_date_range'] = 'By Date Range';
208$lang['delete_older_than'] = 'Delete events older than';
209$lang['months'] = 'months';
210$lang['years'] = 'years';
211$lang['completed_tasks'] = 'Completed tasks';
212$lang['past_events'] = 'Past events';
213$lang['from_date'] = 'From';
214$lang['to_date'] = 'To';
215$lang['namespace_filter'] = 'Namespace';
216$lang['namespace_filter_hint'] = 'Leave empty for all, or specify: work, personal, etc.';
217$lang['backup_auto'] = 'Backup created automatically';
218$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$lang['no_events_match'] = 'No events match the criteria. Nothing would be deleted.';
220$lang['events_would_delete'] = 'The following %d event(s) would be deleted:';
221$lang['loading_preview'] = 'Loading preview...';
222$lang['error_loading'] = 'Error loading preview';
223$lang['debug_info'] = 'Debug Info';
224
225// Recurring Events
226$lang['recurring_events'] = 'Recurring Events';
227$lang['trim_all_past'] = 'Trim All Past';
228$lang['rescan'] = 'Rescan';
229
230// Namespace Explorer
231$lang['namespace_explorer'] = 'Namespace Explorer';
232$lang['namespace_explorer_desc'] = 'Select events and move between namespaces. Drag & drop also supported.';
233$lang['search_events'] = 'Search events by title...';
234$lang['type_or_select'] = 'Type or select...';
235$lang['drop_target'] = 'Drop Target';
236$lang['drop_here'] = 'Drop here';
237
238// Recurring Events Table
239$lang['search_recurring'] = 'Search recurring events...';
240$lang['no_recurring_found'] = 'No recurring events found.';
241$lang['col_title'] = 'Title';
242$lang['col_namespace'] = 'Namespace';
243$lang['col_pattern'] = 'Pattern';
244$lang['col_range'] = 'Range';
245$lang['col_count'] = 'Count';
246$lang['col_source'] = 'Source';
247$lang['col_actions'] = 'Actions';
248$lang['source_flagged'] = 'Flagged';
249$lang['source_detected'] = 'Detected';
250$lang['btn_edit'] = 'Edit';
251$lang['btn_manage'] = 'Manage';
252$lang['btn_del'] = 'Del';
253$lang['total_series'] = 'Total: %d series';
254
255// Recurrence patterns
256$lang['pattern_daily'] = 'Daily';
257$lang['pattern_weekly'] = 'Weekly';
258$lang['pattern_monthly'] = 'Monthly';
259$lang['pattern_yearly'] = 'Yearly';
260$lang['pattern_custom'] = 'Custom';
261
262// Namespace Explorer control bar
263$lang['btn_move'] = 'Move';
264$lang['new_namespace'] = 'New Namespace';
265$lang['cleanup_empty'] = 'Cleanup';
266$lang['x_selected'] = '%d selected';
267$lang['zero_selected'] = '0 selected';
268
269// Button tooltips
270$lang['tooltip_edit'] = 'Edit title, time, namespace, pattern';
271$lang['tooltip_manage'] = 'Extend, trim, pause, change dates';
272$lang['tooltip_delete_all'] = 'Delete all occurrences';
273
274// JavaScript messages
275$lang['no_events_selected'] = 'No events selected';
276$lang['delete_confirm'] = 'Delete %d selected event(s)?\n\nThis cannot be undone!';
277$lang['delete_ns_confirm'] = 'Delete ENTIRE namespace: %s?\n\nThis will delete ALL events in this namespace!\n\nThis cannot be undone!';
278$lang['scanning'] = 'Scanning...';
279$lang['cleaning'] = 'Cleaning...';
280$lang['no_empty_ns'] = 'No empty namespaces or orphan calendar folders found.';
281$lang['found_items'] = 'Found %d item(s) to clean up';
282$lang['proceed_cleanup'] = 'Proceed with cleanup?';
283
284// New Namespace dialog
285$lang['enter_namespace'] = 'Enter new namespace name:\n\nExamples:\n- work\n- personal\n- projects:alpha';
286$lang['invalid_namespace'] = 'Invalid namespace name.\n\nUse only letters, numbers, underscore, hyphen, and colon.\nExample: work:projects:alpha';
287
288// Rename namespace dialog
289$lang['rename_namespace'] = 'Rename namespace: %s\n\nEnter new name:';
290
291// Delete recurring series
292$lang['delete_recurring_confirm'] = 'Delete ALL occurrences of: %s (%s)?\n\nThis cannot be undone!';
293
294// Trim recurring events
295$lang['no_past_recurring'] = 'No past recurring events found to remove.';
296$lang['found_past_recurring'] = 'Found %d past recurring event(s) to remove.\n\nThis cannot be undone. Proceed?';
297$lang['counting'] = 'Counting...';
298$lang['trimming'] = 'Trimming...';
299
300// Manage recurring dialog buttons
301$lang['btn_trim'] = 'Trim';
302$lang['btn_change'] = 'Change';
303$lang['btn_shift'] = 'Shift';
304$lang['trim_confirm'] = 'Remove all occurrences before %s?';
305$lang['respace_confirm'] = 'Respace all future occurrences?';
306$lang['shift_confirm'] = 'Shift all occurrences to new start date?';
307
308// Manage Recurring Dialog
309$lang['manage_recurring_title'] = 'Manage Recurring Series';
310$lang['occurrences'] = 'occurrences';
311$lang['extend_series'] = 'Extend Series';
312$lang['add_occurrences'] = 'Add occurrences:';
313$lang['days_apart'] = 'Days apart:';
314$lang['btn_extend'] = 'Extend';
315$lang['trim_past_events'] = 'Trim Past Events';
316$lang['remove_before'] = 'Remove before:';
317$lang['change_pattern'] = 'Change Pattern';
318$lang['respace_note'] = 'Respaces future occurrences only. Past events stay in place.';
319$lang['new_interval'] = 'New interval:';
320$lang['change_start_date'] = 'Change Start Date';
321$lang['shift_note'] = 'Shifts ALL occurrences by the difference between old and new start date.';
322$lang['current_label'] = 'Current:';
323$lang['pause_series'] = 'Pause Series';
324$lang['resume_series'] = 'Resume Series';
325$lang['pause_note'] = 'Adds ⏸ prefix to future occurrences. They remain in the calendar but are visually marked as paused.';
326$lang['resume_note'] = 'Removes ⏸ prefix and paused flag from all occurrences.';
327$lang['btn_pause'] = 'Pause';
328$lang['btn_resume'] = 'Resume';
329$lang['btn_close'] = 'Close';
330
331// Interval options
332$lang['interval_daily'] = 'Daily';
333$lang['interval_weekly'] = 'Weekly';
334$lang['interval_biweekly'] = 'Bi-weekly';
335$lang['interval_monthly'] = 'Monthly';
336$lang['interval_quarterly'] = 'Quarterly';
337$lang['interval_yearly'] = 'Yearly';
338
339// Edit Recurring Dialog
340$lang['edit_recurring_title'] = 'Edit Recurring Event';
341$lang['changes_apply_to'] = 'Changes apply to ALL occurrences of:';
342$lang['field_title'] = 'TITLE';
343$lang['field_start_time'] = 'START TIME';
344$lang['field_end_time'] = 'END TIME';
345$lang['field_namespace'] = 'NAMESPACE';
346$lang['field_color'] = 'COLOR';
347$lang['recurrence_pattern'] = 'RECURRENCE PATTERN';
348$lang['every'] = 'Every';
349$lang['on_days'] = 'On days:';
350$lang['monthly_options'] = 'Monthly options:';
351$lang['day_of_month'] = 'Day of month:';
352$lang['ordinal_weekday'] = 'Ordinal weekday:';
353$lang['btn_save_changes'] = 'Save Changes';
354$lang['btn_cancel'] = 'Cancel';
355
356// Ordinal labels
357$lang['ordinal_first'] = 'First';
358$lang['ordinal_second'] = 'Second';
359$lang['ordinal_third'] = 'Third';
360$lang['ordinal_fourth'] = 'Fourth';
361$lang['ordinal_fifth'] = 'Fifth';
362$lang['ordinal_last'] = 'Last';
363
364// Day names short
365$lang['day_sun'] = 'Sun';
366$lang['day_mon'] = 'Mon';
367$lang['day_tue'] = 'Tue';
368$lang['day_wed'] = 'Wed';
369$lang['day_thu'] = 'Thu';
370$lang['day_fri'] = 'Fri';
371$lang['day_sat'] = 'Sat';
372
373// Day names full
374$lang['day_sunday'] = 'Sunday';
375$lang['day_monday'] = 'Monday';
376$lang['day_tuesday'] = 'Tuesday';
377$lang['day_wednesday'] = 'Wednesday';
378$lang['day_thursday'] = 'Thursday';
379$lang['day_friday'] = 'Friday';
380$lang['day_saturday'] = 'Saturday';
381
382// Recurrence type labels
383$lang['rec_days'] = 'Day(s)';
384$lang['rec_weeks'] = 'Week(s)';
385$lang['rec_months'] = 'Month(s)';
386$lang['rec_years'] = 'Year(s)';
387
388// Backup Events
389$lang['backup_events'] = 'Backup Events';
390$lang['backup_desc'] = 'Create full backups of all event data. Download or manage existing backups.';
391$lang['create_backup'] = 'Create Backup';
392$lang['available_backups'] = 'Available Backups';
393$lang['no_backups'] = 'No backups found';
394$lang['backup_date'] = 'Date';
395$lang['backup_size'] = 'Size';
396$lang['backup_actions'] = 'Actions';
397$lang['delete_selected'] = 'Delete Selected';
398$lang['confirm_delete_backups'] = 'Are you sure you want to delete the selected backups?';
399
400// Static Calendar
401$lang['previous_month'] = 'Previous Month';
402$lang['next_month'] = 'Next Month';
403$lang['print_calendar'] = 'Print Calendar';
404$lang['no_events_scheduled'] = 'No events scheduled for this month.';
405$lang['calendar_label'] = 'Calendar';
406$lang['details'] = 'Details';
407
408// Google Calendar Sync (v7.0.7)
409$lang['tab_google'] = 'Google Sync';
410$lang['google_sync'] = 'Google Calendar Sync';
411$lang['google_status'] = 'Status';
412$lang['google_connected'] = 'Connected';
413$lang['google_not_configured'] = 'Not Configured';
414$lang['google_not_authenticated'] = 'Not Authenticated';
415$lang['google_setup_instructions'] = 'Setup Instructions';
416$lang['google_step1'] = 'Go to Google Cloud Console';
417$lang['google_step2'] = 'Create a new project (or select existing)';
418$lang['google_step3'] = 'Enable the Google Calendar API';
419$lang['google_step4'] = 'Go to Credentials → Create Credentials → OAuth 2.0 Client ID';
420$lang['google_step5'] = 'Application type: Web application';
421$lang['google_step6'] = 'Add Authorized redirect URI';
422$lang['google_step7'] = 'Copy Client ID and Client Secret below';
423$lang['google_client_id'] = 'Client ID';
424$lang['google_client_secret'] = 'Client Secret';
425$lang['google_save_credentials'] = 'Save Credentials';
426$lang['google_credentials_saved'] = 'Google API credentials saved successfully!';
427$lang['google_authentication'] = 'Authentication';
428$lang['google_connect'] = 'Connect Google Calendar';
429$lang['google_disconnect'] = 'Disconnect';
430$lang['google_select_calendar'] = 'Select Calendar';
431$lang['google_loading_calendars'] = 'Loading calendars...';
432$lang['google_sync_events'] = 'Sync Events';
433$lang['google_import'] = 'Import from Google';
434$lang['google_import_desc'] = 'Import events from Google Calendar to DokuWiki.';
435$lang['google_export'] = 'Export to Google';
436$lang['google_export_desc'] = 'Export events from DokuWiki to Google Calendar.';
437$lang['google_import_events'] = 'Import Events';
438$lang['google_export_events'] = 'Export Events';
439$lang['google_importing'] = 'Importing events...';
440$lang['google_exporting'] = 'Exporting events...';
441$lang['google_import_success'] = 'Imported %d events, %d skipped (duplicates)';
442$lang['google_export_success'] = 'Exported %d events, %d skipped';
443$lang['google_auth_success'] = 'Successfully connected to Google Calendar!';
444$lang['google_auth_error'] = 'Authorization error';
445$lang['google_primary'] = 'Primary';
446$lang['google_namespace_optional'] = 'Namespace (optional)';
447
448// Accessibility (v7.0.5, v7.0.6)
449$lang['aria_calendar_day'] = 'Calendar day';
450$lang['aria_has_events'] = 'has events';
451$lang['aria_event_deleted'] = 'Event deleted';
452$lang['aria_event_created'] = 'Event created';
453$lang['aria_event_updated'] = 'Event updated';
454$lang['aria_task_complete'] = 'Task marked complete';
455$lang['aria_task_incomplete'] = 'Task marked incomplete';
456$lang['aria_navigate_prev'] = 'Previous month';
457$lang['aria_navigate_next'] = 'Next month';
458$lang['aria_close_dialog'] = 'Close dialog';
459$lang['aria_event_list'] = 'Event list';
460
461// Audit Logging (v7.0.5)
462$lang['audit_log'] = 'Audit Log';
463$lang['audit_action'] = 'Action';
464$lang['audit_user'] = 'User';
465$lang['audit_timestamp'] = 'Timestamp';
466$lang['audit_details'] = 'Details';
467$lang['audit_create'] = 'Created';
468$lang['audit_update'] = 'Updated';
469$lang['audit_delete'] = 'Deleted';
470$lang['audit_move'] = 'Moved';
471$lang['audit_task_toggle'] = 'Task toggled';
472$lang['audit_view_log'] = 'View Audit Log';
473$lang['audit_clear_log'] = 'Clear Audit Log';
474$lang['audit_no_entries'] = 'No audit entries found';
475
476// Custom Date/Time Pickers (v7.0.2, v7.0.3)
477$lang['select_date'] = 'Select date';
478$lang['select_time'] = 'Select time';
479$lang['optional'] = 'Optional';
480$lang['same_as_start'] = 'Same as start';
481$lang['clear_end_date'] = 'Clear End Date';
482$lang['time_morning'] = 'Morning';
483$lang['time_afternoon'] = 'Afternoon';
484$lang['time_evening'] = 'Evening';
485$lang['time_night'] = 'Night';
486
487// Error messages
488$lang['error_not_configured'] = 'Not configured';
489$lang['error_not_authenticated'] = 'Not authenticated';
490$lang['error_admin_required'] = 'Admin access required';
491$lang['error_missing_fields'] = 'Missing required fields';
492$lang['error_invalid_date'] = 'Invalid date format';
493$lang['error_event_not_found'] = 'Event not found';
494$lang['error_sync_failed'] = 'Sync failed';
495$lang['error_save_failed'] = 'Save failed';
496$lang['error_delete_failed'] = 'Delete failed';
497