From: wolfgang Date: Tue, 25 Mar 2008 22:43:18 +0000 (+0000) Subject: git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1390 d1b88da0-ebda-0310... X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17f62158155d24c4f5fe35bbe2ae444a85f50dfb;p=scalable-opengroupware.org git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1390 d1b88da0-ebda-0310-925b-ed51d893ca5b --- diff --git a/ChangeLog b/ChangeLog index 3bbda7cf..87b2d996 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,35 @@ +2008-03-25 Wolfgang Sourdeau + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -takeValuesFromRequest:_rqinContext:_ctx]): treat the regular + monthly recurrences as all others. + + * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder + -davSetProperties:setPropsremovePropertiesNamed:removedPropsinContext:localContext]): + returns an exception if the property to modify is not + "davDisplayName" and if the current user has not the owner role + over the current collection. + +2008-03-25 Francis Lachapelle + + * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView + -verticalDragHandleStyle]): CSS style wrt to position of drag + handle saved by current user. + ([UIxCalMainView -horizontalDragHandleStyle]): idem. + ([UIxCalMainView -eventsListViewStyle]): idem. + + * UI/Contacts/UIxContactsListViewContainer.m + ([UIxContactsListViewContainer -verticalDragHandleStyle]): CSS + style wrt to position of drag handle saved by current user. + ([UIxContactsListViewContainer -horizontalDragHandleStyle]): idem. + ([UIxContactsListViewContainer -contactsListContentStyle]): idem. + + * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame + -verticalDragHandleStyle]): CSS style wrt to position of drag + handle saved by current user. + ([UIxMailMainFrame -horizontalDragHandleStyle]): idem. + ([UIxMailMainFrame -mailboxContentStyle]): idem. + 2008-03-18 Wolfgang Sourdeau * SoObjects/Appointments/SOGoAppointmentFolder.m diff --git a/NEWS b/NEWS index 03ec83cb..0dceb933 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,11 @@ - converted to use the gnustep-make 2 build framework - added custom DAV methods for managing user permissions from the SOGo Integrator - pressing enter in the contact edition dialog will perform the creation/update operation +- implemented more of the CalDAV specification for compatibility with Lightning 0.8 +- added Italian translation, thanks to Marco Lertora +- improved restoration of drag handles state +- improved contextual menu handling of Address Book module +- fixed various bugs occuring with Safari 3.1 0.9.0-20080208 (1.0 rc5) ------------------------ diff --git a/Protocols/iCalHTTP/GNUmakefile b/Protocols/iCalHTTP/GNUmakefile index e59e8c38..df1232db 100644 --- a/Protocols/iCalHTTP/GNUmakefile +++ b/Protocols/iCalHTTP/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = iCalHTTP iCalHTTP_PRINCIPAL_CLASS = iCalHTTPProduct -iCalHTTP_LANGUAGES = English French +iCalHTTP_LANGUAGES = English French Italian iCalHTTP_OBJC_FILES = \ iCalHTTPProduct.m \ diff --git a/SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m b/SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m index e8a23631..63cfeb97 100644 --- a/SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m @@ -43,18 +43,21 @@ typedef BOOL NGMonthSet[12]; typedef BOOL NGMonthDaySet[32]; // 0 is unused -static void NGMonthDaySet_clear(NGMonthDaySet *daySet) { +static void +NGMonthDaySet_clear(NGMonthDaySet *daySet) +{ register unsigned i; - for (i = 1; i <= 31; i++) + for (i = 0; i <= 31; i++) (*daySet)[i] = NO; } -static void NGMonthDaySet_copyOrUnion(NGMonthDaySet *base, NGMonthDaySet *new, - BOOL doCopy) +static void +NGMonthDaySet_copyOrUnion(NGMonthDaySet *base, NGMonthDaySet *new, + BOOL doCopy) { register unsigned i; - + if (doCopy) memcpy(base, new, sizeof(NGMonthDaySet)); else { diff --git a/SOPE/NGCards/iCalRecurrenceCalculator.m b/SOPE/NGCards/iCalRecurrenceCalculator.m index 4923639c..b5ef7441 100644 --- a/SOPE/NGCards/iCalRecurrenceCalculator.m +++ b/SOPE/NGCards/iCalRecurrenceCalculator.m @@ -71,11 +71,38 @@ static Class yearlyCalcClass = Nil; /* factory */ -+ (id)recurrenceCalculatorForRecurrenceRule:(iCalRecurrenceRule *)_rrule - withFirstInstanceCalendarDateRange:(NGCalendarDateRange *)_range ++ (id) recurrenceCalculatorForRecurrenceRule: (iCalRecurrenceRule *) _rrule + withFirstInstanceCalendarDateRange: (NGCalendarDateRange *) _range { - return [[[self alloc] initWithRecurrenceRule:_rrule - firstInstanceCalendarDateRange:_range] autorelease]; + iCalRecurrenceFrequency freq; + Class calcClass; + id calc; + + freq = [_rrule frequency]; + if (freq == iCalRecurrenceFrequenceDaily) + calcClass = dailyCalcClass; + else if (freq == iCalRecurrenceFrequenceWeekly) + calcClass = weeklyCalcClass; + else if (freq == iCalRecurrenceFrequenceMonthly) + calcClass = monthlyCalcClass; + else if (freq == iCalRecurrenceFrequenceYearly) + calcClass = yearlyCalcClass; + else + calcClass = Nil; + + if (calcClass) + { + calc = [[calcClass alloc] initWithRecurrenceRule:_rrule + firstInstanceCalendarDateRange: _range]; + [calc autorelease]; + } + else + { + [self errorWithFormat: @"unsupported rrule frequency: %@", _rrule]; + calc = nil; + } + + return calc; } /* complex calculation convenience */ @@ -178,131 +205,130 @@ static Class yearlyCalcClass = Nil; /* init */ -- (id)initWithRecurrenceRule:(iCalRecurrenceRule *)_rrule - firstInstanceCalendarDateRange:(NGCalendarDateRange *)_range +- (id) initWithRecurrenceRule: (iCalRecurrenceRule *) _rrule + firstInstanceCalendarDateRange: (NGCalendarDateRange *) _range { - iCalRecurrenceFrequency freq; - Class calcClass = Nil; + if ((self = [super init])) + { + rrule = [_rrule retain]; + firstRange = [_range retain]; + } - freq = [_rrule frequency]; - if (freq == iCalRecurrenceFrequenceDaily) - calcClass = dailyCalcClass; - else if (freq == iCalRecurrenceFrequenceWeekly) - calcClass = weeklyCalcClass; - else if (freq == iCalRecurrenceFrequenceMonthly) - calcClass = monthlyCalcClass; - else if (freq == iCalRecurrenceFrequenceYearly) - calcClass = yearlyCalcClass; - else { - [self errorWithFormat:@"unsupported rrule frequency: %@", _rrule]; - calcClass = Nil; - [self release]; - return nil; - } - - [self autorelease]; // TODO: why autorelease? - if (calcClass == Nil) - return nil; - - if ((self = [[calcClass alloc] init]) != nil) { - self->rrule = [_rrule retain]; - self->firstRange = [_range retain]; - } return self; } -- (void)dealloc { - [self->firstRange release]; - [self->rrule release]; +- (void) dealloc +{ + [firstRange release]; + [rrule release]; [super dealloc]; } /* helpers */ -- (unsigned)offsetFromSundayForJulianNumber:(long)_jn { - return (unsigned)((int)(_jn + 1.5)) % 7; +- (unsigned) offsetFromSundayForJulianNumber: (long) _jn +{ + return (unsigned)((int) (_jn + 1.5)) % 7; } -- (unsigned)offsetFromSundayForWeekDay:(iCalWeekDay)_weekDay { +- (unsigned) offsetFromSundayForWeekDay: (iCalWeekDay) _weekDay +{ unsigned offset; - switch (_weekDay) { - case iCalWeekDaySunday: offset = 0; break; - case iCalWeekDayMonday: offset = 1; break; - case iCalWeekDayTuesday: offset = 2; break; - case iCalWeekDayWednesday: offset = 3; break; - case iCalWeekDayThursday: offset = 4; break; - case iCalWeekDayFriday: offset = 5; break; - case iCalWeekDaySaturday: offset = 6; break; - default: offset = 0; break; - } + switch (_weekDay) + { + case iCalWeekDaySunday: + offset = 0; break; + case iCalWeekDayMonday: + offset = 1; break; + case iCalWeekDayTuesday: + offset = 2; break; + case iCalWeekDayWednesday: + offset = 3; break; + case iCalWeekDayThursday: + offset = 4; break; + case iCalWeekDayFriday: + offset = 5; break; + case iCalWeekDaySaturday: + offset = 6; break; + default: + offset = 0; break; + } + return offset; } -- (unsigned)offsetFromSundayForCurrentWeekStart { - return [self offsetFromSundayForWeekDay:[self->rrule weekStart]]; +- (unsigned) offsetFromSundayForCurrentWeekStart +{ + return [self offsetFromSundayForWeekDay: [rrule weekStart]]; } -- (iCalWeekDay)weekDayForJulianNumber:(long)_jn { - unsigned day; +- (iCalWeekDay) weekDayForJulianNumber: (long)_jn +{ + unsigned int day; iCalWeekDay weekDay; - - day = [self offsetFromSundayForJulianNumber:_jn]; - switch (day) { - case 0: weekDay = iCalWeekDaySunday; break; - case 1: weekDay = iCalWeekDayMonday; break; - case 2: weekDay = iCalWeekDayTuesday; break; - case 3: weekDay = iCalWeekDayWednesday; break; - case 4: weekDay = iCalWeekDayThursday; break; - case 5: weekDay = iCalWeekDayFriday; break; - case 6: weekDay = iCalWeekDaySaturday; break; - default: - [self errorWithFormat:@"got unexpected weekday: %d", day]; + iCalWeekDay weekDays[] = {iCalWeekDaySunday, iCalWeekDayMonday, + iCalWeekDayTuesday, iCalWeekDayWednesday, + iCalWeekDayThursday, iCalWeekDayFriday, + iCalWeekDaySaturday}; + + if (day < 7) + weekDay = weekDays[day]; + else + { + [self errorWithFormat: + @"got unexpected weekday: %d (falling back on sunday)", day]; weekDay = iCalWeekDaySunday; - break; /* keep compiler happy */ - } + } + return weekDay; } /* calculation */ -- (NSArray *)recurrenceRangesWithinCalendarDateRange:(NGCalendarDateRange *)_r{ +- (NSArray *) + recurrenceRangesWithinCalendarDateRange: (NGCalendarDateRange *) _r +{ return nil; /* subclass responsibility */ } -- (BOOL)doesRecurrWithinCalendarDateRange:(NGCalendarDateRange *)_range { - NSArray *ranges; - ranges = [self recurrenceRangesWithinCalendarDateRange:_range]; - return (ranges == nil || [ranges count] == 0) ? NO : YES; +- (BOOL) doesRecurrWithinCalendarDateRange: (NGCalendarDateRange *) _range +{ + return ([[self recurrenceRangesWithinCalendarDateRange: _range] count] + > 0); } -- (NGCalendarDateRange *)firstInstanceCalendarDateRange { - return self->firstRange; +- (NGCalendarDateRange *) firstInstanceCalendarDateRange +{ + return firstRange; } -- (NGCalendarDateRange *)lastInstanceCalendarDateRange { +- (NGCalendarDateRange *) lastInstanceCalendarDateRange +{ NSCalendarDate *start, *end; + NGCalendarDateRange *range; - if ((start = [self lastInstanceStartDate]) == nil) - return nil; - - end = [start addTimeInterval:[self->firstRange duration]]; - return [NGCalendarDateRange calendarDateRangeWithStartDate:start - endDate:end]; + range = nil; + + start = [self lastInstanceStartDate]; + if (start) + { + end = [start addTimeInterval: [firstRange duration]]; + range = [NGCalendarDateRange calendarDateRangeWithStartDate: start + endDate: end]; + } + + return range; } -- (NSCalendarDate *)lastInstanceStartDate { - NSCalendarDate *until; - +- (NSCalendarDate *) lastInstanceStartDate +{ /* NOTE: this is horribly inaccurate and doesn't even consider the use of repeatCount. It MUST be implemented by subclasses properly! However, it does the trick for SOGo 1.0 - that's why it's left here. */ - if ((until = [self->rrule untilDate]) != nil) - return until; - - return nil; + return [rrule untilDate]; } @end /* iCalRecurrenceCalculator */ diff --git a/Scripts/sql-update-20080303.sh b/Scripts/sql-update-20080303.sh index e71a28b0..e30c2b00 100644 --- a/Scripts/sql-update-20080303.sh +++ b/Scripts/sql-update-20080303.sh @@ -34,7 +34,7 @@ sqlscript="" function addField() { oldIFS="$IFS" IFS=" " - part="`echo -e \"ALTER TABLE $table ADD COLUMN c_component VARCHAR(10) NOT NULL DEFAULT 'vcard';\\n\"`"; + part="`echo -e \"ALTER TABLE $table ADD COLUMN c_component VARCHAR(10); UPDATE TABLE $table SET COLUMN c_component = 'vcard' WHERE c_component IS NULL; ALTER TABLE $table ALTER COLUMN c_component SET NOT NULL;\\n\"`"; sqlscript="$sqlscript$part" IFS="$oldIFS" } diff --git a/SoObjects/Appointments/GNUmakefile b/SoObjects/Appointments/GNUmakefile index 31caa3fd..7893f0d4 100644 --- a/SoObjects/Appointments/GNUmakefile +++ b/SoObjects/Appointments/GNUmakefile @@ -49,6 +49,12 @@ Appointments_COMPONENTS += \ SOGoAptMailGermanUpdate.wo \ SOGoAptMailGermanRemoval.wo \ SOGoAptMailGermanDeletion.wo \ + SOGoAptMailItalianInvitation.wo \ + SOGoAptMailItalianICalReply.wo \ + SOGoAptMailItalianUpdate.wo \ + SOGoAptMailItalianRemoval.wo \ + SOGoAptMailItalianDeletion.wo \ + ADDITIONAL_INCLUDE_DIRS += -I../../SOPE/ ADDITIONAL_LIB_DIRS += -L../../SOPE/GDLContentStore/obj/ diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index 2e81c029..173b9c0f 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -157,17 +157,14 @@ static NSNumber *sharedYes = nil; NSArray *properties; unsigned int count, max; - [r appendContentString: @""]; - [r appendContentString: @""]; + [r appendContentString: @""]; properties = [propstat objectForKey: @"properties"]; max = [properties count]; for (count = 0; count < max; count++) [r appendContentString: [properties objectAtIndex: count]]; - [r appendContentString: @""]; - [r appendContentString: @""]; + [r appendContentString: @""]; [r appendContentString: [propstat objectForKey: @"status"]]; - [r appendContentString: @""]; - [r appendContentString: @""]; + [r appendContentString: @""]; } #warning we should use the EOFetchSpecification for that!!! (see doPROPFIND:) @@ -191,12 +188,8 @@ static NSNumber *sharedYes = nil; { methodSel = NSSelectorFromString(methodName); if ([sogoObject respondsToSelector: methodSel]) - { - value = [[sogoObject performSelector: methodSel] - stringByEscapingXMLString]; - if (![value length]) - NSLog (@"value empty?"); - } + value = [[sogoObject performSelector: methodSel] + stringByEscapingXMLString]; } return value; @@ -256,6 +249,8 @@ static NSNumber *sharedYes = nil; values = [NSMutableArray array]; +// if ([[object objectForKey: @"c_name"] isEqualToString: @"176A-4E8BDE62-5-B73ECD10"]) +// NSLog(@"breajpoint"); sogoObject = [self lookupName: [object objectForKey: @"c_name"] inContext: context acquire: NO]; @@ -334,31 +329,27 @@ static NSNumber *sharedYes = nil; NSEnumerator *propstats; NSDictionary *propstat; - [r appendContentString: @" \r\n"]; - [r appendContentString: @" "]; + [r appendContentString: @""]; [r appendContentString: baseURL]; if (![baseURL hasSuffix: @"/"]) [r appendContentString: @"/"]; [r appendContentString: [object objectForKey: @"c_name"]]; - [r appendContentString: @"\r\n"]; + [r appendContentString: @""]; propstats = [[self _propstats: properties ofObject: object] objectEnumerator]; while ((propstat = [propstats nextObject])) [self _appendPropstat: propstat toResponse: r]; - [r appendContentString: @" \r\n"]; + [r appendContentString: @"\r\n"]; } - (void) appendMissingObjectRef: (NSString *) href toComplexResponse: (WOResponse *) r { - [r appendContentString: @" \r\n"]; - [r appendContentString: @" "]; + [r appendContentString: @""]; [r appendContentString: href]; - [r appendContentString: @"\r\n"]; - [r appendContentString: @" HTTP/1.1 404 Not Found\r\n"]; - [r appendContentString: @" \r\n"]; + [r appendContentString: @"HTTP/1.1 404 Not Found\r\n"]; } - (void) _appendTimeRange: (id ) timeRangeElement @@ -506,8 +497,6 @@ static NSNumber *sharedYes = nil; { urlComponents = [componentURLPath componentsSeparatedByString: @"/"]; cName = [urlComponents objectAtIndex: [urlComponents count] - 1]; - if ([cName isEqualToString: @"2AAC-4E8AB421-1-B767AA80"]) - NSLog (@"breakpoint..."); component = [NSDictionary dictionaryWithObject: cName forKey: @"c_name"]; } @@ -918,10 +907,10 @@ static NSNumber *sharedYes = nil; forRange: (NGCalendarDateRange *) _r intoArray: (NSMutableArray *) _ma { - NSMutableDictionary *row; + NSMutableDictionary *row, *fixedRow; NSDictionary *cycleinfo; NSCalendarDate *startDate, *endDate; - NGCalendarDateRange *fir; + NGCalendarDateRange *fir, *rRange; NSArray *rules, *exRules, *exDates, *ranges; unsigned i, count; NSString *content; @@ -929,47 +918,44 @@ static NSNumber *sharedYes = nil; content = [_row objectForKey: @"c_cycleinfo"]; if (![content isNotNull]) { - [self errorWithFormat:@"cyclic record doesn't have cycleinfo -> %@", _row]; + [self errorWithFormat:@"cyclic record doesn't have cycleinfo -> %@", + _row]; return; } cycleinfo = [content propertyList]; if (!cycleinfo) { - [self errorWithFormat:@"cyclic record doesn't have cycleinfo -> %@", _row]; + [self errorWithFormat:@"cyclic record doesn't have cycleinfo -> %@", + _row]; return; } row = [self fixupRecord:_row fetchRange: _r]; [row removeObjectForKey: @"c_cycleinfo"]; - [row setObject: sharedYes forKey:@"isRecurrentEvent"]; - - startDate = [row objectForKey:@"startDate"]; - endDate = [row objectForKey:@"endDate"]; - fir = [NGCalendarDateRange calendarDateRangeWithStartDate:startDate - endDate:endDate]; - rules = [cycleinfo objectForKey:@"rules"]; - exRules = [cycleinfo objectForKey:@"exRules"]; - exDates = [cycleinfo objectForKey:@"exDates"]; + [row setObject: sharedYes forKey: @"isRecurrentEvent"]; + + startDate = [row objectForKey: @"startDate"]; + endDate = [row objectForKey: @"endDate"]; + fir = [NGCalendarDateRange calendarDateRangeWithStartDate: startDate + endDate: endDate]; + rules = [cycleinfo objectForKey: @"rules"]; + exRules = [cycleinfo objectForKey: @"exRules"]; + exDates = [cycleinfo objectForKey: @"exDates"]; - ranges = [iCalRecurrenceCalculator recurrenceRangesWithinCalendarDateRange:_r - firstInstanceCalendarDateRange:fir - recurrenceRules:rules - exceptionRules:exRules - exceptionDates:exDates]; + ranges = [iCalRecurrenceCalculator recurrenceRangesWithinCalendarDateRange: _r + firstInstanceCalendarDateRange: fir + recurrenceRules: rules + exceptionRules: exRules + exceptionDates: exDates]; count = [ranges count]; - - for (i = 0; i < count; i++) { - NGCalendarDateRange *rRange; - id fixedRow; - - rRange = [ranges objectAtIndex:i]; - fixedRow = [self fixupCycleRecord:row cycleRange:rRange]; - if (fixedRow != nil) - { + for (i = 0; i < count; i++) + { + rRange = [ranges objectAtIndex:i]; + fixedRow = [self fixupCycleRecord: row cycleRange: rRange]; + if (fixedRow) [_ma addObject:fixedRow]; - } - } + } } - (NSArray *) fixupCyclicRecords: (NSArray *) _records @@ -977,19 +963,18 @@ static NSNumber *sharedYes = nil; { // TODO: is the result supposed to be sorted by date? NSMutableArray *ma; - unsigned i, count; - - if (_records == nil) return nil; - if ((count = [_records count]) == 0) - return _records; - - ma = [NSMutableArray arrayWithCapacity:count]; - for (i = 0; i < count; i++) { - id row; // TODO: what is the type of the record? - - row = [_records objectAtIndex:i]; - [self _flattenCycleRecord:row forRange:_r intoArray:ma]; - } + NSDictionary *row; + unsigned int i, count; + + count = [_records count]; + ma = [NSMutableArray arrayWithCapacity: count]; + if (count > 0) + for (i = 0; i < count; i++) + { + row = [_records objectAtIndex: i]; + [self _flattenCycleRecord: row forRange: _r intoArray: ma]; + } + return ma; } diff --git a/SoObjects/Appointments/SOGoAptMailDeletion.m b/SoObjects/Appointments/SOGoAptMailDeletion.m index e0c13c8e..02b7c949 100644 --- a/SoObjects/Appointments/SOGoAptMailDeletion.m +++ b/SoObjects/Appointments/SOGoAptMailDeletion.m @@ -38,3 +38,10 @@ @implementation SOGoAptMailGermanDeletion @end + +@interface SOGoAptMailItalinDeletion : SOGoAptMailNotification +@end + +@implementation SOGoAptMailItalianDeletion +@end + diff --git a/SoObjects/Appointments/SOGoAptMailICalReply.m b/SoObjects/Appointments/SOGoAptMailICalReply.m index 02a366e7..eecd6973 100644 --- a/SoObjects/Appointments/SOGoAptMailICalReply.m +++ b/SoObjects/Appointments/SOGoAptMailICalReply.m @@ -176,3 +176,10 @@ static NSCharacterSet *wsSet = nil; @implementation SOGoAptMailGermanICalReply @end + +@interface SOGoAptMailItalianICalReply : SOGoAptMailICalReply +@end + +@implementation SOGoAptMailItalianICalReply +@end + diff --git a/SoObjects/Appointments/SOGoAptMailInvitation.m b/SoObjects/Appointments/SOGoAptMailInvitation.m index 84d4b3f7..398c3851 100644 --- a/SoObjects/Appointments/SOGoAptMailInvitation.m +++ b/SoObjects/Appointments/SOGoAptMailInvitation.m @@ -38,3 +38,10 @@ @implementation SOGoAptMailGermanInvitation @end + +@interface SOGoAptMailItalianInvitation : SOGoAptMailNotification +@end + +@implementation SOGoAptMailItalianInvitation +@end + diff --git a/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.html b/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.html new file mode 100644 index 00000000..e470bb0f --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.html @@ -0,0 +1,6 @@ +<#IsSubject>L'appuntamento del giorno <#AptStartDate /> alle ore <#AptStartTime /> è stato cancellato +<#IsBody> +L'appuntamento del giorno <#AptStartDate /> alle ore <#AptStartTime +/> è stato cancellato da <#Organizer +/>. + \ No newline at end of file diff --git a/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.wod b/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.wod new file mode 100644 index 00000000..3b83a323 --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianDeletion.wo/SOGoAptMailItalianDeletion.wod @@ -0,0 +1,34 @@ +AptStartDate: WOString { + value = newStartDate; + dateformat = "%d/%m/%y"; + escapeHTML = NO; +} + +AptStartTime: WOString { + value = newStartDate; + dateformat = "%H:%M"; + escapeHTML = NO; +} + +Organizer: WOString { + value = newApt.organizer.cnWithoutQuotes; + escapeHTML = NO; +} + +HasHomePageURL: WOConditional { + condition = homePageURL.length; +} + +HomePageURL: WOString { + value = appointmentURL; + escapeHTML = NO; +} + +IsSubject: WOConditional { + condition = isSubject; +} + +IsBody: WOConditional { + condition = isSubject; + negate = YES; +} diff --git a/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.html b/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.html new file mode 100644 index 00000000..e2c1caa4 --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.html @@ -0,0 +1,5 @@ +<#IsSubject>Re: appuntamento del <#AptStartDate/> alle ore <#AptStartTime/> +<#IsBody> +<#Attendee/> ha <#HasAccepted>accettato<#HasDeclined>declinato il +tuo invito. + diff --git a/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.wod b/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.wod new file mode 100644 index 00000000..622d22ed --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianICalReply.wo/SOGoAptMailItalianICalReply.wod @@ -0,0 +1,33 @@ +AptStartDate: WOString { + value = startDate; + dateformat = "%d/%m/%y"; + escapeHTML = NO; +} + +AptStartTime: WOString { + value = startDate; + dateformat = "%H:%M"; + escapeHTML = NO; +} + +Attendee: WOString { + value = attendee.cnWithoutQuotes; + escapeHTML = NO; +} + +HasAccepted: WOConditional { + condition = hasAccepted; +} + +HasDeclined: WOConditional { + condition = hasDeclined; +} + +IsSubject: WOConditional { + condition = isSubject; +} + +IsBody: WOConditional { + condition = isSubject; + negate = YES; +} diff --git a/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.html b/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.html new file mode 100644 index 00000000..f14f988b --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.html @@ -0,0 +1,8 @@ +<#IsSubject>Appunatemento in data <#AptStartDate /> alle ore <#AptStartTime /> +<#IsBody> +Sei stato invitato da <#Organizer /> ad un appuntamento. +<#HasHomePageURL> +Per accettare o declinare l'invito vai alla pagina <#HomePageURL +/>. + + \ No newline at end of file diff --git a/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.wod b/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.wod new file mode 100644 index 00000000..3b83a323 --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianInvitation.wo/SOGoAptMailItalianInvitation.wod @@ -0,0 +1,34 @@ +AptStartDate: WOString { + value = newStartDate; + dateformat = "%d/%m/%y"; + escapeHTML = NO; +} + +AptStartTime: WOString { + value = newStartDate; + dateformat = "%H:%M"; + escapeHTML = NO; +} + +Organizer: WOString { + value = newApt.organizer.cnWithoutQuotes; + escapeHTML = NO; +} + +HasHomePageURL: WOConditional { + condition = homePageURL.length; +} + +HomePageURL: WOString { + value = appointmentURL; + escapeHTML = NO; +} + +IsSubject: WOConditional { + condition = isSubject; +} + +IsBody: WOConditional { + condition = isSubject; + negate = YES; +} diff --git a/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.html b/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.html new file mode 100644 index 00000000..688e867a --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.html @@ -0,0 +1,5 @@ +<#IsSubject>Rimozione dall'appuntamento del <#AptStartDate /> alle ore <#AptStartTime /> +<#IsBody> +Sei stato rimosso da <#Organizer /> dall'appuntamento programmato per il giorno <#AptStartDate +/> alle ore <#AptStartTime />. + \ No newline at end of file diff --git a/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.wod b/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.wod new file mode 100644 index 00000000..3b83a323 --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianRemoval.wo/SOGoAptMailItalianRemoval.wod @@ -0,0 +1,34 @@ +AptStartDate: WOString { + value = newStartDate; + dateformat = "%d/%m/%y"; + escapeHTML = NO; +} + +AptStartTime: WOString { + value = newStartDate; + dateformat = "%H:%M"; + escapeHTML = NO; +} + +Organizer: WOString { + value = newApt.organizer.cnWithoutQuotes; + escapeHTML = NO; +} + +HasHomePageURL: WOConditional { + condition = homePageURL.length; +} + +HomePageURL: WOString { + value = appointmentURL; + escapeHTML = NO; +} + +IsSubject: WOConditional { + condition = isSubject; +} + +IsBody: WOConditional { + condition = isSubject; + negate = YES; +} diff --git a/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html new file mode 100644 index 00000000..c8d10ee8 --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.html @@ -0,0 +1,11 @@ +<#IsSubject>L'appuntamento fissato in data <#OldAptStartDate /> alle ore <#OldAptStartTime /> è stato modificato +<#IsBody> +Questo appuntamento, fissato precedentemete in data <#OldAptStartDate /> +alle ore <#OldAptStartTime /> è ora programmato il <#NewAptStartDate +/> alle ore <#NewAptStartTime +/> +<#HasHomePageURL> +Per confermare o disdire vai alla pagina <#HomePageURL +/>. + + \ No newline at end of file diff --git a/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod new file mode 100644 index 00000000..9310d675 --- /dev/null +++ b/SoObjects/Appointments/SOGoAptMailItalianUpdate.wo/SOGoAptMailItalianUpdate.wod @@ -0,0 +1,46 @@ +OldAptStartDate: WOString { + value = oldStartDate; + dateformat = "%d/%m/%y"; + escapeHTML = NO; +} + +OldAptStartTime: WOString { + value = oldStartDate; + dateformat = "%H:%M"; + escapeHTML = NO; +} + +NewAptStartDate: WOString { + value = newStartDate; + dateformat = "%d/%m/%y"; + escapeHTML = NO; +} + +NewAptStartTime: WOString { + value = newStartDate; + dateformat = "%H:%M"; + escapeHTML = NO; +} + +Organizer: WOString { + value = newApt.organizer.cnWithoutQuotes; + escapeHTML = NO; +} + +HasHomePageURL: WOConditional { + condition = homePageURL.length; +} + +HomePageURL: WOString { + value = appointmentURL; + escapeHTML = NO; +} + +IsSubject: WOConditional { + condition = isSubject; +} + +IsBody: WOConditional { + condition = isSubject; + negate = YES; +} diff --git a/SoObjects/Appointments/SOGoAptMailRemoval.m b/SoObjects/Appointments/SOGoAptMailRemoval.m index 0053ce4b..a35bab18 100644 --- a/SoObjects/Appointments/SOGoAptMailRemoval.m +++ b/SoObjects/Appointments/SOGoAptMailRemoval.m @@ -38,3 +38,10 @@ @implementation SOGoAptMailGermanRemoval @end + +@interface SOGoAptMailItalianRemoval : SOGoAptMailNotification +@end + +@implementation SOGoAptMailItalianRemoval +@end + diff --git a/SoObjects/Appointments/SOGoAptMailUpdate.m b/SoObjects/Appointments/SOGoAptMailUpdate.m index 21f1d7d0..3ff6ff32 100644 --- a/SoObjects/Appointments/SOGoAptMailUpdate.m +++ b/SoObjects/Appointments/SOGoAptMailUpdate.m @@ -36,3 +36,22 @@ @implementation SOGoAptMailFrenchUpdate @end + + +@interface SOGoAptMailGermanUpdate : SOGoAptMailNotification +{ +} +@end + +@implementation SOGoAptMailGermanUpdate +@end + + +@interface SOGoAptMailItalianUpdate : SOGoAptMailNotification +{ +} +@end + +@implementation SOGoAptMailItalianUpdate +@end + diff --git a/SoObjects/Mailer/GNUmakefile b/SoObjects/Mailer/GNUmakefile index 902d868e..b80b2405 100644 --- a/SoObjects/Mailer/GNUmakefile +++ b/SoObjects/Mailer/GNUmakefile @@ -42,9 +42,12 @@ Mailer_RESOURCE_FILES += \ SOGoMailEnglishForward.wo \ SOGoMailFrenchForward.wo \ SOGoMailGermanForward.wo \ + SOGoMailItalianForward.wo \ SOGoMailEnglishReply.wo \ SOGoMailFrenchReply.wo \ - SOGoMailGermanReply.wo + SOGoMailGermanReply.wo \ + SOGoMailItalianReply.wo + ADDITIONAL_INCLUDE_DIRS += -I../../SOPE/ ADDITIONAL_LIB_DIRS += -L../../SOPE/GDLContentStore/obj/ diff --git a/SoObjects/Mailer/SOGoMailForward.h b/SoObjects/Mailer/SOGoMailForward.h index d5da4549..e20fa5d6 100644 --- a/SoObjects/Mailer/SOGoMailForward.h +++ b/SoObjects/Mailer/SOGoMailForward.h @@ -47,4 +47,7 @@ @interface SOGoMailGermanForward : SOGoMailForward @end +@interface SOGoMailItalianForward : SOGoMailForward +@end + #endif /* SOGOMAILFORWARD_H */ diff --git a/SoObjects/Mailer/SOGoMailForward.m b/SoObjects/Mailer/SOGoMailForward.m index 37bce7a5..49165bb6 100644 --- a/SoObjects/Mailer/SOGoMailForward.m +++ b/SoObjects/Mailer/SOGoMailForward.m @@ -172,3 +172,7 @@ @implementation SOGoMailGermanForward @end + +@implementation SOGoMailItalianForward +@end + diff --git a/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.html b/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.html new file mode 100644 index 00000000..369e6669 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.html @@ -0,0 +1,10 @@ +-------- Messaggio originale -------- +Oggetto: <#subject/> +Data: <#date/> +Da: <#from/> +<#hasReplyTo>Reply-To: <#replyTo/><#hasOrganization>Organizzazione: <#organization/>A: <#to/> +<#hasCc>CC: <#cc/><#hasNewsGroups>Newsgroups: <#newsgroups/><#hasReferences>Riferimento: <#references/> + +<#messageBody/> + +<#signature/> diff --git a/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.wod b/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.wod new file mode 100644 index 00000000..5def3274 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailItalianForward.wo/SOGoMailItalianForward.wod @@ -0,0 +1,74 @@ +subject: WOString { + value = subject; + escapeHTML = NO; +} + +date: WOString { + value = date; + escapeHTML = NO; +} + +from: WOString { + value = from; + escapeHTML = NO; +} + +hasReplyTo: WOConditional { + condition = hasReplyTo; +} + +replyTo: WOString { + value = replyTo; + escapeHTML = NO; +} + +hasOrganization: WOConditional { + condition = hasOrganization; +} + +organization: WOString { + value = organization; + escapeHTML = NO; +} + +to: WOString { + value = to; + escapeHTML = NO; +} + +hasCc: WOConditional { + condition = hasCc; +} + +cc: WOString { + value = cc; + escapeHTML = NO; +} + +hasNewsGroups: WOConditional { + condition = hasNewsGroups; +} + +newsgroups: WOString { + value = newsgroups; + escapeHTML = NO; +} + +hasReferences: WOConditional { + condition = hasReferences; +} + +references: WOString { + value = references; + escapeHTML = NO; +} + +messageBody: WOString { + value = messageBody; + escapeHTML = NO; +} + +signature: WOString { + value = signature; + escapeHTML = NO; +} diff --git a/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.html b/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.html new file mode 100644 index 00000000..49a2ddac --- /dev/null +++ b/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.html @@ -0,0 +1,5 @@ +Il giorno <#date/>, <#from/> ha scritto: + +<#messageBody/> + +<#signature/> diff --git a/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.wod b/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.wod new file mode 100644 index 00000000..0e212a78 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailItalianReply.wo/SOGoMailItalianReply.wod @@ -0,0 +1,19 @@ +date: WOString { + value = date; + escapeHTML = NO; +} + +from: WOString { + value = from; + escapeHTML = NO; +} + +messageBody: WOString { + value = messageBody; + escapeHTML = NO; +} + +signature: WOString { + value = signature; + escapeHTML = NO; +} diff --git a/SoObjects/Mailer/SOGoMailReply.h b/SoObjects/Mailer/SOGoMailReply.h index 8f13fcab..421fcc70 100644 --- a/SoObjects/Mailer/SOGoMailReply.h +++ b/SoObjects/Mailer/SOGoMailReply.h @@ -47,4 +47,7 @@ @interface SOGoMailGermanReply : SOGoMailReply @end +@interface SOGoMailItalianReply : SOGoMailReply +@end + #endif /* SOGOMAILREPLY_H */ diff --git a/SoObjects/Mailer/SOGoMailReply.m b/SoObjects/Mailer/SOGoMailReply.m index f196b33c..c2294c08 100644 --- a/SoObjects/Mailer/SOGoMailReply.m +++ b/SoObjects/Mailer/SOGoMailReply.m @@ -110,3 +110,7 @@ @implementation SOGoMailGermanReply @end + +@implementation SOGoMailItalianReply +@end + diff --git a/SoObjects/SOGo/SOGoGCSFolder.m b/SoObjects/SOGo/SOGoGCSFolder.m index 38a0c90d..d7f6c6b7 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.m +++ b/SoObjects/SOGo/SOGoGCSFolder.m @@ -528,12 +528,26 @@ static BOOL sendFolderAdvisories = NO; inContext: (WOContext *) localContext { NSString *newDisplayName; + NSException *exception; + NSArray *currentRoles; - newDisplayName = [setProps objectForKey: @"davDisplayName"]; - if ([newDisplayName length]) - [self renameTo: newDisplayName]; + currentRoles = [[localContext activeUser] rolesForObject: self + inContext: localContext]; + if ([currentRoles containsObject: SoRole_Owner]) + { + newDisplayName = [setProps objectForKey: @"davDisplayName"]; + if ([newDisplayName length]) + { + [self renameTo: newDisplayName]; + exception = nil; + } + else + exception = [NSException exceptionWithHTTPStatus: 404]; + } + else + exception = [NSException exceptionWithHTTPStatus: 403]; - return nil; + return exception; } /* acls as a container */ diff --git a/SoObjects/SOGo/SOGoObject.m b/SoObjects/SOGo/SOGoObject.m index a4e0c227..64f1293f 100644 --- a/SoObjects/SOGo/SOGoObject.m +++ b/SoObjects/SOGo/SOGoObject.m @@ -20,8 +20,8 @@ */ #if LIB_FOUNDATION_LIBRARY -#error SOGo will not work properly with libFoundation. \ - Please use gnustep-base instead. +#error SOGo will not work properly with libFoundation. +#error Please use gnustep-base instead. #endif #import diff --git a/UI/Common/GNUmakefile b/UI/Common/GNUmakefile index f4def785..4c45d86b 100644 --- a/UI/Common/GNUmakefile +++ b/UI/Common/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = CommonUI CommonUI_PRINCIPAL_CLASS = CommonUIProduct -CommonUI_LANGUAGES = English French German +CommonUI_LANGUAGES = English French German Italian CommonUI_OBJC_FILES += \ CommonUIProduct.m \ diff --git a/UI/Common/Italian.lproj/Localizable.strings b/UI/Common/Italian.lproj/Localizable.strings new file mode 100644 index 00000000..0cf9869c --- /dev/null +++ b/UI/Common/Italian.lproj/Localizable.strings @@ -0,0 +1,41 @@ +/* this file is in UTF-8 format! */ + +/* toolbars */ +"Save" = "Salva"; +"Close" = "Chiudi"; +"Edit User Rights" = "Modifica permessi"; + +"Home" = "Home"; +"Calendar" = "Calendario"; +"Address Book" = "Rubrica"; +"Mail" = "Posta"; +"Preferences" = "Preferenze"; +"Disconnect" = "Disconnetti"; +"Right Administration" = "Amministrazione permessi"; +"Log Console (dev.)" = "Log Console (dev.)"; + +"User" = "Utente"; +"Owner:" = "Proprietario:"; +"Help" = "Aiuto"; +"Add..." = "Aggiungi..."; +"Remove" = "Rimuovi..."; + +"noJavascriptError" = "SOGo ha bisogno di Javascript per essere eseguito. Verifica che questo elemento sia presente ed attivato nelle preferenze del browser"; +"noJavascriptRetry" = "Riprova"; + +"Publish the Free/Busy information" = "Pubblica le informazioni sullo stato (libero/impegnato)"; +"Default Roles" = "Permessi predefiniti"; +"Sorry, the user rights can not be configured for that object." = "Non è possibile configurare i permessi per questo oggetto."; +"browserNotCompatible" = "La versione del browser utilizzato non è supportata. Raccomandiamo l'utilizzo di Firefox. Clicca sul link per scaricarne l'ultima versione disponibile."; +"alternativeBrowsers" = "Alternativamente, puoi utilizzare questi browser compatibili"; +"alternativeBrowserSafari" = "Alternativamente, puoi utilizzare Safari."; +"Download" = "Scarica"; + +/* generic.js */ +"Unable to subscribe to that folder!" = "Impossibile sottoscrivere la cartella!"; +"You cannot subscribe to a folder that you own!" = "Non puoi sottoscrivere una cartella di cui sei proprietario!"; +"Unable to unsubscribe from that folder!" = "Impossibile annullare la sottoscrizione alla cartella!"; +"You cannot unsubscribe from a folder that you own!" = "Non puoi annullare la sottoscrizione ad una cartella di cui sei proprietario!"; +"Unable to rename that folder!" = "Impossibile rinominare la cartella!"; +"You have already subscribed to that folder!" = "Hai già sottoscritto la cartella!"; +"The user rights cannot be edited for this object!" = "I permessi di questo oggetto non possono essere modificati!"; diff --git a/UI/Contacts/English.lproj/Localizable.strings b/UI/Contacts/English.lproj/Localizable.strings index 6762a87f..0b2871c3 100644 --- a/UI/Contacts/English.lproj/Localizable.strings +++ b/UI/Contacts/English.lproj/Localizable.strings @@ -108,6 +108,8 @@ "Name of the Address Book" = "Name of the Address Book"; "Are you sure you want to delete the selected address book?" = "Are you sure you want to delete the selected address book?"; +"You cannot delete the selected contact(s)" += "You cannot delete the selected contact(s)."; "Address Book Name" = "Address Book Name"; diff --git a/UI/Contacts/French.lproj/Localizable.strings b/UI/Contacts/French.lproj/Localizable.strings index 9111b54e..82f612d2 100644 --- a/UI/Contacts/French.lproj/Localizable.strings +++ b/UI/Contacts/French.lproj/Localizable.strings @@ -121,7 +121,8 @@ "Name of the Address Book" = "Nom du carnet d'adresses"; "Are you sure you want to delete the selected address book?" = "Voulez-vous vraiment supprimer le carnet d'adresses sélectionné ?"; - +"You cannot delete the selected contact(s)" += "Vous ne pouvez pas supprimer les contacts sélectionnés."; "Address Book Name" = "Nom du carnet d'adresses"; "You cannot subscribe to a folder that you own!" diff --git a/UI/Contacts/GNUmakefile b/UI/Contacts/GNUmakefile index a561d82f..1360378b 100644 --- a/UI/Contacts/GNUmakefile +++ b/UI/Contacts/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = ContactsUI ContactsUI_PRINCIPAL_CLASS = ContactsUIProduct -ContactsUI_LANGUAGES = English French German +ContactsUI_LANGUAGES = English French German Italian ContactsUI_OBJC_FILES = \ UIxContactsUserFolders.m \ diff --git a/UI/Contacts/German.lproj/Localizable.strings b/UI/Contacts/German.lproj/Localizable.strings index 15debcc0..d366fe5b 100644 --- a/UI/Contacts/German.lproj/Localizable.strings +++ b/UI/Contacts/German.lproj/Localizable.strings @@ -112,6 +112,8 @@ "Name of the Address Book" = "Adressbuch-Name"; "Are you sure you want to delete the selected address book?" = "Wollen Sie wirklich das ausgewählte Adressbuch löschen?"; +"You cannot delete the selected contact(s)" += "Ausgewählte Karten können nicht gelöscht werden."; "Address Book Name" = "Adressbuch Name"; diff --git a/UI/Contacts/Italian.lproj/Localizable.strings b/UI/Contacts/Italian.lproj/Localizable.strings new file mode 100644 index 00000000..d7c2d485 --- /dev/null +++ b/UI/Contacts/Italian.lproj/Localizable.strings @@ -0,0 +1,163 @@ +/* this file is in UTF-8 format! */ + +"Contact" = "Contatto"; +"Address" = "Indirizzo"; +"Other" = "Altro"; + +"Name" = "Nome"; +"Internet" = "Email"; +"Phones" = "Numeri di telefono"; +"Home" = "Personale"; +"Work" = "Lavoro"; + +"Address Books" = "Rubrica"; + +"Addressbook" = "Rubrica"; +"Addresses" = "Indirizzi"; +"Update" = "Aggiorna"; +"Cancel" = "Anulla"; +"Common" = "Comuni"; +"Contact editor" = "Editor dei contatti"; +"Contact viewer" = "Visulizzatore dei contatti"; +"Email" = "Email"; +"Screen Name" = "Nome Instant Messeger"; +"Extended" = "Nome completo"; +"Fax" = "Fax"; +"Firstname" = "Nome"; +"Home" = "Casa"; +"HomePhone" = "Telefono casa"; +"Lastname" = "Cognome"; +"Location" = "Località"; +"MobilePhone" = "Cellulare"; +"Name" = "Nome"; +"OfficePhone" = "Telefono ufficio"; +"Organization" = "Società"; +"Work Phone" = "Telefono di lavoro"; +"Phone" = "Telefono"; +"Phones" = "Telefoni"; +"Postal" = "CAP"; +"Save" = "Salva"; +"URL" = "Pagina Web"; +"Unit" = "Unità"; +"delete" = "cancella"; +"edit" = "modifica"; +"invalidemailwarn" = "L'indirizzo email specificato non è valido"; +"new" = "new"; +"Preferred Phone" = "Telefono lavoro"; + +/* Folders */ +"Personal Address Book" = "Rubrica personale"; + +/* Tooltips */ + +"Create a new address book card" = "Crea un nuovo contatto"; +"Create a new list" = "Crea una nuova lista"; +"Edit the selected card" = "Modifica il contatto selezionato"; +"Send a mail message" = "Invia un'email"; +"Delete selected card or address book" = "Cancella il contatto selezionato"; + +"htmlMailFormat_UNKNOWN" = "Sconosciuto"; +"htmlMailFormat_FALSE" = "Testo normale"; +"htmlMailFormat_TRUE" = "HTML"; + +"Name or Email" = "Nome o indirizzo Email"; +"Personal Addressbook" = "Rubrica personale"; +"Search in Addressbook" = "Cerca nella rubrica"; + +"New Card" = "Nuovo contatto"; +"New List" = "Nuova lista"; +"Modify" = "Modifica"; +"Sharing..." = "Condividi..."; +"Write" = "Scrivi"; +"Delete" = "Cancella"; +"Instant Message" = "Messaggio istantaneo"; +"Add..." = "Aggiungi..."; +"Remove" = "Rimuovi"; + +"Preferred" = "Predefinito"; +"Card for %@" = "Biglietto da visita di %@"; +"Display:" = "Nome visualizzato:"; +"Display Name:" = "Nome visualizzato:"; +"Email:" = "Email:"; +"Additional Email:" = "Email aggiuntiva:"; + +"Phone Number:" = "Numero di telefono:"; +"Prefers to receive messages formatted as:" += "Formato preferito per i messaggi di posta:"; +"Screen Name:" = "Nome Instant Messenger:"; + +"Firstname:" = "Nome:"; +"Lastname:" = "Cognome:"; +"First:" = "Nome:"; +"Last:" = "Cognome"; +"Nickname:" = "Soprannome:"; + +"Telephone" = "Telefono"; +"Work:" = "Lavoro:"; +"Home:" = "Casa:"; +"Fax:" = "Fax:"; +"Mobile:" = "Cellulare:"; +"Pager:" = "Cerca Persone:"; + +"Title:" = "Titolo:"; +"Service:" = "Service:"; +"Company:" = "Società:"; +"Street Address:" = "Indirizzo:"; +"Address:" = "Indirizzo:"; +"City:" = "Città:"; +"State_Province:" = "Provincia:"; +"ZIP_Postal Code:" = "CAP:"; +"Country:" = "Nazione:"; +"Web:" = "Pagina Web:"; +"Web Page:" = "Pagina Web:"; +"Department:" = "Reparto:"; +"Organization:" = "Società:"; +"Work" = "Lavoro"; +"Other Infos" = "Altre informazioni"; + +"Note:" = "Note:"; +"Timezone:" = "Fuso orario:"; +"Birthday:" = "Data di Nascita:"; +"Freebusy URL:" = "Freebusy URL:"; + +"Add as..." = "Aggiungi come..."; +"Recipient" = "Destinatario"; +"Carbon Copy" = "Copia Carbone"; +"Blind Carbon Copy" = "Copia Carbone Nascosta"; + +"New Addressbook..." = "Nuova rubrica..."; +"Subscribe to an Addressbook..." = "Sottoscrivi una rubrica..."; +"Remove the selected Addressbook" = "Rimuovi la rubrica selezionata"; + +"Name of the Address Book" = "Nome della rubrica"; +"Are you sure you want to delete the selected address book?" += "Sei sicuro di voler cancellare la rubrica selezionata?"; + +"Address Book Name" = "Nome della Rubrica"; + +"You cannot subscribe to a folder that you own!" += "Non puoi sottoscrivere una cartella di cui sei proprietario!"; +"Unable to subscribe to that folder!" += "Non puoi sottoscrivere la cartella!"; + +"Default Roles" = "Permessi predefiniti"; +"User rights for:" = "Permessi per:"; + +"This person can add cards to this addressbook." += "Questa persona può aggiungere contatti a questa rubrica."; +"This person can edit the cards of this addressbook." += "Questa persona può modificare i contatti di questa rubrica."; +"This person can list the content of this addressbook." += "Questa persona può visualizzare i contenuti di questa rubrica."; +"This person can read the cards of this addressbook." += "Questa persona può leggere i contatti di questa rubrica."; +"This person can erase cards from this addressbook." += "Questa persona può eliminare contatti da questa rubrica."; + +"The selected contact has no email address." += "Il contatto selezionato non dispone di indirizzo email."; + +"You cannot delete the selected contact(s)" += "Non puoi eliminare il contatto selezionato."; + +"Please select a contact." = "Per favore seleziona un contatto."; diff --git a/UI/Contacts/UIxContactFoldersView.h b/UI/Contacts/UIxContactFoldersView.h index 51f58b9d..507b522d 100644 --- a/UI/Contacts/UIxContactFoldersView.h +++ b/UI/Contacts/UIxContactFoldersView.h @@ -31,7 +31,6 @@ NSMutableDictionary *moduleSettings; } -- (WOResponse *) getDragHandlesStateAction; - (WOResponse *) saveDragHandleStateAction; @end diff --git a/UI/Contacts/UIxContactFoldersView.m b/UI/Contacts/UIxContactFoldersView.m index 964d3506..97d143f3 100644 --- a/UI/Contacts/UIxContactFoldersView.m +++ b/UI/Contacts/UIxContactFoldersView.m @@ -269,24 +269,6 @@ // ? contactFolder : nil); // } -- (WOResponse *) getDragHandlesStateAction -{ - NSArray *dragHandles; - NSString *vertical, *horizontal; - - [self _setupContext]; - - vertical = [moduleSettings objectForKey: @"DragHandleVertical"]; - horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"]; - dragHandles = [[NSArray alloc] initWithObjects: - vertical ? vertical : @"", - horizontal ? horizontal : @"", - nil]; - - return [self responseWithStatus: 200 - andString: [dragHandles jsonRepresentation]]; -} - - (WOResponse *) saveDragHandleStateAction { WORequest *request; diff --git a/UI/Contacts/UIxContactsListViewContainer.h b/UI/Contacts/UIxContactsListViewContainer.h index eb0d72d8..c8488527 100644 --- a/UI/Contacts/UIxContactsListViewContainer.h +++ b/UI/Contacts/UIxContactsListViewContainer.h @@ -33,6 +33,8 @@ { NSString *selectorComponentClass; id currentFolder; + NSUserDefaults *ud; + NSMutableDictionary *moduleSettings; } - (void) setCurrentFolder: (id) folder; @@ -43,6 +45,10 @@ - (NSString *) currentContactFolderOwner; - (NSString *) currentContactFolderName; +- (NSString *) verticalDragHandleStyle; +- (NSString *) horizontalDragHandleStyle; +- (NSString *) contactsListContentStyle; + @end #endif /* UIXCONTACTSLISTVIEWCONTAINERBASE_H */ diff --git a/UI/Contacts/UIxContactsListViewContainer.m b/UI/Contacts/UIxContactsListViewContainer.m index 23c2a5eb..724ff867 100644 --- a/UI/Contacts/UIxContactsListViewContainer.m +++ b/UI/Contacts/UIxContactsListViewContainer.m @@ -37,6 +37,27 @@ @implementation UIxContactsListViewContainer +- (void) _setupContext +{ + SOGoUser *activeUser; + NSString *module; + SOGoContactFolders *clientObject; + + activeUser = [context activeUser]; + clientObject = [[self clientObject] container]; + + module = [clientObject nameInContainer]; + + ud = [activeUser userSettings]; + moduleSettings = [ud objectForKey: module]; + if (!moduleSettings) + { + moduleSettings = [NSMutableDictionary new]; + [moduleSettings autorelease]; + } + [ud setObject: moduleSettings forKey: module]; +} + - (id) init { if ((self = [super init])) @@ -120,4 +141,34 @@ return [[self queryParameterForKey: @"popup"] boolValue]; } +- (NSString *) verticalDragHandleStyle +{ + NSString *vertical; + + [self _setupContext]; + vertical = [moduleSettings objectForKey: @"DragHandleVertical"]; + + return (vertical ? [vertical stringByAppendingFormat: @"px"] : nil); +} + +- (NSString *) horizontalDragHandleStyle +{ + NSString *horizontal; + + [self _setupContext]; + horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"]; + + return (horizontal ? [horizontal stringByAppendingFormat: @"px"] : nil); +} + +- (NSString *) contactsListContentStyle +{ + int height; + + [self _setupContext]; + height = [[moduleSettings objectForKey: @"DragHandleVertical"] intValue]; + + return (height ? [NSString stringWithFormat: @"%ipx", (height - 27)] : nil); +} + @end diff --git a/UI/Contacts/product.plist b/UI/Contacts/product.plist index 5b19b2f6..8c06e706 100644 --- a/UI/Contacts/product.plist +++ b/UI/Contacts/product.plist @@ -50,11 +50,6 @@ protectedBy = "View"; pageName = "UIxContactsUserFolders"; }; - dragHandlesState = { - protectedBy = ""; - pageName = "UIxContactFoldersView"; - actionName = "getDragHandlesState"; - }; saveDragHandleState = { protectedBy = "View"; pageName = "UIxContactFoldersView"; diff --git a/UI/MailPartViewers/GNUmakefile b/UI/MailPartViewers/GNUmakefile index 43db3f79..2c5689d2 100644 --- a/UI/MailPartViewers/GNUmakefile +++ b/UI/MailPartViewers/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MailPartViewers MailPartViewers_PRINCIPAL_CLASS = MailPartViewersProduct -MailPartViewers_LANGUAGES = English French German +MailPartViewers_LANGUAGES = English French German Italian MailPartViewers_OBJC_FILES += \ MailPartViewersProduct.m \ diff --git a/UI/MailPartViewers/Italian.lproj/Localizable.strings b/UI/MailPartViewers/Italian.lproj/Localizable.strings new file mode 100644 index 00000000..a1051d4c --- /dev/null +++ b/UI/MailPartViewers/Italian.lproj/Localizable.strings @@ -0,0 +1,34 @@ +ACCEPTED = "accettato"; +COMPLETED = "completato"; +DECLINED = "declinato"; +DELEGATED = "inviata delega"; +IN-PROCESS = "in lavorazione"; +NEEDS-ACTION = "richiede un'azione"; +TENTATIVE = "tentativo"; +organized_by_you = "organizzata da te"; +you_are_an_attendee = "sei uno degli invitati"; +add_info_text = "Le richieste iMIP 'ADD' non sono ancora supportate da SOGo."; +publish_info_text = "Il mittente ti invia in allegato informazioni sull'evento."; +cancel_info_text = "Il tuo invito o l'intero evento sono stati cancellati."; +request_info_no_attendee = "sta proponento un incontro agli invitati. Ricevi questa email come notifica, non sei incluso come partecipante."; +Appointment = "Appuntamento"; + +Organizer = "Organizzatore"; +Time = "Ora"; +Attendees = "Invitati"; +request_info = "ti invita a partecipare ad un incontro."; +"Add to calendar" = "Aggiungi al calendario"; +"Delete from calendar" = "Rimuovi dal calendario"; +"Update status" = "Aggiorna lo stato"; +Accept = "Accetta"; +Decline = "Declina"; +Tentative = "Tentativo"; +"Update status in calendar" = "Aggiorna lo stato nel calendari"; +reply_info_no_attendee = "Hai ricevuto una risposta relativa all'incontro programmato da un utente che non è incluso come partecipante."; +reply_info = "Questa è una risposta ad un invito ad un evento organizzato da te."; + +"to" = "a"; + +"Untitled" = "Senza titolo"; + +"Size" = "Dimensione"; diff --git a/UI/MailerUI/GNUmakefile b/UI/MailerUI/GNUmakefile index 39cd51ad..dc6e918a 100644 --- a/UI/MailerUI/GNUmakefile +++ b/UI/MailerUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MailerUI MailerUI_PRINCIPAL_CLASS = MailerUIProduct -MailerUI_LANGUAGES = English French German +MailerUI_LANGUAGES = English French German Italian MailerUI_OBJC_FILES += \ MailerUIProduct.m \ diff --git a/UI/MailerUI/Italian.lproj/Localizable.strings b/UI/MailerUI/Italian.lproj/Localizable.strings new file mode 100644 index 00000000..c4720809 --- /dev/null +++ b/UI/MailerUI/Italian.lproj/Localizable.strings @@ -0,0 +1,240 @@ +/* this file is in UTF-8 format! */ + +/* Icon's label */ +"Create" = "Crea"; +"Empty Trash" = "Svuota cestino"; +"Delete" = "Cancella"; +"Expunge" = "Expunge"; +"Forward" = "Inoltra"; +"Get Mail" = "Scarica posta"; +"Junk" = "Indesiderato"; +"Reply" = "Rispondi"; +"Reply All" = "Rispondi a tutti"; +"Print" = "Stampa"; +"Stop" = "Stop"; +"Write" = "Scrivi"; + +"Send" = "Invia"; +"Contacts" = "Contatti"; +"Attach" = "Allegato"; +"Save" = "Salva"; + +/* Tooltips */ + +"Send this message now" = "Invia ora il messaggio"; +"Select a recipient from an Address Book" = "Seleziona almeno un destinatario dalla rubrica"; +"Include an attachment" = "Includi un allegato"; +"Save this message" = "Salva questo messaggio"; +"Get new messages" = "Scarica nuovi messaggi"; +"Create a new message" = "Scrivi un nuovo messaggio"; +"Go to address book" = "Vai alla rubrica"; +"Reply to the message" = "Rispondi a questo messaggio"; +"Reply to sender and all recipients" = "Rispondi al mittente e a tutti i destinatari"; +"Forward selected message" = "Inoltra il messaggio selezionato"; +"Delete selected message or folder" = "Cancella il messaggio o la cartella selezionata"; +"Mark the selected messages as junk" = "Contrassegna il messaggio selezionato come indesiderato"; +"Print this message" = "Stampa questo messaggio"; +"Stop the current transfer" = "Ferma il trasferimento in corso"; + +/* Main Frame */ + +"Home" = "Home"; +"Calendar" = "Calendario"; +"Addressbook" = "Rubrica"; +"Mail" = "Posta"; +"Right Administration" = "Gestione permessi"; + +"Help" = "Aiuto"; + +/* Mail account main windows */ + +"Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "Benvenuto in SOGo Mailer. Usa l'albero di sinistra per navigare tra i tuoi account di posta!"; + +"Read messages" = "Leggi messaggi"; +"Write a new message" = "Scrivi un nuovo messaggio"; + +"Share: " = "Condividi: "; +"Account: " = "Account: "; +"Shared Account: " = "Account condiviso: "; + +/* acls */ +"Default Roles" = "Permessi predefiniti"; +"User rights for:" = "Permessi per:"; + +"List and see this folder" = "Elenca e guarda questa cartella"; +"Read mails from this folder" = "Leggi emails da questa cartella"; +"Mark mails read and unread" = "Contrassegna emails lette/non lette"; +"Modify the flags of the mails in this folder" = "Modifica i contrassegni delle emails in questa cartella"; +"Insert, copy and move mails into this folder" = "Inserisci, copia e sposta emails in questa cartella"; +"Post mails" = "Recapita emails"; +"Add subfolders to this folder" = "Aggiungi sottocartelle a questa cartella"; +"Remove this folder" = "Rimuovi questa cartella"; +"Erase mails from this folder" = "Elimina emails da questa cartella"; +"Expunge this folder" = "Expugne per questa cartella"; +"Modify the acl of this folder" = "Modifica i permessi per questa cartella"; + +"Update" = "Aggiorna"; +"Cancel" = "Annulla"; + +/* Mail edition */ + +"From" = "Da"; +"Subject" = "Oggetto"; +"To" = "A"; +"Add address" = "Aggiungi indirizzi"; +"Reply-To" = "Rispondi a"; + +"Attachments:" = "Allegati:"; +"Open" = "Apri"; +"Select All" = "Seleziona tutti"; +"Attach Web Page..." = "Allega pagina Web..."; +"Attach File(s)..." = "Allega File(s)..."; + +"to" = "A"; +"cc" = "Cc"; +"bcc" = "Bcc"; + +"Addressbook" = "Rubrica"; +"Anais" = "Anais"; + +"Edit Draft..." = "Modifica bozza..."; + +"This mail is being sent from an unsecure network!" = "Questa email è stata spedita da un network contrassegnato come non sicuro!"; + +/* Popup "show" */ + +"all" = "tutti"; +"read" = "letti"; +"unread" = "non letti"; +"deleted" = "cancellati"; +"flagged" = "contrassegnati"; + +/* MailListView */ + +"Sender" = "Mittente"; +"Subject or Sender" = "Oggetto o Mittente"; +"To or Cc" = "A o Cc"; +"Entire Message" = "Tutto il messaggio"; + +"Date" = "Data"; +"View" = "Vista"; +"All" = "Tutti"; +"Unread" = "Non letti"; +"messages" = "messaggi"; + +"first" = "Primo"; +"previous" = "Precedente"; +"next" = "Prossimo"; +"last" = "Ultimo"; + +"msgnumber_to" = "a"; +"msgnumber_of" = "di"; + +"Mark Unread" = "Contrassegna come da leggere"; +"Mark Read" = "Contrassegna come letto"; + +"Untitled" = "Senza nome"; + +/* Tree */ + +"SentFolderName" = "Posta inviata"; +"TrashFolderName" = "Cestino"; +"InboxFolderName" = "Posta in arrivo"; +"DraftsFolderName" = "Bozze"; +"SieveFolderName" = "Filtri"; +"Folders" = "Cartelle"; /* title line */ + +/* MailMoveToPopUp */ + +"MoveTo" = "Sposta in …"; + +/* Address Popup menu */ +"Add to Address Book..." = "Aggiungi alla rubrica..."; +"Compose Mail To" = "Invia email a "; +"Create Filter From Message..." = "Crea filtro dal messaggio..."; + +/* Image Popup menu */ +"Save Image" = "Salva immagine"; + +/* Mailbox popup menus */ +"Open in New Mail Window" = "Apri in una nuova finestra"; +"Copy Folder Location" = "Copia cartella"; +"Subscribe..." = "Sottoscrivi..."; +"Properties..." = "Proprietà..."; +"Mark Folder Read..." = "Contrassegna cartella come già letta..."; +"New Folder..." = "Nuova cartella..."; +"Compact This Folder" = "Compatta cartella"; +"Search Messages..." = "Cerca messaggi..."; +"Sharing..." = "Condivisione..."; +"New Subfolder..." = "Nuova sottocartella..."; +"Rename Folder..." = "Rinomina cartella..."; +"Delete Folder" = "Cancella cartella"; +"Use This Folder For" = "Usa questa cartella per"; +"Get Messages for Account" = "Scarica messaggi per l'account"; + +/* Use This Folder menu */ +"Sent Messages" = "Messaggi inviati"; +"Drafts" = "Bozze"; +"Deleted Messages" = "Messaggi cancellati"; + +/* Message list popup menu */ +"Open Message In New Window" = "Apri messaggio in una nuova finestra"; +"Reply to Sender Only" = "Rispondi"; +"Reply to All" = "Rispondi a tutti"; +"Forward" = "Inoltra"; +"Edit As New..." = "Modifica come..."; +"Move To" = "Sposta in "; +"Copy To" = "Copia in "; +"Label" = "Etichetta"; +"Mark" = "Contrassegna"; +"Save As..." = "Salva come ..."; +"Print Preview" = "Anteprima di stampa"; +"View Message Source" = "Visualizza sorgente"; +"Print..." = "Stampa..."; +"Delete Message" = "Cancella messaggio"; + +"This Folder" = "This Folder"; + +/* Label popup menu */ +"None" = "Nessuno"; +"Important" = "Importante"; +"Work" = "Lavoro"; +"Personal" = "Personale"; +"To Do" = "Da fare"; +"Later" = "Posponi"; + +/* Mark popup menu */ +"As Read" = "Già letto";; +"Thread As Read" = "Thread già letto"; +"As Read By Date..." = "Già letti per data...";; +"All Read" = "Tutti già letti";; +"Flag" = "Contrassegna"; +"As Junk" = "Come indesiderati"; +"As Not Junk" = "Come non indesiderati"; +"Run Junk Mail Controls" = "Avvia controllo email indesiderate"; + +/* Folder operations */ +"Name :" = "Nome :"; +"Enter the new name of your folder :" + = "Inserisci il nuovo nome della tua cartella :"; +"Do you really want to move this folder into the trash ?" + = "Sei sicuro di voler spostare la cartella nel cestino ?"; +"Operation failed" = "Operazione non riuscita"; + +"quotasFormat" = "Spazio usato: %{0} su %{1} Kb; %{2}%"; + +"Please select a message." = "Per favore seleziona un messaggio."; +"Please select a message to print." = "Per favore seleziona un messaggio da stampare."; +"Please select only one message to print." = "Per favore seleziona un solo messaggio da stampare."; + +"You need to choose a non-virtual folder!" = "Devi selezionare una cartella fisica, non virtuale!"; + +"Moving a message into its own folder is impossible!" += "La cartella di destinazione coincide con la cartella di origine!"; +"Copying a message into its own folder is impossible!" += "La cartella di destinazione coincide con la cartella di origine!"; + +/* Message editing */ +"error_validationfailed" = "Validazione fallita"; +"error_missingsubject" = "Nessun oggetto specificato"; +"error_missingrecipients" = "Nessun destinatario specificato"; diff --git a/UI/MailerUI/UIxMailMainFrame.h b/UI/MailerUI/UIxMailMainFrame.h index a4f3dcc6..922350fb 100644 --- a/UI/MailerUI/UIxMailMainFrame.h +++ b/UI/MailerUI/UIxMailMainFrame.h @@ -31,9 +31,12 @@ NSMutableDictionary *moduleSettings; } -- (WOResponse *) getDragHandlesStateAction; - (WOResponse *) getFoldersStateAction; +- (NSString *) verticalDragHandleStyle; +- (NSString *) horizontalDragHandleStyle; +- (NSString *) mailboxContentStyle; + - (WOResponse *) saveDragHandleStateAction; - (WOResponse *) saveFoldersStateAction; diff --git a/UI/MailerUI/UIxMailMainFrame.m b/UI/MailerUI/UIxMailMainFrame.m index 40126f46..dfd45ea4 100644 --- a/UI/MailerUI/UIxMailMainFrame.m +++ b/UI/MailerUI/UIxMailMainFrame.m @@ -163,32 +163,44 @@ return [self redirectToLocation: newLocation]; } -- (WOResponse *) getDragHandlesStateAction +- (WOResponse *) getFoldersStateAction { - NSArray *dragHandles; - NSString *vertical, *horizontal; + NSString *expandedFolders; [self _setupContext]; + expandedFolders = [moduleSettings objectForKey: @"ExpandedFolders"]; - vertical = [moduleSettings objectForKey: @"DragHandleVertical"]; - horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"]; - dragHandles = [[NSArray alloc] initWithObjects: - vertical ? vertical : @"", - horizontal ? horizontal : @"", - nil]; + return [self responseWithStatus: 200 andString: expandedFolders]; +} - return [self responseWithStatus: 200 - andString: [dragHandles jsonRepresentation]]; +- (NSString *) verticalDragHandleStyle +{ + NSString *vertical; + + [self _setupContext]; + vertical = [moduleSettings objectForKey: @"DragHandleVertical"]; + + return (vertical ? [vertical stringByAppendingFormat: @"px"] : nil); } -- (WOResponse *) getFoldersStateAction +- (NSString *) horizontalDragHandleStyle { - NSString *expandedFolders; + NSString *horizontal; - [self _setupContext]; - expandedFolders = [moduleSettings objectForKey: @"ExpandedFolders"]; + [self _setupContext]; + horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"]; - return [self responseWithStatus: 200 andString: expandedFolders]; + return (horizontal ? [horizontal stringByAppendingFormat: @"px"] : nil); +} + +- (NSString *) mailboxContentStyle +{ + NSString *height; + + [self _setupContext]; + height = [moduleSettings objectForKey: @"DragHandleVertical"]; + + return (height ? [NSString stringWithFormat: @"%ipx", ([height intValue] - 27)] : nil); } - (WOResponse *) saveDragHandleStateAction diff --git a/UI/MailerUI/product.plist b/UI/MailerUI/product.plist index 4b10ad44..733563be 100644 --- a/UI/MailerUI/product.plist +++ b/UI/MailerUI/product.plist @@ -330,11 +330,6 @@ pageName = "UIxMailMainFrame"; actionName = "compose"; }; - dragHandlesState = { - protectedBy = "View"; - pageName = "UIxMailMainFrame"; - actionName = "getDragHandlesState"; - }; foldersState = { protectedBy = "View"; pageName = "UIxMailMainFrame"; diff --git a/UI/MainUI/GNUmakefile b/UI/MainUI/GNUmakefile index 6149ed24..2d0bf7f8 100644 --- a/UI/MainUI/GNUmakefile +++ b/UI/MainUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MainUI MainUI_PRINCIPAL_CLASS = MainUIProduct -MainUI_LANGUAGES = English French German +MainUI_LANGUAGES = English French German Italian MainUI_OBJC_FILES += \ MainUIProduct.m \ diff --git a/UI/MainUI/Italian.lproj/Locale b/UI/MainUI/Italian.lproj/Locale new file mode 100644 index 00000000..3ac61a38 --- /dev/null +++ b/UI/MainUI/Italian.lproj/Locale @@ -0,0 +1,35 @@ +/* Italian */ +{ + NSLanguageName = "Italian"; + NSFormalName = "Italian"; + NSLocaleCode = "it"; /* ISO 639-1 */ + NSLanguageCode = "ita"; /* ISO 639-2 */ + NSParentContext = ""; + + NSAMPMDesignation = (AM, PM); + NSCurrencySymbol = "â¬"; + NSDateFormatString = "%A, %e %B, %Y"; + NSDateTimeOrdering = DMYH; + NSDecimalDigits = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); + NSDecimalSeparator = "."; + NSEarlierTimeDesignations = (prima, scorso, dopo, fa); + NSHourNameDesignations = ((0, notte), (10, mattina), (12, giorno), (14, pomeriggio), (19, sera)); + NSInternationalCurrencyString = EUR; /* ISO 4217 */ + NSLaterTimeDesignations = (dopo); + NSMonthNameArray = (Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre); + NSNextDayDesignations = (domani); + NSNextNextDayDesignations = (dopodomani); + NSPriorDayDesignations = (ieri); + NSShortDateFormatString = "%d/%m/%y"; + NSShortMonthNameArray = (Gen, Feb, Mar, Apr, Mag, Giu, Lug, Ago, Set, Ott, Nov, Dic); + NSShortTimeDateFormatString = "%d/%m/%y %H:%M"; + NSShortWeekDayNameArray = (Lun, Mar, Mer, Gio, Ven, Sab, Dom); + NSThisDayDesignations = (oggi, ora); + NSThousandsSeparator = ","; + NSTimeDateFormatString = "%A, %e %B, %Y %H:%M:%S %Z"; + NSTimeFormatString = "%H:%M:%S"; + NSWeekDayNameArray = (Lunedi, Martedi, Mercoledi, Giovedi, Venerdi, Sabato, Domenica); + NSYearMonthWeekDesignations = (anno, mese, settimana); + NSPositiveCurrencyFormatString = "⬠9,999.00"; + NSNegativeCurrencyFormatString = "-⬠9,999.00"; +} diff --git a/UI/MainUI/Italian.lproj/Localizable.strings b/UI/MainUI/Italian.lproj/Localizable.strings new file mode 100644 index 00000000..0fbd90cf --- /dev/null +++ b/UI/MainUI/Italian.lproj/Localizable.strings @@ -0,0 +1,10 @@ +/* this file is in UTF-8 format! */ + +"title" = "SOGo"; + +"Username:" = "Username:"; +"Password:" = "Password:"; + +"Connect" = "Entra"; + +"Wrong username or password." = "Username o password non corretti."; diff --git a/UI/PreferencesUI/GNUmakefile b/UI/PreferencesUI/GNUmakefile index fa7f428d..e36ec4dc 100644 --- a/UI/PreferencesUI/GNUmakefile +++ b/UI/PreferencesUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = PreferencesUI PreferencesUI_PRINCIPAL_CLASS = PreferencesUIProduct -PreferencesUI_LANGUAGES = English French German +PreferencesUI_LANGUAGES = English French German Italian PreferencesUI_OBJC_FILES = \ PreferencesUIProduct.m \ diff --git a/UI/PreferencesUI/Italian.lproj/Localizable.strings b/UI/PreferencesUI/Italian.lproj/Localizable.strings new file mode 100644 index 00000000..d2cc3ab1 --- /dev/null +++ b/UI/PreferencesUI/Italian.lproj/Localizable.strings @@ -0,0 +1,91 @@ +/* toolbar */ +"Save and Close" = "Salva e chiudi"; +"Close" = "Chiudi"; + +/* tabs */ +"General" = "Generale"; +"Calendar Options" = "Opzioni calendario"; +"Mail Options" = "Opzioni di posta"; +"Identities" = "Identità"; +"Password" = "Password"; + +/* ooo */ +"I'm currently in the office" = "Sono in ufficio"; +"I'm currently out of the office" = "Sono fuori ufficio"; +"AutoReply only once to each sender with the following text :" = "Rispondi automaticamente solo una volta ad ogni mittente usando questo testo:"; + +/* d & t */ +"Current Time Zone :" = "Fuso orario:"; +"Short Date Format :" = "Data breve:"; +"Long Date Format :" = "Data estesa:"; +"Time Format :" = "Formato ora:"; + +"shortDateFmt_0" = "%m/%e/%Y"; +"shortDateFmt_1" = "%m/%e/%y"; +"shortDateFmt_2" = "%m/%d/%Y"; +"shortDateFmt_3" = "%m/%d/%y"; +"shortDateFmt_4" = "%y/%m/%d"; +"shortDateFmt_5" = "%Y-%m-%d"; +"shortDateFmt_6" = "%d-%b-%y"; +"shortDateFmt_7" = ""; + +"longDateFmt_0" = "%A, %B %d, %Y"; +"longDateFmt_1" = "%B %d, %Y"; +"longDateFmt_2" = "%A, %d %B, %Y"; +"longDateFmt_3" = "%d %B, %Y"; +"longDateFmt_4" = ""; + +"timeFmt_0" = "%I:%M %p"; +"timeFmt_1" = "%H:%M"; +"timeFmt_2" = ""; + +/* calendar */ +"Week begins on :" = "La settimana inizia il:"; +"Day start time :" = "La giornata lavorativa inizia alle ore:"; +"Day end time :" = "La giornata lavorativa termina alle ore:"; +"First week of year :" = "Prima settimana dell'anno:"; +"Enable reminders for Calendar items" = "Abilita promemoria per gli eventi del Calendario"; +"Play a sound when a reminder comes due" = "Riproduci un suono quando un promemoria è attivo"; +"Default reminder :" = "Promemoria predefinito:"; + +"firstWeekOfYear_HideWeekNumbers" = "Non visualizzare i numeri della settimana"; +"firstWeekOfYear_January1" = "Inizia l'1 gennaio"; +"firstWeekOfYear_First4DayWeek" = "Prima settimana di 4 giorni"; +"firstWeekOfYear_FirstFullWeek" = "Prima settimana completa"; + +"reminderTime_0000" = "0 minuti"; +"reminderTime_0005" = "5 minuti"; +"reminderTime_0010" = "10 minuti"; +"reminderTime_0015" = "15 minuti"; +"reminderTime_0030" = "30 minuti"; +"reminderTime_0100" = "1 ora"; +"reminderTime_0200" = "2 ore"; +"reminderTime_0400" = "4 ore"; +"reminderTime_0800" = "8 ore"; +"reminderTime_1200" = "1/2 giornata"; +"reminderTime_2400" = "1 giorno"; +"reminderTime_4800" = "2 giorni"; + +/* Mailer */ +"Check for new mail:" = "Controlla la posta in arrivo:"; +"messagecheck_manually" = "Manualmente"; +"messagecheck_every_minute" = "Ogni minuto"; +"messagecheck_every_2_minutes" = "Ogni 2 minuti"; +"messagecheck_every_5_minutes" = "Ogni 5 minuti"; +"messagecheck_every_10_minutes" = "Ogni 10 minuti"; +"messagecheck_every_20_minutes" = "Ogni 20 minuti"; +"messagecheck_every_30_minutes" = "Ogni 30 minuti"; +"messagecheck_once_per_hour" = "Ogni ora"; + +"Forward messages:" = "Inoltra messaggi come:"; +"messageforward_inline" = "Parte del messaggio"; +"messageforward_attached" = "Allegato"; + +"Default identity:" = "Identità principale:"; +"Manage identities..." = "Gestisci identità..."; +"Signature:" = "Firma:"; + +/* password */ +"New password:" = "Nuova password:"; +"Confirmation:" = "Ripeti nuova password:"; +"Change" = "Cambia Password"; diff --git a/UI/SOGoUI/SOGoACLAdvisory.h b/UI/SOGoUI/SOGoACLAdvisory.h index 7f200d81..65c13c42 100644 --- a/UI/SOGoUI/SOGoACLAdvisory.h +++ b/UI/SOGoUI/SOGoACLAdvisory.h @@ -74,6 +74,9 @@ @interface SOGoACLGermanAdditionAdvisory : SOGoACLAdditionAdvisory @end +@interface SOGoACLItalianAdditionAdvisory : SOGoACLAdditionAdvisory +@end + @interface SOGoACLEnglishModificationAdvisory : SOGoACLModificationAdvisory @end @@ -83,6 +86,9 @@ @interface SOGoACLGermanModificationAdvisory : SOGoACLModificationAdvisory @end +@interface SOGoACLItalianModificationAdvisory : SOGoACLModificationAdvisory +@end + @interface SOGoACLEnglishRemovalAdvisory : SOGoACLRemovalAdvisory @end @@ -92,4 +98,7 @@ @interface SOGoACLGermanRemovalAdvisory : SOGoACLRemovalAdvisory @end +@interface SOGoACLItalianRemovalAdvisory : SOGoACLRemovalAdvisory +@end + #endif /* SOGOACLADVISORY_H */ diff --git a/UI/SOGoUI/SOGoACLAdvisory.m b/UI/SOGoUI/SOGoACLAdvisory.m index ffefbd0b..ecdbb5ff 100644 --- a/UI/SOGoUI/SOGoACLAdvisory.m +++ b/UI/SOGoUI/SOGoACLAdvisory.m @@ -255,6 +255,9 @@ @implementation SOGoACLGermanAdditionAdvisory @end +@implementation SOGoACLItalianAdditionAdvisory +@end + @implementation SOGoACLEnglishModificationAdvisory @end @@ -264,6 +267,9 @@ @implementation SOGoACLGermanModificationAdvisory @end +@implementation SOGoACLItalianModificationAdvisory +@end + @implementation SOGoACLEnglishRemovalAdvisory @end @@ -272,3 +278,7 @@ @implementation SOGoACLGermanRemovalAdvisory @end + +@implementation SOGoACLItalianRemovalAdvisory +@end + diff --git a/UI/SOGoUI/SOGoFolderAdvisory.h b/UI/SOGoUI/SOGoFolderAdvisory.h index 3485d4c6..36ee75b9 100644 --- a/UI/SOGoUI/SOGoFolderAdvisory.h +++ b/UI/SOGoUI/SOGoFolderAdvisory.h @@ -65,4 +65,11 @@ @interface SOGoFolderGermanRemovalAdvisory : SOGoFolderAdvisory @end +@interface SOGoFolderItalianAdditionAdvisory : SOGoFolderAdvisory +@end + +@interface SOGoFolderItalianRemovalAdvisory : SOGoFolderAdvisory +@end + + #endif /* SOGOFOLDERADVISORY_H */ diff --git a/UI/SOGoUI/SOGoFolderAdvisory.m b/UI/SOGoUI/SOGoFolderAdvisory.m index 45a1e74e..26cddaa8 100644 --- a/UI/SOGoUI/SOGoFolderAdvisory.m +++ b/UI/SOGoUI/SOGoFolderAdvisory.m @@ -230,3 +230,12 @@ @implementation SOGoFolderGermanRemovalAdvisory - (NSString *) folderMethod { return @"remove"; } @end + +@implementation SOGoFolderItalianAdditionAdvisory +- (NSString *) folderMethod { return @"add"; } +@end + +@implementation SOGoFolderItalianRemovalAdvisory +- (NSString *) folderMethod { return @"remove"; } +@end + diff --git a/UI/Scheduler/GNUmakefile b/UI/Scheduler/GNUmakefile index 03d57ce8..beed2942 100644 --- a/UI/Scheduler/GNUmakefile +++ b/UI/Scheduler/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = SchedulerUI SchedulerUI_PRINCIPAL_CLASS = SchedulerUIProduct -SchedulerUI_LANGUAGES = English French German +SchedulerUI_LANGUAGES = English French German Italian SchedulerUI_OBJC_FILES = \ SchedulerUIProduct.m \ diff --git a/UI/Scheduler/Italian.lproj/Localizable.strings b/UI/Scheduler/Italian.lproj/Localizable.strings new file mode 100644 index 00000000..46beb674 --- /dev/null +++ b/UI/Scheduler/Italian.lproj/Localizable.strings @@ -0,0 +1,469 @@ +/* this file is in UTF-8 format! */ + +/* Tooltips */ + +"Create a new event" = "Crea un nuovo evento"; +"Create a new task" = "Crea una nuova attività"; +"Edit this event or task" = "Modifica questo evento o attività"; +"Delete this event or task" = "Cancella questo evento o attività"; +"Go to today" = "Oggi"; +"Switch to day view" = "Giorno"; +"Switch to week view" = "Settimana"; +"Switch to month view" = "Mese"; + +/* Day */ + +"Sunday" = "Domenica"; +"Monday" = "Lunedi"; +"Tuesday" = "Martedi"; +"Wednesday" = "Mercoledi"; +"Thursday" = "Giovedi"; +"Friday" = "Venerdi"; +"Saturday" = "Sabato"; + +"Sun" = "Dom"; +"Mon" = "Lun"; +"Tue" = "Mar"; +"Wed" = "Mer"; +"Thu" = "Gio"; +"Fri" = "Ven"; +"Sat" = "Sab"; + +"a2_Sunday" = "Do"; +"a2_Monday" = "Lu"; +"a2_Tuesday" = "Ma"; +"a2_Wednesday" = "Me"; +"a2_Thursday" = "Gi"; +"a2_Friday" = "Ve"; +"a2_Saturday" = "Sa"; + +"dayLabelFormat" = "%d/%m/%Y"; +"today" = "Oggi"; + +/* Week */ + +"Week" = "Settimana"; +"this week" = "questa settimana"; + +"Week %d" = "Settimana %d"; + +/* Month */ + +"this month" = "questo mese"; + +"January" = "Gennaio"; +"February" = "Febbraio"; +"March" = "Marzo"; +"April" = "Aprile"; +"May" = "Maggio"; +"June" = "Giugno"; +"July" = "Luglio"; +"August" = "Agosto"; +"September" = "Settembre"; +"October" = "Ottobre"; +"November" = "Novembre"; +"December" = "Dicembre"; + +"a3_January" = "Gennaio"; +"a3_February" = "Febbraio"; +"a3_March" = "Marzo"; +"a3_April" = "Aprile"; +"a3_May" = "Maggio"; +"a3_June" = "Giugno"; +"a3_July" = "Luglio"; +"a3_August" = "Agosto"; +"a3_September" = "Settembre"; +"a3_October" = "Ottobre"; +"a3_November" = "Novembre"; +"a3_December" = "Dicembre"; + +/* Year */ + +"this year" = "quest'anno"; + +/* Menu */ + +"Calendars" = "Calendari"; +"Calendar" = "Calendario"; +"Contacts" = "Contatti"; + +"New Calendar..." = "Nuovo calendario..."; +"Delete Calendar" = "Rimuovi calendario..."; +"Sharing..." = "Condivisione"; +"Export Calendar..." = "Esporta calendario..."; +"Publish Calendar..." = "Pubblica calendario..."; +"Reload Remote Calendars" = "Aggiorna calendari Remoti"; +"Properties" = "Proprietà"; + +"Compose E-Mail to All Attendees" = "Invia Email a tutti gli invitati"; +"Compose E-Mail to Undecided Attendees" = "Invia Email agli invitati indecisi"; + +/* Folders */ +"Personal calendar" = "Calendario personale"; + +/* Misc */ + +"OpenGroupware.org" = "OpenGroupware.org"; +"Forbidden" = "Vietato"; + +/* acls */ +"Default Roles" = "Permessi predefiniti"; +"User rights for:" = "Permessi per:"; +"label_Public" = "Pubblico"; +"label_Private" = "Privato"; +"label_Confidential" = "Confidenziale"; +"View All" = "Tutto"; +"View the Date & Time" = "Data e ora"; +"Modify" = "Modifica"; +"Respond To" = "Rispondi a"; +"None" = "Nessuno"; +"This person can create objects in my calendar." = "Questa persona può inserire elementi nel mio calendario."; +"This person can erase objects from my calendar." = "Questa persona può rimuovere elementi dal mio calendario."; + +/* Button Titles */ + +"New Calendar..." = "Nuovo calendario..."; +"Subscribe to a Calendar..." = "Sottoscrivi un calendario..."; +"Remove the selected Calendar" = "Rimuovi il calendario selezionato..."; + +"Name of the Calendar" = "Nome del calendario"; + +"new" = "Nuovo"; +"printview" = "Anteprima di Stampa"; +"edit" = "Modifica"; +"delete" = "Cancella"; +"proposal" = "Proposta"; +"Save and Close" = "Salva e chiudi"; +"Close" = "Chiudi"; +"Invite Attendees" = "Invita partecipanti"; +"Documents" = "Collegamento"; +"Update" = "Aggiorna"; +"Cancel" = "Annulla"; +"show_rejected_apts" = "Visualizza appuntamenti rifiutati"; +"hide_rejected_apts" = "Nascondi appuntamenti rifiutati"; + + +/* Schedule */ + +"Schedule" = "Schedule"; +"No appointments found" = "Nessun appuntamento trovato"; +"Meetings proposed by you" = "Incontri proposti da te"; +"Meetings proposed to you" = "Incontri a cui sei stato invitato"; +"sched_startDateFormat" = "%d/%m %H:%M"; +"action" = "Azione"; +"accept" = "Accetta"; +"decline" = "Declina"; +"more attendees" = "Altri partecipanti"; +"Hide already accepted and rejected appointments" = "Nascondi gli appuntamenti già accettati o declinati"; +"Show already accepted and rejected appointments" = "Visualizza gli appuntamenti già accettati o declinati"; + + +/* Appointments */ + +"Appointment viewer" = "Visualizza appuntamenti"; +"Appointment editor" = "Modifica appuntamenti"; +"Appointment proposal" = "Proponi appuntamenti"; +"Appointment on" = "Appuntamento del"; +"Start:" = "Inizio:"; +"End:" = "Fine:"; +"Due Date:" = "Scadenza:"; +"Title:" = "Titolo:"; +"Calendar:" = "Calendario:"; +"Name" = "Nome"; +"Email" = "Email"; +"Status:" = "Stato:"; +"% complete" = "% completato"; +"Location:" = "Luogo:"; +"Priority:" = "Priorità:"; +"Privacy" = "Privacy"; +"Cycle" = "Ricorrenza"; +"Cycle End" = "Termine ricorrenza"; +"Categories" = "Categorie"; +"Classification" = "Classificazione"; +"Duration" = "Durata"; +"Attendees:" = "Partecipanti:"; +"Resources" = "Risorse"; +"Organizer:" = "Organizzatore:"; +"Description:" = "Descrizione:"; +"Document:" = "Documento:"; +"Category:" = "Categoria:"; +"Repeat:" = "Ripeti:"; +"Reminder:" = "Promemoria:"; + +"Target:" = "Percorso:"; + +"attributes" = "attributi"; +"attendees" = "invitati"; +/* checkbox title */ +"is private" = "contrassegna come privato"; +/* classification */ +"Public" = "Pubblico"; +"Private" = "Privato"; +/* text used in overviews and tooltips */ +"empty title" = "Senza titolo"; +"private appointment" = "Appuntamento privato"; + +"Change..." = "Modifica..."; + +/* Appointments (participation state) */ + +"partStat_NEEDS-ACTION" = "Richiede un'azione"; +"partStat_ACCEPTED" = "Accettato"; +"partStat_DECLINED" = "Declinato"; +"partStat_TENTATIVE" = "Tentativo"; +"partStat_DELEGATED" = "Inviata delega"; +"partStat_OTHER" = "Altro"; + +/* Appointments (error messages) */ + +"Conflicts found!" = "Individuato conflitto!"; +"Invalid iCal data!" = "Dati iCal non validi!"; +"Could not create iCal data!" = "Impossibile creare dati iCal!"; + +/* Searching */ + +"view_all" = "Tutti"; +"view_today" = "Oggi"; +"view_next7" = "Prossimi 7 giorni"; +"view_next14" = "Prossimi 14 giorni"; +"view_next31" = "Prossimi 31 giorni"; +"view_thismonth" = "Questo mese"; +"view_future" = "Tutti i prossimi eventi"; +"view_selectedday" = "Giorno selezionato"; + +"View:" = "Visualizza:"; +"Title or Description" = "Titolo o descrizione"; + +"Search" = "Cerca"; +"Search attendees" = "Cerca invitati"; +"Search resources" = "Cerca risorse"; +"Search appointments" = "Cerca appuntamenti"; +"Search in Anais" = "Cerca in Anais"; + +"All day Event" = "Tutta la giornata"; +"check for conflicts" = "Controlla conflitti"; + +"Browse URL" = "Cerca URL"; + +/* calendar modes */ + +"Overview" = "Panoramica"; +"Chart" = "Grafico"; +"List" = "Lista"; +"Columns" = "Colonne"; + +/* Priorities */ + +"prio_0" = "Nessuna"; +"prio_1" = "Alta"; +"prio_2" = "Alta"; +"prio_3" = "Alta"; +"prio_4" = "Alta"; +"prio_5" = "Normale"; +"prio_6" = "Bassa"; +"prio_7" = "Bassa"; +"prio_8" = "Bassa"; +"prio_9" = "Bassa"; + +/* access classes (privacy) */ +"PUBLIC_vevent" = "Evento pubblico"; +"CONFIDENTIAL_vevent" = "Evento confidenziale"; +"PRIVATE_vevent" = "Evento privato"; +"PUBLIC_vtodo" = "Attività pubblica"; +"CONFIDENTIAL_vtodo" = "Attività confidenziale"; +"PRIVATE_vtodo" = "Attività privata"; + +/* status type */ +"status_" = "Non specificato"; +"status_NOT-SPECIFIED" = "Non specificato"; +"status_TENTATIVE" = "Tentativo"; +"status_CONFIRMED" = "Confermato"; +"status_CANCELLED" = "Cancellato"; +"status_NEEDS-ACTION" = "Richiede un'azione"; +"status_IN-PROCESS" = "In esecuzione"; +"status_COMPLETED" = "Completato il "; + +/* Cycles */ + +"cycle_once" = "ricorre una volta"; +"cycle_daily" = "ricorre una volta al giorno"; +"cycle_weekly" = "ricorrenza settimanale"; +"cycle_2weeks" = "ricorre per 2 settimane"; +"cycle_4weeks" = "ricorre per 4 settimane"; +"cycle_monthly" = "ricorre per 1 mese"; +"cycle_weekday" = "ricorre un giorno alla settimana"; +"cycle_yearly" = "ricorre annualmente"; + +"cycle_end_never" = "nessuna data di fine"; +"cycle_end_until" = "ricorrenza fino al"; + +"Recurrence pattern" = "Modello di ricorrenza"; +"Range of recurrence" = "Intervallo di ricorrenza"; + +"Repeat" = "Ripetizione"; +"Daily" = "Giornaliera"; +"Weekly" = "Settimanale"; +"Monthly" = "Mensile"; +"Yearly" = "Annuale"; +"Every" = "Ogni"; +"Days" = "Giorni"; +"Week(s)" = "Settimana/e"; +"On" = "Il"; +"Month(s)" = "Mese/i"; +"The" = "Il"; +"Recur on day(s)" = "Ricorre il giorno/i"; +"Year(s)" = "Anno/i"; +"cycle_of" = "di"; +"No end date" = "Nessuna data di fine"; +"Create" = "Crea"; +"Appointment(s)" = "Appuntamento/i"; +"Appointments(s)" = "Appuntamento/i"; +"Repeat until" = "Ripeti fino "; + +"First" = "Primo"; +"Second" = "Secondo"; +"Third" = "Terzo"; +"Fourth" = "Quarto"; +"Fift" = "Quinto"; +"Last" = "Ultimo"; + +/* Appointment categories */ + +"category_NONE" = "Nessuna"; +"category_ANNIVERSARY" = "Anniversario"; +"category_BIRTHDAY" = "Compleanno"; +"category_BUSINESS" = "Lavoro"; +"category_CALLS" = "Chiamare"; +"category_CLIENTS" = "Clienti"; +"category_COMPETITION" = "Gara"; +"category_CUSTOMER" = "Cliente"; +"category_FAVORITES" = "Preferiti"; +"category_FOLLOW UP" = "Supplementari"; +"category_GIFTS" = "Regali"; +"category_HOLIDAYS" = "Vacanze"; +"category_IDEAS" = "Idee"; +"category_ISSUES" = "Inconvegnenti"; +"category_MISCELLANEOUS" = "Varie"; +"category_PERSONAL" = "Personale"; +"category_PROJECTS" = "Progetto"; +"category_PUBLIC HOLIDAY" = "Festività"; +"category_STATUS" = "Stato"; +"category_SUPPLIERS" = "Fornitore"; +"category_TRAVEL" = "Viaggio"; +"category_VACATION" = "Ferie"; + +"repeat_NEVER" = "Non si ripete"; +"repeat_DAILY" = "Quotidianamente"; +"repeat_WEEKLY" = "Settimanalmente"; +"repeat_BI-WEEKLY" = "Bisettimanalmente"; +"repeat_EVERY WEEKDAY" = "Nei giorni lavorativi"; +"repeat_MONTHLY" = "Mensilmente"; +"repeat_YEARLY" = "Annualmente"; +"repeat_CUSTOM" = "Personalizza..."; + +"reminder_NONE" = "Nessun promemoria"; +"reminder_5_MINUTES_BEFORE" = "5 minuti prima"; +"reminder_10_MINUTES_BEFORE" = "10 minuti prima"; +"reminder_15_MINUTES_BEFORE" = "15 minuti prima"; +"reminder_30_MINUTES_BEFORE" = "30 minuti prima"; +"reminder_45_MINUTES_BEFORE" = "45 minuti prima"; +"reminder_1_HOUR_BEFORE" = "1 ora prima"; +"reminder_2_HOURS_BEFORE" = "2 ore prima"; +"reminder_5_HOURS_BEFORE" = "5 ore prima"; +"reminder_15_HOURS_BEFORE" = "15 ore prima"; +"reminder_1_DAY_BEFORE" = "1 giorno prima"; +"reminder_2_DAYS_BEFORE" = "2 giorni prima"; +"reminder_1_WEEK_BEFORE" = "1 settimana prima"; +"reminder_CUSTOM" = "Personalizza..."; + +"zoom_400" = "400%"; +"zoom_200" = "200%"; +"zoom_100" = "100%"; +"zoom_50" = "50%"; +"zoom_25" = "25%"; + +/* validation errors */ + +validate_notitle = "Nessun titolo inserito, continuare?"; +validate_invalid_startdate = "Data iniziale non corretta!"; +validate_invalid_enddate = "Data finale non corretta!"; +validate_endbeforestart = "La data finale specificata è precedente alla data di inizio."; + +"Tasks" = "Tasks"; +"Show completed tasks" = "Visualizza attività completate"; + +/* tabs */ +"Task" = "Attività"; +"Event" = "Evento"; +"Recurrence" = "Ricorrenza"; + +/* toolbar */ +"New Event" = "Nuovo evento"; +"New Task" = "Nuova attività"; +"Edit" = "Modifica"; +"Delete" = "Rimuovi"; +"Go to Today" = "Oggi"; +"Day View" = "Giorno"; +"Week View" = "Settimana"; +"Month View" = "Mese"; + +"eventPartStatModificationError" = "Lo stato della tua partecipazione non può essere modificato."; + +/* menu */ +"New Event..." = "Nuovo evento..."; +"New Task..." = "Nuova attività..."; +"Edit Selected Event..." = "Modifica evento selezionato..."; +"Delete Selected Event" = "Rimuovi evento selezionato..."; +"Select All" = "Seleziona tutti"; +"Workweek days only" = "Solo giorni lavorativi"; +"Tasks in View" = "Attività in elenco"; + +"eventDeleteConfirmation" = "Stai per cancellare in maniera permanente l'evento.\nVuoi procedere?"; +"taskDeleteConfirmation" = "Stai per cancellare in maniera permanente il task.\nVuoi procedere?"; + +"Are you sure you want to delete the calendar \"%{0}\"?" += "Sei sicuro di voler cancellare il calendario \"%{0}\"?"; + +/* Legend */ +"Required participant" = "Richiede partecipanti"; +"Optional participant" = "Partecipanti opzionali"; +"Chair" = "Chair"; + +"Needs action" = "Richiede un'azione"; +"Accepted" = "Accettato"; +"Declined" = "Declinato"; +"Tentative" = "Tentativo"; + +"Free" = "Libero"; +"Busy" = "Occupato"; +"Maybe busy" = "Probabilmente occupato"; +"No free-busy information" = "Informazione non disponibile"; + +/* FreeBusy panel buttons */ +"Previous slot" = "Precedente"; +"Next slot" = "Successivo"; +"Previous hour" = "Ora precedente"; +"Next hour" = "Ora successiva"; + +/* apt list */ +"Title" = "Titolo"; +"Start" = "Inizio"; +"End" = "Fine"; +"Location" = "Luogo"; +"(Private Event)" = "(Evento privato)"; + +vevent_class0 = "(Evento pubblico)"; +vevent_class1 = "(Evento privato)"; +vevent_class2 = "(Evento confidenziale)"; + +vtodo_class0 = "(Attività pubblica)"; +vtodo_class1 = "(Attività privata)"; +vtodo_class2 = "(Attività confidenziale)"; + +"closeThisWindowMessage" = "Grazie! Ora puoi chiudere la finestra "; +"Multicolumn Day View" = "Vista per giorno multi-colonna"; + +"Please select an event or a task." = "Per favore seleziona un evento o un'attività."; +"Suggest time slot:" = "Periodo suggerito:"; +"From" = "Da"; +"To" = "A"; diff --git a/UI/Scheduler/UIxCalMainView.h b/UI/Scheduler/UIxCalMainView.h index 3ebb2fe0..9cfe28b2 100644 --- a/UI/Scheduler/UIxCalMainView.h +++ b/UI/Scheduler/UIxCalMainView.h @@ -47,7 +47,10 @@ - (void) setYearMenuItem: (NSNumber *) aYearMenuItem; - (NSNumber *) yearMenuItem; -- (WOResponse *) getDragHandlesStateAction; +- (NSString *) verticalDragHandleStyle; +- (NSString *) horizontalDragHandleStyle; +- (NSString *) eventsListViewStyle; + - (WOResponse *) saveDragHandleStateAction; @end diff --git a/UI/Scheduler/UIxCalMainView.m b/UI/Scheduler/UIxCalMainView.m index 0739df96..d0939c64 100644 --- a/UI/Scheduler/UIxCalMainView.m +++ b/UI/Scheduler/UIxCalMainView.m @@ -124,22 +124,34 @@ static NSMutableArray *yearMenuItems = nil; return yearMenuItem; } -- (WOResponse *) getDragHandlesStateAction +- (NSString *) verticalDragHandleStyle { - NSArray *dragHandles; - NSString *vertical, *horizontal; + NSString *vertical; - [self _setupContext]; + [self _setupContext]; + vertical = [moduleSettings objectForKey: @"DragHandleVertical"]; + + return (vertical ? [vertical stringByAppendingFormat: @"px"] : nil); +} + +- (NSString *) horizontalDragHandleStyle +{ + NSString *horizontal; + + [self _setupContext]; + horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"]; + + return (horizontal ? [horizontal stringByAppendingFormat: @"px"] : nil); +} + +- (NSString *) eventsListViewStyle +{ + NSString *height; - vertical = [moduleSettings objectForKey: @"DragHandleVertical"]; - horizontal = [moduleSettings objectForKey: @"DragHandleHorizontal"]; - dragHandles = [[NSArray alloc] initWithObjects: - vertical != nil ? vertical : @"", - horizontal ? horizontal : @"", - nil]; + [self _setupContext]; + height = [moduleSettings objectForKey: @"DragHandleVertical"]; - return [self responseWithStatus: 200 - andString: [dragHandles jsonRepresentation]]; + return (height ? [NSString stringWithFormat: @"%ipx", ([height intValue] - 27)] : nil); } - (WOResponse *) saveDragHandleStateAction diff --git a/UI/Scheduler/UIxComponentEditor.m b/UI/Scheduler/UIxComponentEditor.m index 1521b06d..91d40d0f 100644 --- a/UI/Scheduler/UIxComponentEditor.m +++ b/UI/Scheduler/UIxComponentEditor.m @@ -1428,7 +1428,7 @@ RANGE(2); // We recur on specific days... if ([[self repeat2] intValue] == 1) { - [theRule setNamedValue: @"bymonthday" to: [self repeat5]]; + [theRule setNamedValue: @"bymonthday" to: [self repeat5]]; } else { @@ -1526,16 +1526,12 @@ RANGE(2); |iCalWeekDayFriday)]; [rule setFrequency: iCalRecurrenceFrequenceDaily]; } - else if ([repeat caseInsensitiveCompare: @"MONTHLY"] == NSOrderedSame) - { - [rule setNamedValue: @"bymonthday" - to: [NSString stringWithFormat: @"%d", [[component startDate] dayOfMonth]]]; - [rule setFrequency: iCalRecurrenceFrequenceMonthly]; - } - else if ([repeat caseInsensitiveCompare: @"DAILY"] == NSOrderedSame || - [repeat caseInsensitiveCompare: @"WEEKLY"] == NSOrderedSame || - [repeat caseInsensitiveCompare: @"YEARLY"] == NSOrderedSame) + else if ([repeat caseInsensitiveCompare: @"MONTHLY"] == NSOrderedSame + || [repeat caseInsensitiveCompare: @"DAILY"] == NSOrderedSame + || [repeat caseInsensitiveCompare: @"WEEKLY"] == NSOrderedSame + || [repeat caseInsensitiveCompare: @"YEARLY"] == NSOrderedSame) { + [rule setInterval: @"1"]; [rule setFrequency: (iCalRecurrenceFrequency) [rule valueForFrequency: repeat]]; } diff --git a/UI/Scheduler/product.plist b/UI/Scheduler/product.plist index 18a20e1a..85db92f0 100644 --- a/UI/Scheduler/product.plist +++ b/UI/Scheduler/product.plist @@ -40,11 +40,6 @@ protectedBy = "View"; pageName = "UIxCalMainView"; }; - dragHandlesState = { - protectedBy = ""; - pageName = "UIxCalMainView"; - actionName = "getDragHandlesState"; - }; saveDragHandleState = { protectedBy = "View"; pageName = "UIxCalMainView"; diff --git a/UI/Templates/ContactsUI/UIxContactsListView.wox b/UI/Templates/ContactsUI/UIxContactsListView.wox index 0593bb3f..e7ec45eb 100644 --- a/UI/Templates/ContactsUI/UIxContactsListView.wox +++ b/UI/Templates/ContactsUI/UIxContactsListView.wox @@ -31,12 +31,7 @@ + var:contactid="currentContact.c_uid"> diff --git a/UI/Templates/ContactsUI/UIxContactsListViewContainer.wox b/UI/Templates/ContactsUI/UIxContactsListViewContainer.wox index 31ccfc8c..1520379e 100644 --- a/UI/Templates/ContactsUI/UIxContactsListViewContainer.wox +++ b/UI/Templates/ContactsUI/UIxContactsListViewContainer.wox @@ -11,6 +11,22 @@ title="name" var:popup="isPopup"> + + + diff --git a/UI/Templates/MailerUI/UIxMailMainFrame.wox b/UI/Templates/MailerUI/UIxMailMainFrame.wox index cd847feb..a7f52e3e 100644 --- a/UI/Templates/MailerUI/UIxMailMainFrame.wox +++ b/UI/Templates/MailerUI/UIxMailMainFrame.wox @@ -12,6 +12,20 @@ var textMailAccounts = ''; var textQuotaSupport = ''; +