From b86b1afdb9a838cb4e13c99f44849652927058ec Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Mon, 29 Jun 2015 13:49:41 -0400 Subject: [PATCH 01/61] Fix for dfecce738187a57da17e4792d0daa5cc3fc147d2 --- ActiveSync/SOGoActiveSyncDispatcher+Sync.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m index 47ec81990..60667f70d 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m +++ b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m @@ -487,7 +487,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if (![sogoObject isKindOfClass: [NSException class]]) { // FIXME: handle errors here - if (deletesAsMoves) + if (deletesAsMoves && theFolderType == ActiveSyncMailFolder) [(SOGoMailFolder *)[sogoObject container] deleteUIDs: [NSArray arrayWithObjects: serverId, nil] useTrashFolder: &useTrash inContext: context]; else [sogoObject delete]; From 7c6c78d13b890a086eb1a9bef92f947f4aaa073a Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Sun, 19 Jul 2015 13:37:08 -0400 Subject: [PATCH 02/61] Updated NEWS file regarding PR from Zentyal folks --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index 080088c49..ed1c2b373 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,9 @@ Enhancements - now always enforce the organizer's default identity in appointments - improved the handling of default calendar categories/colors (#3200) - added support for DeletesAsMoves over EAS + - added create-folder subcommand to sogo-tool to create contact and calendar folders + - group mail addresses can be used as recipient in Outlook + - added 'ActiveSync' module constraints Bug fixes - EAS's GetItemEstimate/ItemOperations now support fetching mails and empty folders From 3a61b7bae49dc750ab20001dbe9ce12de654d382 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Jul 2015 09:15:34 -0400 Subject: [PATCH 03/61] Android EAS Lollipop fixes (#3268 and #3269) --- ActiveSync/SOGoActiveSyncDispatcher.m | 19 +++++++++++++++---- NEWS | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index b107b94f0..6d8de37ad 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -699,7 +699,7 @@ static BOOL debugOn = NO; SOGoMailAccount *accountFolder; NSMutableString *s, *commands; SOGoUserFolder *userFolder; - NSMutableArray *folders; + NSMutableArray *folders, *processedFolders; SoSecurityManager *sm; SOGoCacheGCSObject *o; id currentFolder; @@ -719,6 +719,8 @@ static BOOL debugOn = NO; command_count = 0; commands = [NSMutableString string]; + processedFolders = [NSMutableArray array]; + [s appendString: @""]; [s appendString: @""]; @@ -727,7 +729,7 @@ static BOOL debugOn = NO; first_sync = YES; syncKey = @"1"; } - else if (![syncKey isEqualToString: [metadata objectForKey: @"FolderSyncKey"]]) + else if (![metadata objectForKey: @"FolderSyncKey"]) { // Synchronization key mismatch or invalid synchronization key //NSLog(@"FolderSync syncKey mismatch %@ <> %@", syncKey, metadata); @@ -862,7 +864,13 @@ static BOOL debugOn = NO; serverId = [NSString stringWithFormat: @"mail/%@", [[imapGUIDs objectForKey: nameInCache] substringFromIndex: 6]]; name = [folderMetadata objectForKey: @"displayName"]; - + + // avoid duplicate folders if folder is returned by different imap namespaces + if ([processedFolders indexOfObject: serverId] == NSNotFound) + [processedFolders addObject: serverId]; + else + continue; + if ([name hasPrefix: @"/"]) name = [name substringFromIndex: 1]; @@ -874,7 +882,10 @@ static BOOL debugOn = NO; if ([folderMetadata objectForKey: @"parent"]) { - parentId = [NSString stringWithFormat: @"mail/%@", [[imapGUIDs objectForKey: [NSString stringWithFormat: @"folder%@", [[folderMetadata objectForKey: @"parent"] substringFromIndex: 1]]] substringFromIndex: 6]]; + // make sure that parent of main-folders is always 0 + if (type == 12) + parentId = [NSString stringWithFormat: @"mail/%@", [[imapGUIDs objectForKey: [NSString stringWithFormat: @"folder%@", [[folderMetadata objectForKey: @"parent"] substringFromIndex: 1]]] substringFromIndex: 6]]; + name = [[name pathComponents] lastObject]; } diff --git a/NEWS b/NEWS index ed1c2b373..0ca792c69 100644 --- a/NEWS +++ b/NEWS @@ -20,6 +20,7 @@ Bug fixes - fixed multi-domain support for sogo-tool backup/restore (#2600) - fixed data ordering in events list of Calendar module (#3261) - fixed data ordering in tasks list of Calendar module (#3267) + - Android EAS Lollipop fixes (#3268 and #3269) 2.3.0 (2015-06-01) ------------------- From b05f7a5bebffd414a51c45b1776ff3f53b7d5f7a Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Jul 2015 09:25:29 -0400 Subject: [PATCH 04/61] (fix) compilation warning --- ActiveSync/SOGoActiveSyncDispatcher.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index 6d8de37ad..f51151edf 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -2885,7 +2885,7 @@ static BOOL debugOn = NO; activeUser = [context activeUser]; if (![activeUser canAccessModule: @"ActiveSync"]) { - [theResponse setStatus: 403]; + [(WOResponse *)theResponse setStatus: 403]; [self logWithFormat: @"EAS - Forbidden access for user %@", [activeUser loginInDomain]]; return nil; } From 20b91cc7bff3f5cafe0b77a7b3612332285f356f Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Jul 2015 09:46:06 -0400 Subject: [PATCH 05/61] (fix) improved EAS email flagging handling (#3140) --- ActiveSync/SOGoActiveSyncDispatcher+Sync.m | 94 ++++++++++++++-------- NEWS | 1 + 2 files changed, 62 insertions(+), 33 deletions(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m index 60667f70d..950ee4769 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher+Sync.m +++ b/ActiveSync/SOGoActiveSyncDispatcher+Sync.m @@ -283,7 +283,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. serverId = [NSString stringWithFormat: @"%@.ics", [theCollection globallyUniqueObjectId]]; sogoObject = [[SOGoTaskObject alloc] initWithName: serverId inContainer: theCollection]; - o = [sogoObject component: YES secure: NO]; + o = [sogoObject component: YES secure: NO]; } break; case ActiveSyncMailFolder: @@ -311,10 +311,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. syncCache = [folderMetadata objectForKey: @"SyncCache"]; dateCache = [folderMetadata objectForKey: @"DateCache"]; - - [syncCache setObject: [folderMetadata objectForKey: @"SyncKey"] forKey: serverId]; + + [syncCache setObject: [NSString stringWithFormat:@"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId]; [dateCache setObject: [NSCalendarDate date] forKey: serverId]; - + [self _setFolderMetadata: folderMetadata forKey: [self _getNameInCache: theCollection withType: theFolderType]]; } } @@ -365,6 +365,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. NSString *serverId; NSArray *changes; id aChange, o, sogoObject; + NSMutableDictionary *folderMetadata, *syncCache; int i; @@ -372,6 +373,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if ([changes count]) { + folderMetadata = [self _folderMetadataForKey: [self _getNameInCache: theCollection withType: theFolderType]]; + syncCache = [folderMetadata objectForKey: @"SyncCache"]; + for (i = 0; i < [changes count]; i++) { aChange = [changes objectAtIndex: i]; @@ -398,6 +402,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. o = [sogoObject vCard]; [o takeActiveSyncValues: allChanges inContext: context]; [sogoObject saveComponent: o]; + + [syncCache setObject: [NSString stringWithFormat:@"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId]; + } break; case ActiveSyncEventFolder: @@ -406,15 +413,30 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. o = [sogoObject component: NO secure: NO]; [o takeActiveSyncValues: allChanges inContext: context]; [sogoObject saveComponent: o]; + + [syncCache setObject: [NSString stringWithFormat:@"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId]; + } break; case ActiveSyncMailFolder: default: { + NSDictionary *result; + NSString *modseq; + [sogoObject takeActiveSyncValues: allChanges inContext: context]; + + result = [sogoObject fetchParts: [NSArray arrayWithObject: @"MODSEQ"]]; + modseq = [[[result objectForKey: @"RawResponse"] objectForKey: @"fetch"] objectForKey: @"modseq"]; + + if (modseq) + [syncCache setObject: modseq forKey: serverId]; } } + [self _setFolderMetadata: folderMetadata forKey: [self _getNameInCache: theCollection withType: theFolderType]]; + + [theBuffer appendString: @""]; [theBuffer appendFormat: @"%@", serverId]; [theBuffer appendFormat: @"%d", 1]; @@ -910,6 +932,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. [syncCache removeObjectForKey: [aCacheObject uid]]; [dateCache removeObjectForKey: [aCacheObject uid]]; + + return_count++; } else { @@ -919,17 +943,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. inContext: context acquire: 0]; - [s appendString: @""]; - [s appendFormat: @"%@", [aCacheObject uid]]; - [s appendString: @""]; - [s appendString: [mailObject activeSyncRepresentationInContext: context]]; - [s appendString: @""]; - [s appendString: @""]; - + if (![[aCacheObject sequence] isEqual: [syncCache objectForKey: [aCacheObject uid]]]) + { + [s appendString: @""]; + [s appendFormat: @"%@", [aCacheObject uid]]; + [s appendString: @""]; + [s appendString: [mailObject activeSyncRepresentationInContext: context]]; + [s appendString: @""]; + [s appendString: @""]; + + return_count++; + } + [syncCache setObject: [aCacheObject sequence] forKey: [aCacheObject uid]]; } - - return_count++; } else { @@ -1204,22 +1231,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. [context setObject: bodyPreferenceType forKey: @"BodyPreferenceType"]; - // We generate the commands, if any, for the response. We might also have - // generated some in processSyncCommand:inResponse: as we could have - // received a Fetch command - if (getChanges && !first_sync) - { - [self processSyncGetChanges: theDocumentElement - inCollection: collection - withWindowSize: windowSize - withMaxSyncResponseSize: theMaxSyncResponseSize - withSyncKey: syncKey - withFolderType: folderType - withFilterType: [NSCalendarDate dateFromFilterType: [[(id)[theDocumentElement getElementsByTagName: @"FilterType"] lastObject] textValue]] - inBuffer: changeBuffer - lastServerKey: &lastServerKey]; - } - // // We process the commands from the request // @@ -1237,12 +1248,29 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. inBuffer: s processed: &processed]; - // Windows phons don't empty Responses tags - such as: . - // We onnly generate this tag when the command has generated a response. + // Windows phones don't like empty Responses tags - such as: . + // We only generate this tag when there is a response if (processed && [s length]) [commandsBuffer appendFormat: @"%@", s]; } - + + + // We generate the commands, if any, for the response. We might also have + // generated some in processSyncCommand:inResponse: as we could have + // received a Fetch command + if (getChanges && !first_sync) + { + [self processSyncGetChanges: theDocumentElement + inCollection: collection + withWindowSize: windowSize + withMaxSyncResponseSize: theMaxSyncResponseSize + withSyncKey: syncKey + withFolderType: folderType + withFilterType: [NSCalendarDate dateFromFilterType: [[(id)[theDocumentElement getElementsByTagName: @"FilterType"] lastObject] textValue]] + inBuffer: changeBuffer + lastServerKey: &lastServerKey]; + } + folderMetadata = [self _folderMetadataForKey: [self _getNameInCache: collection withType: folderType]]; // If we got any changes or if we have applied any commands @@ -1267,7 +1295,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. { // Make sure that client is updated with the right syncKey. - This keeps vtodo's and vevent's syncKey in sync. syncKeyInCache = [folderMetadata objectForKey: @"SyncKey"]; - if (syncKeyInCache && !([davCollectionTag isEqualToString:syncKeyInCache]) && ![davCollectionTag isEqualToString: @"-1"]) + if (syncKeyInCache && !([davCollectionTag isEqualToString:syncKeyInCache]) && !first_sync) { davCollectionTag = syncKeyInCache; *changeDetected = YES; diff --git a/NEWS b/NEWS index 0ca792c69..3b1377a95 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,7 @@ Bug fixes - fixed data ordering in events list of Calendar module (#3261) - fixed data ordering in tasks list of Calendar module (#3267) - Android EAS Lollipop fixes (#3268 and #3269) + - improved EAS email flagging handling (#3140) 2.3.0 (2015-06-01) ------------------- From d2640e1501708fcf38f8887e26b14378aae73690 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Jul 2015 09:59:36 -0400 Subject: [PATCH 06/61] (fix) fixed computation of GlobalObjectId (#3235) --- ActiveSync/SOGoMailObject+ActiveSync.m | 66 ++++++++++++++++++++------ NEWS | 1 + 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/ActiveSync/SOGoMailObject+ActiveSync.m b/ActiveSync/SOGoMailObject+ActiveSync.m index 164abb6db..3e6de011b 100644 --- a/ActiveSync/SOGoMailObject+ActiveSync.m +++ b/ActiveSync/SOGoMailObject+ActiveSync.m @@ -77,6 +77,41 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #import +unsigned char strToChar(char a, char b) { + char encoder[3] = {'\0','\0','\0'}; + encoder[0] = a; + encoder[1] = b; + return (char) strtol(encoder,NULL,16); +} + +@interface NSString (NSStringExtensions) +- (NSData *) decodeFromHexidecimal; +@end + +@implementation NSString (NSStringExtensions) + +- (NSData *) decodeFromHexidecimal; +{ + const char * bytes = [self cStringUsingEncoding: NSUTF8StringEncoding]; + NSUInteger length = strlen(bytes); + unsigned char * r = (unsigned char *) malloc(length / 2 + 1); + unsigned char * index = r; + + while ((*bytes) && (*(bytes +1))) { + *index = strToChar(*bytes, *(bytes +1)); + index++; + bytes+=2; + } + *index = '\0'; + + NSData * result = [NSData dataWithBytes: r length: length / 2]; + free(r); + + return result; +} + +@end + typedef struct { uint32_t dwLowDateTime; uint32_t dwHighDateTime; @@ -91,7 +126,7 @@ struct GlobalObjectId { FILETIME CreationTime; uint8_t X[8]; uint32_t Size; - uint8_t* Data; + uint8_t Data[0]; }; @implementation SOGoMailObject (ActiveSync) @@ -118,39 +153,40 @@ struct GlobalObjectId { // // The GlobalObjId is documented here: http://msdn.microsoft.com/en-us/library/ee160198(v=EXCHG.80).aspx // + - (NSData *) _computeGlobalObjectIdFromEvent: (iCalEvent *) event { NSData *binPrefix, *globalObjectId, *uidAsASCII; NSString *prefix, *uid; - - struct GlobalObjectId newGlobalId; + struct GlobalObjectId *newGlobalId; const char *bytes; - + + uid = [event uid]; + uidAsASCII = [uid decodeFromHexidecimal]; + newGlobalId = (struct GlobalObjectId*)calloc(sizeof(uint8_t), sizeof(struct GlobalObjectId) + 0x0c + [uidAsASCII length]); + prefix = @"040000008200e00074c5b7101a82e008"; // dataPrefix is "vCal-Uid %x01 %x00 %x00 %x00" uint8_t dataPrefix[] = { 0x76, 0x43, 0x61, 0x6c, 0x2d, 0x55, 0x69, 0x64, 0x01, 0x00, 0x00, 0x00 }; - uid = [event uid]; binPrefix = [prefix convertHexStringToBytes]; - [binPrefix getBytes: &newGlobalId.ByteArrayID]; - [self _setInstanceDate: &newGlobalId + [binPrefix getBytes: &newGlobalId->ByteArrayID]; + [self _setInstanceDate: newGlobalId fromDate: [event recurrenceId]]; - uidAsASCII = [uid dataUsingEncoding: NSASCIIStringEncoding]; bytes = [uidAsASCII bytes]; // 0x0c is the size of our dataPrefix - newGlobalId.Size = 0x0c + [uidAsASCII length]; - newGlobalId.Data = malloc(newGlobalId.Size * sizeof(uint8_t)); - memcpy(newGlobalId.Data, dataPrefix, 0x0c); - memcpy(newGlobalId.Data + 0x0c, bytes, newGlobalId.Size - 0x0c); + newGlobalId->Size = 0x0c + [uidAsASCII length]; + memcpy(newGlobalId->Data, dataPrefix, 0x0c); + memcpy(newGlobalId->Data + 0x0c, bytes, newGlobalId->Size - 0x0c); - globalObjectId = [[NSData alloc] initWithBytes: &newGlobalId length: 40 + newGlobalId.Size*sizeof(uint8_t)]; - free(newGlobalId.Data); - + globalObjectId = [[NSData alloc] initWithBytes: newGlobalId length: 40 + newGlobalId->Size*sizeof(uint8_t)]; + free(newGlobalId); return [globalObjectId autorelease]; } + // // For debugging purposes... // diff --git a/NEWS b/NEWS index 3b1377a95..167eed412 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,7 @@ Bug fixes - fixed data ordering in tasks list of Calendar module (#3267) - Android EAS Lollipop fixes (#3268 and #3269) - improved EAS email flagging handling (#3140) + - fixed computation of GlobalObjectId (#3235) 2.3.0 (2015-06-01) ------------------- From 61c542cb959611e90b25565cbc20006ad76215a4 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Jul 2015 10:12:47 -0400 Subject: [PATCH 07/61] (fix) make sure ActiveSync is always usable with SQL-based auth sources --- SoObjects/SOGo/SQLSource.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SoObjects/SOGo/SQLSource.m b/SoObjects/SOGo/SQLSource.m index 7d0de6c07..aa881b9d3 100644 --- a/SoObjects/SOGo/SQLSource.m +++ b/SoObjects/SOGo/SQLSource.m @@ -489,10 +489,12 @@ forKey: [field substringFromIndex: 2]]; } + // FIXME // We have to do this here since we do not manage modules // constraints right now over a SQL backend. [response setObject: [NSNumber numberWithBool: YES] forKey: @"CalendarAccess"]; [response setObject: [NSNumber numberWithBool: YES] forKey: @"MailAccess"]; + [response setObject: [NSNumber numberWithBool: YES] forKey: @"ActiveSyncAccess"]; // We set the domain, if any value = nil; From 4e7a3ce5fac99efd712168986016295e8e47629a Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Jul 2015 10:26:09 -0400 Subject: [PATCH 08/61] (fix) fixed EAS conversation ID issues on BB10 (#3152) --- ActiveSync/SOGoActiveSyncDispatcher.m | 22 ++++++++++++++++-- ActiveSync/SOGoMailObject+ActiveSync.m | 32 ++++++++++++++++++++++++-- NEWS | 1 + 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index f51151edf..9be2ebe62 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -2576,7 +2576,7 @@ static BOOL debugOn = NO; NGMimeFileData *fdata; NSException *error; NSArray *attachmentKeys; - NSMutableArray *attachments; + NSMutableArray *attachments, *references; id body, bodyFromSmartForward, htmlPart, textPart; NSString *fullName, *email, *charset, *s; @@ -2615,7 +2615,25 @@ static BOOL debugOn = NO; [map setObject: email forKey: @"from"]; if ([mailObject messageId]) - [map setObject: [mailObject messageId] forKey: @"in-reply-to"]; + { + [map setObject: [mailObject messageId] forKey: @"in-reply-to"]; + + references = [[[[[mailObject mailHeaders] objectForKey: @"references"] componentsSeparatedByString: @" "] mutableCopy] autorelease]; + if ([references count] > 0) + { + // If there are more than ten identifiers listed, we eliminate the second one. + if ([references count] >= 10) + [references removeObjectAtIndex: 1]; + + [references addObject: [mailObject messageId]]; + + [map setObject: [references componentsJoinedByString:@" "] forKey: @"references"]; + } + else + { + [map setObject: [mailObject messageId] forKey: @"references"]; + } + } messageToSend = [[[NGMimeMessage alloc] initWithHeader: map] autorelease]; body = [[[NGMimeMultipartBody alloc] initWithPart: messageToSend] autorelease]; diff --git a/ActiveSync/SOGoMailObject+ActiveSync.m b/ActiveSync/SOGoMailObject+ActiveSync.m index 3e6de011b..6b2e1b03a 100644 --- a/ActiveSync/SOGoMailObject+ActiveSync.m +++ b/ActiveSync/SOGoMailObject+ActiveSync.m @@ -550,6 +550,28 @@ struct GlobalObjectId { return d; } + +- (NSString *) _getNormalizedSubject +{ + NSString *subject; + NSUInteger colIdx; + NSString *stringValue; + + subject = [[self subject] decodedHeader]; + + colIdx = [subject rangeOfString: @":" options:NSBackwardsSearch].location; + if (colIdx != NSNotFound && colIdx + 1 < [subject length]) + stringValue = [[subject substringFromIndex: colIdx + 1] stringByTrimmingLeadSpaces]; + else + stringValue = subject; + + if (!stringValue) + stringValue = @""; + + return stringValue; +} + + // // // @@ -663,7 +685,7 @@ struct GlobalObjectId { if (value) { [s appendFormat: @"%@", [value activeSyncRepresentationInContext: context]]; - [s appendFormat: @"%@", [value activeSyncRepresentationInContext: context]]; + [s appendFormat: @"%@", [[self _getNormalizedSubject] activeSyncRepresentationInContext: context]]; } // DateReceived @@ -1049,7 +1071,13 @@ struct GlobalObjectId { if ([[[context request] headerForKey: @"MS-ASProtocolVersion"] isEqualToString: @"14.0"] || [[[context request] headerForKey: @"MS-ASProtocolVersion"] isEqualToString: @"14.1"]) { - if ([self inReplyTo]) + NSString *reference; + + reference = [[[[self mailHeaders] objectForKey: @"references"] componentsSeparatedByString: @" "] objectAtIndex: 0]; + + if ([reference length] > 0) + [s appendFormat: @"%@", [[reference dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]]; + else if ([self inReplyTo]) [s appendFormat: @"%@", [[[self inReplyTo] dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]]; else if ([self messageId]) [s appendFormat: @"%@", [[[self messageId] dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]]; diff --git a/NEWS b/NEWS index 167eed412..4fecf3d50 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,7 @@ Bug fixes - Android EAS Lollipop fixes (#3268 and #3269) - improved EAS email flagging handling (#3140) - fixed computation of GlobalObjectId (#3235) + - fixed EAS conversation ID issues on BB10 (#3152) 2.3.0 (2015-06-01) ------------------- From f03e7a66043342880ce8f8b019893a6a636694b2 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Jul 2015 11:54:50 -0400 Subject: [PATCH 09/61] (doc) ModuleConstraints for EAS --- Documentation/SOGoInstallationGuide.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/SOGoInstallationGuide.asciidoc b/Documentation/SOGoInstallationGuide.asciidoc index e337f6eb0..de828a6d7 100644 --- a/Documentation/SOGoInstallationGuide.asciidoc +++ b/Documentation/SOGoInstallationGuide.asciidoc @@ -1035,8 +1035,8 @@ repository |ModulesConstraints (optional) |Limits the access of any module through a constraint based on an LDAP -attribute; must be a dictionary with keys `Mail`, and/or `Calendar`, for -example: +attribute; must be a dictionary with keys `Mail`, and/or `Calendar`, +and/or `ActiveSync` for example: ---- ModulesConstraints = { From b7c2d8ae9509033a0cd13838324964193f9b11bf Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 22 Jul 2015 14:49:09 -0400 Subject: [PATCH 10/61] (fix) we now respect the cr/lf in event's description (#3228) --- NEWS | 1 + UI/WebServerResources/UIxCalViewPrint.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 4fecf3d50..7a367c7fd 100644 --- a/NEWS +++ b/NEWS @@ -24,6 +24,7 @@ Bug fixes - improved EAS email flagging handling (#3140) - fixed computation of GlobalObjectId (#3235) - fixed EAS conversation ID issues on BB10 (#3152) + - fixed CR/LF printing in event's description (#3228) 2.3.0 (2015-06-01) ------------------- diff --git a/UI/WebServerResources/UIxCalViewPrint.js b/UI/WebServerResources/UIxCalViewPrint.js index f0b35bf86..e26396c58 100644 --- a/UI/WebServerResources/UIxCalViewPrint.js +++ b/UI/WebServerResources/UIxCalViewPrint.js @@ -581,7 +581,7 @@ function _parseEvent(event) { if (event[21] && event[21].length) { descriptionCell.innerHTML = description; - descriptionCellValue.innerHTML = event[21]; + descriptionCellValue.innerHTML = event[21].replace(/(?:\r\n|\r|\n)/g, '
'); } if (printColors.checked) { From 9430f40101036134eb9386f87472abe2727ae323 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 22 Jul 2015 16:41:37 -0400 Subject: [PATCH 11/61] Add Slovenian translation --- .tx/config | 11 + NEWS | 1 + SoObjects/Appointments/GNUmakefile | 2 +- .../Slovenian.lproj/Localizable.strings | 67 +++ SoObjects/Contacts/GNUmakefile | 2 +- .../Slovenian.lproj/Localizable.strings | 2 + SoObjects/Mailer/GNUmakefile | 5 +- SoObjects/Mailer/SOGoMailForward.h | 3 + SoObjects/Mailer/SOGoMailForward.m | 3 + SoObjects/Mailer/SOGoMailReply.h | 3 + SoObjects/Mailer/SOGoMailReply.m | 3 + .../SOGoMailSlovenianForward.html | 16 + .../SOGoMailSlovenianForward.wod | 88 +++ .../SOGoMailSlovenianReply.html | 16 + .../SOGoMailSlovenianReply.wod | 106 ++++ .../Slovenian.lproj/Localizable.strings | 2 + SoObjects/SOGo/SOGoDefaults.plist | 2 +- Tests/Integration/preferences.py | 2 +- UI/AdministrationUI/GNUmakefile | 2 +- .../Slovenian.lproj/Localizable.strings | 15 + UI/Common/GNUmakefile | 2 +- UI/Common/Slovenian.lproj/Localizable.strings | 118 ++++ UI/Contacts/GNUmakefile | 2 +- .../Slovenian.lproj/Localizable.strings | 215 +++++++ UI/MailPartViewers/GNUmakefile | 2 +- .../Slovenian.lproj/Localizable.strings | 48 ++ UI/MailerUI/GNUmakefile | 2 +- .../Slovenian.lproj/Localizable.strings | 308 ++++++++++ UI/MainUI/Arabic.lproj/Localizable.strings | 1 + UI/MainUI/Basque.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + UI/MainUI/Catalan.lproj/Localizable.strings | 1 + UI/MainUI/Czech.lproj/Localizable.strings | 1 + UI/MainUI/Danish.lproj/Localizable.strings | 1 + UI/MainUI/Dutch.lproj/Localizable.strings | 1 + UI/MainUI/English.lproj/Localizable.strings | 1 + UI/MainUI/Finnish.lproj/Localizable.strings | 1 + UI/MainUI/French.lproj/Localizable.strings | 1 + UI/MainUI/GNUmakefile | 2 +- UI/MainUI/German.lproj/Localizable.strings | 1 + UI/MainUI/Hungarian.lproj/Localizable.strings | 1 + UI/MainUI/Icelandic.lproj/Localizable.strings | 1 + UI/MainUI/Italian.lproj/Localizable.strings | 1 + .../NorwegianBokmal.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + UI/MainUI/Polish.lproj/Localizable.strings | 1 + UI/MainUI/Russian.lproj/Localizable.strings | 1 + UI/MainUI/Slovak.lproj/Localizable.strings | 1 + UI/MainUI/Slovenian.lproj/Locale | 35 ++ UI/MainUI/Slovenian.lproj/Localizable.strings | 79 +++ .../Localizable.strings | 1 + .../SpanishSpain.lproj/Localizable.strings | 1 + UI/MainUI/Swedish.lproj/Localizable.strings | 1 + UI/MainUI/Ukrainian.lproj/Localizable.strings | 1 + UI/MainUI/Welsh.lproj/Localizable.strings | 1 + .../Arabic.lproj/Localizable.strings | 1 + .../Basque.lproj/Localizable.strings | 1 + .../Catalan.lproj/Localizable.strings | 1 + .../Czech.lproj/Localizable.strings | 1 + .../Dutch.lproj/Localizable.strings | 1 + .../English.lproj/Localizable.strings | 1 + .../Finnish.lproj/Localizable.strings | 1 + .../French.lproj/Localizable.strings | 1 + UI/PreferencesUI/GNUmakefile | 2 +- .../German.lproj/Localizable.strings | 1 + .../Icelandic.lproj/Localizable.strings | 1 + .../Italian.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../Russian.lproj/Localizable.strings | 1 + .../Slovak.lproj/Localizable.strings | 1 + .../Slovenian.lproj/Localizable.strings | 330 ++++++++++ .../Localizable.strings | 1 + .../Swedish.lproj/Localizable.strings | 1 + .../Ukrainian.lproj/Localizable.strings | 1 + .../Welsh.lproj/Localizable.strings | 1 + UI/Scheduler/GNUmakefile | 2 +- .../Slovenian.lproj/Localizable.strings | 565 ++++++++++++++++++ .../SOGoACLSlovenianAdditionAdvisory.wox | 28 + .../SOGoACLSlovenianRemovalAdvisory.wox | 28 + .../SOGoFolderSlovenianAdditionAdvisory.wox | 23 + .../SOGoFolderSlovenianRemovalAdvisory.wox | 23 + 81 files changed, 2194 insertions(+), 13 deletions(-) create mode 100644 SoObjects/Appointments/Slovenian.lproj/Localizable.strings create mode 100644 SoObjects/Contacts/Slovenian.lproj/Localizable.strings create mode 100644 SoObjects/Mailer/SOGoMailSlovenianForward.wo/SOGoMailSlovenianForward.html create mode 100644 SoObjects/Mailer/SOGoMailSlovenianForward.wo/SOGoMailSlovenianForward.wod create mode 100644 SoObjects/Mailer/SOGoMailSlovenianReply.wo/SOGoMailSlovenianReply.html create mode 100644 SoObjects/Mailer/SOGoMailSlovenianReply.wo/SOGoMailSlovenianReply.wod create mode 100644 SoObjects/Mailer/Slovenian.lproj/Localizable.strings create mode 100644 UI/AdministrationUI/Slovenian.lproj/Localizable.strings create mode 100644 UI/Common/Slovenian.lproj/Localizable.strings create mode 100644 UI/Contacts/Slovenian.lproj/Localizable.strings create mode 100644 UI/MailPartViewers/Slovenian.lproj/Localizable.strings create mode 100644 UI/MailerUI/Slovenian.lproj/Localizable.strings create mode 100755 UI/MainUI/Slovenian.lproj/Locale create mode 100644 UI/MainUI/Slovenian.lproj/Localizable.strings create mode 100644 UI/PreferencesUI/Slovenian.lproj/Localizable.strings create mode 100644 UI/Scheduler/Slovenian.lproj/Localizable.strings create mode 100644 UI/Templates/SOGoACLSlovenianAdditionAdvisory.wox create mode 100644 UI/Templates/SOGoACLSlovenianRemovalAdvisory.wox create mode 100644 UI/Templates/SOGoFolderSlovenianAdditionAdvisory.wox create mode 100644 UI/Templates/SOGoFolderSlovenianRemovalAdvisory.wox diff --git a/.tx/config b/.tx/config index b0d1ec3f6..ee12af198 100644 --- a/.tx/config +++ b/.tx/config @@ -25,6 +25,7 @@ trans.pl = UI/MailerUI/Polish.lproj/Localizable.strings trans.pt_BR = UI/MailerUI/BrazilianPortuguese.lproj/Localizable.strings trans.ru = UI/MailerUI/Russian.lproj/Localizable.strings trans.sk = UI/MailerUI/Slovak.lproj/Localizable.strings +trans.sl_SI = UI/MailerUI/Slovenian.lproj/Localizable.strings trans.sv = UI/MailerUI/Swedish.lproj/Localizable.strings trans.uk = UI/MailerUI/Ukrainian.lproj/Localizable.strings @@ -52,6 +53,7 @@ trans.pl = UI/PreferencesUI/Polish.lproj/Localizable.strings trans.pt_BR = UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings trans.ru = UI/PreferencesUI/Russian.lproj/Localizable.strings trans.sk = UI/PreferencesUI/Slovak.lproj/Localizable.strings +trans.sl_SI = UI/PreferencesUI/Slovenian.lproj/Localizable.strings trans.sv = UI/PreferencesUI/Swedish.lproj/Localizable.strings trans.uk = UI/PreferencesUI/Ukrainian.lproj/Localizable.strings @@ -79,6 +81,7 @@ trans.pl = UI/Scheduler/Polish.lproj/Localizable.strings trans.pt_BR = UI/Scheduler/BrazilianPortuguese.lproj/Localizable.strings trans.ru = UI/Scheduler/Russian.lproj/Localizable.strings trans.sk = UI/Scheduler/Slovak.lproj/Localizable.strings +trans.sl_SI = UI/Scheduler/Slovenian.lproj/Localizable.strings trans.sv = UI/Scheduler/Swedish.lproj/Localizable.strings trans.uk = UI/Scheduler/Ukrainian.lproj/Localizable.strings @@ -106,6 +109,7 @@ trans.pl = UI/Contacts/Polish.lproj/Localizable.strings trans.pt_BR = UI/Contacts/BrazilianPortuguese.lproj/Localizable.strings trans.ru = UI/Contacts/Russian.lproj/Localizable.strings trans.sk = UI/Contacts/Slovak.lproj/Localizable.strings +trans.sl_SI = UI/Contacts/Slovenian.lproj/Localizable.strings trans.sv = UI/Contacts/Swedish.lproj/Localizable.strings trans.uk = UI/Contacts/Ukrainian.lproj/Localizable.strings @@ -133,6 +137,7 @@ trans.pl = UI/MainUI/Polish.lproj/Localizable.strings trans.pt_BR = UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings trans.ru = UI/MainUI/Russian.lproj/Localizable.strings trans.sk = UI/MainUI/Slovak.lproj/Localizable.strings +trans.sl_SI = UI/MainUI/Slovenian.lproj/Localizable.strings trans.sv = UI/MainUI/Swedish.lproj/Localizable.strings trans.uk = UI/MainUI/Ukrainian.lproj/Localizable.strings @@ -160,6 +165,7 @@ trans.pl = UI/Common/Polish.lproj/Localizable.strings trans.pt_BR = UI/Common/BrazilianPortuguese.lproj/Localizable.strings trans.ru = UI/Common/Russian.lproj/Localizable.strings trans.sk = UI/Common/Slovak.lproj/Localizable.strings +trans.sl_SI = UI/Common/Slovenian.lproj/Localizable.strings trans.sv = UI/Common/Swedish.lproj/Localizable.strings trans.uk = UI/Common/Ukrainian.lproj/Localizable.strings @@ -187,6 +193,7 @@ trans.pl = UI/AdministrationUI/Polish.lproj/Localizable.strings trans.pt_BR = UI/AdministrationUI/BrazilianPortuguese.lproj/Localizable.strings trans.ru = UI/AdministrationUI/Russian.lproj/Localizable.strings trans.sk = UI/AdministrationUI/Slovak.lproj/Localizable.strings +trans.sl_SI = UI/AdministrationUI/Slovenian.lproj/Localizable.strings trans.sv = UI/AdministrationUI/Swedish.lproj/Localizable.strings trans.uk = UI/AdministrationUI/Ukrainian.lproj/Localizable.strings @@ -214,6 +221,7 @@ trans.pl = SoObjects/Appointments/Polish.lproj/Localizable.strings trans.pt_BR = SoObjects/Appointments/BrazilianPortuguese.lproj/Localizable.strings trans.ru = SoObjects/Appointments/Russian.lproj/Localizable.strings trans.sk = SoObjects/Appointments/Slovak.lproj/Localizable.strings +trans.sl_SI = SoObjects/Appointments/Slovenian.lproj/Localizable.strings trans.sv = SoObjects/Appointments/Swedish.lproj/Localizable.strings trans.uk = SoObjects/Appointments/Ukrainian.lproj/Localizable.strings @@ -241,6 +249,7 @@ trans.pl = SoObjects/Contacts/Polish.lproj/Localizable.strings trans.pt_BR = SoObjects/Contacts/BrazilianPortuguese.lproj/Localizable.strings trans.ru = SoObjects/Contacts/Russian.lproj/Localizable.strings trans.sk = SoObjects/Contacts/Slovak.lproj/Localizable.strings +trans.sl_SI = SoObjects/Contacts/Slovenian.lproj/Localizable.strings trans.sv = SoObjects/Contacts/Swedish.lproj/Localizable.strings trans.uk = SoObjects/Contacts/Ukrainian.lproj/Localizable.strings @@ -268,6 +277,7 @@ trans.pl = SoObjects/Mailer/Polish.lproj/Localizable.strings trans.pt_BR = SoObjects/Mailer/BrazilianPortuguese.lproj/Localizable.strings trans.ru = SoObjects/Mailer/Russian.lproj/Localizable.strings trans.sk = SoObjects/Mailer/Slovak.lproj/Localizable.strings +trans.sl_SI = SoObjects/Mailer/Slovenian.lproj/Localizable.strings trans.sv = SoObjects/Mailer/Swedish.lproj/Localizable.strings trans.uk = SoObjects/Mailer/Ukrainian.lproj/Localizable.strings @@ -295,5 +305,6 @@ trans.pl = UI/MailPartViewers/Polish.lproj/Localizable.strings trans.pt_BR = UI/MailPartViewers/BrazilianPortuguese.lproj/Localizable.strings trans.ru = UI/MailPartViewers/Russian.lproj/Localizable.strings trans.sk = UI/MailPartViewers/Slovak.lproj/Localizable.strings +trans.sl_SI = UI/MailPartViewers/Slovenian.lproj/Localizable.strings trans.sv = UI/MailPartViewers/Swedish.lproj/Localizable.strings trans.uk = UI/MailPartViewers/Ukrainian.lproj/Localizable.strings diff --git a/NEWS b/NEWS index 7a367c7fd..dde42eeaf 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Enhancements - added create-folder subcommand to sogo-tool to create contact and calendar folders - group mail addresses can be used as recipient in Outlook - added 'ActiveSync' module constraints + - added Slovenian translation - thanks to Jens Riecken Bug fixes - EAS's GetItemEstimate/ItemOperations now support fetching mails and empty folders diff --git a/SoObjects/Appointments/GNUmakefile b/SoObjects/Appointments/GNUmakefile index 1dd3c1a7d..2cd58b21a 100644 --- a/SoObjects/Appointments/GNUmakefile +++ b/SoObjects/Appointments/GNUmakefile @@ -54,7 +54,7 @@ Appointments_RESOURCE_FILES += \ MSExchangeFreeBusySOAPResponseMap.plist \ MSExchangeFreeBusySOAPRequest.wo -Appointments_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +Appointments_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh Appointments_LOCALIZED_RESOURCE_FILES = Localizable.strings diff --git a/SoObjects/Appointments/Slovenian.lproj/Localizable.strings b/SoObjects/Appointments/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..49f02e172 --- /dev/null +++ b/SoObjects/Appointments/Slovenian.lproj/Localizable.strings @@ -0,0 +1,67 @@ +"Inviting the following persons is prohibited:" = "Povabilo za naslednje osebe je prepovedano:"; +"Personal Calendar" = "Osebni koledar"; +vevent_class0 = "(Javni dogodek)"; +vevent_class1 = "(Osebni dogodek)"; +vevent_class2 = "(Zaupni dogodek)"; + +vtodo_class0 = "(Javno opravilo)"; +vtodo_class1 = "(Osebno opravilo)"; +vtodo_class2 = "(Zaupno opravilo)"; + +/* Receipts */ +"The event \"%{Summary}\" was created" = "Dogodek \"%{Summary}\" je bil ustvarjen"; +"The event \"%{Summary}\" was deleted" = "Dogodek \"%{Summary}\" je bil izbrisan"; +"The event \"%{Summary}\" was updated" = "Dogodek \"%{Summary}\" je bil posodobljen"; +"The following attendees(s) were notified:" = "Naslednji udeleženci so bili obveščeni:"; +"The following attendees(s) were added:" = "Naslednji udeleženci so bili dodani:"; +"The following attendees(s) were removed:" = "Naslednji udeleženci so bili odstranjeni:"; + +/* IMIP messages */ +"calendar_label" = "Koledar:"; +"startDate_label" = "Začetek:"; +"endDate_label" = "Konec:"; +"due_label" = "Datum zapadlosti:"; +"location_label" = "Mesto:"; +"summary_label" = "Povzetek:"; +"comment_label" = "Komentar:"; + +/* Invitation */ +"Event Invitation: \"%{Summary}\"" = "Povabila na dogodek: \"%{Summary}\""; +"(sent by %{SentBy}) " = "(posladno od %{SentBy})"; +"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" = "%{Organizer} %{SentByText} te je povabil na %{Summary}.\n\n\nZačetek: %{StartDate}\nKonec: %{EndDate}\nOpis: %{Description}"; +"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" = "%{Organizer} %{SentByText} te je povabil na %{Summary}.\n\n\nZačetek: %{StartDate} at %{StartTime}\nKonec: %{EndDate} at %{EndTime}\nOpis: %{Description}"; + +/* Deletion */ +"Event Cancelled: \"%{Summary}\"" = "Dogodek odpovedan: \"%{Summary}\""; +"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" += "%{Organizer} %{SentByText} je odpovedal ta dogodek: %{Summary}.\n\n\nZačetek: %{StartDate}\nKonec: %{EndDate}\nOpis: %{Description}"; +"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" += "%{Organizer} %{SentByText} je odpovedal ta dogodek: %{Summary}.\n\n\nZačetek: %{StartDate} at %{StartTime}\nKonec: %{EndDate} at %{EndTime}\nOpis: %{Description}"; + +/* Update */ +"The appointment \"%{Summary}\" for the %{OldStartDate} has changed" += "Sestanek \"%{Summary}\" za %{OldStartDate} se je spremenil"; +"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed" += "Sestanek \"%{Summary}\" za %{OldStartDate} at %{OldStartTime} se je spremenil"; +"The following parameters have changed in the \"%{Summary}\" meeting:" += "Naslednji parametri so se spremenil v \"%{Summary}\" srečanju:"; +"Please accept or decline those changes." += "Prosim sprejmi ali zavrni te spremembe."; + +/* Reply */ +"Accepted invitation: \"%{Summary}\"" = "Sprejeto povabilo: \"%{Summary}\""; +"Declined invitation: \"%{Summary}\"" = "Zavrnjeno povabilo: \"%{Summary}\""; +"Delegated invitation: \"%{Summary}\"" = "Dodeljeno povabilo: \"%{Summary}\""; +"Not yet decided on invitation: \"%{Summary}\"" = "Še neodločeno glede povabila: \"%{Summary}\""; +"%{Attendee} %{SentByText}has accepted your event invitation." += "%{Attendee} %{SentByText} je sprejel tvoje povabilo."; +"%{Attendee} %{SentByText}has declined your event invitation." += "%{Attendee} %{SentByText} je zavrnil tvoje povabilo."; +"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}." += "%{Attendee} %{SentByText} je posredoval povabilo k %{Delegate}."; +"%{Attendee} %{SentByText}has not yet decided upon your event invitation." += "%{Attendee} %{SentByText} se še ni odločil glede tvojega povabila."; + +/* Resources */ +"Cannot access resource: \"%{Cn} %{SystemEmail}\"" = "Ne morem dostopati do vira: \"%{Cn} %{SystemEmail}\""; +"Maximum number of simultaneous bookings (%{NumberOfSimultaneousBookings}) reached for resource \"%{Cn} %{SystemEmail}\". The conflicting event is \"%{EventTitle}\", and starts on %{StartDate}." = "Doseženo je največje število sočasnih rezervacij (%{NumberOfSimultaneousBookings}) za vir \"%{Cn} %{SystemEmail}\". Konfliktni dogodek je \"%{EventTitle}\", začel se je %{StartDate}."; diff --git a/SoObjects/Contacts/GNUmakefile b/SoObjects/Contacts/GNUmakefile index a27339462..fd5e76a03 100644 --- a/SoObjects/Contacts/GNUmakefile +++ b/SoObjects/Contacts/GNUmakefile @@ -27,7 +27,7 @@ Contacts_OBJC_FILES = \ Contacts_RESOURCE_FILES += \ product.plist \ -Contacts_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +Contacts_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh Contacts_LOCALIZED_RESOURCE_FILES = Localizable.strings diff --git a/SoObjects/Contacts/Slovenian.lproj/Localizable.strings b/SoObjects/Contacts/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..e90974bf0 --- /dev/null +++ b/SoObjects/Contacts/Slovenian.lproj/Localizable.strings @@ -0,0 +1,2 @@ +"Personal Address Book" = "Osebni adresar"; +"Collected Address Book" = "Zbrani adresar"; diff --git a/SoObjects/Mailer/GNUmakefile b/SoObjects/Mailer/GNUmakefile index 1a931ed99..59ed443e1 100644 --- a/SoObjects/Mailer/GNUmakefile +++ b/SoObjects/Mailer/GNUmakefile @@ -80,6 +80,8 @@ Mailer_RESOURCE_FILES += \ SOGoMailRussianReply.wo \ SOGoMailSlovakForward.wo \ SOGoMailSlovakReply.wo \ + SOGoMailSlovenianForward.wo \ + SOGoMailSlovenianReply.wo \ SOGoMailSpanishSpainForward.wo \ SOGoMailSpanishSpainReply.wo \ SOGoMailSpanishArgentinaForward.wo \ @@ -92,7 +94,8 @@ Mailer_RESOURCE_FILES += \ SOGoMailWelshReply.wo -Mailer_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +Mailer_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +Mailer_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovenian Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh Mailer_LOCALIZED_RESOURCE_FILES = Localizable.strings diff --git a/SoObjects/Mailer/SOGoMailForward.h b/SoObjects/Mailer/SOGoMailForward.h index 54dc5f63b..8110fc57e 100644 --- a/SoObjects/Mailer/SOGoMailForward.h +++ b/SoObjects/Mailer/SOGoMailForward.h @@ -103,6 +103,9 @@ @interface SOGoMailSlovakForward : SOGoMailForward @end +@interface SOGoMailSlovenianForward : SOGoMailForward +@end + @interface SOGoMailUkrainianForward : SOGoMailForward @end diff --git a/SoObjects/Mailer/SOGoMailForward.m b/SoObjects/Mailer/SOGoMailForward.m index 2de3a64c1..8c01b526d 100644 --- a/SoObjects/Mailer/SOGoMailForward.m +++ b/SoObjects/Mailer/SOGoMailForward.m @@ -314,6 +314,9 @@ @implementation SOGoMailSlovakForward @end +@implementation SOGoMailSlovenianForward +@end + @implementation SOGoMailUkrainianForward @end diff --git a/SoObjects/Mailer/SOGoMailReply.h b/SoObjects/Mailer/SOGoMailReply.h index f83d1e872..e66e32214 100644 --- a/SoObjects/Mailer/SOGoMailReply.h +++ b/SoObjects/Mailer/SOGoMailReply.h @@ -102,6 +102,9 @@ @interface SOGoMailSlovakReply : SOGoMailReply @end +@interface SOGoMailSlovenianReply : SOGoMailReply +@end + @interface SOGoMailUkrainianReply : SOGoMailReply @end diff --git a/SoObjects/Mailer/SOGoMailReply.m b/SoObjects/Mailer/SOGoMailReply.m index a47e65d54..b9fa8dbba 100644 --- a/SoObjects/Mailer/SOGoMailReply.m +++ b/SoObjects/Mailer/SOGoMailReply.m @@ -152,6 +152,9 @@ @implementation SOGoMailSlovakReply @end +@implementation SOGoMailSlovenianReply +@end + @implementation SOGoMailUkrainianReply @end diff --git a/SoObjects/Mailer/SOGoMailSlovenianForward.wo/SOGoMailSlovenianForward.html b/SoObjects/Mailer/SOGoMailSlovenianForward.wo/SOGoMailSlovenianForward.html new file mode 100644 index 000000000..ca2b6d73c --- /dev/null +++ b/SoObjects/Mailer/SOGoMailSlovenianForward.wo/SOGoMailSlovenianForward.html @@ -0,0 +1,16 @@ +<#newLine/> +<#newLine/> +<#signaturePlacementOnTop><#newLine/> +<#signature/><#newLine/> +-------- Original Message --------<#newLine/> +Zadeva: <#subject/><#newLine/> +Datum: <#date/><#newLine/> +Od: <#from/><#newLine/> +<#hasReplyTo>Odgovori: <#replyTo/><#hasOrganization>Organizacija: <#organization/>Za: <#to/><#newLine/> +<#hasCc>KP: <#cc/><#hasNewsGroups>Novicarske skupine: <#newsgroups/><#hasReferences>Reference: <#references/><#newLine/> +<#newLine/> +<#messageBody/><#newLine/> +<#signaturePlacementOnBottom><#newLine/> +<#newLine/> +<#signature/> +<#newLine/> diff --git a/SoObjects/Mailer/SOGoMailSlovenianForward.wo/SOGoMailSlovenianForward.wod b/SoObjects/Mailer/SOGoMailSlovenianForward.wo/SOGoMailSlovenianForward.wod new file mode 100644 index 000000000..f2436acc9 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailSlovenianForward.wo/SOGoMailSlovenianForward.wod @@ -0,0 +1,88 @@ +subject: WOString { + value = subject; + escapeHTML = NO; +} + +date: WOString { + value = date; + escapeHTML = NO; +} + +from: WOString { + value = from; + escapeHTML = NO; +} + +newLine: WOString { + value = newLine; + 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; +} + +signaturePlacementOnTop: WOConditional { + condition = signaturePlacementOnTop; +} + +signaturePlacementOnBottom: WOConditional { + condition = signaturePlacementOnTop; + negate = YES; +} diff --git a/SoObjects/Mailer/SOGoMailSlovenianReply.wo/SOGoMailSlovenianReply.html b/SoObjects/Mailer/SOGoMailSlovenianReply.wo/SOGoMailSlovenianReply.html new file mode 100644 index 000000000..310c9b168 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailSlovenianReply.wo/SOGoMailSlovenianReply.html @@ -0,0 +1,16 @@ +<#replyPlacementOnTop><#newLine/> +<#newLine/> +<#signaturePlacementOnTop><#newLine/> +<#signature/><#newLine/> +<#outlookMode>-------- Izvorno sporocilo --------<#newLine/> +Zadeva: <#subject/><#newLine/> +Datum: <#date/><#newLine/> +Od: <#from/><#newLine/> +<#hasReplyTo>Odgovori: <#replyTo/><#hasOrganization>Organizacija: <#organization/>Za: <#to/><#newLine/> +<#hasCc>KP: <#cc/><#hasNewsGroups>Novicarske skupine: <#newsgroups/><#hasReferences>Reference: <#references/><#newLine/> +<#standardMode>Dne <#date/>, je <#from/> napisal-a:<#newLine/> +<#newLine/> +<#messageBody/><#newLine/> +<#replyPlacementOnBottom><#newLine/> +<#newLine/> +<#signaturePlacementOnBottom><#signature/><#newLine/> diff --git a/SoObjects/Mailer/SOGoMailSlovenianReply.wo/SOGoMailSlovenianReply.wod b/SoObjects/Mailer/SOGoMailSlovenianReply.wo/SOGoMailSlovenianReply.wod new file mode 100644 index 000000000..3fbed6d61 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailSlovenianReply.wo/SOGoMailSlovenianReply.wod @@ -0,0 +1,106 @@ +outlookMode: WOConditional { + condition = outlookMode; +} + +standardMode: WOConditional { + condition = outlookMode; + negate = YES; +} + +subject: WOString { + value = subject; + escapeHTML = NO; +} + +date: WOString { + value = date; + escapeHTML = NO; +} + +from: WOString { + value = from; + escapeHTML = NO; +} + +newLine: WOString { + value = newLine; + 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; +} + +replyPlacementOnTop: WOConditional { + condition = replyPlacementOnTop; +} + +replyPlacementOnBottom: WOConditional { + condition = replyPlacementOnTop; + negate = YES; +} + +signaturePlacementOnTop: WOConditional { + condition = signaturePlacementOnTop; +} + +signaturePlacementOnBottom: WOConditional { + condition = signaturePlacementOnTop; + negate = YES; +} diff --git a/SoObjects/Mailer/Slovenian.lproj/Localizable.strings b/SoObjects/Mailer/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..6dd4f0cfb --- /dev/null +++ b/SoObjects/Mailer/Slovenian.lproj/Localizable.strings @@ -0,0 +1,2 @@ +"OtherUsersFolderName" = "Ostali uporabniki"; +"SharedFoldersName" = "Mape v skupni rabi"; diff --git a/SoObjects/SOGo/SOGoDefaults.plist b/SoObjects/SOGo/SOGoDefaults.plist index d0557c666..e762aff2b 100644 --- a/SoObjects/SOGo/SOGoDefaults.plist +++ b/SoObjects/SOGo/SOGoDefaults.plist @@ -43,7 +43,7 @@ "SpanishSpain", "SpanishArgentina", "Finnish", "French", "German", "Icelandic", "Italian", "Hungarian", "BrazilianPortuguese", "NorwegianBokmal", "NorwegianNynorsk", "Polish", "Russian", "Slovak", - "Ukrainian", "Swedish" ); + "Slovenian", "Ukrainian", "Swedish" ); SOGoTimeZone = "UTC"; SOGoDayStartTime = "8"; diff --git a/Tests/Integration/preferences.py b/Tests/Integration/preferences.py index bc861a2fd..aa4959d4c 100644 --- a/Tests/Integration/preferences.py +++ b/Tests/Integration/preferences.py @@ -14,7 +14,7 @@ SOGoSupportedLanguages = [ "Arabic", "Basque", "Catalan", "Czech", "Dutch", "Dan "SpanishSpain", "SpanishArgentina", "French", "German", "Icelandic", "Italian", "Hungarian", "BrazilianPortuguese", "NorwegianBokmal", "NorwegianNynorsk", "Polish", "Russian", "Slovak", - "Ukrainian", "Swedish" ]; + "Slovenian", "Ukrainian", "Swedish" ]; daysBetweenResponseList=[1,2,3,5,7,14,21,30] class HTTPPreferencesPOST (webdavlib.HTTPPOST): diff --git a/UI/AdministrationUI/GNUmakefile b/UI/AdministrationUI/GNUmakefile index 949624e98..1bcd6530a 100644 --- a/UI/AdministrationUI/GNUmakefile +++ b/UI/AdministrationUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = AdministrationUI AdministrationUI_PRINCIPAL_CLASS = AdministrationUIProduct -AdministrationUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +AdministrationUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh AdministrationUI_OBJC_FILES = \ AdministrationUIProduct.m \ diff --git a/UI/AdministrationUI/Slovenian.lproj/Localizable.strings b/UI/AdministrationUI/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..ca15c0653 --- /dev/null +++ b/UI/AdministrationUI/Slovenian.lproj/Localizable.strings @@ -0,0 +1,15 @@ +/* this file is in UTF-8 format! */ + +"Help" = "Pomoč"; +"Close" = "Zapri"; + +"Modules" = "Moduli"; + +/* Modules short names */ +"ACLs" = "ACLi"; + +/* Modules titles */ +"ACLs_title" = "Urejanje uporabniških map ACL"; + +/* Modules descriptions */ +"ACLs_description" = "

The Access Control Lists administration module allows to change the ACLs of each user's Calendars and Address books.

To modify the ACLs of a user's folder, type the name of the user in the search field at the top of the window and double-click on the desired folder.

"; diff --git a/UI/Common/GNUmakefile b/UI/Common/GNUmakefile index 45357b5f2..8464b3ea1 100644 --- a/UI/Common/GNUmakefile +++ b/UI/Common/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = CommonUI CommonUI_PRINCIPAL_CLASS = CommonUIProduct -CommonUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +CommonUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh CommonUI_OBJC_FILES += \ CommonUIProduct.m \ diff --git a/UI/Common/Slovenian.lproj/Localizable.strings b/UI/Common/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..a63967362 --- /dev/null +++ b/UI/Common/Slovenian.lproj/Localizable.strings @@ -0,0 +1,118 @@ +/* this file is in UTF-8 format! */ + +/* toolbars */ +"Save" = "Shrani"; +"Close" = "Zapri"; +"Edit User Rights" = "Uredi pravice uporabnika"; + +"Home" = "Domov"; +"Calendar" = "Koledar"; +"Address Book" = "Adresar"; +"Mail" = "Pošta"; +"Preferences" = "Nastavitve"; +"Administration" = "Administracija"; +"Disconnect" = "Prekini povezavo"; +"Right Administration" = "Pravica administriranja"; +"Log Console (dev.)" = "Log konzole (dev.)"; + +"User" = "Uporabnik"; +"Vacation message is enabled" = "Obvestilo o odsotnosti je omogočeno"; + +"Help" = "Pomoč"; + +"noJavascriptError" = "SOGo zahteva zagnan Javascript. Prosim zagotovi, da je ta možnost omogočena in aktivirana v tvojih nastavitvah brskalnika."; +"noJavascriptRetry" = "Ponovi"; + +"Owner:" = "Lastnik:"; +"Publish the Free/Busy information" = "Objavi informacijo Prosto/Zasedeno "; + +"Add..." = "Dodaj..."; +"Remove" = "Odstrani"; + +"Subscribe User" = "Naroči uporabnika"; + +"Any Authenticated User" = "Katerikoli preverjeni uporabnik"; +"Public Access" = "Javni dostop"; +"Any user not listed above" = "Katerikoli navedeni uporabnik zgoraj"; +"Anybody accessing this resource from the public area" = "Katerikoli, ki dostopa ta vir iz javnega območja"; + +"Sorry, the user rights can not be configured for that object." = "Oprosti, pravice za uporabnika ni mogoče konfigurirati za ta objekt."; + +"Any user with an account on this system will be able to access your mailbox \"%{0}\". Are you certain you trust them all?" + = "Katerikoli uporabnik z računom na tem sistemu bo lahko dostopal do tvojega poštnega predala \"%{0}\". Si prepričan, da zaupaš vsem?"; +"Any user with an account on this system will be able to access your calendar \"%{0}\". Are you certain you trust them all?" + = "Katerikoli uporabnik z računom na tem sistemu bo lahko dostopal do tvojega koledarja \"%{0}\". Si prepričan, da zaupaš vsem?"; +"Potentially anyone on the Internet will be able to access your calendar \"%{0}\", even if they do not have an account on this system. Is this information suitable for the public Internet?" + = "Kdorkoli na internetu bo imel možnost dostopa do tvojega koledarja \"%{0}\" tudi, če nima računa na tem sistemu. Je ta informacija primerna za javni internet?"; +"Any user with an account on this system will be able to access your address book \"%{0}\". Are you certain you trust them all?" + = "Katerikoli uporabnik z računom na tem sistemu bo lahko dostopal do tvojega adresarja \"%{0}\". Si preričan, da zaupaš vsem?"; +"Potentially anyone on the Internet will be able to access your address book \"%{0}\", even if they do not have an account on this system. Is this information suitable for the public Internet?" + = "Kdorkoli na internetu bo imel možnost dostopa do tvojega adresarja \"%{0}\" tudi, če nima računa na tem sistemu. Je ta informacija primerna za javni internet?"; +"Give Access" = "Daj dostop"; +"Keep Private" = "Obdrži osebno"; + +/* generic.js */ +"Unable to subscribe to that folder!" + = "Nemogoče se je naročiti na to mapo!"; +"You cannot subscribe to a folder that you own!" + = "Ne moreš se naročiti na lastno mapo!"; +"Unable to unsubscribe from that folder!" + = "Nemogoče se odjaviti s te mape!"; +"You cannot unsubscribe from a folder that you own!" + = "Ne moreš se odjaviti z lastne mape!"; +"Unable to rename that folder!" = "Nemogoče je preimenovati to mapo!"; +"You have already subscribed to that folder!" + = "Na to mapo si že naročen!"; +"The user rights cannot be edited for this object!" + = "Uporabniške pravice je nemogoče urediti za ta objekt!"; +"A folder by that name already exists." = "Mapa s tem imenom že obstaja."; +"You cannot create a list in a shared address book." + = "Ne moreš ustvariti seznama v skupnem adresarju."; +"Warning" = "Opozorilo"; +"Can't contact server" = "Prišlo je do napake pri povezovanju s strežniku. Prosim poskusi ponovno pozneje."; + +"You are not allowed to access this module or this system. Please contact your system administrator." += "Nimaš pravice dostopa do tega modula ali tega sistema. Prosim kontaktiraj tvojega sistemskega administratorja."; +"You don't have the required privileges to perform the operation." += "Nimaš zahtevanih pravic za izvedbo te operacije."; + +"noEmailForDelegation" = "Moraš določiti naslov, kateremu želiš dodeliti tvoje povabilo."; +"delegate is organizer" = "Dodeljevalec je organizator. Prosim določi drugega dodeljevalca."; +"delegate is a participant" = "Dodeljevalec je že udeleženec."; +"delegate is a group" = "Določen naslov ustreza skupini. Dodeliš lahko le edinstveni osebi."; + +"Snooze for " = "Opomni za"; +"5 minutes" = "5 minut"; +"10 minutes" = "10 minut"; +"15 minutes" = "15 minut"; +"30 minutes" = "30 minut"; +"45 minutes" = "45 minut"; +"1 hour" = "1 ura"; +"1 day" = "1 dan"; + +/* common buttons */ +"OK" = "V redu"; +"Cancel" = "Prekliči"; +"Yes" = "Da"; +"No" = "Ne"; + +/* alarms */ +"Reminder:" = "Opomnik:"; +"Start:" = "Začetek:"; +"Due Date:" = "Datum zapadlosti:"; +"Location:" = "Mesto:"; + +/* mail labels */ +"Important" = "Pomembno"; +"Work" = "Delo"; +"Personal" = "Osebno"; +"To Do" = "Opravilo"; +"Later" = "Pozneje"; + +"a2_Sunday" = "Ne"; +"a2_Monday" = "Po"; +"a2_Tuesday" = "To"; +"a2_Wednesday" = "Sr"; +"a2_Thursday" = "Če"; +"a2_Friday" = "Pe"; +"a2_Saturday" = "So"; diff --git a/UI/Contacts/GNUmakefile b/UI/Contacts/GNUmakefile index 59ba95ab5..e30dc7e00 100644 --- a/UI/Contacts/GNUmakefile +++ b/UI/Contacts/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = ContactsUI ContactsUI_PRINCIPAL_CLASS = ContactsUIProduct -ContactsUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +ContactsUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh ContactsUI_OBJC_FILES = \ UIxContactsUserFolders.m \ diff --git a/UI/Contacts/Slovenian.lproj/Localizable.strings b/UI/Contacts/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..0ff095037 --- /dev/null +++ b/UI/Contacts/Slovenian.lproj/Localizable.strings @@ -0,0 +1,215 @@ +/* this file is in UTF-8 format! */ + +"Contact" = "Stik"; +"Address" = "Naslov"; +"Photos" = "Slike"; +"Other" = "Ostalo"; + +"Address Books" = "Adresar"; +"Addressbook" = "Adresar"; +"Addresses" = "Naslovi"; +"Update" = "Posodobi"; +"Cancel" = "Prekini"; +"Common" = "Skupno"; +"Contact editor" = "Urejevalnik stikov"; +"Contact viewer" = "Pregledovalnik stikov"; +"Email" = "E-pošta"; +"Screen Name" = "Ime zaslona"; +"Extended" = "Podaljšano"; +"Fax" = "Faks"; +"Firstname" = "Ime"; +"Home" = "Doma"; +"HomePhone" = "DomačiTelefon"; +"Lastname" = "Priimek"; +"Location" = "Mesto"; +"MobilePhone" = "MobilniTelefon"; +"Name" = "Ime"; +"OfficePhone" = "TelefonVPisarni"; +"Organization" = "Organizacija"; +"Work Phone" = "Službeni telefon"; +"Phone" = "Telefon"; +"Phones" = "Telefoni"; +"Postal" = "Pošta"; +"Save" = "Shrani"; +"Internet" = "Internet"; +"Unit" = "Enota"; +"delete" = "briši"; +"edit" = "uredi"; +"invalidemailwarn" = "Ta e-pošta ni pravilna"; +"new" = "novo"; +"Preferred Phone" = "Privzeti telefon"; + +"Move To" = "Premakni v"; +"Copy To" = "Kopiraj v"; +"Add to:" = "Dodaj k:"; + +/* Tooltips */ + +"Create a new address book card" = "Ustvari novi kartico v adresarju"; +"Create a new list" = "Ustvari nov seznam"; +"Edit the selected card" = "Uredi izbrano kartico"; +"Send a mail message" = "Pošlji poštno sporočilo"; +"Delete selected card or address book" = "Briši izbrano kartico ali adresar"; +"Reload all contacts" = "Ponovno naloži vse stike"; + +"htmlMailFormat_UNKNOWN" = "Neznano"; +"htmlMailFormat_FALSE" = "Golo besedilo"; +"htmlMailFormat_TRUE" = "HTML"; + +"Name or Email" = "Ime ali e-pošta"; +"Category" = "Kategorija"; +"Personal Addressbook" = "Osebni adresar"; +"Search in Addressbook" = "Išči v adresarju"; + +"New Card" = "Nova kartica"; +"New List" = "Nov seznam"; +"Edit" = "Uredi"; +"Properties" = "Lastnosti"; +"Sharing..." = "Skupna raba..."; +"Write" = "Piši"; +"Delete" = "Briši"; +"Instant Message" = "Takojšnje sporočilo"; +"Add..." = "Dodaj..."; +"Remove" = "Odstrani"; + +"Please wait..." = "Prosim počakaj..."; +"No possible subscription" = "Naročnina ni mogoča"; + +"Preferred" = "Željeno"; +"Display:" = "Prikaz:"; +"Display Name:" = "Prikazno ime:"; +"Email:" = "E-pošta:"; +"Additional Email:" = "Dodatna e-pošta:"; + +"Phone Number:" = "Telefonska številka:"; +"Prefers to receive messages formatted as:" = "Željen format za prejeta sporočila:"; +"Screen Name:" = "Ime na zaslonu:"; +"Categories:" = "Kategorije:"; + +"First:" = "Prvo:"; +"Last:" = "Zadnje:"; +"Nickname:" = "Vzdevek:"; + +"Telephone" = "Telefon"; +"Work:" = "Služba:"; +"Home:" = "Doma:"; +"Fax:" = "Faks:"; +"Mobile:" = "Mobilni telefon:"; +"Pager:" = "Pozivnik:"; + +/* categories */ +"contacts_category_labels" = "Kolega, Tekmec, Stranka, Prijatelj, Družina, Poslovni partner, Dobavitelj, Novinar, VIP"; +"Categories" = "Kategorije"; +"New category" = "Nova kategorija"; + +/* adresses */ +"Title:" = "Naslov:"; +"Service:" = "Storitev:"; +"Company:" = "Podjetje:"; +"Department:" = "Oddelek:"; +"Organization:" = "Organizacija:"; +"Address:" = "Naslov:"; +"City:" = "Mesto:"; +"State_Province:" = "Država/Provinca:"; +"ZIP_Postal Code:" = "ZIP/Poštna številka:"; +"Country:" = "Država:"; +"Web Page:" = "Spletna stran:"; + +"Work" = "Delo"; +"Other Infos" = "Ostali podatki"; + +"Note:" = "Opomba:"; +"Timezone:" = "Časovni pas:"; +"Birthday:" = "Rojstni dan:"; +"Birthday (yyyy-mm-dd):" = "Rojstni dan (llll-mm-dd):"; +"Freebusy URL:" = "Freebusy URL:"; + +"Add as..." = "Dodaj kot..."; +"Recipient" = "Prejemnik"; +"Carbon Copy" = "Kopija"; +"Blind Carbon Copy" = "Slepa kopija"; + +"New Addressbook..." = "Novi adresar..."; +"Subscribe to an Addressbook..." = "Naroči se na adresar..."; +"Remove the selected Addressbook" = "Odstrani izbrani adresar"; + +"Name of the Address Book" = "Ime adresarja"; +"Are you sure you want to delete the selected address book?" += "Si prepirčan, da želiš brisati izbrani adresar?"; +"You cannot remove nor unsubscribe from a public addressbook." += "Ne moreš se odstraniti ali odjaviti iz javnega adresarja."; +"You cannot remove nor unsubscribe from your personal addressbook." += "Ne moreš se odstraniti ali odjaviti iz osebnega adresarja."; + +"Are you sure you want to delete the selected contacts?" += "Si prepričan, da želiš brisati izbrane stike?"; + +"You cannot delete the card of \"%{0}\"." += "Ne moreš dodeliti kartice od \"%{0}\"."; + + + +"You cannot subscribe to a folder that you own!" += "Ne moreš se naročiti na lastno mapo."; +"Unable to subscribe to that folder!" += "Nemogoče se je naročiti na to mapo."; + +/* acls */ +"Access rights to" = "Pravice za dostop za"; +"For user" = "Za uporabnika"; + +"Any Authenticated User" = "Katerikoli preverjeni uporabnik"; +"Public Access" = "Javni dostop"; + +"This person can add cards to this addressbook." += "Ta oseba lahko dodaja kartice temu adresarju."; +"This person can edit the cards of this addressbook." += "Ta oseba lahko ureja kartice tega adresarja."; +"This person can list the content of this addressbook." += "Ta oseba lahko izpiše vsebino tega adresarja."; +"This person can read the cards of this addressbook." += "Ta oseba lahko bere kartice tega adresarja."; +"This person can erase cards from this addressbook." += "Ta oseba lahko briše kartice tega adresarja."; + +"The selected contact has no email address." += "Izbran stik nima e-poštnega naslova."; + +"Please select a contact." = "Prosim izberi stik."; + +/* Error messages for move and copy */ + +"SoAccessDeniedException" = "Ne moreš pisati v ta adresar."; +"Forbidden" = "Ne moreš pisati v ta adresar."; +"Invalid Contact" = "Izbrani stik ne obstaja več."; +"Unknown Destination Folder" = "Izbrani ciljni adresar ne obstaja več."; + +/* Lists */ +"List details" = "Podrobnosti seznama"; +"List name:" = "Ime iz seznama:"; +"List nickname:" = "Vzdevek iz seznama:"; +"List description:" = "Opis iz seznama:"; +"Members" = "Člani"; +"Contacts" = "Stiki"; +"Add" = "Dodaj"; +"Lists can't be moved or copied." = "Seznami ne morejo biti premaknjeni ali kopirani."; +"Export" = "Izvozi"; +"Export Address Book..." = "Izvozi adresar"; +"View Raw Source" = "Pregled surovega vira"; +"Import Cards" = "Uvozi kartice"; +"Select a vCard or LDIF file." = "Izberi vCard ali LDIF datoteko."; +"Upload" = "Naloži"; +"Uploading" = "Nalaganje"; +"Done" = "Končano"; +"An error occured while importing contacts." = "Prišlo je do napake pri uvozu stikov."; +"No card was imported." = "Nobena kartica ni uvožena."; +"A total of %{0} cards were imported in the addressbook." = "Skupaj %{0} kartic je bilo uvoženo v adresar."; + +"Reload" = "Ponovno naloži"; + +/* Properties window */ +"Address Book Name:" = "Ime adresarja:"; +"Links to this Address Book" = "Povezave do tega adresarja"; +"Authenticated User Access" = "Preverjeni uporabniški dostop"; +"CardDAV URL: " = "CardDAV URL:"; + diff --git a/UI/MailPartViewers/GNUmakefile b/UI/MailPartViewers/GNUmakefile index 89ed971ef..2fb051999 100644 --- a/UI/MailPartViewers/GNUmakefile +++ b/UI/MailPartViewers/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MailPartViewers MailPartViewers_PRINCIPAL_CLASS = MailPartViewersProduct -MailPartViewers_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +MailPartViewers_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh MailPartViewers_OBJC_FILES += \ MailPartViewersProduct.m \ diff --git a/UI/MailPartViewers/Slovenian.lproj/Localizable.strings b/UI/MailPartViewers/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..bf0826413 --- /dev/null +++ b/UI/MailPartViewers/Slovenian.lproj/Localizable.strings @@ -0,0 +1,48 @@ +ACCEPTED = "sprejeto"; +COMPLETED = "dokončano"; +DECLINED = "zavrnjeno"; +DELEGATED = "dodeljeno"; +"IN-PROCESS" = "v teku"; +"NEEDS-ACTION" = "potrebuje dejanje"; +TENTATIVE = "pogojno"; +organized_by_you = "organizirano po tebi"; +you_are_an_attendee = "ti si udeleženec"; +add_info_text = "iMIP 'ADD' zahteva ni podprta v SOGo."; +publish_info_text = "Pošiljatelj te obvešča o priloženem dogodku."; +cancel_info_text = "Tvoje vabilo ali celoten dogodek je bil preklican."; +request_info_no_attendee = "predlaga srečanje za udeležence. To pošto si prejel kot obvestilo, nisi pa razporejen kot sodelujoči."; +Appointment = "Sestanek"; +"Status Update" = "Posodobitev statusa"; +was = "je bil"; + +Organizer = "Organizator"; +Time = "Čas"; +Attendees = "Udeleženci"; +request_info = "te vabi, da sodeluješ na srečanju."; +"Add to calendar" = "Dodaj v koledar"; +"Delete from calendar" = "Briši iz koledarja"; +"Update status" = "Posodobi status"; +Accept = "Sprejmi"; +Decline = "Zavrni"; +Tentative = "Pogojno"; +"Delegate ..." = "Dodeli ..."; +"Delegated to" = "Dodeljeno k"; +"Update status in calendar" = "Posodobi status v koledarju"; +"delegated from" = "Dodeljeno od"; + +reply_info_no_attendee = "Prejel si odgovor na razporejen dogodek, toda pošiljatelj tega odgovora ni udeleženec."; +reply_info = "To je odgovor na tvoje povabilo na dogodek."; + +"to" = "za"; + +"Untitled" = "Brez naslova"; + +"Size" = "Velikost"; + +"Digital signature is not valid" = "Digitalno potrdilo ni veljavno"; +"Message is signed" = "Sporočilo je podpisano"; +"Subject" = "Zadeva"; +"From" = "Od"; +"Date" = "Datum"; +"To" = "Za"; +"Issuer" = "Izdajatelj"; diff --git a/UI/MailerUI/GNUmakefile b/UI/MailerUI/GNUmakefile index 329a4c873..180de0ad7 100644 --- a/UI/MailerUI/GNUmakefile +++ b/UI/MailerUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MailerUI MailerUI_PRINCIPAL_CLASS = MailerUIProduct -MailerUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +MailerUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh MailerUI_OBJC_FILES += \ MailerUIProduct.m \ diff --git a/UI/MailerUI/Slovenian.lproj/Localizable.strings b/UI/MailerUI/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..0414e7de9 --- /dev/null +++ b/UI/MailerUI/Slovenian.lproj/Localizable.strings @@ -0,0 +1,308 @@ +/* this file is in UTF-8 format! */ + +/* Icon's label */ +"Create" = "Ustvari"; +"Empty Trash" = "Izprazni koš"; +"Delete" = "Briši"; +"Expunge" = "Izbriši"; +"Forward" = "Posreduj"; +"Get Mail" = "Pridobi pošto"; +"Junk" = "Nezaželeno"; +"Reply" = "Odgovori"; +"Reply All" = "Odgovori vsem"; +"Print" = "Tiskaj"; +"Stop" = "Ustavi"; +"Write" = "Piši"; +"Search" = "Išči"; + +"Send" = "Pošlji"; +"Contacts" = "Stiki"; +"Attach" = "Priloži"; +"Save" = "Shrani"; +"Options" = "Možnosti"; +"Close" = "Zapri"; +"Size" = "Velikost"; + +/* Tooltips */ + +"Send this message now" = "Pošlji to sporočilo zdaj"; +"Select a recipient from an Address Book" = "Izberi prejemnika iz adresarja"; +"Include an attachment" = "Vključi prilogo"; +"Save this message" = "Shrani to sporočilo"; +"Get new messages" = "Pridobi nova sporočila"; +"Create a new message" = "Ustvari novo sporočilo"; +"Go to address book" = "Pojdi na adresar"; +"Reply to the message" = "Odgovori na sporočilo"; +"Reply to sender and all recipients" = "Odgovori pošiljatelju in vsem prejemnikom"; +"Forward selected message" = "Posreduj izbrano sporočilo"; +"Delete selected message or folder" = "Zbriši izbrano sporočilo ali mapo"; +"Mark the selected messages as junk" = "Označi izbrana sporočila kot nezaželena"; +"Print this message" = "Tiskaj to sporočilo"; +"Stop the current transfer" = "Ustavi trenutni prenos"; +"Attachment" = "Priloga"; +"Unread" = "Neprebrano"; +"Flagged" = "Označeno z zastavico"; +"Search multiple mailboxes" = "Išči vse poštne predale"; + +/* Main Frame */ + +"Home" = "Domov"; +"Calendar" = "Koledar"; +"Addressbook" = "Adresar"; +"Mail" = "Pošta"; +"Right Administration" = "Pravica administriranja"; + +"Help" = "Pomoč"; + +/* Mail account main windows */ + +"Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "Pozdravljeni v SOGo poštni storitvi. Uporabi drevo map na levi za brskanje tvojih poštnih računov!"; + +"Read messages" = "Beri sporočila"; +"Write a new message" = "Piši novo sporočilo"; + +"Share: " = "Skupna raba:"; +"Account: " = "Račun:"; +"Shared Account: " = "Deljen račun:"; + +/* acls */ +"Access rights to" = "Pravice za dostop"; +"For user" = "Za uporabnika"; + +"Any Authenticated User" = "Katerikoli preverjeni uporabnik"; + +"List and see this folder" = "Izlistaj in preglej to mapo"; +"Read mails from this folder" = "Preberi pošto iz te mape"; +"Mark mails read and unread" = "Označi pošto za prebrano in neprebrano"; +"Modify the flags of the mails in this folder" = "Spremeni zastavico za pošto v tej mapi"; +"Insert, copy and move mails into this folder" = "Vstavi, kopiraj in premakni pošto v to mapo"; +"Post mails" = "Oddaj pošto"; +"Add subfolders to this folder" = "Dodaj podmapo tej mapi"; +"Remove this folder" = "Odstrani to mapo"; +"Erase mails from this folder" = "Izbriši pošto iz te mape"; +"Expunge this folder" = "Izbriši to mapo"; +"Export This Folder" = "Izvozi to mapo"; +"Modify the acl of this folder" = "Spremeni ACL te mape"; + +"Saved Messages.zip" = "Shranjena sporočila.zip"; + +"Update" = "Posodobi"; +"Cancel" = "Prekini"; + +/* Mail edition */ + +"From" = "Od"; +"Subject" = "Zadeva"; +"To" = "Za"; +"Cc" = "Kp"; +"Bcc" = "Skp"; +"Reply-To" = "Odgovori"; +"Add address" = "Dodaj naslov"; +"Body" = "Telo"; + +"Open" = "Odpri"; +"Select All" = "Označi vse"; +"Attach Web Page..." = "Priloži spletno stran"; +"file" = "datoteka"; +"files" = "datoteke"; +"Save all" = "Shrani vse"; + +"to" = "Za"; +"cc" = "Kp"; +"bcc" = "Skp"; + +"Edit Draft..." = "Uredi osnutek..."; +"Load Images" = "Naloži slike"; + +"Return Receipt" = "Povratnica"; +"The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?" = "Pošiljatelj tega sporočila je prosil za obvestilo o branju tega sporočila. Obvestim pošiljatelja?"; +"Return Receipt (displayed) - %@"= "Povratnica (prikazana) - %@"; +"This is a Return Receipt for the mail that you sent to %@.\n\nNote: This Return Receipt only acknowledges that the message was displayed on the recipient's computer. There is no guarantee that the recipient has read or understood the message contents." = "To je povratnica o prejemu sporočila poslanega %@\n\nOpozorilo: Ta povratnica samo obvešča, da je sporočilo bilo prikazano na prejemnikovem računalniku. Ne obstaja nobeno jamstvo, da je prejemnik sporočilo prebral ali razumel vsebino sporočila."; + +"Priority" = "Prioriteta"; +"highest" = "Najvišja"; +"high" = "Visoka"; +"normal" = "Normalna"; +"low" = "Nizka"; +"lowest" = "Najnižja"; + +"This mail is being sent from an unsecure network!" = "To sporočilo je bilo poslano iz ne varnega omrežja!"; + +"Address Book:" = "Adresar:"; +"Search For:" = "Išči za:"; + +/* Popup "show" */ + +"all" = "vse"; +"read" = "prebrano"; +"unread" = "neprebrano"; +"deleted" = "brisano"; +"flagged" = "označeno z zastavico"; + +/* MailListView */ + +"Sender" = "Pošiljatelj"; +"Subject or Sender" = "Zadeva ali pošiljatelj"; +"To or Cc" = "Za ali kp"; +"Entire Message" = "Celotno sporočilo"; + +"Date" = "Datum"; +"View" = "Pregled"; +"All" = "Vse"; +"No message" = "Ni sporočila"; +"messages" = "sporočila"; + +"first" = "Prvo"; +"previous" = "Prejšnje"; +"next" = "Naslednje"; +"last" = "Zadnje"; + +"msgnumber_to" = "za"; +"msgnumber_of" = "od"; + +"Mark Unread" = "Označi neprebrano"; +"Mark Read" = "Označi prebrano"; + +"Untitled" = "Brez naslova"; + +/* Tree */ + +"SentFolderName" = "Poslano"; +"TrashFolderName" = "Koš"; +"InboxFolderName" = "Prejeto"; +"DraftsFolderName" = "Osnutki"; +"SieveFolderName" = "Filterji"; +"Folders" = "Mape"; /* title line */ + +/* MailMoveToPopUp */ + +"MoveTo" = "Premakni …"; + +/* Address Popup menu */ +"Add to Address Book..." = "Dodaj v adresar..."; +"Compose Mail To" = "Sestavi pošta za"; +"Create Filter From Message..." = "Ustvari filter iz sporočila..."; + +/* Image Popup menu */ +"Save Image" = "Shrani sliko"; +"Save Attachment" = "Shrani prilogo"; + +/* Mailbox popup menus */ +"Open in New Mail Window" = "Odpri v novem poštnem oknu"; +"Copy Folder Location" = "Kopiraj mesto mape"; +"Subscribe..." = "Naroči..."; +"Mark Folder Read" = "Označi mapo kot prebrano"; +"New Folder..." = "Nova mapa..."; +"Compact This Folder" = "Skrči to mapo"; +"Search Messages..." = "Išči sporočila..."; +"Sharing..." = "Skupna raba..."; +"New Subfolder..." = "Nova podmapa..."; +"Rename Folder..." = "Preimenuj mapo..."; +"Delete Folder" = "Briši mapo"; +"Use This Folder For" = "Uporabi to mapo za"; +"Get Messages for Account" = "Pridobi sporočila za račun"; +"Properties..." = "Lastnosti..."; +"Delegation..." = "Dodeljevanje..."; + +/* Use This Folder menu */ +"Sent Messages" = "Poslana sporočila"; +"Drafts" = "Osnutki"; +"Deleted Messages" = "Brisana sporočila"; + +/* Message list popup menu */ +"Open Message In New Window" = "Odpri sporočilo v novem oknu"; +"Reply to Sender Only" = "Odgovori le pošiljatelju"; +"Reply to All" = "Odgovori vsem"; +"Edit As New..." = "Uredi kot novo..."; +"Move To" = "Premakni v"; +"Copy To" = "Kopiraj v"; +"Label" = "Oznaka"; +"Mark" = "Označi"; +"Save As..." = "Shrani kot..."; +"Print Preview" = "Tiskaj predogled"; +"View Message Source" = "Poglej izvorno sporočilo"; +"Print..." = "Tiskaj..."; +"Delete Message" = "Briši sporočilo"; +"Delete Selected Messages" = "Briši izbrana sporočila"; + +"This Folder" = "Ta mapa"; + +/* Label popup menu */ +"None" = "Nobena"; + +/* Mark popup menu */ +"As Read" = "Kot prebrano"; +"Thread As Read" = "Nit kot prebrano"; +"As Read By Date..." = "Prebrano po datumu..."; +"All Read" = "Vse prebrano"; +"Flag" = "Zastavica"; +"As Junk" = "Kot nezaželeno"; +"As Not Junk" = "Kot zaželeno"; +"Run Junk Mail Controls" = "Poženi nadzor nezaželene pošte"; + +"Search messages in:" = "Išči sporočila v:"; +"Search" = "Išči"; +"Search subfolders" = "Išči podmape"; +"Match any of the following" = "sklada se s katerimkoli od naslednjih"; +"Match all of the following" = "sklada se z naslednjimi"; +"contains" = "vsebuje"; +"does not contain" = "ne vsebuje"; +"No matches found" = "Ni zadetkov"; +"results found" = "najdeni zadetki"; +"result found" = "najden zadetek"; +"Please specify at least one filter" = "Prosim določi vsaj en filter"; + +/* Folder operations */ +"Name :" = "Ime :"; +"Enter the new name of your folder :" + = "Vpiši novo ime tvoje mape :"; +"Do you really want to move this folder into the trash ?" + = "Zares želiš premakniti to mapo v koš?"; +"Operation failed" = "Dejanje ni uspelo"; + +"Quota" = "Kvota:"; +"quotasFormat" = "%{0}% zasedeno od %{1} MB"; + +"Please select a message." = "Prosim izberi sporočilo."; +"Please select a message to print." = "Prosim izberi sporočilo za tiskanje."; +"Please select only one message to print." = "Prosim izberi samo eno sporočilo za tiskanje."; +"The message you have selected doesn't exist anymore." = "Izbrano sporočilo ne obstaja več."; + +"The folder with name \"%{0}\" could not be created." += "Mape z imenom \"%{0}\" ni mogoče ustvariti."; +"This folder could not be renamed to \"%{0}\"." += "Te mape ni mogoče preimenovati v \"%{0}\"."; +"The folder could not be deleted." += "Mape ni mogoče izbrisati."; +"The trash could not be emptied." += "Koša ni mogoče izprazniti."; +"The folder functionality could not be changed." += "Funkcionalnost mape ni mogoče spremeniti."; + +"You need to choose a non-virtual folder!" = "Izbrati je potrebno nenavidezno mapo."; + +"Moving a message into its own folder is impossible!" += "Premakniti sporočilo v lastno mapo ni mogoče!"; +"Copying a message into its own folder is impossible!" += "Kopiranje sporočila v lastno mapo ni mogoče!"; + +/* Message operations */ +"The messages could not be moved to the trash folder. Would you like to delete them immediately?" += "Sporočila ni mogoče premakniti v koš. Ga želiš izbrisati takoj?"; + +/* Message editing */ +"error_missingsubject" = "Sporočilo nima zadeve. Si prepričan, da ga želiš poslati?"; +"error_missingrecipients" = "Prosim določi vsaj enega prejemnika."; +"Send Anyway" = "Pošlji vseeno"; +"Error while saving the draft:" = "Napaka pri shranjevanju osnutka:"; +"Error while uploading the file \"%{0}\":" = "Napaka pri nalaganju datoteke \"%{0}\":"; +"There is an active file upload. Closing the window will interrupt it." = "Nalaganje datoteke je aktivno. Zapiranje okna ga bo prekinilo."; + +/* Message sending */ +"cannot send message: (smtp) all recipients discarded" = "Ne morem poslati sporočila: vsi prejemniki so napačni."; +"cannot send message (smtp) - recipients discarded:" = "Ne morem poslati sporočila. Naslednji naslovi so napačni:"; +"cannot send message: (smtp) error when connecting" = "Ne morem poslati sporočila: napaka pri povezavi s SMTP strežnikom."; + +/* Contacts list in mail editor */ +"Email" = "E-pošta"; +"Name" = "Ime"; diff --git a/UI/MainUI/Arabic.lproj/Localizable.strings b/UI/MainUI/Arabic.lproj/Localizable.strings index 7ec32a3a4..8081ee866 100644 --- a/UI/MainUI/Arabic.lproj/Localizable.strings +++ b/UI/MainUI/Arabic.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Basque.lproj/Localizable.strings b/UI/MainUI/Basque.lproj/Localizable.strings index 5bfc86638..b9fe88e2b 100644 --- a/UI/MainUI/Basque.lproj/Localizable.strings +++ b/UI/MainUI/Basque.lproj/Localizable.strings @@ -37,6 +37,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings b/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings index 84724f9a7..eda390347 100644 --- a/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings +++ b/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Espanhol (Espanha)"; "SpanishArgentina" = "Espanhol (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Catalan.lproj/Localizable.strings b/UI/MainUI/Catalan.lproj/Localizable.strings index ee073336c..4c23f7a8d 100644 --- a/UI/MainUI/Catalan.lproj/Localizable.strings +++ b/UI/MainUI/Catalan.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Czech.lproj/Localizable.strings b/UI/MainUI/Czech.lproj/Localizable.strings index 5d64d5b05..d70a1e841 100644 --- a/UI/MainUI/Czech.lproj/Localizable.strings +++ b/UI/MainUI/Czech.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Danish.lproj/Localizable.strings b/UI/MainUI/Danish.lproj/Localizable.strings index c439c40df..b4899ed15 100644 --- a/UI/MainUI/Danish.lproj/Localizable.strings +++ b/UI/MainUI/Danish.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Spansk (Spanien)"; "SpanishArgentina" = "Spansk (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Dutch.lproj/Localizable.strings b/UI/MainUI/Dutch.lproj/Localizable.strings index ba9875d58..45eef4f72 100644 --- a/UI/MainUI/Dutch.lproj/Localizable.strings +++ b/UI/MainUI/Dutch.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/English.lproj/Localizable.strings b/UI/MainUI/English.lproj/Localizable.strings index 64ee320ee..e7ba8cfc9 100644 --- a/UI/MainUI/English.lproj/Localizable.strings +++ b/UI/MainUI/English.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Finnish.lproj/Localizable.strings b/UI/MainUI/Finnish.lproj/Localizable.strings index 22347aebc..3a915756e 100644 --- a/UI/MainUI/Finnish.lproj/Localizable.strings +++ b/UI/MainUI/Finnish.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/French.lproj/Localizable.strings b/UI/MainUI/French.lproj/Localizable.strings index f1ceecdf8..207281d82 100644 --- a/UI/MainUI/French.lproj/Localizable.strings +++ b/UI/MainUI/French.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/GNUmakefile b/UI/MainUI/GNUmakefile index 81eb5a635..e861f29a8 100644 --- a/UI/MainUI/GNUmakefile +++ b/UI/MainUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MainUI MainUI_PRINCIPAL_CLASS = MainUIProduct -MainUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +MainUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh MainUI_OBJC_FILES += \ MainUIProduct.m \ diff --git a/UI/MainUI/German.lproj/Localizable.strings b/UI/MainUI/German.lproj/Localizable.strings index bbea2d2e8..df0b10089 100644 --- a/UI/MainUI/German.lproj/Localizable.strings +++ b/UI/MainUI/German.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentinien)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Hungarian.lproj/Localizable.strings b/UI/MainUI/Hungarian.lproj/Localizable.strings index 14d6765b0..a9f580e0f 100644 --- a/UI/MainUI/Hungarian.lproj/Localizable.strings +++ b/UI/MainUI/Hungarian.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Icelandic.lproj/Localizable.strings b/UI/MainUI/Icelandic.lproj/Localizable.strings index a5d44cbf4..e31755031 100644 --- a/UI/MainUI/Icelandic.lproj/Localizable.strings +++ b/UI/MainUI/Icelandic.lproj/Localizable.strings @@ -37,6 +37,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Italian.lproj/Localizable.strings b/UI/MainUI/Italian.lproj/Localizable.strings index 448aa673b..32f777184 100644 --- a/UI/MainUI/Italian.lproj/Localizable.strings +++ b/UI/MainUI/Italian.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings b/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings index 99a482322..fd7a045ad 100644 --- a/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings +++ b/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings b/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings index b4fd888b8..1afa2de64 100644 --- a/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings +++ b/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Polish.lproj/Localizable.strings b/UI/MainUI/Polish.lproj/Localizable.strings index 862672ecd..3c83582c3 100644 --- a/UI/MainUI/Polish.lproj/Localizable.strings +++ b/UI/MainUI/Polish.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Russian.lproj/Localizable.strings b/UI/MainUI/Russian.lproj/Localizable.strings index f29ffc134..2d7ad057e 100644 --- a/UI/MainUI/Russian.lproj/Localizable.strings +++ b/UI/MainUI/Russian.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Slovak.lproj/Localizable.strings b/UI/MainUI/Slovak.lproj/Localizable.strings index 37d8b6713..00239a599 100644 --- a/UI/MainUI/Slovak.lproj/Localizable.strings +++ b/UI/MainUI/Slovak.lproj/Localizable.strings @@ -37,6 +37,7 @@ "BrazilianPortuguese" = "Portugalská brazílština"; "Russian" = "Ruština"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Španielčina (Španielsko)"; "SpanishArgentina" = "Španielčina (Argentína)"; "Swedish" = "Švédčina"; diff --git a/UI/MainUI/Slovenian.lproj/Locale b/UI/MainUI/Slovenian.lproj/Locale new file mode 100755 index 000000000..0e6ebb92a --- /dev/null +++ b/UI/MainUI/Slovenian.lproj/Locale @@ -0,0 +1,35 @@ +/* Slovenian */ +{ + NSLanguageName = "Slovenian"; + NSFormalName = "Slovenščina"; + NSLocaleCode = "sl"; /* ISO 639-1 */ + NSLanguageCode = "slv"; /* ISO 639-2 */ + NSParentContext = ""; + + NSAMPMDesignation = (AM, PM); + NSCurrencySymbol = "€"; + NSDateFormatString = "%A, %B %e, %Y"; + NSDateTimeOrdering = MDYH; + NSDecimalDigits = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); + NSDecimalSeparator = "."; + NSEarlierTimeDesignations = (pred, zadnji, prejsnji, "ze pred"); + NSHourNameDesignations = ((0, polnoc), (10, jutro), (12, opoldne), (14, popoldne), (19, zvecer)); + NSInternationalCurrencyString = EUR; /* ISO 4217 */ + NSLaterTimeDesignations = (next); + NSMonthNameArray = (Januar, Februar, Marec, April, Maj, Junij, Julij, Avgust, September, Oktober, November, December); + NSNextDayDesignations = (jutri); + NSNextNextDayDesignations = ("naslednji dan"); + NSPriorDayDesignations = (vceraj); + NSShortDateFormatString = "%m/%e/%y"; + NSShortMonthNameArray = (Jan, Feb, Mar, Apr, Maj, Jun, Jul, Avg, Sep, Okt, Nov, Dec); + NSShortTimeDateFormatString = "%m/%e/%y %I:%M %p"; + NSShortWeekDayNameArray = (Ned, Pon, Tor, Sre, Cet, Pet, Sob); + NSThisDayDesignations = (danes, sedaj); + NSThousandsSeparator = ","; + NSTimeDateFormatString = "%A, %B %e, %Y %I:%M:%S %p %Z"; + NSTimeFormatString = "%I:%M:%S %p"; + NSWeekDayNameArray = (Nedelja, Ponedeljek, Torek, Sreda, Cetrtek, Petek, Sobota); + NSYearMonthWeekDesignations = (leto, mesec, teden); + NSPositiveCurrencyFormatString = "€9,999.00"; + NSNegativeCurrencyFormatString = "-€9,999.00"; +} diff --git a/UI/MainUI/Slovenian.lproj/Localizable.strings b/UI/MainUI/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..8e07cb207 --- /dev/null +++ b/UI/MainUI/Slovenian.lproj/Localizable.strings @@ -0,0 +1,79 @@ +/* this file is in UTF-8 format! */ + +"title" = "SOGo"; + +"Username:" = "Uporabniško ime:"; +"Password:" = "Geslo:"; +"Domain:" = "Domena:"; +"Remember username" = "Zapomni si up. ime"; + +"Connect" = "Poveži"; + +"Wrong username or password." = "Napačno uporabniško ime ali geslo."; +"cookiesNotEnabled" = "Ne moreš se prijaviti, ker tvoj brskalnik ne dovoli piškotkov. Dovoli piškotke v nastavitvah tvojega brskalnika in poskusi ponovno."; + +"browserNotCompatible" = "Tvoja različica brskalnika trenutno ni podrta na tej strani. Priporočamo uporabao FireFox. Klikni na povezavo spodaj za prenos zadnje različice tega brskalnika."; +"alternativeBrowsers" = "Alternativno lahko uporabiš naslednje združljive brskalnike"; +"alternativeBrowserSafari" = "Alternativno lahko uporabljaš tudi Safari."; +"Download" = "Prenos"; + +"Language:" = "Jezik:"; +"choose" = "Izberi ..."; +"Arabic" = "العربية"; +"Catalan" = "Català"; +"Czech" = "Česky"; +"Danish" = "Dansk (Danmark)"; +"Dutch" = "Nederlands"; +"English" = "English"; +"Finnish" = "Suomi"; +"French" = "Français"; +"German" = "Deutsch"; +"Hungarian" = "Magyar"; +"Icelandic" = "Íslenska"; +"Italian" = "Italiano"; +"NorwegianBokmal" = "Norsk bokmål"; +"NorwegianNynorsk" = "Norsk nynorsk"; +"Polish" = "Polski"; +"BrazilianPortuguese" = "Português brasileiro"; +"Russian" = "Русский"; +"Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; +"SpanishSpain" = "Español (España)"; +"SpanishArgentina" = "Español (Argentina)"; +"Swedish" = "Svenska"; +"Ukrainian" = "Українська"; +"Welsh" = "Cymraeg"; + +"About" = "O"; +"AboutBox" = "Developed by Inverse, SOGo is a fully-featured groupware server with a focus on scalability and simplicity.

\nSOGo provides a rich AJAX-based Web interface and supports multiple native clients through the use of standard protocols such as CalDAV and CardDAV.

\nSOGo is distributed under the GNU GPL version 2 or later and parts are distributed under the GNU LGPL version 2. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

\nSee this page for various support options."; + +"Your account was locked due to too many failed attempts." = "Tvoj račun je zaklenjen zaradi preveč neuspelih poskusov."; +"Your account was locked due to an expired password." = "Tvoj račun je zaklenjen zaradi pretečenega gesla."; +"Login failed due to unhandled error case: " = "Prijava ni uspela zaradi neobravnavane napake:"; +"Change your Password" = "Spremeni tvoje geslo"; +"The password was changed successfully." = "Geslo je uspešno spremenjeno."; +"Your password has expired, please enter a new one below:" = "Tvoje geslo je poteklo, prosim vnesi spodaj novo:"; +"Password must not be empty." = "Geslo ne sem biti prazno."; +"The passwords do not match. Please try again." = "Gesli se ne ujemata. Prosim poskusi ponovno."; +"Password Grace Period" = "Geslo z odlogom"; +"You have %{0} logins remaining before your account is locked. Please change your password in the preference dialog." = "Preostalo ti je še %{0} poskusov prijave, preden bo tvoj račun zaklenjen. Prosim zamenjaj tvoje geslo v nastavitvenem pogovornem oknu."; +"Password about to expire" = "Geslo je pred pretekom"; +"Your password is going to expire in %{0} %{1}." = "Tvoje geslo bo poteklo čez %{0} %{1}."; +"days" = "dnevi"; +"hours" = "ure"; +"minutes" = "minute"; +"seconds" = "sekunde"; +"Password change failed" = "Sprememba gesla neuspešna"; +"Password change failed - Permission denied" = "Sprememba gesla neuspešna - ni dovoljenja"; +"Password change failed - Insufficient password quality" = "Sprememba gesla neuspešna - neprimerna kvaliteta gesla"; +"Password change failed - Password is too short" = "Sprememba gesla neuspešna - geslo je prekratko"; +"Password change failed - Password is too young" = "Sprememba gesla nesupešna - geslo je premalo staro"; +"Password change failed - Password is in history" = "Sprememba gesla neuspešna - geslo je že bilo uporabljeno"; +"Unhandled policy error: %{0}" = "Neobravnavana napaka police: %{0}"; +"Unhandled error response" = "Neobravnavana napaka odziva"; +"Password change is not supported." = "Sprememba gesla ni podprta."; +"Unhandled HTTP error code: %{0}" = "Neobravnavana HTTP napaka: %{0}"; +"New password:" = "Novo geslo:"; +"Confirmation:" = "Potrditev:"; +"Cancel" = "Prekini"; +"Please wait..." = "Prosim počakaj..."; diff --git a/UI/MainUI/SpanishArgentina.lproj/Localizable.strings b/UI/MainUI/SpanishArgentina.lproj/Localizable.strings index 60ec1e466..3235b3298 100644 --- a/UI/MainUI/SpanishArgentina.lproj/Localizable.strings +++ b/UI/MainUI/SpanishArgentina.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/SpanishSpain.lproj/Localizable.strings b/UI/MainUI/SpanishSpain.lproj/Localizable.strings index f9e75aa0b..5aa248878 100644 --- a/UI/MainUI/SpanishSpain.lproj/Localizable.strings +++ b/UI/MainUI/SpanishSpain.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Swedish.lproj/Localizable.strings b/UI/MainUI/Swedish.lproj/Localizable.strings index 9f72869bd..29dd8d2a2 100644 --- a/UI/MainUI/Swedish.lproj/Localizable.strings +++ b/UI/MainUI/Swedish.lproj/Localizable.strings @@ -37,6 +37,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Ukrainian.lproj/Localizable.strings b/UI/MainUI/Ukrainian.lproj/Localizable.strings index fe3086522..2944eaa39 100644 --- a/UI/MainUI/Ukrainian.lproj/Localizable.strings +++ b/UI/MainUI/Ukrainian.lproj/Localizable.strings @@ -38,6 +38,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/MainUI/Welsh.lproj/Localizable.strings b/UI/MainUI/Welsh.lproj/Localizable.strings index 42d4e962d..02d59e6ec 100644 --- a/UI/MainUI/Welsh.lproj/Localizable.strings +++ b/UI/MainUI/Welsh.lproj/Localizable.strings @@ -37,6 +37,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Arabic.lproj/Localizable.strings b/UI/PreferencesUI/Arabic.lproj/Localizable.strings index 6ec457f3b..77d3c3548 100644 --- a/UI/PreferencesUI/Arabic.lproj/Localizable.strings +++ b/UI/PreferencesUI/Arabic.lproj/Localizable.strings @@ -222,6 +222,7 @@ "BrazilianPortuguese" = "Português brasileiro"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Basque.lproj/Localizable.strings b/UI/PreferencesUI/Basque.lproj/Localizable.strings index c203c0549..40f3b1c61 100644 --- a/UI/PreferencesUI/Basque.lproj/Localizable.strings +++ b/UI/PreferencesUI/Basque.lproj/Localizable.strings @@ -234,6 +234,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Catalan.lproj/Localizable.strings b/UI/PreferencesUI/Catalan.lproj/Localizable.strings index f299cc42d..b8b676740 100644 --- a/UI/PreferencesUI/Catalan.lproj/Localizable.strings +++ b/UI/PreferencesUI/Catalan.lproj/Localizable.strings @@ -235,6 +235,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Czech.lproj/Localizable.strings b/UI/PreferencesUI/Czech.lproj/Localizable.strings index 7482be602..c28272954 100644 --- a/UI/PreferencesUI/Czech.lproj/Localizable.strings +++ b/UI/PreferencesUI/Czech.lproj/Localizable.strings @@ -234,6 +234,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Dutch.lproj/Localizable.strings b/UI/PreferencesUI/Dutch.lproj/Localizable.strings index d19f8fd06..80fd0b1a3 100644 --- a/UI/PreferencesUI/Dutch.lproj/Localizable.strings +++ b/UI/PreferencesUI/Dutch.lproj/Localizable.strings @@ -234,6 +234,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentinië)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/English.lproj/Localizable.strings b/UI/PreferencesUI/English.lproj/Localizable.strings index a5d59ae2b..2859b61cf 100644 --- a/UI/PreferencesUI/English.lproj/Localizable.strings +++ b/UI/PreferencesUI/English.lproj/Localizable.strings @@ -234,6 +234,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Finnish.lproj/Localizable.strings b/UI/PreferencesUI/Finnish.lproj/Localizable.strings index 355f2e61f..f43d2c705 100644 --- a/UI/PreferencesUI/Finnish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Finnish.lproj/Localizable.strings @@ -234,6 +234,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/French.lproj/Localizable.strings b/UI/PreferencesUI/French.lproj/Localizable.strings index f2d537b60..59a87dcf9 100644 --- a/UI/PreferencesUI/French.lproj/Localizable.strings +++ b/UI/PreferencesUI/French.lproj/Localizable.strings @@ -234,6 +234,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/GNUmakefile b/UI/PreferencesUI/GNUmakefile index 570327559..ce5f8cb72 100644 --- a/UI/PreferencesUI/GNUmakefile +++ b/UI/PreferencesUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = PreferencesUI PreferencesUI_PRINCIPAL_CLASS = PreferencesUIProduct -PreferencesUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +PreferencesUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh PreferencesUI_OBJC_FILES = \ PreferencesUIProduct.m \ diff --git a/UI/PreferencesUI/German.lproj/Localizable.strings b/UI/PreferencesUI/German.lproj/Localizable.strings index 756f73bbf..bd8dbd3b2 100644 --- a/UI/PreferencesUI/German.lproj/Localizable.strings +++ b/UI/PreferencesUI/German.lproj/Localizable.strings @@ -234,6 +234,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Icelandic.lproj/Localizable.strings b/UI/PreferencesUI/Icelandic.lproj/Localizable.strings index 4e9808cd2..1dc5ec3d1 100644 --- a/UI/PreferencesUI/Icelandic.lproj/Localizable.strings +++ b/UI/PreferencesUI/Icelandic.lproj/Localizable.strings @@ -192,6 +192,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Italian.lproj/Localizable.strings b/UI/PreferencesUI/Italian.lproj/Localizable.strings index 630154439..7f40d5378 100644 --- a/UI/PreferencesUI/Italian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Italian.lproj/Localizable.strings @@ -213,6 +213,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings b/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings index 839c7adce..e0f0f24e3 100644 --- a/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings +++ b/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings @@ -199,6 +199,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Russian.lproj/Localizable.strings b/UI/PreferencesUI/Russian.lproj/Localizable.strings index 36584850c..27c86dde3 100644 --- a/UI/PreferencesUI/Russian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Russian.lproj/Localizable.strings @@ -234,6 +234,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Slovak.lproj/Localizable.strings b/UI/PreferencesUI/Slovak.lproj/Localizable.strings index 19bada4f6..08337efcf 100644 --- a/UI/PreferencesUI/Slovak.lproj/Localizable.strings +++ b/UI/PreferencesUI/Slovak.lproj/Localizable.strings @@ -231,6 +231,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Slovenian.lproj/Localizable.strings b/UI/PreferencesUI/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..631a60897 --- /dev/null +++ b/UI/PreferencesUI/Slovenian.lproj/Localizable.strings @@ -0,0 +1,330 @@ +/* toolbar */ +"Save and Close" = "Shrani in zapri"; +"Close" = "Zapri"; + +/* tabs */ +"General" = "Splošno"; +"Calendar Options" = "Možnosti koledarja"; +"Contacts Options" = "Možnosti stikov"; +"Mail Options" = "Možnosti pošte"; +"IMAP Accounts" = "IMAP računi"; +"Vacation" = "Odsotnost"; +"Forward" = "Naprej"; +"Password" = "Geslo"; +"Categories" = "Kategorije"; +"Appointments invitations" = "Povabilo na sestanek"; +"Name" = "Ime"; +"Color" = "Barva"; +"Add" = "Dodaj"; +"Delete" = "Izbriši"; + +/* contacts categories */ +"contacts_category_labels" = "Kolega, Tekmec, Kupec, Prijatelj, Družina, Poslovni partner, Dobavitelj, Novinar, VIP"; + +/* vacation (auto-reply) */ +"Enable vacation auto reply" = "Omogoči samodejni odgovor ob odsotnosti"; +"Auto reply message :" = "Samodejno sporočilo:"; +"Email addresses (separated by commas) :" = "E-poštni naslovi (ločeni z vejivo):"; +"Add default email addresses" = "Dodaj privzete e-poštne naslove"; +"Days between responses :" = "Dnevi med odzivi:"; +"Do not send responses to mailing lists" = "Ne pošlji odzivov na poštne sezname"; +"Disable auto reply on" = "Onemogoči samodejni odgovor za"; +"Always send vacation message response" = "Vedno pošlji sporočilo o odsotnosti"; +"Please specify your message and your email addresses for which you want to enable auto reply." += "Prosim določi tvoje sporočilo in tvoje e-poštne naslove, za katere želiš omogočiti samodejni odgovor."; +"Your vacation message must not end with a single dot on a line." = "Tvoje sporočilo za odsotnost se ne sme končati z enojno piko v vrstici."; +"End date of your auto reply must be in the future." += "Končni datum tvojega samodejnega odgovora mora biti v prihodnosti."; + +/* forward messages */ +"Forward incoming messages" = "Posreduj prejemajoča sporočila"; +"Keep a copy" = "Ohrani kopijo"; +"Please specify an address to which you want to forward your messages." += "Prosim določi naslov, na katerega želiš posredovati tvoja sporočila."; +"You are not allowed to forward your messages to an external email address." = "Ni dovoljeno prepošiljati pošte na zunanji poštni naslov"; +"You are not allowed to forward your messages to an internal email address." = "Ni dovoljeno prepošiljati pošte na interni poštni naslov"; + + +/* d & t */ +"Current Time Zone :" = "Trenutni časovni pas:"; +"Short Date Format :" = "Kratki format datuma:"; +"Long Date Format :" = "Dolgi format datuma:"; +"Time Format :" = "Format časa:"; + +"default" = "Privzeto"; + +"shortDateFmt_0" = "%d-%b-%y"; + +"shortDateFmt_1" = "%d-%m-%y"; +"shortDateFmt_2" = "%d/%m/%y"; +"shortDateFmt_3" = "%e/%m/%y"; + +"shortDateFmt_4" = "%d-%m-%Y"; +"shortDateFmt_5" = "%d/%m/%Y"; + +"shortDateFmt_6" = "%m-%d-%y"; +"shortDateFmt_7" = "%m/%d/%y"; +"shortDateFmt_8" = "%m/%e/%y"; + +"shortDateFmt_9" = "%y-%m-%d"; +"shortDateFmt_10" = "%y/%m/%d"; +"shortDateFmt_11" = "%y.%m.%d"; + +"shortDateFmt_12" = "%Y-%m-%d"; +"shortDateFmt_13" = "%Y/%m/%d"; +"shortDateFmt_14" = "%Y.%m.%d"; + +"shortDateFmt_15" = ""; + +"longDateFmt_0" = "%A, %B %d, %Y"; +"longDateFmt_1" = "%B %d, %Y"; +"longDateFmt_2" = "%A, %d %B, %Y"; +"longDateFmt_3" = "%d %B, %Y"; +"longDateFmt_4" = ""; +"longDateFmt_5" = ""; +"longDateFmt_6" = ""; +"longDateFmt_7" = ""; +"longDateFmt_8" = ""; +"longDateFmt_9" = ""; +"longDateFmt_10" = ""; + +"timeFmt_0" = "%I:%M %p"; +"timeFmt_1" = "%H:%M"; +"timeFmt_2" = ""; +"timeFmt_3" = ""; +"timeFmt_4" = ""; + +/* calendar */ +"Week begins on :" = "Teden se začne z:"; +"Day start time :" = "Začetni čas dneva:"; +"Day end time :" = "Končni čas dneva:"; +"Day start time must be prior to day end time." = "Začetni čas dneva mora biti pred končnim časom dneva."; +"Show time as busy outside working hours" = "Prikaži čas kot zasedem izven delovnega časa"; +"First week of year :" = "Prvi teden leta:"; +"Enable reminders for Calendar items" = "Omogoči opomnike za koledarske elemente"; +"Play a sound when a reminder comes due" = "Zvočno opozori, ko opomnik zapade"; +"Default reminder :" = "Privzeti opomnik:"; + +"firstWeekOfYear_January1" = "Začne s 1. januarjem"; +"firstWeekOfYear_First4DayWeek" = "Prvi 4 dnevni teden"; +"firstWeekOfYear_FirstFullWeek" = "Prvi celotni vikend"; + +"Prevent from being invited to appointments" = "Prepreči pred vabilom na sestanek"; +"White list for appointment invitations:" = "Beli seznam za vabila na sestanke:"; +"Contacts Names" = "Imena stikov"; + +/* Default Calendar */ +"Default calendar :" = "Privzeti koledar:"; +"selectedCalendar" = "Izbrani koledar"; +"personalCalendar" = "Osebnik koledar"; +"firstCalendar" = "Prvi omogočeni koledar"; + +"reminder_NONE" = "Brez opomnika"; +"reminder_5_MINUTES_BEFORE" = "5 minut pred"; +"reminder_10_MINUTES_BEFORE" = "10 minut pred"; +"reminder_15_MINUTES_BEFORE" = "15 minut pred"; +"reminder_30_MINUTES_BEFORE" = "30 minut pred"; +"reminder_45_MINUTES_BEFORE" = "45 minut pred"; +"reminder_1_HOUR_BEFORE" = "1 uro pred"; +"reminder_2_HOURS_BEFORE" = "2 uri pred"; +"reminder_5_HOURS_BEFORE" = "5 ur pred"; +"reminder_15_HOURS_BEFORE" = "15 ur pred"; +"reminder_1_DAY_BEFORE" = "1 dan pred"; +"reminder_2_DAYS_BEFORE" = "2 dneva pred"; +"reminder_1_WEEK_BEFORE" = "1 teden pred"; + +/* Mailer */ +"Labels" = "Oznake"; +"Label" = "Oznaka"; +"Show subscribed mailboxes only" = "Prikaži le naročene poštne predale"; +"Sort messages by threads" = "Sortiraj sporočila po nitih"; +"When sending mail, add unknown recipients to my" = "Pri pošiljanju pošte dodaj neznane prejemnike k mojemu"; + +"Forward messages:" = "Posreduj sporočila:"; +"messageforward_inline" = "V vrsti"; +"messageforward_attached" = "Kot priloga"; + +"When replying to a message:" = "Pri odgovoru na sporočilo:"; +"replyplacement_above" = "Začni odgovor nad navednicami"; +"replyplacement_below" = "Začni odgovor pod navednicami"; +"And place my signature" = "In umesti moj podpis"; +"signatureplacement_above" = "pod mojim odgovorom"; +"signatureplacement_below" = "pod navednicami"; +"Compose messages in" = "Sestaviti sporočilo v"; +"composemessagestype_html" = "HTML"; +"composemessagestype_text" = "Golo besedilo"; +"Display remote inline images" = "Prikaži oddaljne slike v vrsti"; +"displayremoteinlineimages_never" = "Nikoli"; +"displayremoteinlineimages_always" = "Vedno"; + +"Auto save every" = "Samodejno shrani vsake"; +"minutes" = "minute"; + +/* Contact */ +"Personal Address Book" = "Osebni adresar"; +"Collected Address Book" = "Zbrani adresar"; + +/* IMAP Accounts */ +"New Mail Account" = "Novi poštni račun"; + +"Server Name:" = "Ime strežnika:"; +"Port:" = "Port:"; +"Encryption:" = "Enkripcija:"; +"None" = "Noben"; +"User Name:" = "Uporabniško ime:"; +"Password:" = "Geslo:"; + +"Full Name:" = "Polno ime:"; +"Email:" = "E-pošta:"; +"Reply To Email:" = "Odgovor na e-pošto:"; +"Signature:" = "Podpis:"; +"(Click to create)" = "(Klikni za kreiranje)"; + +"Signature" = "Podpis"; +"Please enter your signature below:" = "Prosim vnesi tvoj podpis spodaj:"; + +"Please specify a valid sender address." = "Prosim določi veljavni naslov pošiljatelja."; +"Please specify a valid reply-to address." = "Prosim določi veljavni naslov za odgovor."; + +/* Additional Parameters */ +"Additional Parameters" = "Dodatni parametri"; + +/* password */ +"New password:" = "Novo geslo:"; +"Confirmation:" = "Potrditev:"; +"Change" = "Spremeni"; + +/* Event+task classifications */ +"Default events classification :" = "Privzeta razvrstitev dogodkov:"; +"Default tasks classification :" = "Privzeta razvrstitev opravil:"; +"PUBLIC_item" = "Javno"; +"CONFIDENTIAL_item" = "Zaupno"; +"PRIVATE_item" = "Osebno"; + +/* Event+task categories */ +"category_none" = "Noben"; +"calendar_category_labels" = "Obletnica,Rojstni dan,Poslovno,Klici,Stranke,Tekmeci,Kupci,Priljubljeni,Sledenje,Darila,Prazniki,Ideje,Srečanja,Zadeve,Razno,Osebno,Projekti,Javno prazniki,Status,Dobavitelji,Potovanje,Dopust"; + +/* Default module */ +"Calendar" = "Koledar"; +"Contacts" = "Adresar"; +"Mail" = "Pošta"; +"Last" = "Zadnje uporabljeno"; +"Default Module :" = "Privzeti modul:"; +"SOGo Version :" = "SOGo različica:"; + +"Language :" = "Jezik:"; +"choose" = "Izberi ..."; +"Arabic" = "العربية"; +"Catalan" = "Català"; +"Czech" = "Česky"; +"Danish" = "Dansk (Danmark)"; +"Dutch" = "Nederlands"; +"English" = "English"; +"Finnish" = "Suomi"; +"French" = "Français"; +"German" = "Deutsch"; +"Hungarian" = "Magyar"; +"Icelandic" = "Íslenska"; +"Italian" = "Italiano"; +"NorwegianBokmal" = "Norsk bokmål"; +"NorwegianNynorsk" = "Norsk nynorsk"; +"BrazilianPortuguese" = "Português brasileiro"; +"Polish" = "Polski"; +"Russian" = "Русский"; +"Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; +"SpanishSpain" = "Español (España)"; +"SpanishArgentina" = "Español (Argentina)"; +"Swedish" = "Svenska"; +"Ukrainian" = "Українська"; +"Welsh" = "Cymraeg"; + +"Refresh View :" = "Osveži pogled:"; +"refreshview_manually" = "Ročno"; +"refreshview_every_minute" = "Vsako minuto"; +"refreshview_every_2_minutes" = "Vsaki 2 minuti"; +"refreshview_every_5_minutes" = "Vsakih 5 minut"; +"refreshview_every_10_minutes" = "Vsakih 10 minut"; +"refreshview_every_20_minutes" = "Vsakih 20 minut"; +"refreshview_every_30_minutes" = "Vsakih 30 minut"; +"refreshview_once_per_hour" = "Enkrat na uro"; + +/* Return receipts */ +"When I receive a request for a return receipt:" = "Ko prejmem zahtevo za povratnico:"; +"Never send a return receipt" = "Nikoli ne pošlji povratnice"; +"Allow return receipts for some messages" = "Dovoli povratnice za nekatera sporočila"; +"If I'm not in the To or Cc of the message:" = "Če nisem med Za ali Kp sporočila:"; +"If the sender is outside my domain:" = "Če je pošiljatelj izven moje domene:"; +"In all other cases:" = "V vseh ostalih primerih:"; + +"Never send" = "Nikoli ne pošlji"; +"Always send" = "Vedno pošlji"; +"Ask me" = "Vprašaj me"; + +/* Filters - UIxPreferences */ +"Filters" = "Filterji"; +"Active" = "Aktivno"; +"Move Up" = "Pomakni gor"; +"Move Down" = "Pomakni dol"; +"Connection error" = "Napaka pri povezavi"; +"Service temporarily unavailable" = "Storitev začasno ni na voljo"; + +/* Filters - UIxFilterEditor */ +"Filter name:" = "Ime filtra:"; +"For incoming messages that" = "Za prihajajoča sporočila, ki"; +"match all of the following rules:" = "sklada se z naslednjimi pravili:"; +"match any of the following rules:" = "sklada se s katerokoli od naslednjih pravil:"; +"match all messages" = "sklada se z vsemi sporočili"; +"Perform these actions:" = "Izvedi ta dejanja:"; +"Untitled Filter" = "Neimenovani filter:"; + +"Subject" = "Zadeva"; +"From" = "Od"; +"To" = "Za"; +"Cc" = "Kp"; +"To or Cc" = "Za ali Kp"; +"Size (Kb)" = "Velikost (Kb)"; +"Header" = "Glava"; +"Body" = "Telo"; +"Flag the message with:" = "Označi sporočilo z:"; +"Discard the message" = "Zavrzi sporočilo"; +"File the message in:" = "Odloži sporočilo v:"; +"Keep the message" = "Obdrži sporočilo"; +"Forward the message to:" = "Posreduj sporočilo za:"; +"Send a reject message:" = "Pošlji zavrnitev sporočila:"; +"Send a vacation message" = "Pošlji sporočilo o odsotnosti"; +"Stop processing filter rules" = "Ustavi izvajanje pravil filtriranja"; + +"is under" = "je pod"; +"is over" = "je nad"; +"is" = "je"; +"is not" = "ni"; +"contains" = "vsebuje"; +"does not contain" = "ne vsebuje"; +"matches" = "ustreza"; +"does not match" = "ne ustreza"; +"matches regex" = "ustreza regex"; +"does not match regex" = "ne ustreza regex"; + +"Seen" = "Videno"; +"Deleted" = "Brisano"; +"Answered" = "Odgovorjeno"; +"Flagged" = "Označeno"; +"Junk" = "Nezaželeno"; +"Not Junk" = "Zaželeno"; + +/* Password policy */ +"The password was changed successfully." = "Geslo je uspešno spremenjeno."; +"Password must not be empty." = "Geslo ne sme biti prazno."; +"The passwords do not match. Please try again." = "Gesli se ne ujemata. Prosim poskusi ponovno."; +"Password change failed" = "Sprememba gesla ni uspela."; +"Password change failed - Permission denied" = "Sprememba gesla ni uspela - pristop ni dovoljen"; +"Password change failed - Insufficient password quality" = "Sprememba gesla ni uspela - prenizka kvaliteta gesla"; +"Password change failed - Password is too short" = "Sprememba gesla ni uspela - geslo je prekratko"; +"Password change failed - Password is too young" = "Sprememba gesla ni uspela - geslo ni dovolj staro"; +"Password change failed - Password is in history" = "Sprememba gesla ni uspela - geslo je v zgodovini"; +"Unhandled policy error: %{0}" = "Neobravnavana napaka police: %{0}"; +"Unhandled error response" = "Neobravnavana napaka odziva"; +"Password change is not supported." = "Sprememba gesla ni podprta."; +"Unhandled HTTP error code: %{0}" = "Neobravnavana HTTP napaka: %{0}"; diff --git a/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings b/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings index 1b6f89dc3..4d0c6f698 100644 --- a/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings +++ b/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings @@ -227,6 +227,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Swedish.lproj/Localizable.strings b/UI/PreferencesUI/Swedish.lproj/Localizable.strings index b2463926b..7bd57e1b5 100644 --- a/UI/PreferencesUI/Swedish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Swedish.lproj/Localizable.strings @@ -201,6 +201,7 @@ Servernamn:"; "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings b/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings index 9944a8d0a..3d84d8a9a 100644 --- a/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings @@ -211,6 +211,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/PreferencesUI/Welsh.lproj/Localizable.strings b/UI/PreferencesUI/Welsh.lproj/Localizable.strings index b2f2622d6..3dd55e168 100644 --- a/UI/PreferencesUI/Welsh.lproj/Localizable.strings +++ b/UI/PreferencesUI/Welsh.lproj/Localizable.strings @@ -199,6 +199,7 @@ "Polish" = "Polski"; "Russian" = "Русский"; "Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; "SpanishSpain" = "Español (España)"; "SpanishArgentina" = "Español (Argentina)"; "Swedish" = "Svenska"; diff --git a/UI/Scheduler/GNUmakefile b/UI/Scheduler/GNUmakefile index 5c3d00357..18055964a 100644 --- a/UI/Scheduler/GNUmakefile +++ b/UI/Scheduler/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = SchedulerUI SchedulerUI_PRINCIPAL_CLASS = SchedulerUIProduct -SchedulerUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +SchedulerUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh SchedulerUI_OBJC_FILES = \ SchedulerUIProduct.m \ diff --git a/UI/Scheduler/Slovenian.lproj/Localizable.strings b/UI/Scheduler/Slovenian.lproj/Localizable.strings new file mode 100644 index 000000000..8d13fd39a --- /dev/null +++ b/UI/Scheduler/Slovenian.lproj/Localizable.strings @@ -0,0 +1,565 @@ +/* this file is in UTF-8 format! */ + +/* Tooltips */ + +"Create a new event" = "Ustvari novi dogodek"; +"Create a new task" = "Ustvari novo opravilo"; +"Edit this event or task" = "Urejaj ta dogodek ali opravilo"; +"Print the current calendar view" = "Tiskaj trenutni pogled koledarja"; +"Delete this event or task" = "Briši ta dogodek ali opravilo"; +"Go to today" = "Pojdi na danes"; +"Switch to day view" = "Preklopi na dnevni pogled"; +"Switch to week view" = "Preklopi na tedenski pogled"; +"Switch to month view" = "Preklopi na mesečni pogled"; +"Reload all calendars" = "Ponovno naloži vse koledarje"; + +/* Tabs */ +"Date" = "Datum"; +"Calendars" = "Koledarji"; + +/* Day */ + +"DayOfTheMonth" = "Dan meseca"; +"dayLabelFormat" = "%m/%d/%Y"; +"today" = "Danes"; + +"Previous Day" = "Prejšnji dan"; +"Next Day" = "Naslednji dan"; + +/* Week */ + +"Week" = "Teden"; +"this week" = "ta teden"; + +"Week %d" = "Teden %d"; + +"Previous Week" = "Prejšnji teden"; +"Next Week" = "Naslednji teden"; + +/* Month */ + +"this month" = "ta mesec"; + +"Previous Month" = "Prejšnji mesec"; +"Next Month" = "Naslednji mesec"; + +/* Year */ + +"this year" = "to leto"; + +/* Menu */ + +"Calendar" = "Koledar"; +"Contacts" = "Stiki"; + +"New Calendar..." = "Novi koledar..."; +"Delete Calendar" = "Briši koledar..."; +"Unsubscribe Calendar" = "Odjavi koledar"; +"Sharing..." = "Skupna raba..."; +"Export Calendar..." = "Izvoz koledarja"; +"Import Events..." = "Uvoz dogodkov.."; +"Import Events" = "Uvoz dogodkov"; +"Select an iCalendar file (.ics)." = "Izberi iCalendar datoteko (.ics)."; +"Upload" = "Naloži"; +"Uploading" = "Nalaganje"; +"Publish Calendar..." = "Objavi koledar..."; +"Reload Remote Calendars" = "Ponovno naloži oddaljene koledarje"; +"Properties" = "Lastnosti"; +"Done" = "Končano"; +"An error occurred while importing calendar." = "Prišlo je do napake pri uvozu koledarja."; +"No event was imported." = "Noben dogodek ni uvožen."; +"A total of %{0} events were imported in the calendar." = "Skupaj %{0} dogodkov je bilo uvoženo v koledar."; + +"Compose E-Mail to All Attendees" = "Sestavi pošto za vse udeležence"; +"Compose E-Mail to Undecided Attendees" = "Sestavi e-pošto za neodločene udeležence"; + +/* Folders */ +"Personal calendar" = "Osebnik koledar"; + +/* Misc */ + +"OpenGroupware.org" = "OpenGroupware.org"; +"Forbidden" = "Prepovedano"; + +/* acls */ + +"Access rights to" = "Pravice za dostop za"; +"For user" = "Za uporabnika"; + +"Any Authenticated User" = "Katerikoli preverjeni uporabnik"; +"Public Access" = "Javni dostop"; + +"label_Public" = "Javno"; +"label_Private" = "Osebno"; +"label_Confidential" = "Zaupno"; + +"label_Viewer" = "Preglej vse"; +"label_DAndTViewer" = "Pregled datum in čas"; +"label_Modifier" = "Spremeni"; +"label_Responder" = "Odzovi se na"; +"label_None" = "Noben"; + +"View All" = "Preglej vse"; +"View the Date & Time" = "Preglej datum in čas"; +"Modify" = "Spremeni"; +"Respond To" = "Odzovi se na"; +"None" = "Noben"; + +"This person can create objects in my calendar." += "Ta oseba lahko ustvari objekte v mojem koledarju."; +"This person can erase objects from my calendar." += "Ta oseba lahko briše objekte v mojem koledarju."; + +/* Button Titles */ + +"Subscribe to a Calendar..." = "Naroči na koledar..."; +"Remove the selected Calendar" = "Odstrani izbrani koledar"; + +"Name of the Calendar" = "Ime koledarja"; + +"new" = "Novo"; +"Print view" = "Tiskaj pregled"; +"edit" = "Uredi"; +"delete" = "Briši"; +"proposal" = "Predlog"; +"Save and Close" = "Shrani in zapri"; +"Close" = "Zapri"; +"Invite Attendees" = "Povabi udeležence"; +"Attach" = "Priloži"; +"Update" = "Posodobi"; +"Cancel" = "Prekliči"; +"show_rejected_apts" = "Prikaži zavrnjene sestanke"; +"hide_rejected_apts" = "Skrij zavrnjene sestanke"; + + +/* Schedule */ + +"Schedule" = "Razporedi"; +"No appointments found" = "Noben sestanek ni najden"; +"Meetings proposed by you" = "Srečanje predlagano od tebe"; +"Meetings proposed to you" = "Srečanja predlagana tebi"; +"sched_startDateFormat" = "%d/%m %H:%M"; +"action" = "Dejanje"; +"accept" = "Sprejmi"; +"decline" = "Zavrni"; +"more attendees" = "Več udeležencev"; +"Hide already accepted and rejected appointments" = "Skrij že sprejete in zavrnjene sestanke."; +"Show already accepted and rejected appointments" = "Prikaži že sprejete in zavrnjene sestanke"; + +/* Print view */ + +"LIST" = "Seznam"; +"Print Settings" = "Tiskaj nastavitve"; +"Title:" = "Naslov:"; +"Layout:" = "Postavitev:"; +"What to Print" = "Kaj za tiskanje"; +"Options" = "Možnosti"; +"Tasks with no due date" = "Opravila brez datuma zapadlosti"; +"Display working hours only" = "Prikaži le delovne ure"; +"Completed tasks" = "Zaključena opravila"; +"Display events and tasks colors" = "Prikaži barve dogodkov in opravil"; +"Borders" = "Obrobe"; +"Backgrounds" = "Ozadja"; + +/* Appointments */ + +"Appointment viewer" = "Pregledovalnik sestankov"; +"Appointment editor" = "Urejevalnik sestankov"; +"Appointment proposal" = "Predlog sestanka"; +"Appointment on" = "Sestanek na"; +"Start:" = "Začetek:"; +"End:" = "Konec:"; +"Due Date:" = "Datum zapadlosti:"; +"Title:" = "Naslov:"; +"Calendar:" = "Koledar:"; +"Name" = "Ime"; +"Email" = "E-pošta"; +"Status:" = "Status:"; +"% complete" = "% dokončan"; +"Location:" = "Mesto:"; +"Priority:" = "Prioriteta:"; +"Privacy" = "Zasebnost"; +"Cycle" = "Cikel"; +"Cycle End" = "Konec cikla"; +"Categories" = "Kategorije"; +"Classification" = "Razvrstitev"; +"Duration" = "Trajanje"; +"Attendees:" = "Udeleženci:"; +"Resources" = "Viri"; +"Organizer:" = "Organizator:"; +"Description:" = "Opis:"; +"Document:" = "Dokument:"; +"Category:" = "Kategorija:"; +"Repeat:" = "Ponovitev:"; +"Reminder:" = "Opomnik:"; +"General:" = "Splošno:"; +"Reply:" = "Odgovori:"; +"Created by:" = "Ustvaril:"; + + +"Target:" = "Cilj:"; + +"attributes" = "atributi"; +"attendees" = "udeleženci"; +"delegated from" = "dodeljeno od"; + +/* checkbox title */ +"is private" = "je osebno"; +/* classification */ +"Public" = "Javno"; +"Private" = "Osebno"; +/* text used in overviews and tooltips */ +"empty title" = "Prazen naslov"; +"private appointment" = "Osebni sestanek"; + +"Change..." = "Spremeni..."; + +/* Appointments (participation state) */ + +"partStat_NEEDS-ACTION" = "Potrdil bom pozneje"; +"partStat_ACCEPTED" = "Udeležil se bom"; +"partStat_DECLINED" = "Ne bom se udeležil"; +"partStat_TENTATIVE" = "Mogoče se udeležim"; +"partStat_DELEGATED" = "Dodeljujem"; +"partStat_OTHER" = "Ostalo"; + +/* Appointments (error messages) */ + +"Conflicts found!" = "Najdeni konflikti!"; +"Invalid iCal data!" = "Napačni iCal podatki!"; +"Could not create iCal data!" = "Ne morem ustvariti iCal podatkov!"; + +/* Searching */ + +"view_all" = "Vse"; +"view_today" = "Danes"; +"view_next7" = "Naslednjih 7 dni"; +"view_next14" = "Naslednjih 14 dni"; +"view_next31" = "Naslednjih 31 dni"; +"view_thismonth" = "Ta mesec"; +"view_future" = "Vsi prihodnji dogodki"; +"view_selectedday" = "Izbrani dan"; + +"view_not_started" = "Nezačeta opravila"; +"view_overdue" = "Zapadla opravila"; +"view_incomplete" = "Nedokončana opravila"; + +"View:" = "Pregled:"; +"Title, category or location" = "Naslov, kategorija ali mesto"; +"Entire content" = "Vsa vsebina"; + +"Search" = "Išči"; +"Search attendees" = "Išči udeležence"; +"Search resources" = "Išči vire"; +"Search appointments" = "Išči sestanke"; + +"All day Event" = "Celodnevni dogodek"; +"check for conflicts" = "Preveri konflikte"; + +"Browse URL" = "Prebrskaj URL"; + +"newAttendee" = "Dodaj udeleženca"; + +/* calendar modes */ + +"Overview" = "Pregled"; +"Chart" = "Grafikon"; +"List" = "Seznam"; +"Columns" = "Stolpci"; + +/* Priorities */ + +"prio_0" = "Ni določen"; +"prio_1" = "Visoka"; +"prio_2" = "Visoka"; +"prio_3" = "Visoka"; +"prio_4" = "Visoka"; +"prio_5" = "Normalna"; +"prio_6" = "Nizka"; +"prio_7" = "Nizka"; +"prio_8" = "Nizka"; +"prio_9" = "Nizka"; + +/* access classes (privacy) */ +"PUBLIC_vevent" = "Javni dogodek"; +"CONFIDENTIAL_vevent" = "Zaupni dogodek"; +"PRIVATE_vevent" = "Osebni dogodek"; +"PUBLIC_vtodo" = "Javno opravilo"; +"CONFIDENTIAL_vtodo" = "Zaupno opravilo"; +"PRIVATE_vtodo" = "Osebno opravilo"; + +/* status type */ +"status_" = "Ni določeno"; +"status_NOT-SPECIFIED" = "Ni določeno"; +"status_TENTATIVE" = "Pogojno"; +"status_CONFIRMED" = "Potrjeno"; +"status_CANCELLED" = "Preklicano"; +"status_NEEDS-ACTION" = "Potrebuje ukrepanje"; +"status_IN-PROCESS" = "V teku"; +"status_COMPLETED" = "Dokončano na"; + +/* Cycles */ + +"cycle_once" = "cycle_once"; +"cycle_daily" = "cycle_daily"; +"cycle_weekly" = "cycle_weekly"; +"cycle_2weeks" = "cycle_2weeks"; +"cycle_4weeks" = "cycle_4weeks"; +"cycle_monthly" = "cycle_monthly"; +"cycle_weekday" = "cycle_weekday"; +"cycle_yearly" = "cycle_yearly"; + +"cycle_end_never" = "cycle_end_never"; +"cycle_end_until" = "cycle_end_until"; + +"Recurrence pattern" = "Ponovitev vzorca"; +"Range of recurrence" = "Obseg ponovitev"; + +"Repeat" = "Ponovi"; +"Daily" = "Dnevno"; +"Weekly" = "Tedensko"; +"Monthly" = "Mesečno"; +"Yearly" = "Letno"; +"Every" = "Vsak"; +"Days" = "Dnevi"; +"Week(s)" = "Tedni"; +"On" = "Na"; +"Month(s)" = "Meseci"; +/* [Event recurrence editor] Ex: _The_ first Sunday */ +"The" = " "; +"Recur on day(s)" = "Ponovi po dnevih"; +"Year(s)" = "Leta"; +/* [Event recurrence editor] Ex: Every first Sunday _of_ April */ +"cycle_of" = "od"; +"No end date" = "Brez končnega datuma"; +"Create" = "Ustvari"; +"appointment(s)" = "sestanki"; +"Repeat until" = "Ponavljaj do"; + +"First" = "Prvo"; +"Second" = "Drugo"; +"Third" = "Tretje"; +"Fourth" = "Četrto"; +"Fift" = "Peto"; +"Last" = "Zadnje"; + +/* Appointment categories */ + +"category_none" = "Noben"; +"category_labels" = "Obletnica,Rojstni dan,Poslovno,Klici,Stranke,Tekmeci,Kupci,Priljubljeni,Sledenje,Darila,Prazniki,Ideje,Srečanja,Zadeve,Razno,Osebno,Projekti,Javno prazniki,Status,Dobavitelji,Potovanje,Dopust"; + +"repeat_NEVER" = "Se ne ponavlja"; +"repeat_DAILY" = "Dnevno"; +"repeat_WEEKLY" = "Tedensko"; +"repeat_BI-WEEKLY" = "Dvotedensko"; +"repeat_EVERY WEEKDAY" = "Vsak teden"; +"repeat_MONTHLY" = "Mesečno"; +"repeat_YEARLY" = "Letno"; +"repeat_CUSTOM" = "Po meri..."; + +"reminder_NONE" = "Brez opomnika"; +"reminder_5_MINUTES_BEFORE" = "5 minut pred"; +"reminder_10_MINUTES_BEFORE" = "10 minut pred"; +"reminder_15_MINUTES_BEFORE" = "15 minut pred"; +"reminder_30_MINUTES_BEFORE" = "30 minut pred"; +"reminder_45_MINUTES_BEFORE" = "45 minut pred"; +"reminder_1_HOUR_BEFORE" = "1 uro pred"; +"reminder_2_HOURS_BEFORE" = "2 uri pred"; +"reminder_5_HOURS_BEFORE" = "5 ur pred"; +"reminder_15_HOURS_BEFORE" = "15 ur pred"; +"reminder_1_DAY_BEFORE" = "1 dan pred"; +"reminder_2_DAYS_BEFORE" = "2 dneva pred"; +"reminder_1_WEEK_BEFORE" = "1 teden pred"; +"reminder_CUSTOM" = "Po meri..."; + +"reminder_MINUTES" = "minute"; +"reminder_HOURS" = "ure"; +"reminder_DAYS" = "dnevi"; +"reminder_BEFORE" = "pred"; +"reminder_AFTER" = "po"; +"reminder_START" = "dogodek se začne"; +"reminder_END" = "dogodek se konča"; +"Reminder Details" = "Podrobnosti opomnika"; + +"Choose a Reminder Action" = "Izberi dejanja opomnika"; +"Show an Alert" = "Prikaži opozorilo"; +"Send an E-mail" = "Pošlji e-pošto"; +"Email Organizer" = "Organizator e-pošte"; +"Email Attendees" = "E-poštni udeleženci"; + +"zoom_400" = "400%"; +"zoom_200" = "200%"; +"zoom_100" = "100%"; +"zoom_50" = "50%"; +"zoom_25" = "25%"; + +/* transparency */ + +"Show Time as Free" = "Prikaži čas kot prosto"; + +/* email notifications */ +"Send Appointment Notifications" = "Pošlji obvestilo o sestanku"; + +/* validation errors */ + +validate_notitle = "Naslov ni vpisan, nadaljujem?"; +validate_invalid_startdate = "Napačeno polje začetni datum!"; +validate_invalid_enddate = "Napačno polje končni datum!"; +validate_endbeforestart = "Vnešeni končni datum je pred začetnim datumom."; + +"Events" = "Dogodki"; +"Tasks" = "Opravila"; +"Show completed tasks" = "Prikaži dokončana opravila"; + +/* tabs */ +"Task" = "Opravilo"; +"Event" = "Dogodek"; +"Recurrence" = "Ponovitev"; + +/* toolbar */ +"New Event" = "Nov dogodek"; +"New Task" = "Novo opravilo"; +"Edit" = "Uredi"; +"Delete" = "Briši"; +"Go to Today" = "Pojdi na danes"; +"Day View" = "Dnevni pregled"; +"Week View" = "Tedenski pregled"; +"Month View" = "Mesečni pregled"; +"Reload" = "Ponovno naloži"; + +"eventPartStatModificationError" = "Tvoj status sodelovanja se ne da spremeniti."; + +/* menu */ +"New Event..." = "Novi dogodek..."; +"New Task..." = "Novo opravilo..."; +"Edit Selected Event..." = "Uredi izbran dogodek..."; +"Delete Selected Event" = "Briši izbran dogodek"; +"Select All" = "Označi vse"; +"Workweek days only" = "Samo delovni dnevi tedna"; +"Tasks in View" = "Opravila v pregledu"; + +"eventDeleteConfirmation" = "Naslednji dogodki bodo brisani:"; +"taskDeleteConfirmation" = "Naslednja opravila so bila brisani:"; +"Would you like to continue?" = "Želiš nadaljevati?"; + +"You cannot remove nor unsubscribe from your personal calendar." += "Ne moreš se odstraniti ali odjaviti iz osebnega koledarja."; +"Are you sure you want to delete the calendar \"%{0}\"?" += "Si prepirčan, da želiš brisati izbrani koledar \"%{0}\"?"; + +/* Legend */ +"Participant" = "Sodelujoči"; +"Optional Participant" = "Neobvezni sodelujoči"; +"Non Participant" = "Ne sodelujoči"; +"Chair" = "Stol"; + +"Needs action" = "Potrebuje ukrepanje"; +"Accepted" = "Sprejet"; +"Declined" = "Zavrnjen"; +"Tentative" = "Pogojno"; + +"Free" = "Prosto"; +"Busy" = "Zasedeno"; +"Maybe busy" = "Mogoče zasedeno"; +"No free-busy information" = "Ni informacije o prosto-zasedeno"; + +/* FreeBusy panel buttons and labels */ +"Suggest time slot:" = "Predlagaj časovno režo:"; +"Zoom:" = "Povečaj:"; +"Previous slot" = "Prejšnja reža"; +"Next slot" = "Naslednja reža"; +"Previous hour" = "Prejšnja ura"; +"Next hour" = "Naslednja ura"; +"Work days only" = "Samo delovni dnevi"; +"The whole day" = "Celi dan"; +"Between" = "Med"; +"and" = "in"; + +"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?" += "Obstaja časovni konflikt med enim ali več udeleženci.\nŽeliš vseeno obdržati trenutne nastavitve?"; + +/* apt list */ +"Title" = "Naslov"; +"Start" = "Začetek"; +"End" = "Konec"; +"Due Date" = "Datum zapadlosti"; +"Location" = "Mesto"; + +"(Private Event)" = "(Osebni dogodek)"; + +vevent_class0 = "(Javni dogodek)"; +vevent_class1 = "(Osebni dogodek)"; +vevent_class2 = "(Zaupni dogodek)"; + +"Priority" = "Prioriteta"; +"Category" = "Kategorija"; + +vtodo_class0 = "(Javno opravilo)"; +vtodo_class1 = "(Osebno opravilo)"; +vtodo_class2 = "(Zaupno opravilo)"; + +"closeThisWindowMessage" = "Hvala. Smeš zapreti to okno ali pogledati tvoje"; +"Multicolumn Day View" = "Dnevni pogled v več stolpcih"; + +"Please select an event or a task." = "Prosim izberi dogodek ali opravilo."; + +"editRepeatingItem" = "Element, ki ga urejaš, je ponavljajoči element. Želiš urediti vse ponovite ali samo eno instanco?"; +"button_thisOccurrenceOnly" = "Le ta ponovitev"; +"button_allOccurrences" = "Vse ponovitve"; + +/* Properties dialog */ +"Name:" = "Ime:"; +"Color:" = "Barva:"; + +"Include in free-busy" = "Vključi v prosto-zasedeno"; + +"Synchronization" = "Sinhronizacija"; +"Synchronize" = "Sinhroniziraj"; +"Tag:" = "Značka:"; + +"Display" = "Prikaz"; +"Show alarms" = "Prikaži alarme"; +"Show tasks" = "Prikaži opravila"; + +"Notifications" = "Obvestila"; +"Receive a mail when I modify my calendar" = "Prejmi pošto, ko spremenim moj koledar"; +"Receive a mail when someone else modifies my calendar" = "Prejmi pošto, ko kdorkoli drugi spremeni moj koledar"; +"When I modify my calendar, send a mail to:" = "Ko spremenim moj koledar, pošlji pošto za:"; + +"Links to this Calendar" = "Povezave do tega koledarja"; +"Authenticated User Access" = "Preverjeni uporabniški dostop"; +"CalDAV URL" = "CalDAV URL:"; +"WebDAV ICS URL" = "WebDAV ICS URL"; +"WebDAV XML URL" = "WebDAV XML URL"; + +/* Error messages */ +"dayFieldInvalid" = "Prosim določi numerično vrednost v polju Dnevi večje ali enko 1."; +"weekFieldInvalid" = "Prosim določi numerično vrednost v polje Tedni večje ali enako 1."; +"monthFieldInvalid" = "Prosim določi numerično vrednost v polje Meseci večje ali enako 1."; +"monthDayFieldInvalid" = "Prosim določi numerično vrednost v polje mesec dan večje ali enako 1."; +"yearFieldInvalid" = "Prosim določi numerično vrednost v polje Leta večje ali enako 1."; +"appointmentFieldInvalid" = "Prosim določi numerično vrednost v polje Sesetanki večje ali enako 1."; +"recurrenceUnsupported" = "Ta tip ponovitve trenutno ni podprt."; +"Please specify a calendar name." = "Prosim določi ime koledarja."; +"tagNotDefined" = "Določiti moraš značko, če želiš sinhronizirati ta koledar."; +"tagAlreadyExists" = "Značka, ki si jo določil, je že povezana z drugim koledarjem."; +"tagHasChanged" = "Če spremeniš značko tvojega koledarja, boš moral ponovno naložiti podatke na tvoji mobilni napravi.\nNadaljujem?"; +"tagWasAdded" = "Če želiš sinhronizirati ta koledar, boš moral ponovno naložiti podatke na tvoji mobilni napravi.\nNadaljujem?"; +"tagWasRemoved" = "Če umakneš ta koledar iz sinhronizacije, boš moral ponovno naložiti podatke na tvoji mobilni napravi.\nNadaljujem?"; +"DestinationCalendarError" = "Izvorni in ciljni koledarji so enaki. Prosim poskusi kopirati drugi koledar."; +"EventCopyError" = "Kopiranje ni uspelo. Prosim poskusi kopirati v drugi koledar."; +"Please select at least one calendar" = "Prosim določi vsaj en koledar."; + +"Open Task..." = "Odprto opravilo..."; +"Mark Completed" = "Označitev dokončana"; +"Delete Task" = "Briši opravilo"; +"Delete Event" = "Briši dogodek"; +"Copy event to my calendar" = "Kopiraj dogodek v moj koledar"; +"View Raw Source" = "Preglej surovi vir"; + +"Subscribe to a web calendar..." = "Naroči na spletni koledar..."; +"URL of the Calendar" = "URL koledarja"; +"Web Calendar" = "Spletni koledar"; +"Reload on login" = "Ponovno naloži ob prijavi"; +"Invalid number." = "Napačno število."; +"Please identify yourself to %{0}" = "Prosim predstavi se %{0}"; diff --git a/UI/Templates/SOGoACLSlovenianAdditionAdvisory.wox b/UI/Templates/SOGoACLSlovenianAdditionAdvisory.wox new file mode 100644 index 000000000..ed35c32b5 --- /dev/null +++ b/UI/Templates/SOGoACLSlovenianAdditionAdvisory.wox @@ -0,0 +1,28 @@ + + + + + + vas je dodal + + + + vas je dodal na seznam za dostop za njihovo mapo. + + + + diff --git a/UI/Templates/SOGoACLSlovenianRemovalAdvisory.wox b/UI/Templates/SOGoACLSlovenianRemovalAdvisory.wox new file mode 100644 index 000000000..dce122005 --- /dev/null +++ b/UI/Templates/SOGoACLSlovenianRemovalAdvisory.wox @@ -0,0 +1,28 @@ + + + + + + vas je odstranil + + + + vas je odstranil iz seznama za dostop do njihove mape. + + + + diff --git a/UI/Templates/SOGoFolderSlovenianAdditionAdvisory.wox b/UI/Templates/SOGoFolderSlovenianAdditionAdvisory.wox new file mode 100644 index 000000000..ed0de90e5 --- /dev/null +++ b/UI/Templates/SOGoFolderSlovenianAdditionAdvisory.wox @@ -0,0 +1,23 @@ + + + + + + je bila ustvarjena + + + +The mapa je bila ustvarjena. + + + + diff --git a/UI/Templates/SOGoFolderSlovenianRemovalAdvisory.wox b/UI/Templates/SOGoFolderSlovenianRemovalAdvisory.wox new file mode 100644 index 000000000..e52f447fa --- /dev/null +++ b/UI/Templates/SOGoFolderSlovenianRemovalAdvisory.wox @@ -0,0 +1,23 @@ + + + + + + je bila izbrisana + + + +The mapa je bila izbrisana. + + + + From 366ad44cd168b0e81f842a1edf65ca1e0e27f061 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 22 Jul 2015 16:42:06 -0400 Subject: [PATCH 12/61] Fix .wod files for English and Basque --- .../SOGoMailBasqueForward.wo/SOGoMailBasqueForward.wod | 9 --------- .../SOGoMailEnglishForward.wo/SOGoMailEnglishForward.wod | 9 --------- 2 files changed, 18 deletions(-) diff --git a/SoObjects/Mailer/SOGoMailBasqueForward.wo/SOGoMailBasqueForward.wod b/SoObjects/Mailer/SOGoMailBasqueForward.wo/SOGoMailBasqueForward.wod index 96bb247ee..f2436acc9 100755 --- a/SoObjects/Mailer/SOGoMailBasqueForward.wo/SOGoMailBasqueForward.wod +++ b/SoObjects/Mailer/SOGoMailBasqueForward.wo/SOGoMailBasqueForward.wod @@ -86,12 +86,3 @@ signaturePlacementOnBottom: WOConditional { condition = signaturePlacementOnTop; negate = YES; } - -signaturePlacementOnTop: WOConditional { - condition = signaturePlacementOnTop; -} - -signaturePlacementOnBottom: WOConditional { - condition = signaturePlacementOnTop; - negate = YES; -} diff --git a/SoObjects/Mailer/SOGoMailEnglishForward.wo/SOGoMailEnglishForward.wod b/SoObjects/Mailer/SOGoMailEnglishForward.wo/SOGoMailEnglishForward.wod index 96bb247ee..f2436acc9 100644 --- a/SoObjects/Mailer/SOGoMailEnglishForward.wo/SOGoMailEnglishForward.wod +++ b/SoObjects/Mailer/SOGoMailEnglishForward.wo/SOGoMailEnglishForward.wod @@ -86,12 +86,3 @@ signaturePlacementOnBottom: WOConditional { condition = signaturePlacementOnTop; negate = YES; } - -signaturePlacementOnTop: WOConditional { - condition = signaturePlacementOnTop; -} - -signaturePlacementOnBottom: WOConditional { - condition = signaturePlacementOnTop; - negate = YES; -} From 6830d6d930b1b07e1732e7108b11f78ce4e40f7c Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 22 Jul 2015 16:45:42 -0400 Subject: [PATCH 13/61] Calendar module optimizations in multidomain setup --- NEWS | 1 + .../Appointments/SOGoAppointmentObject.m | 32 +++++++++---------- .../Appointments/iCalEntityObject+SOGo.m | 5 +-- SoObjects/Appointments/iCalPerson+SOGo.h | 7 ++-- SoObjects/Appointments/iCalPerson+SOGo.m | 23 ++++++++++--- UI/Common/UIxAclEditor.m | 14 ++++++-- UI/Common/UIxUserRightsEditor.m | 19 +++++++---- UI/MailPartViewers/UIxMailPartICalActions.m | 2 +- UI/Scheduler/UIxAppointmentEditor.m | 2 +- 9 files changed, 69 insertions(+), 36 deletions(-) diff --git a/NEWS b/NEWS index dde42eeaf..867b4ea97 100644 --- a/NEWS +++ b/NEWS @@ -26,6 +26,7 @@ Bug fixes - fixed computation of GlobalObjectId (#3235) - fixed EAS conversation ID issues on BB10 (#3152) - fixed CR/LF printing in event's description (#3228) + - optimized Calendar module in multidomain configurations 2.3.0 (2015-06-01) ------------------- diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index e26bb405d..158a53f6b 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -1,5 +1,5 @@ /* - Copyright (C) 2007-2014 Inverse inc. + Copyright (C) 2007-2015 Inverse inc. Copyright (C) 2004-2005 SKYRIX Software AG This file is part of SOGo @@ -317,7 +317,7 @@ enumerator = [attendees objectEnumerator]; while ((currentAttendee = [enumerator nextObject])) { - currentUID = [currentAttendee uid]; + currentUID = [currentAttendee uidInContext: context]; if (currentUID) [self _removeEventFromUID: currentUID owner: owner @@ -398,7 +398,7 @@ enumerator = [updateAttendees objectEnumerator]; while ((currentAttendee = [enumerator nextObject])) { - currentUID = [currentAttendee uid]; + currentUID = [currentAttendee uidInContext: context]; if (currentUID) [self _addOrUpdateEvent: newEvent forUID: currentUID @@ -438,7 +438,7 @@ while ((currentAttendee = [enumerator nextObject])) { - currentUID = [currentAttendee uid]; + currentUID = [currentAttendee uidInContext: context]; if (currentUID) { @@ -520,7 +520,7 @@ enumerator = [theAttendees objectEnumerator]; while ((currentAttendee = [enumerator nextObject])) { - currentUID = [currentAttendee uid]; + currentUID = [currentAttendee uidInContext: context]; if (currentUID) { [attendees addObject: currentUID]; @@ -635,7 +635,7 @@ for (i = 0; i < [theAttendees count]; i++) { currentAttendee = [theAttendees objectAtIndex: i]; - if ([[currentAttendee uid] isEqualToString: currentUID]) + if ([[currentAttendee uidInContext: context] isEqualToString: currentUID]) break; else currentAttendee = nil; @@ -713,7 +713,7 @@ enumerator = [attendees objectEnumerator]; while ((currentAttendee = [enumerator nextObject])) { - currentUID = [currentAttendee uid]; + currentUID = [currentAttendee uidInContext: context]; if (currentUID) [self _addOrUpdateEvent: newEvent forUID: currentUID @@ -838,7 +838,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent enumerator = [updatedAttendees objectEnumerator]; while ((currentAttendee = [enumerator nextObject])) { - currentUID = [currentAttendee uid]; + currentUID = [currentAttendee uidInContext: context]; if (currentUID) [self _addOrUpdateEvent: newEvent forUID: currentUID @@ -1215,7 +1215,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent { [delegates addObject: otherDelegate]; - delegatedUID = [otherDelegate uid]; + delegatedUID = [otherDelegate uidInContext: context]; if (delegatedUID) // Delegate attendee is a local user; remove event from their calendar [self _removeEventFromUID: delegatedUID @@ -1244,7 +1244,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent if (addDelegate) { - delegatedUID = [delegate uid]; + delegatedUID = [delegate uidInContext: context]; delegates = [NSArray arrayWithObject: delegate]; [event addToAttendees: delegate]; @@ -1271,11 +1271,11 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent [self sendResponseToOrganizer: event from: ownerUser]; - organizerUID = [[event organizer] uid]; + organizerUID = [[event organizer] uidInContext: context]; // Event is an exception to a recurring event; retrieve organizer from master event if (!organizerUID) - organizerUID = [[(iCalEntityObject*)[[event parent] firstChildWithTag: [self componentTag]] organizer] uid]; + organizerUID = [[(iCalEntityObject*)[[event parent] firstChildWithTag: [self componentTag]] organizer] uidInContext: context]; if (organizerUID) // Update the attendee in organizer's calendar. @@ -1302,7 +1302,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent for (i = 0; i < [attendees count]; i++) { att = [attendees objectAtIndex: i]; - uid = [att uid]; + uid = [att uidInContext: context]; if (uid && att != attendee && ![uid isEqualToString: delegatedUID]) [self _updateAttendee: attendee withDelegate: delegate @@ -1461,7 +1461,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent { if (delegate && ![[delegate email] isEqualToString: [attendee delegatedTo]]) { - delegatedUid = [delegate uid]; + delegatedUid = [delegate uidInContext: context]; if (delegatedUid) delegatedUser = [SOGoUser userWithLogin: delegatedUid]; if (delegatedUser != nil && [event userIsOrganizer: delegatedUser]) @@ -1831,7 +1831,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent // We now make sure that the organizer, if managed by SOGo, is using // its default email when creating events and inviting attendees. - uid = [[SOGoUserManager sharedUserManager] getUIDForEmail: [[event organizer] rfc822Email]]; + uid = [[event organizer] uidInContext: context]; if (uid) { NSDictionary *defaultIdentity; @@ -2144,7 +2144,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent // occurence, and invite someone, the PUT will have the organizer in the // recurrence-id and not in the master event. We must fix this, otherwise // SOGo will break. - if (!recurrenceId && ![[[[[newEvent parent] events] objectAtIndex: 0] organizer] uid]) + if (!recurrenceId && ![[[[[newEvent parent] events] objectAtIndex: 0] organizer] uidInContext: context]) [[[[newEvent parent] events] objectAtIndex: 0] setOrganizer: [newEvent organizer]]; if (userIsOrganizer) diff --git a/SoObjects/Appointments/iCalEntityObject+SOGo.m b/SoObjects/Appointments/iCalEntityObject+SOGo.m index 48ba026c3..cfdfc445e 100644 --- a/SoObjects/Appointments/iCalEntityObject+SOGo.m +++ b/SoObjects/Appointments/iCalEntityObject+SOGo.m @@ -184,16 +184,17 @@ NSNumber *iCalDistantFutureNumber = nil; NSArray *oldAttendees; unsigned int count, max; iCalPerson *currentAttendee; - NSString *userID; + NSString *userID, *domain; userID = [user login]; + domain = [user domain]; oldAttendees = [self attendees]; max = [oldAttendees count]; newAttendees = [NSMutableArray arrayWithCapacity: max]; for (count = 0; count < max; count++) { currentAttendee = [oldAttendees objectAtIndex: count]; - if (![[currentAttendee uid] isEqualToString: userID]) + if (![[currentAttendee uidInDomain: domain] isEqualToString: userID]) [newAttendees addObject: currentAttendee]; } diff --git a/SoObjects/Appointments/iCalPerson+SOGo.h b/SoObjects/Appointments/iCalPerson+SOGo.h index 3ce9d31a5..87a499f9d 100644 --- a/SoObjects/Appointments/iCalPerson+SOGo.h +++ b/SoObjects/Appointments/iCalPerson+SOGo.h @@ -1,9 +1,6 @@ /* iCalPerson+SOGo.h - this file is part of SOGo * - * Copyright (C) 2007-2012 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Ludovic Marcotte + * Copyright (C) 2007-2015 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,6 +29,8 @@ - (NSString *) mailAddress; - (NSString *) uid; +- (NSString *) uidInDomain: (NSString *) domain; +- (NSString *) uidInContext: (WOContext *) context; - (NSString *) contactIDInContext: (WOContext *) context; - (BOOL) hasSentBy; - (NSString *) sentBy; diff --git a/SoObjects/Appointments/iCalPerson+SOGo.m b/SoObjects/Appointments/iCalPerson+SOGo.m index e3473c969..4180ff866 100644 --- a/SoObjects/Appointments/iCalPerson+SOGo.m +++ b/SoObjects/Appointments/iCalPerson+SOGo.m @@ -1,9 +1,6 @@ /* iCalPerson+SOGo.m - this file is part of SOGo * - * Copyright (C) 2007-2012 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Ludovic Marcotte + * Copyright (C) 2007-2015 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -67,6 +64,24 @@ static SOGoUserManager *um = nil; return [um getUIDForEmail: [self rfc822Email]]; } +- (NSString *) uidInContext: (WOContext *) context +{ + NSString *domain; + + domain = [[context activeUser] domain]; + + return [self uidInDomain: domain]; +} + +- (NSString *) uidInDomain: (NSString *) domain +{ + if (!um) + um = [SOGoUserManager sharedUserManager]; + + return [um contactInfosForUserWithUIDorEmail: [self rfc822Email] + inDomain: domain]; +} + - (NSString *) contactIDInContext: (WOContext *) context { NSString *domain, *uid; diff --git a/UI/Common/UIxAclEditor.m b/UI/Common/UIxAclEditor.m index 8c39a7ebd..14c0f64bd 100644 --- a/UI/Common/UIxAclEditor.m +++ b/UI/Common/UIxAclEditor.m @@ -126,11 +126,21 @@ - (NSString *) currentUserDisplayName { + NSDictionary *infos; + NSString *uid; SOGoUserManager *um; um = [SOGoUserManager sharedUserManager]; - - return [um getFullEmailForUID: [self currentUser]]; + uid = [self currentUser]; + infos = [um contactInfosForUserWithUIDorEmail: uid inDomain: [[context activeUser] domain]]; + if (infos) + { + return [NSString stringWithFormat: @"%@ <%@>", + [infos objectForKey: @"cn"], + [infos objectForKey: @"c_email"]]; + } + else + return uid; } - (BOOL) canSubscribeUsers diff --git a/UI/Common/UIxUserRightsEditor.m b/UI/Common/UIxUserRightsEditor.m index 3519abc0e..79f631326 100644 --- a/UI/Common/UIxUserRightsEditor.m +++ b/UI/Common/UIxUserRightsEditor.m @@ -1,8 +1,6 @@ /* UIxUserRightsEditor.m - this file is part of SOGo * - * Copyright (C) 2007-2010 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2007-2015 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +18,8 @@ * Boston, MA 02111-1307, USA. */ +#import + #import #import #import @@ -86,6 +86,7 @@ - (NSString *) userDisplayName { + NSDictionary *infos; SOGoUserManager *um; if ([self userIsAnonymousUser]) @@ -99,9 +100,15 @@ else { um = [SOGoUserManager sharedUserManager]; - return [NSString stringWithFormat: @"%@ <%@>", - [um getCNForUID: uid], - [um getEmailForUID: uid]]; + infos = [um contactInfosForUserWithUIDorEmail: uid inDomain: [[context activeUser] domain]]; + if (infos) + { + return [NSString stringWithFormat: @"%@ <%@>", + [infos objectForKey: @"cn"], + [infos objectForKey: @"c_email"]]; + } + else + return uid; } } diff --git a/UI/MailPartViewers/UIxMailPartICalActions.m b/UI/MailPartViewers/UIxMailPartICalActions.m index e068ebbe5..567412818 100644 --- a/UI/MailPartViewers/UIxMailPartICalActions.m +++ b/UI/MailPartViewers/UIxMailPartICalActions.m @@ -300,7 +300,7 @@ delegatedAttendee = [iCalPerson new]; [delegatedAttendee autorelease]; [delegatedAttendee setEmail: delegatedEmail]; - delegatedUid = [delegatedAttendee uid]; + delegatedUid = [delegatedAttendee uidInDomain: [user domain]]; if (delegatedUid) { SOGoUser *delegatedUser; diff --git a/UI/Scheduler/UIxAppointmentEditor.m b/UI/Scheduler/UIxAppointmentEditor.m index 653226628..314ee6681 100644 --- a/UI/Scheduler/UIxAppointmentEditor.m +++ b/UI/Scheduler/UIxAppointmentEditor.m @@ -452,7 +452,7 @@ delegatedAttendee = [iCalPerson new]; [delegatedAttendee autorelease]; [delegatedAttendee setEmail: delegatedEmail]; - delegatedUid = [delegatedAttendee uid]; + delegatedUid = [delegatedAttendee uidInDomain: [user domain]]; if (delegatedUid) { SOGoUser *delegatedUser; From b6dee056ca98131fb36abff11cf0850e7b8de921 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 23 Jul 2015 08:46:08 -0400 Subject: [PATCH 14/61] (fix) Return value of [iCalPerson+SOGo uidInDomain:] --- SoObjects/Appointments/iCalPerson+SOGo.m | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/SoObjects/Appointments/iCalPerson+SOGo.m b/SoObjects/Appointments/iCalPerson+SOGo.m index 4180ff866..986960902 100644 --- a/SoObjects/Appointments/iCalPerson+SOGo.m +++ b/SoObjects/Appointments/iCalPerson+SOGo.m @@ -75,11 +75,18 @@ static SOGoUserManager *um = nil; - (NSString *) uidInDomain: (NSString *) domain { + NSDictionary *contact; + NSString *uid; + if (!um) um = [SOGoUserManager sharedUserManager]; - return [um contactInfosForUserWithUIDorEmail: [self rfc822Email] - inDomain: domain]; + uid = nil; + contact = [um contactInfosForUserWithUIDorEmail: [self rfc822Email] inDomain: domain]; + if (contact) + uid = [contact valueForKey: @"c_uid"]; + + return uid; } - (NSString *) contactIDInContext: (WOContext *) context From 4b19e64071a3c8173a63714c633e9a94b76fd7e5 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 23 Jul 2015 10:22:36 -0400 Subject: [PATCH 15/61] (fix) fallback to utf-8/latin1 in rare decoding error cases - this is ugly --- UI/MailPartViewers/UIxMailPartHTMLViewer.m | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/UI/MailPartViewers/UIxMailPartHTMLViewer.m b/UI/MailPartViewers/UIxMailPartHTMLViewer.m index ca41c7f62..f1ead5ffd 100644 --- a/UI/MailPartViewers/UIxMailPartHTMLViewer.m +++ b/UI/MailPartViewers/UIxMailPartHTMLViewer.m @@ -872,6 +872,19 @@ static NSData* _sanitizeContent(NSData *theData) usingEncodingNamed: [[bodyInfo objectForKey:@"parameterList"] objectForKey: @"charset"]]; + // In some rare cases (like #3276), we can get utterly broken email messages where + // HTML parts are wrongly encoded. We try to fall back to UTF-8 if that happens and + // if it still happens, we fall back to ISO-Latin-1. + if (!s) + { + s = [[NSString alloc] initWithData: preparsedContent encoding: NSUTF8StringEncoding]; + + if (!s) + s = [[NSString alloc] initWithData: preparsedContent encoding: NSISOLatin1StringEncoding]; + + AUTORELEASE(s); + } + #if BYTE_ORDER == BIG_ENDIAN preparsedContent = [s dataUsingEncoding: NSUTF16BigEndianStringEncoding]; enc = XML_CHAR_ENCODING_UTF16BE; From 5c3cdda186dff8c39fb3a13de4b51d79efc23cc3 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 23 Jul 2015 11:09:04 -0400 Subject: [PATCH 16/61] Add Chinese (Taiwan) translation --- .tx/config | 11 + NEWS | 1 + .../ChineseTaiwan.lproj/Localizable.strings | 67 +++ SoObjects/Appointments/GNUmakefile | 2 +- .../ChineseTaiwan.lproj/Localizable.strings | 2 + SoObjects/Contacts/GNUmakefile | 2 +- .../ChineseTaiwan.lproj/Localizable.strings | 2 + SoObjects/Mailer/GNUmakefile | 6 +- .../SOGoMailChineseTaiwanForward.html | 16 + .../SOGoMailChineseTaiwanForward.wod | 88 +++ .../SOGoMailChineseTaiwanReply.html | 16 + .../SOGoMailChineseTaiwanReply.wod | 106 ++++ SoObjects/Mailer/SOGoMailForward.h | 3 + SoObjects/Mailer/SOGoMailForward.m | 3 + SoObjects/Mailer/SOGoMailReply.h | 3 + SoObjects/Mailer/SOGoMailReply.m | 3 + SoObjects/SOGo/SOGoDefaults.plist | 2 +- Tests/Integration/preferences.py | 2 +- .../ChineseTaiwan.lproj/Localizable.strings | 15 + UI/AdministrationUI/GNUmakefile | 2 +- .../ChineseTaiwan.lproj/Localizable.strings | 118 ++++ UI/Common/GNUmakefile | 2 +- .../ChineseTaiwan.lproj/Localizable.strings | 215 +++++++ UI/Contacts/GNUmakefile | 2 +- .../ChineseTaiwan.lproj/Localizable.strings | 48 ++ UI/MailPartViewers/GNUmakefile | 2 +- .../ChineseTaiwan.lproj/Localizable.strings | 308 ++++++++++ UI/MailerUI/GNUmakefile | 2 +- UI/MainUI/Arabic.lproj/Localizable.strings | 1 + UI/MainUI/Basque.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + UI/MainUI/Catalan.lproj/Localizable.strings | 1 + UI/MainUI/ChineseTaiwan.lproj/Locale | 35 ++ .../ChineseTaiwan.lproj/Localizable.strings | 84 +++ UI/MainUI/Czech.lproj/Localizable.strings | 1 + UI/MainUI/Danish.lproj/Localizable.strings | 1 + UI/MainUI/Dutch.lproj/Localizable.strings | 1 + UI/MainUI/English.lproj/Localizable.strings | 1 + UI/MainUI/Finnish.lproj/Localizable.strings | 1 + UI/MainUI/French.lproj/Localizable.strings | 1 + UI/MainUI/GNUmakefile | 2 +- UI/MainUI/German.lproj/Localizable.strings | 1 + UI/MainUI/Hungarian.lproj/Localizable.strings | 1 + UI/MainUI/Icelandic.lproj/Localizable.strings | 1 + UI/MainUI/Italian.lproj/Localizable.strings | 1 + .../NorwegianBokmal.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + UI/MainUI/Polish.lproj/Localizable.strings | 1 + UI/MainUI/Russian.lproj/Localizable.strings | 1 + UI/MainUI/Slovenian.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../SpanishSpain.lproj/Localizable.strings | 1 + UI/MainUI/Swedish.lproj/Localizable.strings | 1 + UI/MainUI/Ukrainian.lproj/Localizable.strings | 1 + UI/MainUI/Welsh.lproj/Localizable.strings | 1 + .../Arabic.lproj/Localizable.strings | 1 + .../Basque.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../Catalan.lproj/Localizable.strings | 1 + .../ChineseTaiwan.lproj/Localizable.strings | 329 ++++++++++ .../Czech.lproj/Localizable.strings | 1 + .../Danish.lproj/Localizable.strings | 1 + .../Dutch.lproj/Localizable.strings | 1 + .../English.lproj/Localizable.strings | 1 + .../Finnish.lproj/Localizable.strings | 1 + .../French.lproj/Localizable.strings | 1 + UI/PreferencesUI/GNUmakefile | 2 +- .../German.lproj/Localizable.strings | 1 + .../Hungarian.lproj/Localizable.strings | 1 + .../Icelandic.lproj/Localizable.strings | 1 + .../Italian.lproj/Localizable.strings | 1 + .../NorwegianBokmal.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../Polish.lproj/Localizable.strings | 1 + .../Russian.lproj/Localizable.strings | 1 + .../Slovak.lproj/Localizable.strings | 1 + .../Slovenian.lproj/Localizable.strings | 1 + .../Localizable.strings | 1 + .../SpanishSpain.lproj/Localizable.strings | 1 + .../Swedish.lproj/Localizable.strings | 1 + .../Ukrainian.lproj/Localizable.strings | 1 + .../Welsh.lproj/Localizable.strings | 1 + .../ChineseTaiwan.lproj/Localizable.strings | 565 ++++++++++++++++++ UI/Scheduler/GNUmakefile | 2 +- .../SOGoACLChineseTaiwanAdditionAdvisory.wox | 28 + ...GoACLChineseTaiwanModificationAdvisory.wox | 28 + .../SOGoACLChineseTaiwanRemovalAdvisory.wox | 28 + ...OGoFolderChineseTaiwanAdditionAdvisory.wox | 22 + ...SOGoFolderChineseTaiwanRemovalAdvisory.wox | 23 + 89 files changed, 2231 insertions(+), 15 deletions(-) create mode 100644 SoObjects/Appointments/ChineseTaiwan.lproj/Localizable.strings create mode 100644 SoObjects/Contacts/ChineseTaiwan.lproj/Localizable.strings create mode 100644 SoObjects/Mailer/ChineseTaiwan.lproj/Localizable.strings create mode 100644 SoObjects/Mailer/SOGoMailChineseTaiwanForward.wo/SOGoMailChineseTaiwanForward.html create mode 100644 SoObjects/Mailer/SOGoMailChineseTaiwanForward.wo/SOGoMailChineseTaiwanForward.wod create mode 100644 SoObjects/Mailer/SOGoMailChineseTaiwanReply.wo/SOGoMailChineseTaiwanReply.html create mode 100644 SoObjects/Mailer/SOGoMailChineseTaiwanReply.wo/SOGoMailChineseTaiwanReply.wod create mode 100644 UI/AdministrationUI/ChineseTaiwan.lproj/Localizable.strings create mode 100644 UI/Common/ChineseTaiwan.lproj/Localizable.strings create mode 100644 UI/Contacts/ChineseTaiwan.lproj/Localizable.strings create mode 100644 UI/MailPartViewers/ChineseTaiwan.lproj/Localizable.strings create mode 100644 UI/MailerUI/ChineseTaiwan.lproj/Localizable.strings create mode 100644 UI/MainUI/ChineseTaiwan.lproj/Locale create mode 100644 UI/MainUI/ChineseTaiwan.lproj/Localizable.strings create mode 100644 UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings create mode 100644 UI/Scheduler/ChineseTaiwan.lproj/Localizable.strings create mode 100644 UI/Templates/SOGoACLChineseTaiwanAdditionAdvisory.wox create mode 100644 UI/Templates/SOGoACLChineseTaiwanModificationAdvisory.wox create mode 100644 UI/Templates/SOGoACLChineseTaiwanRemovalAdvisory.wox create mode 100644 UI/Templates/SOGoFolderChineseTaiwanAdditionAdvisory.wox create mode 100644 UI/Templates/SOGoFolderChineseTaiwanRemovalAdvisory.wox diff --git a/.tx/config b/.tx/config index ee12af198..9a5f5d566 100644 --- a/.tx/config +++ b/.tx/config @@ -28,6 +28,7 @@ trans.sk = UI/MailerUI/Slovak.lproj/Localizable.strings trans.sl_SI = UI/MailerUI/Slovenian.lproj/Localizable.strings trans.sv = UI/MailerUI/Swedish.lproj/Localizable.strings trans.uk = UI/MailerUI/Ukrainian.lproj/Localizable.strings +trans.zh_TW = UI/MailerUI/ChineseTaiwan.lproj/Localizable.strings [sogo.ui-preferencesui] source_file = UI/PreferencesUI/English.lproj/Localizable.strings @@ -56,6 +57,7 @@ trans.sk = UI/PreferencesUI/Slovak.lproj/Localizable.strings trans.sl_SI = UI/PreferencesUI/Slovenian.lproj/Localizable.strings trans.sv = UI/PreferencesUI/Swedish.lproj/Localizable.strings trans.uk = UI/PreferencesUI/Ukrainian.lproj/Localizable.strings +trans.zh_TW = UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings [sogo.ui-scheduler] source_file = UI/Scheduler/English.lproj/Localizable.strings @@ -84,6 +86,7 @@ trans.sk = UI/Scheduler/Slovak.lproj/Localizable.strings trans.sl_SI = UI/Scheduler/Slovenian.lproj/Localizable.strings trans.sv = UI/Scheduler/Swedish.lproj/Localizable.strings trans.uk = UI/Scheduler/Ukrainian.lproj/Localizable.strings +trans.zh_TW = UI/Scheduler/ChineseTaiwan.lproj/Localizable.strings [sogo.ui-contacts] source_file = UI/Contacts/English.lproj/Localizable.strings @@ -112,6 +115,7 @@ trans.sk = UI/Contacts/Slovak.lproj/Localizable.strings trans.sl_SI = UI/Contacts/Slovenian.lproj/Localizable.strings trans.sv = UI/Contacts/Swedish.lproj/Localizable.strings trans.uk = UI/Contacts/Ukrainian.lproj/Localizable.strings +trans.zh_TW = UI/Contacts/ChineseTaiwan.lproj/Localizable.strings [sogo.ui-mainui] source_file = UI/MainUI/English.lproj/Localizable.strings @@ -140,6 +144,7 @@ trans.sk = UI/MainUI/Slovak.lproj/Localizable.strings trans.sl_SI = UI/MainUI/Slovenian.lproj/Localizable.strings trans.sv = UI/MainUI/Swedish.lproj/Localizable.strings trans.uk = UI/MainUI/Ukrainian.lproj/Localizable.strings +trans.zh_TW = UI/MainUI/ChineseTaiwan.lproj/Localizable.strings [sogo.ui-common] source_file = UI/Common/English.lproj/Localizable.strings @@ -168,6 +173,7 @@ trans.sk = UI/Common/Slovak.lproj/Localizable.strings trans.sl_SI = UI/Common/Slovenian.lproj/Localizable.strings trans.sv = UI/Common/Swedish.lproj/Localizable.strings trans.uk = UI/Common/Ukrainian.lproj/Localizable.strings +trans.zh_TW = UI/Common/ChineseTaiwan.lproj/Localizable.strings [sogo.ui-administrationui] source_file = UI/AdministrationUI/English.lproj/Localizable.strings @@ -196,6 +202,7 @@ trans.sk = UI/AdministrationUI/Slovak.lproj/Localizable.strings trans.sl_SI = UI/AdministrationUI/Slovenian.lproj/Localizable.strings trans.sv = UI/AdministrationUI/Swedish.lproj/Localizable.strings trans.uk = UI/AdministrationUI/Ukrainian.lproj/Localizable.strings +trans.zh_TW = UI/AdministrationUI/ChineseTaiwan.lproj/Localizable.strings [sogo.soobjects-appointments] source_file = SoObjects/Appointments/English.lproj/Localizable.strings @@ -224,6 +231,7 @@ trans.sk = SoObjects/Appointments/Slovak.lproj/Localizable.strings trans.sl_SI = SoObjects/Appointments/Slovenian.lproj/Localizable.strings trans.sv = SoObjects/Appointments/Swedish.lproj/Localizable.strings trans.uk = SoObjects/Appointments/Ukrainian.lproj/Localizable.strings +trans.zh_TW = SoObjects/Appointments/ChineseTaiwan.lproj/Localizable.strings [sogo.soobjects-contacts] source_file = SoObjects/Contacts/English.lproj/Localizable.strings @@ -252,6 +260,7 @@ trans.sk = SoObjects/Contacts/Slovak.lproj/Localizable.strings trans.sl_SI = SoObjects/Contacts/Slovenian.lproj/Localizable.strings trans.sv = SoObjects/Contacts/Swedish.lproj/Localizable.strings trans.uk = SoObjects/Contacts/Ukrainian.lproj/Localizable.strings +trans.zh_TW = SoObjects/Contacts/ChineseTaiwan.lproj/Localizable.strings [sogo.soobjects-mailer] source_file = SoObjects/Mailer/English.lproj/Localizable.strings @@ -280,6 +289,7 @@ trans.sk = SoObjects/Mailer/Slovak.lproj/Localizable.strings trans.sl_SI = SoObjects/Mailer/Slovenian.lproj/Localizable.strings trans.sv = SoObjects/Mailer/Swedish.lproj/Localizable.strings trans.uk = SoObjects/Mailer/Ukrainian.lproj/Localizable.strings +trans.zh_TW = SoObjects/Mailer/ChineseTaiwan.lproj/Localizable.strings [sogo.ui-mailpartviewers] source_file = UI/MailPartViewers/English.lproj/Localizable.strings @@ -308,3 +318,4 @@ trans.sk = UI/MailPartViewers/Slovak.lproj/Localizable.strings trans.sl_SI = UI/MailPartViewers/Slovenian.lproj/Localizable.strings trans.sv = UI/MailPartViewers/Swedish.lproj/Localizable.strings trans.uk = UI/MailPartViewers/Ukrainian.lproj/Localizable.strings +trans.zh_TW = UI/MailPartViewers/ChineseTaiwan.lproj/Localizable.strings diff --git a/NEWS b/NEWS index 867b4ea97..0d6813f86 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ Enhancements - group mail addresses can be used as recipient in Outlook - added 'ActiveSync' module constraints - added Slovenian translation - thanks to Jens Riecken + - added Chinese (Taiwan) translation Bug fixes - EAS's GetItemEstimate/ItemOperations now support fetching mails and empty folders diff --git a/SoObjects/Appointments/ChineseTaiwan.lproj/Localizable.strings b/SoObjects/Appointments/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..b51c99ad8 --- /dev/null +++ b/SoObjects/Appointments/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,67 @@ +"Inviting the following persons is prohibited:" = "禁止邀請以下人士:"; +"Personal Calendar" = "個人行事曆"; +vevent_class0 = "(公開事件)"; +vevent_class1 = "(私人事件)"; +vevent_class2 = "(機密事件)"; + +vtodo_class0 = "(公開任務)"; +vtodo_class1 = "(私人任務)"; +vtodo_class2 = "(機密任務)"; + +/* Receipts */ +"The event \"%{Summary}\" was created" = "事件 \"%{Summary}\" 已建立"; +"The event \"%{Summary}\" was deleted" = "事件\"%{Summary}\" 已刪除"; +"The event \"%{Summary}\" was updated" = "事件\"%{Summary}\" 已異動"; +"The following attendees(s) were notified:" = "已通知下列出席者:"; +"The following attendees(s) were added:" = "已增加下列出席者:"; +"The following attendees(s) were removed:" = "已移除下列出席者:"; + +/* IMIP messages */ +"calendar_label" = "行事曆:"; +"startDate_label" = "開始:"; +"endDate_label" = "結束:"; +"due_label" = "截止日期:"; +"location_label" = "地點:"; +"summary_label" = "事件主題:"; +"comment_label" = "備註:"; + +/* Invitation */ +"Event Invitation: \"%{Summary}\"" = "邀請事件: \"%{Summary}\""; +"(sent by %{SentBy}) " = "(來自 %{SentBy})"; +"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" = "%{Organizer} %{SentByText} 邀請您參加 %{Summary}。\n\n起始日期: %{StartDate}\n結束日期: %{EndDate}\n備註說明: %{Description}"; +"%{Organizer} %{SentByText}has invited you to %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" = "%{Organizer} %{SentByText} 邀請您參加 %{Summary}。\n\n起始時間: %{StartDate} %{StartTime}\n結束時間: %{EndDate} %{EndTime}\n備註說明: %{Description}"; + +/* Deletion */ +"Event Cancelled: \"%{Summary}\"" = "取消事件 : \"%{Summary}\""; +"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate}\nEnd: %{EndDate}\nDescription: %{Description}" += "%{Organizer} %{SentByText} 己取消事件: %{Summary}。\n\n起始日期: %{StartDate}\n結束日期: %{EndDate}\n備註說明: %{Description}"; +"%{Organizer} %{SentByText}has cancelled this event: %{Summary}.\n\nStart: %{StartDate} at %{StartTime}\nEnd: %{EndDate} at %{EndTime}\nDescription: %{Description}" += "%{Organizer} %{SentByText} 己取消了事件: %{Summary}。\n\n起始時間: %{StartDate} %{StartTime}\n結束時間: %{EndDate} %{EndTime}\n備註說明: %{Description}"; + +/* Update */ +"The appointment \"%{Summary}\" for the %{OldStartDate} has changed" += " 安排於%{OldStartDate} 的事件 \"%{Summary}\" 已變更"; +"The appointment \"%{Summary}\" for the %{OldStartDate} at %{OldStartTime} has changed" += "安排於 %{OldStartDate} %{OldStartTime} 的事件 \"%{Summary}\" 已變更"; +"The following parameters have changed in the \"%{Summary}\" meeting:" += "已變更會議 \"%{Summary}\" 下列參數:"; +"Please accept or decline those changes." += "請接受或拒絶這些變更。"; + +/* Reply */ +"Accepted invitation: \"%{Summary}\"" = "接受邀請: \"%{Summary}\""; +"Declined invitation: \"%{Summary}\"" = "拒絶邀請: \"%{Summary}\""; +"Delegated invitation: \"%{Summary}\"" = "\"委派出席: \"%{Summary}\""; +"Not yet decided on invitation: \"%{Summary}\"" = "未處理的邀請: \"%{Summary}\""; +"%{Attendee} %{SentByText}has accepted your event invitation." += "\"%{Attendee} %{SentByText}已接受了您的邀請。"; +"%{Attendee} %{SentByText}has declined your event invitation." += "\"%{Attendee} %{SentByText}已拒絶了您的邀請。"; +"%{Attendee} %{SentByText}has delegated the invitation to %{Delegate}." += "\"%{Attendee} %{SentByText}已將您的邀請委任給%{Delegate}。"; +"%{Attendee} %{SentByText}has not yet decided upon your event invitation." += "%{Attendee} %{SentByText}還沒有決定是否接受您的邀請。"; + +/* Resources */ +"Cannot access resource: \"%{Cn} %{SystemEmail}\"" = "無法讀取資源: \"%{Cn} %{SystemEmail}\""; +"Maximum number of simultaneous bookings (%{NumberOfSimultaneousBookings}) reached for resource \"%{Cn} %{SystemEmail}\". The conflicting event is \"%{EventTitle}\", and starts on %{StartDate}." = "\"%{Cn} %{SystemEmail}\" 的衝突事件己達上限 ( %{NumberOfSimultaneousBookings} )。衝突事件 \"%{EventTitle}\" 的起始日期為 %{StartDate}。"; diff --git a/SoObjects/Appointments/GNUmakefile b/SoObjects/Appointments/GNUmakefile index 2cd58b21a..257104e14 100644 --- a/SoObjects/Appointments/GNUmakefile +++ b/SoObjects/Appointments/GNUmakefile @@ -54,7 +54,7 @@ Appointments_RESOURCE_FILES += \ MSExchangeFreeBusySOAPResponseMap.plist \ MSExchangeFreeBusySOAPRequest.wo -Appointments_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +Appointments_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh Appointments_LOCALIZED_RESOURCE_FILES = Localizable.strings diff --git a/SoObjects/Contacts/ChineseTaiwan.lproj/Localizable.strings b/SoObjects/Contacts/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..075b084aa --- /dev/null +++ b/SoObjects/Contacts/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,2 @@ +"Personal Address Book" = "個人通訊錄"; +"Collected Address Book" = "公用通訊錄"; diff --git a/SoObjects/Contacts/GNUmakefile b/SoObjects/Contacts/GNUmakefile index fd5e76a03..510c38c1f 100644 --- a/SoObjects/Contacts/GNUmakefile +++ b/SoObjects/Contacts/GNUmakefile @@ -27,7 +27,7 @@ Contacts_OBJC_FILES = \ Contacts_RESOURCE_FILES += \ product.plist \ -Contacts_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +Contacts_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh Contacts_LOCALIZED_RESOURCE_FILES = Localizable.strings diff --git a/SoObjects/Mailer/ChineseTaiwan.lproj/Localizable.strings b/SoObjects/Mailer/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..c97411cbf --- /dev/null +++ b/SoObjects/Mailer/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,2 @@ +"OtherUsersFolderName" = "其他使用者"; +"SharedFoldersName" = "共用資料匣"; diff --git a/SoObjects/Mailer/GNUmakefile b/SoObjects/Mailer/GNUmakefile index 59ed443e1..da5092ea6 100644 --- a/SoObjects/Mailer/GNUmakefile +++ b/SoObjects/Mailer/GNUmakefile @@ -50,6 +50,8 @@ Mailer_RESOURCE_FILES += \ SOGoMailBrazilianPortugueseReply.wo \ SOGoMailCatalanForward.wo \ SOGoMailCatalanReply.wo \ + SOGoMailChineseTaiwanForward.wo \ + SOGoMailChineseTaiwanReply.wo \ SOGoMailCzechForward.wo \ SOGoMailCzechReply.wo \ SOGoMailDanishForward.wo \ @@ -93,9 +95,7 @@ Mailer_RESOURCE_FILES += \ SOGoMailWelshForward.wo \ SOGoMailWelshReply.wo - -Mailer_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh -Mailer_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovenian Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +Mailer_LANGUAGES = Arabic Basque BrazilianPortuguese ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovenian Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh Mailer_LOCALIZED_RESOURCE_FILES = Localizable.strings diff --git a/SoObjects/Mailer/SOGoMailChineseTaiwanForward.wo/SOGoMailChineseTaiwanForward.html b/SoObjects/Mailer/SOGoMailChineseTaiwanForward.wo/SOGoMailChineseTaiwanForward.html new file mode 100644 index 000000000..dacde8b2e --- /dev/null +++ b/SoObjects/Mailer/SOGoMailChineseTaiwanForward.wo/SOGoMailChineseTaiwanForward.html @@ -0,0 +1,16 @@ +<#newLine/> +<#newLine/> +<#signaturePlacementOnTop><#newLine/> +<#signature/><#newLine/> +-------- 原始信件 --------<#newLine/> +主旨: <#subject/><#newLine/> +日期: <#date/><#newLine/> +寄件者: <#from/><#newLine/> +<#hasReplyTo>回覆帳號: <#replyTo/><#hasOrganization>公司: <#organization/>收件者: <#to/><#newLine/> +<#hasCc>副本: <#cc/><#hasNewsGroups>新聞群組: <#newsgroups/><#hasReferences>參考: <#references/><#newLine/> +<#newLine/> +<#messageBody/><#newLine/> +<#signaturePlacementOnBottom><#newLine/> +<#newLine/> +<#signature/> +<#newLine/> diff --git a/SoObjects/Mailer/SOGoMailChineseTaiwanForward.wo/SOGoMailChineseTaiwanForward.wod b/SoObjects/Mailer/SOGoMailChineseTaiwanForward.wo/SOGoMailChineseTaiwanForward.wod new file mode 100644 index 000000000..f2436acc9 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailChineseTaiwanForward.wo/SOGoMailChineseTaiwanForward.wod @@ -0,0 +1,88 @@ +subject: WOString { + value = subject; + escapeHTML = NO; +} + +date: WOString { + value = date; + escapeHTML = NO; +} + +from: WOString { + value = from; + escapeHTML = NO; +} + +newLine: WOString { + value = newLine; + 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; +} + +signaturePlacementOnTop: WOConditional { + condition = signaturePlacementOnTop; +} + +signaturePlacementOnBottom: WOConditional { + condition = signaturePlacementOnTop; + negate = YES; +} diff --git a/SoObjects/Mailer/SOGoMailChineseTaiwanReply.wo/SOGoMailChineseTaiwanReply.html b/SoObjects/Mailer/SOGoMailChineseTaiwanReply.wo/SOGoMailChineseTaiwanReply.html new file mode 100644 index 000000000..24c91fe72 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailChineseTaiwanReply.wo/SOGoMailChineseTaiwanReply.html @@ -0,0 +1,16 @@ +<#replyPlacementOnTop><#newLine/> +<#newLine/> +<#signaturePlacementOnTop><#newLine/> +<#signature/><#newLine/> +<#outlookMode>-------- 原始信件 --------<#newLine/> +主旨: <#subject/><#newLine/> +日期: <#date/><#newLine/> +寄件者: <#from/><#newLine/> +<#hasReplyTo>回覆帳號: <#replyTo/><#hasOrganization>公司: <#organization/>收件者: <#to/><#newLine/> +<#hasCc>副本: <#cc/><#hasNewsGroups>新聞群組: <#newsgroups/><#hasReferences>參考: <#references/><#newLine/> +<#standardMode>日期 <#date/>, <#from/> 編輯:<#newLine/> +<#newLine/> +<#messageBody/><#newLine/> +<#replyPlacementOnBottom><#newLine/> +<#newLine/> +<#signaturePlacementOnBottom><#signature/><#newLine/> diff --git a/SoObjects/Mailer/SOGoMailChineseTaiwanReply.wo/SOGoMailChineseTaiwanReply.wod b/SoObjects/Mailer/SOGoMailChineseTaiwanReply.wo/SOGoMailChineseTaiwanReply.wod new file mode 100644 index 000000000..3fbed6d61 --- /dev/null +++ b/SoObjects/Mailer/SOGoMailChineseTaiwanReply.wo/SOGoMailChineseTaiwanReply.wod @@ -0,0 +1,106 @@ +outlookMode: WOConditional { + condition = outlookMode; +} + +standardMode: WOConditional { + condition = outlookMode; + negate = YES; +} + +subject: WOString { + value = subject; + escapeHTML = NO; +} + +date: WOString { + value = date; + escapeHTML = NO; +} + +from: WOString { + value = from; + escapeHTML = NO; +} + +newLine: WOString { + value = newLine; + 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; +} + +replyPlacementOnTop: WOConditional { + condition = replyPlacementOnTop; +} + +replyPlacementOnBottom: WOConditional { + condition = replyPlacementOnTop; + negate = YES; +} + +signaturePlacementOnTop: WOConditional { + condition = signaturePlacementOnTop; +} + +signaturePlacementOnBottom: WOConditional { + condition = signaturePlacementOnTop; + negate = YES; +} diff --git a/SoObjects/Mailer/SOGoMailForward.h b/SoObjects/Mailer/SOGoMailForward.h index 8110fc57e..d4c516959 100644 --- a/SoObjects/Mailer/SOGoMailForward.h +++ b/SoObjects/Mailer/SOGoMailForward.h @@ -49,6 +49,9 @@ @interface SOGoMailCatalanForward : SOGoMailForward @end +@interface SOGoMailChineseTaiwanForward : SOGoMailForward +@end + @interface SOGoMailCzechForward : SOGoMailForward @end diff --git a/SoObjects/Mailer/SOGoMailForward.m b/SoObjects/Mailer/SOGoMailForward.m index 8c01b526d..3450539d5 100644 --- a/SoObjects/Mailer/SOGoMailForward.m +++ b/SoObjects/Mailer/SOGoMailForward.m @@ -260,6 +260,9 @@ @implementation SOGoMailCatalanForward @end +@implementation SOGoMailChineseTaiwanForward +@end + @implementation SOGoMailCzechForward @end diff --git a/SoObjects/Mailer/SOGoMailReply.h b/SoObjects/Mailer/SOGoMailReply.h index e66e32214..e2af0fcaf 100644 --- a/SoObjects/Mailer/SOGoMailReply.h +++ b/SoObjects/Mailer/SOGoMailReply.h @@ -48,6 +48,9 @@ @interface SOGoMailCatalanReply : SOGoMailReply @end +@interface SOGoMailChineseTaiwanReply : SOGoMailReply +@end + @interface SOGoMailCzechReply : SOGoMailReply @end diff --git a/SoObjects/Mailer/SOGoMailReply.m b/SoObjects/Mailer/SOGoMailReply.m index b9fa8dbba..d0bd38801 100644 --- a/SoObjects/Mailer/SOGoMailReply.m +++ b/SoObjects/Mailer/SOGoMailReply.m @@ -98,6 +98,9 @@ @implementation SOGoMailCatalanReply @end +@implementation SOGoMailChineseTaiwanReply +@end + @implementation SOGoMailCzechReply @end diff --git a/SoObjects/SOGo/SOGoDefaults.plist b/SoObjects/SOGo/SOGoDefaults.plist index e762aff2b..915d77d62 100644 --- a/SoObjects/SOGo/SOGoDefaults.plist +++ b/SoObjects/SOGo/SOGoDefaults.plist @@ -39,7 +39,7 @@ SOGoLoginModule = "Mail"; SOGoLanguage = "English"; - SOGoSupportedLanguages = ( "Arabic", "Basque", "Catalan", "Czech", "Dutch", "Danish", "Welsh", "English", + SOGoSupportedLanguages = ( "Arabic", "Basque", "Catalan", "ChineseTaiwan", "Czech", "Dutch", "Danish", "Welsh", "English", "SpanishSpain", "SpanishArgentina", "Finnish", "French", "German", "Icelandic", "Italian", "Hungarian", "BrazilianPortuguese", "NorwegianBokmal", "NorwegianNynorsk", "Polish", "Russian", "Slovak", diff --git a/Tests/Integration/preferences.py b/Tests/Integration/preferences.py index aa4959d4c..e8d715a9a 100644 --- a/Tests/Integration/preferences.py +++ b/Tests/Integration/preferences.py @@ -10,7 +10,7 @@ import sogoLogin # must be kept in sync with SoObjects/SOGo/SOGoDefaults.plist # this should probably be fetched magically... -SOGoSupportedLanguages = [ "Arabic", "Basque", "Catalan", "Czech", "Dutch", "Danish", "Welsh", "English", "Finnish", +SOGoSupportedLanguages = [ "Arabic", "Basque", "Catalan", "ChineseTaiwan", "Czech", "Dutch", "Danish", "Welsh", "English", "Finnish", "SpanishSpain", "SpanishArgentina", "French", "German", "Icelandic", "Italian", "Hungarian", "BrazilianPortuguese", "NorwegianBokmal", "NorwegianNynorsk", "Polish", "Russian", "Slovak", diff --git a/UI/AdministrationUI/ChineseTaiwan.lproj/Localizable.strings b/UI/AdministrationUI/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..f04903c87 --- /dev/null +++ b/UI/AdministrationUI/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,15 @@ +/* this file is in UTF-8 format! */ + +"Help" = "幫助"; +"Close" = "關閉"; + +"Modules" = "模組"; + +/* Modules short names */ +"ACLs" = "存取控制清單"; + +/* Modules titles */ +"ACLs_title" = "使用者資料匣存取控制清單"; + +/* Modules descriptions */ +"ACLs_description" = "\"

存取控制清單管理模組允許異動每個使用者行事曆及通訊錄的使用權限。

如要修改使用者資料匣的使用權限,請在視窗上方的搜尋欄位輸入使用者名稱後,將遊標移到要修改的資料匣上連續按兩下滑鼠。

"; diff --git a/UI/AdministrationUI/GNUmakefile b/UI/AdministrationUI/GNUmakefile index 1bcd6530a..450973525 100644 --- a/UI/AdministrationUI/GNUmakefile +++ b/UI/AdministrationUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = AdministrationUI AdministrationUI_PRINCIPAL_CLASS = AdministrationUIProduct -AdministrationUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +AdministrationUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh AdministrationUI_OBJC_FILES = \ AdministrationUIProduct.m \ diff --git a/UI/Common/ChineseTaiwan.lproj/Localizable.strings b/UI/Common/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..21f7261bc --- /dev/null +++ b/UI/Common/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,118 @@ +/* this file is in UTF-8 format! */ + +/* toolbars */ +"Save" = "儲存"; +"Close" = "關閉"; +"Edit User Rights" = "編輯使用者權限"; + +"Home" = "首頁"; +"Calendar" = "行事曆"; +"Address Book" = "通訊錄"; +"Mail" = "郵件"; +"Preferences" = "個人設定"; +"Administration" = "管理"; +"Disconnect" = "離線"; +"Right Administration" = "管理權限"; +"Log Console (dev.)" = "登錄控制台(dev.)"; + +"User" = "使用者"; +"Vacation message is enabled" = "啟用休假自動回覆訊息功能"; + +"Help" = "幫助"; + +"noJavascriptError" = "SOGo 需要執行Javascript指令。請確定您的瀏覽器偏好設定該選項是開啟的。"; +"noJavascriptRetry" = "重試"; + +"Owner:" = "擁有者"; +"Publish the Free/Busy information" = "公開空閒/忙錄的訊息"; + +"Add..." = "增加..."; +"Remove" = "移除"; + +"Subscribe User" = "訂閱者"; + +"Any Authenticated User" = "任何授權使用者"; +"Public Access" = "公開存取"; +"Any user not listed above" = "列表以外的使用者"; +"Anybody accessing this resource from the public area" = "由公開區域存取資源的任何人"; + +"Sorry, the user rights can not be configured for that object." = "對不起, 使用者的權限無法操作這個項目。"; + +"Any user with an account on this system will be able to access your mailbox \"%{0}\". Are you certain you trust them all?" + = "這個系統的所有帳號都能存取您的郵件信箱\"%{0}\"。您確定所有帳號都可以信任嗎?"; +"Any user with an account on this system will be able to access your calendar \"%{0}\". Are you certain you trust them all?" + = "這個系統的所有帳號都能存取您的行事曆 \"%{0}\"。您確定所有帳號都可以信任嗎?"; +"Potentially anyone on the Internet will be able to access your calendar \"%{0}\", even if they do not have an account on this system. Is this information suitable for the public Internet?" + = "任何人都可以存取您的行事曆 \"%{0}\", 且不限定只有同系統的帳號。確定要在網路上公開行事曆嗎?"; +"Any user with an account on this system will be able to access your address book \"%{0}\". Are you certain you trust them all?" + = "這個系統的所有帳號都能存取您的通訊錄 \"%{0}\"。您確定所有帳號都可以信任嗎?"; +"Potentially anyone on the Internet will be able to access your address book \"%{0}\", even if they do not have an account on this system. Is this information suitable for the public Internet?" + = "任何人都可以存取您的通訊錄 \"%{0}\", 且不限定只有同系統的帳號。確定要在網路上公開通訊錄嗎?"; +"Give Access" = "允許存取"; +"Keep Private" = "保持隱私"; + +/* generic.js */ +"Unable to subscribe to that folder!" + = "無法訂閱這個資料匣!"; +"You cannot subscribe to a folder that you own!" + = "您不能訂閱自己的資料匣!"; +"Unable to unsubscribe from that folder!" + = "無法在資料匣取消訂閱!"; +"You cannot unsubscribe from a folder that you own!" + = "您不能取消訂閱自己的資料匣!"; +"Unable to rename that folder!" = "不能更改資料匣的名稱!"; +"You have already subscribed to that folder!" + = "您己經訂閱了這個資料匣!"; +"The user rights cannot be edited for this object!" + = "使用者的權限無法編輯這個項目!"; +"A folder by that name already exists." = "己有相同名稱的資料匣。"; +"You cannot create a list in a shared address book." + = "您無法在共用的通訊錄新增列表。"; +"Warning" = "警告"; +"Can't contact server" = "連接伺服器失敗。請稍後再試。"; + +"You are not allowed to access this module or this system. Please contact your system administrator." += "您沒有權限存取這個模組或系統。請聯絡您的系統管理者。"; +"You don't have the required privileges to perform the operation." += "您沒有權限執行這項操作。"; + +"noEmailForDelegation" = "您必須指定代理人的電子郵件地址。"; +"delegate is organizer" = "您指定的代理人是組織;請另外指定。"; +"delegate is a participant" = "您指定的代理人己經是受邀者。"; +"delegate is a group" = "您指定的電子郵件帳號為群組。您必須指定代理人的電子郵件帳號。"; + +"Snooze for " = "提醒"; +"5 minutes" = "5分鐘"; +"10 minutes" = "10分鐘"; +"15 minutes" = "15分鐘"; +"30 minutes" = "30分鐘"; +"45 minutes" = "45分鐘"; +"1 hour" = " 1小時"; +"1 day" = "1天"; + +/* common buttons */ +"OK" = "確定"; +"Cancel" = "取消"; +"Yes" = "是"; +"No" = "不是"; + +/* alarms */ +"Reminder:" = "提醒"; +"Start:" = "開始:"; +"Due Date:" = "到期日:"; +"Location:" = "地點:"; + +/* mail labels */ +"Important" = "重要等級"; +"Work" = "工作"; +"Personal" = "私人"; +"To Do" = "待辦"; +"Later" = "稍後"; + +"a2_Sunday" = "星期日"; +"a2_Monday" = "星期一"; +"a2_Tuesday" = "星期二"; +"a2_Wednesday" = "星期三"; +"a2_Thursday" = "星期四"; +"a2_Friday" = "星期五"; +"a2_Saturday" = "星期六"; diff --git a/UI/Common/GNUmakefile b/UI/Common/GNUmakefile index 8464b3ea1..4f03c40fd 100644 --- a/UI/Common/GNUmakefile +++ b/UI/Common/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = CommonUI CommonUI_PRINCIPAL_CLASS = CommonUIProduct -CommonUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +CommonUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh CommonUI_OBJC_FILES += \ CommonUIProduct.m \ diff --git a/UI/Contacts/ChineseTaiwan.lproj/Localizable.strings b/UI/Contacts/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..52f36ae88 --- /dev/null +++ b/UI/Contacts/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,215 @@ +/* this file is in UTF-8 format! */ + +"Contact" = "連絡人"; +"Address" = "地址"; +"Photos" = "照片"; +"Other" = "其它"; + +"Address Books" = "通訊錄"; +"Addressbook" = "通訊錄"; +"Addresses" = "地址"; +"Update" = "更新"; +"Cancel" = "取消"; +"Common" = "一般"; +"Contact editor" = "連絡人編輯器"; +"Contact viewer" = "連絡人瀏覽器"; +"Email" = "郵件"; +"Screen Name" = "顯示名稱"; +"Extended" = "延伸"; +"Fax" = "傳真"; +"Firstname" = "名"; +"Home" = "家"; +"HomePhone" = "住家電話"; +"Lastname" = "姓氏"; +"Location" = "地點"; +"MobilePhone" = "手機"; +"Name" = "名字"; +"OfficePhone" = "辦公室電話"; +"Organization" = "公司名稱"; +"Work Phone" = "公務電話"; +"Phone" = "電話"; +"Phones" = "電話"; +"Postal" = "郵遞區號"; +"Save" = "儲存"; +"Internet" = "網際網路"; +"Unit" = "部門"; +"delete" = "刪除"; +"edit" = "編輯"; +"invalidemailwarn" = "無效的郵件地址"; +"new" = "新增"; +"Preferred Phone" = "首選電話"; + +"Move To" = "移至"; +"Copy To" = "拷貝到"; +"Add to:" = "增加到"; + +/* Tooltips */ + +"Create a new address book card" = "新增一筆通訊錄卡片"; +"Create a new list" = "新增一份清單"; +"Edit the selected card" = "編輯選擇的卡片"; +"Send a mail message" = "發送一份郵件訊息"; +"Delete selected card or address book" = "刪除選擇的卡片或通訊錄"; +"Reload all contacts" = "重載所有的連絡人"; + +"htmlMailFormat_UNKNOWN" = "未知"; +"htmlMailFormat_FALSE" = "純文字"; +"htmlMailFormat_TRUE" = "HTML"; + +"Name or Email" = "名字或郵件地址"; +"Category" = "類別"; +"Personal Addressbook" = "個人通訊錄"; +"Search in Addressbook" = "搜索通訊錄"; + +"New Card" = "新增卡片"; +"New List" = "新增清單"; +"Edit" = "編輯"; +"Properties" = "屬性"; +"Sharing..." = "共享..."; +"Write" = "寫入"; +"Delete" = "删除"; +"Instant Message" = "即時訊息"; +"Add..." = "新增..."; +"Remove" = "移除"; + +"Please wait..." = "請稍後..."; +"No possible subscription" = "不可訂閱"; + +"Preferred" = "首選"; +"Display:" = "顯示:"; +"Display Name:" = "顯示名稱:"; +"Email:" = "郵件:"; +"Additional Email:" = "添加的郵件:"; + +"Phone Number:" = "電話號碼:"; +"Prefers to receive messages formatted as:" = "喜愛的接收訊息格式為:"; +"Screen Name:" = "顯示名稱:"; +"Categories:" = "類别:"; + +"First:" = "名:"; +"Last:" = "姓:"; +"Nickname:" = "暱稱:"; + +"Telephone" = "電話"; +"Work:" = "辦公:"; +"Home:" = "家:"; +"Fax:" = "傳真:"; +"Mobile:" = "手機:"; +"Pager:" = "呼叫器:"; + +/* categories */ +"contacts_category_labels" = "同事,競争对手,客户,朋友,家人,事業伙伴,供應商,出版社,VIP"; +"Categories" = "分類"; +"New category" = "新類別"; + +/* adresses */ +"Title:" = "頭銜:"; +"Service:" = "服務:"; +"Company:" = "公司:"; +"Department:" = "部門:"; +"Organization:" = "组織:"; +"Address:" = "地址:"; +"City:" = "城市:"; +"State_Province:" = "州/省:"; +"ZIP_Postal Code:" = "ZIP/郵遞區號:"; +"Country:" = "國家:"; +"Web Page:" = "網页:"; + +"Work" = "辦公"; +"Other Infos" = "其他資訊"; + +"Note:" = "備註:"; +"Timezone:" = "時區:"; +"Birthday:" = "生日:"; +"Birthday (yyyy-mm-dd):" = "生日 (yyyy-mm-dd):"; +"Freebusy URL:" = "Freebusy URL:"; + +"Add as..." = "新增為..."; +"Recipient" = "收件人"; +"Carbon Copy" = "副本"; +"Blind Carbon Copy" = "密件副本"; + +"New Addressbook..." = "新增通訊錄..."; +"Subscribe to an Addressbook..." = "訂閱通訊錄..."; +"Remove the selected Addressbook" = "移除選擇的通訊錄"; + +"Name of the Address Book" = " 通訊錄名稱"; +"Are you sure you want to delete the selected address book?" += "您確定要刪除選擇的通訊錄嗎?"; +"You cannot remove nor unsubscribe from a public addressbook." += "您不能從共有通訊錄中移除或取消訂閱。"; +"You cannot remove nor unsubscribe from your personal addressbook." += "您不能從您的個人通訊錄中移除或取消訂閱。"; + +"Are you sure you want to delete the selected contacts?" += "您確定要刪除選擇的連絡人嗎?"; + +"You cannot delete the card of \"%{0}\"." += "您不能删除第\"%{0}\"筆卡片。"; + + + +"You cannot subscribe to a folder that you own!" += "您不能訂閱自己的資料夾。"; +"Unable to subscribe to that folder!" += "不能訂閱到該資料夾。"; + +/* acls */ +"Access rights to" = "給予存取權限至"; +"For user" = "给使用者"; + +"Any Authenticated User" = "任一授權的使用者"; +"Public Access" = "公開存取"; + +"This person can add cards to this addressbook." += "這個人可以新增卡片到這個通訊錄。"; +"This person can edit the cards of this addressbook." += "這個人可以編輯這個通訊錄的卡片。"; +"This person can list the content of this addressbook." += "這個人可以列出這個通訊錄的内容。"; +"This person can read the cards of this addressbook." += "這個人可以讀取這個通訊錄的卡片。"; +"This person can erase cards from this addressbook." += "這個人可以刪除這個通訊錄的卡片。"; + +"The selected contact has no email address." += "被選擇的連絡人沒有郵件地址。"; + +"Please select a contact." = "請選擇連絡人。"; + +/* Error messages for move and copy */ + +"SoAccessDeniedException" = "您不能寫入資料到這個通訊錄。"; +"Forbidden" = "您不能寫入資料到這個通訊錄。"; +"Invalid Contact" = "所選擇的連絡人已經不存在了。"; +"Unknown Destination Folder" = "所選擇的目標地址簿已經不存在了。"; + +/* Lists */ +"List details" = "列出明细"; +"List name:" = "列出名字:"; +"List nickname:" = "列出暱稱:"; +"List description:" = "列出說明:"; +"Members" = "成員"; +"Contacts" = "連絡人"; +"Add" = "新增"; +"Lists can't be moved or copied." = "列表不能被移除或拷貝。"; +"Export" = "匯出"; +"Export Address Book..." = "匯出通訊錄..."; +"View Raw Source" = "查看源文件"; +"Import Cards" = "匯入卡片"; +"Select a vCard or LDIF file." = "選擇一張 vCard 或者 LDIF 檔案。"; +"Upload" = "上傳"; +"Uploading" = "上傳中"; +"Done" = "完成"; +"An error occured while importing contacts." = "導入連絡人時發生錯誤。"; +"No card was imported." = "没有卡片可以被導入。"; +"A total of %{0} cards were imported in the addressbook." = "共有%{0}張卡片被導入到通訊錄中。"; + +"Reload" = "重新載入"; + +/* Properties window */ +"Address Book Name:" = "通訊錄名稱:"; +"Links to this Address Book" = "連結到這本通訊錄"; +"Authenticated User Access" = "授權的使用者存取"; +"CardDAV URL: " = "CardDAV URL:"; + diff --git a/UI/Contacts/GNUmakefile b/UI/Contacts/GNUmakefile index e30dc7e00..01521a8bc 100644 --- a/UI/Contacts/GNUmakefile +++ b/UI/Contacts/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = ContactsUI ContactsUI_PRINCIPAL_CLASS = ContactsUIProduct -ContactsUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +ContactsUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh ContactsUI_OBJC_FILES = \ UIxContactsUserFolders.m \ diff --git a/UI/MailPartViewers/ChineseTaiwan.lproj/Localizable.strings b/UI/MailPartViewers/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..73d7d7516 --- /dev/null +++ b/UI/MailPartViewers/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,48 @@ +ACCEPTED = "已接受"; +COMPLETED = "已完成"; +DECLINED = "已拒絶"; +DELEGATED = "已委任"; +"IN-PROCESS" = "處理中"; +"NEEDS-ACTION" = "需要操作"; +TENTATIVE = "未定"; +organized_by_you = "您是發起者"; +you_are_an_attendee = "您是受邀請者"; +add_info_text = "不支援iMIP格式的 'ADD' 。"; +publish_info_text = "寄件者提醒增加這筆事件"; +cancel_info_text = "您的所有邀請事件都取消了。"; +request_info_no_attendee = "正在安排會議出席人員。這封電子郵件是通知您不用出席這場會議。"; +Appointment = "安排"; +"Status Update" = "狀態更新"; +was = "是"; + +Organizer = "發起者"; +Time = "時間"; +Attendees = "出席者"; +request_info = "邀請您參加會議。"; +"Add to calendar" = "加入行事曆"; +"Delete from calendar" = "由行事曆中刪除"; +"Update status" = "更新狀態"; +Accept = "出席"; +Decline = "不出席"; +Tentative = "未定"; +"Delegate ..." = "委任 ..."; +"Delegated to" = "委任給"; +"Update status in calendar" = "在行事曆異動狀態"; +"delegated from" = "委任自"; + +reply_info_no_attendee = "您收到受邀請者不出席的回覆。"; +reply_info = "這是您的出席回覆。"; + +"to" = "到"; + +"Untitled" = "無主旨"; + +"Size" = "大小"; + +"Digital signature is not valid" = "無效的簽署"; +"Message is signed" = "己簽署的郵件"; +"Subject" = "主旨"; +"From" = "寄件人"; +"Date" = "日期"; +"To" = "收件者"; +"Issuer" = "發行者"; diff --git a/UI/MailPartViewers/GNUmakefile b/UI/MailPartViewers/GNUmakefile index 2fb051999..bbaa636e6 100644 --- a/UI/MailPartViewers/GNUmakefile +++ b/UI/MailPartViewers/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MailPartViewers MailPartViewers_PRINCIPAL_CLASS = MailPartViewersProduct -MailPartViewers_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +MailPartViewers_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh MailPartViewers_OBJC_FILES += \ MailPartViewersProduct.m \ diff --git a/UI/MailerUI/ChineseTaiwan.lproj/Localizable.strings b/UI/MailerUI/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..8755cd3ea --- /dev/null +++ b/UI/MailerUI/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,308 @@ +/* this file is in UTF-8 format! */ + +/* Icon's label */ +"Create" = "寫信"; +"Empty Trash" = "清空垃圾筒"; +"Delete" = "刪除"; +"Expunge" = "清除"; +"Forward" = "轉寄"; +"Get Mail" = "收信"; +"Junk" = "垃圾信件"; +"Reply" = "回覆"; +"Reply All" = "全部回覆"; +"Print" = "列印"; +"Stop" = "停止"; +"Write" = "寫信"; +"Search" = "搜尋"; + +"Send" = "寄信"; +"Contacts" = "聯絡人"; +"Attach" = "附加檔案"; +"Save" = "儲存"; +"Options" = "選項"; +"Close" = "關閉"; +"Size" = "大小"; + +/* Tooltips */ + +"Send this message now" = "立即寄出"; +"Select a recipient from an Address Book" = "從通訊錄選擇收件者帳號"; +"Include an attachment" = "增加附檔"; +"Save this message" = "儲存信件"; +"Get new messages" = "接收新信"; +"Create a new message" = "建立一封新的信件"; +"Go to address book" = "移動到通訊錄"; +"Reply to the message" = "回信"; +"Reply to sender and all recipients" = "回覆寄件者及所有收件者"; +"Forward selected message" = "轉寄信件"; +"Delete selected message or folder" = "刪除信件或資料匣"; +"Mark the selected messages as junk" = "標示為垃圾郵件"; +"Print this message" = "列印信件"; +"Stop the current transfer" = "停止發送"; +"Attachment" = "附加檔"; +"Unread" = "未讀"; +"Flagged" = "標註"; +"Search multiple mailboxes" = "搜尋多個郵件信箱"; + +/* Main Frame */ + +"Home" = "首頁"; +"Calendar" = "行事曆"; +"Addressbook" = "通訊錄"; +"Mail" = "郵件"; +"Right Administration" = "權限管理"; + +"Help" = "幫助"; + +/* Mail account main windows */ + +"Welcome to the SOGo Mailer. Use the folder tree on the left to browse your mail accounts!" = "歡迎使用SOGO郵件系統. 請使用左側的列表來檢視郵件帳號!"; + +"Read messages" = "讀信"; +"Write a new message" = "寫新信"; + +"Share: " = "分享:"; +"Account: " = "帳號:"; +"Shared Account: " = "分享的帳號:"; + +/* acls */ +"Access rights to" = "存取權限"; +"For user" = "提供使用者"; + +"Any Authenticated User" = "任何認證的使用者"; + +"List and see this folder" = "列出並檢視這個資料匣"; +"Read mails from this folder" = "讀取這個資料匣的信件"; +"Mark mails read and unread" = "標示信件為己讀/未讀\""; +"Modify the flags of the mails in this folder" = "修改這個資料匣信件的標示"; +"Insert, copy and move mails into this folder" = "插入, 拷貝 及搬移信件到這個資料匣"; +"Post mails" = "寄出信件"; +"Add subfolders to this folder" = "在這個資料匣增加子資料匣"; +"Remove this folder" = "刪除這個資料匣"; +"Erase mails from this folder" = "清除這個資料匣的信件"; +"Expunge this folder" = "清除這個目資料匣"; +"Export This Folder" = "匯出資料匣"; +"Modify the acl of this folder" = "修改這個資料匣的存取控制清單"; + +"Saved Messages.zip" = "儲存信件壓縮檔"; + +"Update" = "更新"; +"Cancel" = " 取消"; + +/* Mail edition */ + +"From" = "寄件人"; +"Subject" = "主旨"; +"To" = "收件者"; +"Cc" = "副本"; +"Bcc" = "密件副本"; +"Reply-To" = "回覆到"; +"Add address" = "增加郵件帳號"; +"Body" = "信件內容"; + +"Open" = "開啟"; +"Select All" = "全部選取"; +"Attach Web Page..." = "附件網頁..."; +"file" = "檔案"; +"files" = "多檔案"; +"Save all" = "全部儲存"; + +"to" = "收件者"; +"cc" = "副本"; +"bcc" = "密件副本"; + +"Edit Draft..." = "編輯草稿..."; +"Load Images" = "加入圖檔"; + +"Return Receipt" = "回覆回條"; +"The sender of this message has asked to be notified when you read this message. Do you with to notify the sender?" = "寄件者要求您讀取信件時回覆通知,請問您要回覆嗎?"; +"Return Receipt (displayed) - %@"= "回覆回條 (顯示) - %@"; +"This is a Return Receipt for the mail that you sent to %@.\n\nNote: This Return Receipt only acknowledges that the message was displayed on the recipient's computer. There is no guarantee that the recipient has read or understood the message contents." = "這是您寄送給 %@ 的回覆回條。\n\n附註: 回覆回條只代表收件者己收到這封郵件。並不保證收件者己經閱讀或是知道郵件內容。"; + +"Priority" = "優先順序"; +"highest" = "最重要"; +"high" = "重要"; +"normal" = "一般"; +"low" = "低"; +"lowest" = "最低"; + +"This mail is being sent from an unsecure network!" = "這封郵件是來自非安全的網段!"; + +"Address Book:" = "通訊錄:"; +"Search For:" = "搜尋:"; + +/* Popup "show" */ + +"all" = "全部"; +"read" = "已讀"; +"unread" = "未讀"; +"deleted" = "已刪除"; +"flagged" = "已註記"; + +/* MailListView */ + +"Sender" = "寄件者"; +"Subject or Sender" = "主旨或寄件者"; +"To or Cc" = "收件者或副本收件者"; +"Entire Message" = "全部內容"; + +"Date" = "日期"; +"View" = "檢視"; +"All" = "全部"; +"No message" = "沒有信件"; +"messages" = "信件"; + +"first" = "最前"; +"previous" = "前"; +"next" = "後"; +"last" = "最後"; + +"msgnumber_to" = "收件人"; +"msgnumber_of" = "的"; + +"Mark Unread" = "標示為未讀"; +"Mark Read" = "標示為已讀"; + +"Untitled" = "無主旨"; + +/* Tree */ + +"SentFolderName" = "寄件備份"; +"TrashFolderName" = "垃圾桶"; +"InboxFolderName" = "收件匣"; +"DraftsFolderName" = "草稿匣"; +"SieveFolderName" = "垃圾信件匣"; +"Folders" = "目錄\n"; /* title line */ + +/* MailMoveToPopUp */ + +"MoveTo" = "搬移到"; + +/* Address Popup menu */ +"Add to Address Book..." = "加到通訊錄..."; +"Compose Mail To" = "寫新信"; +"Create Filter From Message..." = "建立規則..."; + +/* Image Popup menu */ +"Save Image" = "儲存圖片"; +"Save Attachment" = "儲存附檔"; + +/* Mailbox popup menus */ +"Open in New Mail Window" = "在新視窗開啟信件"; +"Copy Folder Location" = "複製資料匣位置"; +"Subscribe..." = "訂閱..."; +"Mark Folder Read" = "將資料匣標示為已讀"; +"New Folder..." = "新增資料匣..."; +"Compact This Folder" = "壓縮此資料匣"; +"Search Messages..." = "搜尋信件..."; +"Sharing..." = "共享..."; +"New Subfolder..." = "新增子資料匣..."; +"Rename Folder..." = "修改資料匣名稱..."; +"Delete Folder" = "刪除資料匣"; +"Use This Folder For" = "這個資料匣使用於"; +"Get Messages for Account" = "讀取這個帳號的信件"; +"Properties..." = "屬性..."; +"Delegation..." = "授權...\""; + +/* Use This Folder menu */ +"Sent Messages" = "寄信備份"; +"Drafts" = "草稿匣"; +"Deleted Messages" = "垃圾桶"; + +/* Message list popup menu */ +"Open Message In New Window" = "在新視窗開啟信件"; +"Reply to Sender Only" = "只回覆寄件者"; +"Reply to All" = "全部回信"; +"Edit As New..." = "編輯為新的..."; +"Move To" = "移動到"; +"Copy To" = "複製到"; +"Label" = "標籤"; +"Mark" = "標示"; +"Save As..." = "儲存為..."; +"Print Preview" = "預覽列印"; +"View Message Source" = "檢視信件原始檔"; +"Print..." = "列印..."; +"Delete Message" = "刪除信件"; +"Delete Selected Messages" = "刪除選擇的信件"; + +"This Folder" = "該資料匣"; + +/* Label popup menu */ +"None" = "無"; + +/* Mark popup menu */ +"As Read" = "己讀"; +"Thread As Read" = "標示為己讀"; +"As Read By Date..." = "按日期讀取..."; +"All Read" = "全部讀取"; +"Flag" = "標示"; +"As Junk" = "這是垃圾圾郵件"; +"As Not Junk" = "這不是垃圾郵件"; +"Run Junk Mail Controls" = "執行垃圾郵件管制"; + +"Search messages in:" = "搜尋信件在:"; +"Search" = "搜尋"; +"Search subfolders" = "搜尋子資料匣"; +"Match any of the following" = "符合下列任一條件"; +"Match all of the following" = "符合以下所有條件"; +"contains" = "包含"; +"does not contain" = "不包含"; +"No matches found" = "未找到符合條件的資料"; +"results found" = "搜尋結果"; +"result found" = "搜尋結果"; +"Please specify at least one filter" = "請指定至少一項過濾規則"; + +/* Folder operations */ +"Name :" = "名稱:"; +"Enter the new name of your folder :" + = "輸入新資料匣名稱 :"; +"Do you really want to move this folder into the trash ?" + = "是否確定將這個資料匣移到垃圾桶?"; +"Operation failed" = "操作失敗"; + +"Quota" = "使用空間"; +"quotasFormat" = "%{0}% 己使用 %{1} MB"; + +"Please select a message." = "請選擇一封信件。"; +"Please select a message to print." = "請選擇要列印的信件。"; +"Please select only one message to print." = "請選擇單封信件進行列印。"; +"The message you have selected doesn't exist anymore." = "您選擇的信件已不存在。"; + +"The folder with name \"%{0}\" could not be created." += "無法建立名稱為 \"%{0}\" 的資料匣。"; +"This folder could not be renamed to \"%{0}\"." += "無法將資料匣名稱更改為 \"%{0}\"。"; +"The folder could not be deleted." += "無法刪除此資料匣。"; +"The trash could not be emptied." += "垃圾桶不能清空。"; +"The folder functionality could not be changed." += "無法修改該資料匣的功能。;"; + +"You need to choose a non-virtual folder!" = "您必須選擇一個非虛擬的資料匣!"; + +"Moving a message into its own folder is impossible!" += "不能將信件搬移到原來所在的資料匣!"; +"Copying a message into its own folder is impossible!" += "不能將信件複製到原來所在的資料匣!"; + +/* Message operations */ +"The messages could not be moved to the trash folder. Would you like to delete them immediately?" += "無法將郵件搬移到垃圾桶。您確定要刪除這封郵件嗎?"; + +/* Message editing */ +"error_missingsubject" = "這封郵件沒有主旨。是否仍要寄送?"; +"error_missingrecipients" = "請輸入至少一個收件者帳號。"; +"Send Anyway" = "信件寄送"; +"Error while saving the draft:" = "草稿儲存發生錯誤:"; +"Error while uploading the file \"%{0}\":" = "檔案上傳發送錯誤 \"%{0}\":"; +"There is an active file upload. Closing the window will interrupt it." = "檔案上傳中。視窗關閉會造成上傳中斷。"; + +/* Message sending */ +"cannot send message: (smtp) all recipients discarded" = "無法寄送信件: 所有收件者帳號都無法寄出。"; +"cannot send message (smtp) - recipients discarded:" = "無法寄送信件。下面的收件者帳號無法寄出:"; +"cannot send message: (smtp) error when connecting" = "無法寄送郵件: 連接SMTP伺服器失敗。"; + +/* Contacts list in mail editor */ +"Email" = "電子郵件帳號"; +"Name" = "名稱"; diff --git a/UI/MailerUI/GNUmakefile b/UI/MailerUI/GNUmakefile index 180de0ad7..2e8892603 100644 --- a/UI/MailerUI/GNUmakefile +++ b/UI/MailerUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MailerUI MailerUI_PRINCIPAL_CLASS = MailerUIProduct -MailerUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +MailerUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh MailerUI_OBJC_FILES += \ MailerUIProduct.m \ diff --git a/UI/MainUI/Arabic.lproj/Localizable.strings b/UI/MainUI/Arabic.lproj/Localizable.strings index 8081ee866..78eaa957f 100644 --- a/UI/MainUI/Arabic.lproj/Localizable.strings +++ b/UI/MainUI/Arabic.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Basque.lproj/Localizable.strings b/UI/MainUI/Basque.lproj/Localizable.strings index b9fe88e2b..b07bf2fea 100644 --- a/UI/MainUI/Basque.lproj/Localizable.strings +++ b/UI/MainUI/Basque.lproj/Localizable.strings @@ -21,6 +21,7 @@ "choose" = "Aukeratu ..."; "Arabic" = "العربية"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings b/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings index eda390347..d7c38ac29 100644 --- a/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings +++ b/UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Catalan.lproj/Localizable.strings b/UI/MainUI/Catalan.lproj/Localizable.strings index 4c23f7a8d..aa2dad483 100644 --- a/UI/MainUI/Catalan.lproj/Localizable.strings +++ b/UI/MainUI/Catalan.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/ChineseTaiwan.lproj/Locale b/UI/MainUI/ChineseTaiwan.lproj/Locale new file mode 100644 index 000000000..61c05604a --- /dev/null +++ b/UI/MainUI/ChineseTaiwan.lproj/Locale @@ -0,0 +1,35 @@ +/* ChineseTaiwan */ +{ + NSLanguageName = "ChineseTaiwan"; + NSFormalName = "ChineseTaiwan"; + NSLocaleCode = "zh"; /* ISO 639-1 */ + NSLanguageCode = "zho"; /* ISO 639-2 */ + NSParentContext = ""; + + NSAMPMDesignation = (AM, PM); + NSCurrencySymbol = "$"; + NSDateFormatString = "%A, %B %e, %Y"; + NSDateTimeOrdering = MDYH; + NSDecimalDigits = ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); + NSDecimalSeparator = "."; + NSEarlierTimeDesignations = ("之前", "最後", "過去", "以前"); + NSHourNameDesignations = ((0, "午夜"), (10, "上午"), (12, "中午", "午餐"), (14, "下午"), (19, "晚餐")); + NSInternationalCurrencyString = TWD; /* ISO 4217 */ + NSLaterTimeDesignations = ("次"); + NSMonthNameArray = ("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"); + NSNextDayDesignations = ("明天"); + NSNextNextDayDesignations = ("次日"); + NSPriorDayDesignations = ("昨天"); + NSShortDateFormatString = "%m/%e/%y"; + NSShortMonthNameArray = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); + NSShortTimeDateFormatString = "%m/%e/%y %I:%M %p"; + NSShortWeekDayNameArray = (Sun, Mon, Tue, Wed, Thu, Fri, Sat); + NSThisDayDesignations = ("今天", "現在"); + NSThousandsSeparator = ","; + NSTimeDateFormatString = "%A, %B %e, %Y %I:%M:%S %p %Z"; + NSTimeFormatString = "%I:%M:%S %p"; + NSWeekDayNameArray = ("星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"); + NSYearMonthWeekDesignations = ("年", "月", "週"); + NSPositiveCurrencyFormatString = "$9,999.00"; + NSNegativeCurrencyFormatString = "-$9,999.00"; +} diff --git a/UI/MainUI/ChineseTaiwan.lproj/Localizable.strings b/UI/MainUI/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..56420bce6 --- /dev/null +++ b/UI/MainUI/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,84 @@ +/* this file is in UTF-8 format! */ + +"title" = "SOGo"; + +"Username:" = "Username:"; +"Password:" = "Password:"; +"Domain:" = "Domain:"; +"Remember username" = "Remember username"; + +"Connect" = "Connect"; + +"Wrong username or password." = "Wrong username or password."; +"cookiesNotEnabled" = "You cannot login because your browser's cookies are disabled. Please enable cookies in your browser's settings and try again."; + +"browserNotCompatible" = "We've detected that your browser version is currently not supported on this site. Our recommendation is to use Firefox. Click on the link below to download the most current version of this browser."; +"alternativeBrowsers" = "Alternatively, you can also use the following compatible browsers"; +"alternativeBrowserSafari" = "Alternatively, you can also use Safari."; +"Download" = "Download"; + +"Language:" = "Language:"; +"choose" = "Choose ..."; +"Arabic" = "العربية"; +"Basque" = "Euskara"; +"Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; +"Czech" = "Česky"; +"Danish" = "Dansk (Danmark)"; +"Dutch" = "Nederlands"; +"English" = "English"; +"Finnish" = "Suomi"; +"French" = "Français"; +"German" = "Deutsch"; +"Hungarian" = "Magyar"; +"Icelandic" = "Íslenska"; +"Italian" = "Italiano"; +"NorwegianBokmal" = "Norsk bokmål"; +"NorwegianNynorsk" = "Norsk nynorsk"; +"Polish" = "Polski"; +"BrazilianPortuguese" = "Português brasileiro"; +"Russian" = "Русский"; +"Slovak" = "Slovensky"; +"Slovenian" = "Slovenščina"; +"SpanishSpain" = "Español (España)"; +"SpanishArgentina" = "Español (Argentina)"; +"Swedish" = "Svenska"; +"Ukrainian" = "Українська"; +"Welsh" = "Cymraeg"; + +"About" = "About"; +"AboutBox" = "Developed by Inverse, SOGo is a fully-featured groupware server with a focus on scalability and simplicity.

+SOGo provides a rich AJAX-based Web interface and supports multiple native clients through the use of standard protocols such as CalDAV and CardDAV.

+SOGo is distributed under the GNU GPL version 2 or later and parts are distributed under the GNU LGPL version 2. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

+See this page for various support options."; + +"Your account was locked due to too many failed attempts." = "Your account was locked due to too many failed attempts."; +"Your account was locked due to an expired password." = "Your account was locked due to an expired password."; +"Login failed due to unhandled error case: " = "Login failed due to unhandled error case: "; +"Change your Password" = "Change your Password"; +"The password was changed successfully." = "The password was changed successfully."; +"Your password has expired, please enter a new one below:" = "Your password has expired, please enter a new one below:"; +"Password must not be empty." = "Password must not be empty."; +"The passwords do not match. Please try again." = "The passwords do not match. Please try again."; +"Password Grace Period" = "Password Grace Period"; +"You have %{0} logins remaining before your account is locked. Please change your password in the preference dialog." = "You have %{0} logins remaining before your account is locked. Please change your password in the preference dialog."; +"Password about to expire" = "Password about to expire"; +"Your password is going to expire in %{0} %{1}." = "Your password is going to expire in %{0} %{1}."; +"days" = "days"; +"hours" = "hours"; +"minutes" = "minutes"; +"seconds" = "seconds"; +"Password change failed" = "Password change failed"; +"Password change failed - Permission denied" = "Password change failed - Permission denied"; +"Password change failed - Insufficient password quality" = "Password change failed - Insufficient password quality"; +"Password change failed - Password is too short" = "Password change failed - Password is too short"; +"Password change failed - Password is too young" = "Password change failed - Password is too young"; +"Password change failed - Password is in history" = "Password change failed - Password is in history"; +"Unhandled policy error: %{0}" = "Unhandled policy error: %{0}"; +"Unhandled error response" = "Unhandled error response"; +"Password change is not supported." = "Password change is not supported."; +"Unhandled HTTP error code: %{0}" = "Unhandled HTTP error code: %{0}"; +"New password:" = "New password:"; +"Confirmation:" = "Confirmation:"; +"Cancel" = "Cancel"; +"Please wait..." = "Please wait..."; diff --git a/UI/MainUI/Czech.lproj/Localizable.strings b/UI/MainUI/Czech.lproj/Localizable.strings index d70a1e841..8d4553090 100644 --- a/UI/MainUI/Czech.lproj/Localizable.strings +++ b/UI/MainUI/Czech.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Danish.lproj/Localizable.strings b/UI/MainUI/Danish.lproj/Localizable.strings index b4899ed15..1342cac67 100644 --- a/UI/MainUI/Danish.lproj/Localizable.strings +++ b/UI/MainUI/Danish.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Dutch.lproj/Localizable.strings b/UI/MainUI/Dutch.lproj/Localizable.strings index 45eef4f72..ab6533c60 100644 --- a/UI/MainUI/Dutch.lproj/Localizable.strings +++ b/UI/MainUI/Dutch.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/English.lproj/Localizable.strings b/UI/MainUI/English.lproj/Localizable.strings index e7ba8cfc9..56420bce6 100644 --- a/UI/MainUI/English.lproj/Localizable.strings +++ b/UI/MainUI/English.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Finnish.lproj/Localizable.strings b/UI/MainUI/Finnish.lproj/Localizable.strings index 3a915756e..ccb1525cb 100644 --- a/UI/MainUI/Finnish.lproj/Localizable.strings +++ b/UI/MainUI/Finnish.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/French.lproj/Localizable.strings b/UI/MainUI/French.lproj/Localizable.strings index 207281d82..5bd1cd32c 100644 --- a/UI/MainUI/French.lproj/Localizable.strings +++ b/UI/MainUI/French.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/GNUmakefile b/UI/MainUI/GNUmakefile index e861f29a8..f25dc04ef 100644 --- a/UI/MainUI/GNUmakefile +++ b/UI/MainUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = MainUI MainUI_PRINCIPAL_CLASS = MainUIProduct -MainUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +MainUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh MainUI_OBJC_FILES += \ MainUIProduct.m \ diff --git a/UI/MainUI/German.lproj/Localizable.strings b/UI/MainUI/German.lproj/Localizable.strings index df0b10089..696835015 100644 --- a/UI/MainUI/German.lproj/Localizable.strings +++ b/UI/MainUI/German.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Hungarian.lproj/Localizable.strings b/UI/MainUI/Hungarian.lproj/Localizable.strings index a9f580e0f..f5ffe864a 100644 --- a/UI/MainUI/Hungarian.lproj/Localizable.strings +++ b/UI/MainUI/Hungarian.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Icelandic.lproj/Localizable.strings b/UI/MainUI/Icelandic.lproj/Localizable.strings index e31755031..f2e7ce9c7 100644 --- a/UI/MainUI/Icelandic.lproj/Localizable.strings +++ b/UI/MainUI/Icelandic.lproj/Localizable.strings @@ -21,6 +21,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Italian.lproj/Localizable.strings b/UI/MainUI/Italian.lproj/Localizable.strings index 32f777184..101e95579 100644 --- a/UI/MainUI/Italian.lproj/Localizable.strings +++ b/UI/MainUI/Italian.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings b/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings index fd7a045ad..f753c1c54 100644 --- a/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings +++ b/UI/MainUI/NorwegianBokmal.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings b/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings index 1afa2de64..5aaa9f4f4 100644 --- a/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings +++ b/UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Polish.lproj/Localizable.strings b/UI/MainUI/Polish.lproj/Localizable.strings index 3c83582c3..fc60f99e3 100644 --- a/UI/MainUI/Polish.lproj/Localizable.strings +++ b/UI/MainUI/Polish.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Russian.lproj/Localizable.strings b/UI/MainUI/Russian.lproj/Localizable.strings index 2d7ad057e..8e17e5ef0 100644 --- a/UI/MainUI/Russian.lproj/Localizable.strings +++ b/UI/MainUI/Russian.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Slovenian.lproj/Localizable.strings b/UI/MainUI/Slovenian.lproj/Localizable.strings index 8e07cb207..ef5fe0c51 100644 --- a/UI/MainUI/Slovenian.lproj/Localizable.strings +++ b/UI/MainUI/Slovenian.lproj/Localizable.strings @@ -21,6 +21,7 @@ "choose" = "Izberi ..."; "Arabic" = "العربية"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/SpanishArgentina.lproj/Localizable.strings b/UI/MainUI/SpanishArgentina.lproj/Localizable.strings index 3235b3298..11504571d 100644 --- a/UI/MainUI/SpanishArgentina.lproj/Localizable.strings +++ b/UI/MainUI/SpanishArgentina.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/SpanishSpain.lproj/Localizable.strings b/UI/MainUI/SpanishSpain.lproj/Localizable.strings index 5aa248878..35350ec58 100644 --- a/UI/MainUI/SpanishSpain.lproj/Localizable.strings +++ b/UI/MainUI/SpanishSpain.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Swedish.lproj/Localizable.strings b/UI/MainUI/Swedish.lproj/Localizable.strings index 29dd8d2a2..d44508b20 100644 --- a/UI/MainUI/Swedish.lproj/Localizable.strings +++ b/UI/MainUI/Swedish.lproj/Localizable.strings @@ -21,6 +21,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Ukrainian.lproj/Localizable.strings b/UI/MainUI/Ukrainian.lproj/Localizable.strings index 2944eaa39..a81718e8a 100644 --- a/UI/MainUI/Ukrainian.lproj/Localizable.strings +++ b/UI/MainUI/Ukrainian.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/MainUI/Welsh.lproj/Localizable.strings b/UI/MainUI/Welsh.lproj/Localizable.strings index 02d59e6ec..eb8200a06 100644 --- a/UI/MainUI/Welsh.lproj/Localizable.strings +++ b/UI/MainUI/Welsh.lproj/Localizable.strings @@ -21,6 +21,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Arabic.lproj/Localizable.strings b/UI/PreferencesUI/Arabic.lproj/Localizable.strings index 77d3c3548..14c11e534 100644 --- a/UI/PreferencesUI/Arabic.lproj/Localizable.strings +++ b/UI/PreferencesUI/Arabic.lproj/Localizable.strings @@ -206,6 +206,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Basque.lproj/Localizable.strings b/UI/PreferencesUI/Basque.lproj/Localizable.strings index 40f3b1c61..a3d3947e8 100644 --- a/UI/PreferencesUI/Basque.lproj/Localizable.strings +++ b/UI/PreferencesUI/Basque.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings b/UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings index e18095e74..95e760d0d 100644 --- a/UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings +++ b/UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Catalan.lproj/Localizable.strings b/UI/PreferencesUI/Catalan.lproj/Localizable.strings index b8b676740..7ef1ae962 100644 --- a/UI/PreferencesUI/Catalan.lproj/Localizable.strings +++ b/UI/PreferencesUI/Catalan.lproj/Localizable.strings @@ -219,6 +219,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings b/UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..c2f558d92 --- /dev/null +++ b/UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,329 @@ +/* toolbar */ +"Save and Close" = "儲存並關閉"; +"Close" = "關閉"; + +/* tabs */ +"General" = "一般"; +"Calendar Options" = "行事曆選項"; +"Contacts Options" = "通訊錄選項"; +"Mail Options" = "郵件選項"; +"IMAP Accounts" = "IMAP 帳號"; +"Vacation" = "休假自動回覆設定"; +"Forward" = "轉寄"; +"Password" = "密碼"; +"Categories" = "分類"; +"Appointments invitations" = "邀請"; +"Name" = "名稱"; +"Color" = "顏色"; +"Add" = "新增"; +"Delete" = "删除"; + +/* contacts categories */ +"contacts_category_labels" = "同事, 競爭對手, 客戶, 朋友, 家庭, 工作伙伴, 供應商, 媒體, VIP"; + +/* vacation (auto-reply) */ +"Enable vacation auto reply" = "開啟休假自動回覆"; +"Auto reply message :" = "自動回覆內容:"; +"Email addresses (separated by commas) :" = "電子郵件地址 (用逗號分隔):"; +"Add default email addresses" = "增加預設的電子郵件地址"; +"Days between responses :" = "回覆間隔天數:"; +"Do not send responses to mailing lists" = "不要寄送回覆給列表的帳號"; +"Disable auto reply on" = "關閉自動回覆功能"; +"Always send vacation message response" = "開啟休假自動回覆功能"; +"Please specify your message and your email addresses for which you want to enable auto reply." += "請輸入自動回覆的訊息內容及電子郵件帳號。"; +"Your vacation message must not end with a single dot on a line." = "休假自動回覆訊息每一行最後一個字元不能是半型的句號(.)。"; +"End date of your auto reply must be in the future." += "結束日期必須是未來的日期。"; + +/* forward messages */ +"Forward incoming messages" = "信件轉寄"; +"Keep a copy" = "保留備份"; +"Please specify an address to which you want to forward your messages." += "請設定信件轉寄的電子郵件帳號。"; +"You are not allowed to forward your messages to an external email address." = "您不能轉寄信件至外部電子郵件;帳號。"; +"You are not allowed to forward your messages to an internal email address." = "您不能轉寄信件至內部電子郵件;帳號。"; + + +/* d & t */ +"Current Time Zone :" = "時區:"; +"Short Date Format :" = "簡易日期格式:"; +"Long Date Format :" = "完整日期格式:"; +"Time Format :" = "時間格式:"; + +"default" = "預設"; + +"shortDateFmt_0" = "%d-%b-%y"; + +"shortDateFmt_1" = "%d-%m-%y"; +"shortDateFmt_2" = "%d/%m/%y"; +"shortDateFmt_3" = "%e/%m/%y"; + +"shortDateFmt_4" = "%d-%m-%Y"; +"shortDateFmt_5" = "%d/%m/%Y"; + +"shortDateFmt_6" = "%m-%d-%y"; +"shortDateFmt_7" = "%m/%d/%y"; +"shortDateFmt_8" = "%m/%e/%y"; + +"shortDateFmt_9" = "%y-%m-%d"; +"shortDateFmt_10" = "%y/%m/%d"; +"shortDateFmt_11" = "%y.%m.%d"; + +"shortDateFmt_12" = "%Y-%m-%d"; +"shortDateFmt_13" = "%Y/%m/%d"; +"shortDateFmt_14" = "%Y.%m.%d"; + +"shortDateFmt_15" = ""; + +"longDateFmt_0" = "%A, %B %d, %Y"; +"longDateFmt_1" = "%B %d, %Y"; +"longDateFmt_2" = "%A, %d %B, %Y"; +"longDateFmt_3" = "%d %B, %Y"; +"longDateFmt_4" = ""; +"longDateFmt_5" = ""; +"longDateFmt_6" = ""; +"longDateFmt_7" = ""; +"longDateFmt_8" = ""; +"longDateFmt_9" = ""; +"longDateFmt_10" = ""; + +"timeFmt_0" = "%I:%M %p"; +"timeFmt_1" = "%H:%M"; +"timeFmt_2" = ""; +"timeFmt_3" = ""; +"timeFmt_4" = ""; + +/* calendar */ +"Week begins on :" = "一週起始日為:"; +"Day start time :" = "每日開始時間是:"; +"Day end time :" = "每日結束時間是:"; +"Day start time must be prior to day end time." = "每日開始時間必須早於結束時間。"; +"Show time as busy outside working hours" = "顯示工作時間以下時段顯示為忙碌"; +"First week of year :" = "一年的第一週:"; +"Enable reminders for Calendar items" = "開啟行事曆的提醒功能"; +"Play a sound when a reminder comes due" = "提醒時撥放音效"; +"Default reminder :" = "預設提醒:"; + +"firstWeekOfYear_January1" = "開始於一月一日"; +"firstWeekOfYear_First4DayWeek" = "第一個只有四天的週"; +"firstWeekOfYear_FirstFullWeek" = "第一個完整的週"; + +"Prevent from being invited to appointments" = "拒絶邀請"; +"White list for appointment invitations:" = "接受邀請的名單列表:"; +"Contacts Names" = "連絡人姓名"; + +/* Default Calendar */ +"Default calendar :" = "預設行事曆"; +"selectedCalendar" = "選擇的行事曆"; +"personalCalendar" = "個人行事曆"; +"firstCalendar" = "第一個有效的行事曆"; + +"reminder_NONE" = "無提醒"; +"reminder_5_MINUTES_BEFORE" = "5分鐘前"; +"reminder_10_MINUTES_BEFORE" = "10分鐘前"; +"reminder_15_MINUTES_BEFORE" = "15分鐘前"; +"reminder_30_MINUTES_BEFORE" = "30分鐘前"; +"reminder_45_MINUTES_BEFORE" = "45分鐘前"; +"reminder_1_HOUR_BEFORE" = " 1小時前"; +"reminder_2_HOURS_BEFORE" = "2小時前"; +"reminder_5_HOURS_BEFORE" = "5小時前"; +"reminder_15_HOURS_BEFORE" = "15小時前"; +"reminder_1_DAY_BEFORE" = "1天前"; +"reminder_2_DAYS_BEFORE" = "2天前"; +"reminder_1_WEEK_BEFORE" = "1週前"; + +/* Mailer */ +"Labels" = "標籤"; +"Label" = "標籤"; +"Show subscribed mailboxes only" = "只顯示訂閱的信箱"; +"Sort messages by threads" = "依指定的方式進行排序"; +"When sending mail, add unknown recipients to my" = "寄送信件時,將未知的收件者帳號加入我的通訊錄"; + +"Forward messages:" = "轉寄信件:"; +"messageforward_inline" = "加入原始信件內容"; +"messageforward_attached" = "將原始信件做為附件"; + +"When replying to a message:" = "當回覆信件時:"; +"replyplacement_above" = "回覆內容在原始信件上面"; +"replyplacement_below" = "回覆內容在原始信件下面"; +"And place my signature" = "增加簽名檔"; +"signatureplacement_above" = "在回覆之下"; +"signatureplacement_below" = "在引用之下"; +"Compose messages in" = "信件撰寫格式"; +"composemessagestype_html" = "HTML"; +"composemessagestype_text" = "純文字"; +"Display remote inline images" = "顯示圖片"; +"displayremoteinlineimages_never" = "從不"; +"displayremoteinlineimages_always" = "永遠"; + +"Auto save every" = "自動存檔間隔"; +"minutes" = "分鐘"; + +/* Contact */ +"Personal Address Book" = "個人通訊錄"; +"Collected Address Book" = "公用通訊錄"; + +/* IMAP Accounts */ +"New Mail Account" = "新的電子郵件帳號"; + +"Server Name:" = "伺服器名稱:"; +"Port:" = "埠號:"; +"Encryption:" = "加密:"; +"None" = "無"; +"User Name:" = "使用者名稱:"; +"Password:" = "密碼:"; + +"Full Name:" = "全名:"; +"Email:" = "電子郵件郵件:"; +"Reply To Email:" = "回覆電子郵件帳號:"; +"Signature:" = "簽名檔:"; +"(Click to create)" = "(點擊後建立)"; + +"Signature" = "簽名"; +"Please enter your signature below:" = "請在下面輸入簽名:"; + +"Please specify a valid sender address." = "請指定一個有效的寄件者帳號。"; +"Please specify a valid reply-to address." = "請指定一個有效的回覆郵件帳號。"; + +/* Additional Parameters */ +"Additional Parameters" = "其他參數"; + +/* password */ +"New password:" = "新密碼"; +"Confirmation:" = "確認:"; +"Change" = "修改"; + +/* Event+task classifications */ +"Default events classification :" = "預設的事件類別:"; +"Default tasks classification :" = "預設的任務類別:"; +"PUBLIC_item" = "公開"; +"CONFIDENTIAL_item" = "機密"; +"PRIVATE_item" = "私人"; + +/* Event+task categories */ +"category_none" = "無"; +"calendar_category_labels" = "結婚紀念日,生日,工作,電話,顧客,競爭對手,客戶,收藏, 追踪 ,禮物,假日,想法,會議,事件,雜項,個人,專案,公眾假日,狀態,供應商,旅遊,休假"; + +/* Default module */ +"Calendar" = "行事曆"; +"Contacts" = "通訊錄"; +"Mail" = "郵件"; +"Last" = "上次使用"; +"Default Module :" = "預設模式:"; +"SOGo Version :" = "SOGo版本:"; + +"Language :" = "語言:"; +"choose" = "選擇..."; +"Arabic" = "العربية"; +"Catalan" = "Català"; +"Czech" = "Česky"; +"Danish" = "Dansk (Danmark)"; +"Dutch" = "Nederlands"; +"English" = "English"; +"Finnish" = "Suomi"; +"French" = "Français"; +"German" = "Deutsch"; +"Hungarian" = "Magyar"; +"Icelandic" = "Íslenska"; +"Italian" = "Italiano"; +"NorwegianBokmal" = "Norsk bokmål"; +"NorwegianNynorsk" = "Norsk nynorsk"; +"BrazilianPortuguese" = "Português brasileiro"; +"Polish" = "Polski"; +"Russian" = "Русский"; +"Slovak" = "Slovensky"; +"SpanishSpain" = "Español (España)"; +"SpanishArgentina" = "Español (Argentina)"; +"Swedish" = "Svenska"; +"Ukrainian" = "Українська"; +"Welsh" = "Cymraeg"; + +"Refresh View :" = "重新整理:"; +"refreshview_manually" = "手動"; +"refreshview_every_minute" = "每分鐘"; +"refreshview_every_2_minutes" = "每2分鐘"; +"refreshview_every_5_minutes" = "每5分鐘"; +"refreshview_every_10_minutes" = "每10分鐘"; +"refreshview_every_20_minutes" = "每20分鐘"; +"refreshview_every_30_minutes" = "每30分鐘"; +"refreshview_once_per_hour" = "一小時一次"; + +/* Return receipts */ +"When I receive a request for a return receipt:" = "當我收到要求讀取回條時:"; +"Never send a return receipt" = "不傳送回條"; +"Allow return receipts for some messages" = "部份郵件允許傳送回條"; +"If I'm not in the To or Cc of the message:" = "當我的帳號不在郵件的收件者或或副本收件者名單中:"; +"If the sender is outside my domain:" = "當寄件者帳號與我不同網域名稱:"; +"In all other cases:" = "任何其他的情形:"; + +"Never send" = "不要傳送回條"; +"Always send" = "傳送回條"; +"Ask me" = "傳送回條前先詢問我"; + +/* Filters - UIxPreferences */ +"Filters" = "過濾規則"; +"Active" = "啟動"; +"Move Up" = "上移"; +"Move Down" = "下移"; +"Connection error" = "連接錯誤"; +"Service temporarily unavailable" = "伺服器暫時沒有回應"; + +/* Filters - UIxFilterEditor */ +"Filter name:" = "過濾規則名稱:"; +"For incoming messages that" = "當收到的電子郵件"; +"match all of the following rules:" = "符合下面所有規則:"; +"match any of the following rules:" = "符合下面任何規則:"; +"match all messages" = "符合所有郵件"; +"Perform these actions:" = "執行這些指令:"; +"Untitled Filter" = "沒有名稱的過濾規則"; + +"Subject" = "主旨"; +"From" = "寄件者"; +"To" = "收件者"; +"Cc" = "副本"; +"To or Cc" = "收件者或副本收件者"; +"Size (Kb)" = "大小 (Kb)"; +"Header" = "信件表頭"; +"Body" = "信件本文"; +"Flag the message with:" = "標示郵件為:"; +"Discard the message" = "刪除信件"; +"File the message in:" = "信件歸檔至:"; +"Keep the message" = "保留信件"; +"Forward the message to:" = "轉寄信件至:"; +"Send a reject message:" = "寄送拒絶信件:"; +"Send a vacation message" = "寄送休假訊息"; +"Stop processing filter rules" = "終止郵件過濾"; + +"is under" = "在下面"; +"is over" = "已結束"; +"is" = "是"; +"is not" = "不是"; +"contains" = "包含"; +"does not contain" = "不包含"; +"matches" = "符合"; +"does not match" = "不符合"; +"matches regex" = "符合正規表示法"; +"does not match regex" = "不符合正規表示法"; + +"Seen" = " 已讀"; +"Deleted" = "已刪除"; +"Answered" = "已回覆"; +"Flagged" = "已註記"; +"Junk" = "垃圾信件"; +"Not Junk" = "這不是垃圾郵件"; + +/* Password policy */ +"The password was changed successfully." = "密碼修改完成。"; +"Password must not be empty." = "密碼不可為空白。"; +"The passwords do not match. Please try again." = "密碼不一致,請再試一次。"; +"Password change failed" = "密碼更改失敗"; +"Password change failed - Permission denied" = "密碼更改失敗-權限被拒"; +"Password change failed - Insufficient password quality" = "密碼修改失敗 - 密碼複雜度不符規則"; +"Password change failed - Password is too short" = "密碼修改失敗 - 密碼太短"; +"Password change failed - Password is too young" = "密碼修改失敗 - 密碼太簡單"; +"Password change failed - Password is in history" = "密碼修改失敗 - 曾使用過此密碼,不符歷使用記錄原則"; +"Unhandled policy error: %{0}" = "未知的錯誤: %{0}"; +"Unhandled error response" = "未知的錯誤回覆"; +"Password change is not supported." = "不可更改密碼"; +"Unhandled HTTP error code: %{0}" = "未知的HTTP錯誤碼: %{0}"; diff --git a/UI/PreferencesUI/Czech.lproj/Localizable.strings b/UI/PreferencesUI/Czech.lproj/Localizable.strings index c28272954..aadda48dc 100644 --- a/UI/PreferencesUI/Czech.lproj/Localizable.strings +++ b/UI/PreferencesUI/Czech.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Danish.lproj/Localizable.strings b/UI/PreferencesUI/Danish.lproj/Localizable.strings index f9976e293..524b5aec1 100644 --- a/UI/PreferencesUI/Danish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Danish.lproj/Localizable.strings @@ -206,6 +206,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Dutch.lproj/Localizable.strings b/UI/PreferencesUI/Dutch.lproj/Localizable.strings index 80fd0b1a3..4ada4c412 100644 --- a/UI/PreferencesUI/Dutch.lproj/Localizable.strings +++ b/UI/PreferencesUI/Dutch.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/English.lproj/Localizable.strings b/UI/PreferencesUI/English.lproj/Localizable.strings index 2859b61cf..7f5159f84 100644 --- a/UI/PreferencesUI/English.lproj/Localizable.strings +++ b/UI/PreferencesUI/English.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Finnish.lproj/Localizable.strings b/UI/PreferencesUI/Finnish.lproj/Localizable.strings index f43d2c705..207bd0916 100644 --- a/UI/PreferencesUI/Finnish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Finnish.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/French.lproj/Localizable.strings b/UI/PreferencesUI/French.lproj/Localizable.strings index 59a87dcf9..00a12a5b7 100644 --- a/UI/PreferencesUI/French.lproj/Localizable.strings +++ b/UI/PreferencesUI/French.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/GNUmakefile b/UI/PreferencesUI/GNUmakefile index ce5f8cb72..450ede6ec 100644 --- a/UI/PreferencesUI/GNUmakefile +++ b/UI/PreferencesUI/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = PreferencesUI PreferencesUI_PRINCIPAL_CLASS = PreferencesUIProduct -PreferencesUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +PreferencesUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh PreferencesUI_OBJC_FILES = \ PreferencesUIProduct.m \ diff --git a/UI/PreferencesUI/German.lproj/Localizable.strings b/UI/PreferencesUI/German.lproj/Localizable.strings index bd8dbd3b2..50bf5a125 100644 --- a/UI/PreferencesUI/German.lproj/Localizable.strings +++ b/UI/PreferencesUI/German.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Hungarian.lproj/Localizable.strings b/UI/PreferencesUI/Hungarian.lproj/Localizable.strings index 367362e67..4cbef1ee1 100644 --- a/UI/PreferencesUI/Hungarian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Hungarian.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Icelandic.lproj/Localizable.strings b/UI/PreferencesUI/Icelandic.lproj/Localizable.strings index 1dc5ec3d1..5c88cb8fb 100644 --- a/UI/PreferencesUI/Icelandic.lproj/Localizable.strings +++ b/UI/PreferencesUI/Icelandic.lproj/Localizable.strings @@ -176,6 +176,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Italian.lproj/Localizable.strings b/UI/PreferencesUI/Italian.lproj/Localizable.strings index 7f40d5378..e7e7980d1 100644 --- a/UI/PreferencesUI/Italian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Italian.lproj/Localizable.strings @@ -197,6 +197,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings b/UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings index 4b4a0c91b..849ff98c8 100644 --- a/UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings +++ b/UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings b/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings index e0f0f24e3..399fdd71d 100644 --- a/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings +++ b/UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings @@ -183,6 +183,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Polish.lproj/Localizable.strings b/UI/PreferencesUI/Polish.lproj/Localizable.strings index 7fab8b4e8..f8f3e88a3 100644 --- a/UI/PreferencesUI/Polish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Polish.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Russian.lproj/Localizable.strings b/UI/PreferencesUI/Russian.lproj/Localizable.strings index 27c86dde3..5b7ea15f3 100644 --- a/UI/PreferencesUI/Russian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Russian.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Slovak.lproj/Localizable.strings b/UI/PreferencesUI/Slovak.lproj/Localizable.strings index 08337efcf..9c041a677 100644 --- a/UI/PreferencesUI/Slovak.lproj/Localizable.strings +++ b/UI/PreferencesUI/Slovak.lproj/Localizable.strings @@ -215,6 +215,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Netherlands"; diff --git a/UI/PreferencesUI/Slovenian.lproj/Localizable.strings b/UI/PreferencesUI/Slovenian.lproj/Localizable.strings index 631a60897..96e245c4a 100644 --- a/UI/PreferencesUI/Slovenian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Slovenian.lproj/Localizable.strings @@ -217,6 +217,7 @@ "choose" = "Izberi ..."; "Arabic" = "العربية"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings b/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings index 4d0c6f698..292981c60 100644 --- a/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings +++ b/UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings @@ -211,6 +211,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings b/UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings index 71d83d25a..e65014701 100644 --- a/UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings +++ b/UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings @@ -218,6 +218,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Swedish.lproj/Localizable.strings b/UI/PreferencesUI/Swedish.lproj/Localizable.strings index 7bd57e1b5..8d5920d64 100644 --- a/UI/PreferencesUI/Swedish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Swedish.lproj/Localizable.strings @@ -185,6 +185,7 @@ Servernamn:"; "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings b/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings index 3d84d8a9a..00a0b1c53 100644 --- a/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Ukrainian.lproj/Localizable.strings @@ -195,6 +195,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/PreferencesUI/Welsh.lproj/Localizable.strings b/UI/PreferencesUI/Welsh.lproj/Localizable.strings index 3dd55e168..6c3077f64 100644 --- a/UI/PreferencesUI/Welsh.lproj/Localizable.strings +++ b/UI/PreferencesUI/Welsh.lproj/Localizable.strings @@ -183,6 +183,7 @@ "Arabic" = "العربية"; "Basque" = "Euskara"; "Catalan" = "Català"; +"ChineseTaiwan" = "Chinese (Taiwan)"; "Czech" = "Česky"; "Danish" = "Dansk (Danmark)"; "Dutch" = "Nederlands"; diff --git a/UI/Scheduler/ChineseTaiwan.lproj/Localizable.strings b/UI/Scheduler/ChineseTaiwan.lproj/Localizable.strings new file mode 100644 index 000000000..d934b78a8 --- /dev/null +++ b/UI/Scheduler/ChineseTaiwan.lproj/Localizable.strings @@ -0,0 +1,565 @@ +/* this file is in UTF-8 format! */ + +/* Tooltips */ + +"Create a new event" = "新增事件"; +"Create a new task" = "新增任務"; +"Edit this event or task" = "編輯事件或任務"; +"Print the current calendar view" = "列印正在瀏覽的行事曆"; +"Delete this event or task" = "刪除事件或任務"; +"Go to today" = "移動到今天"; +"Switch to day view" = "切換到日檢視"; +"Switch to week view" = "切換到週檢視"; +"Switch to month view" = "切換到月檢視"; +"Reload all calendars" = "重新載入所有行事曆"; + +/* Tabs */ +"Date" = "日期"; +"Calendars" = "行事曆"; + +/* Day */ + +"DayOfTheMonth" = "該月的同一日"; +"dayLabelFormat" = "%m/%d/%Y"; +"today" = "今天"; + +"Previous Day" = "前一日"; +"Next Day" = "後一日"; + +/* Week */ + +"Week" = "週"; +"this week" = "本週"; + +"Week %d" = "第 %d 週"; + +"Previous Week" = "前一週"; +"Next Week" = "後一週"; + +/* Month */ + +"this month" = "本月"; + +"Previous Month" = "前一月"; +"Next Month" = "後一月"; + +/* Year */ + +"this year" = " 今年"; + +/* Menu */ + +"Calendar" = "行事曆"; +"Contacts" = "連絡人"; + +"New Calendar..." = "建立新行事曆..."; +"Delete Calendar" = "刪除行事曆..."; +"Unsubscribe Calendar" = "取消訂閱"; +"Sharing..." = "分享..."; +"Export Calendar..." = "匯出行事曆..."; +"Import Events..." = "匯入事件..."; +"Import Events" = "匯入事件"; +"Select an iCalendar file (.ics)." = "選擇iCalendar文件檔(.ics)。"; +"Upload" = "上傳"; +"Uploading" = "上傳中"; +"Publish Calendar..." = "公開行事曆..."; +"Reload Remote Calendars" = "重新載入遠端的行事曆"; +"Properties" = "屬性"; +"Done" = "完成"; +"An error occurred while importing calendar." = "匯入行事曆時發生錯誤。"; +"No event was imported." = "沒有事件匯入。\""; +"A total of %{0} events were imported in the calendar." = "共 %{0} 筆事件匯入此行事曆。"; + +"Compose E-Mail to All Attendees" = "發送通知信件給所有的邀請者"; +"Compose E-Mail to Undecided Attendees" = "發送通知信件給所有未定的邀請者"; + +/* Folders */ +"Personal calendar" = "個人行事曆"; + +/* Misc */ + +"OpenGroupware.org" = "OpenGroupware.org"; +"Forbidden" = "禁止"; + +/* acls */ + +"Access rights to" = "給予存取權限至"; +"For user" = "给使用者"; + +"Any Authenticated User" = "任一授權的使用者"; +"Public Access" = "公開存取"; + +"label_Public" = "公開"; +"label_Private" = "私人"; +"label_Confidential" = "機密"; + +"label_Viewer" = "顯示全部"; +"label_DAndTViewer" = "只顯示日期和時間"; +"label_Modifier" = "修改"; +"label_Responder" = " 回應"; +"label_None" = "無"; + +"View All" = "顯示全部"; +"View the Date & Time" = "只顯示日期和時間"; +"Modify" = "修改"; +"Respond To" = "回應"; +"None" = "無"; + +"This person can create objects in my calendar." += "允許在我的行事曆新增事件。"; +"This person can erase objects from my calendar." += "允許在我的行事曆刪除事件。"; + +/* Button Titles */ + +"Subscribe to a Calendar..." = "\"訂閱行事曆..."; +"Remove the selected Calendar" = "移除選擇的行事曆"; + +"Name of the Calendar" = "行事曆名稱"; + +"new" = "新增"; +"Print view" = "預覽列印"; +"edit" = "編輯"; +"delete" = "删除"; +"proposal" = "建議"; +"Save and Close" = "儲存並關閉"; +"Close" = "關閉"; +"Invite Attendees" = "邀請出席者"; +"Attach" = "附加檔案"; +"Update" = "更新"; +"Cancel" = "取消"; +"show_rejected_apts" = "顯示已拒絶的邀請"; +"hide_rejected_apts" = "隱藏已拒絶的邀請"; + + +/* Schedule */ + +"Schedule" = "行程"; +"No appointments found" = "沒有議程"; +"Meetings proposed by you" = "您主持的會議"; +"Meetings proposed to you" = "您出席的會議"; +"sched_startDateFormat" = "%d/%m %H:%M"; +"action" = "操作"; +"accept" = "接受"; +"decline" = "拒絶"; +"more attendees" = "其他出席者"; +"Hide already accepted and rejected appointments" = "隱藏已接受/已拒絶的議程"; +"Show already accepted and rejected appointments" = "顯示已接受/已拒絶的議程"; + +/* Print view */ + +"LIST" = "列表"; +"Print Settings" = "列印設定"; +"Title:" = "標題:"; +"Layout:" = "格式:"; +"What to Print" = "列印內容"; +"Options" = "選項"; +"Tasks with no due date" = "無截止日期的任務"; +"Display working hours only" = "只顯示工作時段"; +"Completed tasks" = "完成的任務"; +"Display events and tasks colors" = "顯示事件和任務的顏色"; +"Borders" = "邊界"; +"Backgrounds" = "背景"; + +/* Appointments */ + +"Appointment viewer" = "顯示議程"; +"Appointment editor" = "編輯議程"; +"Appointment proposal" = "安排議程"; +"Appointment on" = "會議安排在"; +"Start:" = "開始:"; +"End:" = "結束:"; +"Due Date:" = "到期日:"; +"Title:" = "標題:"; +"Calendar:" = "行事曆:"; +"Name" = "名字"; +"Email" = "郵件"; +"Status:" = "狀態:"; +"% complete" = "% 完成"; +"Location:" = "地點:"; +"Priority:" = "優先順序"; +"Privacy" = "私人"; +"Cycle" = "重複事件"; +"Cycle End" = "重複事件結束"; +"Categories" = "類别"; +"Classification" = "分類"; +"Duration" = "期間"; +"Attendees:" = "出席者:"; +"Resources" = "資源"; +"Organizer:" = "發起人:"; +"Description:" = "說明:"; +"Document:" = "文件:"; +"Category:" = "類別:"; +"Repeat:" = "重複:"; +"Reminder:" = "提醒:"; +"General:" = "一般"; +"Reply:" = "回覆:"; +"Created by:" = "建立者:"; + + +"Target:" = "目標:"; + +"attributes" = "屬性"; +"attendees" = "出席者"; +"delegated from" = "委任自"; + +/* checkbox title */ +"is private" = "私人的"; +/* classification */ +"Public" = "公開"; +"Private" = "私人"; +/* text used in overviews and tooltips */ +"empty title" = "沒有主題"; +"private appointment" = "私人議程"; + +"Change..." = "修改..."; + +/* Appointments (participation state) */ + +"partStat_NEEDS-ACTION" = "我稍後確認"; +"partStat_ACCEPTED" = "我會出席"; +"partStat_DECLINED" = "我不出席"; +"partStat_TENTATIVE" = "我可能出席"; +"partStat_DELEGATED" = "我委任其他人出席"; +"partStat_OTHER" = "其它"; + +/* Appointments (error messages) */ + +"Conflicts found!" = "發現衝突事件!"; +"Invalid iCal data!" = "無效的 iCal 資料!"; +"Could not create iCal data!" = "無法建立 iCal 資料!"; + +/* Searching */ + +"view_all" = "全部"; +"view_today" = "今天"; +"view_next7" = "一週後"; +"view_next14" = "二週後"; +"view_next31" = "31天後"; +"view_thismonth" = "本月"; +"view_future" = "全部將來的事件"; +"view_selectedday" = "選擇的日期"; + +"view_not_started" = "尚未開始的任務"; +"view_overdue" = "逾期的任務"; +"view_incomplete" = "未完任的任務"; + +"View:" = "檢視:"; +"Title, category or location" = "主題, 類別或地點"; +"Entire content" = "全部內容"; + +"Search" = "搜尋"; +"Search attendees" = "搜尋出席者"; +"Search resources" = "搜尋資源"; +"Search appointments" = "搜尋議程"; + +"All day Event" = "全天事件"; +"check for conflicts" = "檢查衝突事件"; + +"Browse URL" = "瀏覽網址"; + +"newAttendee" = "增加出席者"; + +/* calendar modes */ + +"Overview" = "總覽"; +"Chart" = "圖表"; +"List" = "列表"; +"Columns" = "列"; + +/* Priorities */ + +"prio_0" = "未指定"; +"prio_1" = "重要"; +"prio_2" = "重要"; +"prio_3" = "重要"; +"prio_4" = "重要"; +"prio_5" = "一般"; +"prio_6" = "低"; +"prio_7" = "低"; +"prio_8" = "低"; +"prio_9" = "低"; + +/* access classes (privacy) */ +"PUBLIC_vevent" = "公開事件"; +"CONFIDENTIAL_vevent" = "機密事件"; +"PRIVATE_vevent" = "私人事件"; +"PUBLIC_vtodo" = "公開任務"; +"CONFIDENTIAL_vtodo" = "機密任務"; +"PRIVATE_vtodo" = "私人任務"; + +/* status type */ +"status_" = "未指定"; +"status_NOT-SPECIFIED" = "未指定"; +"status_TENTATIVE" = "未定"; +"status_CONFIRMED" = "確認"; +"status_CANCELLED" = "取消"; +"status_NEEDS-ACTION" = "需要操作"; +"status_IN-PROCESS" = "處理中"; +"status_COMPLETED" = "完成於"; + +/* Cycles */ + +"cycle_once" = "重複一次"; +"cycle_daily" = "日重複"; +"cycle_weekly" = "週重複"; +"cycle_2weeks" = "雙週重複"; +"cycle_4weeks" = "每四週重複"; +"cycle_monthly" = "月重覆"; +"cycle_weekday" = "週末重覆"; +"cycle_yearly" = "年重複"; + +"cycle_end_never" = "沒有結束日期"; +"cycle_end_until" = "結束於"; + +"Recurrence pattern" = "重複模式"; +"Range of recurrence" = "重複範圍"; + +"Repeat" = "重複"; +"Daily" = "日"; +"Weekly" = "週"; +"Monthly" = "月"; +"Yearly" = "年"; +"Every" = "每"; +"Days" = "天"; +"Week(s)" = "週"; +"On" = "在"; +"Month(s)" = "月"; +/* [Event recurrence editor] Ex: _The_ first Sunday */ +"The" = "此"; +"Recur on day(s)" = "重複事件發生日"; +"Year(s)" = "年"; +/* [Event recurrence editor] Ex: Every first Sunday _of_ April */ +"cycle_of" = "的\n"; +"No end date" = "沒有結束日期"; +"Create" = "建立"; +"appointment(s)" = "議程"; +"Repeat until" = "重複直到"; + +"First" = "第一"; +"Second" = "第二"; +"Third" = "第三"; +"Fourth" = "第四"; +"Fift" = "第五"; +"Last" = "最後"; + +/* Appointment categories */ + +"category_none" = "無"; +"category_labels" = "結婚紀念日,生日,工作,電話,顧客,競爭對手,客戶,收藏, 追踪 ,禮物,假日,想法,會議,事件,雜項,個人,專案,公眾假日,狀態,供應商,旅遊,休假"; + +"repeat_NEVER" = "不重複"; +"repeat_DAILY" = "日重複"; +"repeat_WEEKLY" = "週重複"; +"repeat_BI-WEEKLY" = "雙週重複"; +"repeat_EVERY WEEKDAY" = "工作日重複"; +"repeat_MONTHLY" = " 月重複"; +"repeat_YEARLY" = "年重複"; +"repeat_CUSTOM" = "自訂..."; + +"reminder_NONE" = "無提醒"; +"reminder_5_MINUTES_BEFORE" = "5分鐘前"; +"reminder_10_MINUTES_BEFORE" = "10分鐘前"; +"reminder_15_MINUTES_BEFORE" = "15分鐘前"; +"reminder_30_MINUTES_BEFORE" = "30分鐘前"; +"reminder_45_MINUTES_BEFORE" = "45分鐘前"; +"reminder_1_HOUR_BEFORE" = " 1小時前"; +"reminder_2_HOURS_BEFORE" = "2小時前"; +"reminder_5_HOURS_BEFORE" = "5小時前"; +"reminder_15_HOURS_BEFORE" = "15小時前"; +"reminder_1_DAY_BEFORE" = "1天前"; +"reminder_2_DAYS_BEFORE" = "2天前"; +"reminder_1_WEEK_BEFORE" = "1週前"; +"reminder_CUSTOM" = "自訂..."; + +"reminder_MINUTES" = "分鐘"; +"reminder_HOURS" = "小時"; +"reminder_DAYS" = "天"; +"reminder_BEFORE" = "之前"; +"reminder_AFTER" = "之後"; +"reminder_START" = "事件開始於"; +"reminder_END" = "事件結束於"; +"Reminder Details" = "提醒詳細內容"; + +"Choose a Reminder Action" = "選擇提醒方式"; +"Show an Alert" = "顯示警告訊息"; +"Send an E-mail" = "寄送電子郵件\""; +"Email Organizer" = "電子郵件發送者"; +"Email Attendees" = "電子郵件接收者"; + +"zoom_400" = "400%"; +"zoom_200" = "200%"; +"zoom_100" = "100%"; +"zoom_50" = "50%"; +"zoom_25" = "25%"; + +/* transparency */ + +"Show Time as Free" = "顯示空閒時間"; + +/* email notifications */ +"Send Appointment Notifications" = "寄送預約通知"; + +/* validation errors */ + +validate_notitle = "沒有標題,是否繼續?"; +validate_invalid_startdate = "開始日期欄位不正確!"; +validate_invalid_enddate = "結束日期欄位不正確!"; +validate_endbeforestart = "事件開始時間不能大於結束時間。"; + +"Events" = "事件"; +"Tasks" = "任務"; +"Show completed tasks" = "顯示已完成的任務"; + +/* tabs */ +"Task" = "任務"; +"Event" = "事件"; +"Recurrence" = "重複"; + +/* toolbar */ +"New Event" = "新增事件"; +"New Task" = "新增任務"; +"Edit" = "編輯"; +"Delete" = "删除"; +"Go to Today" = "移動到今天"; +"Day View" = "日檢視"; +"Week View" = "週檢視"; +"Month View" = "月檢視"; +"Reload" = "重新載入"; + +"eventPartStatModificationError" = "您無法修改出席狀態。"; + +/* menu */ +"New Event..." = "新增事件..."; +"New Task..." = "新增任務..."; +"Edit Selected Event..." = "編輯選擇的事件..."; +"Delete Selected Event" = "刪除選擇的事件..."; +"Select All" = "全部選取"; +"Workweek days only" = "只顯示工作日"; +"Tasks in View" = "檢視任務"; + +"eventDeleteConfirmation" = "以下的事件將會被清除:"; +"taskDeleteConfirmation" = "以下的任務將會被清除:"; +"Would you like to continue?" = "您要繼續嗎?"; + +"You cannot remove nor unsubscribe from your personal calendar." += "您不能刪除或取消訂閱自己的行事曆。"; +"Are you sure you want to delete the calendar \"%{0}\"?" += "您確定要刪除這本行事曆 \"%{0}\"嗎?"; + +/* Legend */ +"Participant" = "出席者"; +"Optional Participant" = "可能出席者"; +"Non Participant" = "非出席者"; +"Chair" = "席次"; + +"Needs action" = "需要操作"; +"Accepted" = "已接受"; +"Declined" = "已拒絶"; +"Tentative" = "未定"; + +"Free" = "空閒"; +"Busy" = "忙碌"; +"Maybe busy" = "可能忙碌"; +"No free-busy information" = "沒有 空閒/忙碌 資訊"; + +/* FreeBusy panel buttons and labels */ +"Suggest time slot:" = "建議時段:"; +"Zoom:" = "縮放"; +"Previous slot" = "前一時段"; +"Next slot" = "後一時段"; +"Previous hour" = "前一小時"; +"Next hour" = "前一小時"; +"Work days only" = "只限工作日"; +"The whole day" = "所有日期"; +"Between" = "介於"; +"and" = "和"; + +"A time conflict exists with one or more attendees.\nWould you like to keep the current settings anyway?" += "出席者中有人在此時段有其他的行程安排。\n是否要維持現在的議程安排?"; + +/* apt list */ +"Title" = "標題"; +"Start" = "開始"; +"End" = "結束"; +"Due Date" = "到期日:"; +"Location" = "地點"; + +"(Private Event)" = "(私人事件)"; + +vevent_class0 = "(公開事件)"; +vevent_class1 = "(私人事件)"; +vevent_class2 = "(機密事件)"; + +"Priority" = "優先順序"; +"Category" = "類別"; + +vtodo_class0 = "(公開任務)"; +vtodo_class1 = "(私人任務)"; +vtodo_class2 = "(機密任務)"; + +"closeThisWindowMessage" = "謝謝! 您可以關閉視窗或檢視您的"; +"Multicolumn Day View" = "每日多列檢視"; + +"Please select an event or a task." = "請選擇一項事件或任務。"; + +"editRepeatingItem" = "這是一筆重複事件。請問您要編輯所有重複事件還是只有單獨這一筆事件?"; +"button_thisOccurrenceOnly" = "僅目前這一筆"; +"button_allOccurrences" = "所有重複事件"; + +/* Properties dialog */ +"Name:" = "名稱:"; +"Color:" = "顏色:"; + +"Include in free-busy" = "包括忙碌-空間"; + +"Synchronization" = "同步"; +"Synchronize" = "同步"; +"Tag:" = "標籤"; + +"Display" = "顯示"; +"Show alarms" = "顯示提醒"; +"Show tasks" = "顯示任務"; + +"Notifications" = "提醒"; +"Receive a mail when I modify my calendar" = "當我修改我的行事曆時以電子郵件通知我"; +"Receive a mail when someone else modifies my calendar" = "當有其他人修改我的行事曆時以電子郵件通知我"; +"When I modify my calendar, send a mail to:" = "當我修改我的行事曆時以電子郵件通知:"; + +"Links to this Calendar" = "連結到這本行事曆"; +"Authenticated User Access" = "授權的使用者存取"; +"CalDAV URL" = "CalDAV URL: "; +"WebDAV ICS URL" = "WebDAV ICS URL"; +"WebDAV XML URL" = "WebDAV XML URL"; + +/* Error messages */ +"dayFieldInvalid" = "請在日數欄位輸入1或大於1的數字。"; +"weekFieldInvalid" = "請在週數欄位輸入1或大於1的數字。"; +"monthFieldInvalid" = "請在月數欄位輸入1或大於1的數字。"; +"monthDayFieldInvalid" = "請在每月第幾日欄位輸入1或大於1的數字。"; +"yearFieldInvalid" = "請在年數欄位輸入1或大於1的數字。"; +"appointmentFieldInvalid" = "請在次數欄位輸入1或大於1的數字。"; +"recurrenceUnsupported" = "未支援這種重複類型。"; +"Please specify a calendar name." = "請輸入行事曆的名稱。"; +"tagNotDefined" = "果您想要同步行事曆必需指定標籤。"; +"tagAlreadyExists" = "您指定的標籤已經用於其他行事曆。"; +"tagHasChanged" = "如果您修改了行事曆的標籤,您就必須在您的行動裝置重新下載所有資料。\n是否繼續?"; +"tagWasAdded" = "如果您想要同步這本行事曆,您就必須在您的行動裝置重新下載所有資料。\n是否繼續?"; +"tagWasRemoved" = "如果您取消這本行事曆的同步設定,您就必須在您的行動裝置重新下載所有資料。\n是否繼續?"; +"DestinationCalendarError" = "來源行事曆和目的行事曆是相同的,請複製為不同的行事曆。"; +"EventCopyError" = "複製失敗。請複製為為不同的行事曆。"; +"Please select at least one calendar" = "請選擇至少一本行事曆"; + +"Open Task..." = "開啟任務..."; +"Mark Completed" = "標示為完成"; +"Delete Task" = "刪除任務"; +"Delete Event" = "刪除事件 "; +"Copy event to my calendar" = "將事件複製到我的行事曆"; +"View Raw Source" = "檢視原始碼"; + +"Subscribe to a web calendar..." = "訂閱到web行事曆..."; +"URL of the Calendar" = "行事曆的URL"; +"Web Calendar" = "Web 行事曆"; +"Reload on login" = "登入時重新載入"; +"Invalid number." = "無效的數字。"; +"Please identify yourself to %{0}" = "請向 %{0} 識別您的身分"; diff --git a/UI/Scheduler/GNUmakefile b/UI/Scheduler/GNUmakefile index 18055964a..e376c5a9a 100644 --- a/UI/Scheduler/GNUmakefile +++ b/UI/Scheduler/GNUmakefile @@ -6,7 +6,7 @@ BUNDLE_NAME = SchedulerUI SchedulerUI_PRINCIPAL_CLASS = SchedulerUIProduct -SchedulerUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh +SchedulerUI_LANGUAGES = Arabic Basque BrazilianPortuguese Catalan ChineseTaiwan Czech Danish Dutch English Finnish French German Hungarian Icelandic Italian NorwegianBokmal NorwegianNynorsk Polish Russian Slovak Slovenian SpanishSpain SpanishArgentina Swedish Ukrainian Welsh SchedulerUI_OBJC_FILES = \ SchedulerUIProduct.m \ diff --git a/UI/Templates/SOGoACLChineseTaiwanAdditionAdvisory.wox b/UI/Templates/SOGoACLChineseTaiwanAdditionAdvisory.wox new file mode 100644 index 000000000..625831e6f --- /dev/null +++ b/UI/Templates/SOGoACLChineseTaiwanAdditionAdvisory.wox @@ -0,0 +1,28 @@ + + + + + + 加入管理權限列表 + + + + 己將您加入 資料匣的管理權限列表. + + + + diff --git a/UI/Templates/SOGoACLChineseTaiwanModificationAdvisory.wox b/UI/Templates/SOGoACLChineseTaiwanModificationAdvisory.wox new file mode 100644 index 000000000..cbeb58b6a --- /dev/null +++ b/UI/Templates/SOGoACLChineseTaiwanModificationAdvisory.wox @@ -0,0 +1,28 @@ + + + + + + 管理權限異動 + + + + 己修改您在 資料匣的管理權限. + + + + diff --git a/UI/Templates/SOGoACLChineseTaiwanRemovalAdvisory.wox b/UI/Templates/SOGoACLChineseTaiwanRemovalAdvisory.wox new file mode 100644 index 000000000..0b6f3628f --- /dev/null +++ b/UI/Templates/SOGoACLChineseTaiwanRemovalAdvisory.wox @@ -0,0 +1,28 @@ + + + + + + 管理權限移除 + + + + 己移除您在 資料匣的管理權限. + + + + diff --git a/UI/Templates/SOGoFolderChineseTaiwanAdditionAdvisory.wox b/UI/Templates/SOGoFolderChineseTaiwanAdditionAdvisory.wox new file mode 100644 index 000000000..9fae16a1f --- /dev/null +++ b/UI/Templates/SOGoFolderChineseTaiwanAdditionAdvisory.wox @@ -0,0 +1,22 @@ + + + + + + 資料匣建立 + + + +己建立 資料匣. + + + + diff --git a/UI/Templates/SOGoFolderChineseTaiwanRemovalAdvisory.wox b/UI/Templates/SOGoFolderChineseTaiwanRemovalAdvisory.wox new file mode 100644 index 000000000..d6c3ecec9 --- /dev/null +++ b/UI/Templates/SOGoFolderChineseTaiwanRemovalAdvisory.wox @@ -0,0 +1,23 @@ + + + + + + 資料匣刪除 + + + +己刪除 資料匣. + + + + From b91972d1dc178a66144d371f121e211d46b2f1a3 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 23 Jul 2015 11:12:16 -0400 Subject: [PATCH 17/61] Add missing template for Slovenian language --- .../SOGoACLSolvenianModificationAdvisory.wox | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 UI/Templates/SOGoACLSolvenianModificationAdvisory.wox diff --git a/UI/Templates/SOGoACLSolvenianModificationAdvisory.wox b/UI/Templates/SOGoACLSolvenianModificationAdvisory.wox new file mode 100644 index 000000000..da45c7374 --- /dev/null +++ b/UI/Templates/SOGoACLSolvenianModificationAdvisory.wox @@ -0,0 +1,28 @@ + + + + + + je spremenil pravice za dostop + + + + je spremenil pravice za dostop za vaso mapo. + + + + From 4922e6004d52ae0ccf99ac4f141d6d6f6db41cbe Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 23 Jul 2015 11:13:26 -0400 Subject: [PATCH 18/61] Add missing templates for Basque language --- .../SOGoACLBasqueAdditionAdvisory.wox | 28 ++++++++++++++++++ .../SOGoACLBasqueModificationAdvisory.wox | 28 ++++++++++++++++++ UI/Templates/SOGoACLBasqueRemovalAdvisory.wox | 29 +++++++++++++++++++ .../SOGoFolderBasqueAdditionAdvisory.wox | 24 +++++++++++++++ .../SOGoFolderBasqueRemovalAdvisory.wox | 23 +++++++++++++++ 5 files changed, 132 insertions(+) create mode 100644 UI/Templates/SOGoACLBasqueAdditionAdvisory.wox create mode 100644 UI/Templates/SOGoACLBasqueModificationAdvisory.wox create mode 100644 UI/Templates/SOGoACLBasqueRemovalAdvisory.wox create mode 100644 UI/Templates/SOGoFolderBasqueAdditionAdvisory.wox create mode 100644 UI/Templates/SOGoFolderBasqueRemovalAdvisory.wox diff --git a/UI/Templates/SOGoACLBasqueAdditionAdvisory.wox b/UI/Templates/SOGoACLBasqueAdditionAdvisory.wox new file mode 100644 index 000000000..d3dd03911 --- /dev/null +++ b/UI/Templates/SOGoACLBasqueAdditionAdvisory.wox @@ -0,0 +1,28 @@ + + + + + + -k gehitu zaitu + + + + -k bere karpetako atzipen zerrendara gehitu zaitu. + + + + diff --git a/UI/Templates/SOGoACLBasqueModificationAdvisory.wox b/UI/Templates/SOGoACLBasqueModificationAdvisory.wox new file mode 100644 index 000000000..cbc5b37ab --- /dev/null +++ b/UI/Templates/SOGoACLBasqueModificationAdvisory.wox @@ -0,0 +1,28 @@ + + + + + + -k atzipen baimenak aldatu ditu + + + + -k bere karpetarako atzipen baimenak aldatu ditu. + + + + diff --git a/UI/Templates/SOGoACLBasqueRemovalAdvisory.wox b/UI/Templates/SOGoACLBasqueRemovalAdvisory.wox new file mode 100644 index 000000000..a7792af70 --- /dev/null +++ b/UI/Templates/SOGoACLBasqueRemovalAdvisory.wox @@ -0,0 +1,29 @@ + + + + + + -k ezabatu zaitu + + + +-k bere karpetako atzipen zerrendatik ezabatu zaitu. + + + + diff --git a/UI/Templates/SOGoFolderBasqueAdditionAdvisory.wox b/UI/Templates/SOGoFolderBasqueAdditionAdvisory.wox new file mode 100644 index 000000000..09dfb4434 --- /dev/null +++ b/UI/Templates/SOGoFolderBasqueAdditionAdvisory.wox @@ -0,0 +1,24 @@ + + + + + + sortua izan da + + + + karpeta sortua izan da. + + + + + diff --git a/UI/Templates/SOGoFolderBasqueRemovalAdvisory.wox b/UI/Templates/SOGoFolderBasqueRemovalAdvisory.wox new file mode 100644 index 000000000..e89a72d73 --- /dev/null +++ b/UI/Templates/SOGoFolderBasqueRemovalAdvisory.wox @@ -0,0 +1,23 @@ + + + + + + Ezabatua izan da + + + + karpeta ezabatua izan da. + + + + From dec152e8e57ccec8b2177f4e9ffb345ec7081cf4 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 23 Jul 2015 11:47:53 -0400 Subject: [PATCH 19/61] Update CKEditor to version 4.5.1 --- NEWS | 1 + UI/WebServerResources/ckeditor/LICENSE.md | 158 +- .../ckeditor/build-config.js | 13 +- UI/WebServerResources/ckeditor/ckeditor.js | 1405 +++++++++-------- UI/WebServerResources/ckeditor/contents.css | 4 +- UI/WebServerResources/ckeditor/lang/ar.js | 6 +- UI/WebServerResources/ckeditor/lang/ca.js | 6 +- UI/WebServerResources/ckeditor/lang/cs.js | 6 +- UI/WebServerResources/ckeditor/lang/cy.js | 6 +- UI/WebServerResources/ckeditor/lang/da.js | 6 +- UI/WebServerResources/ckeditor/lang/de.js | 6 +- UI/WebServerResources/ckeditor/lang/en.js | 6 +- UI/WebServerResources/ckeditor/lang/es.js | 6 +- UI/WebServerResources/ckeditor/lang/eu.js | 5 + UI/WebServerResources/ckeditor/lang/fi.js | 6 +- UI/WebServerResources/ckeditor/lang/fr.js | 6 +- UI/WebServerResources/ckeditor/lang/hu.js | 6 +- UI/WebServerResources/ckeditor/lang/is.js | 6 +- UI/WebServerResources/ckeditor/lang/it.js | 6 +- UI/WebServerResources/ckeditor/lang/nb.js | 6 +- UI/WebServerResources/ckeditor/lang/nl.js | 6 +- UI/WebServerResources/ckeditor/lang/no.js | 6 +- UI/WebServerResources/ckeditor/lang/pl.js | 6 +- UI/WebServerResources/ckeditor/lang/pt-br.js | 6 +- UI/WebServerResources/ckeditor/lang/ru.js | 6 +- UI/WebServerResources/ckeditor/lang/sk.js | 6 +- UI/WebServerResources/ckeditor/lang/sl.js | 5 + UI/WebServerResources/ckeditor/lang/sv.js | 6 +- UI/WebServerResources/ckeditor/lang/uk.js | 6 +- UI/WebServerResources/ckeditor/lang/zh.js | 5 + .../ckeditor/plugins/about/dialogs/about.js | 2 +- .../plugins/clipboard/dialogs/paste.js | 14 +- .../colordialog/dialogs/colordialog.js | 20 +- .../plugins/dialog/dialogDefinition.js | 2 +- .../ckeditor/plugins/div/dialogs/div.js | 2 +- .../ckeditor/plugins/icons.png | Bin 10462 -> 10462 bytes .../ckeditor/plugins/icons_hidpi.png | Bin 33910 -> 33903 bytes .../ckeditor/plugins/image/dialogs/image.js | 80 +- .../ckeditor/plugins/link/dialogs/anchor.js | 2 +- .../ckeditor/plugins/link/dialogs/link.js | 2 +- .../ckeditor/plugins/table/dialogs/table.js | 6 +- .../plugins/tabletools/dialogs/tableCell.js | 2 +- .../ckeditor/plugins/wsc/dialogs/ciframe.html | 2 +- .../plugins/wsc/dialogs/tmpFrameset.html | 2 +- .../ckeditor/plugins/wsc/dialogs/wsc.css | 2 +- .../ckeditor/plugins/wsc/dialogs/wsc.js | 149 +- .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 2 +- .../ckeditor/skins/moono/dialog.css | 4 +- .../ckeditor/skins/moono/dialog_ie.css | 4 +- .../ckeditor/skins/moono/dialog_ie7.css | 4 +- .../ckeditor/skins/moono/dialog_ie8.css | 4 +- .../ckeditor/skins/moono/dialog_iequirks.css | 4 +- .../ckeditor/skins/moono/editor.css | 4 +- .../ckeditor/skins/moono/editor_gecko.css | 4 +- .../ckeditor/skins/moono/editor_ie.css | 4 +- .../ckeditor/skins/moono/editor_ie7.css | 4 +- .../ckeditor/skins/moono/editor_ie8.css | 4 +- .../ckeditor/skins/moono/editor_iequirks.css | 4 +- .../ckeditor/skins/moono/icons.png | Bin 10462 -> 10462 bytes .../ckeditor/skins/moono/icons_hidpi.png | Bin 33910 -> 33903 bytes .../ckeditor/skins/moono/images/spinner.gif | Bin 0 -> 2984 bytes .../ckeditor/skins/moono/readme.md | 2 +- UI/WebServerResources/ckeditor/styles.js | 2 +- 63 files changed, 1150 insertions(+), 915 deletions(-) create mode 100644 UI/WebServerResources/ckeditor/lang/eu.js create mode 100644 UI/WebServerResources/ckeditor/lang/sl.js create mode 100644 UI/WebServerResources/ckeditor/lang/zh.js create mode 100644 UI/WebServerResources/ckeditor/skins/moono/images/spinner.gif diff --git a/NEWS b/NEWS index 0d6813f86..aa191380c 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Enhancements - added create-folder subcommand to sogo-tool to create contact and calendar folders - group mail addresses can be used as recipient in Outlook - added 'ActiveSync' module constraints + - updated CKEditor to version 4.5.1 - added Slovenian translation - thanks to Jens Riecken - added Chinese (Taiwan) translation diff --git a/UI/WebServerResources/ckeditor/LICENSE.md b/UI/WebServerResources/ckeditor/LICENSE.md index b6e0b9cad..db93b3651 100644 --- a/UI/WebServerResources/ckeditor/LICENSE.md +++ b/UI/WebServerResources/ckeditor/LICENSE.md @@ -2,7 +2,7 @@ Software License Agreement ========================== CKEditor - The text editor for Internet - http://ckeditor.com -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. Licensed under the terms of any of the following licenses at your choice: @@ -35,6 +35,22 @@ CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, CKEditor will incorporate work done by developers outside of CKSource with their express permission. +The following libraries are included in CKEditor under the MIT license (see Appendix D): + +* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2015, CKSource - Frederico Knabben. +* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca. +* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke and others. + +The following libraries are included in CKEditor under the SIL Open Font License, Version 1.1 (see Appendix E): + +* Font Awesome (included in the toolbar configurator) - Copyright (C) 2012 by Dave Gandy. + +The following libraries are included in CKEditor under the BSD-3 License (see Appendix F): + +* highlight.js (included in the `codesnippet` plugin) - Copyright (c) 2006, Ivan Sagalaev. +* YUI Library (included in the `uicolor` plugin) - Copyright (c) 2009, Yahoo! Inc. + + Trademarks ---------- @@ -47,6 +63,7 @@ marks of their respective holders. Appendix A: The GPL License --------------------------- +``` GNU GENERAL PUBLIC LICENSE Version 2, June 1991 @@ -327,11 +344,12 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS - +``` Appendix B: The LGPL License ---------------------------- +``` GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 @@ -790,11 +808,12 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS - +``` Appendix C: The MPL License --------------------------- +``` MOZILLA PUBLIC LICENSE Version 1.1 @@ -1262,3 +1281,136 @@ EXHIBIT A -Mozilla Public License. the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] +``` + +Appendix D: The MIT License +--------------------------- + +``` +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +``` + +Appendix E: The SIL Open Font License Version 1.1 +--------------------------------------------- + +``` +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. +``` + +Appendix F: The BSD-3 License +----------------------------- + +``` +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` + diff --git a/UI/WebServerResources/ckeditor/build-config.js b/UI/WebServerResources/ckeditor/build-config.js index d94404dbf..c97ccb624 100644 --- a/UI/WebServerResources/ckeditor/build-config.js +++ b/UI/WebServerResources/ckeditor/build-config.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ @@ -13,10 +13,10 @@ * (1) http://ckeditor.com/builder * Visit online builder to build CKEditor from scratch. * - * (2) http://ckeditor.com/builder/8d9963445afb13b7ca6d38682bd8abeb + * (2) http://ckeditor.com/builder/195d02434da9106fb7d9c2771e87e5ec * Visit online builder to build CKEditor, starting with the same setup as before. * - * (3) http://ckeditor.com/builder/download/8d9963445afb13b7ca6d38682bd8abeb + * (3) http://ckeditor.com/builder/download/195d02434da9106fb7d9c2771e87e5ec * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. * * NOTE: @@ -34,6 +34,7 @@ var CKBUILDER_CONFIG = { 'bender-out.log', 'dev', '.DS_Store', + '.editorconfig', '.gitattributes', '.gitignore', 'gruntfile.js', @@ -41,6 +42,7 @@ var CKBUILDER_CONFIG = { '.jscsrc', '.jshintignore', '.jshintrc', + 'less', '.mailmap', 'node_modules', 'package.json', @@ -98,6 +100,7 @@ var CKBUILDER_CONFIG = { 'de' : 1, 'en' : 1, 'es' : 1, + 'eu' : 1, 'fi' : 1, 'fr' : 1, 'hu' : 1, @@ -110,7 +113,9 @@ var CKBUILDER_CONFIG = { 'pt-br' : 1, 'ru' : 1, 'sk' : 1, + 'sl' : 1, 'sv' : 1, - 'uk' : 1 + 'uk' : 1, + 'zh' : 1 } }; \ No newline at end of file diff --git a/UI/WebServerResources/ckeditor/ckeditor.js b/UI/WebServerResources/ckeditor/ckeditor.js index 8f0df09a8..8af91822c 100644 --- a/UI/WebServerResources/ckeditor/ckeditor.js +++ b/UI/WebServerResources/ckeditor/ckeditor.js @@ -1,578 +1,605 @@ /* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ -(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"EAPE",version:"4.4.6",revision:"08188c4",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var f=window.CKEDITOR_BASEPATH||"";if(!f)for(var d=document.getElementsByTagName("script"),c=0;c=0;s--)if(m[s].priority<=l){m.splice(s+1,0,i);return{removeListener:g}}m.unshift(i)}return{removeListener:g}}, -once:function(){var a=Array.prototype.slice.call(arguments),f=a[1];a[1]=function(a){a.removeListener();return f.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,f=function(){a=1},d=0,b=function(){d=1};return function(l,i,g){var m=e(this)[l],l=a,t=d;a=d=0;if(m){var s=m.listeners;if(s.length)for(var s=s.slice(0),y,p=0;p=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=e(this),f;for(f in a)delete a[f]},hasListeners:function(a){return(a=e(this)[a])&&a.listeners.length> -0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); -CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol== -"https:"};e.gecko=navigator.product=="Gecko"&&!e.webkit&&!e.ie;if(e.webkit)a.indexOf("chrome")>-1?e.chrome=true:e.safari=true;var b=0;if(e.ie){b=e.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;e.ie9Compat=b==9;e.ie8Compat=b==8;e.ie7Compat=b==7;e.ie6Compat=b<7||e.quirks}if(e.gecko){var c=a.match(/rv:([\d\.]+)/);if(c){c=c[1].split(".");b=c[0]*1E4+(c[1]||0)*100+(c[2]||0)*1}}e.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));e.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); -e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4||e.air&&b>=1||e.webkit&&b>=522||false);e.hidpi=window.devicePixelRatio>=2;e.needsBrFiller=e.gecko||e.webkit||e.ie&&b>10;e.needsNbspFiller=e.ie&&b<11;e.cssClass="cke_browser_"+(e.ie?"ie":e.gecko?"gecko":e.webkit?"webkit":"unknown");if(e.quirks)e.cssClass=e.cssClass+" cke_browser_quirks";if(e.ie)e.cssClass=e.cssClass+(" cke_browser_ie"+(e.quirks?"6 cke_browser_iequirks":e.version));if(e.air)e.cssClass=e.cssClass+" cke_browser_air"; -if(e.iOS)e.cssClass=e.cssClass+" cke_browser_ios";if(e.hidpi)e.cssClass=e.cssClass+" cke_hidpi";return e}()); +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"F62B",version:"4.5.1",revision:"a513a92",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),d=0;d=0;s--)if(g[s].priority<=i){g.splice(s+1,0,j);return{removeListener:n}}g.unshift(j)}return{removeListener:n}}, +once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},f=0,h=function(){f=1};return function(i,j,n){var g=d(this)[i],i=a,B=f;a=f=0;if(g){var s=g.listeners;if(s.length)for(var s=s.slice(0),z,o=0;o=0&&f.listeners.splice(h,1)}},removeAllListeners:function(){var a=d(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=d(this)[a])&&a.listeners.length> +0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,d,this)},CKEDITOR.editor.prototype.fireOnce=function(a,d){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,d,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); +CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),d=a.match(/edge[ \/](\d+.?\d*)/),b=a.indexOf("trident/")>-1,b=!(!d&&!b),b={ie:b,edge:!!d,webkit:!b&&a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,b= +window.location.hostname;return a!=b&&a!="["+b+"]"},secure:location.protocol=="https:"};b.gecko=navigator.product=="Gecko"&&!b.webkit&&!b.ie;if(b.webkit)a.indexOf("chrome")>-1?b.chrome=true:b.safari=true;var c=0;if(b.ie){c=d?parseFloat(d[1]):b.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;b.ie9Compat=c==9;b.ie8Compat=c==8;b.ie7Compat=c==7;b.ie6Compat=c<7||b.quirks}if(b.gecko)if(d=a.match(/rv:([\d\.]+)/)){d=d[1].split(".");c=d[0]*1E4+(d[1]||0)*100+(d[2]|| +0)*1}b.air&&(c=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));b.webkit&&(c=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));b.version=c;b.isCompatible=!(b.ie&&c<7)&&!(b.gecko&&c<4E4)&&!(b.webkit&&c<534);b.hidpi=window.devicePixelRatio>=2;b.needsBrFiller=b.gecko||b.webkit||b.ie&&c>10;b.needsNbspFiller=b.ie&&c<11;b.cssClass="cke_browser_"+(b.ie?"ie":b.gecko?"gecko":b.webkit?"webkit":"unknown");if(b.quirks)b.cssClass=b.cssClass+" cke_browser_quirks";if(b.ie)b.cssClass=b.cssClass+(" cke_browser_ie"+(b.quirks? +"6 cke_browser_iequirks":b.version));if(b.air)b.cssClass=b.cssClass+" cke_browser_air";if(b.iOS)b.cssClass=b.cssClass+" cke_browser_ios";if(b.hidpi)b.cssClass=b.cssClass+" cke_hidpi";return b}()); "unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= -CKEDITOR.loadFullCore,e=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():e&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},e*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; -(function(){var a=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,f=/"+f+""):d.push('');return d.join("")}, -htmlEncode:function(a){return(""+a).replace(b,"&").replace(c,">").replace(f,"<")},htmlDecode:function(a){return a.replace(h,"&").replace(l,">").replace(i,"<")},htmlEncodeAttr:function(a){return a.replace(d,""").replace(f,"<").replace(c,">")},htmlDecodeAttr:function(a){return a.replace(g,'"').replace(i,"<").replace(l,">")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,f){var d=f(a);d.prototype= -a.prototype;return d},setTimeout:function(a,f,d,b,c){c||(c=window);d||(d=c);return c.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},f||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(f){return f.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(f){return f.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(f){return f.replace(a,"")}}(),indexOf:function(a,f){if(typeof f=="function")for(var d=0,b=a.length;d=0?a[d]:null},bind:function(a,f){return function(){return a.apply(f,arguments)}},createClass:function(a){var f=a.$,d=a.base,b=a.privates||a._,c=a.proto,a=a.statics;!f&&(f=function(){d&&this.base.apply(this,arguments)});if(b)var e=f,f=function(){var a=this._||(this._={}),f;for(f in b){var d=b[f];a[f]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}e.apply(this,arguments)};if(d){f.prototype= -this.prototypedCopy(d.prototype);f.prototype.constructor=f;f.base=d;f.baseProto=d.prototype;f.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}c&&this.extend(f.prototype,c,true);a&&this.extend(f,a,true);return f},addFunction:function(f,d){return a.push(function(){return f.apply(d||this,arguments)})-1},removeFunction:function(f){a[f]=null},callFunction:function(f){var d=a[f];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a= -/^-?\d+\.?\d*px$/,f;return function(d){f=CKEDITOR.tools.trim(d+"")+"px";return a.test(f)?f:d||""}}(),convertToPx:function(){var a;return function(f){if(!a){a=CKEDITOR.dom.element.createFromHtml('
',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(f)){a.setStyle("width",f);return a.$.clientWidth}return f}}(),repeat:function(a,f){return Array(f+1).join(a)},tryThese:function(){for(var a, -f=0,d=arguments.length;f/g,e=/",amp:"&",quot:'"',nbsp:" ",shy:"­"},j=function(a,g){return g[0]=="#"?String.fromCharCode(parseInt(g.slice(1),10)):i[g]};CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,g){if(!a&&!g)return true;if(!a||!g||a.length!=g.length)return false;for(var b=0;b"+g+""):b.push('');return b.join("")},htmlEncode:function(a){return a===void 0||a===null?"":(""+a).replace(b,"&").replace(c,">").replace(e,"<")},htmlDecode:function(a){return a.replace(h,j)},htmlEncodeAttr:function(a){return CKEDITOR.tools.htmlEncode(a).replace(f,""")},htmlDecodeAttr:function(a){return CKEDITOR.tools.htmlDecode(a)},transformPlainTextToHtml:function(a, +g){var b=g==CKEDITOR.ENTER_BR,c=this.htmlEncode(a.replace(/\r\n/g,"\n")),c=c.replace(/\t/g,"    "),i=g==CKEDITOR.ENTER_P?"p":"div";if(!b){var o=/\n{2}/g;if(o.test(c))var d="<"+i+">",j="",c=d+c.replace(o,function(){return j+d})+j}c=c.replace(/\n/g,"
");b||(c=c.replace(RegExp("
(?=)"),function(a){return CKEDITOR.tools.repeat(a,2)}));c=c.replace(/^ | $/g," ");return c=c.replace(/(>|\s) /g,function(a,g){return g+" "}).replace(/ (?=<)/g," ")},getNextNumber:function(){var a= +0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",g=0;g<8;g++)a=a+Math.floor((1+Math.random())*65536).toString(16).substring(1);return a},override:function(a,g){var b=g(a);b.prototype=a.prototype;return b},setTimeout:function(a,g,b,c,i){i||(i=window);b||(b=i);return i.setTimeout(function(){c?a.apply(b,[].concat(c)):a.apply(b)},g||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(a, +"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(g){return g.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(g){return g.replace(a,"")}}(),indexOf:function(a,g){if(typeof g=="function")for(var b=0,c=a.length;b=0?a[c]:null},bind:function(a,b){return function(){return a.apply(b, +arguments)}},createClass:function(a){var b=a.$,c=a.base,i=a.privates||a._,d=a.proto,a=a.statics;!b&&(b=function(){c&&this.base.apply(this,arguments)});if(i)var o=b,b=function(){var a=this._||(this._={}),b;for(b in i){var g=i[b];a[b]=typeof g=="function"?CKEDITOR.tools.bind(g,this):g}o.apply(this,arguments)};if(c){b.prototype=this.prototypedCopy(c.prototype);b.prototype.constructor=b;b.base=c;b.baseProto=c.prototype;b.prototype.base=function(){this.base=c.prototype.base;c.apply(this,arguments);this.base= +arguments.callee}}d&&this.extend(b.prototype,d,true);a&&this.extend(b,a,true);return b},addFunction:function(b,g){return a.push(function(){return b.apply(g||this,arguments)})-1},removeFunction:function(b){a[b]=null},callFunction:function(b){var g=a[b];return g&&g.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,b;return function(c){b=CKEDITOR.tools.trim(c+"")+"px";return a.test(b)?b:c||""}}(),convertToPx:function(){var a;return function(b){if(!a){a= +CKEDITOR.dom.element.createFromHtml('
',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(b)){a.setStyle("width",b);return a.$.clientWidth}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,c=arguments.length;b]*?>)|^/i,'$&\n