diff --git a/NEWS b/NEWS index 2c8530f83..eeb757988 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,7 @@ Bug fixes - [core] newly subscribed calendars are excluded from freebusy (#3354) - [core] strip cr during LDIF import process (#4172) - [web] fixed mail delegation of pristine user accounts (#4160) + - [web] respect SOGoLanguage and SOGoSupportedLanguages (#4169) - [eas] fixed opacity in EAS freebusy (#4033) - [eas] set reply/forwarded flags when ReplaceMime is set (#4133) - [eas] remove alarms over EAS if we don't want them (#4059) diff --git a/SoObjects/SOGo/SOGoDefaults.plist b/SoObjects/SOGo/SOGoDefaults.plist index 824cd60e4..855be56bb 100644 --- a/SoObjects/SOGo/SOGoDefaults.plist +++ b/SoObjects/SOGo/SOGoDefaults.plist @@ -38,6 +38,7 @@ SOGoEnableDomainBasedUID = NO; SOGoLoginModule = "Mail"; + WODefaultLanguages = (); SOGoLanguage = "English"; SOGoSupportedLanguages = ( "Arabic", diff --git a/SoObjects/SOGo/WOContext+SOGo.m b/SoObjects/SOGo/WOContext+SOGo.m index c558b1be6..5a4deeaea 100644 --- a/SoObjects/SOGo/WOContext+SOGo.m +++ b/SoObjects/SOGo/WOContext+SOGo.m @@ -26,6 +26,7 @@ #import #import "SOGoDomainDefaults.h" +#import "SOGoSystemDefaults.h" #import "SOGoUser.h" #import "SOGoUserDefaults.h" @@ -36,34 +37,43 @@ - (NSArray *) resourceLookupLanguages { NSMutableArray *languages; - NSArray *browserLanguages; + NSArray *browserLanguages, *supportedLanguages; + SOGoSystemDefaults *sd; SOGoUser *user; NSString *language; languages = [NSMutableArray array]; user = [self activeUser]; + + // Retrieve language parameter + language = [[self request] formValueForKey: @"language"]; + if ([language length] > 0) + [languages addObject: language]; + if (!user || [[user login] isEqualToString: @"anonymous"]) { + // Use browser's languages browserLanguages = [[self request] browserLanguages]; [languages addObjectsFromArray: browserLanguages]; } else { + // Use user's language or domain's language language = [[user userDefaults] language]; [languages addObject: language]; language = [[user domainDefaults] language]; [languages addObject: language]; } - // if (activeUser && [activeUser language]) - // [languages addObject: [activeUser language]]; - - // if ([self hasSession]) - // [languages addObjectsFromArray: [[self session] languages]]; - // else - // [languages addObjectsFromArray: [[self request] browserLanguages]]; + // Return the first language matching a supported language or the SOGoLanguage + // default if none is matching. + sd = [SOGoSystemDefaults sharedSystemDefaults]; + supportedLanguages = [sd supportedLanguages]; + language = [languages firstObjectCommonWithArray: supportedLanguages]; + if (!(language && [language isKindOfClass: [NSString class]])) + language = [sd stringForKey: @"SOGoLanguage"]; - return languages; + return [NSArray arrayWithObject: language]; } @end diff --git a/UI/MainUI/SOGoRootPage.h b/UI/MainUI/SOGoRootPage.h index acee8c049..673728961 100644 --- a/UI/MainUI/SOGoRootPage.h +++ b/UI/MainUI/SOGoRootPage.h @@ -31,6 +31,8 @@ NSString *cookieLogin; } +- (NSArray *) languages; + @end #endif /* SOGOROOTPAGE_H */ diff --git a/UI/MainUI/SOGoRootPage.m b/UI/MainUI/SOGoRootPage.m index 40ce07441..c984d4670 100644 --- a/UI/MainUI/SOGoRootPage.m +++ b/UI/MainUI/SOGoRootPage.m @@ -521,6 +521,16 @@ return item; } +- (BOOL) hasManyLanguages +{ + return [[self languages] count] > 1; +} + +- (NSString *) language +{ + return [[context resourceLookupLanguages] objectAtIndex: 0]; +} + - (NSArray *) languages { return [[SOGoSystemDefaults sharedSystemDefaults] supportedLanguages]; diff --git a/UI/Templates/MainUI/SOGoRootPage.wox b/UI/Templates/MainUI/SOGoRootPage.wox index 32ab4b083..e6b7bd43d 100644 --- a/UI/Templates/MainUI/SOGoRootPage.wox +++ b/UI/Templates/MainUI/SOGoRootPage.wox @@ -42,20 +42,22 @@ + + diff --git a/UI/WebServerResources/SOGoRootPage.js b/UI/WebServerResources/SOGoRootPage.js index 5ad4e2961..333ca809a 100644 --- a/UI/WebServerResources/SOGoRootPage.js +++ b/UI/WebServerResources/SOGoRootPage.js @@ -24,6 +24,15 @@ function initLogin() { event.stop() }); } + var language = $("language"); + if (language) + language.on("change", function(event) { + var value = $("language").value; + if (value != "WONoSelectionString") + // Reload page + window.location.href = ApplicationBaseURL + '/login?language=' + value; + }); + var submit = $("submit"); submit.observe("click", onLoginClick);