Skip to content

Commit 4d6276a

Browse files
feat(auth): use browser language preference instead of IP-based language (#3517)
* feat(auth): use browser language preference instead of IP-based language - Add optional `language` parameter to SignUpDto - Pass browser language from frontend to createUser - Prefer browser language over IP-based country language - Remove country-specific language defaults (CH/LI/DE/AT/IT/FR) - Keep only currency defaults for CH/LI (CHF) This fixes the issue where Swiss users always got German regardless of their browser language setting. Language should be determined by user preference (browser), not by geographic location. * chore: cleanup --------- Co-authored-by: David May <david.leo.may@gmail.com>
1 parent 2489d4a commit 4d6276a

4 files changed

Lines changed: 17 additions & 3 deletions

File tree

src/config/config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ export class Configuration {
6666
language: 'EN',
6767

6868
specific: {
69-
CH: { language: 'DE', currency: 'CHF' },
69+
// CH has no language default (multilingual country)
70+
CH: { currency: 'CHF' },
7071
LI: { language: 'DE', currency: 'CHF' },
7172
DE: { language: 'DE' },
7273
AT: { language: 'DE' },

src/subdomains/generic/user/models/auth/auth.service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ export class AuthService {
173173
},
174174
dto.specialCode ?? dto.discountCode,
175175
dto.moderator,
176+
dto.language,
176177
);
177178

178179
// update ip Logs

src/subdomains/generic/user/models/auth/dto/auth-credentials.dto.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ export class OptionalSignUpDto {
105105
}
106106

107107
export class SignUpDto extends SignInDto {
108+
@ApiPropertyOptional({ description: 'Preferred language (e.g. EN, DE, FR, IT)' })
109+
@IsOptional()
110+
@IsString()
111+
language?: string;
112+
108113
@ApiPropertyOptional()
109114
@IsOptional()
110115
@IsString()

src/subdomains/generic/user/models/user/user.service.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,12 @@ export class UserService {
244244
return UserDtoMapper.mapProfile(userData);
245245
}
246246

247-
async createUser(data: Partial<User>, specialCode: string, moderator?: Moderator): Promise<User> {
247+
async createUser(
248+
data: Partial<User>,
249+
specialCode: string,
250+
moderator?: Moderator,
251+
preferredLanguage?: string,
252+
): Promise<User> {
248253
let user = this.userRepo.create({
249254
address: data.address,
250255
signature: data.signature,
@@ -267,7 +272,9 @@ export class UserService {
267272
user.role = data.role;
268273
user.primaryUser = data.primaryUser;
269274

270-
const language = await this.languageService.getLanguageByCountry(user.ipCountry);
275+
const language =
276+
(preferredLanguage && (await this.languageService.getLanguageBySymbol(preferredLanguage.toUpperCase()))) ??
277+
(await this.languageService.getLanguageByCountry(user.ipCountry));
271278
const currency = await this.fiatService.getFiatByCountry(user.ipCountry);
272279

273280
user.userData =

0 commit comments

Comments
 (0)