From 143128a1a40b254787dd977e0d9003ed9d26a7bf Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 1 Sep 2017 12:00:02 +0200 Subject: [PATCH] Synchronized with upstream from git.kolab.org (3.3.3) --- calendar.php | 82 ++--- calendar_base.js | 39 ++- calendar_ui.js | 67 ++-- composer.json | 5 +- config.inc.php.dist | 2 +- drivers/calendar_driver.php | 7 +- drivers/kolab/kolab_calendar.php | 53 ++-- drivers/kolab/kolab_driver.php | 67 ++-- drivers/kolab/kolab_invitation_calendar.php | 27 +- drivers/kolab/kolab_user_calendar.php | 35 +-- lib/calendar_ui.php | 19 +- localization/da_DK.inc | 33 -- localization/de_CH.inc | 1 + localization/de_DE.inc | 33 -- localization/en_US.inc | 2 + localization/es_ES.inc | 67 +++- localization/fi_FI.inc | 35 --- localization/fr_FR.inc | 197 ++++++------ localization/nl_NL.inc | 319 +++++++++++--------- localization/pt_BR.inc | 8 + localization/ru_RU.inc | 33 -- localization/sk_SK.inc | 219 -------------- skins/classic/calendar.css | 1 + skins/classic/templates/calendar.html | 1 + skins/larry/calendar.css | 164 ++++------ skins/larry/images/calendars.png | Bin 2582 -> 2350 bytes skins/larry/images/sendinvitation.png | Bin 337 -> 204 bytes skins/larry/images/toolbar.png | Bin 3662 -> 1112 bytes skins/larry/templates/calendar.html | 70 +++-- skins/larry/templates/eventedit.html | 4 +- 30 files changed, 688 insertions(+), 902 deletions(-) diff --git a/calendar.php b/calendar.php index 6018704..2ce4f7f 100644 --- a/calendar.php +++ b/calendar.php @@ -319,7 +319,6 @@ class calendar extends rcube_plugin $this->rc->output->set_env('timezone', $this->timezone->getName()); $this->rc->output->set_env('calendar_driver', $this->rc->config->get('calendar_driver'), false); $this->rc->output->set_env('calendar_resources', (bool)$this->rc->config->get('calendar_resources_driver')); - $this->rc->output->set_env('mscolors', jqueryui::get_color_values()); $this->rc->output->set_env('identities-selector', $this->ui->identity_select(array('id' => 'edit-identities-list', 'aria-label' => $this->gettext('roleorganizer')))); $view = rcube_utils::get_input_value('view', rcube_utils::INPUT_GPC); @@ -477,40 +476,42 @@ class calendar extends rcube_plugin // loading driver is expensive, don't do it if not needed $this->load_driver(); - if (!isset($no_override['calendar_default_alarm_type'])) { + if (!isset($no_override['calendar_default_alarm_type']) || !isset($no_override['calendar_default_alarm_offset'])) { if (!$p['current']) { $p['blocks']['view']['content'] = true; return $p; } - $field_id = 'rcmfd_alarm'; - $select_type = new html_select(array('name' => '_alarm_type', 'id' => $field_id)); - $select_type->add($this->gettext('none'), ''); - foreach ($this->driver->alarm_types as $type) - $select_type->add($this->rc->gettext(strtolower("alarm{$type}option"), 'libcalendaring'), $type); + $alarm_type = $alarm_offset = ''; + + if (!isset($no_override['calendar_default_alarm_type'])) { + $field_id = 'rcmfd_alarm'; + $select_type = new html_select(array('name' => '_alarm_type', 'id' => $field_id)); + $select_type->add($this->gettext('none'), ''); + + foreach ($this->driver->alarm_types as $type) { + $select_type->add($this->rc->gettext(strtolower("alarm{$type}option"), 'libcalendaring'), $type); + } + + $alarm_type = $select_type->show($this->rc->config->get('calendar_default_alarm_type', '')); + } + + if (!isset($no_override['calendar_default_alarm_offset'])) { + $field_id = 'rcmfd_alarm'; + $input_value = new html_inputfield(array('name' => '_alarm_value', 'id' => $field_id . 'value', 'size' => 3)); + $select_offset = new html_select(array('name' => '_alarm_offset', 'id' => $field_id . 'offset')); + + foreach (array('-M','-H','-D','+M','+H','+D') as $trigger) { + $select_offset->add($this->rc->gettext('trigger' . $trigger, 'libcalendaring'), $trigger); + } + + $preset = libcalendaring::parse_alarm_value($this->rc->config->get('calendar_default_alarm_offset', '-15M')); + $alarm_offset = $input_value->show($preset[0]) . ' ' . $select_offset->show($preset[1]); + } $p['blocks']['view']['options']['alarmtype'] = array( 'title' => html::label($field_id, rcube::Q($this->gettext('defaultalarmtype'))), - 'content' => $select_type->show($this->rc->config->get('calendar_default_alarm_type', '')), - ); - } - - if (!isset($no_override['calendar_default_alarm_offset'])) { - if (!$p['current']) { - $p['blocks']['view']['content'] = true; - return $p; - } - - $field_id = 'rcmfd_alarm'; - $input_value = new html_inputfield(array('name' => '_alarm_value', 'id' => $field_id . 'value', 'size' => 3)); - $select_offset = new html_select(array('name' => '_alarm_offset', 'id' => $field_id . 'offset')); - foreach (array('-M','-H','-D','+M','+H','+D') as $trigger) - $select_offset->add($this->rc->gettext('trigger' . $trigger, 'libcalendaring'), $trigger); - - $preset = libcalendaring::parse_alarm_value($this->rc->config->get('calendar_default_alarm_offset', '-15M')); - $p['blocks']['view']['options']['alarmoffset'] = array( - 'title' => html::label($field_id . 'value', rcube::Q($this->gettext('defaultalarmoffset'))), - 'content' => $input_value->show($preset[0]) . ' ' . $select_offset->show($preset[1]), + 'content' => $alarm_type . ' ' . $alarm_offset, ); } @@ -1465,7 +1466,7 @@ class calendar extends rcube_plugin { // Upload progress update if (!empty($_GET['_progress'])) { - rcube_upload_progress(); + $this->rc->upload_progress(); } @set_time_limit(0); @@ -1531,11 +1532,11 @@ class calendar extends rcube_plugin } else { if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) { - $msg = $this->gettext(array('name' => 'filesizeerror', 'vars' => array( - 'size' => show_bytes(parse_bytes(ini_get('upload_max_filesize')))))); + $msg = $this->rc->gettext(array('name' => 'filesizeerror', 'vars' => array( + 'size' => $this->rc->show_bytes(parse_bytes(ini_get('upload_max_filesize')))))); } else { - $msg = $this->gettext('fileuploaderror'); + $msg = $this->rc->gettext('fileuploaderror'); } $this->rc->output->command('plugin.import_error', array('message' => $msg)); @@ -1778,11 +1779,11 @@ class calendar extends rcube_plugin // convert link URIs references into structs if (array_key_exists('links', $event)) { - foreach ((array)$event['links'] as $i => $link) { - if (strpos($link, 'imap://') === 0 && ($msgref = $this->driver->get_message_reference($link))) { - $event['links'][$i] = $msgref; + foreach ((array) $event['links'] as $i => $link) { + if (strpos($link, 'imap://') === 0 && ($msgref = $this->driver->get_message_reference($link))) { + $event['links'][$i] = $msgref; + } } - } } // check for organizer in attendees list @@ -2202,7 +2203,7 @@ class calendar extends rcube_plugin } // let this information be cached for 5min - send_future_expire_header(300); + $this->rc->output->future_expire_header(300); echo $status; exit; @@ -2289,7 +2290,7 @@ class calendar extends rcube_plugin $dte->setTimezone($this->timezone); // let this information be cached for 5min - send_future_expire_header(300); + $this->rc->output->future_expire_header(300); echo rcube_output::json_serialize(array( 'email' => $email, @@ -3381,7 +3382,12 @@ class calendar extends rcube_plugin $tmp_path = tempnam($this->rc->config->get('temp_dir'), 'rcmAttmntCal'); file_put_contents($tmp_path, $this->get_ical()->export(array($event), '', false, array($this->driver, 'get_attachment_body'))); - $args['attachments'][] = array('path' => $tmp_path, 'name' => $filename . '.ics', 'mimetype' => 'text/calendar'); + $args['attachments'][] = array( + 'path' => $tmp_path, + 'name' => $filename . '.ics', + 'mimetype' => 'text/calendar', + 'size' => filesize($tmp_path), + ); $args['param']['subject'] = $event['title']; } } diff --git a/calendar_base.js b/calendar_base.js index 41ae8e5..3f00925 100644 --- a/calendar_base.js +++ b/calendar_base.js @@ -34,7 +34,6 @@ function rcube_calendar(settings) rcube_libcalendaring.call(this, settings); // member vars - this.ui; this.ui_loaded = false; this.selected_attachment = null; @@ -50,29 +49,29 @@ function rcube_calendar(settings) $.when( $.getScript(rcmail.assets_path('plugins/calendar/calendar_ui.js')), $.getScript(rcmail.assets_path('plugins/calendar/lib/js/fullcalendar.js')), - $.get(rcmail.url('calendar/inlineui'), function(html){ $(document.body).append(html); }, 'html') + $.get(rcmail.url('calendar/inlineui'), function(html) { $(document.body).append(html); }, 'html') ).then(function() { // disable attendees feature (autocompletion and stuff is not initialized) for (var c in rcmail.env.calendars) rcmail.env.calendars[c].attendees = rcmail.env.calendars[c].resources = false; - + me.ui_loaded = true; me.ui = new rcube_calendar_ui(me.settings); me.create_from_mail(uid); // start over }); + return; } - else { - // get message contents for event dialog - var lock = rcmail.set_busy(true, 'loading'); - rcmail.http_post('calendar/mailtoevent', { - '_mbox': rcmail.env.mailbox, - '_uid': uid - }, lock); - } + + // get message contents for event dialog + var lock = rcmail.set_busy(true, 'loading'); + rcmail.http_post('calendar/mailtoevent', { + '_mbox': rcmail.env.mailbox, + '_uid': uid + }, lock); } }; - + // callback function triggered from server with contents for the new event this.mail2event_dialog = function(event) { @@ -91,7 +90,7 @@ function rcube_calendar(settings) rcmail.http_post('calendar/mailimportattach', { _uid: rcmail.env.uid, _mbox: rcmail.env.mailbox, - _part: this.selected_attachment, + _part: this.selected_attachment // _calendar: $('#calendar-attachment-saveto').val(), }, rcmail.set_busy(true, 'itip.savingdata')); } @@ -106,11 +105,11 @@ window.rcmail && rcmail.addEventListener('init', function(evt) { // register create-from-mail command to message_commands array if (rcmail.env.task == 'mail') { - rcmail.register_command('calendar-create-from-mail', function() { cal.create_from_mail() }); - rcmail.register_command('attachment-save-calendar', function() { cal.save_to_calendar() }); - rcmail.addEventListener('plugin.mail2event_dialog', function(p){ cal.mail2event_dialog(p) }); - rcmail.addEventListener('plugin.unlock_saving', function(p){ cal.ui && cal.ui.unlock_saving(); }); - + rcmail.register_command('calendar-create-from-mail', function() { cal.create_from_mail(); }); + rcmail.register_command('attachment-save-calendar', function() { cal.save_to_calendar(); }); + rcmail.addEventListener('plugin.mail2event_dialog', function(p) { cal.mail2event_dialog(p); }); + rcmail.addEventListener('plugin.unlock_saving', function(p) { cal.ui && cal.ui.unlock_saving(); }); + if (rcmail.env.action != 'show') { rcmail.env.message_commands.push('calendar-create-from-mail'); rcmail.add_element($('')); @@ -130,8 +129,8 @@ window.rcmail && rcmail.addEventListener('init', function(evt) { } rcmail.register_command('plugin.calendar', function() { rcmail.switch_task('calendar'); }, true); - - rcmail.addEventListener('plugin.ping_url', function(p){ + + rcmail.addEventListener('plugin.ping_url', function(p) { var action = p.action; p.action = p.event = null; new Image().src = rcmail.url(action, p); diff --git a/calendar_ui.js b/calendar_ui.js index 6144e69..68661a7 100644 --- a/calendar_ui.js +++ b/calendar_ui.js @@ -38,7 +38,7 @@ function rcube_calendar_ui(settings) this.selected_event = null; this.selected_calendar = null; this.search_request = null; - this.saving_lock; + this.saving_lock = null; this.calendars = {}; this.quickview_sources = []; @@ -47,8 +47,6 @@ function rcube_calendar_ui(settings) var DAY_MS = 86400000; var HOUR_MS = 3600000; var me = this; - var gmt_offset = (new Date().getTimezoneOffset() / -60) - (settings.timezone || 0) - (settings.dst || 0); - var client_timezone = new Date().getTimezoneOffset(); var day_clicked = day_clicked_ts = 0; var ignore_click = false; var event_defaults = { free_busy:'busy', alarms:'' }; @@ -197,18 +195,18 @@ function rcube_calendar_ui(settings) { var result = [], strlen = str.length, - q, p, i, char, last; + q, p, i, chr, last; for (q = p = i = 0; i < strlen; i++) { - char = str.charAt(i); - if (char == '"' && last != '\\') { + chr = str.charAt(i); + if (chr == '"' && last != '\\') { q = !q; } - else if (!q && char == delimiter) { + else if (!q && chr == delimiter) { result.push(str.substring(p, i)); p = i + 1; } - last = char; + last = chr; } result.push(str.substr(p)); @@ -413,7 +411,7 @@ function rcube_calendar_ui(settings) $('#event-repeat').show().children('.event-text').html(Q(event.recurrence_text)); if (event.valarms && event.alarms_text) - $('#event-alarm').show().children('.event-text').html(Q(event.alarms_text)); + $('#event-alarm').show().children('.event-text').html(Q(event.alarms_text).replace(',', ',
')); if (calendar.name) $('#event-calendar').show().children('.event-text').html(Q(calendar.name)).attr('class', 'event-text cal-'+calendar.id).css('color', calendar.textColor || calendar.color || ''); @@ -488,9 +486,9 @@ function rcube_calendar_ui(settings) line = rcube_libcalendaring.attendee_html(data); if (morelink) - overflow += line; + overflow += ' ' + line; else - html += line; + html += ' ' + line; // stop listing attendees if (j == 7 && event.attendees.length >= 7) { @@ -628,6 +626,8 @@ function rcube_calendar_ui(settings) } rcmail.enable_command('event-history', calendar.history) + + rcmail.triggerEvent('calendar-event-dialog', {dialog: $dialog}); }; // event handler for clicks on an attendee link @@ -969,6 +969,8 @@ function rcube_calendar_ui(settings) window.setTimeout(load_attendees_tab, exec_deferred); if (calendar.attachments) window.setTimeout(load_attachments_tab, exec_deferred); + + rcmail.triggerEvent('calendar-event-dialog', {dialog: $dialog}); }; // show event changelog in a dialog @@ -3145,6 +3147,28 @@ function rcube_calendar_ui(settings) } }; + // display the edit dialog, request 'new' action and pass the selected event + this.event_copy = function(event) { + if (event && event.id) { + var copy = $.extend(true, {}, event); + + delete copy.id; + delete copy._id; + delete copy.created; + delete copy.changed; + delete copy.recurrence_id; + delete copy.attachments; // @TODO + + $.each(copy.attendees, function (k, v) { + if (v.role != 'ORGANIZER') { + v.status = 'NEEDS-ACTION'; + } + }) + + event_edit_dialog('new', copy); + } + }; + // show URL of the given calendar in a dialog box this.showurl = function(calendar) { @@ -3906,23 +3930,31 @@ function rcube_calendar_ui(settings) // init event dialog $('#eventtabs').tabs({ activate: function(event, ui) { - if (ui.newPanel.selector == '#event-panel-attendees' || ui.newPanel.selector == '#event-panel-resources') { - var tab = ui.newPanel.selector == '#event-panel-resources' ? 'resource' : 'attendee'; + // newPanel.selector for jQuery-UI 1.10, newPanel.attr('id') for jQuery-UI 1.12 + var tab = String(ui.newPanel.selector || ui.newPanel.attr('id')) + .replace(/^#?event-panel-/, '').replace(/s$/, ''); + + var has_real_attendee = function(attendees) { + for (var i=0; i < (attendees ? attendees.length : 0); i++) { + if (attendees[i].cutype != 'RESOURCE') + return true; + } + }; + + if (tab == 'attendee' || tab == 'resource') { if (!rcube_event.is_keyboard(event)) $('#edit-'+tab+'-name').select(); // update free-busy status if needed if (freebusy_ui.needsupdate && me.selected_event) update_freebusy_status(me.selected_event); // add current user as organizer if non added yet - if (!event_attendees.length) { + if (tab == 'attendee' && !has_real_attendee(event_attendees)) { add_attendee($.extend({ role:'ORGANIZER' }, settings.identity)); $('#edit-attendees-form .attendees-invitebox').show(); } } // reset autocompletion on tab change (#3389) - if (ui.oldPanel.selector == '#event-panel-attendees' || ui.oldPanel.selector == '#event-panel-resources') { - rcmail.ksearch_blur(); - } + rcmail.ksearch_blur(); } }); $('#edit-enddate').datepicker(datepicker_settings); @@ -4132,6 +4164,7 @@ window.rcmail && rcmail.addEventListener('init', function(evt) { rcmail.register_command('calendar-showurl', function(){ cal.showurl(cal.calendars[cal.selected_calendar]); }, false); rcmail.register_command('event-download', function(){ cal.event_download(cal.selected_event); }, true); rcmail.register_command('event-sendbymail', function(p, obj, e){ cal.event_sendbymail(cal.selected_event, e); }, true); + rcmail.register_command('event-copy', function(){ cal.event_copy(cal.selected_event); }, true); rcmail.register_command('event-history', function(p, obj, e){ cal.event_history_dialog(cal.selected_event); }, false); // search and export events diff --git a/composer.json b/composer.json index 416218f..fe04dfc 100644 --- a/composer.json +++ b/composer.json @@ -26,12 +26,11 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libcalendaring": ">=3.2.16" + "kolab/libcalendaring": ">=3.3.3" }, "extra": { "roundcube": { - "min-version": "1.1.0", - "max-version": "1.2.99", + "min-version": "1.3.0", "sql-dir": "drivers/database/SQL" } } diff --git a/config.inc.php.dist b/config.inc.php.dist index e906776..83864ed 100644 --- a/config.inc.php.dist +++ b/config.inc.php.dist @@ -149,7 +149,7 @@ $config['calendar_itip_smtp_user'] = 'smtpauth'; $config['calendar_itip_smtp_pass'] = '123456'; // show virtual invitation calendars (Kolab driver only) -$config['kolab_invitation_calendars'] = true; +$config['kolab_invitation_calendars'] = false; // Base URL to build fully qualified URIs to access calendars via CALDAV // The following replacement variables are supported: diff --git a/drivers/calendar_driver.php b/drivers/calendar_driver.php index dcb7ac9..1cbeab0 100644 --- a/drivers/calendar_driver.php +++ b/drivers/calendar_driver.php @@ -532,17 +532,18 @@ abstract class calendar_driver /** * Get a list of property changes beteen two revisions of an event * - * @param array $event Hash array with event properties: + * @param array $event Hash array with event properties: * id: Event identifier * calendar: Calendar identifier - * @param mixed $rev Revisions: "from:to" + * @param mixed $rev1 Old Revision + * @param mixed $rev2 New Revision * * @return array List of property changes, each as a hash array: * property: Revision number * old: Old property value * new: Updated property value */ - public function get_event_diff($event, $rev) + public function get_event_diff($event, $rev1, $rev2) { return false; } diff --git a/drivers/kolab/kolab_calendar.php b/drivers/kolab/kolab_calendar.php index b054ea0..11ec1f4 100644 --- a/drivers/kolab/kolab_calendar.php +++ b/drivers/kolab/kolab_calendar.php @@ -130,7 +130,7 @@ class kolab_calendar extends kolab_storage_folder_api /** * Return color to display this calendar */ - public function get_color() + public function get_color($default = null) { // color is defined in folder METADATA if ($color = $this->storage->get_color()) { @@ -143,7 +143,7 @@ class kolab_calendar extends kolab_storage_folder_api if (!empty($prefs[$this->id]) && !empty($prefs[$this->id]['color'])) return $prefs[$this->id]['color']; - return 'cc0000'; + return $default ?: 'cc0000'; } /** @@ -188,16 +188,19 @@ class kolab_calendar extends kolab_storage_folder_api */ public function get_event($id) { - // directly access storage object - if (!$this->events[$id] && ($record = $this->storage->get_object($id))) - $this->events[$id] = $this->_to_driver_event($record, true); + // remove our occurrence identifier if it's there + $master_id = preg_replace('/-\d{8}(T\d{6})?$/', '', $id); - // event not found, maybe a recurring instance is requested - if (!$this->events[$id]) { - $master_id = preg_replace('/-\d+(T\d{6})?$/', '', $id); + // directly access storage object + if (!$this->events[$id] && $master_id == $id && ($record = $this->storage->get_object($id))) { + $this->events[$id] = $this->_to_driver_event($record, true); + } + + // maybe a recurring instance is requested + if (!$this->events[$id] && $master_id != $id) { $instance_id = substr($id, strlen($master_id) + 1); - if ($master_id != $id && ($record = $this->storage->get_object($master_id))) { + if ($record = $this->storage->get_object($master_id)) { $master = $this->_to_driver_event($record); } @@ -302,13 +305,13 @@ class kolab_calendar extends kolab_storage_folder_api $events = array(); foreach ($this->storage->select($query) as $record) { - $event = $this->_to_driver_event($record, !$virtual); + $event = $this->_to_driver_event($record, !$virtual, false); // remember seen categories if ($event['categories']) { $cat = is_array($event['categories']) ? $event['categories'][0] : $event['categories']; $this->categories[$cat]++; - } + } // list events in requested time window if ($event['start'] <= $end && $event['end'] >= $start) { @@ -385,6 +388,10 @@ class kolab_calendar extends kolab_storage_folder_api return true; }); + // Apply event-to-mail relations + $config = kolab_storage_config::get_instance(); + $config->apply_links($events); + // avoid session race conditions that will loose temporary subscriptions $this->cal->rc->session->nowrite = true; @@ -455,8 +462,8 @@ class kolab_calendar extends kolab_storage_folder_api //generate new event from RC input $object = $this->_from_driver_event($event); - $saved = $this->storage->save($object, 'event'); - + $saved = $this->storage->save($object, 'event'); + if (!$saved) { rcube::raise_error(array( 'code' => 600, 'type' => 'php', @@ -467,11 +474,13 @@ class kolab_calendar extends kolab_storage_folder_api } else { // save links in configuration.relation object - $this->save_links($event['uid'], $links); + if ($this->save_links($event['uid'], $links)) { + $object['links'] = $links; + } $this->events = array($event['uid'] => $this->_to_driver_event($object, true)); } - + return $saved; } @@ -494,7 +503,7 @@ class kolab_calendar extends kolab_storage_folder_api unset($event['links']); $object = $this->_from_driver_event($event, $old); - $saved = $this->storage->save($object, 'event', $old['uid']); + $saved = $this->storage->save($object, 'event', $old['uid']); if (!$saved) { rcube::raise_error(array( @@ -505,7 +514,9 @@ class kolab_calendar extends kolab_storage_folder_api } else { // save links in configuration.relation object - $this->save_links($event['uid'], $links); + if ($this->save_links($event['uid'], $links)) { + $object['links'] = $links; + } $updated = true; $this->events = array($event['uid'] => $this->_to_driver_event($object, true)); @@ -576,14 +587,8 @@ class kolab_calendar extends kolab_storage_folder_api */ protected function save_links($uid, $links) { - // make sure we have a valid array - if (empty($links)) { - $links = array(); - } - $storage = kolab_storage_config::get_instance(); - $remove = array_diff($storage->get_object_links($uid), $links); - return $storage->save_object_links($uid, $links, $remove); + return $storage->save_object_links($uid, (array) $links); } /** diff --git a/drivers/kolab/kolab_driver.php b/drivers/kolab/kolab_driver.php index 018a72d..1dba9c8 100644 --- a/drivers/kolab/kolab_driver.php +++ b/drivers/kolab/kolab_driver.php @@ -57,12 +57,11 @@ class kolab_driver extends calendar_driver require_once(dirname(__FILE__) . '/kolab_invitation_calendar.php'); $this->cal = $cal; - $this->rc = $cal->rc; - $this->_read_calendars(); - + $this->rc = $cal->rc; + $this->cal->register_action('push-freebusy', array($this, 'push_freebusy')); $this->cal->register_action('calendar-acl', array($this, 'calendar_acl')); - + $this->freebusy_trigger = $this->rc->config->get('calendar_freebusy_trigger', false); if (kolab_storage::$version == '2.0') { @@ -89,11 +88,11 @@ class kolab_driver extends calendar_driver // get all folders that have "event" type, sorted by namespace/name $folders = kolab_storage::sort_folders(kolab_storage::get_folders('event') + kolab_storage::get_user_folders('event', true)); - $this->calendars = array(); + $this->calendars = array(); foreach ($folders as $folder) { if ($folder instanceof kolab_storage_folder_user) { - $calendar = new kolab_user_calendar($folder->name, $this->cal); + $calendar = new kolab_user_calendar($folder, $this->cal); $calendar->subscriptions = count($folder->children) > 0; } else { @@ -120,10 +119,12 @@ class kolab_driver extends calendar_driver */ public function list_calendars($filter = 0, &$tree = null) { + $this->_read_calendars(); + // attempt to create a default calendar for this user if (!$this->has_writeable) { if ($this->create_calendar(array('name' => 'Calendar', 'color' => 'cc0000'))) { - unset($this->calendars); + unset($this->calendars); $this->_read_calendars(); } } @@ -162,8 +163,8 @@ class kolab_driver extends calendar_driver // special handling for user or virtual folders if ($cal instanceof kolab_storage_folder_user) { $calendars[$cal->id] = array( - 'id' => $cal->id, - 'name' => kolab_storage::object_name($fullname), + 'id' => $cal->id, + 'name' => $fullname, 'listname' => $listname, 'editname' => $cal->get_foldername(), 'color' => $cal->get_color(), @@ -287,6 +288,8 @@ class kolab_driver extends calendar_driver */ protected function filter_calendars($filter) { + $this->_read_calendars(); + $calendars = array(); $plugin = $this->rc->plugins->exec_hook('calendar_list_filter', array( @@ -343,14 +346,19 @@ class kolab_driver extends calendar_driver */ public function get_calendar($id) { + $this->_read_calendars(); + // create calendar object if necesary - if (!$this->calendars[$id] && in_array($id, array(self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED))) { - $this->calendars[$id] = new kolab_invitation_calendar($id, $this->cal); - } - else if (!$this->calendars[$id] && $id !== self::BIRTHDAY_CALENDAR_ID) { - $calendar = kolab_calendar::factory($id, $this->cal); - if ($calendar->ready) - $this->calendars[$calendar->id] = $calendar; + if (!$this->calendars[$id]) { + if (in_array($id, array(self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED))) { + $this->calendars[$id] = new kolab_invitation_calendar($id, $this->cal); + } + else if ($id !== self::BIRTHDAY_CALENDAR_ID) { + $calendar = kolab_calendar::factory($id, $this->cal); + if ($calendar->ready) { + $this->calendars[$calendar->id] = $calendar; + } + } } return $this->calendars[$id]; @@ -595,8 +603,12 @@ class kolab_driver extends calendar_driver $event = self::from_rcube_event($event); - $cid = $event['calendar'] ? $event['calendar'] : reset(array_keys($this->calendars)); - if ($storage = $this->get_calendar($cid)) { + if (!$event['calendar']) { + $this->_read_calendars(); + $event['calendar'] = reset(array_keys($this->calendars)); + } + + if ($storage = $this->get_calendar($event['calendar'])) { // if this is a recurrence instance, append as exception to an already existing object for this UID if (!empty($event['recurrence_date']) && ($master = $storage->get_event($event['uid']))) { self::add_exception($master, $event); @@ -888,7 +900,7 @@ class kolab_driver extends calendar_driver break; } } - + if ($success && $this->freebusy_trigger) $this->rc->output->command('plugin.ping_url', array('action' => 'calendar/push-freebusy', 'source' => $storage->id)); @@ -1015,7 +1027,7 @@ class kolab_driver extends calendar_driver // copy attachment metadata to new event $event = self::from_rcube_event($event, $master); - + // remove recurrence exceptions on re-scheduling if ($reschedule) { unset($event['recurrence']['EXCEPTIONS'], $event['exceptions'], $master['recurrence']['EXDATE']); @@ -1468,8 +1480,10 @@ class kolab_driver extends calendar_driver { if ($calendars && is_string($calendars)) $calendars = explode(',', $calendars); - else if (!$calendars) + else if (!$calendars) { + $this->_read_calendars(); $calendars = array_keys($this->calendars); + } $query = array(); if ($modifiedsince) @@ -1514,8 +1528,10 @@ class kolab_driver extends calendar_driver if ($calendars && is_string($calendars)) $calendars = explode(',', $calendars); - else if (!$calendars) + else if (!$calendars) { + $this->_read_calendars(); $calendars = array_keys($this->calendars); + } foreach ($calendars as $cid) { if ($storage = $this->get_calendar($cid)) { @@ -1553,6 +1569,9 @@ class kolab_driver extends calendar_driver $candidates = array(); $query = array(array('tags', '=', 'x-has-alarms')); + + $this->_read_calendars(); + foreach ($this->calendars as $cid => $calendar) { // skip calendars with alarms disabled if (!$calendar->alarms || ($calendars && !in_array($cid, $calendars))) @@ -2309,6 +2328,8 @@ class kolab_driver extends calendar_driver return parent::calendar_form($action, $calendar, $formfields); } + $this->_read_calendars(); + if ($calendar['id'] && ($cal = $this->calendars[$calendar['id']])) { $folder = $cal->get_realname(); // UTF7 $color = $cal->get_color(); @@ -2442,7 +2463,7 @@ class kolab_driver extends calendar_driver if (is_array($form['content']) && !empty($form['content'])) { $table = new html_table(array('cols' => 2)); foreach ($form['content'] as $col => $colprop) { - $label = !empty($colprop['label']) ? $colprop['label'] : $this->rc->gettext($col); + $label = !empty($colprop['label']) ? $colprop['label'] : $this->cal->gettext($col); $table->add('title', html::label($colprop['id'], rcube::Q($label))); $table->add(null, $colprop['value']); diff --git a/drivers/kolab/kolab_invitation_calendar.php b/drivers/kolab/kolab_invitation_calendar.php index 4a44074..b41e296 100644 --- a/drivers/kolab/kolab_invitation_calendar.php +++ b/drivers/kolab/kolab_invitation_calendar.php @@ -34,6 +34,7 @@ class kolab_invitation_calendar public $categories = array(); public $name = 'Invitations'; + /** * Default constructor */ @@ -62,7 +63,6 @@ class kolab_invitation_calendar $this->alarms = $prefs[$this->id]['showalarms']; } - /** * Getter for a nice and human readable name for this calendar * @@ -73,7 +73,6 @@ class kolab_invitation_calendar return $this->name; } - /** * Getter for the IMAP folder owner * @@ -84,7 +83,6 @@ class kolab_invitation_calendar return $this->cal->rc->get_user_name(); } - /** * */ @@ -93,7 +91,6 @@ class kolab_invitation_calendar return $this->get_name(); } - /** * Getter for the name of the namespace to which the IMAP folder belongs * @@ -104,7 +101,6 @@ class kolab_invitation_calendar return 'x-special'; } - /** * Getter for the top-end calendar folder name (not the entire path) * @@ -171,7 +167,6 @@ class kolab_invitation_calendar return $prop['id']; } - /** * Getter for a single event object */ @@ -202,7 +197,7 @@ class kolab_invitation_calendar else { $cal = null; foreach (kolab_storage::list_folders('', '*', 'event', null) as $foldername) { - $cal = new kolab_calendar($foldername, $this->cal); + $cal = $this->_get_calendar($foldername); if ($cal->ready && $cal->storage && $cal->get_event($event['id'])) { break; } @@ -216,7 +211,6 @@ class kolab_invitation_calendar return false; } - /** * @param integer Event's new start (unix timestamp) * @param integer Event's new end (unix timestamp) @@ -239,7 +233,7 @@ class kolab_invitation_calendar // aggregate events from all calendar folders $events = array(); foreach (kolab_storage::list_folders('', '*', 'event', null) as $foldername) { - $cal = new kolab_calendar($foldername, $this->cal); + $cal = $this->_get_calendar($foldername); if ($cal->get_namespace() == 'other') continue; @@ -293,7 +287,7 @@ class kolab_invitation_calendar // aggregate counts from all calendar folders $count = 0; foreach (kolab_storage::list_folders('', '*', 'event', null) as $foldername) { - $cal = new kolab_calendar($foldername, $this->cal); + $cal = $this->_get_calendar($foldername); if ($cal->get_namespace() == 'other') continue; @@ -303,6 +297,15 @@ class kolab_invitation_calendar return $count; } + /** + * Get calendar object instance (that maybe already initialized) + */ + private function _get_calendar($folder_name) + { + $id = kolab_storage::folder_id($folder_name, true); + return $this->cal->driver->get_calendar($id); + } + /** * Helper method to modify some event properties */ @@ -318,7 +321,6 @@ class kolab_invitation_calendar return $event; } - /** * Create a new event record * @@ -337,7 +339,6 @@ class kolab_invitation_calendar * @see calendar_driver::new_event() * @return boolean True on success, False on error */ - public function update_event($event, $exception_id = null) { // forward call to the actual storage folder @@ -372,6 +373,4 @@ class kolab_invitation_calendar { return false; } - - } diff --git a/drivers/kolab/kolab_user_calendar.php b/drivers/kolab/kolab_user_calendar.php index 582f02f..62e5141 100644 --- a/drivers/kolab/kolab_user_calendar.php +++ b/drivers/kolab/kolab_user_calendar.php @@ -5,7 +5,7 @@ * * @author Thomas Bruederli * - * Copyright (C) 2014-2015, Kolab Systems AG + * Copyright (C) 2014-2016, Kolab Systems AG * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -45,8 +45,12 @@ class kolab_user_calendar extends kolab_calendar $this->userdata = $user_or_folder; $this->storage = new kolab_storage_folder_user($this->userdata['kolabtargetfolder'], '', $this->userdata); } + else if ($user_or_folder instanceof kolab_storage_folder_user) { + $this->storage = $user_or_folder; + $this->userdata = $this->storage->ldaprec; + } else { // get user record from LDAP - $this->storage = new kolab_storage_folder_user($user_or_folder); + $this->storage = new kolab_storage_folder_user($user_or_folder); $this->userdata = $this->storage->ldaprec; } @@ -57,7 +61,7 @@ class kolab_user_calendar extends kolab_calendar // ID is derrived from the user's kolabtargetfolder attribute $this->id = kolab_storage::folder_id($this->userdata['kolabtargetfolder'], true); $this->imap_folder = $this->userdata['kolabtargetfolder']; - $this->name = $this->storage->get_name(); + $this->name = $this->storage->name; $this->parent = ''; // user calendars are top level // user-specific alarms settings win @@ -67,7 +71,6 @@ class kolab_user_calendar extends kolab_calendar } } - /** * Getter for a nice and human readable name for this calendar * @@ -78,18 +81,18 @@ class kolab_user_calendar extends kolab_calendar return $this->userdata['displayname'] ?: ($this->userdata['name'] ?: $this->userdata['mail']); } - /** * Getter for the IMAP folder owner * + * @param bool Return a fully qualified owner name (unused) + * * @return string Name of the folder owner */ - public function get_owner() + public function get_owner($fully_qualified = false) { return $this->userdata['mail']; } - /** * */ @@ -98,7 +101,6 @@ class kolab_user_calendar extends kolab_calendar return trim($this->userdata['displayname'] . '; ' . $this->userdata['mail'], '; '); } - /** * Getter for the name of the namespace to which the IMAP folder belongs * @@ -109,7 +111,6 @@ class kolab_user_calendar extends kolab_calendar return 'other user'; } - /** * Getter for the top-end calendar folder name (not the entire path) * @@ -123,7 +124,7 @@ class kolab_user_calendar extends kolab_calendar /** * Return color to display this calendar */ - public function get_color() + public function get_color($default = null) { // calendar color is stored in local user prefs $prefs = $this->cal->rc->config->get('kolab_calendars', array()); @@ -131,7 +132,7 @@ class kolab_user_calendar extends kolab_calendar if (!empty($prefs[$this->id]) && !empty($prefs[$this->id]['color'])) return $prefs[$this->id]['color']; - return 'cc0000'; + return $default ?: 'cc0000'; } /** @@ -164,7 +165,6 @@ class kolab_user_calendar extends kolab_calendar return $prop['id']; } - /** * Getter for a single event object */ @@ -197,9 +197,11 @@ class kolab_user_calendar extends kolab_calendar * @param string Search query (optional) * @param boolean Include virtual events (optional) * @param array Additional parameters to query storage + * @param array Additional query to filter events + * * @return array A list of event records */ - public function list_events($start, $end, $search = null, $virtual = 1, $query = array()) + public function list_events($start, $end, $search = null, $virtual = 1, $query = array(), $filter_query = null) { // convert to DateTime for comparisons try { @@ -260,9 +262,10 @@ class kolab_user_calendar extends kolab_calendar * * @param integer Date range start (unix timestamp) * @param integer Date range end (unix timestamp) + * @param array Additional query to filter events * @return integer Count */ - public function count_events($start, $end = null) + public function count_events($start, $end = null, $filter_query = null) { // not implemented return 0; @@ -319,7 +322,7 @@ class kolab_user_calendar extends kolab_calendar 'X-OUT-OF-OFFICE' => $this->cal->gettext('availoutofoffice'), ); - // rcmail::console('_fetch_freebusy', kolab_storage::get_freebusy_url($this->userdata['mail']), $fbdata); + // rcube::console('_fetch_freebusy', kolab_storage::get_freebusy_url($this->userdata['mail']), $fbdata); // parse free-busy information $count = 0; @@ -371,7 +374,6 @@ class kolab_user_calendar extends kolab_calendar return sprintf('%s/%s', $event['start']->format('U'), is_object($event['end']) ? $event['end']->format('U') : '0'); } - /** * Create a new event record * @@ -390,7 +392,6 @@ class kolab_user_calendar extends kolab_calendar * @see calendar_driver::new_event() * @return boolean True on success, False on error */ - public function update_event($event, $exception_id = null) { return false; diff --git a/lib/calendar_ui.php b/lib/calendar_ui.php index c962d1d..5152c28 100644 --- a/lib/calendar_ui.php +++ b/lib/calendar_ui.php @@ -47,11 +47,12 @@ class calendar_ui // add taskbar button $this->cal->add_button(array( - 'command' => 'calendar', - 'class' => 'button-calendar', - 'classsel' => 'button-calendar button-selected', + 'command' => 'calendar', + 'class' => 'button-calendar', + 'classsel' => 'button-calendar button-selected', 'innerclass' => 'button-inner', - 'label' => 'calendar.calendar', + 'label' => 'calendar.calendar', + 'type' => 'link' ), 'taskbar'); // load basic client script @@ -177,7 +178,7 @@ class calendar_ui { $color = $prop['color']; $class = 'cal-' . asciiwords($id, true); - $css .= "li .$class, #eventshow .$class { color: #$color }\n"; + $css .= "li .$class, #eventshow .$class { color: #$color; }\n"; if ($mode != 1) { if ($mode == 3) { @@ -189,7 +190,7 @@ class calendar_ui $css .= ".fc-event-$class, "; $css .= ".fc-event-$class .fc-event-inner {"; } - if (!$attrib['printmode']) + if (!$prop['printmode']) $css .= " background-color: #$color;"; if ($mode % 2 == 0) $css .= " border-color: #$color;"; @@ -586,7 +587,7 @@ class calendar_ui $checkbox = new html_checkbox(array('name' => 'attachments', 'id' => 'event-export-attachments', 'value' => 1)); $html .= html::div('form-section', - html::label('event-export-range', $this->cal->gettext('exportattachments')) . + html::label('event-export-attachments', $this->cal->gettext('exportattachments')) . $checkbox->show(1) ); @@ -608,7 +609,7 @@ class calendar_ui $attrib['id'] = 'rcmUploadForm'; // Get max filesize, enable upload progress bar - $max_filesize =$this->rc->upload_init(); + $max_filesize = $this->rc->upload_init(); $button = new html_inputfield(array('type' => 'button')); $input = new html_inputfield(array( @@ -617,7 +618,7 @@ class calendar_ui return html::div($attrib, html::div(null, $input->show()) . - html::div('formbuttons', $button->show($this->rc->gettext('upload'), array('class' => 'button mainaction', + html::div('buttons', $button->show($this->rc->gettext('upload'), array('class' => 'button mainaction', 'onclick' => rcmail_output::JS_OBJECT_NAME . ".upload_file(this.form)"))) . html::div('hint', $this->rc->gettext(array('name' => 'maxuploadsize', 'vars' => array('size' => $max_filesize)))) ); diff --git a/localization/da_DK.inc b/localization/da_DK.inc index 45dd35d..60c5fa6 100644 --- a/localization/da_DK.inc +++ b/localization/da_DK.inc @@ -1,5 +1,4 @@ diff --git a/localization/de_CH.inc b/localization/de_CH.inc index a8fb1e5..8fbe532 100644 --- a/localization/de_CH.inc +++ b/localization/de_CH.inc @@ -179,6 +179,7 @@ $labels['itipmailbodycancel'] = "\$sender hat ihre Teilnahme bei der folgenden V $labels['itipmailbodydelegated'] = "\$sender hat die Teilnahme an folgendem Event delegiert:\n\n*\$title*\n\nWann: \$date"; $labels['itipmailbodydelegatedto'] = "\$sender hat die Teilnahme an folgendem Event an Sie delegiert:\n\n*\$title*\n\nWann: \$date"; $labels['itipdeclineevent'] = 'Möchten Sie die Einladung zu diesem Termin ablehnen?'; +$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?'; $labels['itipcomment'] = 'Kommentar zur Einladungs/Benachrichtigung'; $labels['itipcommenttitle'] = 'Dieser Kommentar wird an die Einladungs/Benachrichtigung angehängt, die an die Teilnehmer verschickt wird'; $labels['notanattendee'] = 'Sie sind nicht in der Liste der Teilnehmer aufgeführt'; diff --git a/localization/de_DE.inc b/localization/de_DE.inc index 619fb09..1482f68 100644 --- a/localization/de_DE.inc +++ b/localization/de_DE.inc @@ -1,5 +1,4 @@ diff --git a/localization/en_US.inc b/localization/en_US.inc index 496b1e5..2e2952c 100644 --- a/localization/en_US.inc +++ b/localization/en_US.inc @@ -165,6 +165,8 @@ $labels['availbusy'] = 'Busy'; $labels['availunknown'] = 'Unknown'; $labels['availtentative'] = 'Tentative'; $labels['availoutofoffice'] = 'Out of Office'; +$labels['delegatedto'] = 'Delegated to: '; +$labels['delegatedfrom'] = 'Delegated from: '; $labels['scheduletime'] = 'Find availability'; $labels['sendinvitations'] = 'Send invitations'; $labels['sendnotifications'] = 'Notify participants about modifications'; diff --git a/localization/es_ES.inc b/localization/es_ES.inc index 3ba796d..1059c2c 100644 --- a/localization/es_ES.inc +++ b/localization/es_ES.inc @@ -169,6 +169,7 @@ $labels['invitationattendlinks'] = "En caso de que su cliente de correo electró $labels['eventupdatesubject'] = '"$title" Ha sido actualizado'; $labels['eventupdatesubjectempty'] = 'Un evento que le concierne ha sido actualizado'; $labels['eventupdatemailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\nSe adjunta un archivo iCalendar con los detalles del evento actualizados que se puede importar a la aplicación de calendario."; +$labels['eventcancelsubject'] = 'Se ha cancelado "$título"'; $labels['eventcancelmailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\nEl evento ha sido cancelado por\$organizer.\n\nSe adjunta un archivo iCalendar con los detalles del evento actualizados."; $labels['itipobjectnotfound'] = 'El evento referido por este mensaje no se encontró en su calendario.'; $labels['itipmailbodyaccepted'] = "\$sender ha aceptado la invitación al evento siguiente:\n\n*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees"; @@ -183,21 +184,85 @@ $labels['itipcomment'] = 'Añadir comentarios a la Invitación/notificación'; $labels['itipcommenttitle'] = 'Este comentario se adjunta al mensaje de invitación/notificación enviada a los participantes'; $labels['notanattendee'] = 'Usted no está en la lista como un asistente de este evento'; $labels['eventcancelled'] = 'El evento ha sido cancelado'; +$labels['saveincalendar'] = 'guardar en'; +$labels['updatemycopy'] = 'actualizar en mi calendario'; +$labels['savetocalendar'] = 'guardar en calendario'; +$labels['openpreview'] = 'Revisar en calendario'; +$labels['noearlierevents'] = 'No hay eventos anteriores'; +$labels['nolaterevents'] = 'No hay eventos posteriores'; $labels['resource'] = 'Recurso'; +$labels['addresource'] = 'Reservar recursos'; +$labels['findresources'] = 'Encontrar recursos'; $labels['resourcedetails'] = 'Detalles'; +$labels['resourceavailability'] = 'Disponibilidad'; +$labels['resourceowner'] = 'Propietario'; +$labels['resourceadded'] = 'Se ha añadido un recurso a su evento'; $labels['tabsummary'] = 'Sumario'; $labels['tabrecurrence'] = 'Recurrencia '; +$labels['tabattendees'] = 'Participantes'; $labels['tabresources'] = 'Recursos'; $labels['tabattachments'] = 'Adjuntos'; $labels['tabsharing'] = 'Compartir'; +$labels['deleteobjectconfirm'] = '¿Esta seguro de eliminar este evento?'; +$labels['deleteventconfirm'] = '¿Esta seguro de eliminar este evento?'; +$labels['deletecalendarconfirm'] = '¿Esta seguro de eliminar este calendario con todos sus eventos?'; +$labels['deletecalendarconfirmrecursive'] = '¿Esta seguro de eliminar este calendario con todos sus eventos y subcalendarios?'; $labels['savingdata'] = 'Guardando datos...'; +$labels['errorsaving'] = 'Error al guardar cambios'; +$labels['operationfailed'] = 'Error en la operación solicitada'; +$labels['invalideventdates'] = 'Se han introducido fechas erróneas; por favor, revise su entrada'; +$labels['invalidcalendarproperties'] = 'Propiedades de portátiles erróneas; establezca un nombre válido.'; +$labels['searchnoresults'] = 'No se han encontrado eventos en los calendarios seleccionados.'; +$labels['successremoval'] = 'El evento se ha eliminado correctamente.'; +$labels['successrestore'] = 'El evento se ha restaurado correctamente.'; +$labels['errornotifying'] = 'Error al enviar notificaciones a los participantes del evento'; +$labels['errorimportingevent'] = 'Error al importar el evento'; +$labels['importwarningexists'] = 'Ya existe una copia de este evento en su calendario.'; +$labels['newerversionexists'] = 'Ya existe una versión más nueva de este evento. Abortado.'; +$labels['nowritecalendarfound'] = 'No se ha encontrado ningún calendario para guardar el evento.'; +$labels['importedsuccessfully'] = 'El evento se agregó correctamente a \'$calendar\''; +$labels['updatedsuccessfully'] = 'El evento se actualizó correctamente en \'$calendar\''; $labels['attendeupdateesuccess'] = 'Se ha actualizado correctamente el estado del participante'; +$labels['itipsendsuccess'] = 'Invitación enviada a los participantes.'; +$labels['itipresponseerror'] = 'Error al enviar la respuesta a esta invitación de evento'; $labels['itipinvalidrequest'] = 'Esta invitación ya no es válida'; +$labels['sentresponseto'] = 'Respuesta de invitación con éxito enviada a $mailto'; +$labels['localchangeswarning'] = 'Está a punto de realizar cambios que sólo se reflejarán en su calendario y no se enviarán al organizador del evento.'; +$labels['importsuccess'] = 'Se han importado $nr eventos correctamente'; +$labels['importnone'] = 'No se han encontrado eventos para importar'; +$labels['importerror'] = 'Se ha producido un error durante la importación'; +$labels['aclnorights'] = 'No tiene derechos de administrador en este calendario.'; +$labels['changeeventconfirm'] = 'Cambiar evento'; +$labels['removeeventconfirm'] = 'Eliminar evento'; +$labels['changerecurringeventwarning'] = 'Este es un evento recurrente. ¿Desea editar solo el evento actual, este y todos los futuros casos, todos los casos o guardarlo como un nuevo evento?'; +$labels['removerecurringeventwarning'] = 'Este es un evento recurrente. ¿Desea eliminar solo el evento actual, este y todos los futuros casos o todos los casos de este evento?'; +$labels['removerecurringallonly'] = 'Este es un evento recurrente. Como participante, sólo puede eliminar el evento al completo con todos los casos..'; +$labels['currentevent'] = 'Actual'; $labels['futurevents'] = 'Futuro'; $labels['allevents'] = 'Todo'; +$labels['saveasnew'] = 'Guardar como nuevo'; +$labels['birthdays'] = 'Cumpleaños'; +$labels['birthdayscalendar'] = 'Calendario de cumpleaños'; +$labels['displaybirthdayscalendar'] = 'Mostrar calendarios de cumpleaños'; +$labels['birthdayscalendarsources'] = 'Desde esta libreta de direcciones'; +$labels['birthdayeventtitle'] = 'Cumpleaños de $nombre'; +$labels['birthdayage'] = 'Edad $edad'; $labels['objectchangelog'] = 'Cambiar historial'; $labels['objectdiff'] = 'Cambiar de $rev1 a $rev2'; +$labels['objectnotfound'] = 'Error al cargar los datos del evento'; +$labels['objectchangelognotavailable'] = 'El historial de cambios no está disponible para este evento'; $labels['objectdiffnotavailable'] = 'No hay comparación posible que las revisiones seleccionadas'; +$labels['revisionrestoreconfirm'] = '¿Realmente desea restaurar la revisión $rev de este evento? Esto reemplazará el evento actual con la antigua versión.'; $labels['objectrestoresuccess'] = 'Revisión $rev restaurado correctamente'; -$labels['objectrestoreerror'] = 'No se pudo restaurar la revisión antigua'; +$labels['objectrestoreerror'] = 'No se pudo restaurar la revisión anterior'; +$labels['arialabelminical'] = 'Seleccionar una fecha en el calendario'; +$labels['arialabelcalendarview'] = 'Vista del calendario'; +$labels['arialabelsearchform'] = 'Formulario de búsqueda de eventos'; +$labels['arialabelquicksearchbox'] = 'Entrada en búsqueda de eventos'; +$labels['arialabelcalsearchform'] = 'Formulario de búsqueda de calendarios'; +$labels['calendaractions'] = 'acciones del calendario'; +$labels['arialabeleventattendees'] = 'Lista de participantes del evento'; +$labels['arialabeleventresources'] = 'Lista de recursos del evento'; +$labels['arialabelresourcesearchform'] = 'Formulario de búsqueda de recursos'; +$labels['arialabelresourceselection'] = 'Recursos disponibles'; ?> diff --git a/localization/fi_FI.inc b/localization/fi_FI.inc index d274dc9..3b3089b 100644 --- a/localization/fi_FI.inc +++ b/localization/fi_FI.inc @@ -1,5 +1,4 @@ diff --git a/localization/fr_FR.inc b/localization/fr_FR.inc index 53c9d85..9605238 100644 --- a/localization/fr_FR.inc +++ b/localization/fr_FR.inc @@ -14,9 +14,9 @@ $labels['first_hour'] = 'Première heure à afficher'; $labels['workinghours'] = 'Heures de travail'; $labels['add_category'] = 'Ajouter une catégorie'; $labels['remove_category'] = 'Supprimer une catégorie'; -$labels['defaultcalendar'] = 'Ajouter un nouvel évènement'; -$labels['eventcoloring'] = 'Couleurs des évènements'; -$labels['coloringmode0'] = 'Selon l\'agenda'; +$labels['defaultcalendar'] = 'Ajouter un nouvel événement'; +$labels['eventcoloring'] = 'Couleurs des événements'; +$labels['coloringmode0'] = 'Selon le calendrier'; $labels['coloringmode1'] = 'Selon la catégorie'; $labels['coloringmode2'] = 'Calendrier en contour, catégorie en contenu'; $labels['coloringmode3'] = 'Catégorie en contour, calendrier en contenu'; @@ -25,14 +25,14 @@ $labels['aftertrash'] = 'Déplacer dans la corbeille'; $labels['afterdelete'] = 'Supprimer ce message'; $labels['afterflagdeleted'] = 'Marquer comme supprimer'; $labels['aftermoveto'] = 'Déplacer vers...'; -$labels['itipoptions'] = 'Invitations à l\'évenement'; +$labels['itipoptions'] = 'Invitations à l\'événement'; $labels['afteraction'] = 'Après une invitation ou une modification, le message est traité'; -$labels['calendar'] = 'Agenda'; -$labels['calendars'] = 'Agendas'; +$labels['calendar'] = 'Calendrier'; +$labels['calendars'] = 'Calendriers'; $labels['category'] = 'Catégorie'; $labels['categories'] = 'Catégories'; -$labels['createcalendar'] = 'Créer un nouvel agenda'; -$labels['editcalendar'] = 'Modifier les propriétés de l\'agenda'; +$labels['createcalendar'] = 'Créer un nouveau calendrier'; +$labels['editcalendar'] = 'Modifier les propriétés du calendrier'; $labels['name'] = 'Nom'; $labels['color'] = 'Couleur'; $labels['day'] = 'Jour'; @@ -40,41 +40,41 @@ $labels['week'] = 'Semaine'; $labels['month'] = 'Mois'; $labels['agenda'] = 'Ordre du jour'; $labels['new'] = 'Nouveau'; -$labels['new_event'] = 'Nouvel évènement'; -$labels['edit_event'] = 'Modifier l\'évènement'; +$labels['new_event'] = 'Nouvel événement'; +$labels['edit_event'] = 'Modifier l\'événement'; $labels['edit'] = 'Modifier'; $labels['save'] = 'Enregistrer'; -$labels['removelist'] = 'supprimer de la liste'; +$labels['removelist'] = 'Supprimer de la liste'; $labels['cancel'] = 'Annuler'; $labels['select'] = 'Sélectionner'; $labels['print'] = 'Imprimer'; -$labels['printtitle'] = 'Imprimer les agendas'; +$labels['printtitle'] = 'Imprimer les calendriers'; $labels['title'] = 'Résumé'; $labels['description'] = 'Description'; -$labels['all-day'] = 'Toute la journée'; +$labels['all-day'] = 'toute la journée'; $labels['export'] = 'Exporter'; $labels['exporttitle'] = 'Exporter vers iCalendar'; -$labels['exportrange'] = 'Évènements depuis'; -$labels['exportattachments'] = 'With attachments'; +$labels['exportrange'] = 'Événements depuis'; +$labels['exportattachments'] = 'Avec pièces jointes'; $labels['customdate'] = 'Date personnalisée'; $labels['location'] = 'Lieu'; $labels['url'] = 'URL'; $labels['date'] = 'Date'; $labels['start'] = 'Début'; -$labels['starttime'] = 'Début'; +$labels['starttime'] = 'Heure de début'; $labels['end'] = 'Fin'; -$labels['endtime'] = 'Fin'; +$labels['endtime'] = 'Heure de fin'; $labels['repeat'] = 'Répéter'; $labels['selectdate'] = 'Sélectionner une date'; -$labels['freebusy'] = 'Montrez moi comme'; +$labels['freebusy'] = 'Montrez-moi en tant que'; $labels['free'] = 'Libre'; $labels['busy'] = 'Occupé'; $labels['outofoffice'] = 'Absent'; $labels['tentative'] = 'Provisoire'; -$labels['mystatus'] = 'Mon status'; +$labels['mystatus'] = 'Mon statut'; $labels['status'] = 'Statut'; $labels['status-confirmed'] = 'Confirmé'; -$labels['status-cancelled'] = 'Annulée'; +$labels['status-cancelled'] = 'Annulé'; $labels['priority'] = 'Priorité'; $labels['sensitivity'] = 'Diffusion'; $labels['public'] = 'publique'; @@ -83,7 +83,7 @@ $labels['confidential'] = 'Confidentiel'; $labels['links'] = 'Référence'; $labels['alarms'] = 'Rappel'; $labels['comment'] = 'Commentaire'; -$labels['created'] = 'Créée'; +$labels['created'] = 'Créé'; $labels['changed'] = 'Dernière modification'; $labels['unknown'] = 'Inconnu'; $labels['eventoptions'] = 'Options'; @@ -92,39 +92,39 @@ $labels['eventhistory'] = 'Historique'; $labels['removelink'] = 'Enlever référence d\'e-mail'; $labels['printdescriptions'] = 'Imprimer les descriptions'; $labels['parentcalendar'] = 'Ajouter à l\'intérieur'; -$labels['searchearlierdates'] = '« Chercher des évènements plus ancien'; -$labels['searchlaterdates'] = 'Chercher des évènement plus récent »'; +$labels['searchearlierdates'] = '« Chercher des événements plus anciens'; +$labels['searchlaterdates'] = 'Chercher des événement plus récents »'; $labels['andnmore'] = '$nr de plus...'; $labels['togglerole'] = 'Cliquez pour changer de rôle'; -$labels['createfrommail'] = 'Enregistrer comme un évènement'; -$labels['importevents'] = 'Importer des évènements'; -$labels['importrange'] = 'Évènements depuis'; -$labels['onemonthback'] = '1 mois précédent'; +$labels['createfrommail'] = 'Enregistrer comme un événement'; +$labels['importevents'] = 'Importer des événements'; +$labels['importrange'] = 'Événements depuis'; +$labels['onemonthback'] = '1 mois auparavant'; $labels['nmonthsback'] = '$nr mois précédents'; -$labels['showurl'] = 'Afficher l\'URL de l\'agenda'; -$labels['showurldescription'] = 'Utilisez l\'adresse suivante pour accéder(lecture seule) à votre agenda depuis une autre application. Vous pouvez copier/coller celle-ci dans n\'importe quel agenda électronique gérant le format iCal.'; -$labels['caldavurldescription'] = 'Copiez cette adresse vers une application client (comme Evolution ou Mozilla Thunderbird) compatible
CalDAV pour synchroniser ce calendrier avec votre ordinateur ou votre smartphone.'; +$labels['showurl'] = 'Afficher l\'URL du calendrier'; +$labels['showurldescription'] = 'Utilisez l\'adresse suivante pour accéder (lecture seule) à votre calendrier depuis d\'autres applications. Vous pouvez copier/coller celle-ci dans n\'importe quel calendrier électronique gérant le format iCal.'; +$labels['caldavurldescription'] = 'Copiez cette adresse vers une application client (comme Evolution ou Mozilla Thunderbird) compatible CalDAV pour synchroniser pleinement ce calendrier avec votre ordinateur ou votre smartphone.'; $labels['findcalendars'] = 'Recherche de calendriers...'; $labels['searchterms'] = 'Critères de recherche'; $labels['calsearchresults'] = 'Calendriers disponibles'; $labels['calendarsubscribe'] = 'Lister définitivement'; -$labels['nocalendarsfound'] = 'Aucun calendriers trouvés'; +$labels['nocalendarsfound'] = 'Aucun calendrier trouvé'; $labels['nrcalendarsfound'] = '$nr calendriers trouvés'; $labels['quickview'] = 'Voir uniquement ce calendrier'; $labels['invitationspending'] = 'Invitations en attente'; $labels['invitationsdeclined'] = 'Invitations refusées'; -$labels['changepartstat'] = 'Changer le statut du participent'; +$labels['changepartstat'] = 'Changer le statut du participant'; $labels['rsvpcomment'] = 'Texte d\'invitation'; $labels['listrange'] = 'Intervalle à afficher :'; $labels['listsections'] = 'Diviser en :'; -$labels['smartsections'] = 'Section intelligente'; +$labels['smartsections'] = 'Sections intelligentes'; $labels['until'] = 'jusqu\'à'; $labels['today'] = 'Aujourd\'hui'; $labels['tomorrow'] = 'Demain'; $labels['thisweek'] = 'Cette semaine'; $labels['nextweek'] = 'Semaine prochaine'; $labels['prevweek'] = 'Semaine précédente'; -$labels['thismonth'] = 'Ce mois'; +$labels['thismonth'] = 'Ce mois-ci'; $labels['nextmonth'] = 'Mois prochain'; $labels['weekofyear'] = 'Semaine'; $labels['pastevents'] = 'Passé'; @@ -139,10 +139,10 @@ $labels['confirmstate'] = 'Statut'; $labels['addattendee'] = 'Ajouter participant'; $labels['roleorganizer'] = 'Organisateur'; $labels['rolerequired'] = 'Requis'; -$labels['roleoptional'] = 'Optionel'; -$labels['rolechair'] = 'Chair'; +$labels['roleoptional'] = 'Optionnel'; +$labels['rolechair'] = 'Présidence'; $labels['rolenonparticipant'] = 'Absent'; -$labels['cutypeindividual'] = 'Individual'; +$labels['cutypeindividual'] = 'Individuel'; $labels['cutypegroup'] = 'Groupe'; $labels['cutyperesource'] = 'Ressource'; $labels['cutyperoom'] = 'Salle'; @@ -158,110 +158,111 @@ $labels['sendinvitations'] = 'Envoyer les invitations'; $labels['sendnotifications'] = 'Informer les participants des modifications'; $labels['sendcancellation'] = 'Informer les participants de l\'annulation'; $labels['onlyworkinghours'] = 'Trouver des disponibilités en fonction de mes heures de travail'; -$labels['reqallattendees'] = 'Demandé/tous'; +$labels['reqallattendees'] = 'Demandé/tous les participants'; $labels['prevslot'] = 'Créneau précédent'; $labels['nextslot'] = 'Créneau suivant'; $labels['suggestedslot'] = 'Emplacement suggéré'; $labels['noslotfound'] = 'Impossible de trouver un créneau disponible'; $labels['invitationsubject'] = 'Vous avez été invité à "$title"'; -$labels['invitationmailbody'] = "*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees\n\nVous trouverez ci-joint un fichier iCalendar avec tous les détails de l'évènement que vous pourrez importer dans votre agenda électronique."; -$labels['invitationattendlinks'] = "Dans le cas où votre application de messagerie ne gère pas les demandes \"iTip\". Vous pouvez utiliser ce lien pour accepter ou refuser l'invitation : \n\$url"; +$labels['invitationmailbody'] = "*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees\n\nVous trouverez ci-joint un fichier iCalendar avec tous les détails de l'événement que vous pourrez importer dans votre calendrier électronique."; +$labels['invitationattendlinks'] = "Dans le cas où votre application de messagerie ne gère pas les demandes \"iTip\", vous pouvez utiliser ce lien pour accepter ou refuser l'invitation : \n\$url"; $labels['eventupdatesubject'] = '"$title" a été modifié'; -$labels['eventupdatesubjectempty'] = 'Un évènement vous concernant a été modifié'; -$labels['eventupdatemailbody'] = "*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees\n\nVous trouverez ci-joint un fichier iCalendar avec tous les modifications de l'évènement que vous pourrez importer dans votre agenda électronique."; -$labels['eventcancelmailbody'] = "*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees\n\nL'évènement a été annulé par \$organizer.\n\nVous trouverez en pièce jointe un fichier iCalendar avec les modifications de l'évènement que vous pourrez importer dans votre agenda électronique."; -$labels['itipobjectnotfound'] = 'L\'évènement lié à ce message n\'a pas été trouvé dans votre calendrier.'; -$labels['itipmailbodyaccepted'] = "\$sender a accepté l'invitation à l'évènement suivant :\n\n*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees"; -$labels['itipmailbodytentative'] = "\$sender a accepté provisoirement l'invitation à l'évènement suivant :\n\n*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees"; -$labels['itipmailbodydeclined'] = "\$sender a refusé l'invitation à l'évènement suivant :\n\n*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees"; -$labels['itipmailbodycancel'] = "\$sender a rejeté votre participation à l’évènement suivant :\n\n*\$title*\n\nLe: \$date"; +$labels['eventupdatesubjectempty'] = 'Un événement vous concernant a été modifié'; +$labels['eventupdatemailbody'] = "*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees\n\nVous trouverez ci-joint un fichier iCalendar avec toutes les modifications à l'événement que vous pourrez importer dans votre calendrier électronique."; +$labels['eventcancelsubject'] = '"$title" a été annulé'; +$labels['eventcancelmailbody'] = "*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees\n\nL'événement a été annulé par \$organizer.\n\nVous trouverez en pièce jointe un fichier iCalendar avec les modifications de l'événement que vous pourrez importer dans votre calendrier électronique."; +$labels['itipobjectnotfound'] = 'L\'événement lié à ce message n\'a pas été trouvé dans votre calendrier.'; +$labels['itipmailbodyaccepted'] = "\$sender a accepté l'invitation à l'événement suivant :\n\n*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees"; +$labels['itipmailbodytentative'] = "\$sender a accepté provisoirement l'invitation à l'événement suivant :\n\n*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees"; +$labels['itipmailbodydeclined'] = "\$sender a refusé l'invitation à l'événement suivant :\n\n*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees"; +$labels['itipmailbodycancel'] = "\$sender a rejeté votre participation à l’événement suivant :\n\n*\$title*\n\nLe: \$date"; $labels['itipmailbodydelegated'] = "\$sender a délégué la participation à l'événement suivant : \n\n*\$title*\n\nQuand: \$date"; $labels['itipmailbodydelegatedto'] = "\$sender vous a délégué la participation à l'événement suivant : \n\n*\$title*\n\nQuand : \$date"; -$labels['itipdeclineevent'] = 'Voulez-vous refuser l\'invitation à cet évènement?'; -$labels['declinedeleteconfirm'] = 'Voulez-vous aussi supprimer cet évènement annulé, de votre calendrier ?'; +$labels['itipdeclineevent'] = 'Voulez-vous refuser l\'invitation à cet événement?'; +$labels['declinedeleteconfirm'] = 'Voulez-vous aussi supprimer cet événement annulé de votre calendrier ?'; $labels['itipcomment'] = 'Commentaire d’invitation ou de notification'; $labels['itipcommenttitle'] = 'Ce commentaire sera inséré dans le message d\'invitation ou de notification envoyé aux participants'; -$labels['notanattendee'] = 'Vous n\'êtes pas dans la liste des participants à cet évènement'; -$labels['eventcancelled'] = 'L\'évènement a été annulé'; -$labels['saveincalendar'] = 'Enregistrer sous'; +$labels['notanattendee'] = 'Vous n\'êtes pas dans la liste des participants à cet événement'; +$labels['eventcancelled'] = 'L\'événement a été annulé'; +$labels['saveincalendar'] = 'enregistrer sous'; $labels['updatemycopy'] = 'Mise à jour dans mon calendrier'; $labels['savetocalendar'] = 'Sauvegarde dans le calendrier'; -$labels['openpreview'] = 'Test calendrier'; -$labels['noearlierevents'] = 'Aucun évènements passé'; -$labels['nolaterevents'] = 'Aucun évènement futur'; +$labels['openpreview'] = 'Consulter le calendrier'; +$labels['noearlierevents'] = 'Aucun événement passé'; +$labels['nolaterevents'] = 'Aucun événement futur'; $labels['resource'] = 'Ressource'; $labels['addresource'] = 'Carnet de ressources'; $labels['findresources'] = 'Recherche des ressources'; $labels['resourcedetails'] = 'Détails'; $labels['resourceavailability'] = 'Disponibilité'; $labels['resourceowner'] = 'Propriétaire'; -$labels['resourceadded'] = 'Cette ressource a été ajouté à l\'évènement'; +$labels['resourceadded'] = 'Cette ressource a été ajoutée à l\'événement'; $labels['tabsummary'] = 'Résumé'; $labels['tabrecurrence'] = 'Récurrence'; $labels['tabattendees'] = 'Participants'; $labels['tabresources'] = 'Ressources'; $labels['tabattachments'] = 'Pièces jointes'; $labels['tabsharing'] = 'Partage'; -$labels['deleteobjectconfirm'] = 'Voulez-vous vraiment supprimer cet évènement?'; -$labels['deleteventconfirm'] = 'Voulez-vous vraiment supprimer cet évènement?'; -$labels['deletecalendarconfirm'] = 'Voulez-vous vraiment supprimer cet agenda et tous ses évènements?'; -$labels['deletecalendarconfirmrecursive'] = 'Voulez-vous vraiment supprimer ce calendrier avec tous ces évènements et ces sous calendriers ?'; +$labels['deleteobjectconfirm'] = 'Voulez-vous vraiment supprimer cet événement?'; +$labels['deleteventconfirm'] = 'Voulez-vous vraiment supprimer cet événement?'; +$labels['deletecalendarconfirm'] = 'Voulez-vous vraiment supprimer ce calendrier et tous ses événements?'; +$labels['deletecalendarconfirmrecursive'] = 'Voulez-vous vraiment supprimer ce calendrier avec tous ses événements et ses sous-calendriers ?'; $labels['savingdata'] = 'Enregistrer...'; $labels['errorsaving'] = 'Échec lors de l\'enregistrement des changements'; $labels['operationfailed'] = 'L\'opération demandée a échoué'; -$labels['invalideventdates'] = 'Dates invalides! Veuillez vérifier votre saisie.'; -$labels['invalidcalendarproperties'] = 'Propriétés d\'agenda invalides! Veuillez saisir un nom valide.'; -$labels['searchnoresults'] = 'Pas d\'évènement trouvé dans les agendas sélectionnés.'; -$labels['successremoval'] = 'L\'évènement a été supprimé.'; -$labels['successrestore'] = 'L\'évènement a été restauré.'; -$labels['errornotifying'] = 'Échec de l\'envoi de notification aux participants '; -$labels['errorimportingevent'] = 'Échec de l\'import de l\'évènement'; -$labels['importwarningexists'] = 'Une copie de cet évènement existe déjà dans votre calendrier.'; -$labels['newerversionexists'] = 'Une nouvelle version de cet évènement existe! Abandon.'; -$labels['nowritecalendarfound'] = 'Pas d\'agenda trouvé pour enregistrer l\'évènement'; -$labels['importedsuccessfully'] = 'L\'évènement a été ajouté à l\'agenda \'$calendar\''; -$labels['updatedsuccessfully'] = 'Cet évènement a été modifié avec succès dans \'$calendar\''; +$labels['invalideventdates'] = 'Dates invalides ! Veuillez vérifier votre saisie.'; +$labels['invalidcalendarproperties'] = 'Propriétés du calendrier invalides ! Veuillez saisir un nom valide.'; +$labels['searchnoresults'] = 'Pas d\'événement trouvé dans les calendriers sélectionnés.'; +$labels['successremoval'] = 'L\'événement a été supprimé.'; +$labels['successrestore'] = 'L\'événement a été restauré.'; +$labels['errornotifying'] = 'Échec de l\'envoi de notifications aux participants '; +$labels['errorimportingevent'] = 'Échec de l\'import de l\'événement'; +$labels['importwarningexists'] = 'Une copie de cet événement existe déjà dans votre calendrier.'; +$labels['newerversionexists'] = 'Une nouvelle version de cet événement existe ! Abandon.'; +$labels['nowritecalendarfound'] = 'Pas de calendrier trouvé pour enregistrer l\'événement'; +$labels['importedsuccessfully'] = 'L\'événement a été ajouté à l\'agenda \'$calendar\''; +$labels['updatedsuccessfully'] = 'Cet événement a été modifié avec succès dans \'$calendar\''; $labels['attendeupdateesuccess'] = 'Le statut des participants a été modifié'; -$labels['itipsendsuccess'] = 'Invitation envoyé aux participants.'; -$labels['itipresponseerror'] = 'Échec de l\'envoi d\'une réponse à cette invitation.'; -$labels['itipinvalidrequest'] = 'C\'est invitation n\'est plus valide.'; -$labels['sentresponseto'] = 'La réponse à l\'invitation a été envoyé à $mailto'; -$labels['localchangeswarning'] = 'Vous êtes sur le point d\'effectuer des modifications qui seront effectifs sur votre calendrier mais qui ne seront pas envoyés à l\'organisateur de l’évènement.'; -$labels['importsuccess'] = '$nr évènements importés.'; -$labels['importnone'] = 'Pas d\'évènements à importer'; -$labels['importerror'] = 'Une erreur est arrivée lors de l\'import'; -$labels['aclnorights'] = 'Vous n\'avez pas les droits d\'administration sur cet agenda.'; -$labels['changeeventconfirm'] = 'Modifier l\'évènement'; -$labels['removeeventconfirm'] = 'Supprimer l\'évènement'; -$labels['changerecurringeventwarning'] = 'Ceci est un évènement récurant. Voulez vous éditer seulement cette occurrence, celle-ci et toutes les suivantes, toutes les occurrences ou l\'enregistrer comme un nouvel évènement? '; -$labels['removerecurringeventwarning'] = 'Ceci est un évènement récurent. Voulez-vous supprimer l\'évènement courant uniquement, l’évènement courant et toutes les occurrences futures, ou toutes les occurrences ?'; -$labels['removerecurringallonly'] = 'Ceci est un évènement récurent. En tant que participant vous pouvez seulement supprimer l\'évènement entier avec toutes les occurrences.'; +$labels['itipsendsuccess'] = 'Invitation envoyée aux participants.'; +$labels['itipresponseerror'] = 'Échec de l\'envoi d\'une réponse à cette invitation'; +$labels['itipinvalidrequest'] = 'C\'est invitation n\'est plus valide'; +$labels['sentresponseto'] = 'La réponse à l\'invitation a été envoyée à $mailto'; +$labels['localchangeswarning'] = 'Vous êtes sur le point d\'effectuer des modifications qui seront effectives dans votre calendrier mais qui ne seront pas envoyées à l\'organisateur de l’événement.'; +$labels['importsuccess'] = '$nr événements importés.'; +$labels['importnone'] = 'Pas d\'événement à importer'; +$labels['importerror'] = 'Une erreur s\'est produite lors de l\'importation'; +$labels['aclnorights'] = 'Vous ne disposez pas des droits d\'administrateur sur ce calendrier.'; +$labels['changeeventconfirm'] = 'Modifier l\'événement'; +$labels['removeeventconfirm'] = 'Supprimer l\'événement'; +$labels['changerecurringeventwarning'] = 'Ceci est un événement récurrent. Voulez-vous éditer seulement cette occurrence, celle-ci et toutes les suivantes, toutes les occurrences ou l\'enregistrer comme un nouvel événement ? '; +$labels['removerecurringeventwarning'] = 'Ceci est un événement récurrent. Voulez-vous supprimer l\'événement courant uniquement, l’événement courant et toutes les occurrences futures, ou toutes les occurrences ?'; +$labels['removerecurringallonly'] = 'Ceci est un événement récurrent. En tant que participant, vous pouvez seulement supprimer l\'événement entier avec toutes les occurrences.'; $labels['currentevent'] = 'Cette occurrence'; $labels['futurevents'] = 'Cette occurrence et toutes les suivantes'; $labels['allevents'] = 'Toutes les occurrences'; -$labels['saveasnew'] = 'Enregistrer comme un nouvel évènement'; +$labels['saveasnew'] = 'Enregistrer comme un nouvel événement'; $labels['birthdays'] = 'Anniversaires'; $labels['birthdayscalendar'] = 'Calendrier des anniversaires'; $labels['displaybirthdayscalendar'] = 'Afficher le calendrier des anniversaires'; $labels['birthdayscalendarsources'] = 'Depuis ces carnets d\'adresses'; $labels['birthdayeventtitle'] = 'Anniversaire de $name'; -$labels['birthdayage'] = 'Age $age'; +$labels['birthdayage'] = 'Âge $age'; $labels['objectchangelog'] = 'Historique des modifications'; -$labels['objectdiff'] = 'Modifications depuis $rev1 jusqu\'à $rev2'; -$labels['objectnotfound'] = 'Impossible de charger les données de l’évènement'; -$labels['objectchangelognotavailable'] = 'Il n\'y a pas d\'historique des modifications pour cet évènement'; +$labels['objectdiff'] = 'Modifications de $rev1 à $rev2'; +$labels['objectnotfound'] = 'Impossible de charger les données de l’événement'; +$labels['objectchangelognotavailable'] = 'Il n\'y a pas d\'historique des modifications pour cet événement'; $labels['objectdiffnotavailable'] = 'La comparaison des versions sélectionnées est impossible'; -$labels['revisionrestoreconfirm'] = 'Voulez-vous vraiment restaurer le version $rev de cet évènement ? Cette action va remplacer l\'évènement courant par l\'ancienne version.'; +$labels['revisionrestoreconfirm'] = 'Voulez-vous vraiment restaurer le version $rev de cet événement ? Cette action va remplacer l\'événement actuel par l\'ancienne version.'; $labels['objectrestoresuccess'] = 'La révision $rev a été restaurée avec succès'; $labels['objectrestoreerror'] = 'Échec lors de la restauration de la précédente révision'; $labels['arialabelminical'] = 'Sélection de la date du calendrier'; $labels['arialabelcalendarview'] = 'Vue du calendrier'; -$labels['arialabelsearchform'] = 'Recherche d\'évènements depuis'; -$labels['arialabelquicksearchbox'] = 'Saisie de le recherche d\'évènements'; +$labels['arialabelsearchform'] = 'Recherche d\'événements depuis'; +$labels['arialabelquicksearchbox'] = 'Saisie de le recherche d\'événements'; $labels['arialabelcalsearchform'] = 'Recherche de calendriers'; $labels['calendaractions'] = 'Actions calendrier'; -$labels['arialabeleventattendees'] = 'Liste des participants à l\'évènement'; -$labels['arialabeleventresources'] = 'Liste des ressources de l\'évènement'; -$labels['arialabelresourcesearchform'] = 'Recherche des ressources'; +$labels['arialabeleventattendees'] = 'Liste des participants à l\'événement'; +$labels['arialabeleventresources'] = 'Liste des ressources de l\'événement'; +$labels['arialabelresourcesearchform'] = 'Formulaire de recherche des ressources'; $labels['arialabelresourceselection'] = 'Ressources disponibles'; ?> diff --git a/localization/nl_NL.inc b/localization/nl_NL.inc index 6940dcd..14bc442 100644 --- a/localization/nl_NL.inc +++ b/localization/nl_NL.inc @@ -6,30 +6,33 @@ * * For translation see https://www.transifex.com/projects/p/kolab/resource/calendar/ */ -$labels['default_view'] = 'Standaard agenda'; -$labels['time_format'] = 'Tijdsformaat'; -$labels['timeslots'] = 'Tijdsdelen per uur'; +$labels['default_view'] = 'Standaardweergave'; +$labels['time_format'] = 'Tijdnotatie'; +$labels['timeslots'] = 'Tijdvakken per uur'; $labels['first_day'] = 'Eerste weekdag'; $labels['first_hour'] = 'Eerste uur om weer te geven'; $labels['workinghours'] = 'Werkuren'; $labels['add_category'] = 'Categorie toevoegen'; $labels['remove_category'] = 'Categorie verwijderen'; -$labels['defaultcalendar'] = 'Maak nieuwe afspraken in'; -$labels['eventcoloring'] = 'Kleuren van afspraken'; -$labels['coloringmode0'] = 'Volgens kalender'; +$labels['defaultcalendar'] = 'Nieuwe activiteiten maken in'; +$labels['eventcoloring'] = 'Kleuren voor activiteiten'; +$labels['coloringmode0'] = 'Volgens agenda'; $labels['coloringmode1'] = 'Volgens categorie'; -$labels['coloringmode2'] = 'Kalender voor omtrek, categorie voor inhoud'; -$labels['coloringmode3'] = 'Categorie voor omtrek, kalender voor inhoud'; -$labels['aftertrash'] = 'Verplaats naar prullenbak'; -$labels['afterdelete'] = 'Verwijder bericht'; -$labels['afterflagdeleted'] = 'Markeer als verwijderd'; -$labels['aftermoveto'] = 'Verplaats naar...'; -$labels['calendar'] = 'Kalender'; -$labels['calendars'] = 'Kalenders'; +$labels['coloringmode2'] = 'Agenda voor overzicht, categorie voor inhoud'; +$labels['coloringmode3'] = 'Categorie voor overzicht, agenda voor inhoud'; +$labels['afternothing'] = 'Niets doen'; +$labels['aftertrash'] = 'Verplaatsen naar Prullenbak'; +$labels['afterdelete'] = 'Bericht verwijderen'; +$labels['afterflagdeleted'] = 'Markeren als verwijderd'; +$labels['aftermoveto'] = 'Verplaatsen naar...'; +$labels['itipoptions'] = 'Uitnodigingen voor activiteiten'; +$labels['afteraction'] = 'Nadat een uitnodiging of updatebericht is verwerkt'; +$labels['calendar'] = 'Agenda'; +$labels['calendars'] = 'Agenda\'s'; $labels['category'] = 'Categorie'; $labels['categories'] = 'Categorieën'; -$labels['createcalendar'] = 'Maak een nieuwe kalender'; -$labels['editcalendar'] = 'Wijzig kalender eigenschappen'; +$labels['createcalendar'] = 'Nieuwe agenda maken'; +$labels['editcalendar'] = 'Agenda-eigenschappen bewerken'; $labels['name'] = 'Naam'; $labels['color'] = 'Kleur'; $labels['day'] = 'Dag'; @@ -37,187 +40,229 @@ $labels['week'] = 'Week'; $labels['month'] = 'Maand'; $labels['agenda'] = 'Agenda'; $labels['new'] = 'Nieuw'; -$labels['new_event'] = 'Nieuwe afspraak'; -$labels['edit_event'] = 'Wijzig afspraak'; -$labels['edit'] = 'Wijzig'; -$labels['save'] = 'Bewaar'; -$labels['cancel'] = 'Terug'; -$labels['select'] = 'Selecteer'; +$labels['new_event'] = 'Nieuwe activiteit'; +$labels['edit_event'] = 'Activiteit bewerken'; +$labels['edit'] = 'Bewerken'; +$labels['save'] = 'Opslaan'; +$labels['removelist'] = 'Verwijderen uit lijst'; +$labels['cancel'] = 'Annuleren'; +$labels['select'] = 'Selecteren'; $labels['print'] = 'Afdrukken'; -$labels['printtitle'] = 'Kalenders afdrukken'; +$labels['printtitle'] = 'Agenda\'s afdrukken'; $labels['title'] = 'Samenvatting'; -$labels['description'] = 'Omschrijving'; +$labels['description'] = 'Beschrijving'; $labels['all-day'] = 'hele dag'; -$labels['export'] = 'Exporteer naar ICS'; -$labels['exporttitle'] = 'Als iCalender exporteren'; -$labels['exportrange'] = 'Afspraken uit'; -$labels['exportattachments'] = 'Exporteer bijlages'; -$labels['customdate'] = 'Aangepaste datumweergave'; +$labels['export'] = 'Exporteren'; +$labels['exporttitle'] = 'Exporteren naar iCalendar'; +$labels['exportrange'] = 'Activiteiten uit'; +$labels['exportattachments'] = 'Met bijlagen'; +$labels['customdate'] = 'Aangepaste datum'; $labels['location'] = 'Locatie'; $labels['url'] = 'URL'; $labels['date'] = 'Datum'; $labels['start'] = 'Begin'; -$labels['starttime'] = 'Start time'; -$labels['end'] = 'Eind'; +$labels['starttime'] = 'Begintijd'; +$labels['end'] = 'Einde'; $labels['endtime'] = 'Eindtijd'; -$labels['repeat'] = 'Herhaal'; -$labels['selectdate'] = 'Kies datum'; +$labels['repeat'] = 'Herhalen'; +$labels['selectdate'] = 'Datum kiezen'; $labels['freebusy'] = 'Toon mij als'; -$labels['free'] = 'Vrij'; +$labels['free'] = 'Beschikbaar'; $labels['busy'] = 'Bezet'; -$labels['outofoffice'] = 'Niet Aanwezig'; +$labels['outofoffice'] = 'Niet aanwezig'; $labels['tentative'] = 'Misschien'; +$labels['mystatus'] = 'Mijn status'; $labels['status'] = 'Status'; $labels['status-confirmed'] = 'Bevestigd'; -$labels['status-cancelled'] = 'Afgelast'; +$labels['status-cancelled'] = 'Geannuleerd'; $labels['priority'] = 'Prioriteit'; -$labels['sensitivity'] = 'Zichtbaarheid'; -$labels['public'] = 'publiek'; -$labels['private'] = 'prive'; +$labels['sensitivity'] = 'Privacy'; +$labels['public'] = 'openbaar'; +$labels['private'] = 'privé'; $labels['confidential'] = 'vertrouwelijk'; +$labels['links'] = 'Referentie'; $labels['alarms'] = 'Herinnering'; $labels['comment'] = 'Opmerking'; +$labels['created'] = 'Gemaakt op'; +$labels['changed'] = 'Laatst gewijzigd op'; $labels['unknown'] = 'Onbekend'; $labels['eventoptions'] = 'Opties'; $labels['generated'] = 'gegenereerd op'; $labels['eventhistory'] = 'Geschiedenis'; -$labels['printdescriptions'] = 'Print beschrijvingen'; -$labels['parentcalendar'] = 'Voeg toe in'; -$labels['searchearlierdates'] = '« Zoek voor eerdere afspraken'; -$labels['searchlaterdates'] = 'Zoek voor latere afspraken »'; -$labels['andnmore'] = '$nr meer...'; +$labels['removelink'] = 'E-mailreferentie verwijderen'; +$labels['printdescriptions'] = 'Beschrijvingen afdrukken'; +$labels['parentcalendar'] = 'Invoegen in'; +$labels['searchearlierdates'] = '« Zoek eerdere activiteiten'; +$labels['searchlaterdates'] = 'Zoek latere activiteiten »'; +$labels['andnmore'] = 'Nog $nr...'; $labels['togglerole'] = 'Klik om van rol te wisselen'; -$labels['createfrommail'] = 'Bewaar als afspraak'; -$labels['importevents'] = 'Afspraken importeren'; -$labels['importrange'] = 'Afspraken vanaf'; -$labels['onemonthback'] = '1 maand terug'; -$labels['nmonthsback'] = '$nr maanden terug'; -$labels['showurl'] = 'Toon kalender URL'; -$labels['showurldescription'] = 'Gebruik het volgende adres om uw kalendar te gebruiken (alleen lezen) in andere programma\'s. U kunt dit knippen en plakken in elk kalender programma dat het iCal formaat ondersteunt.'; -$labels['caldavurldescription'] = 'Kopieer dit adres in een CalDAV programma (bijv. Evolution of Mozilla Thunderbird) om deze specifieke kalender volledig te synchronizeren met je computer of mobiel apparaat.'; -$labels['findcalendars'] = 'Vind agenda\'s...'; -$labels['searchterms'] = 'Search terms'; +$labels['createfrommail'] = 'Opslaan als activiteit'; +$labels['importevents'] = 'Activiteiten importeren'; +$labels['importrange'] = 'Activiteiten van'; +$labels['onemonthback'] = 'afgelopen maand'; +$labels['nmonthsback'] = 'afgelopen $nr maanden'; +$labels['showurl'] = 'URL van agenda tonen'; +$labels['showurldescription'] = 'Gebruik het volgende adres om uw agenda in andere programma\'s te gebruiken (alleen-lezen). U kunt dit knippen en plakken in elk agendaprogramma dat de iCal-indeling ondersteunt.'; +$labels['caldavurldescription'] = 'Kopieer dit adres naar een CalDAV-client (bijv. Evolution of Mozilla Thunderbird) om deze specifieke agenda volledig te synchroniseren met uw computer of mobiele apparaat.'; +$labels['findcalendars'] = 'Agenda\'s zoeken...'; +$labels['searchterms'] = 'Zoektermen'; $labels['calsearchresults'] = 'Beschikbare agenda\'s'; -$labels['calendarsubscribe'] = 'Permanent weergeven'; -$labels['invitationsdeclined'] = 'Afgewezen uitnodigingen'; -$labels['listrange'] = 'Bereik om te tonen:'; -$labels['listsections'] = 'Verdeel in:'; +$labels['calendarsubscribe'] = 'Definitief weergeven'; +$labels['nocalendarsfound'] = 'Geen agenda\'s gevonden'; +$labels['nrcalendarsfound'] = '$nr agenda\'s gevonden'; +$labels['quickview'] = 'Alleen deze agenda bekijken'; +$labels['invitationspending'] = 'Uitnodigingen in behandeling'; +$labels['invitationsdeclined'] = 'Afgeslagen uitnodigingen'; +$labels['changepartstat'] = 'Status van deelnemer wijzigen'; +$labels['rsvpcomment'] = 'Tekst van uitnodiging'; +$labels['listrange'] = 'Weer te geven bereik:'; +$labels['listsections'] = 'Verdelen in:'; $labels['smartsections'] = 'Slimme secties'; $labels['until'] = 'tot'; $labels['today'] = 'Vandaag'; $labels['tomorrow'] = 'Morgen'; $labels['thisweek'] = 'Deze week'; $labels['nextweek'] = 'Volgende week'; +$labels['prevweek'] = 'Vorige week'; $labels['thismonth'] = 'Deze maand'; $labels['nextmonth'] = 'Volgende maand'; $labels['weekofyear'] = 'Week'; $labels['pastevents'] = 'Verleden'; $labels['futureevents'] = 'Toekomst'; -$labels['showalarms'] = 'Toon herinneringen'; -$labels['defaultalarmtype'] = 'Instelling standaard herinnering'; -$labels['defaultalarmoffset'] = 'Standaard herinneringstijd'; +$labels['showalarms'] = 'Herinneringen tonen'; +$labels['defaultalarmtype'] = 'Standaardinstelling herinnering'; +$labels['defaultalarmoffset'] = 'Standaardtijd herinnering'; $labels['attendee'] = 'Deelnemer'; $labels['role'] = 'Rol'; -$labels['availability'] = 'Beschikb.'; +$labels['availability'] = 'Beschikbaar'; $labels['confirmstate'] = 'Status'; $labels['addattendee'] = 'Deelnemer toevoegen'; -$labels['roleorganizer'] = 'Organisatie'; +$labels['roleorganizer'] = 'Organisator'; $labels['rolerequired'] = 'Verplicht'; $labels['roleoptional'] = 'Optioneel'; $labels['rolechair'] = 'Voorzitter'; $labels['rolenonparticipant'] = 'Afwezig'; -$labels['cutypeindividual'] = 'Individueel'; +$labels['cutypeindividual'] = 'Persoon'; $labels['cutypegroup'] = 'Groep'; -$labels['cutyperesource'] = 'Middel'; -$labels['cutyperoom'] = 'Kamer'; -$labels['availfree'] = 'Vrij'; +$labels['cutyperesource'] = 'Resource'; +$labels['cutyperoom'] = 'Ruimte'; +$labels['availfree'] = 'Beschikbaar'; $labels['availbusy'] = 'Bezet'; $labels['availunknown'] = 'Onbekend'; $labels['availtentative'] = 'Misschien'; -$labels['availoutofoffice'] = 'Niet Aanwezig'; -$labels['delegatedto'] = 'Gedelegeerd aan'; -$labels['delegatedfrom'] = 'Gedelegeerd door'; -$labels['scheduletime'] = 'Vind beschikbaarheid'; -$labels['sendinvitations'] = 'Verzend uitnodigingen'; -$labels['sendnotifications'] = 'Verzend notificaties'; -$labels['sendcancellation'] = 'Verzend annulering'; -$labels['onlyworkinghours'] = 'Vind beschikbaarheid binnen mijn werkuren'; -$labels['reqallattendees'] = 'Verplicht/alle deelnemers'; -$labels['prevslot'] = 'vorig voorstel'; -$labels['nextslot'] = 'volgend voorstel'; -$labels['noslotfound'] = 'Geen voorstel gevonden'; +$labels['availoutofoffice'] = 'Niet aanwezig'; +$labels['delegatedto'] = 'Gedelegeerd aan:'; +$labels['delegatedfrom'] = 'Gedelegeerd door:'; +$labels['scheduletime'] = 'Beschikbaarheid zoeken'; +$labels['sendinvitations'] = 'Uitnodigingen versturen'; +$labels['sendnotifications'] = 'Wijzigingen melden aan deelnemers'; +$labels['sendcancellation'] = 'Annulering van activiteiten melden aan deelnemers'; +$labels['onlyworkinghours'] = 'Beschikbaarheid binnen mijn werkuren zoeken'; +$labels['reqallattendees'] = 'Verplichte/alle deelnemers'; +$labels['prevslot'] = 'Vorig tijdstip'; +$labels['nextslot'] = 'Volgend tijdstip'; +$labels['suggestedslot'] = 'Voorgesteld tijdstip'; +$labels['noslotfound'] = 'Geen beschikbaar tijdstip gevonden'; $labels['invitationsubject'] = 'U bent uitgenodigd voor "$title"'; -$labels['invitationmailbody'] = "*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees\n\nBijgevoegd vindt u een iCalendar bestand met alle details omtrent de afspraak die u kunt importeren in uw kalender programma."; -$labels['invitationattendlinks'] = "In het geval dat uw email programma geen iTip verzoeken aankan, kunt u de volgende link gebruiken om deze uitnodiging te accepteren or af te wijzen :\n\$url"; -$labels['eventupdatesubject'] = '"$title" is gewijzigd'; -$labels['eventupdatesubjectempty'] = 'Een afspraak is gewijzigd'; -$labels['eventupdatemailbody'] = "*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees\n\nBijgevoegd vindt u een iCalendar bestand met de gewijzigde details omtrent de afspraak die u kunt importeren in uw kalender programma."; -$labels['eventcancelmailbody'] = "*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees\n\nDeze afspraak is geannuleerd door \$organizer.\n\nBijgevoegd vindt u een iCalendar bestand met de gewijzigde details omtrent de afspraak"; -$labels['itipobjectnotfound'] = 'De afspraak waaraan door dit bericht wordt gereferreerd is niet gevonden in uw kalender.'; -$labels['itipmailbodyaccepted'] = "\$sender heeft de uitnodiging geaccepteerd voor de volgende afspraak:\n\n*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees"; -$labels['itipmailbodytentative'] = "\$sender heeft onder voorbehoud de uitnodiging geaccepteerd voor de volgende afspraak:\n\n*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees"; -$labels['itipmailbodydeclined'] = "\$sender heeft de uitnodiging afgewezen voor de volgende afspraak:\n\n*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees"; -$labels['itipmailbodycancel'] = "\$sender heeft je deelname afgewezen voor de volgende afspraak:\n\n*\$title*\n\nWanneer: \$date"; -$labels['itipdeclineevent'] = 'Wil u de uitnodiging voor deze afspraak afwijzen?'; -$labels['declinedeleteconfirm'] = 'Wilt u tevens deze afgewezen uitnodiging verwijderen uit je kalender?'; -$labels['itipcomment'] = 'Invitation/notification comment'; -$labels['notanattendee'] = 'U staat niet op de lijst van genodigden voor deze afspraak'; -$labels['eventcancelled'] = 'Dit evenement is afgelast'; -$labels['saveincalendar'] = 'bewaar in'; -$labels['updatemycopy'] = 'Wijzig in mijn kalender'; -$labels['savetocalendar'] = 'Opslaan in kalender'; -$labels['resource'] = 'Hulpmiddel'; -$labels['addresource'] = 'Voeg hulpmiddel toe'; -$labels['findresources'] = 'Vind hulpmiddelen'; +$labels['invitationmailbody'] = "*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees\n\nAls bijlage vindt u een iCalendar-bestand met alle gegevens van de activiteit die u in uw agendaprogramma kunt importeren."; +$labels['invitationattendlinks'] = "In het geval dat uw e-mailprogramma geen iTip-verzoeken ondersteunt, kunt u de volgende koppeling gebruiken om deze uitnodiging te accepteren or af te slaan:\n\$url"; +$labels['eventupdatesubject'] = '"$title" is bijgewerkt'; +$labels['eventupdatesubjectempty'] = 'Een activiteit die u aangaat is bijgewerkt'; +$labels['eventupdatemailbody'] = "*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees\n\nAls bijlage vindt u een iCalendar-bestand met de bijgewerkte gegevens van de activiteit die u in uw agendaprogramma kunt importeren."; +$labels['eventcancelsubject'] = '"$title" is geannuleerd'; +$labels['eventcancelmailbody'] = "*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees\n\nDe activiteit is geannuleerd door \$organizer.\n\nAls bijlage vindt u een iCalendar-bestand met de bijgewerkte gegevens van de activiteit."; +$labels['itipobjectnotfound'] = 'De activiteit die in dit bericht wordt vermeld staat niet in uw agenda.'; +$labels['itipmailbodyaccepted'] = "\$sender heeft de uitnodiging voor de volgende activiteit geaccepteerd:\n\n*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees"; +$labels['itipmailbodytentative'] = "\$sender heeft de uitnodiging voor de volgende activiteit onder voorbehoud geaccepteerd:\n\n*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees"; +$labels['itipmailbodydeclined'] = "\$sender heeft de uitnodiging voor de volgende activiteit afgeslagen:\n\n*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees"; +$labels['itipmailbodycancel'] = "\$sender heeft uw deelname aan de volgende activiteit afgewezen:\n\n*\$title*\n\nWanneer: \$date"; +$labels['itipmailbodydelegated'] = "\$sender heeft de deelname aan de volgende activiteit gedelegeerd:\n\n*\$title*\n\nWanneer: \$date"; +$labels['itipmailbodydelegatedto'] = "\$sender heeft de deelname aan de volgende activiteit gedelegeerd aan u:\n\n*\$title*\n\nWanneer: \$date"; +$labels['itipdeclineevent'] = 'Wil u de uitnodiging voor deze activiteit afslaan?'; +$labels['declinedeleteconfirm'] = 'Wilt u deze afgewezen activiteit ook verwijderen uit uw agenda?'; +$labels['itipcomment'] = 'Opmerking bij uitnodiging/melding'; +$labels['itipcommenttitle'] = 'Deze opmerking wordt toegevoegd aan de uitnodiging/melding die naar de deelnemers wordt verstuurd'; +$labels['notanattendee'] = 'U staat niet op de lijst met deelnemers aan deze activiteit'; +$labels['eventcancelled'] = 'De activiteit is geannuleerd'; +$labels['saveincalendar'] = 'opslaan in'; +$labels['updatemycopy'] = 'Bijwerken in mijn agenda'; +$labels['savetocalendar'] = 'Opslaan in agenda'; +$labels['openpreview'] = 'Agenda controleren'; +$labels['noearlierevents'] = 'Geen eerdere activiteiten'; +$labels['nolaterevents'] = 'Geen latere activiteiten'; +$labels['resource'] = 'Resource'; +$labels['addresource'] = 'Resource boeken'; +$labels['findresources'] = 'Resources zoeken'; $labels['resourcedetails'] = 'Details'; $labels['resourceavailability'] = 'Beschikbaarheid'; $labels['resourceowner'] = 'Eigenaar'; -$labels['resourceadded'] = 'Hulpmiddel is toegevoegd aan uw afspraak'; +$labels['resourceadded'] = 'De resource is toegevoegd aan uw activiteit'; $labels['tabsummary'] = 'Samenvatting'; $labels['tabrecurrence'] = 'Herhaling'; $labels['tabattendees'] = 'Deelnemers'; -$labels['tabresources'] = 'Middelen'; -$labels['tabattachments'] = 'Toebehoren'; +$labels['tabresources'] = 'Resources'; +$labels['tabattachments'] = 'Bijlagen'; $labels['tabsharing'] = 'Delen'; -$labels['deleteobjectconfirm'] = 'Weet je zeker dat je deze afspraak wilt verwijderen?'; -$labels['deleteventconfirm'] = 'Weet u zeker dat u deze afspraak wilt verwijderen?'; -$labels['deletecalendarconfirm'] = 'Weet u zeker dat u deze kalender samen met alle afspraken wilt verwijderen?'; -$labels['deletecalendarconfirmrecursive'] = 'Weet u zeker dat je deze kalender samen met alle afspraken en er onder hangende kalenders wilt verwijderen?'; -$labels['savingdata'] = 'Data wordt opgeslagen...'; -$labels['errorsaving'] = 'Opslaan mislukt.'; -$labels['operationfailed'] = 'De gevraagde opdracht is mislukt.'; -$labels['invalideventdates'] = 'Ongeldige datums ingevoerd! Controleer aub uw invoer.'; -$labels['invalidcalendarproperties'] = 'Ongeldige kalender eigenschappen! Gebruik aub een geldige naam.'; -$labels['searchnoresults'] = 'Geen afspraken gevonden in de geselecteerde kalenders.'; -$labels['successremoval'] = 'De afspraak is succesvol verwijdert.'; -$labels['successrestore'] = 'De afspraak is succesvol herstelt'; -$labels['errornotifying'] = 'Uitnodigingen versturen naar de genodigden van de afspraak is mislukt'; -$labels['errorimportingevent'] = 'Afspraak importeren is mislukt'; -$labels['importwarningexists'] = 'Een kopie van deze afspraak bevindt zich al in uw kalender.'; -$labels['newerversionexists'] = 'Een nieuwere versie van deze afspraak bestaat! Bewerking afgebroken.'; -$labels['nowritecalendarfound'] = 'Geen kalender gevonden om de afspraak in op te slaan'; -$labels['importedsuccessfully'] = 'De afspraak is succesvol toegevoegd aan \'$calendar\''; -$labels['updatedsuccessfully'] = 'Het bijwerken van de gebeurtenis in \'$calendar\' is geslaagd'; -$labels['attendeupdateesuccess'] = 'Status van genodigde succesvol gewijzigd'; -$labels['itipsendsuccess'] = 'Uitnodiging verstuurd aan de genodigden.'; -$labels['itipresponseerror'] = 'Antwoord op deze uitnodiging versturen is mislukt'; -$labels['itipinvalidrequest'] = 'Deze uitnodiging is niet langer geldig'; -$labels['sentresponseto'] = 'Antwoord op deze uitnodiging was succesvol verstuurd aan $mailto'; -$labels['localchangeswarning'] = 'U bent bezig wijzigingen te maken die alleen zichtbaar zijn in u eigen kalender en die niet doorgestuurd zullen worden aan de organisator van de afspraak.'; -$labels['importsuccess'] = 'Succesvol $nr afspraken geïmporteerd'; -$labels['importnone'] = 'Geen afspraken gevonden om te importeren'; +$labels['deleteobjectconfirm'] = 'Weet u zeker dat u deze activiteit wilt verwijderen?'; +$labels['deleteventconfirm'] = 'Weet u zeker dat u deze activiteit wilt verwijderen?'; +$labels['deletecalendarconfirm'] = 'Weet u zeker dat u deze agenda en alle activiteiten erin wilt verwijderen?'; +$labels['deletecalendarconfirmrecursive'] = 'Weet u zeker dat u deze agenda en alle activiteiten erin alsook de subagenda\'s wilt verwijderen?'; +$labels['savingdata'] = 'Gegevens opslaan...'; +$labels['errorsaving'] = 'Opslaan van wijzigingen is mislukt.'; +$labels['operationfailed'] = 'De gevraagde bewerking is mislukt.'; +$labels['invalideventdates'] = 'Ongeldige datums ingevoerd! Controleer de invoer.'; +$labels['invalidcalendarproperties'] = 'Ongeldige agenda-eigenschappen! Stel een geldige naam in.'; +$labels['searchnoresults'] = 'Geen activiteiten gevonden in de geselecteerde agenda\'s.'; +$labels['successremoval'] = 'De activiteit is met succes verwijderd.'; +$labels['successrestore'] = 'De activiteit is met succes hersteld.'; +$labels['errornotifying'] = 'Versturen van meldingen naar deelnemers van activiteit is mislukt'; +$labels['errorimportingevent'] = 'Importeren van activiteit is mislukt'; +$labels['importwarningexists'] = 'Een exemplaar van deze activiteit staat al in uw agenda.'; +$labels['newerversionexists'] = 'Er bestaat al een nieuwere versie van deze activiteit! Bewerking afgebroken.'; +$labels['nowritecalendarfound'] = 'Geen agenda gevonden om de activiteit op te slaan'; +$labels['importedsuccessfully'] = 'De activiteit is met succes toegevoegd aan \'$calendar\''; +$labels['updatedsuccessfully'] = 'De activiteit is met succes bijgewerkt in \'$calendar\''; +$labels['attendeupdateesuccess'] = 'Status van deelnemer is met succes bijgewerkt'; +$labels['itipsendsuccess'] = 'Uitnodiging is naar deelnemers verstuurd.'; +$labels['itipresponseerror'] = 'Versturen van antwoord op uitnodiging voor activiteit is mislukt'; +$labels['itipinvalidrequest'] = 'Deze uitnodiging is niet meer geldig'; +$labels['sentresponseto'] = 'Antwoord op uitnodiging is met succes verstuurd naar $mailto'; +$labels['localchangeswarning'] = 'U gaat wijzigingen maken die alleen zichtbaar zullen zijn in uw eigen agenda en die niet naar de organisator van de activiteit zullen worden verstuurd.'; +$labels['importsuccess'] = '$nr activiteiten met succes geïmporteerd'; +$labels['importnone'] = 'Geen activiteiten gevonden om te importeren'; $labels['importerror'] = 'Er is een fout tijdens het importeren opgetreden'; -$labels['aclnorights'] = 'U heeft geen administratieve rechten op deze kalender.'; -$labels['changeeventconfirm'] = 'Wijzig afspraak'; -$labels['changerecurringeventwarning'] = 'Dit is een terugkerende afspraak. Wilt u alleen de huidige afspraak wijzigen, deze en alle toekomstige afspraken, alle afspraken of opslaan als een nieuwe afspraak?'; +$labels['aclnorights'] = 'U hebt geen administratorrechten voor deze agenda.'; +$labels['changeeventconfirm'] = 'Activiteit wijzigen'; +$labels['removeeventconfirm'] = 'Activiteit verwijderen'; +$labels['changerecurringeventwarning'] = 'Dit is een herhaalde activiteit. Wilt u alleen de huidige activiteit, deze en alle toekomstige herhalingen of alle herhalingen bewerken of wilt u deze opslaan als een nieuwe activiteit?'; +$labels['removerecurringeventwarning'] = 'Dit is een herhaalde activiteit. Wilt u alleen de huidige activiteit, deze en alle toekomstige herhalingen of alle herhalingen van deze activiteit verwijderen?'; +$labels['removerecurringallonly'] = 'Dit is een herhaalde activiteit. Als deelnemer kunt u alleen de volledige activiteit met alle herhalingen verwijderen.'; $labels['currentevent'] = 'Huidige'; $labels['futurevents'] = 'Toekomstige'; $labels['allevents'] = 'Alle'; -$labels['saveasnew'] = 'Bewaar als nieuw'; +$labels['saveasnew'] = 'Opslaan als nieuw'; $labels['birthdays'] = 'Verjaardagen'; $labels['birthdayscalendar'] = 'Verjaardagskalender'; -$labels['displaybirthdayscalendar'] = 'Toon verjaardagskalender'; +$labels['displaybirthdayscalendar'] = 'Verjaardagskalender weergeven'; $labels['birthdayscalendarsources'] = 'Uit deze adresboeken'; $labels['birthdayeventtitle'] = 'verjaardag van $name'; -$labels['birthdayage'] = 'Leeftijd $age'; +$labels['birthdayage'] = '$age jaar'; +$labels['objectchangelog'] = 'Geschiedenis wijzigen'; +$labels['objectdiff'] = 'Wijzigingen van $rev1 tot $rev2'; +$labels['objectnotfound'] = 'Laden van activiteitsgegevens is mislukt'; +$labels['objectchangelognotavailable'] = 'Voor deze activiteit kunt u de geschiedenis niet wijzigen'; +$labels['objectdiffnotavailable'] = 'Geen vergelijking mogelijk voor de geselecteerde revisies'; +$labels['revisionrestoreconfirm'] = 'Weet u zeker dat u revisie $rev van deze activiteit wilt herstellen? Met deze actie vervangt u de huidige activiteit door de oude versie.'; +$labels['objectrestoresuccess'] = 'Revisie $rev met succes hersteld'; +$labels['objectrestoreerror'] = 'Herstellen van oude revisie is mislukt'; +$labels['arialabelminical'] = 'Datum in agenda selecteren'; +$labels['arialabelcalendarview'] = 'Agendaweergave'; +$labels['arialabelsearchform'] = 'Zoekformulier voor activiteiten'; +$labels['arialabelquicksearchbox'] = 'Zoekopdracht voor activiteiten'; +$labels['arialabelcalsearchform'] = 'Zoekformulier voor agenda\'s'; +$labels['calendaractions'] = 'Acties voor agenda'; +$labels['arialabeleventattendees'] = 'Lijst met deelnemers van activiteit'; +$labels['arialabeleventresources'] = 'Lijst met resources voor activiteit'; +$labels['arialabelresourcesearchform'] = 'Zoekformulier voor resources'; +$labels['arialabelresourceselection'] = 'Beschikbare resources'; ?> diff --git a/localization/pt_BR.inc b/localization/pt_BR.inc index 7e8eb3b..166ea81 100644 --- a/localization/pt_BR.inc +++ b/localization/pt_BR.inc @@ -37,6 +37,7 @@ $labels['new_event'] = 'Novo evento'; $labels['edit_event'] = 'Editar evento'; $labels['edit'] = 'Editar'; $labels['save'] = 'Gravar'; +$labels['removelist'] = 'Remover da lista'; $labels['cancel'] = 'Cancelar'; $labels['select'] = 'Selecionar'; $labels['print'] = 'Imprimir'; @@ -53,6 +54,7 @@ $labels['location'] = 'Local'; $labels['url'] = 'URL'; $labels['date'] = 'Data'; $labels['start'] = 'Início'; +$labels['starttime'] = 'Hora de início'; $labels['end'] = 'Término'; $labels['repeat'] = 'Repetir'; $labels['selectdate'] = 'Escolha a data'; @@ -73,9 +75,12 @@ $labels['links'] = 'Reference'; $labels['alarms'] = 'Lembrete'; $labels['comment'] = 'Comentário'; $labels['created'] = 'Created'; +$labels['changed'] = 'Última modificação'; $labels['unknown'] = 'Desconhecido'; $labels['eventoptions'] = 'Opções'; $labels['generated'] = 'gerado em'; +$labels['eventhistory'] = 'História'; +$labels['removelink'] = 'Remover referência do email'; $labels['printdescriptions'] = 'Descrições de impressão'; $labels['parentcalendar'] = 'Inserir dentro'; $labels['searchearlierdates'] = '« Procurar por eventos anteriores'; @@ -107,6 +112,7 @@ $labels['nextmonth'] = 'Próximo mês'; $labels['weekofyear'] = 'Semana'; $labels['pastevents'] = 'Passado'; $labels['futureevents'] = 'Futuro'; +$labels['showalarms'] = 'Mostrar lembrentes'; $labels['defaultalarmtype'] = 'Configuração de lembrete padrão'; $labels['defaultalarmoffset'] = 'Horário padrão de lembrete'; $labels['attendee'] = 'Participante'; @@ -117,6 +123,7 @@ $labels['addattendee'] = 'Adicionar participante'; $labels['roleorganizer'] = 'Organizador'; $labels['rolerequired'] = 'Obrigatório'; $labels['roleoptional'] = 'Opcional'; +$labels['rolechair'] = 'Cadeira'; $labels['cutypegroup'] = 'Grupo'; $labels['cutyperesource'] = 'Recurso'; $labels['availfree'] = 'Disponível'; @@ -209,4 +216,5 @@ $labels['displaybirthdayscalendar'] = 'Display birthdays calendar'; $labels['birthdayscalendarsources'] = 'From these address books'; $labels['birthdayeventtitle'] = '$name\'s Birthday'; $labels['birthdayage'] = 'Age $age'; +$labels['objectchangelog'] = 'Mudar Histórico'; ?> diff --git a/localization/ru_RU.inc b/localization/ru_RU.inc index cce82d6..716af10 100644 --- a/localization/ru_RU.inc +++ b/localization/ru_RU.inc @@ -1,5 +1,4 @@ diff --git a/localization/sk_SK.inc b/localization/sk_SK.inc index 1cfdf4e..44e9f15 100644 --- a/localization/sk_SK.inc +++ b/localization/sk_SK.inc @@ -1,5 +1,4 @@ CalDAV client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.'; -$labels['findcalendars'] = 'Find calendars...'; -$labels['searchterms'] = 'Search terms'; -$labels['calsearchresults'] = 'Available Calendars'; -$labels['calendarsubscribe'] = 'List permanently'; -$labels['nocalendarsfound'] = 'No calendars found'; -$labels['nrcalendarsfound'] = '$nr calendars found'; -$labels['quickview'] = 'View only this calendar'; -$labels['invitationspending'] = 'Pending invitations'; -$labels['invitationsdeclined'] = 'Declined invitations'; -$labels['changepartstat'] = 'Change participant status'; -$labels['rsvpcomment'] = 'Invitation text'; - -// agenda view -$labels['listrange'] = 'Range to display:'; -$labels['listsections'] = 'Divide into:'; -$labels['smartsections'] = 'Smart sections'; -$labels['until'] = 'until'; -$labels['today'] = 'Today'; -$labels['tomorrow'] = 'Tomorrow'; -$labels['thisweek'] = 'This week'; -$labels['nextweek'] = 'Next week'; -$labels['prevweek'] = 'Previous week'; -$labels['thismonth'] = 'This month'; -$labels['nextmonth'] = 'Next month'; $labels['weekofyear'] = 'Týždeň'; -$labels['pastevents'] = 'Past'; -$labels['futureevents'] = 'Future'; - -// alarm/reminder settings -$labels['showalarms'] = 'Show reminders'; -$labels['defaultalarmtype'] = 'Default reminder setting'; -$labels['defaultalarmoffset'] = 'Default reminder time'; - -// attendees -$labels['attendee'] = 'Participant'; -$labels['role'] = 'Role'; -$labels['availability'] = 'Avail.'; $labels['confirmstate'] = 'Stav'; -$labels['addattendee'] = 'Add participant'; -$labels['roleorganizer'] = 'Organizer'; -$labels['rolerequired'] = 'Required'; -$labels['roleoptional'] = 'Optional'; -$labels['rolechair'] = 'Chair'; -$labels['rolenonparticipant'] = 'Absent'; -$labels['cutypeindividual'] = 'Individual'; -$labels['cutypegroup'] = 'Group'; -$labels['cutyperesource'] = 'Resource'; -$labels['cutyperoom'] = 'Room'; $labels['availfree'] = 'Voľný'; $labels['availbusy'] = 'Zaneprázdnený'; -$labels['availunknown'] = 'Unknown'; $labels['availtentative'] = 'Nezáväzne'; $labels['availoutofoffice'] = 'Mimo kancelárie'; -$labels['delegatedto'] = 'Delegated to: '; -$labels['delegatedfrom'] = 'Delegated from: '; -$labels['scheduletime'] = 'Find availability'; -$labels['sendinvitations'] = 'Send invitations'; -$labels['sendnotifications'] = 'Notify participants about modifications'; -$labels['sendcancellation'] = 'Notify participants about event cancellation'; -$labels['onlyworkinghours'] = 'Find availability within my working hours'; -$labels['reqallattendees'] = 'Required/all participants'; -$labels['prevslot'] = 'Previous Slot'; -$labels['nextslot'] = 'Next Slot'; -$labels['suggestedslot'] = 'Suggested Slot'; -$labels['noslotfound'] = 'Unable to find a free time slot'; -$labels['invitationsubject'] = 'You\'ve been invited to "$title"'; -$labels['invitationmailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\nPlease find attached an iCalendar file with all the event details which you can import to your calendar application."; -$labels['invitationattendlinks'] = "In case your email client doesn't support iTip requests you can use the following link to either accept or decline this invitation:\n\$url"; -$labels['eventupdatesubject'] = '"$title" has been updated'; -$labels['eventupdatesubjectempty'] = 'An event that concerns you has been updated'; -$labels['eventupdatemailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\nPlease find attached an iCalendar file with the updated event details which you can import to your calendar application."; -$labels['eventcancelsubject'] = '"$title" has been cancelled'; -$labels['eventcancelmailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\nThe event has been cancelled by \$organizer.\n\nPlease find attached an iCalendar file with the updated event details."; - -// invitation handling (overrides labels from libcalendaring) -$labels['itipobjectnotfound'] = 'The event referred by this message was not found in your calendar.'; - -$labels['itipmailbodyaccepted'] = "\$sender has accepted the invitation to the following event:\n\n*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees"; -$labels['itipmailbodytentative'] = "\$sender has tentatively accepted the invitation to the following event:\n\n*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees"; -$labels['itipmailbodydeclined'] = "\$sender has declined the invitation to the following event:\n\n*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees"; -$labels['itipmailbodycancel'] = "\$sender has rejected your participation in the following event:\n\n*\$title*\n\nWhen: \$date"; -$labels['itipmailbodydelegated'] = "\$sender has delegated the participation in the following event:\n\n*\$title*\n\nWhen: \$date"; -$labels['itipmailbodydelegatedto'] = "\$sender has delegated the participation in the following event to you:\n\n*\$title*\n\nWhen: \$date"; - -$labels['itipdeclineevent'] = 'Do you want to decline your invitation to this event?'; -$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?'; -$labels['itipcomment'] = 'Invitation/notification comment'; -$labels['itipcommenttitle'] = 'This comment will be attached to the invitation/notification message sent to participants'; - -$labels['notanattendee'] = 'You\'re not listed as an attendee of this event'; -$labels['eventcancelled'] = 'The event has been cancelled'; -$labels['saveincalendar'] = 'save in'; -$labels['updatemycopy'] = 'Update in my calendar'; -$labels['savetocalendar'] = 'Save to calendar'; -$labels['openpreview'] = 'Check Calendar'; -$labels['noearlierevents'] = 'No earlier events'; -$labels['nolaterevents'] = 'No later events'; - -// resources -$labels['resource'] = 'Resource'; -$labels['addresource'] = 'Book resource'; -$labels['findresources'] = 'Find resources'; -$labels['resourcedetails'] = 'Details'; -$labels['resourceavailability'] = 'Availability'; -$labels['resourceowner'] = 'Owner'; -$labels['resourceadded'] = 'The resource was added to your event'; - -// event dialog tabs $labels['tabsummary'] = 'Sumár'; -$labels['tabrecurrence'] = 'Recurrence'; -$labels['tabattendees'] = 'Participants'; -$labels['tabresources'] = 'Resources'; -$labels['tabattachments'] = 'Attachments'; -$labels['tabsharing'] = 'Sharing'; - -// messages -$labels['deleteobjectconfirm'] = 'Do you really want to delete this event?'; -$labels['deleteventconfirm'] = 'Do you really want to delete this event?'; -$labels['deletecalendarconfirm'] = 'Do you really want to delete this calendar with all its events?'; -$labels['deletecalendarconfirmrecursive'] = 'Do you really want to delete this calendar with all its events and sub-calendars?'; -$labels['savingdata'] = 'Saving data...'; -$labels['errorsaving'] = 'Failed to save changes.'; -$labels['operationfailed'] = 'The requested operation failed.'; -$labels['invalideventdates'] = 'Invalid dates entered! Please check your input.'; -$labels['invalidcalendarproperties'] = 'Invalid calendar properties! Please set a valid name.'; -$labels['searchnoresults'] = 'No events found in the selected calendars.'; -$labels['successremoval'] = 'The event has been deleted successfully.'; -$labels['successrestore'] = 'The event has been restored successfully.'; -$labels['errornotifying'] = 'Failed to send notifications to event participants'; -$labels['errorimportingevent'] = 'Failed to import the event'; -$labels['importwarningexists'] = 'A copy of this event already exists in your calendar.'; -$labels['newerversionexists'] = 'A newer version of this event already exists! Aborted.'; -$labels['nowritecalendarfound'] = 'No calendar found to save the event'; -$labels['importedsuccessfully'] = 'The event was successfully added to \'$calendar\''; -$labels['updatedsuccessfully'] = 'The event was successfully updated in \'$calendar\''; -$labels['attendeupdateesuccess'] = 'Successfully updated the participant\'s status'; -$labels['itipsendsuccess'] = 'Invitation sent to participants.'; -$labels['itipresponseerror'] = 'Failed to send the response to this event invitation'; -$labels['itipinvalidrequest'] = 'This invitation is no longer valid'; -$labels['sentresponseto'] = 'Successfully sent invitation response to $mailto'; -$labels['localchangeswarning'] = 'You are about to make changes that will only be reflected on your calendar and not be sent to the organizer of the event.'; -$labels['importsuccess'] = 'Successfully imported $nr events'; -$labels['importnone'] = 'No events found to be imported'; -$labels['importerror'] = 'An error occured while importing'; -$labels['aclnorights'] = 'You do not have administrator rights on this calendar.'; - -$labels['changeeventconfirm'] = 'Change event'; -$labels['removeeventconfirm'] = 'Delete event'; -$labels['changerecurringeventwarning'] = 'This is a recurring event. Would you like to edit the current event only, this and all future occurences, all occurences or save it as a new event?'; -$labels['removerecurringeventwarning'] = 'This is a recurring event. Would you like to delete the current event only, this and all future occurences or all occurences of this event?'; -$labels['removerecurringallonly'] = 'This is a recurring event. As a participant, you can only delete the entire event with all occurences.'; -$labels['currentevent'] = 'Current'; -$labels['futurevents'] = 'Future'; -$labels['allevents'] = 'All'; -$labels['saveasnew'] = 'Save as new'; - -// birthdays calendar -$labels['birthdays'] = 'Birthdays'; -$labels['birthdayscalendar'] = 'Birthdays Calendar'; -$labels['displaybirthdayscalendar'] = 'Display birthdays calendar'; -$labels['birthdayscalendarsources'] = 'From these address books'; -$labels['birthdayeventtitle'] = '$name\'s Birthday'; -$labels['birthdayage'] = 'Age $age'; - -// history dialog -$labels['objectchangelog'] = 'Change History'; -$labels['objectdiff'] = 'Changes from $rev1 to $rev2'; -$labels['objectnotfound'] = 'Failed to load event data'; -$labels['objectchangelognotavailable'] = 'Change history is not available for this event'; -$labels['objectdiffnotavailable'] = 'No comparison possible for the selected revisions'; -$labels['revisionrestoreconfirm'] = 'Do you really want to restore revision $rev of this event? This will replace the current event with the old version.'; -$labels['objectrestoresuccess'] = 'Revision $rev successfully restored'; -$labels['objectrestoreerror'] = 'Failed to restore the old revision'; - - -// (hidden) titles and labels for accessibility annotations -$labels['arialabelminical'] = 'Calendar date selection'; -$labels['arialabelcalendarview'] = 'Calendar view'; -$labels['arialabelsearchform'] = 'Event search form'; -$labels['arialabelquicksearchbox'] = 'Event search input'; -$labels['arialabelcalsearchform'] = 'Calendars search form'; -$labels['calendaractions'] = 'Calendar actions'; -$labels['arialabeleventattendees'] = 'Event participants list'; -$labels['arialabeleventresources'] = 'Event resources list'; -$labels['arialabelresourcesearchform'] = 'Resources search form'; -$labels['arialabelresourceselection'] = 'Available resources'; - ?> diff --git a/skins/classic/calendar.css b/skins/classic/calendar.css index 4a4e628..73be0ab 100644 --- a/skins/classic/calendar.css +++ b/skins/classic/calendar.css @@ -373,6 +373,7 @@ pre { right: 4px; } +#eventedit.uidialog, .calendarmain div.uidialog { display: none; } diff --git a/skins/classic/templates/calendar.html b/skins/classic/templates/calendar.html index 02f198c..8ed9c1b 100644 --- a/skins/classic/templates/calendar.html +++ b/skins/classic/templates/calendar.html @@ -123,6 +123,7 @@ diff --git a/skins/larry/calendar.css b/skins/larry/calendar.css index 2383f65..74da6c3 100644 --- a/skins/larry/calendar.css +++ b/skins/larry/calendar.css @@ -69,31 +69,18 @@ body.calendarmain #mainscreen { #datepicker .ui-datepicker-activerange a { color: #185d7a; background: #d9f1fb; - background: -moz-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d9f1fb), color-stop(100%,#c5e3ee)); - background: -o-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); - background: -ms-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); - background: linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d9f1fb', endColorstr='#c5e3ee', GradientType=0); } #datepicker .ui-datepicker-days-cell-over a.ui-state-default { color: #fff; border-color: #2fa0c0; background: rgba(73,180,210,0.6); - text-shadow: 0px 1px 1px #666; filter: none; } #datepicker .ui-datepicker-activerange a.ui-state-active { color: #fff; background: #00acd4; - background: -moz-linear-gradient(top, #00acd4 0%, #008fc7 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00acd4), color-stop(100%,#008fc7)); - background: -o-linear-gradient(top, #00acd4 0%, #008fc7 100%); - background: -ms-linear-gradient(top, #00acd4 0%, #008fc7 100%); - background: linear-gradient(top, #00acd4 0%, #008fc7 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00acd4', endColorstr='#008fc7', GradientType=0); } #datepicker td.ui-datepicker-week-col { @@ -253,17 +240,14 @@ pre { #calendars .treelist li span.handle { display: inline-block; position: absolute; - top: 8px; + top: 7px; right: 6px; padding: 0; - width: 10px; - height: 10px; - border-radius: 7px; + width: 11px; + height: 11px; + border-radius: 8px; font-size: 0.8em; - border: 1px solid rgba(0, 0, 0, 0.5); - -webkit-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); - -moz-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); - box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); + border: 1px solid rgba(0, 0, 0, 0.4); } #calendars .treelist div span.actions { @@ -281,15 +265,9 @@ pre { #calendars .treelist div:hover span.actions { top: 1px; right: 21px; - border: 1px solid #c6c6c6; + border: 1px solid #ababab; border-radius: 4px; - background: #f7f7f7; - background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6)); - background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); - background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); - background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0); + background: #f1f1f1; } #calendars .treelist li a.subscribed { @@ -431,13 +409,6 @@ pre { min-width: 1.3em; padding: 2px 4px; background: #005d76; - background: -moz-linear-gradient(top, #005d76 0%, #004558 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#005d76), color-stop(100%,#004558)); - background: -o-linear-gradient(top, #005d76 0%, #004558 100%); - background: -ms-linear-gradient(top, #005d76 0%, #004558 100%); - background: linear-gradient(to bottom, #005d76 0%, #004558 100%); - -webkit-box-shadow: inset 0 1px 1px 0 #002635; - box-shadow: inset 0 1px 1px 0 #002635; border-radius: 10px; color: #fff; text-align: center; @@ -454,7 +425,8 @@ pre { #calendars .searchresults .boxtitle { background: none; - padding: 2px 8px 2px 8px; + padding: 2px 8px; + border-radius: 0; } #calendars .searchresults .listing li { @@ -539,10 +511,15 @@ body.calendarmain #searchmenulink { width: 15px; } +#eventedit.uidialog, .calendarmain div.uidialog { display: none; } +#calendarform { + overflow: visible; +} + #user { position: absolute; top: 10px; @@ -625,7 +602,6 @@ a.miniColors-trigger { color: #333; font-weight: bold; padding: 4px 4px 3px 30px; - text-shadow: 0px 1px 1px #fff; text-decoration: none; white-space: nowrap; line-height: 20px; @@ -641,7 +617,7 @@ a.miniColors-trigger { border-top: 2px solid #fafafa; } -#edit-attachments-form .formbuttons { +#edit-attachments-form .buttons { margin: 0.5em 0; } @@ -682,7 +658,7 @@ a.miniColors-trigger { } .event-attendees span.attendee { - padding-right: 18px; + padding: 1px 18px 1px 0; margin-right: 0.5em; background: url(images/attendee-status.png) right 0 no-repeat; } @@ -733,11 +709,6 @@ a.miniColors-trigger { font-size: 11px; font-weight: bold; background: #d6eaf3; - background: -moz-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%); - background: -webkit-gradient(linear, left top, right top, color-stop(0,#e3f2f6), color-stop(8%,#d6eaf3), color-stop(100%,#d6eaf3)); - background: -o-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%); - background: -ms-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px ,#d6eaf3 100%); - background: linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%); border: 0; border-bottom: 1px solid #ccc; height: 18px; @@ -825,6 +796,9 @@ a.miniColors-trigger { .calendarmain .eventdialog div.event-line { margin-top: 0.1em; margin-bottom: 0.3em; + white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; } .calendarmain .eventdialog div.event-line a.iconbutton { @@ -836,6 +810,15 @@ a.miniColors-trigger { margin-left: 2em; } +#event-description .event-text, +#event-attendees .event-text { + padding-top: 0.4em; +} + +.eventdialog .spacer { + font-size: 4px; +} + .eventdialog .event-text-old, .eventdialog .event-text-new, .eventdialog .event-text-diff { @@ -990,16 +973,6 @@ div.form-section, padding-right: 0.5em; } -.calendarmain .eventdialog #event-url .event-text { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -#event-links .attachmentslist { - display: inline-block; -} - #event-links label, #edit-event-links label { float: left; @@ -1138,7 +1111,7 @@ td.topalign { #eventedit .edit-attendees-table th.invite, #eventedit .edit-attendees-table td.invite { - width: 44px; + width: 50px; padding: 2px; } @@ -1238,6 +1211,7 @@ td.topalign { height: 14px; border-radius: 4px; -moz-border-radius: 4px; + vertical-align: middle; } .availability img.availabilityicon.loading { @@ -1295,10 +1269,6 @@ td.topalign { white-space: nowrap; } -#edit-attendees-legend img.availabilityicon { - vertical-align: middle; -} - .edit-attendees-table tbody td.confirmstate { overflow: hidden; white-space: nowrap; @@ -1312,22 +1282,27 @@ td.topalign { } .edit-attendees-table td.confirmstate span.needs-action { + height: 14px; } .edit-attendees-table td.confirmstate span.accepted { background-position: 5px -20px; + height: 14px; } .edit-attendees-table td.confirmstate span.declined { background-position: 5px -40px; + height: 14px; } .edit-attendees-table td.confirmstate span.tentative { background-position: 5px -60px; + height: 14px; } .edit-attendees-table td.confirmstate span.delegated { background-position: 5px -180px; + height: 14px; } #attendees-freebusy-table { @@ -1564,12 +1539,7 @@ a.dropdown-link:after { border-top-color: #ddd; border-bottom-color: #bbb; border-radius: 0 0 4px 4px; - background: #ebebeb; - background: -moz-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb), color-stop(100%,#c6c6c6)); - background: -o-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); - background: -ms-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); - background: linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); + background: #eaeaea; } #agendaoptions label { @@ -1713,10 +1683,6 @@ a.dropdown-link:after { overflow: hidden; border: 0; border-radius: 4px; - box-shadow: 0 0 2px #999; - -o-box-shadow: 0 0 2px #999; - -webkit-box-shadow: 0 0 2px #999; - -moz-box-shadow: 0 0 2px #999; } .calendarmain .fc-content { @@ -1748,39 +1714,23 @@ a.dropdown-link:after { .calendarmain .fc-button.fc-state-default, .calendarmain .fc-button.fc-state-hover { background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-position: 0 0; } .calendarmain #calendar .fc-button, .calendarmain #calendar .fc-button.fc-state-default, .calendarmain #calendar .fc-button.fc-state-hover { - margin: 0 0 0 0; - height: 20px; - line-height: 20px; - color: #505050; - text-shadow: 0px 1px 1px #fff; - border: 1px solid #e6e6e6; - background: #d8d8d8; - background: -moz-linear-gradient(top, #d8d8d8 0%, #bababa 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d8d8d8), color-stop(100%,#bababa)); - background: -o-linear-gradient(top, #d8d8d8 0%, #bababa 100%); - background: -ms-linear-gradient(top, #d8d8d8 0%, #bababa 100%); - background: linear-gradient(top, #d8d8d8 0%, #bababa 100%); - box-shadow: 0 1px 1px 0 #999; - -o-box-shadow: 0 1px 1px 0 #999; - -webkit-box-shadow: 0 1px 1px 0 #999; - -moz-box-shadow: 0 1px 1px 0 #999; + margin: -2px 0 0 0; + height: 24px; + line-height: 24px; + color: #333; + border: 1px solid #ababab; + background: #f1f1f1; text-decoration: none; + text-shadow: none; } .calendarmain #calendar .fc-button.fc-state-disabled { - color: #999; - background: #d8d8d8; + color: #666; } .calendarmain .fc-button.fc-state-active, @@ -1788,12 +1738,8 @@ a.dropdown-link:after { .calendarmain #calendar .fc-button.fc-state-active, .calendarmain #calendar .fc-button.fc-state-down { color: #333; - background: #bababa; - background: -moz-linear-gradient(top, #bababa 0%, #d8d8d8 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bababa), color-stop(100%,#d8d8d8)); - background: -o-linear-gradient(top, #bababa 0%, #d8d8d8 100%); - background: -ms-linear-gradient(top, #bababa 0%, #d8d8d8 100%); - background: linear-gradient(top, #bababa 0%, #d8d8d8 100%); + background: #f1f1f1; + box-shadow: none; } .calendarmain #calendar .fc-header .fc-button { @@ -2050,6 +1996,15 @@ div.fc-event-location { background-color: rgba(233,198,14, 0.12); } +.fc-widget-header, +.fc-widget-content { + border-color: #bbd3da !important; +} + +.fc-widget-header .fc-agenda-divider-inner { + background: #cad2d9 !important; +} + .fc-widget-header { background-color: #d6eaf3; color: #004458; @@ -2094,15 +2049,15 @@ div.fc-event-location { } .calendarmain .fc-view-table tr.fc-event td { - border-color: #ddd; - padding: 4px 7px; + border-color: #bbd3da; + padding: 6px 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .calendarmain .fc-view-table tr.fc-event td.fc-event-handle { - padding: 5px 0 2px 7px; + padding: 6px 0 2px 7px; width: 12px; } @@ -2125,9 +2080,6 @@ div.fc-event-location { font-size: 10px; border-radius: 8px; border: 1px solid rgba(0, 0, 0, 0.4); - -webkit-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); - -moz-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); - box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); } .calendarmain .fc-view-table col.fc-event-location { diff --git a/skins/larry/images/calendars.png b/skins/larry/images/calendars.png index 5b5ca85b2b95110ae2193769b04e6c17a6248d8b..41421a1692d5bf21ea6847483aeb2b4522efa89b 100644 GIT binary patch literal 2350 zcmV+}3DNe6P)oy*a z6&bLNIg4yKVQhu4@bE!F2qPw1AJIgkR3!5ilS&*6#8A&^&LxMld)wRI+dHH8OTM)C z(fj+I?|kQczx!?T<{4&~VTKuIm|=z)X4rq#o?f|X0l)IqH1v6guE5Xa7o{y&{O*(zsAy^D@aWg~3_^jc4PL6Mi+)ym`=NB>HbD9D zNJwEXka(o_NPbq=vt5+YsGBX2LX0A#23|zf-?ctOXKx_U^ zo9GHM_E?!!qD}m!@Cl`M8!zI{v z`aFC$^|PyIc>h9OfS+5vCM~OU-QvQ=*2b#tUf0ljr>gOCEONEF@OgYaRlp0fN-LM; zIbBfN-UT%~eel}AKBylUhK9iraQ5zj(vGcwujBjh{hAUes%?7E()K#k_V0xjwC-^N z;_S!!K*#ur=rKNzujBjh{hAWkb7*2QUi%mfXTF@{>-au=zorEKx^d%yzi#{uH~x3Rf@&yU_e4}I=meM|tYDJ{B&!buqsqOQqRzzz1JgOCu+CGmeMWjWaN0lPd zqR*pB5oyuqQKg8~^m#N2cxGWq+AEI6XbE5S+6H^q-jStux-B z^30KJ8!YHG46CM9E>HBG;;Zj}fXjbQuO*;7^2I63{=TszVB0vs5{328tAYR042W%tADeCGOfB-yUR&6_tX=A;NA5_ciL+fY1)X{Lyh?GdR~L~46P zsuhvi9+7HAq^3uti6TgAU7xb`*quP3&_pMf^*2j#JMEEIph)KVf;N= z0ukhp3<-)rawHI70J)EviclgX5MY1;PmBZ^bx>wXcm?1m`OOP z(TX0D1dd07I>#x@dMOeKC7(c+oA^JS+i!B1A0XM~%e^3B!B7lNKPJq$~Ogw?y zjl7?7EAsmjtOu+R@y9Gk2;d$D7=L#n_fqGcjRS0EfP+K>&~?Es1%5vT)QLQUL?Vk2 z%c4jWD=5XdAn_y;K!^cF!bgLr6Hsx~_&ApW^b!&o6v-zf>OhDZH9qz-dcaIbi6jM) zfR!3~Iyu+Rcovl(w@6V0{H*Gc(}9#;h?1H|&AXe5iX4Fq>RbjzAjp>87zFs+)G?X= z+vb-fA5GvMCQou>yny(acLLGPOrChzrAKE!278typO}zdHc~O9Sdf6(N%DyaDKAhM z5OMA2QVH5mB9k6x{fC*g?`7n9Kvo@-P!~(&Kqs5|arOeAj4T(F?uO|k^cjilfD%iS zC(ao)#xTR?%v5#BGyvzQ7gcVq2t-IdP)?$(${`>RB9Bn+N1kY#EPT}Tbbjb`e%rLgTB(#rc z1qO3LWAR z2uaKzFmr2Xej{FkI39hTQgw8jPNbqEhMHpuD45!~1lUk|V@P;jlL!zIB4&F?A_4(+ z-Utb^W;sCgU#!gK6bKk~t02bG;}tGl_4|OtOR1piPRNAPJ14b({Mc)h)c=M31M}*? U;TxKeJ^%m!07*qoM6N<$g7~d$r~m)} literal 2582 zcmY*a2T&917Dl*$A|ekFK~RBUc_se|H$3s^=t$Mb z+%hD}(A8I6-w26BLf|&W?tT!cfu<$0q`YEvb+xIfX_7wos<L> zFT~0_u&b*JhVrUuY}Pijv=6}nU3B4ATRS^%o7=GYoRs2iL;Va$O7Ss;a8y4@0i5uGBfkFJFL&p{ZG2UERUK0hLZqDX)E%RWS2y z(JTnNyT1>x8UPG4MRFc|ry_f*D0$KVj$)hj(c-PYFjms?F62NH=?)Y8>8GTz?9;Lv$eH# zZEbDjGu0Lov9kU>`b}Y4TAHt~ubL&&#KXU^xy>(`2sC|S>j*eBKzYT*#TgnJCYDsK zeBX$Ujy5$l1r!uv#(n(*1Og#7HPtFKCMhWi8HJCHjm6<`K#qA3wx_4ZEiErNIN06Y zold8F5Q`EL5<){mfkvp59H;nnG#c%lQyQ34{E0pTOlRUBs%7g0jN?lzK%r0zi;G>O zlf%Qqjg5`bMV0z){vibwIXO9&mX<9;BbDtvot>RoSy_2`d7z@{KH$^;=mFEwVOE6a+uzt=(1s}#a&1Xg0@hepUHOcapo0nv3;Us#nu@-0`wD*giLi=D zLpL$pet9u_B60ytsFeJiT@6-=6 zf#xIJN!#uoFh?`1cAM8@N^Mh8t#*t>x@|bVHm1@ndCzlu?9n6Gj?S_@qEy+S_`t2R z?v@L4c`+D)vub88X4xijW6S-eOfRZB?IKrp6*` zOk_`-xgB@u9Pg;(Hds>BRU|1DLw(xv)@}6NsfKc;I{3MviZ!Vnp^QI9zCO3G;m|aj zI(2yW20sk^`Qs5esi*9wfnM>N`b|ZIB6JV|B8;Et9E*KsCbbmfPpwqYfQsiT<9n|2 zUcJMmhKpwXe>kjmN)Q5NRfpm+Q2wh3e#oMy5ah=>;>;tA=-37b2 z%4zY&=@oS$*7s!<`_}%}QXsbM?Vz`5k(;n7mK0m7hNjd=OW{WktkGgzKZTDzl&^d{ z=jlm}sYfyNrN`#IN-iNa-1?SY*N{^bMe(q?;tMPNr~(?ASEAHjwgHC@OcZ)<@+UL?ZDOj~ne&)n zoAI02{o4W3?cK+B<4r+-Y zeh^8xK1I5$S%0tG3yNhH{{H58p# z^xR!rlo!q8$lR0!U79{dkDYa_<&3rTk5_?)>9+q)yeu^r)G3FY8<2{evWp5+cl9g<}z?LSMop+vBM8#gHrT6I49fY{WJV?YgBRwZ6 zsP+WsWqQh|As&}j;iceziBu-tmz~DTN**5`vPA{`c$T#KSE%BH)r(-J zyhxxm^TFrzJ?6ci&&K;$#@8o*o{%9*`-k0XaVwwhBf2IE{3Wt|lrOUGyP{se&~b^i z`zo$g&gQ2up;4+|RuE6qdqFzQbF3(MZI#E2gcCO092O$RxY$LQ-)a_-rHM-wozy|T3+8j#9{!BFGQF<`&10LvheHKwSuM|vsY_HI( z63eM%oXzmzycW=Z_*BcxOe=U+{;6!&Fo(iGy)o4R@;HjkH93Ye^1jx>G6$=b_js>k zB28mzHIITS7NCGh3RhNp6n!Tk)9m&Wa9NkMtG#LO`IqO{T{D;a+lUd|46C#QPi^QG zcWyjeDe}C@`+6{XiODlo~4flc$POO~=KRlZ`=@0znShOHIYUQek GkbeWq3{k)U diff --git a/skins/larry/images/sendinvitation.png b/skins/larry/images/sendinvitation.png index dea30fab7f37dda580d9d8996ff3997ccc235154..5e639c489cdec5aff4423239150fe0c2bebca4cb 100644 GIT binary patch delta 187 zcmV;s07U=M0?YxB8Gi-<004=6%`gA}0Fy~XK~#7FW1ue>1vwLD6#(&nGVyyLcED$F z0hxv-fG{qD_XF{Hkj)UqgbjtN4}hv~z-cg=3(gZTbUv~V2^)+sJOGd3{UC#2e8L7} zYBqql3?UA6r2@!Oatxji#t3!;Eao8wBG{xDJRgfI*JDO1!ZdJ#2BRBF7$XeFXK(_t pp=1~yfXm>13Ui(T!_Wt#003_@#Ruc3S*!p6002ovPDHLkV1kjIL&^XE delta 321 zcmV-H0lxms0nq}G8Gi!+006$CJpup#0CG@FR7C&)0Be+>hp4few!YKf;*zkrcbuoh z)Y)y7plOnxxy;gusk522z0TX;*y85@|NqI@+FfXh z|CO@4ztPrdlAdXjp8x;hXyO7T|nNva&Cc;wN2q1YGu(KI_)unSEYMZ%~;**b=tB$xrhA zov^7c7U-TjYC3x(?Om&joeA2e!1bU&jqiKh+4OUlvdcfDD~SFh{c0k|f3m6pxHA){ Tk+%FD00000NkvXXu0mjfdZo5S diff --git a/skins/larry/images/toolbar.png b/skins/larry/images/toolbar.png index 5e79c66755a031e627b5ca222d52c2400b5e0f1c..5fe9f773fa7f47c17052a4fe095296d2e03179a9 100644 GIT binary patch delta 1092 zcmV-K1iSmr9M}kuBYyy3P)t-s0001HZEda9&!95YJ#)SfqiHflil2Om8AQ{a( zvRqW{XaHdLfp5g9Ya{=)a|SAM!ax}AB%(Q6nkG6~?~-fZ|1FyhvVo-qM|Qx2{{u6} z!G~dRVI0F;;HMz~0Dw9IQi#t4MQK@?Q>?6fTz_J!RO?1`SlZ})`5=x&0x5Hei9TZ~ z0;zKQ-TshB3)6duLg^2EE>S3b&>faZiSMlU+_T~naSPAfP)7g&{s-y^^dnq*$Mvm? zKiAbAk?i9j?9dt$7Sbi9seOkW>pHe?lN0(80D#wmIs*NO+}?3hT~l1^nvY1Ky-k<8 zmVefm2$z%~Eg^&)x4LdI*L6WZ0s!!GP)Fc=gss7l=|N3$#<f*_HaPz z`|3eSa@I}OPJ5{Tli%sAB+nksM*sjcKplbe5upYq?m>qwS1p+w;aaZ#w?s zDOboI`Vmq90H`C-k0|Zxlv9%0_O=j~Ep#@u?Iq@%xRWlPa;@y49|3?4({w_5`yqFJ z5zSJ^Q^m_1OLu-c>5R!{O_C(g&fAp+d(s2jq?QkL$yw`!(s$dKB~s_qAVSq4m_5=d zljnzE8sld(`x=Z9PMN&^5KP^9mZzj=)E?LqlKmIo0001hFTh_FuUf{(6a_#40000< KMNUMnLSTY?c|25K8y|*@eaV_7!`LEaNtThpXvj8W%f2te*qiKxEHkzd$`UfBkfpLEktkDx zFd|#=v-R4FrtB5({k`w`MFTnx+u4taTb zHa0c@J^-GdpC1qq;Oy-D5CkN_mo(b4ht_AW0k&&|!n zU@(S;hBt5C1nicUmM>qv064dA-@bF_4uA}lmywYH-~*FMNl8FS@$vC#|7&4kVQy}2 zK*r?cWNT|{zzu)`xB#(4A`!sHVzDJ9B`6dMh%G26u&}TI>d(&3ZftB^T3YJw?+0Q5 zK!E$|>M8&QxB={3U0n$T0^tAd-8%r#&d$!s$;rpZ$IQ%(L?Qtp^78UUMMaU3kyox< z@$>UjP*6}(QW_W-C@n1o1OZsMxVQic&}g)vprEX*EFdoqhm(|)^z!o3(9lp;Rt9Q= zLZJZVoSdAvxVZD@&jS(xOaWSe)E6#XNK8xwgoVLifC2zbEiElz2a!l5KocPA>+1_> zsHUdo;NY;lybKTrI8IJZQmIq~0->j;r>(91^XJcsiV8ZNJ~T80?9|H2N=HWrnM~&F zm~sQogfHI4$`)j4by`;eVHKBZMYoEJt3i$SB1REoMON=>h$DrF+KSkZ7g_si@{&D0 zrC-O%@D&&#wrUFVk_*z}OeII%917jkxVHbPO*8m0_M|Rc<=fns$(QwcXyuRe?!t7; z`3Lbqj_CCxH!l!~lW2xCw2PVjHjA?!M~n6{mbFg#q*{d2(A`|DCMK}z1-X9Qgy{B} zr^IV|bF5>tmVWINo}i|-Rv$`>lGyyEjq5uSUy%O#0r6zDnv(@EeEmWRgE^9Cf!Bm8 zQcNm(*p*P!-QEC4Z-)n4@NDCvwRL;LHrr0hMKoLCly~ZZSM2uV?TWvyE|no(m)j-w zl$RB$yhfQ{`p30i9KZW%qHbfLtgOdU^x=F7?jY?|=(>DEb!U?UPWhBv*zhj$bPGc_ zpDqs4GT#_*ZFW_cb4nghOipfd9qvBTx;Y!X3Nf8*{Do@=+X$O5Kci%m%G0-X=^c3T zEik(oS9#t6wDJktZsxi!=$w-Xlf62-b{DT(53EgR4OuPlM1UJsB)s4nTeFK_^1S|? z^%OKEt^PE;To5U{u-l^qw{1k%i?U(Aw|;UW7>Fs`CFkrPH~ z_xR~XS}d!Y_qnZhL3H7CtQR3?DO?p{4?;Kha$Jv);h+`=2Rf;{m~;N=c;qK5Mm0X} zi_Ntt`o%0zF^>P8?={H3m4~>m;FaYyz>D(qF5oW#zbFuoEnG{TPwG9 zNW5a-gJv4UzGoMT@@7-4oxJ&5y);qJnW>X%urcGJyxlcB3pRj34F?n$n@s^D-$GX9 zOr)VY4vGWu(OccBFdwy2LIx*wWs4`QLs(o&UPgb9QjUM&GSJ717bu8qxP|}t{R;a( zUtt2?nl2G%jFAFmyL&uO=RSLNL{D#~Ad%~uWyi@rmY%t?d{~}?u`IMqioe5J7~h#A zR{s`#&XyW|MXLqL)uaV!uD>_ z^a~5uNyU$cLeMN`d;9zK^)Dywn>Op~2cHsXi`Xd5%WsME&--YKXLv0RYyTW8X^(wA zh>@0(BZIS(zJu89MOi<5_;4IFA6v^QH`)I;;U(I8q{vzEtBTm;9;2Xvx@fBFt7O+& z%Bxq2zo<>=s-YPV^mG|@71p(4X2qQA0ynS*|Ky?W7dBT%DhIU>vlMmN+o@0>KvW4L`88-0x0y?#8rDv(wUFlAZ^1U!TyT zk;Pe2-&Q-(%h7`8h1$2KFND`J)t`q9qQ5n_x;zgK)Vahxh401#lbAQ2pMrIh4meihDPhj zlaA=zxNOvIOC`xo6%}`jRoXV>Fj92c06#e@Ku}+*1K<#2Aa-b~oC+87V*>z`)~^r4_&9%9E&MxZiAljQ+#CVy6%IpP8~tLC=Z0o<}UH8c}?Zo~gT zi#;*s@6oR11aA7TVv)8{k4>F+}OY>|0kyuk5jYS zDLC*@4AdnABP!EkDmKjiTv^OdFFZ(W!04&~(kyM~VIErGJVbHWQN`j~C}>CsUoj?K zOP9$-vG3&67{dYukS{ZYR|-jkZH>nXi}UkCeSem6Vna?*&iP1;pU@J2BCWwZj*fQO4RZ0TTwn((4RT zdfIP-6^9Hl zUvu_@LQh#7p>&JL(pn>#W1{1S>5H(!O5dmlg9D{u@i$0t?;F3TYWDV|V*8`+-$6}; zn;T)@dY~Ym{)$7)&b#`o@;iQNPd0eC5kxyn#|vrvg6NYXdMsNA$R;=QgY5RGXybr% zQBhob_Y&{=C4Hn!zH_v(Ux}TQ!!KQ(%6n5Z#!f=??TQ52tALOArhN-_y+cJ>Q*_AL&A^yUv7N(zGim$)++3?J9IhH>RJ#ty;l5Jfs2wTMTs4W*5-3%-WO7XMd zT*q((Wu2VuTMUmeSbDvQ(w5$$(?YSd5Z4-NLSxro zaiUS-D3$3ir1{+7MH9r3Bud=n_q&5jbl`H4=3d%uau_qv);O&ize&3W#bTDJin*Z z361S16NzBo?~#yj595*>+Nz^EIf)WC@+aR|kNPsN@VnRkB~Jx@U*6$Jo@DOii6Aw) zg_eT$FMV*qy!M@@k1?0LEBjDJE-Ao=iAiSJ-1uzLRQGtEJF8|@whaYcGih+nNv z^I}tf5->4ReT#qCRXvWm$A7(Fj(3N>{vtZHJalg;yN3bK^VJbm@zA@RxB8|1(?VBt z-!5*sI|sGdS3#r?k+{NntSsO|zLmN9^80&(9KnMf1jXv+%iI%+GI#vqT*xY%8J|l( zgxr4S8at$Z*QY3J=wkc|EjYS6s?^Wfjhv7WsM+Z%zdSIi+@LZZmv5sabk`e0OsZ#@ za;o{7yIIsK5~UrV2)@Yji>^qAmiV{64cOBmlngIGOSso}+B6fL3#`n!TUbj1%)*^t z?Kkbea%h;^VENGc!JqrruNzXM%#S@)_!u!XVNZzv%3ba;rNWfbWQcg`V`Mt^V~F+a z+`!84N*Grkta)VG_@YS*SUgpU)q?3OEYQ2$4)%l3LO|;dfvAb3&8!K79|nJ&bT8C0 z30-YH+{IZLsuUJ+nHmU~UQ-!geC1in!}XTUF# - +
@@ -52,7 +52,7 @@ - +

@@ -68,14 +68,14 @@ @@ -86,25 +86,24 @@
Location
From-To
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
 
+
+ + +
+
+ + +
+
+ + +
@@ -132,19 +131,12 @@
+
@@ -155,6 +147,13 @@
+ +
+
+