currently, in my application, default language is EN, Now I want to set it to FI by default. How could I do it? BTW, how can I sync language bettwen API port 43308 to Angular UI port 4200?
Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.
- ABP Framework version: v4.3
- UI type: Angular
- DB provider: EF Core
- Tiered (MVC) or Identity Server Separated (Angular): yes
- Exception message and stack trace:
- Steps to reproduce the issue:
18 Answer(s)
-
0
-
0
Helo,
I am actually working with Lan.
I changed as you said but it does not work, I changed it from host admin account.
When I run the application and go to login page (Angular) it is still english, once login, it remain english.
-
0
Is there anyone here to reply please? This is a big issue for us and after 1 week we do not have any answer or explanation...
To be sure that the issue is not from changes from our project I created a new project, the default language is English. I then logged as host admin and put default language to Spanish. I then closed the application, restarted the project and open a browser in Incognito mode but still have the language in Spanish. Do ABP look at computer language or anything? We need to move in production
-
0
hi christophe.baille
Sorry for the late. I will check it asap.
-
0
Thanks. I nee some explanation about this "default language", here is what I did test:
We have one solution in english and in Finnish, by default, whatever it is English or Finnish default, this happen:
- Operation system in english, browser in english: ABP is in english
- Operation system in Finnish, browser in english: ABP is in english
- Operation system in Finnish, browser in Finnish: ABP is in Finnish
So, if I understand, the ABP language is defined by: First, the browser language Second the operation system
I then create a new solution, "disable" the english language, and put Spanish by default.But whn I run the solution, my application is in english, and I can not change th language. On this case it should not take the default language from ABP which is Spanish?
First, I would like to understand on how th default language works. Second, I would like to know if there is any way to make a language by default, whatever is the OS or browser language.
Thanks for your help
-
1
hi
Abp will set the
DefaultRequestCulture
ofRequestLocalizationOptions
as yourdefault language
. Then the Localization middleware will handle localization.https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-5.0#localization-middleware-2
QueryStringRequestCultureProvider CookieRequestCultureProvider AcceptLanguageHeaderRequestCultureProvider
put Spanish by default.But whn I run the solution, my application is in english, and I can not change th language. On this case it should not take the default language from ABP which is Spanish?
Your browser request header may contains
en
. (accept-language: en,es;q=0.9,es;q=0.8
)So will still use
en
, unless no language is found inQueryString
,Cookie
,AcceptLanguage
, thedefault language
will be used.You can consider removing
AcceptLanguageHeaderRequestCultureProvider
. The language will be stored in cookies when the user selects a language.Configure<RequestLocalizationOptions>(options => { options.RequestCultureProviders.RemoveAll(x => x.GetType() == typeof(AcceptLanguageHeaderRequestCultureProvider)); });
hope this helps.: )
-
0
I am not sure to understand your explanation about the last line of code, I think the language is already stored on cookies. If I open the app, select the language I want then close the browser, then open again, it will remember it and not take language from the OS or browser setting, so I guess it takes it from the cookie already.
I just tried by adding lines of code you did mention in:
ConfigureServices method from MyProjectApplicationModule.cs
ConfigureLocalization method from MyProjectHttpApiHostModule.cs
ConfigureLocalization method from MyProjectHttpApiModule.cs
ConfigureServices method from MyProjectDomainModule.cs
I changed in all project, just in case. But I did not see any difference on anything about the language management.
What we need, if possible is:
- when user open the app on his browser, whatever is the language of OS or browser, the first time it will be in Finnish
- if the user change the language, then the next time he open again, it will be this language (not Finnish)
My colleague did previously and put something similar to your code suggestion in startup.cs, it was taking the default languge at opening, but then we were not able to change the language anymore.
Thanks for your help
-
0
hi
Can you try this? Please set your default language to
Finnish
,app.UseAbpRequestLocalization(x => { x.RequestCultureProviders.RemoveAll(p => p.GetType() == typeof(AcceptLanguageHeaderRequestCultureProvider)); });
You need to restart the application to take effect when you change the default language.
I will deal with this problem. https://github.com/abpframework/abp/issues/9158
-
0
It is what my colleague did before, similar code, he added this into startup.cs but it was not running well.
app.UseAbpRequestLocalization(options => { var acceptLanguageHeaderRequestCultureProvider = options.RequestCultureProviders .OfType<AcceptLanguageHeaderRequestCultureProvider>() .FirstOrDefault(); if (acceptLanguageHeaderRequestCultureProvider != null) { options.RequestCultureProviders.Remove(acceptLanguageHeaderRequestCultureProvider); } });
I tried adding lines you mentionned on into MyProjectHttpApiHostModule.cs, OnApplicationInitialization method but it behave not correctly, the language selected is fine now (on the menu), but the text is in spanish and can not be changed:
When I open the app from incognito, it will then open in Spanish (Default Language). If I open the app in another browser with English previously saved in cache/cookies for this application, it will open with the English language selected, but the text will be is Spanish. And in both cases, when I try to change the language from the menu, it will remain in Spanish...
-
0
Can I check it remotely?
https://zoom.us/j/98236731173?pwd=NGcvckhBUExCajhDRmg0UkkrSmxCdz09
-
0
hi
I will talk about this issue with my angular colleague in the afternoon.
Angular is using
accept-language
instead of cookies.You can try the above code in mvc, it should works as your expected.
-
0
Yes, I saw while you connected that mvc looks ok. I wait some news from you regarding Angular then, thank for your support
-
0
Hi,
You can add an interceptor to get localizations in the language you specify. Please follow the steps below to achieve this:
- Create a file called
accept-language.interceptor.ts
- Change its content with the following:
import { SessionStateService } from '@abp/ng.core'; import { HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from '@angular/common/http'; import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class AcceptLanguageInterceptor implements HttpInterceptor { constructor(private sessionState: SessionStateService) {} intercept(request: HttpRequest<any>, next: HttpHandler) { return next.handle( request.clone({ setHeaders: this.getAdditionalHeaders(request.headers), }), ); } getAdditionalHeaders(existingHeaders?: HttpHeaders) { const headers = {} as any; // When sessionState.getLanguage() returns null at first initialization. // So you can set your default language as shown below: const lang = this.sessionState.getLanguage() || 'es' // put your default language here. if (!existingHeaders?.has('Accept-Language')) { headers['Accept-Language'] = lang; } return headers; } }
- Add the provider below to the
AppModule
:
providers: [ //... { provide: HTTP_INTERCEPTORS, useExisting: AcceptLanguageInterceptor, multi: true, }, ],
I hope this help you.
- Create a file called
-
0
by adding this on angular, it is working now.
However, when I go to https://localhost:44367/Account/Login it remain in english, then after login, I go back to Angular in Spanish. If I am right, it is related to this ticket: https://support.abp.io/QA/Questions/1324/How-to-change-language-of-login-page-when-user-changes-language-of-application
Thanks
-
0
If I am right, it is related to this ticket
Yes, you can follow the other ticket for the progress. I am closing this one. If you encounter any problem, feel free to open the ticket.
Thanks.
-
0
I still have the issue that if I go directly to this page https://localhost:44367/Account/Login, I will not have the language I want. I will see if it is part of our requirements. By the way, to make Angular working, I added the changes on Angular code but had to remove all the code suggested in .NET.
-
0
hi christophe
Since Angular can customize
Accept-Language
, you don't need to removeAcceptLanguageHeaderRequestCultureProvider
in backend.https://github.com/abpframework/abp/pull/9162
-
1
Hello maliming,
You are right, I removed all changes mentionned for .net project before and just put changes on the angular part.
So now when I run the angular page, I got the Finnish language and can change perfectly.