From 5d7c91a66ec343a8672bb3839da8a2c59f06c123 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Tue, 15 May 2012 13:23:11 +0000 Subject: [PATCH] translating status-label now when the get used, to allow calendar_boupdate::_get_event_details() use language of to notify user --- calendar/inc/class.calendar_bo.inc.php | 19 +-- .../inc/class.calendar_import_csv.inc.php | 16 +- calendar/inc/class.calendar_merge.inc.php | 10 +- calendar/inc/class.calendar_uilist.inc.php | 4 +- calendar/setup/etemplates.inc.php | 4 +- calendar/templates/default/edit.xet | 156 +++++++++--------- 6 files changed, 103 insertions(+), 106 deletions(-) diff --git a/calendar/inc/class.calendar_bo.inc.php b/calendar/inc/class.calendar_bo.inc.php index e827ff6132..f2ab1a5d16 100644 --- a/calendar/inc/class.calendar_bo.inc.php +++ b/calendar/inc/class.calendar_bo.inc.php @@ -218,10 +218,6 @@ class calendar_bo $this->grants = $GLOBALS['egw']->acl->get_grants('calendar'); - foreach($this->verbose_status as $status => $text) - { - $this->verbose_status[$status] = lang($text); - } if (!is_array($this->resources = $GLOBALS['egw']->session->appsession('resources','calendar'))) { $this->resources = array(); @@ -1502,34 +1498,35 @@ class calendar_bo if ($status == 'G' && !$show_group_invitation) continue; // dont show group-invitation + $lang_status = lang($this->verbose_status[$status]); if (!$long_status) { switch($status[0]) { case 'A': // accepted - $status = html::image('calendar','agt_action_success',$this->verbose_status[$status]); + $status = html::image('calendar','agt_action_success',$lang_status); break; case 'R': // rejected - $status = html::image('calendar','agt_action_fail',$this->verbose_status[$status]); + $status = html::image('calendar','agt_action_fail',$lang_status); break; case 'T': // tentative - $status = html::image('calendar','tentative',$this->verbose_status[$status]); + $status = html::image('calendar','tentative',$lang_status); break; case 'U': // no response = unknown - $status = html::image('calendar','cnr-pending',$this->verbose_status[$status]); + $status = html::image('calendar','cnr-pending',$lang_status); break; case 'D': // delegated - $status = html::image('calendar','forward',$this->verbose_status[$status]); + $status = html::image('calendar','forward',$lang_status); break; case 'G': // group invitation // Todo: Image, seems not to be used - $status = '('.$this->verbose_status[$status].')'; + $status = '('.$lang_status.')'; break; } } else { - $status = '('.$this->verbose_status[$status].')'; + $status = '('.$lang_status.')'; } $names[$id] = $this->participant_name($id).($quantity > 1 ? ' ('.$quantity.')' : '').' '.$status; diff --git a/calendar/inc/class.calendar_import_csv.inc.php b/calendar/inc/class.calendar_import_csv.inc.php index 5a07ae4419..b23a4e720e 100644 --- a/calendar/inc/class.calendar_import_csv.inc.php +++ b/calendar/inc/class.calendar_import_csv.inc.php @@ -97,9 +97,9 @@ class calendar_import_csv implements importexport_iface_import_plugin { protected $errors = array(); /** - * List of actions, and how many times that action was taken - */ - protected $results = array(); + * List of actions, and how many times that action was taken + */ + protected $results = array(); /** * imports entries according to given definition object. @@ -154,7 +154,7 @@ class calendar_import_csv implements importexport_iface_import_plugin { $this->errors = array(); // Used for participants - $status_map = array_flip($this->bo->verbose_status); + $status_map = array_flip(array_map('lang',$this->bo->verbose_status)); $role_map = array_flip($this->bo->roles); $lookups = array( @@ -173,7 +173,7 @@ class calendar_import_csv implements importexport_iface_import_plugin { if( count( array_unique( $record ) ) < 2 ) continue; // Automatic conversions - importexport_import_csv::convert($record, calendar_egw_record::$types, 'calendar', $lookups, + importexport_import_csv::convert($record, calendar_egw_record::$types, 'calendar', $lookups, $_definition->plugin_options['convert'] ); @@ -181,8 +181,8 @@ class calendar_import_csv implements importexport_iface_import_plugin { if($_definition->plugin_options['owner_from_csv']) { if(!is_numeric($record['owner'])) { $this->errors[$import_csv->get_current_position()] = lang( - 'Invalid owner ID: %1. Might be a bad field translation. Used %2 instead.', - $record['owner'], + 'Invalid owner ID: %1. Might be a bad field translation. Used %2 instead.', + $record['owner'], $_definition->plugin_options['owner'] ); $record['owner'] = $_definition->plugin_options['owner']; @@ -312,7 +312,7 @@ class calendar_import_csv implements importexport_iface_import_plugin { } default: throw new egw_exception('Unsupported action'); - + } } diff --git a/calendar/inc/class.calendar_merge.inc.php b/calendar/inc/class.calendar_merge.inc.php index 71dbd80a43..a517ee2a73 100644 --- a/calendar/inc/class.calendar_merge.inc.php +++ b/calendar/inc/class.calendar_merge.inc.php @@ -291,7 +291,7 @@ class calendar_merge extends bo_merge $replacements['$$calendar_starttime$$'] = date($time_format, $day == date('Ymd', $event['start']) ? $event['start'] : mktime(0,0,0,0,0,1)); $replacements['$$calendar_endtime$$'] = date($time_format, $day == date('Ymd', $event['end']) ? $event['end'] : mktime(23,59,59,0,0,0)); } - + $days[date('Ymd',$_date)][$dow][] = $replacements; } if(strpos($repeat, 'day/date') !== false || strpos($repeat, 'day/name') !== false) { @@ -357,7 +357,7 @@ class calendar_merge extends bo_merge if(date('Ymd',$date) != date('Ymd', $event['start'])) return array(); return $n == 0 ? $this->calendar_replacements($event) : array(); } - + // Use start for cache, in case of multiple months $_date = $id['start'] ? $id['start'] : $date; if($days[date('Ymd',$_date)][$plugin]) return $days[date('Ymd',$_date)][$plugin][$n]; @@ -456,11 +456,11 @@ class calendar_merge extends bo_merge } $info = array( 'name' => $this->bo->participant_name($participant), - 'status' => $this->bo->verbose_status[$status], + 'status' => lang($this->bo->verbose_status[$status]), 'quantity' => $quantity, 'role' => $role ); - + switch ($participant[0]) { case 'c': @@ -558,7 +558,7 @@ class calendar_merge extends bo_merge echo '{{quantity}}'.lang('quantity').''; echo '{{status}}'.lang('status').''; echo '{{endtable}}'; - + echo ''; echo '"; $days = array(); diff --git a/calendar/inc/class.calendar_uilist.inc.php b/calendar/inc/class.calendar_uilist.inc.php index 6e90bbc01b..3e55effedd 100644 --- a/calendar/inc/class.calendar_uilist.inc.php +++ b/calendar/inc/class.calendar_uilist.inc.php @@ -761,13 +761,13 @@ class calendar_uilist extends calendar_ui 'group' => $group, ), ); - $status = $this->bo->verbose_status; + $status = array_map('lang',$this->bo->verbose_status); unset($status['G']); $actions['status'] = array( 'caption' => 'Change your status', 'icon' => 'check', 'prefix' => 'status-', - 'children' => $status, + 'children' => lang($status), 'group' => ++$group, ); ++$group; // integration with other apps: infolog, calendar, filemanager diff --git a/calendar/setup/etemplates.inc.php b/calendar/setup/etemplates.inc.php index d8c91f7395..6b3f7d9101 100644 --- a/calendar/setup/etemplates.inc.php +++ b/calendar/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * EGroupware - eTemplates for Application calendar * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2011-06-02 19:00 + * generated by soetemplate::dump4setup() 2012-05-15 15:20 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package calendar @@ -35,7 +35,7 @@ $templ_data[] = array('name' => 'calendar.edit.history','template' => '','lang' $templ_data[] = array('name' => 'calendar.edit.links','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:7:{s:1:"A";s:2:"95";s:2:"c1";s:2:"th";s:2:"h1";s:6:",@view";s:2:"c2";s:3:"row";s:2:"h2";s:6:",@view";s:2:"c3";s:2:"th";s:2:"c4";s:11:"row_off,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"span";s:3:"all";s:4:"type";s:5:"label";s:5:"label";s:16:"Create new links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";s:4:"type";s:7:"link-to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:3:{s:4:"span";s:3:"all";s:4:"type";s:5:"label";s:5:"label";s:14:"Existing links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";s:4:"type";s:9:"link-list";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"cols";i:2;s:4:"rows";i:4;s:4:"size";s:17:"100%,210,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"210";i:6;s:4:"auto";}}}','size' => '100%,210,,,,,auto','style' => '','modified' => '1231922193',); -$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.7.001','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:6:{s:1:"A";s:2:"95";s:2:"c3";s:4:",top";s:2:"c1";s:3:"row";s:2:"c2";s:2:"th";s:2:"h1";s:8:",@no_add";s:1:"D";s:2:"70";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"New";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:27:"User or group,calendar+,,10";s:4:"name";s:7:"account";s:4:"help";s:13:"User or group";}i:2;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:8:"resource";s:4:"size";s:14:"@cal_resources";}}s:1:"C";a:4:{s:4:"type";s:3:"int";s:4:"size";s:4:"1,,3";s:4:"name";s:8:"quantity";s:5:"align";s:6:"center";}s:1:"D";a:3:{s:4:"type";s:6:"select";s:4:"name";s:4:"role";s:4:"span";s:11:",selectRole";}s:1:"E";a:4:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";s:5:"align";s:6:"center";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:2;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:8:"Quantity";s:5:"align";s:6:"center";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Role";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:3;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"name";s:11:"${row}[app]";}s:1:"B";a:6:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:13:"${row}[title]";s:7:"no_lang";s:1:"1";}s:1:"C";a:5:{s:4:"type";s:3:"int";s:4:"name";s:16:"${row}[quantity]";s:4:"size";s:4:"1,,3";s:8:"readonly";s:1:"1";s:5:"align";s:6:"center";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:4:"name";s:18:"${row}[role_label]";}s:1:"E";a:4:{s:4:"type";s:6:"select";s:4:"name";s:14:"${row}[status]";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;}s:1:"F";a:9:{s:4:"type";s:6:"button";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:28:"delete[$row_cont[delete_id]]";s:5:"align";s:6:"center";s:5:"label";s:6:"Delete";s:8:"onchange";i:1;s:4:"size";s:6:"delete";}}}s:4:"rows";i:3;s:4:"cols";i:6;s:4:"size";s:17:"100%,210,,,,,auto";s:4:"name";s:12:"participants";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"210";i:6;s:4:"auto";}}}','size' => '100%,210,,,,,auto','style' => '.selectRole select { width: 100%; }','modified' => '1248274661',); +$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.7.001','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:6:{s:1:"A";s:2:"95";s:2:"c3";s:4:",top";s:2:"c1";s:3:"row";s:2:"c2";s:2:"th";s:2:"h1";s:8:",@no_add";s:1:"D";s:2:"70";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"New";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:27:"User or group,calendar+,,10";s:4:"name";s:7:"account";s:4:"help";s:13:"User or group";}i:2;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:8:"resource";s:4:"size";s:14:"@cal_resources";}}s:1:"C";a:4:{s:4:"type";s:3:"int";s:4:"size";s:4:"1,,3";s:4:"name";s:8:"quantity";s:5:"align";s:6:"center";}s:1:"D";a:3:{s:4:"type";s:6:"select";s:4:"name";s:4:"role";s:4:"span";s:11:",selectRole";}s:1:"E";a:4:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";s:5:"align";s:6:"center";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:2;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:8:"Quantity";s:5:"align";s:6:"center";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Role";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:3;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"name";s:11:"${row}[app]";}s:1:"B";a:6:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:13:"${row}[title]";s:7:"no_lang";s:1:"1";}s:1:"C";a:5:{s:4:"type";s:3:"int";s:4:"name";s:16:"${row}[quantity]";s:4:"size";s:4:"1,,3";s:8:"readonly";s:1:"1";s:5:"align";s:6:"center";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:4:"name";s:18:"${row}[role_label]";}s:1:"E";a:3:{s:4:"type";s:6:"select";s:4:"name";s:14:"${row}[status]";s:8:"onchange";i:1;}s:1:"F";a:9:{s:4:"type";s:6:"button";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:28:"delete[$row_cont[delete_id]]";s:5:"align";s:6:"center";s:5:"label";s:6:"Delete";s:8:"onchange";i:1;s:4:"size";s:6:"delete";}}}s:4:"rows";i:3;s:4:"cols";i:6;s:4:"size";s:17:"100%,210,,,,,auto";s:4:"name";s:12:"participants";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"210";i:6;s:4:"auto";}}}','size' => '100%,210,,,,,auto','style' => '.selectRole select { width: 100%; }','modified' => '1248274661',); $templ_data[] = array('name' => 'calendar.edit.print','template' => '','lang' => '','group' => '0','version' => '1.6.001','data' => 'a:1:{i:0;a:7:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:6:{s:1:"A";s:2:"95";s:2:"c3";s:4:",top";s:2:"c1";s:3:"row";s:2:"c2";s:2:"th";s:2:"h1";s:8:",@no_add";s:1:"D";s:24:",@hide_status_recurrence";}i:1;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"New";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:14:"select-account";s:4:"size";s:27:"User or group,calendar+,,10";s:4:"name";s:7:"account";s:4:"help";s:13:"User or group";}i:2;a:3:{s:4:"type";s:10:"link-entry";s:4:"name";s:8:"resource";s:4:"size";s:14:"@cal_resources";}}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"size";s:4:"1,,3";s:4:"name";s:8:"quantity";}s:1:"D";a:1:{s:4:"type";s:5:"label";}s:1:"E";a:3:{s:4:"type";s:6:"button";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";}s:1:"F";a:1:{s:4:"type";s:5:"label";}}i:2;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Type";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Quantity";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"All future";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Status";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:3;a:6:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"name";s:11:"${row}[app]";}s:1:"B";a:6:{s:4:"type";s:5:"label";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:13:"${row}[title]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:3:"int";s:4:"name";s:16:"${row}[quantity]";s:4:"size";s:4:"1,,3";}s:1:"D";a:3:{s:4:"type";s:8:"checkbox";s:4:"name";s:25:"${row}[status_recurrence]";s:5:"align";s:6:"center";}s:1:"E";a:4:{s:4:"type";s:6:"select";s:4:"name";s:14:"${row}[status]";s:7:"no_lang";s:1:"1";s:8:"onchange";i:1;}s:1:"F";a:9:{s:4:"type";s:6:"button";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"delete[$row_cont[uid]]";s:5:"align";s:6:"center";s:5:"label";s:6:"Delete";s:8:"onchange";i:1;s:4:"size";s:6:"delete";}}}s:4:"rows";i:3;s:4:"cols";i:6;s:4:"size";s:17:"100%,200,,,,,auto";s:4:"name";s:12:"participants";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,,,,auto','style' => '','modified' => '1229280346',); diff --git a/calendar/templates/default/edit.xet b/calendar/templates/default/edit.xet index e6e23fb386..758dd66639 100644 --- a/calendar/templates/default/edit.xet +++ b/calendar/templates/default/edit.xet @@ -10,47 +10,47 @@ - + - - + + - + - + - + - - + + - + - + - + - - + + @@ -63,8 +63,8 @@ - - + + @@ -84,34 +84,34 @@ - + - + -

'.lang('Day of week tables').":