diff --git a/src/Umbraco.Core/Services/ILocalizedTextService.cs b/src/Umbraco.Core/Services/ILocalizedTextService.cs
index 9875d63170..e35bad8b66 100644
--- a/src/Umbraco.Core/Services/ILocalizedTextService.cs
+++ b/src/Umbraco.Core/Services/ILocalizedTextService.cs
@@ -47,5 +47,13 @@ namespace Umbraco.Core.Services
/// to resolve the full culture if possible.
///
CultureInfo ConvertToSupportedCultureWithRegionCode(CultureInfo currentCulture);
+
+ ///
+ /// HAAAAAAAAAAACK! Used for backwards compat to convert a user's real culture code to a region code - normally this would be two letters
+ /// TODO: REmove in v8
+ ///
+ ///
+ ///
+ string ConvertToRegionCodeFromSupportedCulture(CultureInfo currentCulture);
}
}
diff --git a/src/Umbraco.Core/Services/LocalizedTextService.cs b/src/Umbraco.Core/Services/LocalizedTextService.cs
index eedfc5e506..cc789434f8 100644
--- a/src/Umbraco.Core/Services/LocalizedTextService.cs
+++ b/src/Umbraco.Core/Services/LocalizedTextService.cs
@@ -191,6 +191,23 @@ namespace Umbraco.Core.Services
return attempt ? attempt.Result : currentCulture;
}
+ ///
+ /// HAAAAAAAAAAACK! Used for backwards compat to convert a user's real culture code to a region code - normally this would be two letters
+ ///
+ ///
+ ///
+ public string ConvertToRegionCodeFromSupportedCulture(CultureInfo currentCulture)
+ {
+ if (currentCulture == null) throw new ArgumentNullException("currentCulture");
+
+ if (_fileSources == null) return currentCulture.Name;
+
+ var attempt = _fileSources.Value.TryConvert4LetterCultureTo2Letter(currentCulture);
+ return attempt
+ ? attempt.Result
+ : currentCulture.Name;
+ }
+
private string GetFromDictionarySource(CultureInfo culture, string area, string key, IDictionary tokens)
{
if (_dictionarySource.ContainsKey(culture) == false)
diff --git a/src/Umbraco.Core/Services/LocalizedTextServiceFileSources.cs b/src/Umbraco.Core/Services/LocalizedTextServiceFileSources.cs
index 5afe4aa950..c2e7cb1617 100644
--- a/src/Umbraco.Core/Services/LocalizedTextServiceFileSources.cs
+++ b/src/Umbraco.Core/Services/LocalizedTextServiceFileSources.cs
@@ -158,7 +158,7 @@ namespace Umbraco.Core.Services
//TODO: See other notes in this class, this is purely a hack because we store 2 letter culture file names that contain 4 letter cultures :(
public Attempt TryConvert2LetterCultureTo4Letter(string twoLetterCulture)
{
- if (twoLetterCulture.Length != 2) Attempt.Fail();
+ if (twoLetterCulture.Length != 2) return Attempt.Fail();
//This needs to be resolved before continuing so that the _twoLetterCultureConverter cache is initialized
var resolved = _xmlSources.Value;
@@ -168,6 +168,19 @@ namespace Umbraco.Core.Services
: Attempt.Fail();
}
+ //TODO: See other notes in this class, this is purely a hack because we store 2 letter culture file names that contain 4 letter cultures :(
+ public Attempt TryConvert4LetterCultureTo2Letter(CultureInfo culture)
+ {
+ if (culture == null) throw new ArgumentNullException("culture");
+
+ //This needs to be resolved before continuing so that the _twoLetterCultureConverter cache is initialized
+ var resolved = _xmlSources.Value;
+
+ return _twoLetterCultureConverter.Values.Contains(culture)
+ ? Attempt.Succeed(culture.Name.Substring(0, 2))
+ : Attempt.Fail();
+ }
+
private void MergeSupplementaryFiles(CultureInfo culture, XDocument xMasterDoc)
{
if (xMasterDoc.Root == null) return;
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs
index b5fff5e39a..28991f1f6b 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs
@@ -28,6 +28,7 @@ using umbraco.providers;
using umbraco.cms.presentation.Trees;
using Umbraco.Core.IO;
using Umbraco.Core;
+using Umbraco.Core.Services;
namespace umbraco.cms.presentation.user
{
@@ -106,37 +107,25 @@ namespace umbraco.cms.presentation.user
}
}
+ var userCulture = Services.TextService.ConvertToSupportedCultureWithRegionCode(new CultureInfo(u.Language));
+
// Populate ui language lsit
- foreach (
- string f in
- Directory.GetFiles(IOHelper.MapPath(SystemDirectories.Umbraco + "/config/lang"), "*.xml")
- )
+ foreach (var lang in Services.TextService.GetSupportedCultures())
{
- XmlDocument x = new XmlDocument();
- x.Load(f);
+ var regionCode = Services.TextService.ConvertToRegionCodeFromSupportedCulture(lang);
+
+ var li = new ListItem(lang.DisplayName, regionCode);
- var alias = x.DocumentElement.Attributes.GetNamedItem("alias").Value;
+ if (Equals(lang, userCulture))
+ li.Selected = true;
- //ensure that only unique languages are added
- if (userLanguage.Items.FindByValue(alias) == null)
- {
- ListItem li =
- new ListItem(x.DocumentElement.Attributes.GetNamedItem("intName").Value,
- alias);
-
-
- if (x.DocumentElement.Attributes.GetNamedItem("alias").Value == u.Language)
- li.Selected = true;
-
- userLanguage.Items.Add(li);
- }
-
+ userLanguage.Items.Add(li);
}
// Console access and disabling
NoConsole.Checked = u.NoConsole;
Disabled.Checked = u.Disabled;
-
+
PlaceHolder medias = new PlaceHolder();
mediaPicker.AppAlias = Constants.Applications.Media;
mediaPicker.TreeAlias = "media";
@@ -161,19 +150,19 @@ namespace umbraco.cms.presentation.user
// Add password changer
- var passwordChanger = (passwordChanger) LoadControl(SystemDirectories.Umbraco + "/controls/passwordChanger.ascx");
+ var passwordChanger = (passwordChanger)LoadControl(SystemDirectories.Umbraco + "/controls/passwordChanger.ascx");
passwordChanger.MembershipProviderName = UmbracoSettings.DefaultBackofficeProvider;
-
+
//Add a custom validation message for the password changer
var passwordValidation = new CustomValidator
- {
- ID = "PasswordChangerValidator"
- };
+ {
+ ID = "PasswordChangerValidator"
+ };
var validatorContainer = new HtmlGenericControl("div")
- {
- Visible = false,
- EnableViewState = false
- };
+ {
+ Visible = false,
+ EnableViewState = false
+ };
validatorContainer.Attributes["class"] = "alert alert-error";
validatorContainer.Style.Add(HtmlTextWriterStyle.MarginTop, "10px");
validatorContainer.Style.Add(HtmlTextWriterStyle.Width, "300px");
@@ -194,7 +183,7 @@ namespace umbraco.cms.presentation.user
Pane ppNodes = new Pane();
ppNodes.addProperty(ui.Text("user", "startnode", UmbracoUser), content);
ppNodes.addProperty(ui.Text("user", "mediastartnode", UmbracoUser), medias);
-
+
//Generel umrbaco access
Pane ppAccess = new Pane();
ppAccess.addProperty(ui.Text("user", "noConsole", UmbracoUser), NoConsole);
@@ -208,12 +197,12 @@ namespace umbraco.cms.presentation.user
TabPage userInfo = UserTabs.NewTabPage(u.Name);
userInfo.Controls.Add(pp);
-
+
userInfo.Controls.Add(ppAccess);
userInfo.Controls.Add(ppNodes);
userInfo.Controls.Add(ppModules);
-
+
userInfo.HasMenu = true;
var save = userInfo.Menu.NewButton();
@@ -227,7 +216,7 @@ namespace umbraco.cms.presentation.user
sectionValidator.ControlToValidate = lapps.ID;
sectionValidator.ErrorMessage = ui.Text("errorHandling", "errorMandatoryWithoutTab", ui.Text("user", "modules", UmbracoUser), UmbracoUser);
sectionValidator.CssClass = "error";
- sectionValidator.Style.Add("color", "red");
+ sectionValidator.Style.Add("color", "red");
SetupForm();
SetupChannel();
@@ -414,7 +403,7 @@ namespace umbraco.cms.presentation.user
//now do the actual change
var changePassResult = _membershipHelper.ChangePassword(
- membershipUser.UserName, changePasswordModel, BackOfficeProvider);
+ membershipUser.UserName, changePasswordModel, BackOfficeProvider);
if (changePassResult.Success)
{
@@ -449,8 +438,8 @@ namespace umbraco.cms.presentation.user
throw new ProviderException("Could not find user in the membership provider with login name " + u.LoginName);
}
- var passwordChangerControl = (passwordChanger) passw.Controls[0];
- var passwordChangerValidator = (CustomValidator) passw.Controls[1].Controls[0].Controls[0];
+ var passwordChangerControl = (passwordChanger)passw.Controls[0];
+ var passwordChangerValidator = (CustomValidator)passw.Controls[1].Controls[0].Controls[0];
//perform the changing password logic
ChangePassword(passwordChangerControl, membershipUser, passwordChangerValidator);
@@ -463,7 +452,7 @@ namespace umbraco.cms.presentation.user
u.Name = uname.Text.Trim();
u.Language = userLanguage.SelectedValue;
u.UserType = UserType.GetUserType(int.Parse(userType.SelectedValue));
- u.Email = email.Text.Trim();
+ u.Email = email.Text.Trim();
u.LoginName = lname.Text;
u.Disabled = Disabled.Checked;
u.NoConsole = NoConsole.Checked;
@@ -477,9 +466,9 @@ namespace umbraco.cms.presentation.user
else
startNode = -1;
}
- u.StartNodeId = startNode;
-
-
+ u.StartNodeId = startNode;
+
+
int mstartNode;
if (int.TryParse(mediaPicker.Value, out mstartNode) == false)
{