Установить текущую культуру в URL при запуске приложения или перейти на домашнюю страницу - PullRequest
0 голосов
/ 11 января 2019

Я работаю над небольшим веб-приложением (Razor Pages) и добавил к нему локализацию. У меня сейчас проблема в следующем:

Когда приложение загружается в первый раз или когда пользователь нажимает кнопку возврата домой (<a href="/"</a>), URL-адрес в браузере выглядит так:

https://localhost/

и когда я нажимаю на ссылку (<a asp-page="/login"></a>), она переводит меня на https://localhost/login вместо https://localhost/{currentCulture}/login

и по этой причине я хочу, чтобы это было примерно так:

https://localhost/{currentCulture}/

Например, для английского языка -> https://localhost/en/

Я уже установил текущую культуру по умолчанию, и она применяется при запуске приложения, но не записывается в URL.

Я следовал этому руководству, чтобы добавить локализацию в свое приложение: http://www.ziyad.info/en/articles/10-Developing_Multicultural_Web_Application

Обновление:

Когда пользователь нажимает кнопку «Домой», я делал это: <a href="/@CultureInfo.CurrentCulture.Name"></a>, и оно работает.

1 Ответ

0 голосов
/ 12 января 2019

Я не знаю, насколько это хорошее решение, но вы можете решить эту проблему так:

Создать класс и реализовать Microsoft.AspNetCore.Rewrite.IRule:

public class FirstLoadRewriteRule : IRule
{
    public void ApplyRule(RewriteContext context)
    {
        var culture = CultureInfo.CurrentCulture;
        var request = context.HttpContext.Request;
        if(request.Path == "/")  
        {
            request.Path = new Microsoft.AspNetCore.Http.PathString($"/{culture.Name}");
        }
    }
}

В вашем приложении request.Path == "/" будет иметь значение true, только когда приложение загружается в первый раз (когда вы нажимаете home, request.path имеет значение "/ en" {для английского языка}). Таким образом, имя культуры по умолчанию будет добавлено в URL. Вы не увидите его в URL при загрузке приложения, но когда вы нажмете (<a asp-page="/login"></a>), вы увидите, что вы перенаправлены на https://localhost/en/login.

Вы должны зарегистрировать это правило в startup.cs в Configure методе:

var options = new RewriteOptions().Add(new FirstLoadRewriteRule());
app.UseRewriter(options);
...