From 5831d798167251fe4325f83a60dd7a0f403bdc2f Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Tue, 7 Oct 2025 14:24:27 -0400 Subject: [PATCH 1/3] feat(i18n): Add support for User locale --- .changeset/calm-brooms-grab.md | 8 ++++++++ packages/backend/src/api/endpoints/UserApi.ts | 5 +++++ packages/backend/src/api/resources/JSON.ts | 1 + packages/backend/src/api/resources/User.ts | 6 ++++++ packages/clerk-js/src/core/resources/User.ts | 2 ++ packages/expo/src/cache/dummy-data/client-resource.ts | 1 + packages/types/src/json.ts | 1 + 7 files changed, 24 insertions(+) create mode 100644 .changeset/calm-brooms-grab.md diff --git a/.changeset/calm-brooms-grab.md b/.changeset/calm-brooms-grab.md new file mode 100644 index 00000000000..52b3b45b66c --- /dev/null +++ b/.changeset/calm-brooms-grab.md @@ -0,0 +1,8 @@ +--- +'@clerk/clerk-js': minor +'@clerk/backend': minor +'@clerk/types': minor +'@clerk/clerk-expo': minor +--- + +Added support for User `locale` diff --git a/packages/backend/src/api/endpoints/UserApi.ts b/packages/backend/src/api/endpoints/UserApi.ts index 4f8bbf7ef4b..06c8ae8e974 100644 --- a/packages/backend/src/api/endpoints/UserApi.ts +++ b/packages/backend/src/api/endpoints/UserApi.ts @@ -81,6 +81,8 @@ type CreateUserParams = { password?: string; firstName?: string; lastName?: string; + /** The locale of the user in BCP-47 format. */ + locale?: string; skipPasswordChecks?: boolean; skipPasswordRequirement?: boolean; skipLegalChecks?: boolean; @@ -149,6 +151,9 @@ type UpdateUserParams = { /** A custom timestamp denoting when the user accepted legal requirements, specified in RFC3339 format (e.g. 2012-10-20T07:15:20.902Z). */ legalAcceptedAt?: Date; + /** The locale of the user in BCP-47 format. */ + locale?: string; + /** If true, the user can delete themselves with the Frontend API. */ deleteSelfEnabled?: boolean; diff --git a/packages/backend/src/api/resources/JSON.ts b/packages/backend/src/api/resources/JSON.ts index cf70c1ff2b4..3008e033410 100644 --- a/packages/backend/src/api/resources/JSON.ts +++ b/packages/backend/src/api/resources/JSON.ts @@ -606,6 +606,7 @@ export interface UserJSON extends ClerkResourceJSON { create_organizations_limit: number | null; delete_self_enabled: boolean; legal_accepted_at: number | null; + locale: string | null; } export interface VerificationJSON extends ClerkResourceJSON { diff --git a/packages/backend/src/api/resources/User.ts b/packages/backend/src/api/resources/User.ts index 925d4ab29ed..1a5bda0ca98 100644 --- a/packages/backend/src/api/resources/User.ts +++ b/packages/backend/src/api/resources/User.ts @@ -144,6 +144,11 @@ export class User { * The unix timestamp of when the user accepted the legal requirements. `null` if [**Require express consent to legal documents**](https://clerk.com/docs/guides/secure/legal-compliance) is not enabled. */ readonly legalAcceptedAt: number | null, + + /** + * The locale of the user. + */ + readonly locale: string | null, ) {} static fromJSON(data: UserJSON): User { @@ -180,6 +185,7 @@ export class User { data.create_organizations_limit, data.delete_self_enabled, data.legal_accepted_at, + data.locale, ); res._raw = data; return res; diff --git a/packages/clerk-js/src/core/resources/User.ts b/packages/clerk-js/src/core/resources/User.ts index 04789175adc..72322cc0e46 100644 --- a/packages/clerk-js/src/core/resources/User.ts +++ b/packages/clerk-js/src/core/resources/User.ts @@ -94,6 +94,7 @@ export class User extends BaseResource implements UserResource { deleteSelfEnabled = false; lastSignInAt: Date | null = null; legalAcceptedAt: Date | null = null; + locale: string | null = null; updatedAt: Date | null = null; createdAt: Date | null = null; @@ -428,6 +429,7 @@ export class User extends BaseResource implements UserResource { profile_image_id: this.imageUrl, last_sign_in_at: this.lastSignInAt?.getTime() || null, legal_accepted_at: this.legalAcceptedAt?.getTime() || null, + locale: this.locale, updated_at: this.updatedAt?.getTime() || null, created_at: this.createdAt?.getTime() || null, }; diff --git a/packages/expo/src/cache/dummy-data/client-resource.ts b/packages/expo/src/cache/dummy-data/client-resource.ts index 83face01e08..ce0fb41a262 100644 --- a/packages/expo/src/cache/dummy-data/client-resource.ts +++ b/packages/expo/src/cache/dummy-data/client-resource.ts @@ -85,6 +85,7 @@ export const DUMMY_CLERK_CLIENT_RESOURCE = { abandon_at: null, web3_wallet: null, legal_accepted_at: null, + locale: null, }, sign_in: { object: 'sign_in', diff --git a/packages/types/src/json.ts b/packages/types/src/json.ts index 9ab16c1540c..69aae6af170 100644 --- a/packages/types/src/json.ts +++ b/packages/types/src/json.ts @@ -308,6 +308,7 @@ export interface UserJSON extends ClerkResourceJSON { create_organizations_limit: number | null; delete_self_enabled: boolean; legal_accepted_at: number | null; + locale: string | null; updated_at: number; created_at: number; } From 15964860ace41a0e736016dbbbc5b8cd654296ea Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Tue, 7 Oct 2025 14:28:48 -0400 Subject: [PATCH 2/3] chore: Remove unnecessary changes --- .changeset/calm-brooms-grab.md | 3 --- packages/clerk-js/src/core/resources/User.ts | 2 -- packages/expo/src/cache/dummy-data/client-resource.ts | 1 - packages/types/src/json.ts | 1 - 4 files changed, 7 deletions(-) diff --git a/.changeset/calm-brooms-grab.md b/.changeset/calm-brooms-grab.md index 52b3b45b66c..9986d6c01c8 100644 --- a/.changeset/calm-brooms-grab.md +++ b/.changeset/calm-brooms-grab.md @@ -1,8 +1,5 @@ --- -'@clerk/clerk-js': minor '@clerk/backend': minor -'@clerk/types': minor -'@clerk/clerk-expo': minor --- Added support for User `locale` diff --git a/packages/clerk-js/src/core/resources/User.ts b/packages/clerk-js/src/core/resources/User.ts index 72322cc0e46..04789175adc 100644 --- a/packages/clerk-js/src/core/resources/User.ts +++ b/packages/clerk-js/src/core/resources/User.ts @@ -94,7 +94,6 @@ export class User extends BaseResource implements UserResource { deleteSelfEnabled = false; lastSignInAt: Date | null = null; legalAcceptedAt: Date | null = null; - locale: string | null = null; updatedAt: Date | null = null; createdAt: Date | null = null; @@ -429,7 +428,6 @@ export class User extends BaseResource implements UserResource { profile_image_id: this.imageUrl, last_sign_in_at: this.lastSignInAt?.getTime() || null, legal_accepted_at: this.legalAcceptedAt?.getTime() || null, - locale: this.locale, updated_at: this.updatedAt?.getTime() || null, created_at: this.createdAt?.getTime() || null, }; diff --git a/packages/expo/src/cache/dummy-data/client-resource.ts b/packages/expo/src/cache/dummy-data/client-resource.ts index ce0fb41a262..83face01e08 100644 --- a/packages/expo/src/cache/dummy-data/client-resource.ts +++ b/packages/expo/src/cache/dummy-data/client-resource.ts @@ -85,7 +85,6 @@ export const DUMMY_CLERK_CLIENT_RESOURCE = { abandon_at: null, web3_wallet: null, legal_accepted_at: null, - locale: null, }, sign_in: { object: 'sign_in', diff --git a/packages/types/src/json.ts b/packages/types/src/json.ts index 69aae6af170..9ab16c1540c 100644 --- a/packages/types/src/json.ts +++ b/packages/types/src/json.ts @@ -308,7 +308,6 @@ export interface UserJSON extends ClerkResourceJSON { create_organizations_limit: number | null; delete_self_enabled: boolean; legal_accepted_at: number | null; - locale: string | null; updated_at: number; created_at: number; } From 1c91373a3b3d4e8ba59eeadd01a00e768c8c9575 Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Tue, 7 Oct 2025 14:34:45 -0400 Subject: [PATCH 3/3] chore: Add/update JSDoc --- packages/backend/src/api/resources/JSON.ts | 3 +++ packages/backend/src/api/resources/User.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/api/resources/JSON.ts b/packages/backend/src/api/resources/JSON.ts index 3008e033410..8e5ec664887 100644 --- a/packages/backend/src/api/resources/JSON.ts +++ b/packages/backend/src/api/resources/JSON.ts @@ -606,6 +606,9 @@ export interface UserJSON extends ClerkResourceJSON { create_organizations_limit: number | null; delete_self_enabled: boolean; legal_accepted_at: number | null; + /** + * The locale of the user in BCP-47 format. + */ locale: string | null; } diff --git a/packages/backend/src/api/resources/User.ts b/packages/backend/src/api/resources/User.ts index 1a5bda0ca98..df05ef53466 100644 --- a/packages/backend/src/api/resources/User.ts +++ b/packages/backend/src/api/resources/User.ts @@ -146,7 +146,7 @@ export class User { readonly legalAcceptedAt: number | null, /** - * The locale of the user. + * The locale of the user in BCP-47 format. */ readonly locale: string | null, ) {}