Compare commits
66
Commits
master
...
SOGo-2.3.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd9b5e18b6 | ||
|
|
5c017c19fc | ||
|
|
dec152e8e5 | ||
|
|
4922e6004d | ||
|
|
b91972d1dc | ||
|
|
5c3cdda186 | ||
|
|
4b19e64071 | ||
|
|
b6dee056ca | ||
|
|
6830d6d930 | ||
|
|
366ad44cd1 | ||
|
|
9430f40101 | ||
|
|
b7c2d8ae95 | ||
|
|
f03e7a6604 | ||
|
|
4e7a3ce5fa | ||
|
|
61c542cb95 | ||
|
|
d2640e1501 | ||
|
|
20b91cc7bf | ||
|
|
b05f7a5beb | ||
|
|
3a61b7bae4 | ||
|
|
7c6c78d13b | ||
|
|
7db109525d | ||
|
|
d0d93a297b | ||
|
|
936c38c43e | ||
|
|
7da7bdc1bf | ||
|
|
1e101ef01a | ||
|
|
3171257ef4 | ||
|
|
2c8d65843f | ||
|
|
62b16f4ef3 | ||
|
|
b86b1afdb9 | ||
|
|
8e047aaa9c | ||
|
|
dc2cc14d25 | ||
|
|
3f1a43cc13 | ||
|
|
67d0d95869 | ||
|
|
d16bf7c1a7 | ||
|
|
b527099907 | ||
|
|
72aab7f83f | ||
|
|
dfecce7381 | ||
|
|
82798ccb99 | ||
|
|
3809c002ed | ||
|
|
d9b4abc2f1 | ||
|
|
c1b0fd53dc | ||
|
|
c0a22ead1d | ||
|
|
d8e37cd7d8 | ||
|
|
7540cc3e33 | ||
|
|
d92b0341fb | ||
|
|
5e84f2817f | ||
|
|
c61eca27a1 | ||
|
|
96d88de564 | ||
|
|
90e11d76f6 | ||
|
|
3dd8bddc0e | ||
|
|
95f11f6d0d | ||
|
|
1ec53a063c | ||
|
|
cab5846e37 | ||
|
|
76f80c507c | ||
|
|
afed233131 | ||
|
|
b04b66fd79 | ||
|
|
13f2ac9cbb | ||
|
|
7dc333e790 | ||
|
|
cc62576fef | ||
|
|
a1d07c59af | ||
|
|
0a37652dd6 | ||
|
|
725dea5f6f | ||
|
|
76dd53b461 | ||
|
|
020c895925 | ||
|
|
f4963df50f | ||
|
|
7160d94e91 |
No files matched your search
+22
@@ -25,8 +25,10 @@ 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
|
||||
trans.zh_TW = UI/MailerUI/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.ui-preferencesui]
|
||||
source_file = UI/PreferencesUI/English.lproj/Localizable.strings
|
||||
@@ -52,8 +54,10 @@ 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
|
||||
trans.zh_TW = UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.ui-scheduler]
|
||||
source_file = UI/Scheduler/English.lproj/Localizable.strings
|
||||
@@ -79,8 +83,10 @@ 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
|
||||
trans.zh_TW = UI/Scheduler/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.ui-contacts]
|
||||
source_file = UI/Contacts/English.lproj/Localizable.strings
|
||||
@@ -106,8 +112,10 @@ 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
|
||||
trans.zh_TW = UI/Contacts/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.ui-mainui]
|
||||
source_file = UI/MainUI/English.lproj/Localizable.strings
|
||||
@@ -133,8 +141,10 @@ 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
|
||||
trans.zh_TW = UI/MainUI/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.ui-common]
|
||||
source_file = UI/Common/English.lproj/Localizable.strings
|
||||
@@ -160,8 +170,10 @@ 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
|
||||
trans.zh_TW = UI/Common/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.ui-administrationui]
|
||||
source_file = UI/AdministrationUI/English.lproj/Localizable.strings
|
||||
@@ -187,8 +199,10 @@ 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
|
||||
trans.zh_TW = UI/AdministrationUI/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.soobjects-appointments]
|
||||
source_file = SoObjects/Appointments/English.lproj/Localizable.strings
|
||||
@@ -214,8 +228,10 @@ 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
|
||||
trans.zh_TW = SoObjects/Appointments/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.soobjects-contacts]
|
||||
source_file = SoObjects/Contacts/English.lproj/Localizable.strings
|
||||
@@ -241,8 +257,10 @@ 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
|
||||
trans.zh_TW = SoObjects/Contacts/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.soobjects-mailer]
|
||||
source_file = SoObjects/Mailer/English.lproj/Localizable.strings
|
||||
@@ -268,8 +286,10 @@ 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
|
||||
trans.zh_TW = SoObjects/Mailer/ChineseTaiwan.lproj/Localizable.strings
|
||||
|
||||
[sogo.ui-mailpartviewers]
|
||||
source_file = UI/MailPartViewers/English.lproj/Localizable.strings
|
||||
@@ -295,5 +315,7 @@ 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
|
||||
trans.zh_TW = UI/MailPartViewers/ChineseTaiwan.lproj/Localizable.strings
|
||||
@@ -131,10 +131,12 @@ static NSArray *easCommandParameters = nil;
|
||||
}
|
||||
}
|
||||
|
||||
self = [[[NSString alloc] initWithBytes:buf length:(j) * sizeof(wchar_t) encoding:NSUTF32StringEncoding] autorelease];
|
||||
self = [[NSString alloc] initWithBytesNoCopy: buf
|
||||
length: (j*sizeof(wchar_t))
|
||||
encoding: NSUTF32StringEncoding
|
||||
freeWhenDone: YES];
|
||||
|
||||
if (buf) free(buf);
|
||||
return self;
|
||||
return [self autorelease];
|
||||
}
|
||||
|
||||
- (NSString *) sanitizedServerIdWithType: (SOGoMicrosoftActiveSyncFolderType) folderType
|
||||
|
||||
@@ -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: @"<Change>"];
|
||||
[theBuffer appendFormat: @"<ServerId>%@</ServerId>", serverId];
|
||||
[theBuffer appendFormat: @"<Status>%d</Status>", 1];
|
||||
@@ -453,16 +475,27 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
withType: (SOGoMicrosoftActiveSyncFolderType) theFolderType
|
||||
inBuffer: (NSMutableString *) theBuffer
|
||||
{
|
||||
|
||||
id aDelete, sogoObject, value;
|
||||
NSArray *deletions;
|
||||
NSString *serverId;
|
||||
|
||||
id aDelete, sogoObject;
|
||||
BOOL deletesAsMoves, useTrash;
|
||||
int i;
|
||||
|
||||
deletions = (id)[theDocumentElement getElementsByTagName: @"Delete"];
|
||||
|
||||
if ([deletions count])
|
||||
{
|
||||
// From the documention, if DeletesAsMoves is missing, we must assume it's a YES.
|
||||
// See https://msdn.microsoft.com/en-us/library/gg675480(v=exchg.80).aspx for all details.
|
||||
value = [theDocumentElement getElementsByTagName: @"DeletesAsMoves"];
|
||||
deletesAsMoves = YES;
|
||||
useTrash = YES;
|
||||
|
||||
if ([value count] && [[[value lastObject] textValue] length])
|
||||
deletesAsMoves = [[[value lastObject] textValue] boolValue];
|
||||
|
||||
for (i = 0; i < [deletions count]; i++)
|
||||
{
|
||||
aDelete = [deletions objectAtIndex: i];
|
||||
@@ -474,7 +507,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
acquire: NO];
|
||||
|
||||
if (![sogoObject isKindOfClass: [NSException class]])
|
||||
[sogoObject delete];
|
||||
{
|
||||
// FIXME: handle errors here
|
||||
if (deletesAsMoves && theFolderType == ActiveSyncMailFolder)
|
||||
[(SOGoMailFolder *)[sogoObject container] deleteUIDs: [NSArray arrayWithObjects: serverId, nil] useTrashFolder: &useTrash inContext: context];
|
||||
else
|
||||
[sogoObject delete];
|
||||
}
|
||||
|
||||
[theBuffer appendString: @"<Delete>"];
|
||||
[theBuffer appendFormat: @"<ServerId>%@</ServerId>", serverId];
|
||||
@@ -893,6 +932,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
[syncCache removeObjectForKey: [aCacheObject uid]];
|
||||
[dateCache removeObjectForKey: [aCacheObject uid]];
|
||||
|
||||
return_count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -902,17 +943,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
inContext: context
|
||||
acquire: 0];
|
||||
|
||||
[s appendString: @"<Change xmlns=\"AirSync:\">"];
|
||||
[s appendFormat: @"<ServerId xmlns=\"AirSync:\">%@</ServerId>", [aCacheObject uid]];
|
||||
[s appendString: @"<ApplicationData xmlns=\"AirSync:\">"];
|
||||
[s appendString: [mailObject activeSyncRepresentationInContext: context]];
|
||||
[s appendString: @"</ApplicationData>"];
|
||||
[s appendString: @"</Change>"];
|
||||
|
||||
if (![[aCacheObject sequence] isEqual: [syncCache objectForKey: [aCacheObject uid]]])
|
||||
{
|
||||
[s appendString: @"<Change xmlns=\"AirSync:\">"];
|
||||
[s appendFormat: @"<ServerId xmlns=\"AirSync:\">%@</ServerId>", [aCacheObject uid]];
|
||||
[s appendString: @"<ApplicationData xmlns=\"AirSync:\">"];
|
||||
[s appendString: [mailObject activeSyncRepresentationInContext: context]];
|
||||
[s appendString: @"</ApplicationData>"];
|
||||
[s appendString: @"</Change>"];
|
||||
|
||||
return_count++;
|
||||
}
|
||||
|
||||
[syncCache setObject: [aCacheObject sequence] forKey: [aCacheObject uid]];
|
||||
}
|
||||
|
||||
return_count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1187,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
|
||||
//
|
||||
@@ -1220,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: <Responses></Responses>.
|
||||
// We onnly generate this tag when the command has generated a response.
|
||||
// Windows phones don't like empty Responses tags - such as: <Responses></Responses>.
|
||||
// We only generate this tag when there is a response
|
||||
if (processed && [s length])
|
||||
[commandsBuffer appendFormat: @"<Responses>%@</Responses>", 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
|
||||
@@ -1250,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;
|
||||
|
||||
@@ -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: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"];
|
||||
[s appendString: @"<!DOCTYPE ActiveSync PUBLIC \"-//MICROSOFT//DTD ActiveSync//EN\" \"http://www.microsoft.com/\">"];
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@@ -2565,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;
|
||||
@@ -2604,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];
|
||||
@@ -2862,6 +2891,7 @@ static BOOL debugOn = NO;
|
||||
NSAutoreleasePool *pool;
|
||||
id builder, dom;
|
||||
SEL aSelector;
|
||||
id activeUser;
|
||||
|
||||
NSString *cmdName, *deviceId;
|
||||
NSData *d;
|
||||
@@ -2870,6 +2900,14 @@ static BOOL debugOn = NO;
|
||||
|
||||
ASSIGN(context, theContext);
|
||||
|
||||
activeUser = [context activeUser];
|
||||
if (![activeUser canAccessModule: @"ActiveSync"])
|
||||
{
|
||||
[(WOResponse *)theResponse setStatus: 403];
|
||||
[self logWithFormat: @"EAS - Forbidden access for user %@", [activeUser loginInDomain]];
|
||||
return nil;
|
||||
}
|
||||
|
||||
// Get the device ID, device type and "stash" them
|
||||
deviceId = [[theRequest uri] deviceId];
|
||||
[context setObject: deviceId forKey: @"DeviceId"];
|
||||
|
||||
@@ -77,6 +77,41 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#import <Appointments/SOGoAptMailNotification.h>
|
||||
|
||||
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...
|
||||
//
|
||||
@@ -514,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;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
@@ -627,7 +685,7 @@ struct GlobalObjectId {
|
||||
if (value)
|
||||
{
|
||||
[s appendFormat: @"<Subject xmlns=\"Email:\">%@</Subject>", [value activeSyncRepresentationInContext: context]];
|
||||
[s appendFormat: @"<ThreadTopic xmlns=\"Email:\">%@</ThreadTopic>", [value activeSyncRepresentationInContext: context]];
|
||||
[s appendFormat: @"<ThreadTopic xmlns=\"Email:\">%@</ThreadTopic>", [[self _getNormalizedSubject] activeSyncRepresentationInContext: context]];
|
||||
}
|
||||
|
||||
// DateReceived
|
||||
@@ -1013,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: @"<ConversationId xmlns=\"Email2:\">%@</ConversationId>", [[reference dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]];
|
||||
else if ([self inReplyTo])
|
||||
[s appendFormat: @"<ConversationId xmlns=\"Email2:\">%@</ConversationId>", [[[self inReplyTo] dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]];
|
||||
else if ([self messageId])
|
||||
[s appendFormat: @"<ConversationId xmlns=\"Email2:\">%@</ConversationId>", [[[self messageId] dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]];
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!-- TODO have the build system take care of this -->
|
||||
<releaseinfo>Version 2.3.0 - June 2015</releaseinfo>
|
||||
<subtitle>for version 2.3.0</subtitle>
|
||||
<date>2015-06-01</date>
|
||||
<releaseinfo>Version 2.3.1 - July 2015</releaseinfo>
|
||||
<subtitle>for version 2.3.1</subtitle>
|
||||
<date>2015-07-23</date>
|
||||
|
||||
<legalnotice>
|
||||
<para>Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".</para>
|
||||
|
||||
@@ -13,6 +13,6 @@
|
||||
|
||||
// TODO have the build system take care of this
|
||||
|
||||
:release_version: 2.3.0
|
||||
:release_version: 2.3.1
|
||||
|
||||
// vim: set syntax=asciidoc tabstop=2 shiftwidth=2 expandtab:
|
||||
@@ -1,10 +1,17 @@
|
||||
2.3.1 (2015-06-XX)
|
||||
2.3.1 (2015-07-23)
|
||||
------------------
|
||||
|
||||
Enhancements
|
||||
- improved EAS speed, especially when fetching big attachments
|
||||
- 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
|
||||
- updated CKEditor to version 4.5.1
|
||||
- added Slovenian translation - thanks to Jens Riecken
|
||||
- added Chinese (Taiwan) translation
|
||||
|
||||
Bug fixes
|
||||
- EAS's GetItemEstimate/ItemOperations now support fetching mails and empty folders
|
||||
@@ -14,6 +21,14 @@ Bug fixes
|
||||
- properly support big characters in EAS and fix encoding QP EAS error for Outlook (#3082)
|
||||
- properly encode id of DOM elements in Address Book module (#3239, #3245)
|
||||
- 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)
|
||||
- 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)
|
||||
- optimized Calendar module in multidomain configurations
|
||||
|
||||
2.3.0 (2015-06-01)
|
||||
-------------------
|
||||
|
||||
@@ -178,56 +178,101 @@ rtf2html (NSData *compressedRTF)
|
||||
andColumns: (struct SPropTagArray *) columns
|
||||
{
|
||||
NSMutableDictionary *recipientProperties;
|
||||
enum MAPITAGS prop_tag;
|
||||
char *displayName = NULL;
|
||||
char *email = NULL;
|
||||
enum MAPI_OBJTYPE object_type = 0;
|
||||
char *smtpAddress = NULL;
|
||||
SOGoUser *recipientUser;
|
||||
NSUInteger count;
|
||||
NSString *recipientEmail = nil;
|
||||
NSString *recipientFullName = nil;
|
||||
id value;
|
||||
|
||||
recipientProperties = [NSMutableDictionary dictionaryWithCapacity: columns->cValues + 2];
|
||||
|
||||
for (count = 0; count < columns->cValues; count++)
|
||||
{
|
||||
prop_tag = columns->aulPropTag[count];
|
||||
switch(prop_tag) {
|
||||
case PidTagDisplayName:
|
||||
displayName = recipient->data[count];
|
||||
break;
|
||||
case PidTagEmailAddress:
|
||||
email = recipient->data[count];
|
||||
break;
|
||||
case PidTagObjectType:
|
||||
if (recipient->data[count])
|
||||
object_type = *((uint8_t*) recipient->data[count]);
|
||||
break;
|
||||
case PidTagSmtpAddress:
|
||||
smtpAddress = recipient->data[count];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (recipient->data[count])
|
||||
{
|
||||
value = NSObjectFromValuePointer (prop_tag,
|
||||
recipient->data[count]);
|
||||
if (value)
|
||||
[recipientProperties setObject: value
|
||||
forKey: MAPIPropertyKey (prop_tag)];
|
||||
}
|
||||
}
|
||||
|
||||
if (recipient->username)
|
||||
{
|
||||
value = [NSString stringWithUTF8String: recipient->username];
|
||||
[recipientProperties setObject: value forKey: @"x500dn"];
|
||||
}
|
||||
|
||||
if (object_type == MAPI_MAILUSER && recipient->username)
|
||||
{
|
||||
/* values from user object have priority over data sent by the client */
|
||||
recipientUser = [SOGoUser userWithLogin: [value lowercaseString]];
|
||||
if (recipientUser)
|
||||
{
|
||||
value = [recipientUser cn];
|
||||
if ([value length] > 0)
|
||||
[recipientProperties setObject: value forKey: @"fullName"];
|
||||
recipientFullName = value;
|
||||
|
||||
value = [[recipientUser allEmails] objectAtIndex: 0];
|
||||
if ([value length] > 0)
|
||||
[recipientProperties setObject: value forKey: @"email"];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (recipient->data[0])
|
||||
{
|
||||
value = [NSString stringWithUTF8String: recipient->data[0]];
|
||||
if ([value length] > 0)
|
||||
[recipientProperties setObject: value forKey: @"fullName"];
|
||||
}
|
||||
if (recipient->data[1])
|
||||
{
|
||||
value = [NSString stringWithUTF8String: recipient->data[1]];
|
||||
if ([value length] > 0)
|
||||
[recipientProperties setObject: value forKey: @"email"];
|
||||
}
|
||||
recipientEmail = value;
|
||||
}
|
||||
}
|
||||
|
||||
for (count = 0; count < columns->cValues; count++)
|
||||
/* If we do not have values from the user object we try to get them from the parameters */
|
||||
if (!recipientFullName && displayName)
|
||||
{
|
||||
if (recipient->data[count])
|
||||
{
|
||||
value = NSObjectFromValuePointer (columns->aulPropTag[count],
|
||||
recipient->data[count]);
|
||||
if (value)
|
||||
[recipientProperties setObject: value
|
||||
forKey: MAPIPropertyKey (columns->aulPropTag[count])];
|
||||
}
|
||||
value = [NSString stringWithUTF8String: displayName];
|
||||
if ([value length] > 0)
|
||||
recipientFullName = value;
|
||||
}
|
||||
|
||||
if (!recipientEmail && email)
|
||||
{
|
||||
value = [NSString stringWithUTF8String: email];
|
||||
if ([value length] > 0)
|
||||
recipientEmail = value;
|
||||
}
|
||||
|
||||
if (!recipientEmail && smtpAddress)
|
||||
{
|
||||
value = [NSString stringWithUTF8String: smtpAddress];
|
||||
if ([value length] > 0)
|
||||
recipientEmail = value;
|
||||
}
|
||||
|
||||
/* Now we can set the properties if we have them */
|
||||
if (recipientFullName)
|
||||
[recipientProperties setObject: recipientFullName forKey: @"fullName"];
|
||||
|
||||
if (recipientEmail)
|
||||
[recipientProperties setObject: recipientEmail forKey: @"email"];
|
||||
|
||||
return recipientProperties;
|
||||
}
|
||||
|
||||
|
||||
@@ -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}。";
|
||||
@@ -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 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
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -2131,32 +2131,23 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent
|
||||
//
|
||||
if ([[newEvent attendees] count] || [[oldEvent attendees] count])
|
||||
{
|
||||
NSString *uid;
|
||||
|
||||
BOOL userIsOrganizer;
|
||||
|
||||
// newEvent might be nil here, if we're deleting a RECURRENCE-ID with attendees
|
||||
// If that's the case, we use the oldEvent for now just to obtain the organizer
|
||||
// and we'll swap it back to nil once we're done.
|
||||
if (!newEvent)
|
||||
newEvent = oldEvent;
|
||||
|
||||
// We fetch the organizer's uid. Sometimes, the recurrence-id will
|
||||
// have it, sometimes not. If it doesn't, we fetch it from the master event.
|
||||
uid = [[newEvent organizer] uid];
|
||||
|
||||
if (!uid && !recurrenceId)
|
||||
uid = [[[[[newEvent parent] events] objectAtIndex: 0] organizer] uid];
|
||||
|
||||
// If that's the case, we use the oldEvent to obtain the organizer
|
||||
if (newEvent)
|
||||
userIsOrganizer = [newEvent userIsOrganizer: ownerUser];
|
||||
else
|
||||
userIsOrganizer = [oldEvent userIsOrganizer: ownerUser];
|
||||
|
||||
// With Thunderbird 10, if you create a recurring event with an exception
|
||||
// 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 (newEvent == oldEvent)
|
||||
newEvent = nil;
|
||||
|
||||
if (uid && [uid caseInsensitiveCompare: owner] == NSOrderedSame)
|
||||
|
||||
if (userIsOrganizer)
|
||||
{
|
||||
// A RECCURENCE-ID was removed
|
||||
if (!newEvent && oldEvent)
|
||||
|
||||
@@ -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}.";
|
||||
@@ -1,6 +1,6 @@
|
||||
/* iCalAlarm+SOGo.h - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2014 Inverse inc.
|
||||
* Copyright (C) 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,11 +20,11 @@
|
||||
|
||||
#import <NGCards/iCalAlarm.h>
|
||||
|
||||
@class iCalRepeatableEntityObject;
|
||||
@class iCalEntityObject;
|
||||
|
||||
@interface iCalAlarm (SOGoExtensions)
|
||||
|
||||
+ (id) alarmForEvent: (iCalRepeatableEntityObject *) theEntity
|
||||
+ (id) alarmForEvent: (iCalEntityObject *) theEntity
|
||||
owner: (NSString *) theOwner
|
||||
action: (NSString *) reminderAction
|
||||
unit: (NSString *) reminderUnit
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* iCalAlarm+SOGo.m - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2014 Inverse inc.
|
||||
* Copyright (C) 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
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
#import <NGCards/iCalPerson.h>
|
||||
#import <NGCards/iCalTrigger.h>
|
||||
#import <NGCards/iCalEntityObject.h>
|
||||
|
||||
@implementation iCalAlarm (SOGoExtensions)
|
||||
|
||||
@@ -65,7 +66,7 @@
|
||||
[alarm addChild: aAttendee];
|
||||
}
|
||||
|
||||
+ (id) alarmForEvent: (iCalRepeatableEntityObject *) theEntity
|
||||
+ (id) alarmForEvent: (iCalEntityObject *) theEntity
|
||||
owner: (NSString *) theOwner
|
||||
action: (NSString *) reminderAction
|
||||
unit: (NSString *) reminderUnit
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
/* iCalPerson+SOGo.h - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2007-2012 Inverse inc.
|
||||
*
|
||||
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
* Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||
* 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;
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
/* iCalPerson+SOGo.m - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2007-2012 Inverse inc.
|
||||
*
|
||||
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
* Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||
* 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,31 @@ 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
|
||||
{
|
||||
NSDictionary *contact;
|
||||
NSString *uid;
|
||||
|
||||
if (!um)
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
|
||||
uid = nil;
|
||||
contact = [um contactInfosForUserWithUIDorEmail: [self rfc822Email] inDomain: domain];
|
||||
if (contact)
|
||||
uid = [contact valueForKey: @"c_uid"];
|
||||
|
||||
return uid;
|
||||
}
|
||||
|
||||
- (NSString *) contactIDInContext: (WOContext *) context
|
||||
{
|
||||
NSString *domain, *uid;
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
"Personal Address Book" = "個人通訊錄";
|
||||
"Collected Address Book" = "公用通訊錄";
|
||||
@@ -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 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
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
"Personal Address Book" = "Osebni adresar";
|
||||
"Collected Address Book" = "Zbrani adresar";
|
||||
@@ -0,0 +1,2 @@
|
||||
"OtherUsersFolderName" = "其他使用者";
|
||||
"SharedFoldersName" = "共用資料匣";
|
||||
@@ -50,6 +50,8 @@ Mailer_RESOURCE_FILES += \
|
||||
SOGoMailBrazilianPortugueseReply.wo \
|
||||
SOGoMailCatalanForward.wo \
|
||||
SOGoMailCatalanReply.wo \
|
||||
SOGoMailChineseTaiwanForward.wo \
|
||||
SOGoMailChineseTaiwanReply.wo \
|
||||
SOGoMailCzechForward.wo \
|
||||
SOGoMailCzechReply.wo \
|
||||
SOGoMailDanishForward.wo \
|
||||
@@ -80,6 +82,8 @@ Mailer_RESOURCE_FILES += \
|
||||
SOGoMailRussianReply.wo \
|
||||
SOGoMailSlovakForward.wo \
|
||||
SOGoMailSlovakReply.wo \
|
||||
SOGoMailSlovenianForward.wo \
|
||||
SOGoMailSlovenianReply.wo \
|
||||
SOGoMailSpanishSpainForward.wo \
|
||||
SOGoMailSpanishSpainReply.wo \
|
||||
SOGoMailSpanishArgentinaForward.wo \
|
||||
@@ -91,8 +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 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
|
||||
|
||||
|
||||
@@ -86,12 +86,3 @@ signaturePlacementOnBottom: WOConditional {
|
||||
condition = signaturePlacementOnTop;
|
||||
negate = YES;
|
||||
}
|
||||
|
||||
signaturePlacementOnTop: WOConditional {
|
||||
condition = signaturePlacementOnTop;
|
||||
}
|
||||
|
||||
signaturePlacementOnBottom: WOConditional {
|
||||
condition = signaturePlacementOnTop;
|
||||
negate = YES;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<#newLine/>
|
||||
<#newLine/>
|
||||
<#signaturePlacementOnTop><#newLine/>
|
||||
<#signature/><#newLine/></#signaturePlacementOnTop>
|
||||
-------- 原始信件 --------<#newLine/>
|
||||
主旨: <#subject/><#newLine/>
|
||||
日期: <#date/><#newLine/>
|
||||
寄件者: <#from/><#newLine/>
|
||||
<#hasReplyTo>回覆帳號: <#replyTo/></#hasReplyTo><#hasOrganization>公司: <#organization/></#hasOrganization>收件者: <#to/><#newLine/>
|
||||
<#hasCc>副本: <#cc/></#hasCc><#hasNewsGroups>新聞群組: <#newsgroups/></#hasNewsGroups><#hasReferences>參考: <#references/></#hasReferences><#newLine/>
|
||||
<#newLine/>
|
||||
<#messageBody/><#newLine/>
|
||||
<#signaturePlacementOnBottom><#newLine/>
|
||||
<#newLine/>
|
||||
<#signature/></#signaturePlacementOnBottom>
|
||||
<#newLine/>
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<#replyPlacementOnTop><#newLine/>
|
||||
<#newLine/>
|
||||
</#replyPlacementOnTop><#signaturePlacementOnTop><#newLine/>
|
||||
<#signature/><#newLine/>
|
||||
</#signaturePlacementOnTop><#outlookMode>-------- 原始信件 --------<#newLine/>
|
||||
主旨: <#subject/><#newLine/>
|
||||
日期: <#date/><#newLine/>
|
||||
寄件者: <#from/><#newLine/>
|
||||
<#hasReplyTo>回覆帳號: <#replyTo/></#hasReplyTo><#hasOrganization>公司: <#organization/></#hasOrganization>收件者: <#to/><#newLine/>
|
||||
<#hasCc>副本: <#cc/></#hasCc><#hasNewsGroups>新聞群組: <#newsgroups/></#hasNewsGroups><#hasReferences>參考: <#references/></#hasReferences></#outlookMode><#newLine/>
|
||||
<#standardMode>日期 <#date/>, <#from/> 編輯:</#standardMode><#newLine/>
|
||||
<#newLine/>
|
||||
<#messageBody/><#newLine/>
|
||||
<#replyPlacementOnBottom><#newLine/>
|
||||
<#newLine/>
|
||||
</#replyPlacementOnBottom><#signaturePlacementOnBottom><#signature/></#signaturePlacementOnBottom><#newLine/>
|
||||
@@ -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;
|
||||
}
|
||||
@@ -86,12 +86,3 @@ signaturePlacementOnBottom: WOConditional {
|
||||
condition = signaturePlacementOnTop;
|
||||
negate = YES;
|
||||
}
|
||||
|
||||
signaturePlacementOnTop: WOConditional {
|
||||
condition = signaturePlacementOnTop;
|
||||
}
|
||||
|
||||
signaturePlacementOnBottom: WOConditional {
|
||||
condition = signaturePlacementOnTop;
|
||||
negate = YES;
|
||||
}
|
||||
@@ -49,6 +49,9 @@
|
||||
@interface SOGoMailCatalanForward : SOGoMailForward
|
||||
@end
|
||||
|
||||
@interface SOGoMailChineseTaiwanForward : SOGoMailForward
|
||||
@end
|
||||
|
||||
@interface SOGoMailCzechForward : SOGoMailForward
|
||||
@end
|
||||
|
||||
@@ -103,6 +106,9 @@
|
||||
@interface SOGoMailSlovakForward : SOGoMailForward
|
||||
@end
|
||||
|
||||
@interface SOGoMailSlovenianForward : SOGoMailForward
|
||||
@end
|
||||
|
||||
@interface SOGoMailUkrainianForward : SOGoMailForward
|
||||
@end
|
||||
|
||||
|
||||
@@ -260,6 +260,9 @@
|
||||
@implementation SOGoMailCatalanForward
|
||||
@end
|
||||
|
||||
@implementation SOGoMailChineseTaiwanForward
|
||||
@end
|
||||
|
||||
@implementation SOGoMailCzechForward
|
||||
@end
|
||||
|
||||
@@ -314,6 +317,9 @@
|
||||
@implementation SOGoMailSlovakForward
|
||||
@end
|
||||
|
||||
@implementation SOGoMailSlovenianForward
|
||||
@end
|
||||
|
||||
@implementation SOGoMailUkrainianForward
|
||||
@end
|
||||
|
||||
|
||||
@@ -777,8 +777,6 @@ static BOOL debugSoParts = NO;
|
||||
filename = [NSString stringWithFormat: @"unknown_%@", path];
|
||||
else if ([mimeType isEqualToString: @"message/rfc822"])
|
||||
filename = [NSString stringWithFormat: @"email_%@.eml", path];
|
||||
else if ([mimeType isEqualToString: @"text/calendar"])
|
||||
filename = [NSString stringWithFormat: @"calendar_%@.ics", path];
|
||||
|
||||
|
||||
if (filename)
|
||||
|
||||
@@ -48,6 +48,9 @@
|
||||
@interface SOGoMailCatalanReply : SOGoMailReply
|
||||
@end
|
||||
|
||||
@interface SOGoMailChineseTaiwanReply : SOGoMailReply
|
||||
@end
|
||||
|
||||
@interface SOGoMailCzechReply : SOGoMailReply
|
||||
@end
|
||||
|
||||
@@ -102,6 +105,9 @@
|
||||
@interface SOGoMailSlovakReply : SOGoMailReply
|
||||
@end
|
||||
|
||||
@interface SOGoMailSlovenianReply : SOGoMailReply
|
||||
@end
|
||||
|
||||
@interface SOGoMailUkrainianReply : SOGoMailReply
|
||||
@end
|
||||
|
||||
|
||||
@@ -98,6 +98,9 @@
|
||||
@implementation SOGoMailCatalanReply
|
||||
@end
|
||||
|
||||
@implementation SOGoMailChineseTaiwanReply
|
||||
@end
|
||||
|
||||
@implementation SOGoMailCzechReply
|
||||
@end
|
||||
|
||||
@@ -152,6 +155,9 @@
|
||||
@implementation SOGoMailSlovakReply
|
||||
@end
|
||||
|
||||
@implementation SOGoMailSlovenianReply
|
||||
@end
|
||||
|
||||
@implementation SOGoMailUkrainianReply
|
||||
@end
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<#newLine/>
|
||||
<#newLine/>
|
||||
<#signaturePlacementOnTop><#newLine/>
|
||||
<#signature/><#newLine/></#signaturePlacementOnTop>
|
||||
-------- Original Message --------<#newLine/>
|
||||
Zadeva: <#subject/><#newLine/>
|
||||
Datum: <#date/><#newLine/>
|
||||
Od: <#from/><#newLine/>
|
||||
<#hasReplyTo>Odgovori: <#replyTo/></#hasReplyTo><#hasOrganization>Organizacija: <#organization/></#hasOrganization>Za: <#to/><#newLine/>
|
||||
<#hasCc>KP: <#cc/></#hasCc><#hasNewsGroups>Novicarske skupine: <#newsgroups/></#hasNewsGroups><#hasReferences>Reference: <#references/></#hasReferences><#newLine/>
|
||||
<#newLine/>
|
||||
<#messageBody/><#newLine/>
|
||||
<#signaturePlacementOnBottom><#newLine/>
|
||||
<#newLine/>
|
||||
<#signature/></#signaturePlacementOnBottom>
|
||||
<#newLine/>
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<#replyPlacementOnTop><#newLine/>
|
||||
<#newLine/>
|
||||
</#replyPlacementOnTop><#signaturePlacementOnTop><#newLine/>
|
||||
<#signature/><#newLine/>
|
||||
</#signaturePlacementOnTop><#outlookMode>-------- Izvorno sporocilo --------<#newLine/>
|
||||
Zadeva: <#subject/><#newLine/>
|
||||
Datum: <#date/><#newLine/>
|
||||
Od: <#from/><#newLine/>
|
||||
<#hasReplyTo>Odgovori: <#replyTo/></#hasReplyTo><#hasOrganization>Organizacija: <#organization/></#hasOrganization>Za: <#to/><#newLine/>
|
||||
<#hasCc>KP: <#cc/></#hasCc><#hasNewsGroups>Novicarske skupine: <#newsgroups/></#hasNewsGroups><#hasReferences>Reference: <#references/></#hasReferences></#outlookMode><#newLine/>
|
||||
<#standardMode>Dne <#date/>, je <#from/> napisal-a:</#standardMode><#newLine/>
|
||||
<#newLine/>
|
||||
<#messageBody/><#newLine/>
|
||||
<#replyPlacementOnBottom><#newLine/>
|
||||
<#newLine/>
|
||||
</#replyPlacementOnBottom><#signaturePlacementOnBottom><#signature/></#signaturePlacementOnBottom><#newLine/>
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
"OtherUsersFolderName" = "Ostali uporabniki";
|
||||
"SharedFoldersName" = "Mape v skupni rabi";
|
||||
@@ -1,10 +1,12 @@
|
||||
//
|
||||
// BSONCodec.m
|
||||
// BSON Codec for Objective-C.
|
||||
//
|
||||
// Created by Martin Kou on 8/17/10.
|
||||
// MIT License, see LICENSE file for details.
|
||||
//
|
||||
/*
|
||||
* BSONCodec.m
|
||||
* BSON Codec for Objective-C.
|
||||
*
|
||||
* Created by Martin Kou on 8/17/10.
|
||||
* MIT License, see LICENSE file for details.
|
||||
*
|
||||
* Adapted by Ludovic Marcotte and Enrique J. Hernández
|
||||
*/
|
||||
|
||||
#import "BSONCodec.h"
|
||||
#import <ctype.h>
|
||||
@@ -570,7 +572,7 @@ static NSDictionary *BSONTypes()
|
||||
{
|
||||
NSString *v;
|
||||
|
||||
v = [self descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S %Z"
|
||||
v = [self descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S %z"
|
||||
locale: nil];
|
||||
|
||||
return [v BSONEncode];
|
||||
@@ -599,7 +601,22 @@ static NSDictionary *BSONTypes()
|
||||
|
||||
key = [NSString stringWithFormat: @"%s", timezone];
|
||||
|
||||
if (!(tz = [timezoneCache objectForKey: key]))
|
||||
/* We may have the zone using the UTC offset
|
||||
or abbreviation (deprecated) */
|
||||
if (timezone && strlen(timezone) > 0 && (timezone[0] == '+' || timezone[0] == '-'))
|
||||
{
|
||||
NSCalendarDate *tzDate;
|
||||
|
||||
tzDate = [[NSCalendarDate alloc] initWithString: key
|
||||
calendarFormat: @"%z"
|
||||
locale: nil];
|
||||
[tzDate autorelease];
|
||||
if (tzDate)
|
||||
tz = [tzDate timeZone];
|
||||
else
|
||||
tz = nil;
|
||||
}
|
||||
else if (!(tz = [timezoneCache objectForKey: key]))
|
||||
{
|
||||
tz = [NSTimeZone timeZoneWithAbbreviation: key];
|
||||
|
||||
|
||||
@@ -737,7 +737,8 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
if ([[localException name] isEqual: @"LDAPException"] && ([[[localException userInfo] objectForKey: @"error_code"] intValue] == LDAP_CONSTRAINT_VIOLATION))
|
||||
if ([[localException name] isEqual: @"LDAPException"] &&
|
||||
([[[localException userInfo] objectForKey: @"error_code"] intValue] == LDAP_CONSTRAINT_VIOLATION))
|
||||
{
|
||||
*perr = PolicyInsufficientPasswordQuality;
|
||||
}
|
||||
@@ -1166,6 +1167,8 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses
|
||||
intoLDIFRecord: (NSMutableDictionary *) ldifRecord];
|
||||
[self _fillConstraints: ldapEntry forModule: @"Mail"
|
||||
intoLDIFRecord: (NSMutableDictionary *) ldifRecord];
|
||||
[self _fillConstraints: ldapEntry forModule: @"ActiveSync"
|
||||
intoLDIFRecord: (NSMutableDictionary *) ldifRecord];
|
||||
|
||||
if (contactMapping)
|
||||
[self _applyContactMappingToResult: ldifRecord];
|
||||
|
||||
@@ -39,11 +39,11 @@
|
||||
|
||||
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",
|
||||
"Ukrainian", "Swedish" );
|
||||
"Slovenian", "Ukrainian", "Swedish" );
|
||||
|
||||
SOGoTimeZone = "UTC";
|
||||
SOGoDayStartTime = "8";
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
// that much about this for now.
|
||||
//
|
||||
+ (NSString *) securedValue: (NSString *) theValue
|
||||
usingKey: (NSString *) theKey
|
||||
usingKey: (NSString *) theKey
|
||||
{
|
||||
NSData *data;
|
||||
NSString *s;
|
||||
@@ -171,13 +171,12 @@
|
||||
klen = [data length];
|
||||
|
||||
// Get the key - padding it with 0 with key length
|
||||
pass = (char *)malloc(klen);
|
||||
memset(pass, 0, klen);
|
||||
pass = (char *) calloc(klen, sizeof(char));
|
||||
[theValue getCString: pass maxLength: klen encoding: NSUTF8StringEncoding];
|
||||
|
||||
// Target buffer
|
||||
buf = (char *)malloc(klen);
|
||||
|
||||
|
||||
for (i = 0; i < klen; i++)
|
||||
{
|
||||
buf[i] = key[i] ^ pass[i];
|
||||
@@ -186,36 +185,38 @@
|
||||
free(pass);
|
||||
|
||||
data = [NSData dataWithBytesNoCopy: buf length: klen freeWhenDone: YES];
|
||||
|
||||
|
||||
s = [[NSString alloc] initWithData: [data dataByEncodingBase64WithLineLength: 1024]
|
||||
encoding: NSASCIIStringEncoding];
|
||||
encoding: NSASCIIStringEncoding];
|
||||
return [s autorelease];
|
||||
}
|
||||
|
||||
|
||||
+ (NSString *) valueFromSecuredValue: (NSString *) theValue
|
||||
usingKey: (NSString *) theKey
|
||||
usingKey: (NSString *) theKey
|
||||
{
|
||||
NSData *data;
|
||||
NSData *dataKey, *dataValue;
|
||||
NSString *s;
|
||||
|
||||
char *buf, *key, *pass;
|
||||
int i, klen;
|
||||
|
||||
char *buf, *key, *value;
|
||||
size_t i, klen, vlen;
|
||||
|
||||
// Get the key length and its bytes
|
||||
data = [theKey dataByDecodingBase64];
|
||||
key = (char *)[data bytes];
|
||||
klen = [data length];
|
||||
dataKey = [theKey dataByDecodingBase64];
|
||||
key = (char *)[dataKey bytes];
|
||||
klen = [dataKey length];
|
||||
|
||||
// Get the secured value length and its bytes
|
||||
dataValue = [theValue dataByDecodingBase64];
|
||||
value = (char *)[dataValue bytes];
|
||||
vlen = [dataValue length];
|
||||
|
||||
// Get the secured password
|
||||
pass = (char *)[[theValue dataByDecodingBase64] bytes];
|
||||
|
||||
// Target buffer
|
||||
buf = (char *)malloc(klen);
|
||||
buf = (char *) calloc(klen, sizeof(char));
|
||||
|
||||
for (i = 0; i < klen; i++)
|
||||
for (i = 0; i < klen && i < vlen; i++)
|
||||
{
|
||||
buf[i] = key[i] ^ pass[i];
|
||||
buf[i] = key[i] ^ value[i];
|
||||
}
|
||||
|
||||
// buf is now our C string in UTF8
|
||||
|
||||
@@ -438,14 +438,16 @@ static Class NSNullK;
|
||||
NSEnumerator *authIDs;
|
||||
NSString *currentID;
|
||||
BOOL checkOK;
|
||||
SOGoSystemDefaults *sd;
|
||||
NSRange r;
|
||||
|
||||
checkOK = NO;
|
||||
|
||||
|
||||
authIDs = [[self authenticationSourceIDsInDomain: *domain] objectEnumerator];
|
||||
while (!checkOK && (currentID = [authIDs nextObject]))
|
||||
{
|
||||
sogoSource = [_sources objectForKey: currentID];
|
||||
|
||||
|
||||
checkOK = [sogoSource checkLogin: login
|
||||
password: password
|
||||
perr: perr
|
||||
@@ -649,7 +651,7 @@ static Class NSNullK;
|
||||
[currentSource setBindPassword: _pwd];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return checkOK;
|
||||
}
|
||||
|
||||
@@ -742,6 +744,12 @@ static Class NSNullK;
|
||||
NSNumber *isGroup;
|
||||
NSArray *c_emails;
|
||||
BOOL access;
|
||||
NSEnumerator *enumerator;
|
||||
NSString *access_type;
|
||||
NSArray *access_types_list = [NSArray arrayWithObjects: @"CalendarAccess",
|
||||
@"MailAccess",
|
||||
@"ActiveSyncAccess",
|
||||
nil];
|
||||
|
||||
emails = [NSMutableArray array];
|
||||
cn = nil;
|
||||
@@ -751,10 +759,10 @@ static Class NSNullK;
|
||||
c_imaplogin = nil;
|
||||
c_sievehostname = nil;
|
||||
|
||||
[theCurrentUser setObject: [NSNumber numberWithBool: YES]
|
||||
forKey: @"CalendarAccess"];
|
||||
[theCurrentUser setObject: [NSNumber numberWithBool: YES]
|
||||
forKey: @"MailAccess"];
|
||||
enumerator = [access_types_list objectEnumerator];
|
||||
while ((access_type = [enumerator nextObject]) != nil)
|
||||
[theCurrentUser setObject: [NSNumber numberWithBool: YES]
|
||||
forKey: access_type];
|
||||
|
||||
if ([[theCurrentUser objectForKey: @"DomainLessLogin"] boolValue])
|
||||
{
|
||||
@@ -763,7 +771,6 @@ static Class NSNullK;
|
||||
r = [theUID rangeOfString: [NSString stringWithFormat: @"@%@", theDomain]];
|
||||
theUID = [theUID substringToIndex: r.location];
|
||||
}
|
||||
|
||||
|
||||
sogoSources = [[self authenticationSourceIDsInDomain: theDomain] objectEnumerator];
|
||||
userEntry = nil;
|
||||
@@ -791,14 +798,15 @@ static Class NSNullK;
|
||||
c_imaplogin = [userEntry objectForKey: @"c_imaplogin"];
|
||||
if (!c_sievehostname)
|
||||
c_sievehostname = [userEntry objectForKey: @"c_sievehostname"];
|
||||
access = [[userEntry objectForKey: @"CalendarAccess"] boolValue];
|
||||
if (!access)
|
||||
[theCurrentUser setObject: [NSNumber numberWithBool: NO]
|
||||
forKey: @"CalendarAccess"];
|
||||
access = [[userEntry objectForKey: @"MailAccess"] boolValue];
|
||||
if (!access)
|
||||
[theCurrentUser setObject: [NSNumber numberWithBool: NO]
|
||||
forKey: @"MailAccess"];
|
||||
|
||||
enumerator = [access_types_list objectEnumerator];
|
||||
while ((access_type = [enumerator nextObject]) != nil)
|
||||
{
|
||||
access = [[userEntry objectForKey: access_type] boolValue];
|
||||
if (!access)
|
||||
[theCurrentUser setObject: [NSNumber numberWithBool: NO]
|
||||
forKey: access_type];
|
||||
}
|
||||
|
||||
// We check if it's a group
|
||||
isGroup = [userEntry objectForKey: @"isGroup"];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -10,11 +10,11 @@ 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",
|
||||
"Ukrainian", "Swedish" ];
|
||||
"Slovenian", "Ukrainian", "Swedish" ];
|
||||
daysBetweenResponseList=[1,2,3,5,7,14,21,30]
|
||||
|
||||
class HTTPPreferencesPOST (webdavlib.HTTPPOST):
|
||||
|
||||
@@ -22,6 +22,7 @@ $(SOGO_TOOL)_OBJC_FILES += \
|
||||
SOGoToolRemoveDoubles.m \
|
||||
SOGoToolRenameUser.m \
|
||||
SOGoToolRestore.m \
|
||||
SOGoToolCreateFolder.m \
|
||||
SOGoToolUserPreferences.m \
|
||||
SOGoToolManageEAS.m
|
||||
TOOL_NAME += $(SOGO_TOOL)
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
/* SOGoToolCreateFolder.m - this file is part of SOGo
|
||||
* Implementation of create-folder command for sogo-tool
|
||||
*
|
||||
* Copyright (C) 2015 Javier Amor Garcia
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import <Foundation/NSArray.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSString.h>
|
||||
#import <Foundation/NSException.h>
|
||||
|
||||
#import <SOGo/NSArray+Utilities.h>
|
||||
#import <SOGo/SOGoObject.h>
|
||||
|
||||
#import <GDLContentStore/GCSFolderManager.h>
|
||||
#import <GDLContentStore/GCSFolder.h>
|
||||
|
||||
#import "SOGoToolRestore.h"
|
||||
|
||||
@interface SOGoToolCreateFolder : SOGoToolRestore
|
||||
{
|
||||
NSMutableArray *foldersContents;
|
||||
NSString *folderType;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation SOGoToolCreateFolder
|
||||
|
||||
+ (NSString *) command
|
||||
{
|
||||
return @"create-folder";
|
||||
}
|
||||
|
||||
+ (NSString *) description
|
||||
{
|
||||
return @"create folders for a user";
|
||||
}
|
||||
|
||||
- (id) init
|
||||
{
|
||||
if ((self = [super init]))
|
||||
{
|
||||
foldersContents = nil;
|
||||
folderType = nil;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[foldersContents release];
|
||||
[folderType release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) usage
|
||||
{
|
||||
fprintf (stderr, "create-folder user type [displayname ...]\n\n"
|
||||
" user the user on which the folder(s) will be created\n"
|
||||
" type type of directory. Calendar or Contacts\n"
|
||||
" displayname display name(s) for the created folder(s)\n\n"
|
||||
"Examples: sogo-tool create-folder user1 Calendar cal1 cal2\n"
|
||||
" sogo-tool create-folder user1 Contacts agenda\n");
|
||||
}
|
||||
|
||||
- (BOOL) createNewFolderOfType: (NSString *) type
|
||||
withContent: (NSDictionary *) content
|
||||
{
|
||||
NSString *folder;
|
||||
NSString *guid;
|
||||
GCSFolderManager *fm;
|
||||
GCSFolder *gcsFolder;
|
||||
BOOL rc;
|
||||
|
||||
guid = [SOGoObject globallyUniqueObjectId];
|
||||
folder= [NSString stringWithFormat: @"/Users/%@/%@/%@",
|
||||
userID, type, guid];
|
||||
fm = [GCSFolderManager defaultFolderManager];
|
||||
|
||||
rc = [self createFolder: folder withFM: fm];
|
||||
if (!rc)
|
||||
{
|
||||
NSLog (@"Create directory failed at path %s", folder);
|
||||
return NO;
|
||||
}
|
||||
|
||||
gcsFolder = [fm folderAtPath: folder];
|
||||
if (!gcsFolder)
|
||||
{
|
||||
NSLog (@"folder '%@' could not be created", folder);
|
||||
return NO;
|
||||
}
|
||||
|
||||
rc = [self restoreDisplayName: [content objectForKey: @"displayname"]
|
||||
ofFolder: gcsFolder
|
||||
withFM: fm];
|
||||
return rc;
|
||||
}
|
||||
|
||||
- (BOOL) proceed
|
||||
{
|
||||
BOOL rc;
|
||||
NSUInteger count, i;
|
||||
NSDictionary * content;
|
||||
|
||||
rc = YES;
|
||||
count = [foldersContents count];
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
content = [foldersContents objectAtIndex: i];
|
||||
if (![self createNewFolderOfType: folderType withContent: content])
|
||||
{
|
||||
rc = NO;
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
- (BOOL) parseArguments
|
||||
{
|
||||
NSString *identifier;
|
||||
NSUInteger count, i;
|
||||
NSDictionary *content;
|
||||
|
||||
count = [arguments count];
|
||||
if (count < 3)
|
||||
{
|
||||
[self usage];
|
||||
return NO;
|
||||
}
|
||||
|
||||
identifier = [arguments objectAtIndex: 0];
|
||||
if (![self fetchUserID: identifier])
|
||||
{
|
||||
fprintf (stderr, "Invalid user:%s\n", [identifier cString]);
|
||||
return NO;
|
||||
}
|
||||
|
||||
folderType = [arguments objectAtIndex: 1];
|
||||
if (!([folderType isEqualToString: @"Contacts"] || [folderType isEqualToString: @"Calendar"]))
|
||||
{
|
||||
fprintf (stderr, "Invalid folder type:%s\n", [folderType cString]);
|
||||
return NO;
|
||||
}
|
||||
|
||||
foldersContents = [[NSMutableArray alloc] init];
|
||||
for (i = 2; i < count; i++)
|
||||
{
|
||||
content = [NSDictionary dictionaryWithObject: [arguments objectAtIndex: i]
|
||||
forKey: @"displayname"];
|
||||
[foldersContents addObject: content];
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,49 @@
|
||||
/* SOGoToolRestore.h - this file is part of SOGo
|
||||
* Header to allow subclassing of SOGoToolRestore class
|
||||
*
|
||||
* Copyright (C) 2015 Javier Amor Garcia
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#import "SOGoTool.h"
|
||||
|
||||
typedef enum SOGoToolRestoreMode {
|
||||
SOGoToolRestoreFolderMode,
|
||||
SOGoToolRestoreFolderDestructiveMode,
|
||||
SOGoToolRestoreListFoldersMode,
|
||||
SOGoToolRestorePreferencesMode
|
||||
} SOGoToolRestoreMode;
|
||||
|
||||
@interface SOGoToolRestore : SOGoTool
|
||||
{
|
||||
NSString *directory;
|
||||
NSString *userID;
|
||||
NSString *filename;
|
||||
NSString *restoreFolder;
|
||||
BOOL destructive; /* destructive mode not handled */
|
||||
SOGoToolRestoreMode restoreMode;
|
||||
}
|
||||
|
||||
- (BOOL) fetchUserID: (NSString *) identifier;
|
||||
- (BOOL) createFolder: (NSString *) folder
|
||||
withFM: (GCSFolderManager *) fm;
|
||||
- (BOOL) restoreDisplayName: (NSString *) newDisplayName
|
||||
ofFolder: (GCSFolder *) gcsFolder
|
||||
withFM: (GCSFolderManager *) fm;
|
||||
|
||||
@end
|
||||
+5
-24
@@ -46,33 +46,14 @@
|
||||
#import <NGCards/NGVCard.h>
|
||||
#import <NGCards/NGVList.h>
|
||||
|
||||
#import "SOGoTool.h"
|
||||
#import "SOGoToolRestore.h"
|
||||
|
||||
/* TODO:
|
||||
- respond to "--help restore"
|
||||
- handle database connectivity errors
|
||||
- handle the case where the restored folder has been deleted
|
||||
- write methods in GDLContentStore to get/update displayname
|
||||
and storing roles */
|
||||
|
||||
typedef enum SOGoToolRestoreMode {
|
||||
SOGoToolRestoreFolderMode,
|
||||
SOGoToolRestoreFolderDestructiveMode,
|
||||
SOGoToolRestoreListFoldersMode,
|
||||
SOGoToolRestorePreferencesMode
|
||||
} SOGoToolRestoreMode;
|
||||
|
||||
@interface SOGoToolRestore : SOGoTool
|
||||
{
|
||||
NSString *directory;
|
||||
NSString *userID;
|
||||
NSString *filename;
|
||||
NSString *restoreFolder;
|
||||
BOOL destructive; /* destructive mode not handled */
|
||||
SOGoToolRestoreMode restoreMode;
|
||||
}
|
||||
|
||||
@end
|
||||
and storing roles */
|
||||
|
||||
@implementation SOGoToolRestore
|
||||
|
||||
@@ -176,8 +157,8 @@ typedef enum SOGoToolRestoreMode {
|
||||
SOGoSystemDefaults *sd;
|
||||
SOGoUserManager *lm;
|
||||
NSDictionary *infos;
|
||||
NSString *uid;
|
||||
|
||||
NSString *uid = nil;
|
||||
|
||||
BOOL rc;
|
||||
|
||||
lm = [SOGoUserManager sharedUserManager];
|
||||
@@ -188,7 +169,7 @@ typedef enum SOGoToolRestoreMode {
|
||||
{
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
uid = [infos objectForKey: @"c_uid"];
|
||||
|
||||
|
||||
if ([sd enableDomainBasedUID] && [uid rangeOfString: @"@"].location == NSNotFound)
|
||||
uid = [NSString stringWithFormat: @"%@@%@",
|
||||
[infos objectForKey: @"c_uid"],
|
||||
|
||||
@@ -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" = "\"<p>存取控制清單管理模組允許異動每個使用者行事曆及通訊錄的使用權限。</p><p>如要修改使用者資料匣的使用權限,請在視窗上方的搜尋欄位輸入使用者名稱後,將遊標移到要修改的資料匣上連續按兩下滑鼠。</p>";
|
||||
@@ -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 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 \
|
||||
|
||||
@@ -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" = "<p>The Access Control Lists administration module allows to change the ACLs of each user's Calendars and Address books.</p><p>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.</p>";
|
||||
@@ -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" = "星期六";
|
||||
@@ -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 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 \
|
||||
|
||||
@@ -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";
|
||||
@@ -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
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/* UIxUserRightsEditor.m - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2007-2010 Inverse inc.
|
||||
*
|
||||
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
* 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 <Foundation/NSDictionary.h>
|
||||
|
||||
#import <NGObjWeb/NSException+HTTP.h>
|
||||
#import <NGObjWeb/WOApplication.h>
|
||||
#import <NGObjWeb/WOResponse.h>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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:";
|
||||
|
||||
@@ -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 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 \
|
||||
|
||||
@@ -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:";
|
||||
|
||||
@@ -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" = "發行者";
|
||||
@@ -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 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 \
|
||||
|
||||
@@ -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";
|
||||
@@ -22,16 +22,16 @@ request_info = "lo invita a un evento.";
|
||||
"Add to calendar" = "Añadir al calendario";
|
||||
"Delete from calendar" = "Borrar del calendario";
|
||||
"Update status" = "Actualizar estado";
|
||||
Accept = "Confirmar";
|
||||
Accept = "Aceptar";
|
||||
Decline = "Rechazar";
|
||||
Tentative = "Tentativo";
|
||||
"Delegate ..." = "Delegar a ...";
|
||||
"Delegated to" = "Delegado a";
|
||||
"Update status in calendar" = "Actualizar estado en el calendario";
|
||||
"delegated from" = "delegado de";
|
||||
"delegated from" = "delegado por";
|
||||
|
||||
reply_info_no_attendee = "Ha recibido una respuesta a una invitación de evento pero el remitente no aparece como un participante.";
|
||||
reply_info = "Esta es la respuesta a una invitación a un evento que Usted ha organizado.";
|
||||
reply_info = "Esta es la respuesta a una invitación a un evento que usted ha organizado.";
|
||||
|
||||
"to" = "para";
|
||||
|
||||
@@ -39,7 +39,7 @@ reply_info = "Esta es la respuesta a una invitación a un evento que Usted ha or
|
||||
|
||||
"Size" = "Tamaño";
|
||||
|
||||
"Digital signature is not valid" = "Firma Digital no válida";
|
||||
"Digital signature is not valid" = "Firma digital no válida";
|
||||
"Message is signed" = "Mensaje firmado";
|
||||
"Subject" = "Asunto";
|
||||
"From" = "De";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -300,7 +300,7 @@
|
||||
delegatedAttendee = [iCalPerson new];
|
||||
[delegatedAttendee autorelease];
|
||||
[delegatedAttendee setEmail: delegatedEmail];
|
||||
delegatedUid = [delegatedAttendee uid];
|
||||
delegatedUid = [delegatedAttendee uidInDomain: [user domain]];
|
||||
if (delegatedUid)
|
||||
{
|
||||
SOGoUser *delegatedUser;
|
||||
|
||||
@@ -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" = "名稱";
|
||||
@@ -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 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 \
|
||||
|
||||
@@ -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";
|
||||
@@ -26,7 +26,7 @@
|
||||
/* Tooltips */
|
||||
|
||||
"Send this message now" = "Enviar este mensaje ahora";
|
||||
"Select a recipient from an Address Book" = "Seleccione un destinatario de alguna de las libretas de direcciones";
|
||||
"Select a recipient from an Address Book" = "Seleccione un destinatario de una libreta de direcciones";
|
||||
"Include an attachment" = "Incluir un adjunto";
|
||||
"Save this message" = "Guardar este mensaje";
|
||||
"Get new messages" = "Recibir mensajes nuevos";
|
||||
@@ -144,7 +144,7 @@
|
||||
"Sender" = "Remitente";
|
||||
"Subject or Sender" = "Asunto o remitente";
|
||||
"To or Cc" = "Para o CC";
|
||||
"Entire Message" = "Mensage completo";
|
||||
"Entire Message" = "Mensaje completo";
|
||||
|
||||
"Date" = "Fecha";
|
||||
"View" = "Vista";
|
||||
@@ -205,7 +205,7 @@
|
||||
"Delegation..." = "Delegación...";
|
||||
|
||||
/* Use This Folder menu */
|
||||
"Sent Messages" = "Enviar mensajes";
|
||||
"Sent Messages" = "Mensajes enviados";
|
||||
"Drafts" = "Borradores";
|
||||
"Deleted Messages" = "Mensajes borrados";
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
"Edit As New..." = "Editar como nuevo...";
|
||||
"Move To" = "Mover a";
|
||||
"Copy To" = "Copiar a";
|
||||
"Label" = "Etiquetar";
|
||||
"Label" = "Etiqueta";
|
||||
"Mark" = "Marcar";
|
||||
"Save As..." = "Guardar como...";
|
||||
"Print Preview" = "Vista preliminar";
|
||||
@@ -243,8 +243,8 @@
|
||||
"Search messages in:" = "Buscar mensajes en:";
|
||||
"Search" = "Buscar";
|
||||
"Search subfolders" = "Buscar en subcarpetas";
|
||||
"Match any of the following" = "Coincidir con cualquiera de los siguientes";
|
||||
"Match all of the following" = "Coincidir con alguno de los siguientes";
|
||||
"Match any of the following" = "Coincidir con cualquiera de los siguientes criterios:";
|
||||
"Match all of the following" = "Coincidir con todos estos criterios:";
|
||||
"contains" = "contiene";
|
||||
"does not contain" = "no contiene";
|
||||
"No matches found" = "No se encontraron coincidencias";
|
||||
@@ -257,7 +257,7 @@
|
||||
"Enter the new name of your folder :"
|
||||
= "Introduzca el nuevo nombre de la carpeta: ";
|
||||
"Do you really want to move this folder into the trash ?"
|
||||
= "¿Seguro que desea mover la carpeta a la papelera?";
|
||||
= "¿Está seguro de que desea mover la carpeta a la papelera?";
|
||||
"Operation failed" = "Operación fallida";
|
||||
|
||||
"Quota" = "Cuota";
|
||||
@@ -279,12 +279,12 @@
|
||||
"The folder functionality could not be changed."
|
||||
= "La funcionalidad de la carpeta no puede ser cambiada.";
|
||||
|
||||
"You need to choose a non-virtual folder!" = "¡Ha de seleccionar una carpeta no virtual!";
|
||||
"You need to choose a non-virtual folder!" = "La carpeta seleccionada no debe ser virtual";
|
||||
|
||||
"Moving a message into its own folder is impossible!"
|
||||
= "¡Es imposible mover los mensajes en su propia carpeta!";
|
||||
= "¡Es imposible mover los mensajes a la misma carpeta!";
|
||||
"Copying a message into its own folder is impossible!"
|
||||
= "¡Es imposible copiar mensajes en su propia carpeta!";
|
||||
= "¡Es imposible copiar mensajes a la misma carpeta!";
|
||||
|
||||
/* Message operations */
|
||||
"The messages could not be moved to the trash folder. Would you like to delete them immediately?"
|
||||
@@ -299,9 +299,9 @@
|
||||
"There is an active file upload. Closing the window will interrupt it." = "Se está subiendo un archivo. Si cierra la ventana se cancelará la operación.";
|
||||
|
||||
/* Message sending */
|
||||
"cannot send message: (smtp) all recipients discarded" = "No se puede enviar el mensaje: (smtp) todos los destinatarios han sido descartados";
|
||||
"cannot send message (smtp) - recipients discarded:" = "No se puede enviar el mensaje: (smtp) destinatarios descartados:";
|
||||
"cannot send message: (smtp) error when connecting" = "No se puede enviar el mensaje: (smtp) error de conexión";
|
||||
"cannot send message: (smtp) all recipients discarded" = "No se puede enviar el mensaje: Ninguno de los destinatarios es válido.";
|
||||
"cannot send message (smtp) - recipients discarded:" = "No se puede enviar el mensaje: Las siguientes direcciones no son válidas:";
|
||||
"cannot send message: (smtp) error when connecting" = "No se puede enviar el mensaje: Error de conexión mientras se trataba de conectar con el servidor SMTP.";
|
||||
|
||||
/* Contacts list in mail editor */
|
||||
"Email" = "Correo";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"choose" = "Aukeratu ...";
|
||||
"Arabic" = "العربية";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -37,6 +38,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Espanhol (Espanha)";
|
||||
"SpanishArgentina" = "Espanhol (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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.<br/><br/>
|
||||
SOGo provides a rich AJAX-based Web interface and supports multiple native clients through the use of standard protocols such as CalDAV and CardDAV.<br/><br/>
|
||||
SOGo is distributed under the <a href=\"http://gnu.org/licenses/gpl.html\">GNU GPL</a> 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.<br/><br/>
|
||||
See <a href=\"http://www.sogo.nu/en/support/community.html\">this page</a> 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...";
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Spansk (Spanien)";
|
||||
"SpanishArgentina" = "Spansk (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -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 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 \
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentinien)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -37,6 +38,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -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";
|
||||
|
||||
Executable
+35
@@ -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";
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/* 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à";
|
||||
"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" = "O";
|
||||
"AboutBox" = "Developed by Inverse, SOGo is a fully-featured groupware server with a focus on scalability and simplicity.<br/><br/>\nSOGo provides a rich AJAX-based Web interface and supports multiple native clients through the use of standard protocols such as CalDAV and CardDAV.<br/><br/>\nSOGo is distributed under the <a href=\"http://gnu.org/licenses/gpl.html\">GNU GPL</a> 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.<br/><br/>\nSee <a href=\"http://www.sogo.nu/en/support/community.html\">this page</a> 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...";
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -38,6 +39,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"Arabic" = "العربية";
|
||||
"Basque" = "Euskara";
|
||||
"Catalan" = "Català";
|
||||
"ChineseTaiwan" = "Chinese (Taiwan)";
|
||||
"Czech" = "Česky";
|
||||
"Danish" = "Dansk (Danmark)";
|
||||
"Dutch" = "Nederlands";
|
||||
@@ -37,6 +38,7 @@
|
||||
"BrazilianPortuguese" = "Português brasileiro";
|
||||
"Russian" = "Русский";
|
||||
"Slovak" = "Slovensky";
|
||||
"Slovenian" = "Slovenščina";
|
||||
"SpanishSpain" = "Español (España)";
|
||||
"SpanishArgentina" = "Español (Argentina)";
|
||||
"Swedish" = "Svenska";
|
||||
|
||||
Loaded 100 of 213 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user