Last active
September 12, 2017 10:02
-
-
Save stefanolsen/5cb755e7f1044d14fc82e33b40771a64 to your computer and use it in GitHub Desktop.
Code listings for blog post about generically ensuring the right EPiServer content language for AJAX requests. Read about it here: https://stefanolsen.com/posts/ensuring-the-right-ajax-content-language-using-a-filter-attribute/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="@Model.CurrentPage.LanguageBranch"> | |
@* Rest of the layout file goes here. *@ | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function ajaxGet(url, data, onComplete) { | |
// Get the language code from the root HTML element. | |
var language = document.documentElement.lang; | |
var request = new XMLHttpRequest(); | |
request.onreadystatechange = function() { | |
if (request.readyState === XMLHttpRequest.DONE) { | |
if (request.status === 200) { | |
onComplete(request.responseText); | |
} | |
} | |
}; | |
// Override the Accept-Language header and send the request | |
request.open('GET', url); | |
request.setRequestHeader("Accept-Language", language); | |
request.send(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class EnsureAjaxLanguageMvcAttribute : ActionFilterAttribute | |
{ | |
private readonly Injected<Settings> _settings; | |
private readonly Injected<IUpdateCurrentLanguage> _updateCurrentLanguage; | |
public override void OnActionExecuting(ActionExecutingContext filterContext) | |
{ | |
if (_settings.Service.PageUseBrowserLanguagePreferences) | |
{ | |
// If the PageUseBrowserLanguagePreferences setting is true, this is already handled everywhere. | |
return; | |
} | |
if (filterContext?.RequestContext?.HttpContext.Request == null) | |
{ | |
return; | |
} | |
HttpRequestBase httpRequest = filterContext.RequestContext.HttpContext.Request; | |
if (!httpRequest.IsAjaxRequest()) | |
{ | |
return; | |
} | |
string[] acceptedLanguages = httpRequest.UserLanguages; | |
if (acceptedLanguages == null || acceptedLanguages.Length == 0) | |
{ | |
return; | |
} | |
var languagePreferenceList = new LanguagePreferenceList(); | |
languagePreferenceList.ConditionalAddRange(acceptedLanguages); | |
var culture = ContentLanguage.Instance.DetermineCulture(languagePreferenceList); | |
_updateCurrentLanguage.Service.UpdateLanguage(culture.Name); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class EnsureAjaxLanguageWebApiAttribute : ActionFilterAttribute | |
{ | |
private readonly Injected<Settings> _settings; | |
private readonly Injected<IUpdateCurrentLanguage> _updateCurrentLanguage; | |
public override void OnActionExecuting(HttpActionContext actionContext) | |
{ | |
if (_settings.Service.PageUseBrowserLanguagePreferences) | |
{ | |
// If the PageUseBrowserLanguagePreferences setting is true, this is already handled everywhere. | |
return; | |
} | |
var acceptedLanguages = actionContext.Request.Headers.AcceptLanguage; | |
if (acceptedLanguages.Count == 0) | |
{ | |
return; | |
} | |
var languagePreferenceList = new LanguagePreferenceList(); | |
languagePreferenceList.ConditionalAddRange(acceptedLanguages.Select(lang => lang.Value)); | |
var culture = ContentLanguage.Instance.DetermineCulture(languagePreferenceList); | |
_updateCurrentLanguage.Service.UpdateLanguage(culture.Name); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment