plugins/calendar plugins/libcalendaring
Thomas Brüderli
bruederli at kolabsys.com
Wed Mar 19 15:33:10 CET 2014
plugins/calendar/calendar.php | 280 +++--------
plugins/calendar/calendar_base.js | 70 --
plugins/calendar/lib/calendar_itip.php | 186 -------
plugins/calendar/lib/calendar_ui.php | 20
plugins/calendar/localization/bg_BG.inc | 132 +++++
plugins/calendar/localization/cs_CZ.inc | 68 +-
plugins/calendar/localization/de_CH.inc | 71 +-
plugins/calendar/localization/de_DE.inc | 74 +-
plugins/calendar/localization/en_US.inc | 25 -
plugins/calendar/localization/es_ES.inc | 240 +++++++++
plugins/calendar/localization/et_EE.inc | 247 +++++++++
plugins/calendar/localization/fr_FR.inc | 69 +-
plugins/calendar/localization/hu_HU.inc | 233 +++++++++
plugins/calendar/localization/it_IT.inc | 222 ++++++++
plugins/calendar/localization/ja_JP.inc | 68 +-
plugins/calendar/localization/nl_NL.inc | 123 ++++
plugins/calendar/localization/pl_PL.inc | 217 ++++++++
plugins/calendar/localization/pt_BR.inc | 67 +-
plugins/calendar/localization/ru_RU.inc | 65 +-
plugins/calendar/skins/classic/calendar.css | 5
plugins/calendar/skins/larry/calendar.css | 22
plugins/libcalendaring/lib/libcalendaring_itip.php | 524 +++++++++++++++++++++
plugins/libcalendaring/libcalendaring.js | 88 +++
plugins/libcalendaring/libcalendaring.php | 33 +
plugins/libcalendaring/localization/bg_BG.inc | 47 +
plugins/libcalendaring/localization/cs_CZ.inc | 29 +
plugins/libcalendaring/localization/de_CH.inc | 32 +
plugins/libcalendaring/localization/de_DE.inc | 32 +
plugins/libcalendaring/localization/en_US.inc | 38 +
plugins/libcalendaring/localization/fr_FR.inc | 30 +
plugins/libcalendaring/localization/it_IT.inc | 28 +
plugins/libcalendaring/localization/ja_JP.inc | 29 +
plugins/libcalendaring/localization/nl_NL.inc | 31 +
plugins/libcalendaring/localization/pl_PL.inc | 29 +
plugins/libcalendaring/localization/pt_BR.inc | 28 +
plugins/libcalendaring/localization/ru_RU.inc | 29 +
36 files changed, 2884 insertions(+), 647 deletions(-)
New commits:
commit 5d49b4850d923e79765de53d02ce4f4b436efcdc
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Mar 19 15:32:37 2014 +0100
Moved iTip functionality to libcalendaring for common use + improved inline UI for iTip messages and the options a user can select there
diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php
index 2f80a59..a4bf1ab 100644
--- a/plugins/calendar/calendar.php
+++ b/plugins/calendar/calendar.php
@@ -137,10 +137,12 @@ class calendar extends rcube_plugin
$this->register_action('freebusy-times', array($this, 'freebusy_times'));
$this->register_action('randomdata', array($this, 'generate_randomdata'));
$this->register_action('print', array($this,'print_view'));
- $this->register_action('mailimportevent', array($this, 'mail_import_event'));
+ $this->register_action('mailimportitip', array($this, 'mail_import_event'));
$this->register_action('mailtoevent', array($this, 'mail_message2event'));
$this->register_action('inlineui', array($this, 'get_inline_ui'));
$this->register_action('check-recent', array($this, 'check_recent'));
+ $this->register_action('itip-status', array($this, 'event_itip_status'));
+ $this->register_action('itip-remove', array($this, 'event_itip_remove'));
$this->add_hook('refresh', array($this, 'refresh'));
// remove undo information...
@@ -227,11 +229,7 @@ class calendar extends rcube_plugin
{
if (!$this->itip) {
require_once($this->home . '/lib/calendar_itip.php');
-
- $plugin = $this->rc->plugins->exec_hook('calendar_load_itip',
- array('identity' => null));
-
- $this->itip = new calendar_itip($this, $plugin['identity']);
+ $this->itip = new calendar_itip($this);
}
return $this->itip;
@@ -858,63 +856,6 @@ class calendar extends rcube_plugin
break;
- case "rsvp-status":
- $action = 'rsvp';
- $status = $event['fallback'];
- $latest = false;
- $html = html::div('rsvp-status', $status != 'CANCELLED' ? $this->gettext('acceptinvitation') : '');
- if (is_numeric($event['changed']))
- $event['changed'] = new DateTime('@'.$event['changed']);
- $this->load_driver();
- if ($existing = $this->driver->get_event($event, true, false, true)) {
- $latest = ($event['sequence'] && $existing['sequence'] == $event['sequence']) || (!$event['sequence'] && $existing['changed'] && $existing['changed'] >= $event['changed']);
- $emails = $this->get_user_emails();
- foreach ($existing['attendees'] as $i => $attendee) {
- if ($attendee['email'] && in_array(strtolower($attendee['email']), $emails)) {
- $status = $attendee['status'];
- break;
- }
- }
- }
- else {
- // get a list of writeable calendars
- $calendars = $this->driver->list_calendars(false, true);
- $calendar_select = new html_select(array('name' => 'calendar', 'id' => 'calendar-saveto', 'is_escaped' => true));
- $numcals = 0;
- foreach ($calendars as $calendar) {
- if (!$calendar['readonly']) {
- $calendar_select->add($calendar['name'], $calendar['id']);
- $numcals++;
- }
- }
- if ($numcals <= 1)
- $calendar_select = null;
- }
-
- if ($status == 'unknown' && !$this->rc->config->get('calendar_allow_itip_uninvited', true)) {
- $html = html::div('rsvp-status', $this->gettext('notanattendee'));
- $action = 'import';
- }
- else if (in_array($status, array('ACCEPTED','TENTATIVE','DECLINED'))) {
- $html = html::div('rsvp-status ' . strtolower($status), $this->gettext('youhave'.strtolower($status)));
- if ($existing['sequence'] > $event['sequence'] || (!$event['sequence'] && $existing['changed'] && $existing['changed'] > $event['changed'])) {
- $action = ''; // nothing to do here, outdated invitation
- }
- }
-
- $default_calendar = $calendar_select ? $this->get_default_calendar(true) : null;
- $this->rc->output->command('plugin.update_event_rsvp_status', array(
- 'uid' => $event['uid'],
- 'id' => asciiwords($event['uid'], true),
- 'saved' => $existing ? true : false,
- 'latest' => $latest,
- 'status' => $status,
- 'action' => $action,
- 'html' => $html,
- 'select' => $calendar_select ? html::span('calendar-select', $this->gettext('saveincalendar') . ' ' . $calendar_select->show($this->rc->config->get('calendar_default_calendar', $default_calendar['id']))) : '',
- ));
- return;
-
case "rsvp":
$ev = $this->driver->get_event($event);
$ev['attendees'] = $event['attendees'];
@@ -1749,6 +1690,8 @@ class calendar extends rcube_plugin
$sent = -100;
}
+ // TODO: send CANCEL message to remove attendees
+
return $sent;
}
@@ -1966,7 +1909,65 @@ class calendar extends rcube_plugin
/**** Event invitation plugin hooks ****/
-
+
+ /**
+ * Handler for calendar/itip-status requests
+ */
+ function event_itip_status()
+ {
+ $data = get_input_value('data', RCUBE_INPUT_POST, true);
+
+ // find local copy of the referenced event
+ $this->load_driver();
+ $existing = $this->driver->get_event($data, true, false, true);
+
+ $itip = $this->load_itip();
+ $response = $itip->get_itip_status($data, $existing);
+
+ // get a list of writeable calendars to save new events to
+ if (!$existing && $response['action'] == 'rsvp' || $response['action'] == 'import') {
+ $calendars = $this->driver->list_calendars(false, true);
+ $calendar_select = new html_select(array('name' => 'calendar', 'id' => 'itip-saveto', 'is_escaped' => true));
+ $numcals = 0;
+ foreach ($calendars as $calendar) {
+ if (!$calendar['readonly']) {
+ $calendar_select->add($calendar['name'], $calendar['id']);
+ $numcals++;
+ }
+ }
+ if ($numcals <= 1)
+ $calendar_select = null;
+ }
+
+ if ($calendar_select) {
+ $default_calendar = $this->get_default_calendar(true);
+ $response['select'] = html::span('folder-select', $this->gettext('saveincalendar') . ' ' .
+ $calendar_select->show($this->rc->config->get('calendar_default_calendar', $default_calendar['id'])));
+ }
+
+ $this->rc->output->command('plugin.update_itip_object_status', $response);
+ }
+
+ /**
+ * Handler for calendar/itip-remove requests
+ */
+ function event_itip_remove()
+ {
+ $success = false;
+
+ // search for event if only UID is given
+ if ($event = $this->driver->get_event(array('uid' => get_input_value('uid', RCUBE_INPUT_POST)), true)) {
+ $success = $this->driver->remove_event($event, true);
+ }
+
+ if ($success) {
+ $this->rc->output->show_message('calendar.successremoval', 'confirmation');
+ }
+ else {
+ $this->rc->output->show_message('calendar.errorsaving', 'error');
+ }
+ }
+
/**
* Handler for URLs that allow an invitee to respond on his invitation mail
*/
@@ -2079,13 +2080,13 @@ class calendar extends rcube_plugin
$this->get_ical();
}
+ $this->load_itip();
$html = '';
foreach ($this->ics_parts as $mime_id) {
$part = $this->message->mime_parts[$mime_id];
$charset = $part->ctype_parameters['charset'] ? $part->ctype_parameters['charset'] : RCMAIL_CHARSET;
$events = $this->ical->import($this->message->get_part_content($mime_id), $charset);
$title = $this->gettext('title');
- $date = rcube_utils::anytodatetime($this->message->headers->date);
// successfully parsed events?
if (empty($events))
@@ -2096,104 +2097,17 @@ class calendar extends rcube_plugin
if ($event['_type'] != 'event') // skip non-event objects (#2928)
continue;
- // define buttons according to method
- if ($this->ical->method == 'REPLY') {
- $title = $this->gettext('itipreply');
- $buttons = html::tag('input', array(
- 'type' => 'button',
- 'class' => 'button',
- 'onclick' => "rcube_calendar.add_event_from_mail('" . JQ($mime_id.':'.$idx) . "')",
- 'value' => $this->gettext('updateattendeestatus'),
- ));
- }
- else if ($this->ical->method == 'REQUEST') {
- $emails = $this->get_user_emails();
- $title = $event['sequence'] > 0 ? $this->gettext('itipupdate') : $this->gettext('itipinvitation');
-
- // add (hidden) buttons and activate them from asyncronous request
- foreach (array('accepted','tentative','declined') as $method) {
- $rsvp_buttons .= html::tag('input', array(
- 'type' => 'button',
- 'class' => "button $method",
- 'onclick' => "rcube_calendar.add_event_from_mail('" . JQ($mime_id.':'.$idx) . "', '$method')",
- 'value' => $this->gettext('itip' . $method),
- ));
- }
- $import_button = html::tag('input', array(
- 'type' => 'button',
- 'class' => 'button',
- 'onclick' => "rcube_calendar.add_event_from_mail('" . JQ($mime_id.':'.$idx) . "')",
- 'value' => $this->gettext('importtocalendar'),
- ));
-
- // check my status
- $status = 'unknown';
- foreach ($event['attendees'] as $attendee) {
- if ($attendee['email'] && in_array(strtolower($attendee['email']), $emails)) {
- $status = strtoupper($attendee['status']);
- break;
- }
- }
-
- $dom_id = asciiwords($event['uid'], true);
- $buttons = html::div(array('id' => 'rsvp-'.$dom_id, 'style' => 'display:none'), $rsvp_buttons);
- $buttons .= html::div(array('id' => 'import-'.$dom_id, 'style' => 'display:none'), $import_button);
- $buttons_pre = html::div(array('id' => 'loading-'.$dom_id, 'class' => 'rsvp-status loading'), $this->gettext('loading'));
- $changed = is_object($event['changed']) ? $event['changed'] : $date;
-
- $script = json_serialize(array(
- 'uid' => $event['uid'],
- 'changed' => $changed ? $changed->format('U') : 0,
- 'sequence' => intval($event['sequence']),
- 'fallback' => $status,
- ));
+ // get prepared inline UI for this event object
+ $html .= html::div('calendar-invitebox',
+ $this->itip->mail_itip_inline_ui(
+ $event,
+ $this->ical->method,
+ $mime_id.':'.$idx,
+ 'calendar',
+ rcube_utils::anytodatetime($this->message->headers->date)
+ )
+ );
- $this->rc->output->add_script("rcube_calendar.fetch_event_rsvp_status($script)", 'docready');
- }
- else if ($this->ical->method == 'CANCEL') {
- $title = $this->gettext('itipcancellation');
-
- // create buttons to be activated from async request checking existence of this event in local calendars
- $button_import = html::tag('input', array(
- 'type' => 'button',
- 'class' => 'button',
- 'onclick' => "rcube_calendar.add_event_from_mail('" . JQ($mime_id.':'.$idx) . "')",
- 'value' => $this->gettext('importtocalendar'),
- ));
- $button_remove = html::tag('input', array(
- 'type' => 'button',
- 'class' => 'button',
- 'onclick' => "rcube_calendar.remove_event_from_mail('" . JQ($event['uid']) . "', '" . JQ($event['title']) . "')",
- 'value' => $this->gettext('removefromcalendar'),
- ));
-
- $dom_id = asciiwords($event['uid'], true);
- $buttons = html::div(array('id' => 'rsvp-'.$dom_id, 'style' => 'display:none'), $button_remove);
- $buttons .= html::div(array('id' => 'import-'.$dom_id, 'style' => 'display:none'), $button_import);
- $buttons_pre = html::div(array('id' => 'loading-'.$dom_id, 'class' => 'rsvp-status loading'), $this->gettext('loading'));
- $changed = is_object($event['changed']) ? $event['changed'] : $date;
-
- $script = json_serialize(array(
- 'uid' => $event['uid'],
- 'changed' => $changed ? $changed->format('U') : 0,
- 'sequence' => intval($event['sequence']),
- 'fallback' => 'CANCELLED',
- ));
-
- $this->rc->output->add_script("rcube_calendar.fetch_event_rsvp_status($script)", 'docready');
- }
- else {
- $buttons = html::tag('input', array(
- 'type' => 'button',
- 'class' => 'button',
- 'onclick' => "rcube_calendar.add_event_from_mail('" . JQ($mime_id.':'.$idx) . "')",
- 'value' => $this->gettext('importtocalendar'),
- ));
- }
-
- // show event details with buttons
- $html .= html::div('calendar-invitebox', $this->ui->event_details_table($event, $title) . $buttons_pre . html::div('rsvp-buttons', $buttons));
-
// limit listing
if ($idx >= 3)
break;
@@ -2243,10 +2157,19 @@ class calendar extends rcube_plugin
// successfully parsed events?
if (!empty($events) && ($event = $events[$index])) {
// find writeable calendar to store event
- $cal_id = !empty($_REQUEST['_calendar']) ? get_input_value('_calendar', RCUBE_INPUT_POST) : null;
+ $cal_id = !empty($_REQUEST['_folder']) ? get_input_value('_folder', RCUBE_INPUT_POST) : null;
$calendars = $this->driver->list_calendars(false, true);
$calendar = $calendars[$cal_id] ?: $this->get_default_calendar(true);
+ $metadata = array(
+ 'uid' => $event['uid'],
+ 'changed' => is_object($event['changed']) ? $event['changed']->format('U') : 0,
+ 'sequence' => intval($event['sequence']),
+ 'fallback' => strtoupper($status),
+ 'method' => $this->ical->method,
+ 'task' => 'calendar',
+ );
+
// update my attendee status according to submitted method
if (!empty($status)) {
$organizer = null;
@@ -2257,6 +2180,8 @@ class calendar extends rcube_plugin
}
else if ($attendee['email'] && in_array(strtolower($attendee['email']), $emails)) {
$event['attendees'][$i]['status'] = strtoupper($status);
+ $metadata['attendee'] = $attendee['email'];
+ $metadata['rsvp'] = $attendee['rsvp'] || $attendee['role'] != 'NON-PARTICIPANT';
$reply_sender = $attendee['email'];
}
}
@@ -2270,6 +2195,7 @@ class calendar extends rcube_plugin
'role' => 'OPT-PARTICIPANT',
'status' => strtoupper($status),
);
+ $metadata['attendee'] = $sender_identity['email'];
}
}
@@ -2298,6 +2224,9 @@ class calendar extends rcube_plugin
foreach ($event['attendees'] as $attendee) {
if ($sender && ($attendee['email'] == $sender || $attendee['email'] == $sender_utf)) {
$event_attendee = $attendee;
+ $metadata['fallback'] = $attendee['status'];
+ $metadata['attendee'] = $attendee['email'];
+ $metadata['rsvp'] = $attendee['rsvp'] || $attendee['role'] != 'NON-PARTICIPANT';
break;
}
}
@@ -2325,7 +2254,7 @@ class calendar extends rcube_plugin
else if ($event['sequence'] >= $existing['sequence'] || $event['changed'] >= $existing['changed']) {
$event['id'] = $existing['id'];
$event['calendar'] = $existing['calendar'];
- if ($status == 'declined') // show me as free when declined (#1670)
+ if ($status == 'declined' || $event['status'] == 'CANCELLED') // show me as free when declined (#1670)
$event['free_busy'] = 'free';
$success = $this->driver->edit_event($event);
}
@@ -2353,12 +2282,9 @@ class calendar extends rcube_plugin
if ($success) {
$message = $this->ical->method == 'REPLY' ? 'attendeupdateesuccess' : ($deleted ? 'successremoval' : 'importedsuccessfully');
$this->rc->output->command('display_message', $this->gettext(array('name' => $message, 'vars' => array('calendar' => $calendar['name']))), 'confirmation');
- $this->rc->output->command('plugin.fetch_event_rsvp_status', array(
- 'uid' => $event['uid'],
- 'changed' => is_object($event['changed']) ? $event['changed']->format('U') : 0,
- 'sequence' => intval($event['sequence']),
- 'fallback' => strtoupper($status),
- ));
+
+ $metadata['rsvp'] = intval($metadata['rsvp']);
+ $this->rc->output->command('plugin.fetch_itip_object_status', $metadata);
$error_msg = null;
}
else if ($error_msg)
@@ -2462,19 +2388,7 @@ class calendar extends rcube_plugin
*/
private function get_user_emails()
{
- $emails = array();
- $plugin = $this->rc->plugins->exec_hook('calendar_user_emails', array('emails' => $emails));
- $emails = array_map('strtolower', $plugin['emails']);
-
- if ($plugin['abort']) {
- return $emails;
- }
-
- $emails[] = $this->rc->user->get_username();
- foreach ($this->rc->user->list_identities() as $identity)
- $emails[] = strtolower($identity['email']);
-
- return array_unique($emails);
+ return $this->lib->get_user_emails();
}
diff --git a/plugins/calendar/calendar_base.js b/plugins/calendar/calendar_base.js
index 33fe9e4..adcbdb4 100644
--- a/plugins/calendar/calendar_base.js
+++ b/plugins/calendar/calendar_base.js
@@ -77,82 +77,12 @@ function rcube_calendar(settings)
};
}
-// static methods
-rcube_calendar.add_event_from_mail = function(mime_id, status)
-{
- // ask user to delete the declined event from the local calendar (#1670)
- var del = false;
- if (rcmail.env.rsvp_saved && status == 'declined') {
- del = confirm(rcmail.gettext('calendar.declinedeleteconfirm'));
- }
-
- var lock = rcmail.set_busy(true, 'calendar.savingdata');
- rcmail.http_post('calendar/mailimportevent', {
- '_uid': rcmail.env.uid,
- '_mbox': rcmail.env.mailbox,
- '_part': mime_id,
- '_calendar': $('#calendar-saveto').val(),
- '_status': status,
- '_del': del?1:0
- }, lock);
-
- return false;
-};
-
-rcube_calendar.remove_event_from_mail = function(uid, title)
-{
- if (confirm(rcmail.gettext('calendar.deleteventconfirm'))) {
- var lock = rcmail.set_busy(true, 'calendar.savingdata');
- rcmail.http_post('calendar/event', {
- e:{ uid:uid },
- action: 'remove'
- }, lock);
- }
-};
-
-rcube_calendar.fetch_event_rsvp_status = function(event)
-{
-/*
- var id = event.uid.replace(rcmail.identifier_expr, '');
- $('#import-'+id+', #rsvp-'+id+', div.rsvp-status').hide();
- $('#loading-'+id).show();
-*/
- rcmail.http_post('calendar/event', {
- e:event,
- action:'rsvp-status'
- });
-};
-
/* calendar plugin initialization (for non-calendar tasks) */
window.rcmail && rcmail.addEventListener('init', function(evt) {
if (rcmail.task != 'calendar') {
var cal = new rcube_calendar($.extend(rcmail.env.calendar_settings, rcmail.env.libcal_settings));
- rcmail.addEventListener('plugin.update_event_rsvp_status', function(p){
- rcmail.env.rsvp_saved = p.saved;
-
- if (p.html) {
- // append/replace rsvp status display
- $('#loading-'+p.id).next('.rsvp-status').remove();
- $('#loading-'+p.id).hide().after(p.html);
- }
- else {
- $('#loading-'+p.id).hide();
- }
-
- // enable/disable rsvp buttons
- $('.rsvp-buttons input.button').prop('disabled', false)
- .filter('.'+String(p.status).toLowerCase()).prop('disabled', p.latest);
-
- // show rsvp/import buttons with or without calendar selector
- if (!p.select)
- $('#rsvp-'+p.id+' .calendar-select').remove();
- $('#'+p.action+'-'+p.id).show().append(p.select);
- });
-
- rcmail.addEventListener('plugin.fetch_event_rsvp_status', rcube_calendar.fetch_event_rsvp_status);
-
// 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() });
diff --git a/plugins/calendar/lib/calendar_itip.php b/plugins/calendar/lib/calendar_itip.php
index 9011073..e128442 100644
--- a/plugins/calendar/lib/calendar_itip.php
+++ b/plugins/calendar/lib/calendar_itip.php
@@ -1,5 +1,7 @@
<?php
+require_once realpath(__DIR__ . '/../../libcalendaring/lib/libcalendaring_itip.php');
+
/**
* iTIP functions for the Calendar plugin
*
@@ -24,189 +26,17 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-class calendar_itip
+class calendar_itip extends libcalendaring_itip
{
- private $rc;
- private $cal;
- private $sender;
- private $itip_send = false;
-
- function __construct($cal, $identity = null)
- {
- $this->cal = $cal;
- $this->rc = $cal->rc;
- $this->sender = $identity ? $identity : $this->rc->user->get_identity();
-
- $this->cal->add_hook('message_before_send', array($this, 'before_send_hook'));
- $this->cal->add_hook('smtp_connect', array($this, 'smtp_connect_hook'));
- }
-
- function set_sender_email($email)
- {
- if (!empty($email))
- $this->sender['email'] = $email;
- }
-
/**
- * Send an iTip mail message
- *
- * @param array Event object to send
- * @param string iTip method (REQUEST|REPLY|CANCEL)
- * @param array Hash array with recipient data (name, email)
- * @param string Mail subject
- * @param string Mail body text label
- * @param object Mail_mime object with message data
- * @return boolean True on success, false on failure
+ * Constructor to set text domain to calendar
*/
- public function send_itip_message($event, $method, $recipient, $subject, $bodytext, $message = null)
+ function __construct($plugin, $domain = 'calendar')
{
- if (!$this->sender['name'])
- $this->sender['name'] = $this->sender['email'];
-
- if (!$message)
- $message = $this->compose_itip_message($event, $method);
-
- $mailto = rcube_idn_to_ascii($recipient['email']);
-
- $headers = $message->headers();
- $headers['To'] = format_email_recipient($mailto, $recipient['name']);
- $headers['Subject'] = $this->cal->gettext(array(
- 'name' => $subject,
- 'vars' => array('title' => $event['title'], 'name' => $this->sender['name'])
- ));
-
- // compose a list of all event attendees
- $attendees_list = array();
- foreach ((array)$event['attendees'] as $attendee) {
- $attendees_list[] = ($attendee['name'] && $attendee['email']) ?
- $attendee['name'] . ' <' . $attendee['email'] . '>' :
- ($attendee['name'] ? $attendee['name'] : $attendee['email']);
- }
-
- $mailbody = $this->cal->gettext(array(
- 'name' => $bodytext,
- 'vars' => array(
- 'title' => $event['title'],
- 'date' => $this->cal->lib->event_date_text($event, true),
- 'attendees' => join(', ', $attendees_list),
- 'sender' => $this->sender['name'],
- 'organizer' => $this->sender['name'],
- )
- ));
-
- // append links for direct invitation replies
- if ($method == 'REQUEST' && ($token = $this->store_invitation($event, $recipient['email']))) {
- $mailbody .= "\n\n" . $this->cal->gettext(array(
- 'name' => 'invitationattendlinks',
- 'vars' => array('url' => $this->cal->get_url(array('action' => 'attend', 't' => $token))),
- ));
- }
- else if ($method == 'CANCEL') {
- $this->cancel_itip_invitation($event);
- }
-
- $message->headers($headers, true);
- $message->setTXTBody(rcube_mime::format_flowed($mailbody, 79));
-
- // finally send the message
- $this->itip_send = true;
- $sent = $this->rc->deliver_message($message, $headers['X-Sender'], $mailto, $smtp_error);
- $this->itip_send = false;
-
- return $sent;
- }
-
- /**
- * Plugin hook triggered by rcube::deliver_message() before delivering a message.
- * Here we can set the 'smtp_server' config option to '' in order to use
- * PHP's mail() function for unauthenticated email sending.
- */
- public function before_send_hook($p)
- {
- if ($this->itip_send && !$this->rc->user->ID && $this->rc->config->get('calendar_itip_smtp_server', null) === '') {
- $this->rc->config->set('smtp_server', '');
- }
-
- return $p;
+ parent::__construct($plugin, $domain);
}
/**
- * Plugin hook to alter SMTP authentication.
- * This is used if iTip messages are to be sent from an unauthenticated session
- */
- public function smtp_connect_hook($p)
- {
- // replace smtp auth settings if we're not in an authenticated session
- if ($this->itip_send && !$this->rc->user->ID) {
- foreach (array('smtp_server', 'smtp_user', 'smtp_pass') as $prop) {
- $p[$prop] = $this->rc->config->get("calendar_itip_$prop", $p[$prop]);
- }
- }
-
- return $p;
- }
-
- /**
- * Helper function to build a Mail_mime object to send an iTip message
- *
- * @param array Event object to send
- * @param string iTip method (REQUEST|REPLY|CANCEL)
- * @return object Mail_mime object with message data
- */
- public function compose_itip_message($event, $method)
- {
- $from = rcube_idn_to_ascii($this->sender['email']);
- $from_utf = rcube_idn_to_utf8($from);
- $sender = format_email_recipient($from, $this->sender['name']);
-
- // truncate list attendees down to the recipient of the iTip Reply.
- // constraints for a METHOD:REPLY according to RFC 5546
- if ($method == 'REPLY') {
- $replying_attendee = null; $reply_attendees = array();
- foreach ($event['attendees'] as $attendee) {
- if ($attendee['role'] == 'ORGANIZER') {
- $reply_attendees[] = $attendee;
- }
- else if (strcasecmp($attedee['email'], $from) == 0 || strcasecmp($attendee['email'], $from_utf) == 0) {
- $replying_attendee = $attendee;
- }
- }
- if ($replying_attendee) {
- $reply_attendees[] = $replying_attendee;
- $event['attendees'] = $reply_attendees;
- }
- }
-
- // compose multipart message using PEAR:Mail_Mime
- $message = new Mail_mime("\r\n");
- $message->setParam('text_encoding', 'quoted-printable');
- $message->setParam('head_encoding', 'quoted-printable');
- $message->setParam('head_charset', RCMAIL_CHARSET);
- $message->setParam('text_charset', RCMAIL_CHARSET . ";\r\n format=flowed");
- $message->setContentType('multipart/alternative');
-
- // compose common headers array
- $headers = array(
- 'From' => $sender,
- 'Date' => $this->rc->user_date(),
- 'Message-ID' => $this->rc->gen_message_id(),
- 'X-Sender' => $from,
- );
- if ($agent = $this->rc->config->get('useragent'))
- $headers['User-Agent'] = $agent;
-
- $message->headers($headers);
-
- // attach ics file for this event
- $ical = $this->cal->get_ical();
- $ics = $ical->export(array($event), $method, false, $method == 'REQUEST' ? array($this->cal->driver, 'get_attachment_body') : false);
- $message->addAttachment($ics, 'text/calendar', 'event.ics', false, '8bit', '', RCMAIL_CHARSET . "; method=" . $method);
-
- return $message;
- }
-
-
- /**
* Find invitation record by token
*
* @param string Invitation token
@@ -259,9 +89,9 @@ class calendar_itip
if ($organizer) {
$status = strtolower($newstatus);
if ($this->send_itip_message($invitation['event'], 'REPLY', $organizer, 'itipsubject' . $status, 'itipmailbody' . $status))
- $this->rc->output->command('display_message', $this->cal->gettext(array('name' => 'sentresponseto', 'vars' => array('mailto' => $organizer['name'] ? $organizer['name'] : $organizer['email']))), 'confirmation');
+ $this->rc->output->command('display_message', $this->plugin->gettext(array('name' => 'sentresponseto', 'vars' => array('mailto' => $organizer['name'] ? $organizer['name'] : $organizer['email']))), 'confirmation');
else
- $this->rc->output->command('display_message', $this->cal->gettext('itipresponseerror'), 'error');
+ $this->rc->output->command('display_message', $this->plugin->gettext('itipresponseerror'), 'error');
}
// update record in DB
diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php
index 6150e65..b6c0e78 100644
--- a/plugins/calendar/lib/calendar_ui.php
+++ b/plugins/calendar/lib/calendar_ui.php
@@ -786,31 +786,13 @@ class calendar_ui
}
/**
- * Render event details in a table
- */
- function event_details_table($event, $title)
- {
- $table = new html_table(array('cols' => 2, 'border' => 0, 'class' => 'calendar-eventdetails'));
- $table->add('ititle', $title);
- $table->add('title', Q($event['title']));
- $table->add('label', $this->cal->gettext('date'));
- $table->add('location', Q($this->cal->lib->event_date_text($event)));
- if ($event['location']) {
- $table->add('label', $this->cal->gettext('location'));
- $table->add('location', Q($event['location']));
- }
-
- return $table->show();
- }
-
- /**
*
*/
function event_invitebox($attrib = array())
{
if ($this->cal->event) {
return html::div($attrib,
- $this->event_details_table($this->cal->event, $this->cal->gettext('itipinvitation')) .
+ $this->cal->load_itip()->itip_object_details_table($this->cal->event, $this->cal->gettext('itipinvitation')) .
$this->cal->invitestatus
);
}
diff --git a/plugins/calendar/localization/bg_BG.inc b/plugins/calendar/localization/bg_BG.inc
index 993fd5f..9fa8594 100644
--- a/plugins/calendar/localization/bg_BG.inc
+++ b/plugins/calendar/localization/bg_BG.inc
@@ -1,7 +1,11 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'Ðзглед по подÑазбиÑане';
$labels['time_format'] = 'ФоÑÐ¼Ð°Ñ Ð½Ð° ÑаÑовеÑе';
-$labels['timeslots'] = 'ÐолеÑа на ÑаÑ';
+$labels['timeslots'] = 'Time slots per hour';
$labels['first_day'] = 'ÐÑÑви ден Ð¾Ñ ÑедмиÑаÑа';
$labels['first_hour'] = 'ÐÑÑви ÑÐ°Ñ Ð¿Ñи показване';
$labels['workinghours'] = 'РабоÑни ÑаÑове';
@@ -13,6 +17,8 @@ $labels['coloringmode0'] = 'СпоÑед календаÑа';
$labels['coloringmode1'] = 'ÐÑноÑно каÑегоÑиÑÑа';
$labels['coloringmode2'] = 'ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð·Ð° оÑеÑÑание, каÑегоÑÐ¸Ñ Ð·Ð° ÑÑдÑÑжание';
$labels['coloringmode3'] = 'ÐаÑегоÑÐ¸Ñ Ð·Ð° оÑеÑÑание, ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð·Ð° ÑÑдÑÑжание';
+
+// calendar
$labels['calendar'] = 'ÐалендаÑ';
$labels['calendars'] = 'ÐалендаÑи';
$labels['category'] = 'ÐаÑегоÑиÑ';
@@ -40,7 +46,11 @@ $labels['description'] = 'ÐпиÑание';
$labels['all-day'] = 'ÑÑл ден';
$labels['export'] = 'ÐзвлиÑане';
$labels['exporttitle'] = 'ÐзвлиÑане кÑм iCalendar';
+$labels['exportrange'] = 'СÑбиÑÐ¸Ñ Ð¾Ñ';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
$labels['location'] = 'ÐеÑÑоположение';
+$labels['url'] = 'URL';
$labels['date'] = 'ÐаÑа';
$labels['start'] = 'ÐаÑало';
$labels['end'] = 'ÐÑай';
@@ -62,6 +72,7 @@ $labels['parentcalendar'] = 'ÐнаÑÑне вÑÑÑе';
$labels['searchearlierdates'] = '« ТÑÑÑене за по- ÑÑаÑи ÑÑбиÑиÑ';
$labels['searchlaterdates'] = 'ТÑÑÑене за по- нови ÑÑбиÑÐ¸Ñ Â»';
$labels['andnmore'] = '$nr повеÑе...';
+$labels['togglerole'] = 'Click to toggle role';
$labels['createfrommail'] = 'Ðапазване каÑо ÑÑбиÑие';
$labels['importevents'] = 'ÐнаÑÑне на ÑÑбиÑиÑ';
$labels['importrange'] = 'СÑбиÑÐ¸Ñ Ð¾Ñ';
@@ -69,6 +80,9 @@ $labels['onemonthback'] = '1 меÑÐµÑ Ð½Ð°Ð·Ð°Ð´';
$labels['nmonthsback'] = '$nr меÑеÑа назад';
$labels['showurl'] = 'Ðоказване на URL на календаÑа';
$labels['showurldescription'] = 'ÐзползвайÑе ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð°Ð´ÑеÑ, за да доÑÑÑпваÑе (Ñамо за ÑеÑене) ваÑÐ¸Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð¾Ñ Ð´ÑÑги пÑиложениÑ. ÐожеÑе да копиÑаÑе и поÑÑавÑÑе Ñова вÑв вÑеки календаÑен ÑоÑÑÑеÑ, поддÑÑÐ¶Ð°Ñ ÑоÑмаÑÑÑ iCal';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// agenda view
$labels['listrange'] = 'ÐÑазмеÑÑване кÑм екÑан:';
$labels['listsections'] = 'РазделÑне на:';
$labels['smartsections'] = 'ÐнÑелигенÑни ÑекÑии';
@@ -82,26 +96,140 @@ $labels['nextmonth'] = 'СледваÑÐ¸Ñ Ð¼ÐµÑеÑ';
$labels['weekofyear'] = 'СедмиÑа';
$labels['pastevents'] = 'Ðинали';
$labels['futureevents'] = 'ÐÑдеÑи';
-$labels['showalarms'] = 'Ðоказване на алаÑми';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Show reminders';
$labels['defaultalarmtype'] = 'ÐаÑÑÑойка за напомнÑне по подÑазбиÑане';
$labels['defaultalarmoffset'] = 'ÐÑеме за напомнÑне по подÑазбиÑане';
+
+// attendees
$labels['attendee'] = 'УÑаÑÑник';
$labels['role'] = 'РолÑ';
+$labels['availability'] = 'Avail.';
$labels['confirmstate'] = 'СÑаÑÑÑ';
$labels['addattendee'] = 'ÐобавÑне на ÑÑаÑÑник';
$labels['roleorganizer'] = 'ÐÑганизаÑоÑ';
$labels['rolerequired'] = 'ÐадÑлжиÑелен';
$labels['roleoptional'] = 'Ðо избоÑ';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Group';
+$labels['cutyperesource'] = 'Resource';
+$labels['cutyperoom'] = 'Room';
$labels['availfree'] = 'Свободно';
$labels['availbusy'] = 'ÐаеÑо';
$labels['availunknown'] = 'ÐеизвеÑÑно';
$labels['availtentative'] = 'ÐÑедваÑиÑелно';
$labels['availoutofoffice'] = 'ÐзвÑн оÑиÑа';
+$labels['scheduletime'] = 'Find availability';
$labels['sendinvitations'] = 'ÐзпÑаÑане на покани';
$labels['sendnotifications'] = 'ÐзвеÑÑÑване на ÑÑаÑÑниÑиÑе оÑноÑно пÑомениÑе';
$labels['sendcancellation'] = 'ÐзвеÑÑÑване на ÑÑаÑÑниÑиÑе оÑноÑно оÑмÑна на ÑÑбиÑиÑ';
+$labels['onlyworkinghours'] = 'Find availability within my working hours';
+$labels['reqallattendees'] = 'Required/all participants';
+$labels['prevslot'] = 'Previous Slot';
+$labels['nextslot'] = 'Next 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 canceled';
+$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
+$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['itipdeclineevent'] = 'ÐÑкаÑе ли да оÑÑ
вÑÑлиÑе поканаÑа за Ñова ÑÑбиÑие?';
+$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?';
+$labels['notanattendee'] = 'You\'re not listed as an attendee of this event';
+$labels['eventcancelled'] = 'The event has been cancelled';
+$labels['saveincalendar'] = 'запазване в';
+
+// event dialog tabs
$labels['tabsummary'] = 'Ðаглавие';
+$labels['tabrecurrence'] = 'Recurrence';
+$labels['tabattendees'] = 'УÑаÑÑниÑи';
+$labels['tabattachments'] = 'ÐÑикÑепени Ñайлове';
+$labels['tabsharing'] = 'СподелÑне';
+
+// messages
+$labels['deleteventconfirm'] = 'ÐаиÑÑина ли иÑкаÑе да пÑемаÑ
неÑе Ñова ÑÑбиÑие?';
+$labels['deletecalendarconfirm'] = 'ÐаиÑÑина ли иÑкаÑе да пÑемаÑ
неÑе Ñози ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ñ Ð²ÑиÑкиÑе Ð¼Ñ ÑÑбиÑиÑ?';
+$labels['deletecalendarconfirmrecursive'] = 'Do you really want to delete this calendar with all its events and sub-calendars?';
$labels['savingdata'] = 'Ðапазване на данни...';
+$labels['errorsaving'] = 'ÐеÑÑпеÑно запиÑванеÑо на пÑомениÑе.';
+$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['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['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.';
+
+// recurrence form
+$labels['repeat'] = 'Repeat';
+$labels['frequency'] = 'Repeat';
+$labels['never'] = 'never';
+$labels['daily'] = 'daily';
+$labels['weekly'] = 'weekly';
+$labels['monthly'] = 'monthly';
+$labels['yearly'] = 'annually';
+$labels['rdate'] = 'on dates';
+$labels['every'] = 'Every';
+$labels['days'] = 'day(s)';
+$labels['weeks'] = 'week(s)';
+$labels['months'] = 'month(s)';
+$labels['years'] = 'year(s) in:';
+$labels['bydays'] = 'On';
+$labels['untildate'] = 'the';
+$labels['each'] = 'Each';
+$labels['onevery'] = 'On every';
+$labels['onsamedate'] = 'On the same date';
+$labels['forever'] = 'forever';
$labels['recurrencend'] = 'до';
+$labels['forntimes'] = 'for $nr time(s)';
+$labels['first'] = 'first';
+$labels['second'] = 'second';
+$labels['third'] = 'third';
+$labels['fourth'] = 'fourth';
+$labels['last'] = 'last';
+$labels['dayofmonth'] = 'Day of month';
+$labels['addrdate'] = 'Add repeat date';
+
+$labels['changeeventconfirm'] = 'Change event';
+$labels['removeeventconfirm'] = 'Remove 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 remove the current event only, this and all future occurences or all occurences of this event?';
+$labels['currentevent'] = 'Current';
$labels['futurevents'] = 'ÐÑдеÑи';
+$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';
+
?>
diff --git a/plugins/calendar/localization/cs_CZ.inc b/plugins/calendar/localization/cs_CZ.inc
index fe88253..6623e7e 100644
--- a/plugins/calendar/localization/cs_CZ.inc
+++ b/plugins/calendar/localization/cs_CZ.inc
@@ -1,7 +1,11 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'Výchozà pohled';
$labels['time_format'] = 'Formát data';
-$labels['timeslots'] = 'Slotů na hodinu';
+$labels['timeslots'] = 'Time slots per hour';
$labels['first_day'] = 'Prvnà den v týdnu';
$labels['first_hour'] = 'Prvnà hodina k zobrazenÃ';
$labels['workinghours'] = 'Pracovnà hodiny';
@@ -13,6 +17,8 @@ $labels['coloringmode0'] = 'Podle kalendáÅe';
$labels['coloringmode1'] = 'Podle kategorie';
$labels['coloringmode2'] = 'KalendáŠpro orámovánÃ, kategorie pro obsah';
$labels['coloringmode3'] = 'Kategorie pro orámovánÃ, kalendáŠpro obsah';
+
+// calendar
$labels['calendar'] = 'KalendáÅ';
$labels['calendars'] = 'KalendáÅe';
$labels['category'] = 'Kategorie';
@@ -40,7 +46,11 @@ $labels['description'] = 'Popis';
$labels['all-day'] = 'celý den';
$labels['export'] = 'Exportovat do ICS';
$labels['exporttitle'] = 'Exportovat souhrn do ICS';
+$labels['exportrange'] = 'Události od';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
$labels['location'] = 'MÃsto';
+$labels['url'] = 'URL';
$labels['date'] = 'Datum';
$labels['start'] = 'ZaÄátek';
$labels['end'] = 'Konec';
@@ -70,6 +80,9 @@ $labels['onemonthback'] = '1 mÄsÃc nazpátek';
$labels['nmonthsback'] = '$nr mÄsÃců nazpátek';
$labels['showurl'] = 'Ukázat URL kalendáÅe';
$labels['showurldescription'] = 'Tuto adresu použijte pro pÅÃstup (jen ke ÄtenÃ) ke kalendáÅi z jiných aplikacÃ. Můžete ji zkopÃrovat a vložit do jakéhokoli kalendáÅového softwaru, který podporuje formát iCal.';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// agenda view
$labels['listrange'] = 'Rozsah k zobrazenÃ:';
$labels['listsections'] = 'RozdÄlit na:';
$labels['smartsections'] = 'Chytré sekce';
@@ -83,9 +96,13 @@ $labels['nextmonth'] = 'PÅÃÅ¡tà mÄsÃc';
$labels['weekofyear'] = 'Týden';
$labels['pastevents'] = 'Minulost';
$labels['futureevents'] = 'Budoucnost';
-$labels['showalarms'] = 'Zobrazit upozornÄnÃ';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Show reminders';
$labels['defaultalarmtype'] = 'Výchozà nastavenà pÅipomenutÃ';
$labels['defaultalarmoffset'] = 'Výchozà Äas pÅipomenutÃ';
+
+// attendees
$labels['attendee'] = 'ÃÄastnÃk';
$labels['role'] = 'Role';
$labels['availability'] = 'Dost.';
@@ -94,6 +111,12 @@ $labels['addattendee'] = 'PÅidat úÄastnÃka';
$labels['roleorganizer'] = 'Organizátor';
$labels['rolerequired'] = 'Povinný';
$labels['roleoptional'] = 'Nepovinný';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Group';
+$labels['cutyperesource'] = 'ProstÅedek';
+$labels['cutyperoom'] = 'Room';
$labels['availfree'] = 'volno';
$labels['availbusy'] = 'obsazeno';
$labels['availunknown'] = 'neznámý';
@@ -116,37 +139,28 @@ $labels['eventupdatesubjectempty'] = 'Událost, která se vás týká, byla aktu
$labels['eventupdatemailbody'] = "*\$title*\n\nKdy: \$date\n\nPozváni: \$attendees\n\nPodrobnosti o aktualizované události najdete v pÅiloženém souboru typu iCalendar. Můžete si ho naimportovat do kalendáÅového programu.";
$labels['eventcancelsubject'] = 'Událost "$title" byla zrušena';
$labels['eventcancelmailbody'] = "*\$title*\n\nKdy: \$date\n\nPozváni: \$attendees\n\nUdálost byla zruÅ¡ena organizátorem (\$organizer).\n\nPodrobnosti najdete v pÅiloženém souboru ve formátu iCalendar.";
-$labels['itipinvitation'] = 'Pozvánà na událost';
-$labels['itipupdate'] = 'Aktualizace události';
-$labels['itipcancellation'] = 'Zrušeno:';
-$labels['itipreply'] = 'OdpovÄÄ na';
-$labels['itipaccepted'] = 'Potvrdit';
-$labels['itiptentative'] = 'Možná';
-$labels['itipdeclined'] = 'OdmÃtnout';
-$labels['itipsubjectaccepted'] = '$name potvrdil(a) úÄas na události "$title"';
-$labels['itipsubjecttentative'] = '$name nezávaznÄ potvrdil(a) úÄast na události "$title"';
-$labels['itipsubjectdeclined'] = '$name odmÃtl(a) úÄast na události "$title"';
+
+// invitation handling
$labels['itipmailbodyaccepted'] = "\$sender pÅijal(a) pozvánà na tuto událost:\n\n*\$title*\n\nKdy: \$date\n\nPozváni: \$attendees";
$labels['itipmailbodytentative'] = "\$sender nezávaznÄ pÅijal(a) pozvánà na tuto událost:\n\n*\$title*\n\nKdy: \$date\n\nPozváni: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender odmÃtl(a) pozvánà na tuto událost:\n\n*\$title*\n\nKdy: \$date\n\nPozváni: \$attendees";
$labels['itipdeclineevent'] = 'Opravdu chcete odmÃtnout pozvánà na tuto událost?';
-$labels['importtocalendar'] = 'Uložit do kalendáÅe';
-$labels['removefromcalendar'] = 'Odstranit z kalendáÅe';
-$labels['updateattendeestatus'] = 'Aktualizovat stav úÄastnÃka';
-$labels['acceptinvitation'] = 'Chcete pÅijmout toto pozvánà (potvrdit úÄast)?';
-$labels['youhaveaccepted'] = 'PÅijal(a) jste toto pozvánÃ';
-$labels['youhavetentative'] = 'NezávaznÄ jste pÅijal(a) toto pozvánÃ';
-$labels['youhavedeclined'] = 'OdmÃtl(a) jste toto pozvánÃ';
+$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?';
$labels['notanattendee'] = 'Nejste na seznamu úÄastnÃků této události';
$labels['eventcancelled'] = 'Tato událost byla zrušena';
$labels['saveincalendar'] = 'uložit do';
+
+// event dialog tabs
$labels['tabsummary'] = 'Souhrn';
$labels['tabrecurrence'] = 'OpakovánÃ';
$labels['tabattendees'] = 'ÃÄastnÃci';
$labels['tabattachments'] = 'PÅÃlohy';
$labels['tabsharing'] = 'SdÃlenÃ';
+
+// messages
$labels['deleteventconfirm'] = 'Opravdu chcete smazat tuto událost?';
$labels['deletecalendarconfirm'] = 'Opravdu chcete smazat tento kalendáŠse všemi událostmi?';
+$labels['deletecalendarconfirmrecursive'] = 'Do you really want to delete this calendar with all its events and sub-calendars?';
$labels['savingdata'] = 'Ukládám data...';
$labels['errorsaving'] = 'Nelze uložit zmÄny.';
$labels['operationfailed'] = 'Požavovaná operace selhala.';
@@ -165,10 +179,13 @@ $labels['itipsendsuccess'] = 'Pozvánky byly rozeslány úÄastnÃkům.';
$labels['itipresponseerror'] = 'Nelze odeslat odpovÄÄ na tuto pozvánku';
$labels['itipinvalidrequest'] = 'Tato pozvánka již nenà platná';
$labels['sentresponseto'] = 'OdpovÄÄ na pozvánku byla úspÄÅ¡nÄ odeslána na adresu $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'] = 'ÃspÄÅ¡nÄ importováno $nr událostÃ';
$labels['importnone'] = 'Nebyly nalezeny žádné události k importu';
$labels['importerror'] = 'PÅi importu doÅ¡lo k chybÄ';
$labels['aclnorights'] = 'Nemáte administrátorská práva k tomuto kalendáÅi.';
+
+// recurrence form
$labels['repeat'] = 'OpakovánÃ';
$labels['frequency'] = 'Opakovat';
$labels['never'] = 'nikdy';
@@ -176,11 +193,13 @@ $labels['daily'] = 'dennÄ';
$labels['weekly'] = 'týdnÄ';
$labels['monthly'] = 'mÄsÃÄnÄ';
$labels['yearly'] = 'roÄnÄ';
+$labels['rdate'] = 'on dates';
$labels['every'] = 'Každý';
$labels['days'] = 'den (dny)';
$labels['weeks'] = 'týden (týdny)';
$labels['months'] = 'mÄsÃc(e/ů)';
$labels['years'] = 'rok(y/ů) v:';
+$labels['bydays'] = 'On';
$labels['untildate'] = 'do';
$labels['each'] = 'Každý';
$labels['onevery'] = 'Vždy v';
@@ -194,6 +213,8 @@ $labels['third'] = 'tÅetÃ';
$labels['fourth'] = 'Ätvrtý';
$labels['last'] = 'poslednÃ';
$labels['dayofmonth'] = 'Den v mÄsÃci';
+$labels['addrdate'] = 'Add repeat date';
+
$labels['changeeventconfirm'] = 'ZmÄnit událost';
$labels['removeeventconfirm'] = 'Odstranit událost';
$labels['changerecurringeventwarning'] = 'Toto je opakovaná událost. Chcete upravit jen toto konánÃ, toto a vÅ¡echna následujÃcà konánÃ, úplnÄ vÅ¡echna konánà nebo uložit událost jako novou?';
@@ -202,4 +223,13 @@ $labels['currentevent'] = 'AktuálnÃ';
$labels['futurevents'] = 'BudoucÃ';
$labels['allevents'] = 'VÅ¡echny';
$labels['saveasnew'] = 'Uložit jako novou';
+
+// 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';
+
?>
diff --git a/plugins/calendar/localization/de_CH.inc b/plugins/calendar/localization/de_CH.inc
index 4860e4b..08310a9 100644
--- a/plugins/calendar/localization/de_CH.inc
+++ b/plugins/calendar/localization/de_CH.inc
@@ -1,7 +1,11 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'Ansicht';
$labels['time_format'] = 'Zeitformatierung';
-$labels['timeslots'] = 'Zeitraster pro Stunde';
+$labels['timeslots'] = 'Time slots per hour';
$labels['first_day'] = 'Erster Wochentag';
$labels['first_hour'] = 'Erste angezeigte Stunde';
$labels['workinghours'] = 'Arbeitszeiten';
@@ -13,6 +17,8 @@ $labels['coloringmode0'] = 'Farbe des Kalenders';
$labels['coloringmode1'] = 'Farbe der Kategorie';
$labels['coloringmode2'] = 'Kalenderfarbe aussen, Kategoriefarbe innen';
$labels['coloringmode3'] = 'Kategoriefarbe aussen, Kalenderfarbe innen';
+
+// calendar
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalender';
$labels['category'] = 'Kategorie';
@@ -41,9 +47,10 @@ $labels['all-day'] = 'ganztägig';
$labels['export'] = 'Exportieren';
$labels['exporttitle'] = 'Kalender als iCalendar exportieren';
$labels['exportrange'] = 'Termine ab';
-$labels['exportattachments'] = 'Mit Anhängen';
-$labels['customdate'] = 'Eigenes Datum';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
$labels['location'] = 'Ort';
+$labels['url'] = 'URL';
$labels['date'] = 'Datum';
$labels['start'] = 'Beginn';
$labels['end'] = 'Ende';
@@ -73,6 +80,9 @@ $labels['onemonthback'] = '1 Monat zurück';
$labels['nmonthsback'] = '$nr Monate zurück';
$labels['showurl'] = 'URL anzeigen';
$labels['showurldescription'] = 'Ãber die folgende Adresse können Sie mit einem beliebigen Kalenderprogramm Ihren Kalender abrufen (nur lesend), sofern dieses das iCal-Format unterstützt.';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// agenda view
$labels['listrange'] = 'Angezeigter Bereich:';
$labels['listsections'] = 'Unterteilung:';
$labels['smartsections'] = 'Intelligent';
@@ -86,9 +96,13 @@ $labels['nextmonth'] = 'Nächsten Monat';
$labels['weekofyear'] = 'KW';
$labels['pastevents'] = 'Vergangene';
$labels['futureevents'] = 'Zukünftige';
-$labels['showalarms'] = 'Erinnerungen anzeigen';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Show reminders';
$labels['defaultalarmtype'] = 'Standard-Erinnerungseinstellung';
$labels['defaultalarmoffset'] = 'Standard-Erinnerungszeit';
+
+// attendees
$labels['attendee'] = 'Teilnehmer';
$labels['role'] = 'Rolle';
$labels['availability'] = 'Verfüg.';
@@ -97,6 +111,12 @@ $labels['addattendee'] = 'Hinzufügen';
$labels['roleorganizer'] = 'Organisator';
$labels['rolerequired'] = 'Erforderlich';
$labels['roleoptional'] = 'Optional';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Group';
+$labels['cutyperesource'] = 'Ressource';
+$labels['cutyperoom'] = 'Room';
$labels['availfree'] = 'Frei';
$labels['availbusy'] = 'Gebucht';
$labels['availunknown'] = 'Unbekannt';
@@ -119,37 +139,29 @@ $labels['eventupdatesubjectempty'] = 'Termin wurde aktualisiert';
$labels['eventupdatemailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nIm Anhang finden Sie eine iCalendar-Datei mit den aktualisiereten Termindaten. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['eventcancelsubject'] = '"$title" wurde abgesagt';
$labels['eventcancelmailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nDer Termin wurde von \$organizer abgesagt.\n\nIm Anhang finden Sie eine iCalendar-Datei mit den Termindaten.";
-$labels['itipinvitation'] = 'Einladung zu';
-$labels['itipupdate'] = 'Aktialisiert:';
-$labels['itipcancellation'] = 'Abgesagt:';
-$labels['itipreply'] = 'Antwort zu';
-$labels['itipaccepted'] = 'Akzeptieren';
-$labels['itiptentative'] = 'Mit Vorbehalt';
-$labels['itipdeclined'] = 'Ablehnen';
-$labels['itipsubjectaccepted'] = 'Einladung zu "$title" wurde von $name angenommen';
-$labels['itipsubjecttentative'] = 'Einladung zu "$title" wurde von $name mit Vorbehalt angenommen';
-$labels['itipsubjectdeclined'] = 'Einladung zu "$title" wurde von $name abgelehnt';
+
+// invitation handling
$labels['itipmailbodyaccepted'] = "\$sender hat die Einladung zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodytentative'] = "\$sender hat die Einladung mit Vorbehalt zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender hat die Einladung zum folgenden Termin abgelehnt:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipdeclineevent'] = 'Möchten Sie die Einladung zu diesem Termin ablehnen?';
-$labels['importtocalendar'] = 'In Kalender übernehmen';
-$labels['removefromcalendar'] = 'Aus meinem Kalender löschen';
-$labels['updateattendeestatus'] = 'Teilnehmerstatus aktualisieren';
-$labels['acceptinvitation'] = 'Möchten Sie die Einladung zu diesem Termin annehmen?';
-$labels['youhaveaccepted'] = 'Sie haben die Einladung angenommen';
-$labels['youhavetentative'] = 'Sie haben die Einladung mit Vorbehalt angenommen';
-$labels['youhavedeclined'] = 'Sie haben die Einladung abgelehnt';
+$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?';
+
$labels['notanattendee'] = 'Sie sind nicht in der Liste der Teilnehmer aufgeführt';
$labels['eventcancelled'] = 'Der Termin wurde vom Organisator abgesagt';
$labels['saveincalendar'] = 'speichern in';
+
+// event dialog tabs
$labels['tabsummary'] = 'Ãbersicht';
$labels['tabrecurrence'] = 'Wiederholung';
$labels['tabattendees'] = 'Teilnehmer';
$labels['tabattachments'] = 'Anhänge';
$labels['tabsharing'] = 'Freigabe';
+
+// messages
$labels['deleteventconfirm'] = 'Möchten Sie diesen Termin wirklich löschen?';
$labels['deletecalendarconfirm'] = 'Möchten Sie diesen Kalender mit allen Terminen wirklich löschen?';
+$labels['deletecalendarconfirmrecursive'] = 'Do you really want to delete this calendar with all its events and sub-calendars?';
$labels['savingdata'] = 'Speichere Daten...';
$labels['errorsaving'] = 'Fehler beim Speichern.';
$labels['operationfailed'] = 'Die Aktion ist fehlgeschlagen.';
@@ -168,10 +180,13 @@ $labels['itipsendsuccess'] = 'Einladung an Teilnehmer versendet.';
$labels['itipresponseerror'] = 'Die Antwort auf diese Einladung konnte nicht versendet werden';
$labels['itipinvalidrequest'] = 'Diese Einladung ist nicht mehr gültig';
$labels['sentresponseto'] = 'Antwort auf diese Einladung erfolgreich an $mailto gesendet';
+$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'] = 'Es wurden $nr Termine erfolgreich importiert';
$labels['importnone'] = 'Keine Termine zum Importieren gefunden';
$labels['importerror'] = 'Fehler beim Importieren';
$labels['aclnorights'] = 'Sie haben keine Administrator-Rechte für diesen Kalender.';
+
+// recurrence form
$labels['repeat'] = 'Wiederholung';
$labels['frequency'] = 'Wiederholung';
$labels['never'] = 'nie';
@@ -179,7 +194,7 @@ $labels['daily'] = 'täglich';
$labels['weekly'] = 'wöchentlich';
$labels['monthly'] = 'monatlich';
$labels['yearly'] = 'jährlich';
-$labels['rdate'] = 'per Datum';
+$labels['rdate'] = 'on dates';
$labels['every'] = 'Alle';
$labels['days'] = 'Tag(e)';
$labels['weeks'] = 'Woche(n)';
@@ -199,7 +214,8 @@ $labels['third'] = 'dritter';
$labels['fourth'] = 'vierter';
$labels['last'] = 'letzter';
$labels['dayofmonth'] = 'Tag des Montats';
-$labels['addrdate'] = 'Datum hinzufügen';
+$labels['addrdate'] = 'Add repeat date';
+
$labels['changeeventconfirm'] = 'Termin ändern';
$labels['removeeventconfirm'] = 'Termin löschen';
$labels['changerecurringeventwarning'] = 'Dies ist eine Terminreihe. Möchten Sie nur den aktuellen, diesen und alle zukünftigen oder alle Termine bearbeiten oder die Ãnderungen als neuen Termin speichern?';
@@ -208,4 +224,13 @@ $labels['currentevent'] = 'Aktuellen';
$labels['futurevents'] = 'Zukünftige';
$labels['allevents'] = 'Alle';
$labels['saveasnew'] = 'Als neu speichern';
+
+// 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';
+
?>
diff --git a/plugins/calendar/localization/de_DE.inc b/plugins/calendar/localization/de_DE.inc
index 582df11..1b61ee8 100644
--- a/plugins/calendar/localization/de_DE.inc
+++ b/plugins/calendar/localization/de_DE.inc
@@ -1,18 +1,24 @@
<?php
-$labels['default_view'] = 'Ansicht';
+
+$labels = array();
+
+// preferences
+$labels['default_view'] = 'Standardansicht';
$labels['time_format'] = 'Zeitformatierung';
-$labels['timeslots'] = 'Zeitraster pro Stunde';
+$labels['timeslots'] = 'Time slots per hour';
$labels['first_day'] = 'Erster Wochentag';
$labels['first_hour'] = 'Erste angezeigte Stunde';
$labels['workinghours'] = 'Arbeitszeiten';
-$labels['add_category'] = 'Katgorie hinzufügen';
-$labels['remove_category'] = 'Katgorie entfernen';
+$labels['add_category'] = 'Kategorie hinzufügen';
+$labels['remove_category'] = 'Kategorie entfernen';
$labels['defaultcalendar'] = 'Neue Termine erstellen in';
$labels['eventcoloring'] = 'Färbung der Termine';
$labels['coloringmode0'] = 'Farbe des Kalenders';
$labels['coloringmode1'] = 'Farbe der Kategorie';
$labels['coloringmode2'] = 'Kalenderfarbe auÃen, Kategoriefarbe innen';
$labels['coloringmode3'] = 'Kategoriefarbe auÃen, Kalenderfarbe innen';
+
+// calendar
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalender';
$labels['category'] = 'Kategorie';
@@ -42,8 +48,9 @@ $labels['export'] = 'Exportieren';
$labels['exporttitle'] = 'Kalender als iCalendar exportieren';
$labels['exportrange'] = 'Termine ab';
$labels['exportattachments'] = 'Mit Anhängen';
-$labels['customdate'] = 'Eigenes Datum';
+$labels['customdate'] = 'Benutzerdefiniertes Datum';
$labels['location'] = 'Ort';
+$labels['url'] = 'URL';
$labels['date'] = 'Datum';
$labels['start'] = 'Beginn';
$labels['end'] = 'Ende';
@@ -73,6 +80,9 @@ $labels['onemonthback'] = '1 Monat zurück';
$labels['nmonthsback'] = '$nr Monate zurück';
$labels['showurl'] = 'URL anzeigen';
$labels['showurldescription'] = 'Ãber die folgende Adresse können Sie mit einem beliebigen Kalenderprogramm Ihren Kalender abrufen (nur lesend), sofern dieses das iCal-Format unterstützt.';
+$labels['caldavurldescription'] = 'Diese Adresse in einen <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a>-Klienten (z.B. Evolution oder Mozilla Thunderbird) kopieren, um den Kalender in Gänze mit einem mobilen Gerät zu synchronisieren.';
+
+// agenda view
$labels['listrange'] = 'Angezeigter Bereich:';
$labels['listsections'] = 'Unterteilung:';
$labels['smartsections'] = 'Intelligent';
@@ -86,9 +96,13 @@ $labels['nextmonth'] = 'Nächsten Monat';
$labels['weekofyear'] = 'Woche';
$labels['pastevents'] = 'Vergangene';
$labels['futureevents'] = 'Zukünftige';
-$labels['showalarms'] = 'Erinnerungen anzeigen';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Show reminders';
$labels['defaultalarmtype'] = 'Standard-Erinnerungseinstellung';
$labels['defaultalarmoffset'] = 'Standard-Erinnerungszeit';
+
+// attendees
$labels['attendee'] = 'Teilnehmer';
$labels['role'] = 'Rolle';
$labels['availability'] = 'Verfüg.';
@@ -97,6 +111,12 @@ $labels['addattendee'] = 'Hinzufügen';
$labels['roleorganizer'] = 'Organisator';
$labels['rolerequired'] = 'Erforderlich';
$labels['roleoptional'] = 'Optional';
+$labels['rolechair'] = 'Stuhl';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Person';
+$labels['cutypegroup'] = 'Gruppe';
+$labels['cutyperesource'] = 'Ressource';
+$labels['cutyperoom'] = 'Raum';
$labels['availfree'] = 'Frei';
$labels['availbusy'] = 'Gebucht';
$labels['availunknown'] = 'Unbekannt';
@@ -119,37 +139,28 @@ $labels['eventupdatesubjectempty'] = 'Termin wurde aktualisiert';
$labels['eventupdatemailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nIm Anhang finden Sie eine iCalendar-Datei mit den aktualisiereten Termindaten. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['eventcancelsubject'] = '"$title" wurde abgesagt';
$labels['eventcancelmailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nDer Termin wurde von \$organizer abgesagt.\n\nIm Anhang finden Sie eine iCalendar-Datei mit den Termindaten.";
-$labels['itipinvitation'] = 'Einladung zu';
-$labels['itipupdate'] = 'Aktialisiert:';
-$labels['itipcancellation'] = 'Abgesagt:';
-$labels['itipreply'] = 'Antwort zu';
-$labels['itipaccepted'] = 'Akzeptieren';
-$labels['itiptentative'] = 'Mit Vorbehalt';
-$labels['itipdeclined'] = 'Ablehnen';
-$labels['itipsubjectaccepted'] = 'Einladung zu "$title" wurde von $name angenommen';
-$labels['itipsubjecttentative'] = 'Einladung zu "$title" wurde von $name mit Vorbehalt angenommen';
-$labels['itipsubjectdeclined'] = 'Einladung zu "$title" wurde von $name abgelehnt';
+
+// invitation handling
$labels['itipmailbodyaccepted'] = "\$sender hat die Einladung zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodytentative'] = "\$sender hat die Einladung mit Vorbehalt zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender hat die Einladung zum folgenden Termin abgelehnt:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipdeclineevent'] = 'Möchten Sie die Einladung zu diesem Termin ablehnen?';
-$labels['importtocalendar'] = 'In Kalender übernehmen';
-$labels['removefromcalendar'] = 'Aus meinem Kalender löschen';
-$labels['updateattendeestatus'] = 'Teilnehmerstatus aktualisieren';
-$labels['acceptinvitation'] = 'Möchten Sie die Einladung zu diesem Termin annehmen?';
-$labels['youhaveaccepted'] = 'Sie haben die Einladung angenommen';
-$labels['youhavetentative'] = 'Sie haben die Einladung mit Vorbehalt angenommen';
-$labels['youhavedeclined'] = 'Sie haben die Einladung abgelehnt';
+$labels['declinedeleteconfirm'] = 'Soll der abgelehnte Termin zusätzlich aus dem Kalender gelöscht werden?';
$labels['notanattendee'] = 'Sie sind nicht in der Liste der Teilnehmer aufgeführt';
$labels['eventcancelled'] = 'Der Termin wurde vom Organisator abgesagt';
$labels['saveincalendar'] = 'speichern in';
+
+// event dialog tabs
$labels['tabsummary'] = 'Ãbersicht';
$labels['tabrecurrence'] = 'Wiederholung';
$labels['tabattendees'] = 'Teilnehmer';
$labels['tabattachments'] = 'Anhänge';
$labels['tabsharing'] = 'Freigabe';
+
+// messages
$labels['deleteventconfirm'] = 'Möchten Sie diesen Termin wirklich löschen?';
$labels['deletecalendarconfirm'] = 'Möchten Sie diesen Kalender mit allen Terminen wirklich löschen?';
+$labels['deletecalendarconfirmrecursive'] = 'Soll dieser Kalender wirklich mit allen Terminen und Unterkalendern gelöscht werden?';
$labels['savingdata'] = 'Speichere Daten...';
$labels['errorsaving'] = 'Fehler beim Speichern.';
$labels['operationfailed'] = 'Die Aktion ist fehlgeschlagen.';
@@ -168,10 +179,13 @@ $labels['itipsendsuccess'] = 'Einladung an Teilnehmer versendet.';
$labels['itipresponseerror'] = 'Die Antwort auf diese Einladung konnte nicht versendet werden';
$labels['itipinvalidrequest'] = 'Diese Einladung ist nicht mehr gültig.';
$labels['sentresponseto'] = 'Antwort auf diese Einladung erfolgreich an $mailto gesendet';
+$labels['localchangeswarning'] = 'Die auszuführenden Ãnderungen werden sich nur auf den persönlichen Kalender auswirken und nicht an den Organisator des Termins weitergeleitet.';
$labels['importsuccess'] = 'Es wurden $nr Termine erfolgreich importiert';
$labels['importnone'] = 'Keine Termine zum Importieren gefunden';
$labels['importerror'] = 'Fehler beim Importieren';
$labels['aclnorights'] = 'Der Zugriff auf diesen Kalender erfordert Administrator-Rechte.';
+
+// recurrence form
$labels['repeat'] = 'Wiederholung';
$labels['frequency'] = 'Wiederholung';
$labels['never'] = 'nie';
@@ -179,7 +193,7 @@ $labels['daily'] = 'täglich';
$labels['weekly'] = 'wöchentlich';
$labels['monthly'] = 'monatlich';
$labels['yearly'] = 'jährlich';
-$labels['rdate'] = 'per Datum';
+$labels['rdate'] = 'on dates';
$labels['every'] = 'Alle';
$labels['days'] = 'Tag(e)';
$labels['weeks'] = 'Woche(n)';
@@ -199,7 +213,8 @@ $labels['third'] = 'dritter';
$labels['fourth'] = 'vierter';
$labels['last'] = 'letzter';
$labels['dayofmonth'] = 'Tag des Montats';
-$labels['addrdate'] = 'Datum hinzufügen';
+$labels['addrdate'] = 'Add repeat date';
+
$labels['changeeventconfirm'] = 'Termin ändern';
$labels['removeeventconfirm'] = 'Termin löschen';
$labels['changerecurringeventwarning'] = 'Dies ist eine Terminreihe. Möchten Sie nur den aktuellen, diesen und alle zukünftigen oder alle Termine bearbeiten oder die Ãnderungen als neuen Termin speichern?';
@@ -208,4 +223,13 @@ $labels['currentevent'] = 'Aktuellen';
$labels['futurevents'] = 'Zukünftige';
$labels['allevents'] = 'Alle';
$labels['saveasnew'] = 'Als neu speichern';
+
+// birthdays calendar
+$labels['birthdays'] = 'Geburtstage';
+$labels['birthdayscalendar'] = 'Geburtstags-Kalender';
+$labels['displaybirthdayscalendar'] = 'Geburtstags-Kalender anzeigen';
+$labels['birthdayscalendarsources'] = 'Für diese Adressbücher';
+$labels['birthdayeventtitle'] = '$names Geburtstag';
+$labels['birthdayage'] = 'Alter $age';
+
?>
diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc
index 340ff2e..990838e 100644
--- a/plugins/calendar/localization/en_US.inc
+++ b/plugins/calendar/localization/en_US.inc
@@ -66,6 +66,7 @@ $labels['public'] = 'public';
$labels['private'] = 'private';
$labels['confidential'] = 'confidential';
$labels['alarms'] = 'Reminder';
+$labels['comment'] = 'Comment';
$labels['generated'] = 'generated at';
$labels['printdescriptions'] = 'Print descriptions';
$labels['parentcalendar'] = 'Insert inside';
@@ -140,32 +141,19 @@ $labels['eventupdatemailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$atten
$labels['eventcancelsubject'] = '"$title" has been canceled';
$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
-$labels['itipinvitation'] = 'Invitation to';
-$labels['itipupdate'] = 'Update of';
-$labels['itipcancellation'] = 'Cancelled:';
-$labels['itipreply'] = 'Reply to';
-$labels['itipaccepted'] = 'Accept';
-$labels['itiptentative'] = 'Maybe';
-$labels['itipdeclined'] = 'Decline';
-$labels['itipsubjectaccepted'] = '"$title" has been accepted by $name';
-$labels['itipsubjecttentative'] = '"$title" has been tentatively accepted by $name';
-$labels['itipsubjectdeclined'] = '"$title" has been declined by $name';
+// 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['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['importtocalendar'] = 'Save to my calendar';
-$labels['removefromcalendar'] = 'Remove from my calendar';
-$labels['updateattendeestatus'] = 'Update the participant\'s status';
-$labels['acceptinvitation'] = 'Do you accept this invitation?';
-$labels['youhaveaccepted'] = 'You have accepted this invitation';
-$labels['youhavetentative'] = 'You have tentatively accepted this invitation';
-$labels['youhavedeclined'] = 'You have declined this invitation';
+
$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';
// event dialog tabs
$labels['tabsummary'] = 'Summary';
@@ -175,6 +163,7 @@ $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?';
diff --git a/plugins/calendar/localization/es_ES.inc b/plugins/calendar/localization/es_ES.inc
index 2a09b06..47947a0 100644
--- a/plugins/calendar/localization/es_ES.inc
+++ b/plugins/calendar/localization/es_ES.inc
@@ -1,12 +1,252 @@
<?php
+
+$labels = array();
+
+// preferences
+$labels['default_view'] = 'Default view';
+$labels['time_format'] = 'Time format';
+$labels['timeslots'] = 'Time slots per hour';
+$labels['first_day'] = 'First weekday';
+$labels['first_hour'] = 'First hour to show';
+$labels['workinghours'] = 'Working hours';
+$labels['add_category'] = 'Add category';
+$labels['remove_category'] = 'Remove category';
+$labels['defaultcalendar'] = 'Create new events in';
+$labels['eventcoloring'] = 'Event coloring';
+$labels['coloringmode0'] = 'According to calendar';
+$labels['coloringmode1'] = 'According to category';
+$labels['coloringmode2'] = 'Calendar for outline, category for content';
+$labels['coloringmode3'] = 'Category for outline, calendar for content';
+
+// calendar
+$labels['calendar'] = 'Calendar';
$labels['calendars'] = 'Calendarios';
+$labels['category'] = 'Category';
+$labels['categories'] = 'Categories';
+$labels['createcalendar'] = 'Create new calendar';
+$labels['editcalendar'] = 'Edit calendar properties';
$labels['name'] = 'Nombre';
+$labels['color'] = 'Color';
+$labels['day'] = 'Day';
+$labels['week'] = 'Week';
+$labels['month'] = 'Month';
+$labels['agenda'] = 'Agenda';
+$labels['new'] = 'New';
+$labels['new_event'] = 'New event';
+$labels['edit_event'] = 'Edit event';
$labels['edit'] = 'Editar';
$labels['save'] = 'Guardar';
+$labels['remove'] = 'Remove';
$labels['cancel'] = 'Cancelar';
+$labels['select'] = 'Select';
+$labels['print'] = 'Print';
+$labels['printtitle'] = 'Print calendars';
+$labels['title'] = 'Summary';
$labels['description'] = 'Descripción';
+$labels['all-day'] = 'all-day';
+$labels['export'] = 'Export';
+$labels['exporttitle'] = 'Export to iCalendar';
+$labels['exportrange'] = 'Events from';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
+$labels['location'] = 'Location';
+$labels['url'] = 'URL';
+$labels['date'] = 'Date';
+$labels['start'] = 'Start';
+$labels['end'] = 'End';
+$labels['selectdate'] = 'Choose date';
+$labels['freebusy'] = 'Show me as';
+$labels['free'] = 'Free';
+$labels['busy'] = 'Busy';
+$labels['outofoffice'] = 'Out of Office';
+$labels['tentative'] = 'Tentative';
+$labels['priority'] = 'Priority';
+$labels['sensitivity'] = 'Privacy';
+$labels['public'] = 'public';
+$labels['private'] = 'private';
+$labels['confidential'] = 'confidential';
+$labels['alarms'] = 'Reminder';
+$labels['generated'] = 'generated at';
+$labels['printdescriptions'] = 'Print descriptions';
+$labels['parentcalendar'] = 'Insert inside';
+$labels['searchearlierdates'] = '« Search for earlier events';
+$labels['searchlaterdates'] = 'Search for later events »';
+$labels['andnmore'] = '$nr more...';
+$labels['togglerole'] = 'Click to toggle role';
+$labels['createfrommail'] = 'Save as event';
+$labels['importevents'] = 'Import events';
+$labels['importrange'] = 'Events from';
+$labels['onemonthback'] = '1 month back';
+$labels['nmonthsback'] = '$nr months back';
+$labels['showurl'] = 'Show calendar URL';
+$labels['showurldescription'] = 'Use the following address to access (read only) your calendar from other applications. You can copy and paste this into any calendar software that supports the iCal format.';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// 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['thismonth'] = 'This month';
+$labels['nextmonth'] = 'Next month';
+$labels['weekofyear'] = 'Week';
+$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'] = 'Rol';
+$labels['availability'] = 'Avail.';
+$labels['confirmstate'] = 'Status';
+$labels['addattendee'] = 'Add participant';
+$labels['roleorganizer'] = 'Organizer';
$labels['rolerequired'] = 'Requerido';
$labels['roleoptional'] = 'Opcional';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Grupo';
+$labels['cutyperesource'] = 'Recurso';
+$labels['cutyperoom'] = 'Room';
+$labels['availfree'] = 'Free';
+$labels['availbusy'] = 'Busy';
+$labels['availunknown'] = 'Unknown';
+$labels['availtentative'] = 'Tentative';
+$labels['availoutofoffice'] = 'Out of Office';
+$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['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 canceled';
+$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
+$labels['itipinvitation'] = 'Invitation to';
+$labels['itipupdate'] = 'Update of';
+$labels['itipcancellation'] = 'Cancelled:';
+$labels['itipreply'] = 'Reply to';
+$labels['itipaccepted'] = 'Accept';
+$labels['itiptentative'] = 'Maybe';
+$labels['itipdeclined'] = 'Decline';
+$labels['itipsubjectaccepted'] = '"$title" has been accepted by $name';
+$labels['itipsubjecttentative'] = '"$title" has been tentatively accepted by $name';
+$labels['itipsubjectdeclined'] = '"$title" has been declined by $name';
+$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['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['importtocalendar'] = 'Save to my calendar';
+$labels['removefromcalendar'] = 'Remove from my calendar';
+$labels['updateattendeestatus'] = 'Update the participant\'s status';
+$labels['acceptinvitation'] = 'Do you accept this invitation?';
+$labels['youhaveaccepted'] = 'You have accepted this invitation';
+$labels['youhavetentative'] = 'You have tentatively accepted this invitation';
+$labels['youhavedeclined'] = 'You have declined this invitation';
+$labels['notanattendee'] = 'You\'re not listed as an attendee of this event';
+$labels['eventcancelled'] = 'The event has been cancelled';
+$labels['saveincalendar'] = 'save in';
+
+// event dialog tabs
+$labels['tabsummary'] = 'Summary';
+$labels['tabrecurrence'] = 'Recurrence';
+$labels['tabattendees'] = 'Participants';
+$labels['tabattachments'] = 'Attachments';
+$labels['tabsharing'] = 'Sharing';
+
+// messages
+$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'] = 'Guardando datos...';
+$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['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['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.';
+
+// recurrence form
+$labels['repeat'] = 'Repeat';
+$labels['frequency'] = 'Repeat';
+$labels['never'] = 'never';
+$labels['daily'] = 'daily';
+$labels['weekly'] = 'weekly';
+$labels['monthly'] = 'monthly';
+$labels['yearly'] = 'annually';
+$labels['rdate'] = 'on dates';
+$labels['every'] = 'Every';
+$labels['days'] = 'day(s)';
+$labels['weeks'] = 'week(s)';
+$labels['months'] = 'month(s)';
+$labels['years'] = 'year(s) in:';
+$labels['bydays'] = 'On';
+$labels['untildate'] = 'the';
+$labels['each'] = 'Each';
+$labels['onevery'] = 'On every';
+$labels['onsamedate'] = 'On the same date';
+$labels['forever'] = 'forever';
+$labels['recurrencend'] = 'until';
+$labels['forntimes'] = 'for $nr time(s)';
+$labels['first'] = 'first';
+$labels['second'] = 'second';
+$labels['third'] = 'third';
+$labels['fourth'] = 'fourth';
+$labels['last'] = 'last';
+$labels['dayofmonth'] = 'Day of month';
+$labels['addrdate'] = 'Add repeat date';
+
+$labels['changeeventconfirm'] = 'Change event';
+$labels['removeeventconfirm'] = 'Remove 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 remove the current event only, this and all future occurences or all occurences of this event?';
+$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';
+
?>
diff --git a/plugins/calendar/localization/et_EE.inc b/plugins/calendar/localization/et_EE.inc
index 6aab13a..0c9a073 100644
--- a/plugins/calendar/localization/et_EE.inc
+++ b/plugins/calendar/localization/et_EE.inc
@@ -1,5 +1,252 @@
<?php
+
+$labels = array();
+
+// preferences
+$labels['default_view'] = 'Default view';
+$labels['time_format'] = 'Time format';
+$labels['timeslots'] = 'Time slots per hour';
+$labels['first_day'] = 'First weekday';
+$labels['first_hour'] = 'First hour to show';
+$labels['workinghours'] = 'Working hours';
+$labels['add_category'] = 'Add category';
+$labels['remove_category'] = 'Remove category';
+$labels['defaultcalendar'] = 'Create new events in';
+$labels['eventcoloring'] = 'Event coloring';
+$labels['coloringmode0'] = 'According to calendar';
+$labels['coloringmode1'] = 'According to category';
+$labels['coloringmode2'] = 'Calendar for outline, category for content';
+$labels['coloringmode3'] = 'Category for outline, calendar for content';
+
+// calendar
+$labels['calendar'] = 'Calendar';
+$labels['calendars'] = 'Calendars';
+$labels['category'] = 'Category';
+$labels['categories'] = 'Categories';
+$labels['createcalendar'] = 'Create new calendar';
+$labels['editcalendar'] = 'Edit calendar properties';
$labels['name'] = 'Nimi';
+$labels['color'] = 'Color';
+$labels['day'] = 'Day';
+$labels['week'] = 'Week';
+$labels['month'] = 'Month';
+$labels['agenda'] = 'Agenda';
+$labels['new'] = 'New';
+$labels['new_event'] = 'New event';
+$labels['edit_event'] = 'Edit event';
+$labels['edit'] = 'Edit';
$labels['save'] = 'Salvesta';
+$labels['remove'] = 'Remove';
+$labels['cancel'] = 'Cancel';
+$labels['select'] = 'Select';
+$labels['print'] = 'Print';
+$labels['printtitle'] = 'Print calendars';
+$labels['title'] = 'Summary';
+$labels['description'] = 'Description';
+$labels['all-day'] = 'all-day';
+$labels['export'] = 'Export';
+$labels['exporttitle'] = 'Export to iCalendar';
+$labels['exportrange'] = 'Events from';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
+$labels['location'] = 'Location';
+$labels['url'] = 'URL';
+$labels['date'] = 'Date';
+$labels['start'] = 'Start';
+$labels['end'] = 'End';
+$labels['selectdate'] = 'Choose date';
+$labels['freebusy'] = 'Show me as';
+$labels['free'] = 'Free';
+$labels['busy'] = 'Busy';
+$labels['outofoffice'] = 'Out of Office';
+$labels['tentative'] = 'Tentative';
+$labels['priority'] = 'Priority';
+$labels['sensitivity'] = 'Privacy';
+$labels['public'] = 'public';
+$labels['private'] = 'private';
+$labels['confidential'] = 'confidential';
+$labels['alarms'] = 'Reminder';
+$labels['generated'] = 'generated at';
+$labels['printdescriptions'] = 'Print descriptions';
+$labels['parentcalendar'] = 'Insert inside';
+$labels['searchearlierdates'] = '« Search for earlier events';
+$labels['searchlaterdates'] = 'Search for later events »';
+$labels['andnmore'] = '$nr more...';
+$labels['togglerole'] = 'Click to toggle role';
+$labels['createfrommail'] = 'Save as event';
+$labels['importevents'] = 'Import events';
+$labels['importrange'] = 'Events from';
+$labels['onemonthback'] = '1 month back';
+$labels['nmonthsback'] = '$nr months back';
+$labels['showurl'] = 'Show calendar URL';
+$labels['showurldescription'] = 'Use the following address to access (read only) your calendar from other applications. You can copy and paste this into any calendar software that supports the iCal format.';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// 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['thismonth'] = 'This month';
+$labels['nextmonth'] = 'Next month';
+$labels['weekofyear'] = 'Week';
+$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'] = 'Status';
+$labels['addattendee'] = 'Add participant';
+$labels['roleorganizer'] = 'Organizer';
$labels['rolerequired'] = 'Kohustuslik';
+$labels['roleoptional'] = 'Optional';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Group';
+$labels['cutyperesource'] = 'Resource';
+$labels['cutyperoom'] = 'Room';
+$labels['availfree'] = 'Free';
+$labels['availbusy'] = 'Busy';
+$labels['availunknown'] = 'Unknown';
+$labels['availtentative'] = 'Tentative';
+$labels['availoutofoffice'] = 'Out of Office';
+$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['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 canceled';
+$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
+$labels['itipinvitation'] = 'Invitation to';
+$labels['itipupdate'] = 'Update of';
+$labels['itipcancellation'] = 'Cancelled:';
+$labels['itipreply'] = 'Reply to';
+$labels['itipaccepted'] = 'Accept';
+$labels['itiptentative'] = 'Maybe';
+$labels['itipdeclined'] = 'Decline';
+$labels['itipsubjectaccepted'] = '"$title" has been accepted by $name';
+$labels['itipsubjecttentative'] = '"$title" has been tentatively accepted by $name';
+$labels['itipsubjectdeclined'] = '"$title" has been declined by $name';
+$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['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['importtocalendar'] = 'Save to my calendar';
+$labels['removefromcalendar'] = 'Remove from my calendar';
+$labels['updateattendeestatus'] = 'Update the participant\'s status';
+$labels['acceptinvitation'] = 'Do you accept this invitation?';
+$labels['youhaveaccepted'] = 'You have accepted this invitation';
+$labels['youhavetentative'] = 'You have tentatively accepted this invitation';
+$labels['youhavedeclined'] = 'You have declined this invitation';
+$labels['notanattendee'] = 'You\'re not listed as an attendee of this event';
+$labels['eventcancelled'] = 'The event has been cancelled';
+$labels['saveincalendar'] = 'save in';
+
+// event dialog tabs
+$labels['tabsummary'] = 'Summary';
+$labels['tabrecurrence'] = 'Recurrence';
+$labels['tabattendees'] = 'Participants';
+$labels['tabattachments'] = 'Attachments';
+$labels['tabsharing'] = 'Sharing';
+
+// messages
+$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['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['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.';
+
+// recurrence form
+$labels['repeat'] = 'Repeat';
+$labels['frequency'] = 'Repeat';
+$labels['never'] = 'never';
+$labels['daily'] = 'daily';
+$labels['weekly'] = 'weekly';
+$labels['monthly'] = 'monthly';
+$labels['yearly'] = 'annually';
+$labels['rdate'] = 'on dates';
+$labels['every'] = 'Every';
+$labels['days'] = 'day(s)';
+$labels['weeks'] = 'week(s)';
+$labels['months'] = 'month(s)';
+$labels['years'] = 'year(s) in:';
+$labels['bydays'] = 'On';
+$labels['untildate'] = 'the';
+$labels['each'] = 'Each';
+$labels['onevery'] = 'On every';
+$labels['onsamedate'] = 'On the same date';
+$labels['forever'] = 'forever';
+$labels['recurrencend'] = 'until';
+$labels['forntimes'] = 'for $nr time(s)';
+$labels['first'] = 'first';
+$labels['second'] = 'second';
+$labels['third'] = 'third';
+$labels['fourth'] = 'fourth';
+$labels['last'] = 'last';
+$labels['dayofmonth'] = 'Day of month';
+$labels['addrdate'] = 'Add repeat date';
+
+$labels['changeeventconfirm'] = 'Change event';
+$labels['removeeventconfirm'] = 'Remove 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 remove the current event only, this and all future occurences or all occurences of this event?';
+$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';
+
?>
diff --git a/plugins/calendar/localization/fr_FR.inc b/plugins/calendar/localization/fr_FR.inc
index 37f8dd9..ed367aa 100644
--- a/plugins/calendar/localization/fr_FR.inc
+++ b/plugins/calendar/localization/fr_FR.inc
@@ -1,7 +1,11 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'Vue par défaut';
$labels['time_format'] = 'Format de l\'heure';
-$labels['timeslots'] = 'Nombre d\'intervalle par heure';
+$labels['timeslots'] = 'Time slots per hour';
$labels['first_day'] = 'Premier jour de la semaine';
$labels['first_hour'] = 'Première heure à afficher';
$labels['workinghours'] = 'Heures de travail';
@@ -13,6 +17,8 @@ $labels['coloringmode0'] = 'Selon l\'agenda';
$labels['coloringmode1'] = 'Selon la catégorie';
$labels['coloringmode2'] = 'Calendrier en contour, catégorie en contenu';
$labels['coloringmode3'] = 'Catégorie en contour, calendrier en contenu';
+
+// calendar
$labels['calendar'] = 'Agenda';
$labels['calendars'] = 'Agendas';
$labels['category'] = 'Catégorie';
@@ -40,7 +46,11 @@ $labels['description'] = 'Description';
$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['customdate'] = 'Custom date';
$labels['location'] = 'Lieu';
+$labels['url'] = 'URL';
$labels['date'] = 'Date';
$labels['start'] = 'Début';
$labels['end'] = 'Fin';
@@ -70,6 +80,9 @@ $labels['onemonthback'] = '1 mois précédent';
$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 <a href="http://fr.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> pour synchroniser ce calendrier avec votre ordinateur ou votre smartphone.';
+
+// agenda view
$labels['listrange'] = 'Intervalle à afficher :';
$labels['listsections'] = 'Diviser en :';
$labels['smartsections'] = 'Section intelligente';
@@ -83,9 +96,13 @@ $labels['nextmonth'] = 'Mois prochain';
$labels['weekofyear'] = 'Semaine';
$labels['pastevents'] = 'Passé';
$labels['futureevents'] = 'Futur';
-$labels['showalarms'] = 'Afficher les alarmes';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Afficher les rappels';
$labels['defaultalarmtype'] = 'Paramètre de rappel par défaut';
$labels['defaultalarmoffset'] = 'Durée de rappel par défaut';
+
+// attendees
$labels['attendee'] = 'Participant';
$labels['role'] = 'Rôle';
$labels['availability'] = 'Dispo.';
@@ -94,6 +111,12 @@ $labels['addattendee'] = 'Ajouter participant';
$labels['roleorganizer'] = 'Organisateur';
$labels['rolerequired'] = 'Requis';
$labels['roleoptional'] = 'Optionel';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Groupe';
+$labels['cutyperesource'] = 'Ressource';
+$labels['cutyperoom'] = 'Room';
$labels['availfree'] = 'Disponible';
$labels['availbusy'] = 'Occupé';
$labels['availunknown'] = 'Inconnu';
@@ -108,7 +131,7 @@ $labels['reqallattendees'] = 'Demandé/tous';
$labels['prevslot'] = 'Créneau précédent';
$labels['nextslot'] = 'Créneau suivant';
$labels['noslotfound'] = 'Impossible de trouver un créneau disponible';
-$labels['invitationsubject'] = 'Vous avez invité à "$title"';
+$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['eventupdatesubject'] = '"$title" a été modifié';
@@ -116,37 +139,28 @@ $labels['eventupdatesubjectempty'] = 'Un évènement vous concernant a été mod
$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['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 agenda électronique.";
-$labels['itipinvitation'] = 'Invitation à ';
-$labels['itipupdate'] = 'Mise à jour de';
-$labels['itipcancellation'] = 'Annulation:';
-$labels['itipreply'] = 'Répondre à ';
-$labels['itipaccepted'] = 'Accepter';
-$labels['itiptentative'] = 'Peut-être';
-$labels['itipdeclined'] = 'Refuser';
-$labels['itipsubjectaccepted'] = '"$title" a été accepté par $name';
-$labels['itipsubjecttentative'] = '"$title" a été accepté provisoirement par $name';
-$labels['itipsubjectdeclined'] = '"$title" a été refusé par $name';
+
+// invitation handling
$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['itipdeclineevent'] = 'Voulez-vous refuser l\'invitation à cet évènement?';
-$labels['importtocalendar'] = 'Enregistrer mon agenda';
-$labels['removefromcalendar'] = 'Supprimer de mon agenda';
-$labels['updateattendeestatus'] = 'Modifier le statut des participants';
-$labels['acceptinvitation'] = 'Acceptez-vous cette invitation?';
-$labels['youhaveaccepted'] = 'Vous avez accepté cette invitation';
-$labels['youhavetentative'] = 'Vous avez accepté provisoirement cette invitation';
-$labels['youhavedeclined'] = 'Vous avez refusé cette invitation';
+$labels['declinedeleteconfirm'] = 'Voulez-vous aussi supprimer cet évènement annulé, de votre calendrier ?';
$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';
+
+// event dialog tabs
$labels['tabsummary'] = 'Résumé';
$labels['tabrecurrence'] = 'Récurrence';
$labels['tabattendees'] = 'Participants';
$labels['tabattachments'] = 'Pièces jointes';
$labels['tabsharing'] = 'Partage';
+
+// messages
$labels['deleteventconfirm'] = 'Voulez-vous vraiment supprimer cet évènement?';
$labels['deletecalendarconfirm'] = 'Voulez-vous vraiment supprimer cet agenda et tous ses évènements?';
+$labels['deletecalendarconfirmrecursive'] = 'Do you really want to delete this calendar with all its events and sub-calendars?';
$labels['savingdata'] = 'Enregistrer...';
$labels['errorsaving'] = 'Ãchec lors de l\'enregistrement des changements';
$labels['operationfailed'] = 'L\'opération demandée a échoué';
@@ -165,10 +179,13 @@ $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'] = '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'] = '$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.';
+
+// recurrence form
$labels['repeat'] = 'Répéter';
$labels['frequency'] = 'Répéter';
$labels['never'] = 'Jamais';
@@ -176,6 +193,7 @@ $labels['daily'] = 'Quotidienne';
$labels['weekly'] = 'Hebdomadaire';
$labels['monthly'] = 'Mensuelle';
$labels['yearly'] = 'Annuelle';
+$labels['rdate'] = 'on dates';
$labels['every'] = 'Tous les';
$labels['days'] = 'jour(s)';
$labels['weeks'] = 'semaine(s)';
@@ -195,6 +213,8 @@ $labels['third'] = 'troisième';
$labels['fourth'] = 'quatrième';
$labels['last'] = 'dernier';
$labels['dayofmonth'] = 'Jour du mois';
+$labels['addrdate'] = 'Add repeat date';
+
$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? ';
@@ -203,4 +223,13 @@ $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';
+
+// 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';
+
?>
diff --git a/plugins/calendar/localization/hu_HU.inc b/plugins/calendar/localization/hu_HU.inc
index 9a8f780..d34f763 100644
--- a/plugins/calendar/localization/hu_HU.inc
+++ b/plugins/calendar/localization/hu_HU.inc
@@ -1,21 +1,252 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'Alap nézet';
$labels['time_format'] = 'Idõ formátum';
-$labels['timeslots'] = 'Idõrés óránként';
+$labels['timeslots'] = 'Time slots per hour';
$labels['first_day'] = 'A hét elsõ napja';
+$labels['first_hour'] = 'First hour to show';
+$labels['workinghours'] = 'Working hours';
+$labels['add_category'] = 'Add category';
+$labels['remove_category'] = 'Remove category';
+$labels['defaultcalendar'] = 'Create new events in';
+$labels['eventcoloring'] = 'Event coloring';
+$labels['coloringmode0'] = 'According to calendar';
+$labels['coloringmode1'] = 'According to category';
+$labels['coloringmode2'] = 'Calendar for outline, category for content';
+$labels['coloringmode3'] = 'Category for outline, calendar for content';
+
+// calendar
$labels['calendar'] = 'Naptár';
+$labels['calendars'] = 'Calendars';
$labels['category'] = 'Kategória';
+$labels['categories'] = 'Categories';
+$labels['createcalendar'] = 'Create new calendar';
+$labels['editcalendar'] = 'Edit calendar properties';
+$labels['name'] = 'Name';
+$labels['color'] = 'Color';
$labels['day'] = 'Nap';
$labels['week'] = 'Hét';
$labels['month'] = 'Hónap';
+$labels['agenda'] = 'Agenda';
+$labels['new'] = 'New';
$labels['new_event'] = 'Ãj bejegyzés';
$labels['edit_event'] = 'Bejegyzés szerkesztése';
+$labels['edit'] = 'Edit';
$labels['save'] = 'Mentés';
$labels['remove'] = 'Törlés';
$labels['cancel'] = 'Mégse';
+$labels['select'] = 'Select';
+$labels['print'] = 'Print';
+$labels['printtitle'] = 'Print calendars';
$labels['title'] = 'Tárgy';
$labels['description'] = 'LeÃrás';
$labels['all-day'] = 'Egész nap';
$labels['export'] = 'Exportálás ICS formátumba';
+$labels['exporttitle'] = 'Export to iCalendar';
+$labels['exportrange'] = 'Events from';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
+$labels['location'] = 'Location';
+$labels['url'] = 'URL';
+$labels['date'] = 'Date';
+$labels['start'] = 'Start';
+$labels['end'] = 'End';
+$labels['selectdate'] = 'Choose date';
+$labels['freebusy'] = 'Show me as';
+$labels['free'] = 'Free';
+$labels['busy'] = 'Busy';
+$labels['outofoffice'] = 'Out of Office';
+$labels['tentative'] = 'Tentative';
+$labels['priority'] = 'Priority';
+$labels['sensitivity'] = 'Privacy';
+$labels['public'] = 'public';
+$labels['private'] = 'private';
+$labels['confidential'] = 'confidential';
+$labels['alarms'] = 'Reminder';
+$labels['generated'] = 'generated at';
+$labels['printdescriptions'] = 'Print descriptions';
+$labels['parentcalendar'] = 'Insert inside';
+$labels['searchearlierdates'] = '« Search for earlier events';
+$labels['searchlaterdates'] = 'Search for later events »';
+$labels['andnmore'] = '$nr more...';
+$labels['togglerole'] = 'Click to toggle role';
+$labels['createfrommail'] = 'Save as event';
+$labels['importevents'] = 'Import events';
+$labels['importrange'] = 'Events from';
+$labels['onemonthback'] = '1 month back';
+$labels['nmonthsback'] = '$nr months back';
+$labels['showurl'] = 'Show calendar URL';
+$labels['showurldescription'] = 'Use the following address to access (read only) your calendar from other applications. You can copy and paste this into any calendar software that supports the iCal format.';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// 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['thismonth'] = 'This month';
+$labels['nextmonth'] = 'Next month';
+$labels['weekofyear'] = 'Week';
+$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'] = 'Status';
+$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'] = 'Free';
+$labels['availbusy'] = 'Busy';
+$labels['availunknown'] = 'Unknown';
+$labels['availtentative'] = 'Tentative';
+$labels['availoutofoffice'] = 'Out of Office';
+$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['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 canceled';
+$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
+$labels['itipinvitation'] = 'Invitation to';
+$labels['itipupdate'] = 'Update of';
+$labels['itipcancellation'] = 'Cancelled:';
+$labels['itipreply'] = 'Reply to';
+$labels['itipaccepted'] = 'Accept';
+$labels['itiptentative'] = 'Maybe';
+$labels['itipdeclined'] = 'Decline';
+$labels['itipsubjectaccepted'] = '"$title" has been accepted by $name';
+$labels['itipsubjecttentative'] = '"$title" has been tentatively accepted by $name';
+$labels['itipsubjectdeclined'] = '"$title" has been declined by $name';
+$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['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['importtocalendar'] = 'Save to my calendar';
+$labels['removefromcalendar'] = 'Remove from my calendar';
+$labels['updateattendeestatus'] = 'Update the participant\'s status';
+$labels['acceptinvitation'] = 'Do you accept this invitation?';
+$labels['youhaveaccepted'] = 'You have accepted this invitation';
+$labels['youhavetentative'] = 'You have tentatively accepted this invitation';
+$labels['youhavedeclined'] = 'You have declined this invitation';
+$labels['notanattendee'] = 'You\'re not listed as an attendee of this event';
+$labels['eventcancelled'] = 'The event has been cancelled';
+$labels['saveincalendar'] = 'save in';
+
+// event dialog tabs
$labels['tabsummary'] = 'Tárgy';
+$labels['tabrecurrence'] = 'Recurrence';
+$labels['tabattendees'] = 'Participants';
+$labels['tabattachments'] = 'Attachments';
+$labels['tabsharing'] = 'Sharing';
+
+// messages
+$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['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['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.';
+
+// recurrence form
+$labels['repeat'] = 'Repeat';
+$labels['frequency'] = 'Repeat';
+$labels['never'] = 'never';
+$labels['daily'] = 'daily';
+$labels['weekly'] = 'weekly';
+$labels['monthly'] = 'monthly';
+$labels['yearly'] = 'annually';
+$labels['rdate'] = 'on dates';
+$labels['every'] = 'Every';
+$labels['days'] = 'day(s)';
+$labels['weeks'] = 'week(s)';
+$labels['months'] = 'month(s)';
+$labels['years'] = 'year(s) in:';
+$labels['bydays'] = 'On';
+$labels['untildate'] = 'the';
+$labels['each'] = 'Each';
+$labels['onevery'] = 'On every';
+$labels['onsamedate'] = 'On the same date';
+$labels['forever'] = 'forever';
+$labels['recurrencend'] = 'until';
+$labels['forntimes'] = 'for $nr time(s)';
+$labels['first'] = 'first';
+$labels['second'] = 'second';
+$labels['third'] = 'third';
+$labels['fourth'] = 'fourth';
+$labels['last'] = 'last';
+$labels['dayofmonth'] = 'Day of month';
+$labels['addrdate'] = 'Add repeat date';
+
+$labels['changeeventconfirm'] = 'Change event';
+$labels['removeeventconfirm'] = 'Remove 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 remove the current event only, this and all future occurences or all occurences of this event?';
+$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';
+
?>
diff --git a/plugins/calendar/localization/it_IT.inc b/plugins/calendar/localization/it_IT.inc
index 303fe21..c38e4cc 100644
--- a/plugins/calendar/localization/it_IT.inc
+++ b/plugins/calendar/localization/it_IT.inc
@@ -1,21 +1,235 @@
<?php
-$labels['default_view'] = 'Visualizzazine di default';
+
+$labels = array();
+
+// preferences
+$labels['default_view'] = 'Visualizzazione predefinita';
$labels['time_format'] = 'Formato ora';
$labels['timeslots'] = 'Timeslots per ora';
$labels['first_day'] = 'Inizio settimana';
+$labels['first_hour'] = 'Prima ora da mostrare';
+$labels['workinghours'] = 'Orario lavorativo';
+$labels['add_category'] = 'Aggiungi categoria';
+$labels['remove_category'] = 'Rimuovi categoria';
+$labels['defaultcalendar'] = 'Crea nuovi eventi in';
+$labels['eventcoloring'] = 'Colorazione evento';
+$labels['coloringmode0'] = 'Secondo il calendario';
+$labels['coloringmode1'] = 'Secondo la categoria';
+$labels['coloringmode2'] = 'Calendar for outline, category for content';
+$labels['coloringmode3'] = 'Category for outline, calendar for content';
+
+// calendar
$labels['calendar'] = 'Calendario';
+$labels['calendars'] = 'Calendari';
$labels['category'] = 'Categoria';
+$labels['categories'] = 'Categorie';
+$labels['createcalendar'] = 'Crea nuovo calendario';
+$labels['editcalendar'] = 'Modifica proprietà calendario';
+$labels['name'] = 'Nome';
+$labels['color'] = 'Colore';
$labels['day'] = 'Giorno';
$labels['week'] = 'Settimana';
$labels['month'] = 'Mese';
+$labels['agenda'] = 'Agenda';
+$labels['new'] = 'Nuovo';
$labels['new_event'] = 'Nuovo evento';
$labels['edit_event'] = 'Modifica evento';
+$labels['edit'] = 'Modifica';
$labels['save'] = 'Salva';
$labels['remove'] = 'Elimina';
$labels['cancel'] = 'Annulla';
+$labels['select'] = 'Seleziona';
+$labels['print'] = 'Stampa';
+$labels['printtitle'] = 'Stampa calendari';
$labels['title'] = 'Oggetto';
$labels['description'] = 'Descrizione';
-$labels['all-day'] = 'Giorno intero';
-$labels['export'] = 'Esporta in ICS';
-$labels['tabsummary'] = 'Oggetto';
+$labels['all-day'] = 'Tutto il giorno';
+$labels['export'] = 'Esporta';
+$labels['exporttitle'] = 'Esporta come iCalendar';
+$labels['exportrange'] = 'Eventi di';
+$labels['exportattachments'] = 'Con allegati';
+$labels['customdate'] = 'Data personalizzata';
+$labels['location'] = 'Luogo';
+$labels['url'] = 'URL';
+$labels['date'] = 'Data';
+$labels['start'] = 'Inizio';
+$labels['end'] = 'Fine';
+$labels['selectdate'] = 'Scegliere la data';
+$labels['freebusy'] = 'Mostrami come';
+$labels['free'] = 'Libero';
+$labels['busy'] = 'Occupato';
+$labels['outofoffice'] = 'Fuori Ufficio';
+$labels['tentative'] = 'Provvisorio';
+$labels['priority'] = 'Priorità ';
+$labels['sensitivity'] = 'Privacy';
+$labels['public'] = 'pubblico';
+$labels['private'] = 'privato';
+$labels['confidential'] = 'confidenziale';
+$labels['alarms'] = 'Promemoria';
+$labels['generated'] = 'generato il';
+$labels['printdescriptions'] = 'Stampa descrizioni';
+$labels['parentcalendar'] = 'Inserisci dentro';
+$labels['searchearlierdates'] = '« Cerca eventi precedenti';
+$labels['searchlaterdates'] = 'Cerca eventi successivi »';
+$labels['andnmore'] = 'Altri $nr...';
+$labels['togglerole'] = 'Fare clic per cambiare il ruolo';
+$labels['createfrommail'] = 'Salva come evento';
+$labels['importevents'] = 'Importa eventi';
+$labels['importrange'] = 'Eventi di';
+$labels['onemonthback'] = '1 mese prima';
+$labels['nmonthsback'] = '$nr mesi prima';
+$labels['showurl'] = 'Mostra URL calendario';
+$labels['showurldescription'] = 'Usare il seguente indirizzo per accedere (in sola lettura) al calendario da altre applicazioni. Ã possibile copiarlo e incollarlo in qualsiasi software che supporta il formato iCal.';
+$labels['caldavurldescription'] = 'Copiare questo indirizzo in un\'applicazione client <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> (es. Evolution o Mozilla Thunderbird) per sincronizzare completamente questo specifico calendario con il proprio computer o dispositivo mobile.';
+
+// agenda view
+$labels['listrange'] = 'Intervallo da visualizzare:';
+$labels['listsections'] = 'Dividi in:';
+$labels['smartsections'] = 'Sezioni intelligenti';
+$labels['until'] = 'fino a';
+$labels['today'] = 'Oggi';
+$labels['tomorrow'] = 'Domani';
+$labels['thisweek'] = 'Questa settimana';
+$labels['nextweek'] = 'Prossima settimana';
+$labels['thismonth'] = 'Questo mese';
+$labels['nextmonth'] = 'Prossimo mese';
+$labels['weekofyear'] = 'Settimana';
+$labels['pastevents'] = 'Passato';
+$labels['futureevents'] = 'Futuro';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Mostra promemoria';
+$labels['defaultalarmtype'] = 'Impostazioni predefinite dei promemoria';
+$labels['defaultalarmoffset'] = 'Tempo predefinito per i promemoria';
+
+// attendees
+$labels['attendee'] = 'Partecipante';
+$labels['role'] = 'Ruolo';
+$labels['availability'] = 'Dispon.';
+$labels['confirmstate'] = 'Stato';
+$labels['addattendee'] = 'Aggiungi partecipante';
+$labels['roleorganizer'] = 'Organizzatore';
+$labels['rolerequired'] = 'Necessario';
+$labels['roleoptional'] = 'Facoltativo';
+$labels['rolechair'] = 'Presidente';
+$labels['rolenonparticipant'] = 'Assente';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Gruppo';
+$labels['cutyperesource'] = 'Risorsa';
+$labels['cutyperoom'] = 'Stanza';
+$labels['availfree'] = 'Libero';
+$labels['availbusy'] = 'Occupato';
+$labels['availunknown'] = 'Sconosciuto';
+$labels['availtentative'] = 'Provvisorio';
+$labels['availoutofoffice'] = 'Fuori sede';
+$labels['scheduletime'] = 'Trova disponibilità ';
+$labels['sendinvitations'] = 'Manda inviti';
+$labels['sendnotifications'] = 'Notifica le modifiche ai partecipanti';
+$labels['sendcancellation'] = 'Notifica ai partecipanti la cancellazione dell\'evento';
+$labels['onlyworkinghours'] = 'Trova disponibilità durante le ore lavorative';
+$labels['reqallattendees'] = 'Necessario/tutti i partecipanti';
+$labels['prevslot'] = 'Spazio precedente';
+$labels['nextslot'] = 'Spazio successivo';
+$labels['noslotfound'] = 'Impossibile trovare uno spazio di tempo libero';
+$labels['invitationsubject'] = 'Sei stato invitato a "$title"';
+$labels['invitationmailbody'] = "*\$title*\n\nQuando: \$date\n\nInvitati: \$attendees\n\nIn allegato un file iCalendar con tutti i dettagli dell'evento, che puoi importare nella tua applicazione calendario.";
+$labels['invitationattendlinks'] = "Se il tuo client di posta elettronica non supporta le richieste iTip, puoi seguire il seguente collegamento per accettare o rifiutare l'invito:\n\$url";
+$labels['eventupdatesubject'] = '"$title" è stato aggiornato';
+$labels['eventupdatesubjectempty'] = 'Un evento che ti riguarda è stato aggiornato';
+$labels['eventupdatemailbody'] = "*\$title*\n\nQuando: \$date\n\nInvitati: \$attendees\n\nIn allegato un file iCalendar con i dettagli aggiornati dell'evento che puoi importare nella tua applicazione calendario.";
+$labels['eventcancelsubject'] = '"$title" è stato annullato';
+$labels['eventcancelmailbody'] = "*\$title*\n\nQuando: \$date\n\nInvitati: \$attendees\n\nL'evento è stato cancellato da \$organizer.\n\nIn allegato un file iCalendar con i dettagli aggiornati dell'evento .";
+
+// invitation handling
+$labels['itipmailbodyaccepted'] = "\$sender ha accettato l'invito al seguente evento:\n\n*\$title*\n\nQuando: \$date\n\nInvitati: \$attendees";
+$labels['itipmailbodytentative'] = "\$sender ha accettato con riserva l'invito al seguente evento:\n\n*\$title*\n\nQuando: \$date\n\nInvitati: \$attendees";
+$labels['itipmailbodydeclined'] = "\$sender ha rifiutato l'invito al seguente evento:\n\n*\$title*\n\nQuando: \$date\n\nInvitati: \$attendees";
+$labels['itipdeclineevent'] = 'Vuoi rifiutare l\'invito a questo evento?';
+$labels['declinedeleteconfirm'] = 'Vuoi anche cancellare dal calendario l\'evento rifiutato?';
+$labels['notanattendee'] = 'Non sei elencato tra i partecipanti a questo evento';
+$labels['eventcancelled'] = 'L\'evento è stato annullato';
+$labels['saveincalendar'] = 'salva in';
+
+// event dialog tabs
+$labels['tabsummary'] = 'Riepilogo';
+$labels['tabrecurrence'] = 'Ricorrenza';
+$labels['tabattendees'] = 'Partecipanti';
+$labels['tabattachments'] = 'Allegati';
+$labels['tabsharing'] = 'Condivisione';
+
+// messages
+$labels['deleteventconfirm'] = 'Cancellare davvero questo evento?';
+$labels['deletecalendarconfirm'] = 'Cancellare davvero questo calendario con tutti i suoi eventi?';
+$labels['deletecalendarconfirmrecursive'] = 'Vuoi veramente eliminare questo calendario con tutti i suoi eventi e i suoi sotto-calendari?';
+$labels['savingdata'] = 'Salvataggio dati...';
+$labels['errorsaving'] = 'Impossibile salvare le modifiche.';
+$labels['operationfailed'] = 'L\'operazione richiesta è fallita.';
+$labels['invalideventdates'] = 'Le date inserite non sono valide. Controllare l\'inserimento.';
+$labels['invalidcalendarproperties'] = 'Proprietà del calendario non valide. Impostare un nome valido.';
+$labels['searchnoresults'] = 'Nessun evento trovato nel calendario selezionato.';
+$labels['successremoval'] = 'L\'evento è stato cancellato correttamente.';
+$labels['successrestore'] = 'L\'evento è stato ripristinato correttamente.';
+$labels['errornotifying'] = 'Spedizione delle notifiche ai partecipanti dell\'evento fallita';
+$labels['errorimportingevent'] = 'Importazione evento fallita';
+$labels['newerversionexists'] = 'Esiste già una versione più recente di questo evento. Abortito.';
+$labels['nowritecalendarfound'] = 'Non c\'è nessun calendario dove salvare l\'evento';
+$labels['importedsuccessfully'] = 'Evento aggiunto correttamente a \'$calendar\'';
+$labels['attendeupdateesuccess'] = 'Stato dei partecipanti aggiornato correttamente';
+$labels['itipsendsuccess'] = 'Invito spedito ai partecipanti.';
+$labels['itipresponseerror'] = 'Spedizione della risposta all\'invito fallita';
+$labels['itipinvalidrequest'] = 'Questo invito non è più valido';
+$labels['sentresponseto'] = 'Risposta all\'invito inviata correttamente a $mailto';
+$labels['localchangeswarning'] = 'Stai per fare dei cambiamenti che compariranno solo nel tuo calendario e non saranno spediti all\'organizzatore dell\'evento.';
+$labels['importsuccess'] = '$nr eventi importati correttamente';
+$labels['importnone'] = 'Nessun evento trovato da importare';
+$labels['importerror'] = 'Si è verificato un errore durante l\'importazione';
+$labels['aclnorights'] = 'Non hai i diritti di amministratore per questo calendario.';
+
+// recurrence form
+$labels['repeat'] = 'Ricorrenza';
+$labels['frequency'] = 'Frequenza';
+$labels['never'] = 'una volta';
+$labels['daily'] = 'quotidiana';
+$labels['weekly'] = 'settimanale';
+$labels['monthly'] = 'mensile';
+$labels['yearly'] = 'annuale';
+$labels['rdate'] = 'on dates';
+$labels['every'] = 'Ogni';
+$labels['days'] = 'giorno/i';
+$labels['weeks'] = 'settimana/e';
+$labels['months'] = 'mese/i';
+$labels['years'] = 'anno/i in:';
+$labels['bydays'] = 'Di';
+$labels['untildate'] = 'il';
+$labels['each'] = 'Nei giorni';
+$labels['onevery'] = 'Ogni';
+$labels['onsamedate'] = 'Alla stessa data';
+$labels['forever'] = 'per sempre';
+$labels['recurrencend'] = 'fino al';
+$labels['forntimes'] = 'per $nr volte';
+$labels['first'] = 'primo';
+$labels['second'] = 'secondo';
+$labels['third'] = 'terzo';
+$labels['fourth'] = 'quarto';
+$labels['last'] = 'ultimo';
+$labels['dayofmonth'] = 'Giorno del mese';
+$labels['addrdate'] = 'Add repeat date';
+
+$labels['changeeventconfirm'] = 'Cambia evento';
+$labels['removeeventconfirm'] = 'Rimuovi evento';
+$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 remove the current event only, this and all future occurences or all occurences of this event?';
+$labels['currentevent'] = 'Current';
+$labels['futurevents'] = 'Futuro';
+$labels['allevents'] = 'Tutto';
+$labels['saveasnew'] = 'Salva come nuovo';
+
+// birthdays calendar
+$labels['birthdays'] = 'Compleanni';
+$labels['birthdayscalendar'] = 'Calendario compleanni';
+$labels['displaybirthdayscalendar'] = 'Mostra il calendario compleanni';
+$labels['birthdayscalendarsources'] = 'Da queste rubriche';
+$labels['birthdayeventtitle'] = 'Compleanno di $name';
+$labels['birthdayage'] = 'Età : $age anni';
+
?>
diff --git a/plugins/calendar/localization/ja_JP.inc b/plugins/calendar/localization/ja_JP.inc
index 2292853..46351bd 100644
--- a/plugins/calendar/localization/ja_JP.inc
+++ b/plugins/calendar/localization/ja_JP.inc
@@ -1,7 +1,11 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'ããã©ã«ããã¥ã¼';
$labels['time_format'] = 'æå»è¡¨ç¤ºå½¢å¼';
-$labels['timeslots'] = '1æéæ¯';
+$labels['timeslots'] = 'Time slots per hour';
$labels['first_day'] = 'æåã®å¹³æ¥';
$labels['first_hour'] = 'æåã®æéã表示';
$labels['workinghours'] = 'å´åæé';
@@ -13,6 +17,8 @@ $labels['coloringmode0'] = 'ã«ã¬ã³ãã¼ã®èª¬æ';
$labels['coloringmode1'] = 'ã«ãã´ãªã®èª¬æ';
$labels['coloringmode2'] = 'ã¢ã¦ãã©ã¤ã³ç¨ã«ã¬ã³ãã¼ãã³ã³ãã³ãç¨ã«ãã´ãª';
$labels['coloringmode3'] = 'ã¢ã¦ãã©ã¤ã³ç¨ã«ã¬ã³ãã¼ãã³ã³ãã³ãç¨ã«ãã´ãª';
+
+// calendar
$labels['calendar'] = 'ã«ã¬ã³ãã¼';
$labels['calendars'] = 'ã«ã¬ã³ãã¼';
$labels['category'] = 'ã«ãã´ãª';
@@ -40,7 +46,11 @@ $labels['description'] = '説æ';
$labels['all-day'] = 'å
¨æ¥';
$labels['export'] = 'ã¨ã¯ã¹ãã¼ã';
$labels['exporttitle'] = 'iã«ã¬ã³ãã¼ã¸ã¨ã¯ã¹ãã¼ã';
+$labels['exportrange'] = 'ã¤ãã³ãå
';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
$labels['location'] = 'å ´æ';
+$labels['url'] = 'URL';
$labels['date'] = 'ææ¥';
$labels['start'] = 'éå§';
$labels['end'] = 'çµäº';
@@ -70,6 +80,9 @@ $labels['onemonthback'] = '1 ã¶ææ»ã';
$labels['nmonthsback'] = '$nr ã¶ææ»ã';
$labels['showurl'] = 'ã«ã¬ã³ãã¼URL表示';
$labels['showurldescription'] = '以ä¸ã®ã¢ãã¬ã¹ã使ç¨ãã¦ä»ã®ã¢ããªã±ã¼ã·ã§ã³ããã«ã¬ã³ãã¼ã«ã¢ã¯ã»ã¹(èªè¾¼ã®ã¿)ã§ãã¾ããiCalå½¢å¼ããµãã¼ãããã«ã¬ã³ãã¼ã½ããã¦ã§ã¢ã¸ã³ãã¼ã¢ã³ããã¼ã¹ããã§ãã¾ãã';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// agenda view
$labels['listrange'] = '表示ç¯å²:';
$labels['listsections'] = 'åå²:';
$labels['smartsections'] = 'ã¹ãã¼ãã»ã¯ã·ã§ã³';
@@ -83,9 +96,13 @@ $labels['nextmonth'] = 'æ¥æ';
$labels['weekofyear'] = 'é±';
$labels['pastevents'] = '以å';
$labels['futureevents'] = '以é';
-$labels['showalarms'] = 'ã¢ã©ã¼ã 表示';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Show reminders';
$labels['defaultalarmtype'] = 'ããã©ã«ãéç¥è¨å®';
$labels['defaultalarmoffset'] = 'ããã©ã«ãéç¥æé';
+
+// attendees
$labels['attendee'] = 'åå è
';
$labels['role'] = 'ãã¼ã«';
$labels['availability'] = 'å©ç¨å¯';
@@ -94,6 +111,12 @@ $labels['addattendee'] = 'åå è
追å ';
$labels['roleorganizer'] = 'ç·¨æè
';
$labels['rolerequired'] = 'è¦ä»¶';
$labels['roleoptional'] = 'ãªãã·ã§ã³';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'ã°ã«ã¼ã';
+$labels['cutyperesource'] = 'ãªã½ã¼ã¹';
+$labels['cutyperoom'] = 'Room';
$labels['availfree'] = '空';
$labels['availbusy'] = 'ãã¸ã¼';
$labels['availunknown'] = 'ä¸æ';
@@ -116,37 +139,27 @@ $labels['eventupdatesubjectempty'] = 'ããªãã«é¢é£ããã¤ãã³ããæ´
$labels['eventupdatemailbody'] = "*\$title*\n\nãã¤: \$date\n\næå¾
è
: \$attendees\n\nããªãã®ã«ã¬ã³ãã¼ã¢ããªã±ã¼ã·ã§ã³ã«ã¤ã³ãã¼ãã§ããã¢ãããã¼ããããå
¨ã¤ãã³ãã®è©³ç´°ãæ·»ä»ãããiã«ã¬ã³ãã¼ãã¡ã¤ã«ãè¦ã¤ãã¦ãã ããã";
$labels['eventcancelsubject'] = '"$title" ã¯å¤æ´ããã¾ãã';
$labels['eventcancelmailbody'] = "*\$title*\n\nãã¤: \$date\n\næå¾
è
: \$attendees\n\nã¤ãã³ãã \$organizer ã«ãã£ã¦ãã£ã³ã»ã«ããã¾ããã\n\næ´æ°ãããã¤ãã³ãã®è©³ç´°ã¨ã¨ãã«æ·»ä»ãããiã«ã¬ã³ãã¼ãã¡ã¤ã«ãè¦ã¤ãã¦ãã ããã";
-$labels['itipinvitation'] = 'æå¾
ãã';
-$labels['itipupdate'] = 'æ´æ°';
-$labels['itipcancellation'] = 'ãã£ã³ã»ã«';
-$labels['itipreply'] = 'è¿ä¿¡';
-$labels['itipaccepted'] = 'æ¿è«¾';
-$labels['itiptentative'] = 'ãã¶ã';
-$labels['itipdeclined'] = 'è¾é';
-$labels['itipsubjectaccepted'] = '$name ã "$title" ãæ¿è«¾ãã¾ãã';
-$labels['itipsubjecttentative'] = '$name ã "$title" ãä»®æ¿è«¾ãã¾ãã';
-$labels['itipsubjectdeclined'] = '$name ã "$title" ãè¾éãã¾ãã';
+
+// invitation handling
$labels['itipmailbodyaccepted'] = "\$sender ã¯ä»¥ä¸ã®ã¤ãã³ãã¸ã®æå¾
ãæ¿è«¾ãã¾ãã:\n\n*\$title*\n\nãã¤: \$date\n\næå¾
è
: \$attendees";
$labels['itipmailbodytentative'] = "\$sender ã¯ä»¥ä¸ã®ã¤ãã³ãã¸ã®æå¾
ãä»®æ¿è«¾ãã¾ãã:\n\n*\$title*\n\nãã¤: \$date\n\næå¾
è
: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender ã¯ä»¥ä¸ã®ã¤ãã³ãã¸ã®æå¾
ãè¾éãã¾ãã:\n\n*\$title*\n\nãã¤: \$date\n\næå¾
è
: \$attendees";
$labels['itipdeclineevent'] = 'ãã®ã¤ãã³ãã¸ã®æå¾
ãè¾éãã¾ãã?';
-$labels['importtocalendar'] = 'ã«ã¬ã³ãã¼ã«ä¿å';
-$labels['removefromcalendar'] = 'ã«ã¬ã³ãã¼ããåé¤';
-$labels['updateattendeestatus'] = 'åå è
ã®ç¶æ³æ´æ°';
-$labels['acceptinvitation'] = 'ãã®æå¾
ãæ¿è«¾ãã¾ãã?';
-$labels['youhaveaccepted'] = 'ãã®æå¾
ãæ¿è«¾ãã¾ãã';
-$labels['youhavetentative'] = 'ãã®æå¾
ãä»®æ¿è«¾ãã¾ããã';
-$labels['youhavedeclined'] = 'ãã®æå¾
ãè¾éãã¾ããã';
-$labels['notanattendee'] = 'ãã®ã¤ãã³ãã®åºå¸è
ã¨ãã¦ä¸è¦§ã«ããã¾ãã';
+$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?';
$labels['eventcancelled'] = 'ãã®ã¤ãã³ãã¯ãã£ã³ã»ã«ããã¾ãã';
$labels['saveincalendar'] = 'ä¿å';
+
+// event dialog tabs
$labels['tabsummary'] = 'è¦ç´';
$labels['tabrecurrence'] = 'ç¹°è¿ã';
$labels['tabattendees'] = 'åå è
';
$labels['tabattachments'] = 'æ·»ä»';
$labels['tabsharing'] = 'å
±æ';
+
+// messages
$labels['deleteventconfirm'] = 'æ¬å½ã«ãã®ã¤ãã³ããåé¤ãã¾ãã?';
$labels['deletecalendarconfirm'] = 'æ¬å½ã«ãã®ã«ã¬ã³ãã¼ãå
¨ã¤ãã³ãã¨ã¨ãã«åé¤ãã¾ãã?';
+$labels['deletecalendarconfirmrecursive'] = 'Do you really want to delete this calendar with all its events and sub-calendars?';
$labels['savingdata'] = 'ãã¼ã¿ãä¿åä¸â¦';
$labels['errorsaving'] = 'å¤æ´ãä¿åã§ãã¾ããã§ããã';
$labels['operationfailed'] = 'è¦æ±ãããæä½ãã§ãã¾ããã§ããã';
@@ -165,10 +178,13 @@ $labels['itipsendsuccess'] = 'åºå¸è
ã¸æå¾
ãéä¿¡ãã¾ããã';
$labels['itipresponseerror'] = 'ãã®æå¾
ã®è¿ä¿¡ã§ãã¾ããã§ãã';
$labels['itipinvalidrequest'] = 'ãã®æå¾
ã¯éããªãç¡å¹ã«ãªãã¾ã';
$labels['sentresponseto'] = '$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'] = '$nr ã¤ãã³ããã¤ã³ãã¼ããã¾ãã';
$labels['importnone'] = 'ã¤ã³ãã¼ããããã¤ãã³ãã¯ããã¾ãã';
$labels['importerror'] = 'ã¤ã³ãã¼ãä¸ã«ã¨ã©ã¼ãçºçãã¾ããã';
$labels['aclnorights'] = 'ãã®ã«ã¬ã³ãã¼ã®ç®¡ç権éãããã¾ããã';
+
+// recurrence form
$labels['repeat'] = 'ç¹°è¿ã';
$labels['frequency'] = 'ç¹°è¿ã';
$labels['never'] = 'ç¹°è¿ããªã';
@@ -176,6 +192,7 @@ $labels['daily'] = 'æ¯æ¥';
$labels['weekly'] = 'æ¯é±';
$labels['monthly'] = 'æ¯æ';
$labels['yearly'] = 'æ¯å¹´';
+$labels['rdate'] = 'on dates';
$labels['every'] = 'ãã¤ã§ã';
$labels['days'] = 'æ¥(s)';
$labels['weeks'] = 'é±(s)';
@@ -195,6 +212,8 @@ $labels['third'] = '第3é±';
$labels['fourth'] = '第4é±';
$labels['last'] = 'æçµé±';
$labels['dayofmonth'] = 'æ¥';
+$labels['addrdate'] = 'Add repeat date';
+
$labels['changeeventconfirm'] = 'ã¤ãã³ãå¤æ´';
$labels['removeeventconfirm'] = 'ã¤ãã³ãåé¤';
$labels['changerecurringeventwarning'] = 'ããã¯ç¹°è¿ãã¤ãã³ãã§ããç¾å¨ã®ã¤ãã³ãã®ã¿ããã®ã¤ãã³ãã¨ä»å¾ã®å
¨ã¤ãã³ããå
¨ã¤ãã³ããç·¨éãããããããã¯æ°ããã¤ãã³ãã¨ãã¦ä¿åããã?';
@@ -203,4 +222,13 @@ $labels['currentevent'] = 'ç¾å¨';
$labels['futurevents'] = 'ä»å¾';
$labels['allevents'] = 'å
¨ã¦';
$labels['saveasnew'] = 'æ°è¦ä¿å';
+
+// 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';
+
?>
diff --git a/plugins/calendar/localization/nl_NL.inc b/plugins/calendar/localization/nl_NL.inc
index b377408..8161b3c 100644
--- a/plugins/calendar/localization/nl_NL.inc
+++ b/plugins/calendar/localization/nl_NL.inc
@@ -1,17 +1,24 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'Standaard agenda';
$labels['time_format'] = 'Tijdsformaat';
-$labels['timeslots'] = 'Timeslots per uur';
+$labels['timeslots'] = 'Time slots per hour';
$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['eventcoloring'] = 'Evenement kleuren';
+$labels['defaultcalendar'] = 'Maak nieuwe afspraken in';
+$labels['eventcoloring'] = 'Kleuren van afspraken';
$labels['coloringmode0'] = 'Volgens kalender';
$labels['coloringmode1'] = 'Volgens categorie';
$labels['coloringmode2'] = 'Kalender voor omtrek, categorie voor inhoud';
$labels['coloringmode3'] = 'Categorie voor omtrek, kalender voor inhoud';
+
+// calendar
$labels['calendar'] = 'Agenda';
$labels['calendars'] = 'Kalenders';
$labels['category'] = 'Categorie';
@@ -25,7 +32,7 @@ $labels['week'] = 'Week';
$labels['month'] = 'Maand';
$labels['agenda'] = 'Agenda';
$labels['new'] = 'Nieuw';
-$labels['new_event'] = 'Nieuw evenement';
+$labels['new_event'] = 'Nieuwe afspraak';
$labels['edit_event'] = 'Wijzig evenement';
$labels['edit'] = 'Wijzig';
$labels['save'] = 'Bewaar';
@@ -39,7 +46,11 @@ $labels['description'] = 'Beschrijving';
$labels['all-day'] = 'hele dag';
$labels['export'] = 'Exporteer naar ICS';
$labels['exporttitle'] = 'Als iCalender exporteren';
+$labels['exportrange'] = 'Events from';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
$labels['location'] = 'Locatie';
+$labels['url'] = 'URL';
$labels['date'] = 'Datum';
$labels['start'] = 'Begin';
$labels['end'] = 'Eind';
@@ -57,14 +68,24 @@ $labels['confidential'] = 'vertrouwelijk';
$labels['alarms'] = 'Herinnering';
$labels['generated'] = 'gegenereerd op';
$labels['printdescriptions'] = 'Print beschrijvingen';
+$labels['parentcalendar'] = 'Insert inside';
$labels['searchearlierdates'] = '« Zoek voor eerdere evenementen';
$labels['searchlaterdates'] = 'Zoek voor latere evenementen »';
$labels['andnmore'] = '$nr meer...';
+$labels['togglerole'] = 'Click to toggle role';
$labels['createfrommail'] = 'Bewaar als evenement';
$labels['importevents'] = 'Evenementen importeren';
+$labels['importrange'] = 'Events from';
$labels['onemonthback'] = '1 maand terug';
$labels['nmonthsback'] = '$nr maanden terug';
$labels['showurl'] = 'Toon kalender URL';
+$labels['showurldescription'] = 'Use the following address to access (read only) your calendar from other applications. You can copy and paste this into any calendar software that supports the iCal format.';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// agenda view
+$labels['listrange'] = 'Range to display:';
+$labels['listsections'] = 'Verdeel in:';
+$labels['smartsections'] = 'Smart sections';
$labels['until'] = 'tot';
$labels['today'] = 'Vandaag';
$labels['tomorrow'] = 'Morgen';
@@ -75,7 +96,13 @@ $labels['nextmonth'] = 'Volgende maand';
$labels['weekofyear'] = 'Week';
$labels['pastevents'] = 'Verleden';
$labels['futureevents'] = 'Toekomst';
-$labels['showalarms'] = 'Alarmen tonen';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Show reminders';
+$labels['defaultalarmtype'] = 'Standaard herinnering instelling';
+$labels['defaultalarmoffset'] = 'Standaard herinnering tijd';
+
+// attendees
$labels['attendee'] = 'Deelnemer';
$labels['role'] = 'Rol';
$labels['availability'] = 'Beschikb.';
@@ -84,6 +111,12 @@ $labels['addattendee'] = 'Deelnemer toevoegen';
$labels['roleorganizer'] = 'Organisatie';
$labels['rolerequired'] = 'Verplicht';
$labels['roleoptional'] = 'Optioneel';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Groep';
+$labels['cutyperesource'] = 'Middel';
+$labels['cutyperoom'] = 'Room';
$labels['availfree'] = 'Vrij';
$labels['availbusy'] = 'Bezig';
$labels['availunknown'] = 'Onbekend';
@@ -91,26 +124,69 @@ $labels['availtentative'] = 'Misschien';
$labels['availoutofoffice'] = 'Niet Aanwezig';
$labels['scheduletime'] = 'Vind beschikbaarheid';
$labels['sendinvitations'] = 'Verzend uitnodigingen';
-$labels['itipinvitation'] = 'Uitnodiging voor';
-$labels['itipupdate'] = 'Update van';
-$labels['itipcancellation'] = 'Afgelast:';
-$labels['itipaccepted'] = 'Accepteer';
-$labels['itiptentative'] = 'Misschien';
-$labels['itipdeclined'] = 'Afwijzen';
-$labels['importtocalendar'] = 'Bewaar in mijn kalender';
-$labels['removefromcalendar'] = 'Verwijder van mijn kalender';
-$labels['updateattendeestatus'] = 'Update status van deelnemer';
-$labels['acceptinvitation'] = 'Accepteer je deze uitnodiging?';
-$labels['youhaveaccepted'] = 'Je hebt de uitnodiging geaccepteerd';
-$labels['youhavedeclined'] = 'Je hebt deze uitnodiging afgewezen';
+$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['noslotfound'] = 'Unable to find a free time slot';
+$labels['invitationsubject'] = 'U bent uitgenodigd voor "$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" is bijgewerkt';
+$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" is geannuleerd';
+$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
+$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['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['notanattendee'] = 'You\'re not listed as an attendee of this event';
$labels['eventcancelled'] = 'Dit evenement is afgelast';
$labels['saveincalendar'] = 'bewaar in';
+
+// event dialog tabs
$labels['tabsummary'] = 'Samenvatting';
$labels['tabrecurrence'] = 'Herhaling';
$labels['tabattendees'] = 'Deelnemers';
$labels['tabattachments'] = 'Toebehoren';
$labels['tabsharing'] = 'Delen';
+
+// messages
+$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'] = 'Data wordt opgeslagen...';
+$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['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['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.';
+
+// recurrence form
$labels['repeat'] = 'Herhaal';
$labels['frequency'] = 'Herhaal';
$labels['never'] = 'nooit';
@@ -118,10 +194,12 @@ $labels['daily'] = 'dagelijks';
$labels['weekly'] = 'weekelijks';
$labels['monthly'] = 'maandelijks';
$labels['yearly'] = 'jaarlijks';
+$labels['rdate'] = 'on dates';
$labels['every'] = 'Elke';
$labels['days'] = 'dag(en)';
$labels['weeks'] = 'week / weken';
$labels['months'] = 'maand(en)';
+$labels['years'] = 'year(s) in:';
$labels['bydays'] = 'Op';
$labels['untildate'] = 'de';
$labels['each'] = 'Elke';
@@ -136,10 +214,23 @@ $labels['third'] = 'derde';
$labels['fourth'] = 'vierde';
$labels['last'] = 'laatste';
$labels['dayofmonth'] = 'Dag van de maand';
+$labels['addrdate'] = 'Add repeat date';
+
$labels['changeeventconfirm'] = 'Wijzig evenement';
$labels['removeeventconfirm'] = 'Verwijder evenement';
+$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 remove the current event only, this and all future occurences or all occurences of this event?';
$labels['currentevent'] = 'Huidige';
$labels['futurevents'] = 'Toekomst';
$labels['allevents'] = 'Alle';
$labels['saveasnew'] = 'Bewaar als nieuw';
+
+// 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';
+
?>
diff --git a/plugins/calendar/localization/pl_PL.inc b/plugins/calendar/localization/pl_PL.inc
index ac64763..4d12372 100644
--- a/plugins/calendar/localization/pl_PL.inc
+++ b/plugins/calendar/localization/pl_PL.inc
@@ -1,22 +1,235 @@
<?php
+
+$labels = array();
+
+// preferences
+$labels['default_view'] = 'DomyÅlny widok';
+$labels['time_format'] = 'Format czasu';
+$labels['timeslots'] = 'Time slots per hour';
+$labels['first_day'] = 'Pierwszy dzieÅ tygodnia';
+$labels['first_hour'] = 'Pierwsza godzina';
+$labels['workinghours'] = 'Godziny robocze';
+$labels['add_category'] = 'Dodaj kategoriÄ';
+$labels['remove_category'] = 'UsuÅ kategoriÄ';
+$labels['defaultcalendar'] = 'Twórz nowe zdarzenia w';
+$labels['eventcoloring'] = 'Kolor zdarzenia';
+$labels['coloringmode0'] = 'Zgodnie z kalendarzem';
+$labels['coloringmode1'] = 'Zgodnie z kategoriÄ
';
+$labels['coloringmode2'] = 'Kalendarz dla obramowania, kategoria dla Årodka';
+$labels['coloringmode3'] = 'Kategoria dla obramowania, kalendarz dla Årodka';
+
+// calendar
$labels['calendar'] = 'Kalendarz';
$labels['calendars'] = 'Kalendarze';
+$labels['category'] = 'Kategoria';
+$labels['categories'] = 'Kategorie';
+$labels['createcalendar'] = 'Utwórz nowy kalendarz';
+$labels['editcalendar'] = 'Edytuj wÅaÅciwoÅci kalendarza';
$labels['name'] = 'Nazwa';
+$labels['color'] = 'Kolor';
+$labels['day'] = 'DzieÅ';
+$labels['week'] = 'TydzieÅ';
+$labels['month'] = 'MiesiÄ
c';
+$labels['agenda'] = 'Agenda';
+$labels['new'] = 'Nowy';
+$labels['new_event'] = 'Nowe zdarzenie';
+$labels['edit_event'] = 'Edytuj zdarzenie';
$labels['edit'] = 'Edytuj';
$labels['save'] = 'Zapisz';
$labels['remove'] = 'UsuÅ';
$labels['cancel'] = 'Anuluj';
+$labels['select'] = 'Wybierz';
+$labels['print'] = 'Drukuj';
+$labels['printtitle'] = 'Drukuj kalendarze';
$labels['title'] = 'Podsumowanie';
$labels['description'] = 'Opis';
-$labels['start'] = 'Start';
+$labels['all-day'] = 'caÅy dzieÅ';
+$labels['export'] = 'Eksport';
+$labels['exporttitle'] = 'Eksport w formacie iCalendar';
+$labels['exportrange'] = 'Zdarzenia z';
+$labels['exportattachments'] = 'Z zaÅÄ
cznikami';
+$labels['customdate'] = 'WÅasna data';
+$labels['location'] = 'PoÅożenie';
+$labels['url'] = 'Adres URL';
+$labels['date'] = 'Data';
+$labels['start'] = 'PoczÄ
tek';
+$labels['end'] = 'Koniec';
+$labels['selectdate'] = 'Wybierz datÄ';
+$labels['freebusy'] = 'Pokaż mnie jako';
+$labels['free'] = 'Wolny';
+$labels['busy'] = 'ZajÄty';
+$labels['outofoffice'] = 'Poza biurem';
+$labels['tentative'] = 'Niepewny';
+$labels['priority'] = 'Priorytet';
+$labels['sensitivity'] = 'PoufnoÅÄ';
+$labels['public'] = 'publiczny';
+$labels['private'] = 'prywatny';
+$labels['confidential'] = 'poufny';
$labels['alarms'] = 'Przypomnienie';
+$labels['generated'] = 'wygenerowano';
+$labels['printdescriptions'] = 'Drukuj opisy';
+$labels['parentcalendar'] = 'Wstaw wewnÄ
trz';
+$labels['searchearlierdates'] = '« Szukaj wczeÅniejszych zdarzeÅ';
+$labels['searchlaterdates'] = 'Szukaj późniejszych zdarzeŠ»';
+$labels['andnmore'] = '$nr wiÄcej...';
+$labels['togglerole'] = 'Kliknuj aby przestawiÄ rolÄ';
+$labels['createfrommail'] = 'Zapisz jako zdarzenie';
+$labels['importevents'] = 'Importuj zdarzenia';
+$labels['importrange'] = 'Zdarzenia z';
+$labels['onemonthback'] = '1 miesiÄ
c wstecz';
+$labels['nmonthsback'] = '$nr miesiÄcy wstecz';
+$labels['showurl'] = 'Pokaż adres URL kalendarza';
+$labels['showurldescription'] = 'Używaj tego adresu aby dostaÄ siÄ do kalendarza z innych programów (w trybie tylko-do-odczytu). Możesz wkleiÄ go do dowolnej aplikacji obsÅugujÄ
cej format iCal.';
+$labels['caldavurldescription'] = 'Skopiuj ten adres do aplikacji obsÅugujÄ
cej format <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> (np. Evolution lub Mozilla Thunderbird) aby zsynchronizowaÄ wybrany kalendarz z twoim komputerem lub urzÄ
dzeniem przenoÅnym.';
+
+// agenda view
+$labels['listrange'] = 'Zakres do pokazania:';
+$labels['listsections'] = 'Podziel na:';
+$labels['smartsections'] = 'Inteligentne sekcje';
+$labels['until'] = 'dopóki';
$labels['today'] = 'Dzisiaj';
$labels['tomorrow'] = 'Jutro';
-$labels['showalarms'] = 'Pokaż alarmy';
+$labels['thisweek'] = 'BieżÄ
cy tydzieÅ';
+$labels['nextweek'] = 'NastÄpny tydzieÅ';
+$labels['thismonth'] = 'BieżÄ
cy miesiÄ
c';
+$labels['nextmonth'] = 'NastÄpny miesiÄ
c';
+$labels['weekofyear'] = 'TydzieÅ';
+$labels['pastevents'] = 'PrzeszÅe';
+$labels['futureevents'] = 'PrzyszÅe';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Show reminders';
+$labels['defaultalarmtype'] = 'DomyÅlne powiadomienie';
+$labels['defaultalarmoffset'] = 'DomyÅlny czas powiadomienia';
+
+// attendees
+$labels['attendee'] = 'Uczestnik';
$labels['role'] = 'Rola';
+$labels['availability'] = 'DostÄpny';
+$labels['confirmstate'] = 'Status';
+$labels['addattendee'] = 'Dodaj uczestnika';
+$labels['roleorganizer'] = 'Organizator';
+$labels['rolerequired'] = 'Wymagany';
$labels['roleoptional'] = 'Opcjonalny';
+$labels['rolechair'] = 'PrzewodniczÄ
cy';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Osoba';
+$labels['cutypegroup'] = 'Grupa';
+$labels['cutyperesource'] = 'Zasób';
+$labels['cutyperoom'] = 'Pokój';
+$labels['availfree'] = 'Wolny';
+$labels['availbusy'] = 'ZajÄty';
+$labels['availunknown'] = 'Nieznany';
+$labels['availtentative'] = 'Niepewny';
+$labels['availoutofoffice'] = 'Poza biurem';
+$labels['scheduletime'] = 'Sprawdź dostÄpnoÅÄ';
+$labels['sendinvitations'] = 'WyÅlij zaproszenia';
+$labels['sendnotifications'] = 'Powiadom uczestników o zmianach';
+$labels['sendcancellation'] = 'Powiadom uczestników o anulowaniu zdarzenia';
+$labels['onlyworkinghours'] = 'Sprawdź dostÄpnoÅÄ w moich godzinach pracy';
+$labels['reqallattendees'] = 'Wymagany/wszyscy uczestnicy';
+$labels['prevslot'] = 'Poprzedni przedziaÅ';
+$labels['nextslot'] = 'NastÄpny przedziaÅ';
+$labels['noslotfound'] = 'Nie znaleziono wolnego przedziaÅu czasu';
+$labels['invitationsubject'] = 'ZostaÅeÅ zaproszony do "$title"';
+$labels['invitationmailbody'] = "*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees\n\nW zaÅÄ
czeniu plik w formacie iCalendar ze szczegóÅami zdarzenia, który możesz zaimportowaÄ do twojej aplikacji kalendarza.";
+$labels['invitationattendlinks'] = "W przypadku gdy klient poczty elektronicznej nie obsÅuguje rzÄ
daÅ w formacie iTip, aby zaakceptowaÄ lub odrzuciÄ to zaproszenie, można skorzystaÄ z nastÄpujÄ
cego linku:\n\$url ";
+$labels['eventupdatesubject'] = '"$title" zostaÅo zaktualizowane';
+$labels['eventupdatesubjectempty'] = 'Zdarzenie które ciÄ dotyczy zostaÅo zaktualizowane';
+$labels['eventupdatemailbody'] = "*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees\n\nW zaÅÄ
czeniu plik w formacie iCalendar zawierajÄ
cy zaktualizowane szczegóÅy zdarzenia, które możesz zaimportowaÄ do swojej aplikacji kalendarza.";
+$labels['eventcancelsubject'] = '"$title" zostaÅo anulowane';
+$labels['eventcancelmailbody'] = "*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees\n\nZdarzenie zostaÅo anulowane przez \$organizer.\n\nW zaÅÄ
czeniu plik w formacie iCalendar ze zaktualizowanymi szczegóÅami zdarzenia.";
+
+// invitation handling
+$labels['itipmailbodyaccepted'] = "\$sender zaakceptowaÅ zaproszenie do nastÄpujÄ
cego zdarzenia:\n\n*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees";
+$labels['itipmailbodytentative'] = "\$sender warunkowo zaakceptowaÅ zaproszenie do nastÄpujÄ
cego zdarzenia:\n\n*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees";
+$labels['itipmailbodydeclined'] = "\$sender odrzuciÅ zaproszenie na nastÄpujÄ
ce zdarzenie:\n\n*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees";
+$labels['itipdeclineevent'] = 'Czy chcesz odrzuciÄ zaproszenie na to zdarzenie?';
+$labels['declinedeleteconfirm'] = 'Czy chcesz także usunÄ
Ä to odrzucone zdarzenie ze swojego kalendarza?';
+$labels['notanattendee'] = 'Nie jesteÅ na liÅcie uczestników tego zdarzenia';
+$labels['eventcancelled'] = 'Zdarzenie zostaÅo anulowane';
+$labels['saveincalendar'] = 'zapisz w';
+
+// event dialog tabs
$labels['tabsummary'] = 'Podsumowanie';
+$labels['tabrecurrence'] = 'PowtarzalnoÅÄ';
+$labels['tabattendees'] = 'Uczestnicy';
$labels['tabattachments'] = 'ZaÅÄ
czniki';
+$labels['tabsharing'] = 'UdostÄpnianie';
+
+// messages
+$labels['deleteventconfirm'] = 'Czy na pewno chcesz usunÄ
Ä to zdarzenie?';
+$labels['deletecalendarconfirm'] = 'Czy na pewno chcesz usunÄ
Ä ten kalendarz z wszystkimi zadaniami?';
+$labels['deletecalendarconfirmrecursive'] = 'Czy na pewno chcesz usunÄ
Ä ten kalendarz ze wszystkimi zdarzeniami i pod-kalendarzami?';
$labels['savingdata'] = 'ZapisujÄ dane...';
+$labels['errorsaving'] = 'BÅÄ
d podczas zapisu danych.';
+$labels['operationfailed'] = 'Å»Ä
dana operacja nie powiodÅa siÄ.';
+$labels['invalideventdates'] = 'BÅÄdna data! ProszÄ sprawdziÄ wprowadzone dane.';
+$labels['invalidcalendarproperties'] = 'BÅÄdna wÅaÅciwoÅÄ kalendarza! ProszÄ podaÄ poprawnÄ
nazwÄ.';
+$labels['searchnoresults'] = 'Nie znaleziono zdarzeÅ w wybranym kalendarzu.';
+$labels['successremoval'] = 'Zdarzenie zostaÅo usuniÄte.';
+$labels['successrestore'] = 'Zdarzenie zostaÅo przywrócone.';
+$labels['errornotifying'] = 'Nie udaÅo siÄ wysÅaÄ powiadomieÅ do uczestników zdarzenia';
+$labels['errorimportingevent'] = 'Nie udaÅo siÄ zaimportowaÄ zdarzenia';
+$labels['newerversionexists'] = 'Istnieje nowsza wersja tego zdarzenia ! Przerwano.';
+$labels['nowritecalendarfound'] = 'Nie znaleziono kalendarza aby zapisaÄ zdarzenie.';
+$labels['importedsuccessfully'] = 'Zdarzenie dodano do \'$calendar\'';
+$labels['attendeupdateesuccess'] = 'Zaktualizowano status uczestnika.';
+$labels['itipsendsuccess'] = 'WysÅano zaproszenia do uczestników.';
+$labels['itipresponseerror'] = 'Nie udaÅo siÄ wysÅaÄ odpowiedzi na to zaproszenie.';
+$labels['itipinvalidrequest'] = 'To zaproszenie nie jest już aktualne.';
+$labels['sentresponseto'] = 'WysÅano odpowiedź na zaproszenie do $mailto.';
+$labels['localchangeswarning'] = 'Zamierzasz dokonaÄ zmian, które mogÄ
zostaÄ wykonane tylko w twoim kalendarzu i nie zostanÄ
wysÅane do organizatora zdarzenia.';
+$labels['importsuccess'] = 'Zaimportowano $nr zdarzeÅ.';
+$labels['importnone'] = 'Nie znaleziono zdarzeÅ do zaimportowania.';
+$labels['importerror'] = 'WystÄ
piÅ bÅÄ
d podczas importu.';
+$labels['aclnorights'] = 'Nie masz uprawnieÅ administracyjnych dla tego kalendarza.';
+
+// recurrence form
+$labels['repeat'] = 'Powtórz';
+$labels['frequency'] = 'Powtórz';
+$labels['never'] = 'nigdy';
+$labels['daily'] = 'codziennie';
+$labels['weekly'] = 'cotygodniowo';
+$labels['monthly'] = 'miesiÄcznie';
+$labels['yearly'] = 'corocznie';
+$labels['rdate'] = 'on dates';
+$labels['every'] = 'Każdy';
+$labels['days'] = 'dnia';
+$labels['weeks'] = 'tygodnia';
+$labels['months'] = 'miesiÄ
ca';
+$labels['years'] = 'roku w:';
+$labels['bydays'] = 'W';
+$labels['untildate'] = 'do';
+$labels['each'] = 'Każdy';
+$labels['onevery'] = 'W każdy';
+$labels['onsamedate'] = 'W tej samej dacie';
+$labels['forever'] = 'zawsze';
+$labels['recurrencend'] = 'dopóki';
+$labels['forntimes'] = '$nr raz(y)';
+$labels['first'] = 'pierwszy';
+$labels['second'] = 'drugi';
+$labels['third'] = 'trzeci';
+$labels['fourth'] = 'czwarty';
+$labels['last'] = 'ostatni';
+$labels['dayofmonth'] = 'DzieÅ miesiÄ
ca';
+$labels['addrdate'] = 'Add repeat date';
+
+$labels['changeeventconfirm'] = 'ZmieÅ zdarzenie';
+$labels['removeeventconfirm'] = 'UsuÅ zdarzenie';
+$labels['changerecurringeventwarning'] = 'To jest zdarzenie powtarzalne. Czy chcesz zmieniÄ bieżÄ
ce zdarzenie, bieżÄ
ce i przyszÅe, wszystkie, a może zapisaÄ je jako nowe zdarzenie?';
+$labels['removerecurringeventwarning'] = 'To jest zdarzenie powtarzalne. Czy chcesz usunÄ
Ä tylko bieżÄ
ce zdarzenie, bieżÄ
ce i przyszÅe, a może wszystkie wystÄ
pienia?';
+$labels['currentevent'] = 'BieżÄ
ce';
+$labels['futurevents'] = 'PrzyszÅe';
$labels['allevents'] = 'Wszystkie';
+$labels['saveasnew'] = 'Zapisz jako nowe';
+
+// 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';
+
?>
diff --git a/plugins/calendar/localization/pt_BR.inc b/plugins/calendar/localization/pt_BR.inc
index df82b9e..94b40cc 100644
--- a/plugins/calendar/localization/pt_BR.inc
+++ b/plugins/calendar/localization/pt_BR.inc
@@ -1,7 +1,11 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'Visualização padrão';
$labels['time_format'] = 'Formato da hora';
-$labels['timeslots'] = 'Alocações de tempo por hora';
+$labels['timeslots'] = 'Time slots per hour';
$labels['first_day'] = 'Primeiro dia da semana';
$labels['first_hour'] = 'Primeira hora a mostrar';
$labels['workinghours'] = 'Horário de trabalho';
@@ -13,6 +17,8 @@ $labels['coloringmode0'] = 'De acordo com o calendário';
$labels['coloringmode1'] = 'De acordo com a categoria';
$labels['coloringmode2'] = 'Calendário para esboço, categoria para conteúdo';
$labels['coloringmode3'] = 'Categoria para esboço, calendário para conteúdo';
+
+// calendar
$labels['calendar'] = 'Calendário';
$labels['calendars'] = 'Calendários';
$labels['category'] = 'Categoria';
@@ -40,7 +46,11 @@ $labels['description'] = 'Descrição';
$labels['all-day'] = 'dia todo';
$labels['export'] = 'Exportar';
$labels['exporttitle'] = 'Exportar para iCalendar';
+$labels['exportrange'] = 'Eventos de';
+$labels['exportattachments'] = 'With attachments';
+$labels['customdate'] = 'Custom date';
$labels['location'] = 'Local';
+$labels['url'] = 'URL';
$labels['date'] = 'Data';
$labels['start'] = 'InÃcio';
$labels['end'] = 'Término';
@@ -70,6 +80,9 @@ $labels['onemonthback'] = '1 mês atrás';
$labels['nmonthsback'] = '$nr meses atrás';
$labels['showurl'] = 'Mostrar URL do calendário';
$labels['showurldescription'] = 'Use o seguinte endereço para acessar (somente leitura) seu calendário em outras aplicações. Você pode copiar e colar este endereço em qualquer software de calendário que suporte o formato iCal.';
+$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
+
+// agenda view
$labels['listrange'] = 'Intervalo para exibir:';
$labels['listsections'] = 'Dividir em:';
$labels['smartsections'] = 'Seções inteligentes';
@@ -83,9 +96,13 @@ $labels['nextmonth'] = 'Próximo mês';
$labels['weekofyear'] = 'Semana';
$labels['pastevents'] = 'Passado';
$labels['futureevents'] = 'Futuro';
-$labels['showalarms'] = 'Mostrar alarmes';
+
+// alarm/reminder settings
+$labels['showalarms'] = 'Show reminders';
$labels['defaultalarmtype'] = 'Configuração de lembrete padrão';
$labels['defaultalarmoffset'] = 'Horário padrão de lembrete';
+
+// attendees
$labels['attendee'] = 'Participante';
$labels['role'] = 'Papel';
$labels['availability'] = 'Disp.';
@@ -94,6 +111,12 @@ $labels['addattendee'] = 'Adicionar participante';
$labels['roleorganizer'] = 'Organizador';
$labels['rolerequired'] = 'Obrigatório';
$labels['roleoptional'] = 'Opcional';
+$labels['rolechair'] = 'Chair';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'Individual';
+$labels['cutypegroup'] = 'Grupo';
+$labels['cutyperesource'] = 'Recurso';
+$labels['cutyperoom'] = 'Room';
$labels['availfree'] = 'DisponÃvel';
$labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconhecido';
@@ -116,37 +139,28 @@ $labels['eventupdatesubjectempty'] = 'Um evento do seu interesse foi atualizado'
$labels['eventupdatemailbody'] = "*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees\n\nSegue em anexo um arquivo iCalendar com os detalhes atualizados do evento na qual você pode importar para sua aplicação de calendário.";
$labels['eventcancelsubject'] = '"$title" foi cancelado';
$labels['eventcancelmailbody'] = "*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees\n\nO evento foi cancelado por \$organizer.\n\nSegue em anexo um arquivo iCalendar com os detalhes atualizados do evento.";
-$labels['itipinvitation'] = 'Convite para';
-$labels['itipupdate'] = 'Atualização de';
-$labels['itipcancellation'] = 'Cancelado:';
-$labels['itipreply'] = 'Responder para';
-$labels['itipaccepted'] = 'Aceitar';
-$labels['itiptentative'] = 'Talvez';
-$labels['itipdeclined'] = 'Rejeitar';
-$labels['itipsubjectaccepted'] = '"$title" foi aceito por $name';
-$labels['itipsubjecttentative'] = '"$title" foi aceito como tentativa por $name';
-$labels['itipsubjectdeclined'] = '"$title" foi recusado por $name';
+
+// invitation handling
$labels['itipmailbodyaccepted'] = "\$sender aceitou o convite para o seguinte evento:\n\n*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees";
$labels['itipmailbodytentative'] = "\$sender aceitou como tentativa o convite para o seguinte evento:\n\n*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender recusou o convite para o seguinte evento:\n\n*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees";
$labels['itipdeclineevent'] = 'Você deseja recusar o convite para este evento?';
-$labels['importtocalendar'] = 'Salvar em meu calendário';
-$labels['removefromcalendar'] = 'Remover do meu calendário';
-$labels['updateattendeestatus'] = 'Atualizar o estado dos participantes';
-$labels['acceptinvitation'] = 'Você aceita este convite?';
-$labels['youhaveaccepted'] = 'Você aceitou este convite';
-$labels['youhavetentative'] = 'Você aceitou como tentativa este convite';
-$labels['youhavedeclined'] = 'Você recusou este convite';
+$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?';
$labels['notanattendee'] = 'Você não está listado como um participante deste evento';
$labels['eventcancelled'] = 'O evento foi cancelado';
$labels['saveincalendar'] = 'salvar em';
+
+// event dialog tabs
$labels['tabsummary'] = 'Sumário';
$labels['tabrecurrence'] = 'Repetição';
$labels['tabattendees'] = 'Participantes';
$labels['tabattachments'] = 'Anexos';
$labels['tabsharing'] = 'Compartilhamento';
+
+// messages
$labels['deleteventconfirm'] = 'Você realmente deseja remover este evento?';
$labels['deletecalendarconfirm'] = 'Você realmente deseja excluir este calendário com todos os seus eventos?';
+$labels['deletecalendarconfirmrecursive'] = 'Do you really want to delete this calendar with all its events and sub-calendars?';
$labels['savingdata'] = 'Salvando dados...';
$labels['errorsaving'] = 'Falha ao salvar as modificações.';
$labels['operationfailed'] = 'A operação requisitada falhou.';
@@ -165,10 +179,13 @@ $labels['itipsendsuccess'] = 'Convite enviado aos participantes.';
$labels['itipresponseerror'] = 'Falha ao enviar a resposta para este convite de evento';
$labels['itipinvalidrequest'] = 'Este convite não é mais válido';
$labels['sentresponseto'] = 'Resposta de convite enviada com sucesso para $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'] = 'Importado com sucesso $nr eventos';
$labels['importnone'] = 'Não há eventos a serem importados';
$labels['importerror'] = 'Ocorreu um erro na importação';
$labels['aclnorights'] = 'Você não tem permissão de administrador neste calendário.';
+
+// recurrence form
$labels['repeat'] = 'Repetir';
$labels['frequency'] = 'Repetir';
$labels['never'] = 'nunca';
@@ -176,6 +193,7 @@ $labels['daily'] = 'diariamente';
$labels['weekly'] = 'semanalmente';
$labels['monthly'] = 'mensalmente';
$labels['yearly'] = 'anualmente';
+$labels['rdate'] = 'on dates';
$labels['every'] = 'Ã cada';
$labels['days'] = 'dia(s)';
$labels['weeks'] = 'semana(s)';
@@ -195,6 +213,8 @@ $labels['third'] = 'terceira';
$labels['fourth'] = 'quarta';
$labels['last'] = 'última';
$labels['dayofmonth'] = 'Dia do mês';
+$labels['addrdate'] = 'Add repeat date';
+
$labels['changeeventconfirm'] = 'Trocar evento';
$labels['removeeventconfirm'] = 'Remover evento';
$labels['changerecurringeventwarning'] = 'Este é um evento com repetição. Você gostaria de editar o evento atual somente, estas e todas as futuras ocorrências ou salvar este como um novo evento?';
@@ -203,4 +223,13 @@ $labels['currentevent'] = 'Atual';
$labels['futurevents'] = 'Futuro';
$labels['allevents'] = 'Todos';
$labels['saveasnew'] = 'Salvar como novo';
+
+// 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';
+
?>
diff --git a/plugins/calendar/localization/ru_RU.inc b/plugins/calendar/localization/ru_RU.inc
index 7e109d8..85ee266 100644
--- a/plugins/calendar/localization/ru_RU.inc
+++ b/plugins/calendar/localization/ru_RU.inc
@@ -1,7 +1,11 @@
<?php
+
+$labels = array();
+
+// preferences
$labels['default_view'] = 'Ðид по ÑмолÑаниÑ';
$labels['time_format'] = 'ФоÑÐ¼Ð°Ñ Ð²Ñемени';
-$labels['timeslots'] = 'ÐÑомежÑÑков в ÑаÑÑ';
+$labels['timeslots'] = 'ÐÑомежÑÑков в ÑаÑ';
$labels['first_day'] = 'ÐеÑвÑй Ð´ÐµÐ½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸';
$labels['first_hour'] = 'ÐоказÑваÑÑ Ð½Ð°ÑÐ¸Ð½Ð°Ñ Ñ';
$labels['workinghours'] = 'РабоÑие ÑаÑÑ';
@@ -13,6 +17,8 @@ $labels['coloringmode0'] = 'СоглаÑно ÑвеÑа календаÑÑ';
$labels['coloringmode1'] = 'СоглаÑно ÑвеÑа каÑегоÑии';
$labels['coloringmode2'] = 'Ð¦Ð²ÐµÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ Ð´Ð»Ñ Ñамки, ÑÐ²ÐµÑ ÐºÐ°ÑегоÑии Ð´Ð»Ñ Ñона';
$labels['coloringmode3'] = 'Ð¦Ð²ÐµÑ ÐºÐ°ÑегоÑии Ð´Ð»Ñ Ñамки, ÑÐ²ÐµÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ Ð´Ð»Ñ Ñона';
+
+// calendar
$labels['calendar'] = 'ÐалендаÑÑ';
$labels['calendars'] = 'ÐалендаÑи';
$labels['category'] = 'ÐаÑегоÑиÑ';
@@ -40,7 +46,11 @@ $labels['description'] = 'ÐпиÑание';
$labels['all-day'] = 'веÑÑ Ð´ÐµÐ½Ñ';
$labels['export'] = 'ÐкÑпоÑÑ';
$labels['exporttitle'] = 'ÐкÑпоÑÑ Ð² iCalendar';
+$labels['exportrange'] = 'СобÑÑÐ¸Ñ Ð½Ð°ÑÐ¸Ð½Ð°Ñ Ñ';
+$labels['exportattachments'] = 'С вложениÑми';
+$labels['customdate'] = 'СпеÑиалÑÐ½Ð°Ñ Ð´Ð°Ñа';
$labels['location'] = 'ÐеÑÑо';
+$labels['url'] = 'URL';
$labels['date'] = 'ÐаÑа';
$labels['start'] = 'ÐаÑало';
$labels['end'] = 'ÐонеÑ';
@@ -70,6 +80,9 @@ $labels['onemonthback'] = '1 меÑÑÑ Ð½Ð°Ð·Ð°Ð´';
$labels['nmonthsback'] = '$nr меÑÑÑа(ев) назад';
$labels['showurl'] = 'ÐоказаÑÑ URL календаÑÑ';
$labels['showurldescription'] = 'ÐÑполÑзÑйÑе ÑледÑÑÑий адÑÐµÑ Ð´Ð»Ñ Ð¿ÑоÑмоÑÑа ÐаÑего календаÑÑ Ð¸Ð· дÑÑгиÑ
пÑиложений. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑкопиÑоваÑÑ Ð¸ вÑÑавиÑÑ ÑÑо в лÑбое пÑиложение коÑоÑое поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑоÑÐ¼Ð°Ñ iCal.';
+$labels['caldavurldescription'] = 'СкопиÑÑйÑе ÑÑÐ¾Ñ Ð°Ð´ÑÐµÑ Ð² клиенÑ, <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">поддеÑживаÑÑий CalDAV</a> (напÑимеÑ, Evolution или Mozilla Thunderbird) Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ ÑинÑ
ÑонизаÑии данного календаÑÑ Ñо Ñвоим компÑÑÑеÑом или мобилÑнÑм ÑÑÑÑойÑÑвом.';
+
+// agenda view
$labels['listrange'] = 'Ðиапазон:';
$labels['listsections'] = 'РазделиÑÑ Ð½Ð°:';
$labels['smartsections'] = 'УмнÑе ÑекÑии';
@@ -83,9 +96,13 @@ $labels['nextmonth'] = 'СледÑÑÑий меÑÑÑ';
$labels['weekofyear'] = 'ÐеделÑ';
$labels['pastevents'] = 'ÐÑоÑедÑее';
$labels['futureevents'] = 'ÐÑдÑÑее';
+
+// alarm/reminder settings
$labels['showalarms'] = 'ÐоказÑваÑÑ Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ';
$labels['defaultalarmtype'] = 'ÐаÑÑÑойки Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ';
$labels['defaultalarmoffset'] = 'ÐÑÐµÐ¼Ñ Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ';
+
+// attendees
$labels['attendee'] = 'УÑаÑÑник';
$labels['role'] = 'РолÑ';
$labels['availability'] = 'ÐоÑÑÑпноÑÑÑ';
@@ -94,6 +111,12 @@ $labels['addattendee'] = 'ÐобавиÑÑ ÑÑаÑÑника';
$labels['roleorganizer'] = 'ÐÑганизаÑоÑ';
$labels['rolerequired'] = 'ÐбÑзаÑелÑнÑй';
$labels['roleoptional'] = 'ÐеобÑзаÑелÑнÑй';
+$labels['rolechair'] = 'ÐеÑÑо';
+$labels['rolenonparticipant'] = 'Absent';
+$labels['cutypeindividual'] = 'ÐндивидÑÑм';
+$labels['cutypegroup'] = 'ÐÑÑппа';
+$labels['cutyperesource'] = 'РеÑÑÑÑ';
+$labels['cutyperoom'] = 'ÐомнаÑа';
$labels['availfree'] = 'Свободен';
$labels['availbusy'] = 'ÐанÑÑ';
$labels['availunknown'] = 'ÐеизвеÑÑно';
@@ -116,37 +139,28 @@ $labels['eventupdatesubjectempty'] = 'СобÑÑие, коÑоÑое каÑае
$labels['eventupdatemailbody'] = "*\$title*\n\nÐогда: \$date\n\nÐÑиглаÑеннÑе: \$attendees\n\nÐо вложении Ð²Ñ Ð½Ð°Ð¹Ð´ÑÑе Ñайл iCalendar Ñо вÑеми изменениÑми в ÑобÑÑии, коÑоÑÑй ÐÑ Ð¼Ð¾Ð¶ÐµÑе импоÑÑиÑоваÑÑ Ð² ÐаÑÑ Ð¿ÑогÑаммÑ-ежедневник.";
$labels['eventcancelsubject'] = '"$title" бÑло оÑменено';
$labels['eventcancelmailbody'] = "*\$title*\n\nÐогда: \$date\n\nÐÑиглаÑеннÑе: \$attendees\n\nÐÑо ÑобÑÑие оÑменено \$organizer.\n\nÐо вложении Ð²Ñ Ð½Ð°Ð¹Ð´ÑÑе Ñайл iCalendar Ñо вÑеми изменениÑми в ÑобÑÑии.";
-$labels['itipinvitation'] = 'ÐÑиглаÑение на';
-$labels['itipupdate'] = 'Ðбновление';
-$labels['itipcancellation'] = 'ÐÑменÑннÑй:';
-$labels['itipreply'] = 'ÐÑвеÑиÑÑ';
-$labels['itipaccepted'] = 'ÐÑинÑÑÑ';
-$labels['itiptentative'] = 'ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ';
-$labels['itipdeclined'] = 'ÐÑклониÑÑ';
-$labels['itipsubjectaccepted'] = '"$title" пÑинÑÑо $name';
-$labels['itipsubjecttentative'] = '"$title" пÑедваÑиÑелÑно пÑинÑÑо $name';
-$labels['itipsubjectdeclined'] = '"$title" оÑклонено $name';
+
+// invitation handling
$labels['itipmailbodyaccepted'] = "\$sender пÑинÑл(а) пÑиглаÑение на ÑледÑÑÑее ÑобÑÑие:\n\n*\$title*\n\nÐогда: \$date\n\nÐÑиглаÑеннÑе: \$attendees";
$labels['itipmailbodytentative'] = "\$sender пÑедваÑиÑелÑно пÑинÑл(а) пÑиглаÑение на ÑледÑÑÑее ÑобÑÑие:\n\n*\$title*\n\nÐогда: \$date\n\nÐÑиглаÑеннÑе: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender оÑклонил(а) пÑиглаÑение на ÑледÑÑÑее ÑобÑÑие:\n\n*\$title*\n\nÐогда: \$date\n\nÐÑиглаÑеннÑе: \$attendees";
$labels['itipdeclineevent'] = 'ÐÑ Ñ
оÑиÑе оÑклониÑÑ Ð¿ÑиглаÑение на ÑÑо ÑобÑÑие?';
-$labels['importtocalendar'] = 'СоÑ
ÑаниÑÑ Ð² мой календаÑÑ';
-$labels['removefromcalendar'] = 'УдалиÑÑ Ð¸Ð· моего календаÑÑ';
-$labels['updateattendeestatus'] = 'ÐбновиÑÑ ÑÑаÑÑÑ ÑÑаÑÑника';
-$labels['acceptinvitation'] = 'ÐÑ Ð¿ÑинимаеÑе ÑÑо пÑиглаÑение?';
-$labels['youhaveaccepted'] = 'ÐÑ Ð¿ÑинÑли ÑÑо пÑиглаÑение';
-$labels['youhavetentative'] = 'ÐÑ Ð¿ÑедваÑиÑелÑно пÑинÑли ÑÑо пÑиглаÑение';
-$labels['youhavedeclined'] = 'ÐÑ Ð¾Ñклонили ÑÑо пÑиглаÑение';
+$labels['declinedeleteconfirm'] = 'ХоÑиÑе ли Ð²Ñ Ñак же ÑдалиÑÑ ÑÑо оÑклонÑнное ÑобÑÑие из ваÑего календаÑÑ?';
$labels['notanattendee'] = 'ÐÑ Ð½Ðµ в ÑпиÑке ÑÑаÑÑников ÑÑого ÑобÑÑиÑ';
$labels['eventcancelled'] = 'ÐÑо ÑобÑÑие оÑменено';
$labels['saveincalendar'] = 'ÑоÑ
ÑаниÑÑ Ð²';
+
+// event dialog tabs
$labels['tabsummary'] = 'Сводка';
$labels['tabrecurrence'] = 'ÐовÑоÑение';
$labels['tabattendees'] = 'УÑаÑÑники';
$labels['tabattachments'] = 'ÐложениÑ';
$labels['tabsharing'] = 'СовмеÑÑное иÑполÑзование';
+
+// messages
$labels['deleteventconfirm'] = 'ÐÑ Ð´ÐµÐ¹ÑÑвиÑелÑно Ñ
оÑиÑе ÑдалиÑÑ ÑÑо ÑобÑÑие?';
$labels['deletecalendarconfirm'] = 'ÐÑ Ð´ÐµÐ¹ÑÑвиÑелÑно Ñ
оÑиÑе ÑдалиÑÑ ÑÑÐ¾Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ Ñо вÑеми его ÑобÑÑиÑми?';
+$labels['deletecalendarconfirmrecursive'] = 'ÐÑ Ð´ÐµÐ¹ÑÑвиÑелÑно Ñ
оÑиÑе ÑдалиÑÑ ÑÑÐ¾Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ Ñо вÑеми его ÑобÑÑиÑми и вложеннÑми календаÑÑми?';
$labels['savingdata'] = 'СоÑ
Ñанение даннÑÑ
...';
$labels['errorsaving'] = 'ÐÑибка ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹.';
$labels['operationfailed'] = 'Ðе ÑдалоÑÑ Ð²ÑполниÑÑ Ð·Ð°Ð¿ÑоÑеннÑÑ Ð¾Ð¿ÐµÑаÑиÑ.';
@@ -165,10 +179,13 @@ $labels['itipsendsuccess'] = 'ÐÑиглаÑÐ°Ð½Ð¸Ñ Ð¾ÑпÑÐ°Ð²Ð»ÐµÐ½Ñ ÑÑа
$labels['itipresponseerror'] = 'Ðе ÑдалоÑÑ Ð¿Ð¾ÑлаÑÑ Ð¾ÑÐ²ÐµÑ Ð½Ð° ÑÑо пÑиглаÑение';
$labels['itipinvalidrequest'] = 'ÐÑо пÑиглаÑение болÑÑе не дейÑÑвиÑелÑно';
$labels['sentresponseto'] = 'УÑпеÑно оÑпÑавлен оÑÐ²ÐµÑ Ð½Ð° пÑиглаÑение на $mailto';
+$labels['localchangeswarning'] = 'ÐÑ ÑобиÑаеÑеÑÑ Ð²Ð½ÐµÑÑи изменениÑ, коÑоÑÑе оÑÑазÑÑÑÑ ÑолÑко на ÐаÑем лиÑном календаÑе и не бÑдÑÑ Ð¾ÑпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¾ÑганизаÑоÑÑ ÑобÑÑиÑ.';
$labels['importsuccess'] = 'УÑпеÑно импоÑÑиÑовано $nr ÑобÑÑий';
$labels['importnone'] = 'Ðе найдено ÑобÑÑий Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа';
$labels['importerror'] = 'ÐÑибка пÑи импоÑÑе';
$labels['aclnorights'] = 'ÐÑ Ð½Ðµ имееÑе пÑав админиÑÑÑаÑоÑа Ð´Ð»Ñ ÑÑого календаÑÑ.';
+
+// recurrence form
$labels['repeat'] = 'ÐовÑоÑиÑÑ';
$labels['frequency'] = 'ÐовÑоÑиÑÑ';
$labels['never'] = 'никогда';
@@ -176,6 +193,7 @@ $labels['daily'] = 'ежедневно';
$labels['weekly'] = 'еженеделÑно';
$labels['monthly'] = 'ежемеÑÑÑно';
$labels['yearly'] = 'ежегодно';
+$labels['rdate'] = 'on dates';
$labels['every'] = 'ÐаждÑй(ÑÑ)';
$labels['days'] = 'денÑ';
$labels['weeks'] = 'неделÑ';
@@ -195,6 +213,8 @@ $labels['third'] = 'ÑÑеÑий(ÑÑ)';
$labels['fourth'] = 'ÑеÑвеÑÑÑй(ÑÑ)';
$labels['last'] = 'поÑледний(ÑÑ)';
$labels['dayofmonth'] = 'ÐÐµÐ½Ñ Ð¼ÐµÑÑÑа';
+$labels['addrdate'] = 'Add repeat date';
+
$labels['changeeventconfirm'] = 'ÐзмениÑÑ ÑобÑÑие';
$labels['removeeventconfirm'] = 'УдалиÑÑ ÑобÑÑие';
$labels['changerecurringeventwarning'] = 'ÐÑо - повÑоÑÑÑÑееÑÑ ÑобÑÑие. ХоÑели Ð±Ñ ÐÑ ÑедакÑиÑоваÑÑ ÑолÑко ÑекÑÑее ÑобÑÑие, ÑÑо и вÑе бÑдÑÑие повÑоÑениÑ, вÑе ÑобÑÑÐ¸Ñ Ð¸Ð»Ð¸ ÑоÑ
ÑанÑÑÑ ÐµÐ³Ð¾ как новое ÑобÑÑие?';
@@ -203,4 +223,13 @@ $labels['currentevent'] = 'ТекÑÑее';
$labels['futurevents'] = 'ÐÑдÑÑие';
$labels['allevents'] = 'ÐÑе';
$labels['saveasnew'] = 'СоÑ
ÑаниÑÑ ÐºÐ°Ðº новое';
+
+// birthdays calendar
+$labels['birthdays'] = 'Ðни ÑождениÑ';
+$labels['birthdayscalendar'] = 'ÐалендаÑÑ Ðней РождениÑ';
+$labels['displaybirthdayscalendar'] = 'ÐоказÑваÑÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ Ðней РождениÑ';
+$labels['birthdayscalendarsources'] = 'Ðз ÑÑиÑ
адÑеÑнÑÑ
книг';
+$labels['birthdayeventtitle'] = 'ÐÐµÐ½Ñ ÑÐ¾Ð¶Ð´ÐµÐ½Ð¸Ñ $name';
+$labels['birthdayage'] = 'ÐозÑаÑÑ $age';
+
?>
diff --git a/plugins/calendar/skins/classic/calendar.css b/plugins/calendar/skins/classic/calendar.css
index 26d93b4..e9bde94 100644
--- a/plugins/calendar/skins/classic/calendar.css
+++ b/plugins/calendar/skins/classic/calendar.css
@@ -1248,8 +1248,7 @@ div.calendar-invitebox td.label {
}
#event-rsvp .rsvp-buttons,
-div.calendar-invitebox .rsvp-status,
-div.calendar-invitebox .rsvp-buttons {
+div.calendar-invitebox .itip-buttons div {
margin-top: 0.5em;
}
@@ -1260,7 +1259,7 @@ div.calendar-invitebox select {
margin-right: 0.5em;
}
-div.calendar-invitebox .calendar-select {
+div.calendar-invitebox .folder-select {
font-size: 11px;
margin-left: 1em;
}
diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css
index c13905d..c9e7a8c 100644
--- a/plugins/calendar/skins/larry/calendar.css
+++ b/plugins/calendar/skins/larry/calendar.css
@@ -1436,8 +1436,7 @@ div.calendar-invitebox td.label {
}
#event-rsvp .rsvp-buttons,
-div.calendar-invitebox .rsvp-status,
-div.calendar-invitebox .rsvp-buttons {
+div.calendar-invitebox .itip-buttons div {
margin-top: 0.5em;
}
@@ -1447,20 +1446,31 @@ div.calendar-invitebox input.button {
margin-right: 0.5em;
}
-div.calendar-invitebox .calendar-select {
+div.calendar-invitebox .folder-select {
font-weight: 10px;
margin-left: 1em;
}
+div.calendar-invitebox .rsvp-status {
+ padding-left: 2px;
+}
+
div.calendar-invitebox .rsvp-status.loading {
color: #666;
padding: 1px 0 2px 24px;
background: url(images/loading_blue.gif) top left no-repeat;
}
+div.calendar-invitebox .rsvp-status.hint {
+ color: #666;
+ text-shadow: none;
+ font-style: italic;
+}
+
div.calendar-invitebox .rsvp-status.declined,
div.calendar-invitebox .rsvp-status.tentative,
-div.calendar-invitebox .rsvp-status.accepted {
+div.calendar-invitebox .rsvp-status.accepted,
+div.calendar-invitebox .rsvp-status.delegated {
padding: 0 0 1px 22px;
background: url(images/attendee-status.gif) 2px -20px no-repeat;
}
@@ -1473,6 +1483,10 @@ div.calendar-invitebox .rsvp-status.tentative {
background-position: 2px -60px;
}
+div.calendar-invitebox .rsvp-status.delegated {
+ background-position: 2px -160px;
+}
+
/* iTIP attend reply page */
.calendaritipattend .centerbox {
diff --git a/plugins/libcalendaring/lib/libcalendaring_itip.php b/plugins/libcalendaring/lib/libcalendaring_itip.php
new file mode 100644
index 0000000..2fed51f
--- /dev/null
+++ b/plugins/libcalendaring/lib/libcalendaring_itip.php
@@ -0,0 +1,524 @@
+<?php
+
+/**
+ * iTIP functions for the calendar-based Roudncube plugins
+ *
+ * Class providing functionality to manage iTIP invitations
+ *
+ * @author Thomas Bruederli <bruederli at kolabsys.com>
+ *
+ * Copyright (C) 2011-2014, Kolab Systems AG <contact at kolabsys.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class libcalendaring_itip
+{
+ protected $rc;
+ protected $lib;
+ protected $plugin;
+ protected $sender;
+ protected $domain;
+ protected $itip_send = false;
+
+ function __construct($plugin, $domain = 'libcalendaring')
+ {
+ $this->plugin = $plugin;
+ $this->rc = rcube::get_instance();
+ $this->lib = libcalendaring::get_instance();
+ $this->domain = $domain;
+
+ $hook = $this->rc->plugins->exec_hook('calendar_load_itip',
+ array('identity' => $this->rc->user->get_identity()));
+ $this->sender = $hook['identity'];
+
+ $this->plugin->add_hook('message_before_send', array($this, 'before_send_hook'));
+ $this->plugin->add_hook('smtp_connect', array($this, 'smtp_connect_hook'));
+ }
+
+ function set_sender_email($email)
+ {
+ if (!empty($email))
+ $this->sender['email'] = $email;
+ }
+
+ /**
+ * Wrapper for rcube_plugin::gettext()
+ * Checking for a label in different domains
+ *
+ * @see rcube::gettext()
+ */
+ protected function gettext($p)
+ {
+ $label = is_array($p) ? $p['name'] : $p;
+ $domain = $this->domain;
+ if (!$this->rc->text_exists($label, $domain)) {
+ $domain = 'libcalendaring';
+ }
+ return $this->rc->gettext($p, $domain);
+ }
+
+ /**
+ * Send an iTip mail message
+ *
+ * @param array Event object to send
+ * @param string iTip method (REQUEST|REPLY|CANCEL)
+ * @param array Hash array with recipient data (name, email)
+ * @param string Mail subject
+ * @param string Mail body text label
+ * @param object Mail_mime object with message data
+ * @return boolean True on success, false on failure
+ */
+ public function send_itip_message($event, $method, $recipient, $subject, $bodytext, $message = null)
+ {
+ if (!$this->sender['name'])
+ $this->sender['name'] = $this->sender['email'];
+
+ if (!$message)
+ $message = $this->compose_itip_message($event, $method);
+
+ $mailto = rcube_idn_to_ascii($recipient['email']);
+
+ $headers = $message->headers();
+ $headers['To'] = format_email_recipient($mailto, $recipient['name']);
+ $headers['Subject'] = $this->gettext(array(
+ 'name' => $subject,
+ 'vars' => array(
+ 'title' => $event['title'],
+ 'name' => $this->sender['name']
+ )
+ ));
+
+ // compose a list of all event attendees
+ $attendees_list = array();
+ foreach ((array)$event['attendees'] as $attendee) {
+ $attendees_list[] = ($attendee['name'] && $attendee['email']) ?
+ $attendee['name'] . ' <' . $attendee['email'] . '>' :
+ ($attendee['name'] ? $attendee['name'] : $attendee['email']);
+ }
+
+ $mailbody = $this->gettext(array(
+ 'name' => $bodytext,
+ 'vars' => array(
+ 'title' => $event['title'],
+ 'date' => $this->lib->event_date_text($event, true),
+ 'attendees' => join(', ', $attendees_list),
+ 'sender' => $this->sender['name'],
+ 'organizer' => $this->sender['name'],
+ )
+ ));
+
+ // append links for direct invitation replies
+ if ($method == 'REQUEST' && ($token = $this->store_invitation($event, $recipient['email']))) {
+ $mailbody .= "\n\n" . $this->gettext(array(
+ 'name' => 'invitationattendlinks',
+ 'vars' => array('url' => $this->plugin->get_url(array('action' => 'attend', 't' => $token))),
+ ));
+ }
+ else if ($method == 'CANCEL') {
+ $this->cancel_itip_invitation($event);
+ }
+
+ $message->headers($headers, true);
+ $message->setTXTBody(rcube_mime::format_flowed($mailbody, 79));
+
+ // finally send the message
+ $this->itip_send = true;
+ $sent = $this->rc->deliver_message($message, $headers['X-Sender'], $mailto, $smtp_error);
+ $this->itip_send = false;
+
+ return $sent;
+ }
+
+ /**
+ * Plugin hook triggered by rcube::deliver_message() before delivering a message.
+ * Here we can set the 'smtp_server' config option to '' in order to use
+ * PHP's mail() function for unauthenticated email sending.
+ */
+ public function before_send_hook($p)
+ {
+ if ($this->itip_send && !$this->rc->user->ID && $this->rc->config->get('calendar_itip_smtp_server', null) === '') {
+ $this->rc->config->set('smtp_server', '');
+ }
+
+ return $p;
+ }
+
+ /**
+ * Plugin hook to alter SMTP authentication.
+ * This is used if iTip messages are to be sent from an unauthenticated session
+ */
+ public function smtp_connect_hook($p)
+ {
+ // replace smtp auth settings if we're not in an authenticated session
+ if ($this->itip_send && !$this->rc->user->ID) {
+ foreach (array('smtp_server', 'smtp_user', 'smtp_pass') as $prop) {
+ $p[$prop] = $this->rc->config->get("calendar_itip_$prop", $p[$prop]);
+ }
+ }
+
+ return $p;
+ }
+
+ /**
+ * Helper function to build a Mail_mime object to send an iTip message
+ *
+ * @param array Event object to send
+ * @param string iTip method (REQUEST|REPLY|CANCEL)
+ * @return object Mail_mime object with message data
+ */
+ public function compose_itip_message($event, $method)
+ {
+ $from = rcube_idn_to_ascii($this->sender['email']);
+ $from_utf = rcube_idn_to_utf8($from);
+ $sender = format_email_recipient($from, $this->sender['name']);
+
+ // truncate list attendees down to the recipient of the iTip Reply.
+ // constraints for a METHOD:REPLY according to RFC 5546
+ if ($method == 'REPLY') {
+ $replying_attendee = null; $reply_attendees = array();
+ foreach ($event['attendees'] as $attendee) {
+ if ($attendee['role'] == 'ORGANIZER') {
+ $reply_attendees[] = $attendee;
+ }
+ else if (strcasecmp($attedee['email'], $from) == 0 || strcasecmp($attendee['email'], $from_utf) == 0) {
+ $replying_attendee = $attendee;
+ }
+ }
+ if ($replying_attendee) {
+ $reply_attendees[] = $replying_attendee;
+ $event['attendees'] = $reply_attendees;
+ }
+ }
+
+ // compose multipart message using PEAR:Mail_Mime
+ $message = new Mail_mime("\r\n");
+ $message->setParam('text_encoding', 'quoted-printable');
+ $message->setParam('head_encoding', 'quoted-printable');
+ $message->setParam('head_charset', RCMAIL_CHARSET);
+ $message->setParam('text_charset', RCMAIL_CHARSET . ";\r\n format=flowed");
+ $message->setContentType('multipart/alternative');
+
+ // compose common headers array
+ $headers = array(
+ 'From' => $sender,
+ 'Date' => $this->rc->user_date(),
+ 'Message-ID' => $this->rc->gen_message_id(),
+ 'X-Sender' => $from,
+ );
+ if ($agent = $this->rc->config->get('useragent')) {
+ $headers['User-Agent'] = $agent;
+ }
+
+ $message->headers($headers);
+
+ // attach ics file for this event
+ $ical = $this->plugin->get_ical();
+ $ics = $ical->export(array($event), $method, false, $method == 'REQUEST' && $this->plugin->driver ? array($this->plugin->driver, 'get_attachment_body') : false);
+ $message->addAttachment($ics, 'text/calendar', 'event.ics', false, '8bit', '', RCMAIL_CHARSET . "; method=" . $method);
+
+ return $message;
+ }
+
+
+ /**
+ * Handler for calendar/itip-status requests
+ */
+ public function get_itip_status($event, $existing = null)
+ {
+ $action = $event['rsvp'] ? 'rsvp' : '';
+ $status = $event['fallback'];
+ $latest = false;
+ $html = '';
+
+ if (is_numeric($event['changed']))
+ $event['changed'] = new DateTime('@'.$event['changed']);
+
+ // check if the given itip object matches the last state
+ if ($existing) {
+ $latest = ($event['sequence'] && $existing['sequence'] == $event['sequence']) ||
+ (!$event['sequence'] && $existing['changed'] && $existing['changed'] >= $event['changed']);
+ }
+
+ // determine action for REQUEST
+ if ($event['method'] == 'REQUEST') {
+ $html = html::div('rsvp-status', $this->gettext('acceptinvitation'));
+
+ if ($existing) {
+ $rsvp = $event['rsvp'];
+ $emails = $this->lib->get_user_emails();
+ foreach ($existing['attendees'] as $i => $attendee) {
+ if ($attendee['email'] && in_array(strtolower($attendee['email']), $emails)) {
+ $status = strtoupper($attendee['status']);
+ break;
+ }
+ }
+ }
+ else {
+ $rsvp = $event['rsvp'] && $this->rc->config->get('calendar_allow_itip_uninvited', true);
+ }
+
+ if ($status == 'unknown' && !$this->rc->config->get('calendar_allow_itip_uninvited', true)) {
+ $html = html::div('rsvp-status', $this->gettext('notanattendee'));
+ $action = 'import';
+ }
+ else if (in_array($status, array('ACCEPTED','TENTATIVE','DECLINED','DELEGATED'))) {
+ $html = html::div('rsvp-status ' . strtolower($status), $this->gettext('youhave'.strtolower($status)));
+
+ if ($existing && ($existing['sequence'] > $event['sequence'] || (!$event['sequence'] && $existing['changed'] && $existing['changed'] > $event['changed']))) {
+ $action = ''; // nothing to do here, outdated invitation
+ }
+ else if (!$existing && !$rsvp) {
+ $action = 'import';
+ }
+ }
+ }
+ // determine action for REPLY
+ else if ($event['method'] == 'REPLY') {
+ // check whether the sender already is an attendee
+ if ($existing) {
+ $action = $this->rc->config->get('calendar_allow_itip_uninvited', true) ? 'accept' : '';
+ $listed = false;
+ foreach ($existing['attendees'] as $attendee) {
+ if ($attendee['role'] != 'ORGANIZER' && strcasecmp($attendee['email'], $event['attendee']) == 0) {
+ if (in_array($status, array('ACCEPTED','TENTATIVE','DECLINED','DELEGATED'))) {
+ $html = html::div('rsvp-status ' . strtolower($status), $this->gettext('attendee'.strtolower($status)));
+ }
+ $action = $attendee['status'] == $status ? '' : 'update';
+ $listed = true;
+ break;
+ }
+ }
+
+ if (!$listed) {
+ $html = html::div('rsvp-status', $this->gettext('itipnewattendee'));
+ }
+ }
+ else {
+ $html = html::div('rsvp-status hint', $this->gettext('itipobjectnotfound'));
+ $action = '';
+ }
+ }
+ else if ($event['method'] == 'CANCEL') {
+ if (!$existing) {
+ $html = html::div('rsvp-status hint', $this->gettext('itipobjectnotfound'));
+ $action = '';
+ }
+ }
+
+ return array(
+ 'uid' => $event['uid'],
+ 'id' => asciiwords($event['uid'], true),
+ 'saved' => $existing ? true : false,
+ 'latest' => $latest,
+ 'status' => $status,
+ 'action' => $action,
+ 'html' => $html,
+ );
+ }
+
+ /**
+ * Build inline UI elements for iTip messages
+ */
+ public function mail_itip_inline_ui($event, $method, $mime_id, $task, $message_date = null)
+ {
+ $buttons = array();
+ $dom_id = asciiwords($event['uid'], true);
+ $rsvp_status = 'unknown';
+
+ // pass some metadata about the event and trigger the asynchronous status check
+ $changed = is_object($event['changed']) ? $event['changed'] : $message_date;
+ $metadata = array(
+ 'uid' => $event['uid'],
+ 'changed' => $changed ? $changed->format('U') : 0,
+ 'sequence' => intval($event['sequence']),
+ 'method' => $method,
+ 'task' => $task,
+ );
+
+ // create buttons to be activated from async request checking existence of this event in local calendars
+ $buttons[] = html::div(array('id' => 'loading-'.$dom_id, 'class' => 'rsvp-status loading'), $this->gettext('loading'));
+
+ // on iTip REPLY we have two options:
+ if ($method == 'REPLY') {
+ $title = $this->gettext('itipreply');
+
+ foreach ($event['attendees'] as $attendee) {
+ if (!empty($attendee['email']) && $attendee['role'] != 'ORGANIZER') {
+ $metadata['attendee'] = $attendee['email'];
+ $rsvp_status = strtoupper($attendee['status']);
+ break;
+ }
+ }
+
+ // 1. update the attendee status on our copy
+ $update_button = html::tag('input', array(
+ 'type' => 'button',
+ 'class' => 'button',
+ 'onclick' => "rcube_libcalendaring.add_from_itip_mail('" . JQ($mime_id) . "', '$task')",
+ 'value' => $this->gettext('updateattendeestatus'),
+ ));
+
+ // 2. accept or decline a new or delegate attendee
+ $accept_buttons = html::tag('input', array(
+ 'type' => 'button',
+ 'class' => "button accept",
+ 'onclick' => "rcube_libcalendaring.add_from_itip_mail('" . JQ($mime_id) . "', '$task')",
+ 'value' => $this->gettext('acceptattendee'),
+ ));
+ $accept_buttons .= html::tag('input', array(
+ 'type' => 'button',
+ 'class' => "button decline",
+ 'onclick' => "rcube_libcalendaring.decline_attendee_reply('" . JQ($mime_id) . "', '$task')",
+ 'value' => $this->gettext('declineattendee'),
+ ));
+
+ $buttons[] = html::div(array('id' => 'update-'.$dom_id, 'style' => 'display:none'), $update_button);
+ $buttons[] = html::div(array('id' => 'accept-'.$dom_id, 'style' => 'display:none'), $accept_buttons);
+ }
+ // when receiving iTip REQUEST messages:
+ else if ($method == 'REQUEST') {
+ $emails = $this->lib->get_user_emails();
+ $title = $event['sequence'] > 0 ? $this->gettext('itipupdate') : $this->gettext('itipinvitation');
+ $metadata['rsvp'] = true;
+
+ // 1. display RSVP buttons (if the user was invited)
+ foreach (array('accepted','tentative','declined') as $method) {
+ $rsvp_buttons .= html::tag('input', array(
+ 'type' => 'button',
+ 'class' => "button $method",
+ 'onclick' => "rcube_libcalendaring.add_from_itip_mail('" . JQ($mime_id) . "', '$task', '$method')",
+ 'value' => $this->gettext('itip' . $method),
+ ));
+ }
+
+ // 2. Simply import the event without replying
+ $import_button = html::tag('input', array(
+ 'type' => 'button',
+ 'class' => 'button',
+ 'onclick' => "rcube_libcalendaring.add_from_itip_mail('" . JQ($mime_id) . "', '$task')",
+ 'value' => $this->gettext('importtocalendar'),
+ ));
+
+ // check my status
+ foreach ($event['attendees'] as $attendee) {
+ if ($attendee['email'] && in_array(strtolower($attendee['email']), $emails)) {
+ $metadata['attendee'] = $attendee['email'];
+ $metadata['rsvp'] = $attendee['rsvp'] || $attendee['role'] != 'NON-PARTICIPANT';
+ $rsvp_status = strtoupper($attendee['status']);
+ break;
+ }
+ }
+
+ $buttons[] = html::div(array('id' => 'rsvp-'.$dom_id, 'class' => 'rsvp-buttons', 'style' => 'display:none'), $rsvp_buttons);
+ }
+ // for CANCEL messages, we can:
+ else if ($method == 'CANCEL') {
+ $title = $this->gettext('itipcancellation');
+
+ // 1. remove the event from our calendar
+ $button_remove = html::tag('input', array(
+ 'type' => 'button',
+ 'class' => 'button',
+ 'onclick' => "rcube_libcalendaring.remove_from_itip('" . JQ($event['uid']) . "', '$task', '" . JQ($event['title']) . "')",
+ 'value' => $this->gettext('removefromcalendar'),
+ ));
+
+ // 2. update our copy with status=cancelled
+ /* TODO: implement CANCELLED status in calendar UI first
+ $button_update = html::tag('input', array(
+ 'type' => 'button',
+ 'class' => 'button',
+ 'onclick' => "rcube_libcalendaring.add_from_itip_mail('" . JQ($mime_id) . "')",
+ 'value' => $this->gettext('updatemycopy'),
+ ));
+ */
+
+ $buttons[] = html::div(array('id' => 'rsvp-'.$dom_id, 'style' => 'display:none'), $button_remove . $button_update);
+
+ $rsvp_status = 'CANCELLED';
+ $metadata['rsvp'] = true;
+ }
+
+ // append generic import button
+ if ($import_button) {
+ $buttons[] = html::div(array('id' => 'import-'.$dom_id, 'style' => 'display:none'), $import_button);
+ }
+
+ // TODO: add field for COMMENT on iTip replies
+ // TODO: add option/checkbox to delete this message after update
+
+ // pass some metadata about the event and trigger the asynchronous status check
+ $metadata['fallback'] = $rsvp_status;
+ $metadata['rsvp'] = intval($metadata['rsvp']);
+
+ $this->rc->output->add_script("rcube_libcalendaring.fetch_itip_object_status(" . json_serialize($metadata) . ")", 'docready');
+
+ // get localized texts from the right domain
+ $this->rc->output->command('add_label', 'itip.savingdata', $this->gettext('savingdata'));
+ $this->rc->output->command('add_label', 'itip.declinedeleteconfirm', $this->gettext('declinedeleteconfirm'));
+ $this->rc->output->command('add_label', 'itip.declinedeleteconfirm', $this->gettext('declinedeleteconfirm'));
+
+ // show event details with buttons
+ return $this->itip_object_details_table($event, $title) .
+ html::div(array('class' => 'itip-buttons', 'id' => 'itip-buttons-' . asciiwords($metadata['uid'], true)), join('', $buttons));
+ }
+
+ /**
+ * Render event details in a table
+ */
+ function itip_object_details_table($event, $title)
+ {
+ $table = new html_table(array('cols' => 2, 'border' => 0, 'class' => 'calendar-eventdetails'));
+ $table->add('ititle', $title);
+ $table->add('title', Q($event['title']));
+ $table->add('label', $this->plugin->gettext('date'), $this->domain);
+ $table->add('date', Q($this->lib->event_date_text($event)));
+ if ($event['location']) {
+ $table->add('label', $this->plugin->gettext('location'), $this->domain);
+ $table->add('location', Q($event['location']));
+ }
+ if ($event['comment']) {
+ $table->add('label', $this->plugin->gettext('comment'), $this->domain);
+ $table->add('location', Q($event['comment']));
+ }
+
+ return $table->show();
+ }
+
+
+ /**
+ * Create iTIP invitation token for later replies via URL
+ *
+ * @param array Hash array with event properties
+ * @param string Attendee email address
+ * @return string Invitation token
+ */
+ public function store_invitation($event, $attendee)
+ {
+ // empty stub
+ return false;
+ }
+
+ /**
+ * Mark invitations for the given event as cancelled
+ *
+ * @param array Hash array with event properties
+ */
+ public function cancel_itip_invitation($event)
+ {
+ // empty stub
+ return false;
+ }
+
+}
diff --git a/plugins/libcalendaring/libcalendaring.js b/plugins/libcalendaring/libcalendaring.js
index b69d6bd..4acb942 100644
--- a/plugins/libcalendaring/libcalendaring.js
+++ b/plugins/libcalendaring/libcalendaring.js
@@ -1,10 +1,9 @@
/**
* Basic Javascript utilities for calendar-related plugins
*
- * @version @package_version@
* @author Thomas Bruederli <bruederli at kolabsys.com>
*
- * Copyright (C) 2012, Kolab Systems AG <contact at kolabsys.com>
+ * Copyright (C) 2012-2014, Kolab Systems AG <contact at kolabsys.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
@@ -436,6 +435,88 @@ function rcube_libcalendaring(settings)
};
}
+////// static methods
+
+/**
+ *
+ */
+rcube_libcalendaring.add_from_itip_mail = function(mime_id, task, status)
+{
+ // ask user to delete the declined event from the local calendar (#1670)
+ var del = false;
+ if (rcmail.env.rsvp_saved && status == 'declined') {
+ del = confirm(rcmail.gettext('itip.declinedeleteconfirm'));
+ }
+
+ rcmail.http_post(task + '/mailimportitip', {
+ '_uid': rcmail.env.uid,
+ '_mbox': rcmail.env.mailbox,
+ '_part': mime_id,
+ '_folder': $('#itip-saveto').val(),
+ '_status': status,
+ '_del': del?1:0
+ }, rcmail.set_busy(true, 'itip.savingdata'));
+
+ return false;
+};
+
+/**
+ *
+ */
+rcube_libcalendaring.remove_from_itip = function(uid, task, title)
+{
+ if (confirm(rcmail.gettext('itip.deleteobjectconfirm').replace('$title', title))) {
+ rcmail.http_post(task + '/itip-remove',
+ { uid: uid },
+ rcmail.set_busy(true, 'itip.savingdata'));
+ }
+};
+
+/**
+ *
+ */
+rcube_libcalendaring.decline_attendee_reply = function(mime_id)
+{
+ // TODO: show dialog for entering a comment and send to server
+
+ return false;
+};
+
+/**
+ *
+ */
+rcube_libcalendaring.fetch_itip_object_status = function(p)
+{
+ rcmail.http_post(p.task + '/itip-status', { data: p });
+};
+
+/**
+ *
+ */
+rcube_libcalendaring.update_itip_object_status = function(p)
+{
+ rcmail.env.rsvp_saved = p.saved;
+
+ // hide all elements first
+ $('#itip-buttons-'+p.id+' > div').hide();
+ $('#rsvp-'+p.id+' .folder-select').remove();
+
+ if (p.html) {
+ // append/replace rsvp status display
+ $('#loading-'+p.id).next('.rsvp-status').remove();
+ $('#loading-'+p.id).hide().after(p.html);
+ }
+
+ // enable/disable rsvp buttons
+ if (p.action == 'rsvp') {
+ $('#rsvp-'+p.id+' input.button').prop('disabled', false)
+ .filter('.'+String(p.status||'unknown').toLowerCase()).prop('disabled', p.latest);
+ }
+
+ // show rsvp/import buttons (with calendar selector)
+ $('#'+p.action+'-'+p.id).show().append(p.select);
+};
+
// extend jQuery
(function($){
@@ -455,4 +536,7 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
var libcal = new rcube_libcalendaring(rcmail.env.libcal_settings);
rcmail.addEventListener('plugin.display_alarms', function(alarms){ libcal.display_alarms(alarms); });
}
+
+ rcmail.addEventListener('plugin.update_itip_object_status', rcube_libcalendaring.update_itip_object_status);
+ rcmail.addEventListener('plugin.fetch_itip_object_status', rcube_libcalendaring.fetch_itip_object_status);
});
diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php
index 88f5ed4..d33df67 100644
--- a/plugins/libcalendaring/libcalendaring.php
+++ b/plugins/libcalendaring/libcalendaring.php
@@ -113,7 +113,17 @@ class libcalendaring extends rcube_plugin
require_once($self->home . '/libvcalendar.php');
return new libvcalendar();
}
-
+
+ /**
+ * Load iTip functions
+ */
+ public static function get_itip($domain = 'libcalendaring')
+ {
+ $self = self::get_instance();
+ require_once($self->home . '/lib/libcalendaring_itip.php');
+ return new libcalendaring_itip($self, $domain);
+ }
+
/**
* Shift dates into user's current timezone
*
@@ -304,6 +314,27 @@ class libcalendaring extends rcube_plugin
return $html;
}
+ /**
+ * Get a list of email addresses of the current user (from login and identities)
+ */
+ public function get_user_emails()
+ {
+ $emails = array();
+ $plugin = $this->rc->plugins->exec_hook('calendar_user_emails', array('emails' => $emails));
+ $emails = array_map('strtolower', $plugin['emails']);
+
+ if ($plugin['abort']) {
+ return $emails;
+ }
+
+ $emails[] = $this->rc->user->get_username();
+ foreach ($this->rc->user->list_identities() as $identity) {
+ $emails[] = strtolower($identity['email']);
+ }
+
+ return array_unique($emails);
+ }
+
/********* Alarms handling *********/
diff --git a/plugins/libcalendaring/localization/bg_BG.inc b/plugins/libcalendaring/localization/bg_BG.inc
index 2c46ab7..9ba5d7a 100644
--- a/plugins/libcalendaring/localization/bg_BG.inc
+++ b/plugins/libcalendaring/localization/bg_BG.inc
@@ -1,2 +1,49 @@
<?php
+
+$labels = array();
+
+$labels['alarmemail'] = 'Send Email';
+$labels['alarmdisplay'] = 'Show message';
+$labels['alarmdisplayoption'] = 'Message';
$labels['alarmemailoption'] = 'ÐлекÑÑонна поÑа';
+$labels['alarmat'] = 'at $datetime';
+$labels['trigger@'] = 'on date';
+$labels['trigger-M'] = 'minutes before';
+$labels['trigger-H'] = 'hours before';
+$labels['trigger-D'] = 'days before';
+$labels['trigger+M'] = 'minutes after';
+$labels['trigger+H'] = 'hours after';
+$labels['trigger+D'] = 'days after';
+$labels['addalarm'] = 'add alarm';
+
+$labels['alarmtitle'] = 'Upcoming events';
+$labels['dismissall'] = 'Dismiss all';
+$labels['dismiss'] = 'Dismiss';
+$labels['snooze'] = 'Snooze';
+$labels['repeatinmin'] = 'Repeat in $min minutes';
+$labels['repeatinhr'] = 'Repeat in 1 hour';
+$labels['repeatinhrs'] = 'Repeat in $hrs hours';
+$labels['repeattomorrow'] = 'Repeat tomorrow';
+$labels['repeatinweek'] = 'Repeat in a week';
+
+$labels['showmore'] = 'Show more...';
+
+// itip related labels
+$labels['itipinvitation'] = 'Invitation to';
+$labels['itipupdate'] = 'Update of';
+$labels['itipcancellation'] = 'ÐÑказано:';
+$labels['itipreply'] = 'ÐÑÐ³Ð¾Ð²Ð¾Ñ Ð½Ð°';
+$labels['itipaccepted'] = 'ÐÑиемане';
+$labels['itiptentative'] = 'Ðоже би';
+$labels['itipdeclined'] = 'ÐÑÑ
вÑÑлÑне';
+
+$labels['itipsubjectaccepted'] = '"$title" беÑе пÑиеÑо Ð¾Ñ $name';
+$labels['itipsubjectdeclined'] = '"$title" беÑе оÑÑ
вÑÑлено Ð¾Ñ $name';
+
+$labels['importtocalendar'] = 'Ðапазване в Ð¼Ð¾Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ';
+$labels['removefromcalendar'] = 'ÐÑемаÑ
ване Ð¾Ñ Ð¼Ð¾Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ';
+$labels['updateattendeestatus'] = 'ÐодновÑване на ÑÑаÑÑÑÑÑ Ð½Ð° ÑÑаÑÑника';
+$labels['acceptinvitation'] = 'ÐÑиемаÑе ли Ñази покана?';
+$labels['youhaveaccepted'] = 'Ðие ÑÑе пÑиели Ñази покана';
+
+$labels['savingdata'] = 'Ðапазване на данни...';
\ No newline at end of file
diff --git a/plugins/libcalendaring/localization/cs_CZ.inc b/plugins/libcalendaring/localization/cs_CZ.inc
index aa6a04c..ca7f6ba 100644
--- a/plugins/libcalendaring/localization/cs_CZ.inc
+++ b/plugins/libcalendaring/localization/cs_CZ.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'Poslat e-mail';
$labels['alarmdisplay'] = 'Zobrazit zprávu';
$labels['alarmdisplayoption'] = 'Zpráva';
@@ -12,6 +15,7 @@ $labels['trigger+M'] = 'minut po';
$labels['trigger+H'] = 'hodin po';
$labels['trigger+D'] = 'dnů po';
$labels['addalarm'] = 'pÅidat upozornÄnÃ';
+
$labels['alarmtitle'] = 'BlÞÃcà se události';
$labels['dismissall'] = 'Zrušit vše';
$labels['dismiss'] = 'Zrušit';
@@ -21,4 +25,29 @@ $labels['repeatinhr'] = 'Zopakovat za 1 hodinu';
$labels['repeatinhrs'] = 'Zopakovat za $hrs hodin';
$labels['repeattomorrow'] = 'Zopakovat zÃtra';
$labels['repeatinweek'] = 'Zopakovat za týden';
+
$labels['showmore'] = 'Ukázat vÃc...';
+
+// itip related labels
+$labels['itipinvitation'] = 'Pozvánà na událost';
+$labels['itipupdate'] = 'Aktualizace události';
+$labels['itipcancellation'] = 'Zrušeno:';
+$labels['itipreply'] = 'OdpovÄÄ na';
+$labels['itipaccepted'] = 'Potvrdit';
+$labels['itiptentative'] = 'Možná';
+$labels['itipdeclined'] = 'OdmÃtnout';
+
+$labels['itipsubjectaccepted'] = '$name potvrdil(a) úÄas na události "$title"';
+$labels['itipsubjecttentative'] = '$name nezávaznÄ potvrdil(a) úÄast na události "$title"';
+$labels['itipsubjectdeclined'] = '$name odmÃtl(a) úÄast na události "$title"';
+
+$labels['importtocalendar'] = 'Uložit do kalendáÅe';
+$labels['removefromcalendar'] = 'Odstranit z kalendáÅe';
+$labels['updateattendeestatus'] = 'Aktualizovat stav úÄastnÃka';
+$labels['acceptinvitation'] = 'Chcete pÅijmout toto pozvánà (potvrdit úÄast)?';
+$labels['youhaveaccepted'] = 'PÅijal(a) jste toto pozvánÃ';
+$labels['youhavetentative'] = 'NezávaznÄ jste pÅijal(a) toto pozvánÃ';
+$labels['youhavedeclined'] = 'OdmÃtl(a) jste toto pozvánÃ';
+$labels['notanattendee'] = 'Nejste na seznamu úÄastnÃků této události';
+
+$labels['savingdata'] = 'Ukládám data...';
\ No newline at end of file
diff --git a/plugins/libcalendaring/localization/de_CH.inc b/plugins/libcalendaring/localization/de_CH.inc
index 565cf8b..23d6992 100644
--- a/plugins/libcalendaring/localization/de_CH.inc
+++ b/plugins/libcalendaring/localization/de_CH.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'E-Mail senden';
$labels['alarmdisplay'] = 'Nachricht anzeigen';
$labels['alarmdisplayoption'] = 'Nachricht';
@@ -12,6 +15,7 @@ $labels['trigger+M'] = 'Minuten danach';
$labels['trigger+H'] = 'Stunden danach';
$labels['trigger+D'] = 'Tage danach';
$labels['addalarm'] = 'Erinnerung hinzufügen';
+
$labels['alarmtitle'] = 'Anstehende Termine';
$labels['dismissall'] = 'Alle ignorieren';
$labels['dismiss'] = 'Ignorieren';
@@ -21,4 +25,32 @@ $labels['repeatinhr'] = 'Wiederholung in 1 Stunde';
$labels['repeatinhrs'] = 'Wiederholung in $hrs Stunden';
$labels['repeattomorrow'] = 'Wiederholung morgen';
$labels['repeatinweek'] = 'Wiederholung in einer Woche';
+
$labels['showmore'] = 'Mehr anzeigen...';
+
+// itip related labels
+$labels['itipinvitation'] = 'Einladung zu';
+$labels['itipupdate'] = 'Aktialisiert:';
+$labels['itipcancellation'] = 'Abgesagt:';
+$labels['itipreply'] = 'Antwort zu';
+$labels['itipaccepted'] = 'Akzeptieren';
+$labels['itiptentative'] = 'Mit Vorbehalt';
+$labels['itipdeclined'] = 'Ablehnen';
+
+$labels['itipsubjectaccepted'] = 'Einladung zu "$title" wurde von $name angenommen';
+$labels['itipsubjecttentative'] = 'Einladung zu "$title" wurde von $name mit Vorbehalt angenommen';
+$labels['itipsubjectdeclined'] = 'Einladung zu "$title" wurde von $name abgelehnt';
+
+$labels['importtocalendar'] = 'In Kalender übernehmen';
+$labels['removefromcalendar'] = 'Aus meinem Kalender löschen';
+$labels['updateattendeestatus'] = 'Teilnehmerstatus aktualisieren';
+$labels['acceptinvitation'] = 'Möchten Sie die Einladung zu diesem Termin annehmen?';
+$labels['youhaveaccepted'] = 'Sie haben die Einladung angenommen';
+$labels['youhavetentative'] = 'Sie haben die Einladung mit Vorbehalt angenommen';
+$labels['youhavedeclined'] = 'Sie haben die Einladung abgelehnt';
+$labels['notanattendee'] = 'Sie sind nicht in der Liste der Teilnehmer aufgeführt';
+
+$labels['deleteobjectconfirm'] = 'Möchten Sie dieses Objekt wirklich löschen?';
+$labels['declinedeleteconfirm'] = 'Soll das abgelehnte Objekt ebenfalls aus Ihrem Konto gelöscht werden?';
+
+$labels['savingdata'] = 'Speichere...';
diff --git a/plugins/libcalendaring/localization/de_DE.inc b/plugins/libcalendaring/localization/de_DE.inc
index 565cf8b..23d6992 100644
--- a/plugins/libcalendaring/localization/de_DE.inc
+++ b/plugins/libcalendaring/localization/de_DE.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'E-Mail senden';
$labels['alarmdisplay'] = 'Nachricht anzeigen';
$labels['alarmdisplayoption'] = 'Nachricht';
@@ -12,6 +15,7 @@ $labels['trigger+M'] = 'Minuten danach';
$labels['trigger+H'] = 'Stunden danach';
$labels['trigger+D'] = 'Tage danach';
$labels['addalarm'] = 'Erinnerung hinzufügen';
+
$labels['alarmtitle'] = 'Anstehende Termine';
$labels['dismissall'] = 'Alle ignorieren';
$labels['dismiss'] = 'Ignorieren';
@@ -21,4 +25,32 @@ $labels['repeatinhr'] = 'Wiederholung in 1 Stunde';
$labels['repeatinhrs'] = 'Wiederholung in $hrs Stunden';
$labels['repeattomorrow'] = 'Wiederholung morgen';
$labels['repeatinweek'] = 'Wiederholung in einer Woche';
+
$labels['showmore'] = 'Mehr anzeigen...';
+
+// itip related labels
+$labels['itipinvitation'] = 'Einladung zu';
+$labels['itipupdate'] = 'Aktialisiert:';
+$labels['itipcancellation'] = 'Abgesagt:';
+$labels['itipreply'] = 'Antwort zu';
+$labels['itipaccepted'] = 'Akzeptieren';
+$labels['itiptentative'] = 'Mit Vorbehalt';
+$labels['itipdeclined'] = 'Ablehnen';
+
+$labels['itipsubjectaccepted'] = 'Einladung zu "$title" wurde von $name angenommen';
+$labels['itipsubjecttentative'] = 'Einladung zu "$title" wurde von $name mit Vorbehalt angenommen';
+$labels['itipsubjectdeclined'] = 'Einladung zu "$title" wurde von $name abgelehnt';
+
+$labels['importtocalendar'] = 'In Kalender übernehmen';
+$labels['removefromcalendar'] = 'Aus meinem Kalender löschen';
+$labels['updateattendeestatus'] = 'Teilnehmerstatus aktualisieren';
+$labels['acceptinvitation'] = 'Möchten Sie die Einladung zu diesem Termin annehmen?';
+$labels['youhaveaccepted'] = 'Sie haben die Einladung angenommen';
+$labels['youhavetentative'] = 'Sie haben die Einladung mit Vorbehalt angenommen';
+$labels['youhavedeclined'] = 'Sie haben die Einladung abgelehnt';
+$labels['notanattendee'] = 'Sie sind nicht in der Liste der Teilnehmer aufgeführt';
+
+$labels['deleteobjectconfirm'] = 'Möchten Sie dieses Objekt wirklich löschen?';
+$labels['declinedeleteconfirm'] = 'Soll das abgelehnte Objekt ebenfalls aus Ihrem Konto gelöscht werden?';
+
+$labels['savingdata'] = 'Speichere...';
diff --git a/plugins/libcalendaring/localization/en_US.inc b/plugins/libcalendaring/localization/en_US.inc
index 702aac5..ea0ad10 100644
--- a/plugins/libcalendaring/localization/en_US.inc
+++ b/plugins/libcalendaring/localization/en_US.inc
@@ -28,3 +28,41 @@ $labels['repeatinweek'] = 'Repeat in a week';
$labels['showmore'] = 'Show more...';
+// itip related labels
+$labels['itipinvitation'] = 'Invitation to';
+$labels['itipupdate'] = 'Update of';
+$labels['itipcancellation'] = 'Cancelled:';
+$labels['itipreply'] = 'Reply to';
+$labels['itipaccepted'] = 'Accept';
+$labels['itiptentative'] = 'Maybe';
+$labels['itipdeclined'] = 'Decline';
+
+$labels['itipobjectnotfound'] = 'The object referred by this message was not found in your account.';
+$labels['itipsubjectaccepted'] = '"$title" has been accepted by $name';
+$labels['itipsubjecttentative'] = '"$title" has been tentatively accepted by $name';
+$labels['itipsubjectdeclined'] = '"$title" has been declined by $name';
+
+$labels['itipnewattendee'] = 'This is a reply from a new participant';
+$labels['updateattendeestatus'] = 'Update the participant\'s status';
+$labels['acceptinvitation'] = 'Do you accept this invitation?';
+$labels['acceptattendee'] = 'Accept attendee';
+$labels['declineattendee'] = 'Decline attendee';
+$labels['youhaveaccepted'] = 'You have accepted this invitation';
+$labels['youhavetentative'] = 'You have tentatively accepted this invitation';
+$labels['youhavedeclined'] = 'You have declined this invitation';
+$labels['youhavedelegated'] = 'You have delegated this invitation';
+$labels['attendeeaccepted'] = 'Participant has accepted';
+$labels['attendeetentative'] = 'Participant has tentatively accepted';
+$labels['attendeedeclined'] = 'Participant has declined';
+$labels['attendeedelegated'] = 'Participant has delegated';
+$labels['notanattendee'] = 'You\'re not listed as an attendee of this object';
+
+$labels['importtocalendar'] = 'Save to my calendar';
+$labels['removefromcalendar'] = 'Remove from my calendar';
+$labels['updatemycopy'] = 'Update my copy';
+
+$labels['deleteobjectconfirm'] = 'Do you really want to delete this object?';
+$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined object from your account?';
+
+$labels['savingdata'] = 'Saving data...';
+
diff --git a/plugins/libcalendaring/localization/fr_FR.inc b/plugins/libcalendaring/localization/fr_FR.inc
index e140901..10b1dc8 100644
--- a/plugins/libcalendaring/localization/fr_FR.inc
+++ b/plugins/libcalendaring/localization/fr_FR.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'Envoyer un email';
$labels['alarmdisplay'] = 'Voir le message';
$labels['alarmdisplayoption'] = 'Message';
@@ -12,6 +15,7 @@ $labels['trigger+M'] = 'minutes après';
$labels['trigger+H'] = 'heures après';
$labels['trigger+D'] = 'jours après';
$labels['addalarm'] = 'ajouter alarme';
+
$labels['alarmtitle'] = 'Evénements à venir';
$labels['dismissall'] = 'Tout supprimer';
$labels['dismiss'] = 'Abandonner';
@@ -21,4 +25,30 @@ $labels['repeatinhr'] = 'Répéter dans 1 heure';
$labels['repeatinhrs'] = 'Répéter dans $hrs heures';
$labels['repeattomorrow'] = 'Répéter demain';
$labels['repeatinweek'] = 'Répéter dans une semaine';
+
$labels['showmore'] = 'Afficher plus...';
+
+// itip related labels
+$labels['itipinvitation'] = 'Invitation à ';
+$labels['itipupdate'] = 'Mise à jour de';
+$labels['itipcancellation'] = 'Annulation:';
+$labels['itipreply'] = 'Répondre à ';
+$labels['itipaccepted'] = 'Accepter';
+$labels['itiptentative'] = 'Peut-être';
+$labels['itipdeclined'] = 'Refuser';
+
+$labels['itipsubjectaccepted'] = '"$title" a été accepté par $name';
+$labels['itipsubjecttentative'] = '"$title" a été accepté provisoirement par $name';
+$labels['itipsubjectdeclined'] = '"$title" a été refusé par $name';
+
+$labels['importtocalendar'] = 'Enregistrer mon agenda';
+$labels['removefromcalendar'] = 'Supprimer de mon agenda';
+$labels['updateattendeestatus'] = 'Modifier le statut des participants';
+$labels['acceptinvitation'] = 'Acceptez-vous cette invitation?';
+$labels['youhaveaccepted'] = 'Vous avez accepté cette invitation';
+$labels['youhavetentative'] = 'Vous avez accepté provisoirement cette invitation';
+$labels['youhavedeclined'] = 'Vous avez refusé cette invitation';
+$labels['notanattendee'] = 'Vous n\'êtes pas dans la liste des participants à cet évènement';
+
+$labels['savingdata'] = 'Enregistrer...';
+
diff --git a/plugins/libcalendaring/localization/it_IT.inc b/plugins/libcalendaring/localization/it_IT.inc
new file mode 100644
index 0000000..bd19f85
--- /dev/null
+++ b/plugins/libcalendaring/localization/it_IT.inc
@@ -0,0 +1,28 @@
+<?php
+
+$labels = array();
+
+// itip related labels
+$labels['itipinvitation'] = 'Invito a';
+$labels['itipupdate'] = 'Aggiornamento di';
+$labels['itipcancellation'] = 'Annullato:';
+$labels['itipreply'] = 'Rispondi a';
+$labels['itipaccepted'] = 'Accetta';
+$labels['itiptentative'] = 'Forse';
+$labels['itipdeclined'] = 'Rifiuta';
+
+$labels['itipsubjectaccepted'] = '"$title" è stato accettato da $name';
+$labels['itipsubjecttentative'] = '"$title" è stato accettato con riserva da $name';
+$labels['itipsubjectdeclined'] = '"$title" è stato rifiutato da $name';
+
+$labels['importtocalendar'] = 'Salva nel mio calendario';
+$labels['removefromcalendar'] = 'Rimuovi dal mio calendario';
+$labels['updateattendeestatus'] = 'Aggiorna lo stato dei partecipanti';
+$labels['acceptinvitation'] = 'Accetti questo invito?';
+$labels['youhaveaccepted'] = 'Hai accettato questo invito';
+$labels['youhavetentative'] = 'Hai accettato con riserva questo invito';
+$labels['youhavedeclined'] = 'Hai rifiutato questo invito';
+
+$labels['savingdata'] = 'Salvataggio dati...';
+
+?>
\ No newline at end of file
diff --git a/plugins/libcalendaring/localization/ja_JP.inc b/plugins/libcalendaring/localization/ja_JP.inc
index 60f9eaa..b3d910d 100644
--- a/plugins/libcalendaring/localization/ja_JP.inc
+++ b/plugins/libcalendaring/localization/ja_JP.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'ã¡ã¼ã«éä¿¡';
$labels['alarmdisplay'] = 'ã¡ãã»ã¼ã¸è¡¨ç¤º';
$labels['alarmdisplayoption'] = 'ã¡ãã»ã¼ã¸';
@@ -12,6 +15,7 @@ $labels['trigger+M'] = 'åå¾';
$labels['trigger+H'] = 'æéå¾';
$labels['trigger+D'] = 'æ¥å¾';
$labels['addalarm'] = 'ã¢ã©ã¼ã 追å ';
+
$labels['alarmtitle'] = 'ä»å¾ã®ã¤ãã³ã';
$labels['dismissall'] = 'å
¨ã¦åé¤';
$labels['dismiss'] = 'åé¤';
@@ -21,4 +25,29 @@ $labels['repeatinhr'] = '1æéã§ç¹°è¿ã';
$labels['repeatinhrs'] = '$hrs ã§ç¹°è¿ã';
$labels['repeattomorrow'] = 'ææ¥ç¹°è¿ã';
$labels['repeatinweek'] = '1é±éã§ç¹°è¿ã';
+
$labels['showmore'] = 'ããã«è¡¨ç¤ºâ¦';
+
+// itip related labels
+$labels['itipinvitation'] = 'æå¾
ãã';
+$labels['itipupdate'] = 'æ´æ°';
+$labels['itipcancellation'] = 'ãã£ã³ã»ã«';
+$labels['itipreply'] = 'è¿ä¿¡';
+$labels['itipaccepted'] = 'æ¿è«¾';
+$labels['itiptentative'] = 'ãã¶ã';
+$labels['itipdeclined'] = 'è¾é';
+
+$labels['itipsubjectaccepted'] = '$name ã "$title" ãæ¿è«¾ãã¾ãã';
+$labels['itipsubjecttentative'] = '$name ã "$title" ãä»®æ¿è«¾ãã¾ãã';
+$labels['itipsubjectdeclined'] = '$name ã "$title" ãè¾éãã¾ãã';
+
+$labels['importtocalendar'] = 'ã«ã¬ã³ãã¼ã«ä¿å';
+$labels['removefromcalendar'] = 'ã«ã¬ã³ãã¼ããåé¤';
+$labels['updateattendeestatus'] = 'åå è
ã®ç¶æ³æ´æ°';
+$labels['acceptinvitation'] = 'ãã®æå¾
ãæ¿è«¾ãã¾ãã?';
+$labels['youhaveaccepted'] = 'ãã®æå¾
ãæ¿è«¾ãã¾ãã';
+$labels['youhavetentative'] = 'ãã®æå¾
ãä»®æ¿è«¾ãã¾ããã';
+$labels['youhavedeclined'] = 'ãã®æå¾
ãè¾éãã¾ããã';
+$labels['notanattendee'] = 'ãã®ã¤ãã³ãã®åºå¸è
ã¨ãã¦ä¸è¦§ã«ããã¾ãã';
+
+$labels['savingdata'] = 'ãã¼ã¿ãä¿åä¸â¦';
diff --git a/plugins/libcalendaring/localization/nl_NL.inc b/plugins/libcalendaring/localization/nl_NL.inc
index 41eb264..e54534b 100644
--- a/plugins/libcalendaring/localization/nl_NL.inc
+++ b/plugins/libcalendaring/localization/nl_NL.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'Verzend E-mail';
$labels['alarmdisplay'] = 'Bericht weergeven';
$labels['alarmdisplayoption'] = 'Bericht';
@@ -12,11 +15,39 @@ $labels['trigger+M'] = 'minuten na';
$labels['trigger+H'] = 'uren na';
$labels['trigger+D'] = 'dagen na';
$labels['addalarm'] = 'alarm toevoegen';
+
$labels['alarmtitle'] = 'Aankomende evenementen';
+$labels['dismissall'] = 'Dismiss all';
+$labels['dismiss'] = 'Dismiss';
$labels['snooze'] = 'Snooze';
$labels['repeatinmin'] = 'Herhaal over $min minuten';
$labels['repeatinhr'] = 'Herhaal over 1 uur';
$labels['repeatinhrs'] = 'Herhaal over $hrs uur';
$labels['repeattomorrow'] = 'Herhaal morgen';
$labels['repeatinweek'] = 'Herhaal over een week';
+
$labels['showmore'] = 'Toon meer...';
+
+// itip related labels
+$labels['itipinvitation'] = 'Uitnodiging voor';
+$labels['itipupdate'] = 'Update van';
+$labels['itipcancellation'] = 'Afgelast:';
+$labels['itipreply'] = 'Reply to';
+$labels['itipaccepted'] = 'Accepteer';
+$labels['itiptentative'] = 'Misschien';
+$labels['itipdeclined'] = 'Afwijzen';
+
+$labels['itipsubjectaccepted'] = '"$title" is geaccepteerd door $name';
+$labels['itipsubjecttentative'] = '"$title" has been tentatively accepted by $name';
+$labels['itipsubjectdeclined'] = '"$title" has been declined by $name';
+
+$labels['importtocalendar'] = 'Bewaar in mijn kalender';
+$labels['removefromcalendar'] = 'Verwijder van mijn kalender';
+$labels['updateattendeestatus'] = 'Update status van deelnemer';
+$labels['acceptinvitation'] = 'Accepteer je deze uitnodiging?';
+$labels['youhaveaccepted'] = 'Je hebt de uitnodiging geaccepteerd';
+$labels['youhavetentative'] = 'You have tentatively accepted this invitation';
+$labels['youhavedeclined'] = 'Je hebt deze uitnodiging afgewezen';
+$labels['notanattendee'] = 'You\'re not listed as an attendee of this event';
+
+$labels['savingdata'] = 'Data wordt opgeslagen...';
diff --git a/plugins/libcalendaring/localization/pl_PL.inc b/plugins/libcalendaring/localization/pl_PL.inc
index 73fe126..c8ccf8b 100644
--- a/plugins/libcalendaring/localization/pl_PL.inc
+++ b/plugins/libcalendaring/localization/pl_PL.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'WyÅlij e-mail';
$labels['alarmdisplay'] = 'Pokaż wiadomoÅÄ';
$labels['alarmdisplayoption'] = 'WiadomoÅÄ';
@@ -12,6 +15,7 @@ $labels['trigger+M'] = 'minut po';
$labels['trigger+H'] = 'godzin(y) po';
$labels['trigger+D'] = 'dni po';
$labels['addalarm'] = 'dodaj alarm';
+
$labels['alarmtitle'] = 'NadchodzÄ
ce zdarzenia';
$labels['dismissall'] = 'OdrzuÄ wszystkie';
$labels['dismiss'] = 'OdrzuÄ';
@@ -21,4 +25,29 @@ $labels['repeatinhr'] = 'Powtórz po godzinie';
$labels['repeatinhrs'] = 'Powtórz po $hrs godzinach';
$labels['repeattomorrow'] = 'Powtórz jutro';
$labels['repeatinweek'] = 'Powtórz za tydzieÅ';
+
$labels['showmore'] = 'Pokaż wiÄcej...';
+
+// itip related labels
+$labels['itipinvitation'] = 'Zaproszenie do';
+$labels['itipupdate'] = 'Aktualizacja';
+$labels['itipcancellation'] = 'Anulowano:';
+$labels['itipreply'] = 'Odpowiedź do';
+$labels['itipaccepted'] = 'Akceptuj';
+$labels['itiptentative'] = 'Może';
+$labels['itipdeclined'] = 'OdrzuÄ';
+
+$labels['itipsubjectaccepted'] = '"$title" zostaÅo zaakceptowane przez $name';
+$labels['itipsubjecttentative'] = '"$title" zostaÅo warunkowo zaakceptowane przez $name';
+$labels['itipsubjectdeclined'] = '"$title" zostaÅo odrzucone przez $name';
+
+$labels['importtocalendar'] = 'Zapisz w moim kalendarzu';
+$labels['removefromcalendar'] = 'UsuÅ z mojego kalendarza';
+$labels['updateattendeestatus'] = 'Zaktualizuj status uczestnika';
+$labels['acceptinvitation'] = 'Czy akceptujesz to zdarzenie?';
+$labels['youhaveaccepted'] = 'ZaakceptowaÅeÅ to zaproszenie';
+$labels['youhavetentative'] = 'ZaakceptowaÅeÅ to zdarzenie warunkowo';
+$labels['youhavedeclined'] = 'OdrzuciÅeÅ to zdarzenie';
+$labels['notanattendee'] = 'Nie jesteÅ na liÅcie uczestników tego zdarzenia';
+
+$labels['savingdata'] = 'ZapisujÄ dane...';
diff --git a/plugins/libcalendaring/localization/pt_BR.inc b/plugins/libcalendaring/localization/pt_BR.inc
index 481ebda..7791ad7 100644
--- a/plugins/libcalendaring/localization/pt_BR.inc
+++ b/plugins/libcalendaring/localization/pt_BR.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'Enviar Email';
$labels['alarmdisplay'] = 'Mostrar mensagem';
$labels['alarmdisplayoption'] = 'Mensagem';
@@ -12,6 +15,7 @@ $labels['trigger+M'] = 'minutos depois';
$labels['trigger+H'] = 'horas depois';
$labels['trigger+D'] = 'dias depois';
$labels['addalarm'] = 'adicionar alarme';
+
$labels['alarmtitle'] = 'Próximos eventos';
$labels['dismissall'] = 'Dispensar tudo';
$labels['dismiss'] = 'Dispensar';
@@ -21,4 +25,28 @@ $labels['repeatinhr'] = 'Repetir em 1 hora';
$labels['repeatinhrs'] = 'Repetir em $hrs horas';
$labels['repeattomorrow'] = 'Repetir amanhã';
$labels['repeatinweek'] = 'Repetir em uma semana';
+
$labels['showmore'] = 'Mostrar mais...';
+
+// itip related labels
+$labels['itipinvitation'] = 'Convite para';
+$labels['itipupdate'] = 'Atualização de';
+$labels['itipcancellation'] = 'Cancelado:';
+$labels['itipreply'] = 'Responder para';
+$labels['itipaccepted'] = 'Aceitar';
+$labels['itiptentative'] = 'Talvez';
+$labels['itipdeclined'] = 'Rejeitar';
+
+$labels['itipsubjectaccepted'] = '"$title" foi aceito por $name';
+$labels['itipsubjecttentative'] = '"$title" foi aceito como tentativa por $name';
+$labels['itipsubjectdeclined'] = '"$title" foi recusado por $name';
+
+$labels['importtocalendar'] = 'Salvar em meu calendário';
+$labels['removefromcalendar'] = 'Remover do meu calendário';
+$labels['updateattendeestatus'] = 'Atualizar o estado dos participantes';
+$labels['acceptinvitation'] = 'Você aceita este convite?';
+$labels['youhaveaccepted'] = 'Você aceitou este convite';
+$labels['youhavetentative'] = 'Você aceitou como tentativa este convite';
+$labels['youhavedeclined'] = 'Você recusou este convite';
+
+$labels['savingdata'] = 'Salvando dados...';
\ No newline at end of file
diff --git a/plugins/libcalendaring/localization/ru_RU.inc b/plugins/libcalendaring/localization/ru_RU.inc
index a37e761..5b29f06 100644
--- a/plugins/libcalendaring/localization/ru_RU.inc
+++ b/plugins/libcalendaring/localization/ru_RU.inc
@@ -1,4 +1,7 @@
<?php
+
+$labels = array();
+
$labels['alarmemail'] = 'ÐоÑлаÑÑ e-mail';
$labels['alarmdisplay'] = 'ÐоказаÑÑ ÑообÑение';
$labels['alarmdisplayoption'] = 'СообÑение';
@@ -12,6 +15,7 @@ $labels['trigger+M'] = 'минÑÑ Ð¿Ð¾Ñле';
$labels['trigger+H'] = 'ÑаÑов поÑле';
$labels['trigger+D'] = 'дней поÑле';
$labels['addalarm'] = 'добавиÑÑ Ñведомление';
+
$labels['alarmtitle'] = 'ÐÑедÑÑоÑÑие ÑобÑÑиÑ';
$labels['dismissall'] = 'ÐÑмениÑÑ Ð²Ñе';
$labels['dismiss'] = 'ÐÑмениÑÑ';
@@ -21,4 +25,29 @@ $labels['repeatinhr'] = 'ÐовÑоÑиÑÑ ÑеÑез 1 ÑаÑ';
$labels['repeatinhrs'] = 'ÐовÑоÑиÑÑ ÑеÑез $hrs ÑаÑов';
$labels['repeattomorrow'] = 'ÐовÑоÑиÑÑ Ð·Ð°Ð²ÑÑа';
$labels['repeatinweek'] = 'ÐовÑоÑиÑÑ ÑеÑез неделÑ';
+
$labels['showmore'] = 'ÐоказаÑÑ Ð±Ð¾Ð»ÑÑе...';
+
+// itip related labels
+$labels['itipinvitation'] = 'ÐÑиглаÑение на';
+$labels['itipupdate'] = 'Ðбновление';
+$labels['itipcancellation'] = 'ÐÑменÑннÑй:';
+$labels['itipreply'] = 'ÐÑвеÑиÑÑ';
+$labels['itipaccepted'] = 'ÐÑинÑÑÑ';
+$labels['itiptentative'] = 'ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ';
+$labels['itipdeclined'] = 'ÐÑклониÑÑ';
+
+$labels['itipsubjectaccepted'] = '"$title" пÑинÑÑо $name';
+$labels['itipsubjecttentative'] = '"$title" пÑедваÑиÑелÑно пÑинÑÑо $name';
+$labels['itipsubjectdeclined'] = '"$title" оÑклонено $name';
+
+$labels['importtocalendar'] = 'СоÑ
ÑаниÑÑ Ð² мой календаÑÑ';
+$labels['removefromcalendar'] = 'УдалиÑÑ Ð¸Ð· моего календаÑÑ';
+$labels['updateattendeestatus'] = 'ÐбновиÑÑ ÑÑаÑÑÑ ÑÑаÑÑника';
+$labels['acceptinvitation'] = 'ÐÑ Ð¿ÑинимаеÑе ÑÑо пÑиглаÑение?';
+$labels['youhaveaccepted'] = 'ÐÑ Ð¿ÑинÑли ÑÑо пÑиглаÑение';
+$labels['youhavetentative'] = 'ÐÑ Ð¿ÑедваÑиÑелÑно пÑинÑли ÑÑо пÑиглаÑение';
+$labels['youhavedeclined'] = 'ÐÑ Ð¾Ñклонили ÑÑо пÑиглаÑение';
+
+$labels['savingdata'] = 'СоÑ
Ñанение даннÑÑ
...';
+
More information about the commits
mailing list