Skip to content

Commit 507eecf

Browse files
committed
resolved #139: change user's language setting when language changes
1 parent 94f0642 commit 507eecf

File tree

6 files changed

+137
-12
lines changed

6 files changed

+137
-12
lines changed
Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { Component, OnInit, Injector, ViewEncapsulation } from '@angular/core';
1+
import { Component, OnInit, Injector, ViewEncapsulation } from '@angular/core';
22
import { AppComponentBase } from '@shared/app-component-base';
3+
import { UserServiceProxy, ChangeUserLanguageDto } from '@shared/service-proxies/service-proxies';
34

45
import * as _ from 'lodash';
56

@@ -14,7 +15,8 @@ export class TopBarLanguageSwitchComponent extends AppComponentBase implements O
1415
currentLanguage: abp.localization.ILanguageInfo;
1516

1617
constructor(
17-
injector: Injector
18+
injector: Injector,
19+
private _userService: UserServiceProxy
1820
) {
1921
super(injector);
2022
}
@@ -25,13 +27,18 @@ export class TopBarLanguageSwitchComponent extends AppComponentBase implements O
2527
}
2628

2729
changeLanguage(languageName: string): void {
28-
abp.utils.setCookieValue(
29-
"Abp.Localization.CultureName",
30-
languageName,
31-
new Date(new Date().getTime() + 5 * 365 * 86400000), //5 year
32-
abp.appPath
33-
);
30+
const input = new ChangeUserLanguageDto();
31+
input.languageName = languageName;
3432

35-
location.reload();
33+
this._userService.changeLanguage(input).subscribe(() => {
34+
abp.utils.setCookieValue(
35+
'Abp.Localization.CultureName',
36+
languageName,
37+
new Date(new Date().getTime() + 5 * 365 * 86400000), //5 year
38+
abp.appPath
39+
);
40+
41+
window.location.reload();
42+
});
3643
}
37-
}
44+
}

angular/src/shared/service-proxies/service-proxies.ts

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* tslint:disable */
22
//----------------------
33
// <auto-generated>
4-
// Generated using the NSwag toolchain v11.9.0.0 (NJsonSchema v9.7.1.0 (Newtonsoft.Json v9.0.0.0)) (http://NSwag.org)
4+
// Generated using the NSwag toolchain v11.6.1.0 (NJsonSchema v9.5.0.0) (http://NSwag.org)
55
// </auto-generated>
66
//----------------------
77
// ReSharper disable InconsistentNaming
@@ -1246,6 +1246,57 @@ export class UserServiceProxy {
12461246
return Observable.of<ListResultDtoOfRoleDto>(<any>null);
12471247
}
12481248

1249+
/**
1250+
* @return Success
1251+
*/
1252+
changeLanguage(input: ChangeUserLanguageDto): Observable<void> {
1253+
let url_ = this.baseUrl + "/api/services/app/User/ChangeLanguage";
1254+
url_ = url_.replace(/[?&]$/, "");
1255+
1256+
const content_ = JSON.stringify(input);
1257+
1258+
let options_ = {
1259+
body: content_,
1260+
method: "post",
1261+
headers: new Headers({
1262+
"Content-Type": "application/json",
1263+
})
1264+
};
1265+
1266+
return this.http.request(url_, options_).flatMap((response_) => {
1267+
return this.processChangeLanguage(response_);
1268+
}).catch((response_: any) => {
1269+
if (response_ instanceof Response) {
1270+
try {
1271+
return this.processChangeLanguage(response_);
1272+
} catch (e) {
1273+
return <Observable<void>><any>Observable.throw(e);
1274+
}
1275+
} else
1276+
return <Observable<void>><any>Observable.throw(response_);
1277+
});
1278+
}
1279+
1280+
protected processChangeLanguage(response: Response): Observable<void> {
1281+
const status = response.status;
1282+
1283+
let _headers: any = response.headers ? response.headers.toJSON() : {};
1284+
if (status === 200) {
1285+
const _responseText = response.text();
1286+
return Observable.of<void>(<any>null);
1287+
} else if (status === 401) {
1288+
const _responseText = response.text();
1289+
return throwException("A server error occurred.", status, _responseText, _headers);
1290+
} else if (status === 403) {
1291+
const _responseText = response.text();
1292+
return throwException("A server error occurred.", status, _responseText, _headers);
1293+
} else if (status !== 200 && status !== 204) {
1294+
const _responseText = response.text();
1295+
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
1296+
}
1297+
return Observable.of<void>(<any>null);
1298+
}
1299+
12491300
/**
12501301
* @return Success
12511302
*/
@@ -2743,6 +2794,48 @@ export interface IListResultDtoOfRoleDto {
27432794
items: RoleDto[];
27442795
}
27452796

