I am working on a small web application (Razor Pages) and I have added localization to it. The problem I have now is the following:
When application loads first time or when user presses home button (<a href="/"</a>)
, the url in the browser is this:
https://localhost/
and when I press a link (<a asp-page="/login"></a>)
it navigates me to https://localhost/login
instead of https://localhost/{currentCulture}/login
and for this reason, I want to it to be something like this:
https://localhost/{currentCulture}/
For example, for english --> https://localhost/en/
I have already set default current culture and it is applied when application starts but it is not written in the url.
I have followed this tutorial to add localization to my app : http://www.ziyad.info/en/articles/10-Developing_Multicultural_Web_Application
Update:
When User presses home button I did this:<a href="/@CultureInfo.CurrentCulture.Name"></a>
and it works.
I do not know how good solution it is, but you can solve this problem so:
Create a class and implement 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}");
}
}
}
In your app request.Path == "/"
will be true only when app loads first time (when you press home, request.path is "/en" {for English}). So, default culture name will be added to the url. You will not see it in url when app loads, but when you press (<a asp-page="/login"></a>)
, you will see that you are redirected to https://localhost/en/login
.
You have to register this rule in startup.cs
in Configure
method:
var options = new RewriteOptions().Add(new FirstLoadRewriteRule());
app.UseRewriter(options);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With