From 4e5ae5fcaba7dde0d65a87da3aeaf32d8bb1a401 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 19 Sep 2026 09:58:42 +0200 Subject: [PATCH] Localize default account name created during user registration --- apps/api/src/app/user/user.controller.ts | 2 +- apps/api/src/app/user/user.service.ts | 4 ++-- apps/api/src/helper/language.helper.spec.ts | 9 +++++++++ apps/api/src/helper/language.helper.ts | 20 ++++++++++++++------ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/apps/api/src/app/user/user.controller.ts b/apps/api/src/app/user/user.controller.ts index 00939c9b49..ae9e7d680b 100644 --- a/apps/api/src/app/user/user.controller.ts +++ b/apps/api/src/app/user/user.controller.ts @@ -161,7 +161,7 @@ export class UserController { const { accessToken, id, role } = await this.userService.createUser({ data: {}, - languageCode: data?.languageCode + languageCode: data.languageCode }); return { diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index d85060cb8d..dae4463d23 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -716,8 +716,8 @@ export class UserService { create: { currency: DEFAULT_CURRENCY, name: this.i18nService.getTranslation({ - languageCode: getSupportedLanguageCode(languageCode), - id: 'myAccount' + id: 'myAccount', + languageCode: getSupportedLanguageCode(languageCode) }) } }, diff --git a/apps/api/src/helper/language.helper.spec.ts b/apps/api/src/helper/language.helper.spec.ts index 0d7a39956d..f3159b98ac 100644 --- a/apps/api/src/helper/language.helper.spec.ts +++ b/apps/api/src/helper/language.helper.spec.ts @@ -24,8 +24,17 @@ describe('getSupportedLanguageCode', () => { expect(getSupportedLanguageCode('de')).toEqual('de'); }); + it('should ignore the region subtag', () => { + expect(getSupportedLanguageCode('de-CH')).toEqual('de'); + }); + + it('should ignore the case', () => { + expect(getSupportedLanguageCode('DE')).toEqual('de'); + }); + it('should use the default language code if the language is not supported', () => { expect(getSupportedLanguageCode()).toEqual(DEFAULT_LANGUAGE_CODE); + expect(getSupportedLanguageCode('')).toEqual(DEFAULT_LANGUAGE_CODE); expect(getSupportedLanguageCode('xx')).toEqual(DEFAULT_LANGUAGE_CODE); }); }); diff --git a/apps/api/src/helper/language.helper.ts b/apps/api/src/helper/language.helper.ts index 02942e14ff..29de5147f6 100644 --- a/apps/api/src/helper/language.helper.ts +++ b/apps/api/src/helper/language.helper.ts @@ -3,14 +3,22 @@ import { SUPPORTED_LANGUAGE_CODES } from '@ghostfolio/common/config'; -export function getLanguageCodeFromHeader(acceptLanguage?: string): string { - const languageCode = acceptLanguage?.split(',')[0].split('-')[0]; +type SupportedLanguageCode = (typeof SUPPORTED_LANGUAGE_CODES)[number]; - return getSupportedLanguageCode(languageCode); +export function getLanguageCodeFromHeader( + acceptLanguage?: string +): SupportedLanguageCode { + return getSupportedLanguageCode(acceptLanguage?.split(',')[0]); } -export function getSupportedLanguageCode(languageCode?: string): string { - return (SUPPORTED_LANGUAGE_CODES as readonly string[]).includes(languageCode) - ? languageCode +export function getSupportedLanguageCode( + languageCode?: string +): SupportedLanguageCode { + const languageCodeToUse = languageCode + ?.split('-')[0] + .toLowerCase() as SupportedLanguageCode; + + return SUPPORTED_LANGUAGE_CODES.includes(languageCodeToUse) + ? languageCodeToUse : DEFAULT_LANGUAGE_CODE; }