2797+
export class ChangeUserLanguageDto implements IChangeUserLanguageDto {
2798+
languageName: string;
2799+
2800+
constructor(data?: IChangeUserLanguageDto) {
2801+
if (data) {
2802+
for (var property in data) {
2803+
if (data.hasOwnProperty(property))
2804+
(<any>this)[property] = (<any>data)[property];
2805+
}
2806+
}
2807+
}
2808+
2809+
init(data?: any) {
2810+
if (data) {
2811+
this.languageName = data["languageName"];
2812+
}
2813+
}
2814+
2815+
static fromJS(data: any): ChangeUserLanguageDto {
2816+
let result = new ChangeUserLanguageDto();
2817+
result.init(data);
2818+
return result;
2819+
}
2820+
2821+
toJSON(data?: any) {
2822+
data = typeof data === 'object' ? data : {};
2823+
data["languageName"] = this.languageName;
2824+
return data;
2825+
}
2826+
2827+
clone() {
2828+
const json = this.toJSON();
2829+
let result = new ChangeUserLanguageDto();
2830+
result.init(json);
2831+
return result;
2832+
}
2833+
}
2834+
2835+
export interface IChangeUserLanguageDto {
2836+
languageName: string;
2837+
}
2838+
27462839
export class PagedResultDtoOfUserDto implements IPagedResultDtoOfUserDto {
27472840
totalCount: number;
27482841
items: UserDto[];
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace AbpCompanyName.AbpProjectName.Users.Dto
4+
{
5+
public class ChangeUserLanguageDto
6+
{
7+
[Required]
8+
public string LanguageName { get; set; }
9+
}
10+
}

aspnet-core/src/AbpCompanyName.AbpProjectName.Application/Users/IUserAppService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,7 @@ namespace AbpCompanyName.AbpProjectName.Users
99
public interface IUserAppService : IAsyncCrudAppService<UserDto, long, PagedResultRequestDto, CreateUserDto, UserDto>
1010
{
1111
Task<ListResultDto<RoleDto>> GetRoles();
12+
13+
Task ChangeLanguage(ChangeUserLanguageDto input);
1214
}
1315
}

aspnet-core/src/AbpCompanyName.AbpProjectName.Application/Users/UserAppService.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
using Abp.Authorization;
99
using Abp.Domain.Repositories;
1010
using Abp.IdentityFramework;
11+
using Abp.Localization;
12+
using Abp.Runtime.Session;
1113
using AbpCompanyName.AbpProjectName.Authorization;
1214
using AbpCompanyName.AbpProjectName.Authorization.Users;
1315
using AbpCompanyName.AbpProjectName.Authorization.Roles;
@@ -90,6 +92,15 @@ public async Task<ListResultDto<RoleDto>> GetRoles()
9092
return new ListResultDto<RoleDto>(ObjectMapper.Map<List<RoleDto>>(roles));
9193
}
9294

95+
public async Task ChangeLanguage(ChangeUserLanguageDto input)
96+
{
97+
await SettingManager.ChangeSettingForUserAsync(
98+
AbpSession.ToUserIdentifier(),
99+
LocalizationSettingNames.DefaultLanguage,
100+
input.LanguageName
101+
);
102+
}
103+
93104
protected override User MapToEntity(CreateUserDto createInput)
94105
{
95106
var user = ObjectMapper.Map<User>(createInput);

aspnet-core/src/AbpCompanyName.AbpProjectName.Web.Host/Startup/Startup.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
9292

9393
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
9494
{
95-
app.UseAbp(); // Initializes ABP framework.
95+
app.UseAbp(options => { options.UseAbpRequestLocalization = false; }); // Initializes ABP framework.
9696

9797
app.UseCors(_defaultCorsPolicyName); // Enable CORS!
9898

@@ -101,6 +101,8 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
101101
app.UseAuthentication();
102102
app.UseJwtTokenMiddleware();
103103

104+
app.UseAbpRequestLocalization();
105+
104106
#if FEATURE_SIGNALR
105107
// Integrate to OWIN
106108
app.UseAppBuilder(ConfigureOwinServices);

0 commit comments

Comments
 (0)