У меня есть веб-сайт с двумя разными языками. Могу ли я перенаправить на ту же страницу на другом языке/папке, если я нажму кнопку языковой ссылки? Пример. Если я нахожусь на странице регистрации, когда я нажимаю кнопку ссылки на другом языке, я хочу, чтобы меня переадресовали на ту же страницу на другом языке/в папке.
Основное звено языков находится на главной странице.
Это возможно?
Если я правильно понимаю, вы используете подпапку для управления своей культурой. Таким образом, у вас будет пример ~/en/Default.aspx
и ~/fr/Default.aspx
.
Если это так, вы используете этот фрагмент кода.
//For exemple: /en/Default.aspx
string currentURL = HttpContext.Current.Request.Url.AbsolutePath;
//Manage different part of the URL
string[] urlParts = currentURL.Split(new string[] {"/"},StringSplitOptions.RemoveEmptyEntries);
//Remove the old culture code
IEnumerable<string> invariantUrlParts = urlParts.Skip(1);
//Rebuild the URL
string newUrl = String.Format("~/{0}/{1}", "fr", String.Join("/", invariantUrlParts));
//Redirect to ~/fr/Default.aspx
Response.Redirect(newUrl);
РЕДАКТИРОВАТЬ
Если вы поклонник одного лайнера:
Response.Redirect(HttpContext.Current.Request.Url.AbsolutePath
.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries)
.Skip(1)
.Aggregate(String.Format("~/{0}", "fr"), (i, j) => i + "/" + j));
Представьте, что у вас есть выпадающий список со всеми языками, и после выбора вы хотите загрузить ту же страницу на выбранном языке...
и если вы знаете текущий язык (например, в переменной сеанса), который загружен, вы можете:
как выпадающее меню:
<select id="langSelector" onchange="changeCountry(this.value);">
<option value="en">English</option>
<option value="es">Spanish</option>
<option value="fr">French</option>
</select>
в javascript:
var currentLanguage = "en";
// for example in ASP.NET Webforms
// var currentLanguage = "<%= Session["currentLanguage"] %>";
function changeCountry(selectedLanguage) {
var preLang = '/' + currentLanguage + '/',
newLang = '/' + selectedLanguage + '/';
document.location = document.location.pathname.replace(preLangig, newLang);
}
объяснение:
в javascript document.location.pathname
покажет полный путь после протокола и имени домена, и если у вас есть простой /en/
вы можете заменить это с помощью /fr/
и снова загрузить остальные.
чтобы быть отказоустойчивым, вам нужно сделать replace
игнорируя случай, поэтому En
или eN
также могут быть переведены на fr
.
в этой причине вы будете использовать это:
function changeCountry(selectedLanguage) {
var newLang = '/' + selectedLanguage + '/';
document.location =
document.location.pathname.replace(
/\/<%= Session["currentLanguage"].ToString().ToLower() %>\//i,
newLang);
}
поэтому у вас будет:
.replace(/\/<%= Session["currentLanguage"].ToString().ToLower() %>\//i, newLang);