mirror of
https://github.com/better-auth/better-auth.git
synced 2026-05-25 00:22:43 -05:00
Merge pull request #1 from sovetski/copilot/add-default-translations-i18n
feat(i18n): add built-in translations for 22 languages
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Better Auth i18n Plugin
|
||||
|
||||
Internationalization plugin for [Better Auth](https://www.better-auth.com) — translate error messages and UI strings.
|
||||
Internationalization plugin for [Better Auth](https://www.better-auth.com) — translate error messages based on the detected locale.
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -8,6 +8,109 @@ Internationalization plugin for [Better Auth](https://www.better-auth.com) — t
|
||||
npm install @better-auth/i18n
|
||||
```
|
||||
|
||||
## Built-in translations
|
||||
|
||||
The package ships with ready-to-use translations for 22 languages:
|
||||
|
||||
| Code | Language |
|
||||
|------|-----------|
|
||||
| `ar` | Arabic |
|
||||
| `bn` | Bengali |
|
||||
| `de` | German |
|
||||
| `en` | English |
|
||||
| `es` | Spanish |
|
||||
| `fa` | Persian (Farsi) |
|
||||
| `fr` | French |
|
||||
| `hi` | Hindi |
|
||||
| `id` | Indonesian |
|
||||
| `it` | Italian |
|
||||
| `ja` | Japanese |
|
||||
| `ko` | Korean |
|
||||
| `nl` | Dutch |
|
||||
| `pl` | Polish |
|
||||
| `pt` | Portuguese |
|
||||
| `ru` | Russian |
|
||||
| `sv` | Swedish |
|
||||
| `th` | Thai |
|
||||
| `tr` | Turkish |
|
||||
| `uk` | Ukrainian |
|
||||
| `vi` | Vietnamese |
|
||||
| `zh` | Chinese (Simplified) |
|
||||
|
||||
### Use all built-in locales
|
||||
|
||||
```ts
|
||||
import { betterAuth } from "better-auth";
|
||||
import { i18n, locales } from "@better-auth/i18n";
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
i18n({ translations: locales }),
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
### Use a subset of locales
|
||||
|
||||
```ts
|
||||
import { i18n, locales } from "@better-auth/i18n";
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
i18n({
|
||||
translations: {
|
||||
en: locales.en,
|
||||
fr: locales.fr,
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
### Override specific messages
|
||||
|
||||
```ts
|
||||
import { i18n, locales } from "@better-auth/i18n";
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
i18n({
|
||||
translations: {
|
||||
...locales,
|
||||
fr: {
|
||||
...locales.fr,
|
||||
USER_NOT_FOUND: "Membre introuvable",
|
||||
},
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
### Add a custom locale
|
||||
|
||||
```ts
|
||||
import { i18n, locales } from "@better-auth/i18n";
|
||||
import type { TranslationDictionary } from "@better-auth/i18n";
|
||||
|
||||
const myLocale: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "...",
|
||||
INVALID_EMAIL_OR_PASSWORD: "...",
|
||||
// ... other error codes
|
||||
};
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
i18n({
|
||||
translations: {
|
||||
...locales,
|
||||
xx: myLocale,
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
For full documentation, visit [better-auth.com/docs/plugins/i18n](https://www.better-auth.com/docs/plugins/i18n).
|
||||
|
||||
@@ -46,6 +46,11 @@
|
||||
"dev-source": "./src/client.ts",
|
||||
"types": "./dist/client.d.mts",
|
||||
"default": "./dist/client.mjs"
|
||||
},
|
||||
"./locales": {
|
||||
"dev-source": "./src/locales/index.ts",
|
||||
"types": "./dist/locales/index.d.mts",
|
||||
"default": "./dist/locales/index.mjs"
|
||||
}
|
||||
},
|
||||
"typesVersions": {
|
||||
@@ -55,6 +60,9 @@
|
||||
],
|
||||
"client": [
|
||||
"./dist/client.d.mts"
|
||||
],
|
||||
"locales": [
|
||||
"./dist/locales/index.d.mts"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { getTestInstance } from "better-auth/test";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { i18n } from ".";
|
||||
import * as locales from "./locales";
|
||||
|
||||
const translations = {
|
||||
en: {
|
||||
@@ -374,4 +375,99 @@ describe("i18n plugin", async () => {
|
||||
}).toThrow("i18n plugin: translations object is empty");
|
||||
});
|
||||
});
|
||||
|
||||
describe("built-in locales", () => {
|
||||
it("should export all expected built-in locales", () => {
|
||||
const expectedLocales = [
|
||||
"ar",
|
||||
"bn",
|
||||
"de",
|
||||
"en",
|
||||
"es",
|
||||
"fa",
|
||||
"fr",
|
||||
"hi",
|
||||
"id",
|
||||
"it",
|
||||
"ja",
|
||||
"ko",
|
||||
"nl",
|
||||
"pl",
|
||||
"pt",
|
||||
"ru",
|
||||
"sv",
|
||||
"th",
|
||||
"tr",
|
||||
"uk",
|
||||
"vi",
|
||||
"zh",
|
||||
];
|
||||
|
||||
for (const locale of expectedLocales) {
|
||||
expect(locales).toHaveProperty(locale);
|
||||
expect(
|
||||
typeof (locales as Record<string, unknown>)[locale],
|
||||
).toBe("object");
|
||||
}
|
||||
});
|
||||
|
||||
it("should translate errors using built-in locales", async () => {
|
||||
const { auth: authWithBuiltInLocales } = await getTestInstance({
|
||||
plugins: [
|
||||
i18n({
|
||||
translations: locales,
|
||||
defaultLocale: "en",
|
||||
detection: ["header"],
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
const response = await authWithBuiltInLocales.api.signInEmail({
|
||||
body: {
|
||||
email: "nonexistent@example.com",
|
||||
password: "wrongpassword",
|
||||
},
|
||||
headers: {
|
||||
"Accept-Language": "fr",
|
||||
},
|
||||
asResponse: true,
|
||||
});
|
||||
|
||||
const body = await response.json();
|
||||
expect(body.code).toBe("INVALID_EMAIL_OR_PASSWORD");
|
||||
expect(body.message).toBe(locales.fr.INVALID_EMAIL_OR_PASSWORD);
|
||||
});
|
||||
|
||||
it("should contain common error codes in every built-in locale", () => {
|
||||
const requiredKeys = [
|
||||
"USER_NOT_FOUND",
|
||||
"INVALID_PASSWORD",
|
||||
"INVALID_EMAIL",
|
||||
"INVALID_EMAIL_OR_PASSWORD",
|
||||
"EMAIL_NOT_VERIFIED",
|
||||
"PASSWORD_TOO_SHORT",
|
||||
"PASSWORD_TOO_LONG",
|
||||
"USER_ALREADY_EXISTS",
|
||||
"SESSION_EXPIRED",
|
||||
"ACCOUNT_NOT_FOUND",
|
||||
];
|
||||
|
||||
for (const [locale, dict] of Object.entries(locales)) {
|
||||
for (const key of requiredKeys) {
|
||||
expect(
|
||||
dict,
|
||||
`Locale "${locale}" is missing key "${key}"`,
|
||||
).toHaveProperty(key);
|
||||
expect(
|
||||
typeof (dict as Record<string, unknown>)[key],
|
||||
`Locale "${locale}" key "${key}" must be a non-empty string`,
|
||||
).toBe("string");
|
||||
expect(
|
||||
(dict as Record<string, string>)[key].length,
|
||||
`Locale "${locale}" key "${key}" must not be empty`,
|
||||
).toBeGreaterThan(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -13,6 +13,8 @@ export type {
|
||||
TranslationDictionary,
|
||||
} from "./types";
|
||||
|
||||
export * as locales from "./locales";
|
||||
|
||||
declare module "@better-auth/core" {
|
||||
interface BetterAuthPluginRegistry<AuthOptions, Options> {
|
||||
i18n: {
|
||||
|
||||
43
packages/i18n/src/locales/ar.ts
Normal file
43
packages/i18n/src/locales/ar.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Arabic translations
|
||||
*/
|
||||
export const ar: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "المستخدم غير موجود",
|
||||
FAILED_TO_CREATE_USER: "فشل في إنشاء المستخدم",
|
||||
FAILED_TO_CREATE_SESSION: "فشل في إنشاء الجلسة",
|
||||
FAILED_TO_UPDATE_USER: "فشل في تحديث المستخدم",
|
||||
FAILED_TO_GET_SESSION: "فشل في الحصول على الجلسة",
|
||||
INVALID_PASSWORD: "كلمة المرور غير صالحة",
|
||||
INVALID_EMAIL: "البريد الإلكتروني غير صالح",
|
||||
INVALID_EMAIL_OR_PASSWORD: "البريد الإلكتروني أو كلمة المرور غير صالحة",
|
||||
INVALID_USER: "مستخدم غير صالح",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "الحساب الاجتماعي مرتبط بالفعل",
|
||||
PROVIDER_NOT_FOUND: "مزود الخدمة غير موجود",
|
||||
INVALID_TOKEN: "الرمز المميز غير صالح",
|
||||
TOKEN_EXPIRED: "انتهت صلاحية الرمز المميز",
|
||||
FAILED_TO_GET_USER_INFO: "فشل في الحصول على معلومات المستخدم",
|
||||
USER_EMAIL_NOT_FOUND: "بريد المستخدم الإلكتروني غير موجود",
|
||||
EMAIL_NOT_VERIFIED: "البريد الإلكتروني غير مُحقق",
|
||||
PASSWORD_TOO_SHORT: "كلمة المرور قصيرة جداً",
|
||||
PASSWORD_TOO_LONG: "كلمة المرور طويلة جداً",
|
||||
USER_ALREADY_EXISTS: "المستخدم موجود بالفعل",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"المستخدم موجود بالفعل. استخدم بريداً إلكترونياً آخر.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "لا يمكن تحديث البريد الإلكتروني",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "حساب بيانات الاعتماد غير موجود",
|
||||
SESSION_EXPIRED: "انتهت الجلسة. أعد المصادقة لتنفيذ هذا الإجراء.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "لا يمكنك إلغاء ربط حسابك الأخير",
|
||||
ACCOUNT_NOT_FOUND: "الحساب غير موجود",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"المستخدم لديه كلمة مرور بالفعل. قدمها لحذف الحساب.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "بريد التحقق غير مفعّل",
|
||||
EMAIL_ALREADY_VERIFIED: "البريد الإلكتروني مُحقق بالفعل",
|
||||
EMAIL_MISMATCH: "البريد الإلكتروني غير متطابق",
|
||||
SESSION_NOT_FRESH: "الجلسة ليست حديثة",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "الحساب المرتبط موجود بالفعل",
|
||||
VALIDATION_ERROR: "خطأ في التحقق",
|
||||
MISSING_FIELD: "هذا الحقل مطلوب",
|
||||
PASSWORD_ALREADY_SET: "المستخدم لديه كلمة مرور محددة بالفعل",
|
||||
};
|
||||
45
packages/i18n/src/locales/bn.ts
Normal file
45
packages/i18n/src/locales/bn.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Bengali translations
|
||||
*/
|
||||
export const bn: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "ব্যবহারকারী পাওয়া যায়নি",
|
||||
FAILED_TO_CREATE_USER: "ব্যবহারকারী তৈরি করতে ব্যর্থ",
|
||||
FAILED_TO_CREATE_SESSION: "সেশন তৈরি করতে ব্যর্থ",
|
||||
FAILED_TO_UPDATE_USER: "ব্যবহারকারী আপডেট করতে ব্যর্থ",
|
||||
FAILED_TO_GET_SESSION: "সেশন পেতে ব্যর্থ",
|
||||
INVALID_PASSWORD: "অবৈধ পাসওয়ার্ড",
|
||||
INVALID_EMAIL: "অবৈধ ইমেইল ঠিকানা",
|
||||
INVALID_EMAIL_OR_PASSWORD: "অবৈধ ইমেইল বা পাসওয়ার্ড",
|
||||
INVALID_USER: "অবৈধ ব্যবহারকারী",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "সোশ্যাল অ্যাকাউন্ট ইতিমধ্যে লিঙ্ক করা আছে",
|
||||
PROVIDER_NOT_FOUND: "প্রদানকারী পাওয়া যায়নি",
|
||||
INVALID_TOKEN: "অবৈধ টোকেন",
|
||||
TOKEN_EXPIRED: "টোকেনের মেয়াদ শেষ",
|
||||
FAILED_TO_GET_USER_INFO: "ব্যবহারকারীর তথ্য পেতে ব্যর্থ",
|
||||
USER_EMAIL_NOT_FOUND: "ব্যবহারকারীর ইমেইল পাওয়া যায়নি",
|
||||
EMAIL_NOT_VERIFIED: "ইমেইল যাচাই করা হয়নি",
|
||||
PASSWORD_TOO_SHORT: "পাসওয়ার্ড অনেক ছোট",
|
||||
PASSWORD_TOO_LONG: "পাসওয়ার্ড অনেক বড়",
|
||||
USER_ALREADY_EXISTS: "ব্যবহারকারী ইতিমধ্যে বিদ্যমান",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"ব্যবহারকারী ইতিমধ্যে বিদ্যমান। অন্য ইমেইল ব্যবহার করুন।",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "ইমেইল আপডেট করা যাবে না",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "শংসাপত্র অ্যাকাউন্ট পাওয়া যায়নি",
|
||||
SESSION_EXPIRED:
|
||||
"সেশন শেষ হয়ে গেছে। এই কাজটি সম্পাদন করতে পুনরায় প্রমাণীকরণ করুন।",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"আপনি আপনার শেষ অ্যাকাউন্টের লিঙ্ক সরাতে পারবেন না",
|
||||
ACCOUNT_NOT_FOUND: "অ্যাকাউন্ট পাওয়া যায়নি",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"ব্যবহারকারীর ইতিমধ্যে একটি পাসওয়ার্ড আছে। অ্যাকাউন্ট মুছতে সেটি দিন।",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "যাচাইকরণ ইমেইল সক্রিয় নেই",
|
||||
EMAIL_ALREADY_VERIFIED: "ইমেইল ইতিমধ্যে যাচাই করা হয়েছে",
|
||||
EMAIL_MISMATCH: "ইমেইল মেলে না",
|
||||
SESSION_NOT_FRESH: "সেশন সতেজ নয়",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "লিঙ্ক করা অ্যাকাউন্ট ইতিমধ্যে বিদ্যমান",
|
||||
VALIDATION_ERROR: "যাচাইকরণ ত্রুটি",
|
||||
MISSING_FIELD: "এই ক্ষেত্রটি আবশ্যক",
|
||||
PASSWORD_ALREADY_SET: "ব্যবহারকারীর পাসওয়ার্ড ইতিমধ্যে সেট করা আছে",
|
||||
};
|
||||
46
packages/i18n/src/locales/de.ts
Normal file
46
packages/i18n/src/locales/de.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* German translations
|
||||
*/
|
||||
export const de: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Benutzer nicht gefunden",
|
||||
FAILED_TO_CREATE_USER: "Benutzer konnte nicht erstellt werden",
|
||||
FAILED_TO_CREATE_SESSION: "Sitzung konnte nicht erstellt werden",
|
||||
FAILED_TO_UPDATE_USER: "Benutzer konnte nicht aktualisiert werden",
|
||||
FAILED_TO_GET_SESSION: "Sitzung konnte nicht abgerufen werden",
|
||||
INVALID_PASSWORD: "Ungültiges Passwort",
|
||||
INVALID_EMAIL: "Ungültige E-Mail-Adresse",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Ungültige E-Mail-Adresse oder Passwort",
|
||||
INVALID_USER: "Ungültiger Benutzer",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Social-Media-Konto bereits verknüpft",
|
||||
PROVIDER_NOT_FOUND: "Anbieter nicht gefunden",
|
||||
INVALID_TOKEN: "Ungültiges Token",
|
||||
TOKEN_EXPIRED: "Token abgelaufen",
|
||||
FAILED_TO_GET_USER_INFO:
|
||||
"Benutzerinformationen konnten nicht abgerufen werden",
|
||||
USER_EMAIL_NOT_FOUND: "Benutzer-E-Mail nicht gefunden",
|
||||
EMAIL_NOT_VERIFIED: "E-Mail-Adresse nicht verifiziert",
|
||||
PASSWORD_TOO_SHORT: "Passwort zu kurz",
|
||||
PASSWORD_TOO_LONG: "Passwort zu lang",
|
||||
USER_ALREADY_EXISTS: "Benutzer existiert bereits",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Benutzer existiert bereits. Bitte verwenden Sie eine andere E-Mail-Adresse.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "E-Mail-Adresse kann nicht aktualisiert werden",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Anmeldekonto nicht gefunden",
|
||||
SESSION_EXPIRED:
|
||||
"Sitzung abgelaufen. Bitte authentifizieren Sie sich erneut, um diese Aktion durchzuführen.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Sie können Ihr letztes Konto nicht trennen",
|
||||
ACCOUNT_NOT_FOUND: "Konto nicht gefunden",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Der Benutzer hat bereits ein Passwort. Geben Sie dieses an, um das Konto zu löschen.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Bestätigungs-E-Mail ist nicht aktiviert",
|
||||
EMAIL_ALREADY_VERIFIED: "E-Mail-Adresse ist bereits verifiziert",
|
||||
EMAIL_MISMATCH: "E-Mail-Adressen stimmen nicht überein",
|
||||
SESSION_NOT_FRESH: "Sitzung ist nicht aktuell",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Verknüpftes Konto existiert bereits",
|
||||
VALIDATION_ERROR: "Validierungsfehler",
|
||||
MISSING_FIELD: "Dieses Feld ist erforderlich",
|
||||
PASSWORD_ALREADY_SET: "Benutzer hat bereits ein Passwort festgelegt",
|
||||
};
|
||||
44
packages/i18n/src/locales/en.ts
Normal file
44
packages/i18n/src/locales/en.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* English translations (default)
|
||||
*/
|
||||
export const en: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "User not found",
|
||||
FAILED_TO_CREATE_USER: "Failed to create user",
|
||||
FAILED_TO_CREATE_SESSION: "Failed to create session",
|
||||
FAILED_TO_UPDATE_USER: "Failed to update user",
|
||||
FAILED_TO_GET_SESSION: "Failed to get session",
|
||||
INVALID_PASSWORD: "Invalid password",
|
||||
INVALID_EMAIL: "Invalid email",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Invalid email or password",
|
||||
INVALID_USER: "Invalid user",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Social account already linked",
|
||||
PROVIDER_NOT_FOUND: "Provider not found",
|
||||
INVALID_TOKEN: "Invalid token",
|
||||
TOKEN_EXPIRED: "Token expired",
|
||||
FAILED_TO_GET_USER_INFO: "Failed to get user info",
|
||||
USER_EMAIL_NOT_FOUND: "User email not found",
|
||||
EMAIL_NOT_VERIFIED: "Email not verified",
|
||||
PASSWORD_TOO_SHORT: "Password too short",
|
||||
PASSWORD_TOO_LONG: "Password too long",
|
||||
USER_ALREADY_EXISTS: "User already exists",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"User already exists. Use another email.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "Email cannot be updated",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Credential account not found",
|
||||
SESSION_EXPIRED:
|
||||
"Session expired. Re-authenticate to perform this action.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "You can't unlink your last account",
|
||||
ACCOUNT_NOT_FOUND: "Account not found",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"User already has a password. Provide that to delete the account.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Verification email isn't enabled",
|
||||
EMAIL_ALREADY_VERIFIED: "Email is already verified",
|
||||
EMAIL_MISMATCH: "Email mismatch",
|
||||
SESSION_NOT_FRESH: "Session is not fresh",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Linked account already exists",
|
||||
VALIDATION_ERROR: "Validation error",
|
||||
MISSING_FIELD: "Field is required",
|
||||
PASSWORD_ALREADY_SET: "User already has a password set",
|
||||
};
|
||||
46
packages/i18n/src/locales/es.ts
Normal file
46
packages/i18n/src/locales/es.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Spanish translations
|
||||
*/
|
||||
export const es: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Usuario no encontrado",
|
||||
FAILED_TO_CREATE_USER: "Error al crear el usuario",
|
||||
FAILED_TO_CREATE_SESSION: "Error al crear la sesión",
|
||||
FAILED_TO_UPDATE_USER: "Error al actualizar el usuario",
|
||||
FAILED_TO_GET_SESSION: "Error al obtener la sesión",
|
||||
INVALID_PASSWORD: "Contraseña inválida",
|
||||
INVALID_EMAIL: "Correo electrónico inválido",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Correo electrónico o contraseña inválidos",
|
||||
INVALID_USER: "Usuario inválido",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "La cuenta social ya está vinculada",
|
||||
PROVIDER_NOT_FOUND: "Proveedor no encontrado",
|
||||
INVALID_TOKEN: "Token inválido",
|
||||
TOKEN_EXPIRED: "Token expirado",
|
||||
FAILED_TO_GET_USER_INFO:
|
||||
"Error al obtener la información del usuario",
|
||||
USER_EMAIL_NOT_FOUND: "Correo electrónico del usuario no encontrado",
|
||||
EMAIL_NOT_VERIFIED: "Correo electrónico no verificado",
|
||||
PASSWORD_TOO_SHORT: "Contraseña demasiado corta",
|
||||
PASSWORD_TOO_LONG: "Contraseña demasiado larga",
|
||||
USER_ALREADY_EXISTS: "El usuario ya existe",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"El usuario ya existe. Usa otro correo electrónico.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "El correo electrónico no puede actualizarse",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Cuenta de credenciales no encontrada",
|
||||
SESSION_EXPIRED:
|
||||
"Sesión expirada. Vuelve a autenticarte para realizar esta acción.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "No puedes desvincular tu última cuenta",
|
||||
ACCOUNT_NOT_FOUND: "Cuenta no encontrada",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"El usuario ya tiene una contraseña. Proporciónala para eliminar la cuenta.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED:
|
||||
"El correo de verificación no está habilitado",
|
||||
EMAIL_ALREADY_VERIFIED: "El correo electrónico ya está verificado",
|
||||
EMAIL_MISMATCH: "Los correos electrónicos no coinciden",
|
||||
SESSION_NOT_FRESH: "La sesión no es reciente",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "La cuenta vinculada ya existe",
|
||||
VALIDATION_ERROR: "Error de validación",
|
||||
MISSING_FIELD: "Este campo es requerido",
|
||||
PASSWORD_ALREADY_SET: "El usuario ya tiene una contraseña establecida",
|
||||
};
|
||||
44
packages/i18n/src/locales/fa.ts
Normal file
44
packages/i18n/src/locales/fa.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Persian (Farsi) translations
|
||||
*/
|
||||
export const fa: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "کاربر یافت نشد",
|
||||
FAILED_TO_CREATE_USER: "ایجاد کاربر ناموفق بود",
|
||||
FAILED_TO_CREATE_SESSION: "ایجاد نشست ناموفق بود",
|
||||
FAILED_TO_UPDATE_USER: "بهروزرسانی کاربر ناموفق بود",
|
||||
FAILED_TO_GET_SESSION: "دریافت نشست ناموفق بود",
|
||||
INVALID_PASSWORD: "رمز عبور نامعتبر است",
|
||||
INVALID_EMAIL: "ایمیل نامعتبر است",
|
||||
INVALID_EMAIL_OR_PASSWORD: "ایمیل یا رمز عبور نامعتبر است",
|
||||
INVALID_USER: "کاربر نامعتبر است",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "حساب اجتماعی قبلاً لینک شده است",
|
||||
PROVIDER_NOT_FOUND: "ارائهدهنده یافت نشد",
|
||||
INVALID_TOKEN: "توکن نامعتبر است",
|
||||
TOKEN_EXPIRED: "توکن منقضی شده است",
|
||||
FAILED_TO_GET_USER_INFO: "دریافت اطلاعات کاربر ناموفق بود",
|
||||
USER_EMAIL_NOT_FOUND: "ایمیل کاربر یافت نشد",
|
||||
EMAIL_NOT_VERIFIED: "ایمیل تأیید نشده است",
|
||||
PASSWORD_TOO_SHORT: "رمز عبور خیلی کوتاه است",
|
||||
PASSWORD_TOO_LONG: "رمز عبور خیلی طولانی است",
|
||||
USER_ALREADY_EXISTS: "کاربر از قبل وجود دارد",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"کاربر از قبل وجود دارد. از ایمیل دیگری استفاده کنید.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "ایمیل قابل بهروزرسانی نیست",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "حساب اعتبارنامه یافت نشد",
|
||||
SESSION_EXPIRED:
|
||||
"نشست منقضی شده است. برای انجام این عملیات مجدداً احراز هویت کنید.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "نمیتوانید آخرین حساب خود را جدا کنید",
|
||||
ACCOUNT_NOT_FOUND: "حساب یافت نشد",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"کاربر از قبل رمز عبور دارد. برای حذف حساب آن را وارد کنید.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "ایمیل تأییدیه فعال نیست",
|
||||
EMAIL_ALREADY_VERIFIED: "ایمیل قبلاً تأیید شده است",
|
||||
EMAIL_MISMATCH: "ایمیلها مطابقت ندارند",
|
||||
SESSION_NOT_FRESH: "نشست تازه نیست",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "حساب لینک شده از قبل وجود دارد",
|
||||
VALIDATION_ERROR: "خطای اعتبارسنجی",
|
||||
MISSING_FIELD: "این فیلد الزامی است",
|
||||
PASSWORD_ALREADY_SET: "کاربر از قبل رمز عبور دارد",
|
||||
};
|
||||
46
packages/i18n/src/locales/fr.ts
Normal file
46
packages/i18n/src/locales/fr.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* French translations
|
||||
*/
|
||||
export const fr: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Utilisateur non trouvé",
|
||||
FAILED_TO_CREATE_USER: "Échec de la création de l'utilisateur",
|
||||
FAILED_TO_CREATE_SESSION: "Échec de la création de la session",
|
||||
FAILED_TO_UPDATE_USER: "Échec de la mise à jour de l'utilisateur",
|
||||
FAILED_TO_GET_SESSION: "Échec de la récupération de la session",
|
||||
INVALID_PASSWORD: "Mot de passe invalide",
|
||||
INVALID_EMAIL: "Adresse e-mail invalide",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Email ou mot de passe invalide",
|
||||
INVALID_USER: "Utilisateur invalide",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Compte social déjà lié",
|
||||
PROVIDER_NOT_FOUND: "Fournisseur non trouvé",
|
||||
INVALID_TOKEN: "Jeton invalide",
|
||||
TOKEN_EXPIRED: "Jeton expiré",
|
||||
FAILED_TO_GET_USER_INFO:
|
||||
"Échec de la récupération des informations utilisateur",
|
||||
USER_EMAIL_NOT_FOUND: "Adresse e-mail de l'utilisateur non trouvée",
|
||||
EMAIL_NOT_VERIFIED: "Adresse e-mail non vérifiée",
|
||||
PASSWORD_TOO_SHORT: "Mot de passe trop court",
|
||||
PASSWORD_TOO_LONG: "Mot de passe trop long",
|
||||
USER_ALREADY_EXISTS: "L'utilisateur existe déjà",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"L'utilisateur existe déjà. Utilisez une autre adresse e-mail.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "L'adresse e-mail ne peut pas être mise à jour",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Compte de connexion non trouvé",
|
||||
SESSION_EXPIRED:
|
||||
"Session expirée. Veuillez vous reconnecter pour effectuer cette action.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Vous ne pouvez pas dissocier votre dernier compte",
|
||||
ACCOUNT_NOT_FOUND: "Compte non trouvé",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"L'utilisateur a déjà un mot de passe. Fournissez-le pour supprimer le compte.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "L'e-mail de vérification n'est pas activé",
|
||||
EMAIL_ALREADY_VERIFIED: "L'adresse e-mail est déjà vérifiée",
|
||||
EMAIL_MISMATCH: "Discordance d'adresses e-mail",
|
||||
SESSION_NOT_FRESH: "La session n'est pas récente",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Le compte lié existe déjà",
|
||||
VALIDATION_ERROR: "Erreur de validation",
|
||||
MISSING_FIELD: "Ce champ est requis",
|
||||
PASSWORD_ALREADY_SET: "L'utilisateur a déjà un mot de passe défini",
|
||||
};
|
||||
45
packages/i18n/src/locales/hi.ts
Normal file
45
packages/i18n/src/locales/hi.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Hindi translations
|
||||
*/
|
||||
export const hi: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "उपयोगकर्ता नहीं मिला",
|
||||
FAILED_TO_CREATE_USER: "उपयोगकर्ता बनाने में विफल",
|
||||
FAILED_TO_CREATE_SESSION: "सत्र बनाने में विफल",
|
||||
FAILED_TO_UPDATE_USER: "उपयोगकर्ता अपडेट करने में विफल",
|
||||
FAILED_TO_GET_SESSION: "सत्र प्राप्त करने में विफल",
|
||||
INVALID_PASSWORD: "अमान्य पासवर्ड",
|
||||
INVALID_EMAIL: "अमान्य ईमेल",
|
||||
INVALID_EMAIL_OR_PASSWORD: "अमान्य ईमेल या पासवर्ड",
|
||||
INVALID_USER: "अमान्य उपयोगकर्ता",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "सोशल अकाउंट पहले से लिंक है",
|
||||
PROVIDER_NOT_FOUND: "प्रदाता नहीं मिला",
|
||||
INVALID_TOKEN: "अमान्य टोकन",
|
||||
TOKEN_EXPIRED: "टोकन समाप्त हो गया",
|
||||
FAILED_TO_GET_USER_INFO: "उपयोगकर्ता जानकारी प्राप्त करने में विफल",
|
||||
USER_EMAIL_NOT_FOUND: "उपयोगकर्ता का ईमेल नहीं मिला",
|
||||
EMAIL_NOT_VERIFIED: "ईमेल सत्यापित नहीं है",
|
||||
PASSWORD_TOO_SHORT: "पासवर्ड बहुत छोटा है",
|
||||
PASSWORD_TOO_LONG: "पासवर्ड बहुत लंबा है",
|
||||
USER_ALREADY_EXISTS: "उपयोगकर्ता पहले से मौजूद है",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"उपयोगकर्ता पहले से मौजूद है। कोई अन्य ईमेल उपयोग करें।",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "ईमेल अपडेट नहीं किया जा सकता",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "क्रेडेंशियल अकाउंट नहीं मिला",
|
||||
SESSION_EXPIRED:
|
||||
"सत्र समाप्त हो गया। इस क्रिया को करने के लिए पुनः प्रमाणित करें।",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"आप अपने अंतिम अकाउंट को अनलिंक नहीं कर सकते",
|
||||
ACCOUNT_NOT_FOUND: "अकाउंट नहीं मिला",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"उपयोगकर्ता के पास पहले से पासवर्ड है। अकाउंट हटाने के लिए वह दर्ज करें।",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "सत्यापन ईमेल सक्षम नहीं है",
|
||||
EMAIL_ALREADY_VERIFIED: "ईमेल पहले से सत्यापित है",
|
||||
EMAIL_MISMATCH: "ईमेल मेल नहीं खाता",
|
||||
SESSION_NOT_FRESH: "सत्र ताजा नहीं है",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "लिंक किया गया अकाउंट पहले से मौजूद है",
|
||||
VALIDATION_ERROR: "सत्यापन त्रुटि",
|
||||
MISSING_FIELD: "यह फ़ील्ड आवश्यक है",
|
||||
PASSWORD_ALREADY_SET: "उपयोगकर्ता का पासवर्ड पहले से सेट है",
|
||||
};
|
||||
45
packages/i18n/src/locales/id.ts
Normal file
45
packages/i18n/src/locales/id.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Indonesian translations
|
||||
*/
|
||||
export const id: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Pengguna tidak ditemukan",
|
||||
FAILED_TO_CREATE_USER: "Gagal membuat pengguna",
|
||||
FAILED_TO_CREATE_SESSION: "Gagal membuat sesi",
|
||||
FAILED_TO_UPDATE_USER: "Gagal memperbarui pengguna",
|
||||
FAILED_TO_GET_SESSION: "Gagal mendapatkan sesi",
|
||||
INVALID_PASSWORD: "Kata sandi tidak valid",
|
||||
INVALID_EMAIL: "Alamat email tidak valid",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Email atau kata sandi tidak valid",
|
||||
INVALID_USER: "Pengguna tidak valid",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Akun sosial sudah ditautkan",
|
||||
PROVIDER_NOT_FOUND: "Penyedia tidak ditemukan",
|
||||
INVALID_TOKEN: "Token tidak valid",
|
||||
TOKEN_EXPIRED: "Token sudah kedaluwarsa",
|
||||
FAILED_TO_GET_USER_INFO: "Gagal mendapatkan informasi pengguna",
|
||||
USER_EMAIL_NOT_FOUND: "Email pengguna tidak ditemukan",
|
||||
EMAIL_NOT_VERIFIED: "Email belum diverifikasi",
|
||||
PASSWORD_TOO_SHORT: "Kata sandi terlalu pendek",
|
||||
PASSWORD_TOO_LONG: "Kata sandi terlalu panjang",
|
||||
USER_ALREADY_EXISTS: "Pengguna sudah ada",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Pengguna sudah ada. Gunakan email lain.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "Email tidak dapat diperbarui",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Akun kredensial tidak ditemukan",
|
||||
SESSION_EXPIRED:
|
||||
"Sesi telah kedaluwarsa. Autentikasi ulang untuk melakukan tindakan ini.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Anda tidak dapat memutuskan tautan akun terakhir Anda",
|
||||
ACCOUNT_NOT_FOUND: "Akun tidak ditemukan",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Pengguna sudah memiliki kata sandi. Berikan kata sandi tersebut untuk menghapus akun.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Email verifikasi tidak diaktifkan",
|
||||
EMAIL_ALREADY_VERIFIED: "Email sudah diverifikasi",
|
||||
EMAIL_MISMATCH: "Email tidak cocok",
|
||||
SESSION_NOT_FRESH: "Sesi tidak segar",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Akun yang ditautkan sudah ada",
|
||||
VALIDATION_ERROR: "Kesalahan validasi",
|
||||
MISSING_FIELD: "Kolom ini diperlukan",
|
||||
PASSWORD_ALREADY_SET: "Pengguna sudah memiliki kata sandi yang ditetapkan",
|
||||
};
|
||||
76
packages/i18n/src/locales/index.ts
Normal file
76
packages/i18n/src/locales/index.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
* Built-in default translations for the i18n plugin.
|
||||
*
|
||||
* Each locale exports a {@link TranslationDictionary} covering the core
|
||||
* Better Auth error codes. Additional locales can be added by following the
|
||||
* same pattern.
|
||||
*
|
||||
* @example Basic usage — enable all built-in locales
|
||||
* ```ts
|
||||
* import { i18n, locales } from "@better-auth/i18n";
|
||||
*
|
||||
* export const auth = betterAuth({
|
||||
* plugins: [
|
||||
* i18n({ translations: locales }),
|
||||
* ],
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* @example Selective usage — only a subset of locales
|
||||
* ```ts
|
||||
* import { i18n, locales } from "@better-auth/i18n";
|
||||
*
|
||||
* export const auth = betterAuth({
|
||||
* plugins: [
|
||||
* i18n({
|
||||
* translations: {
|
||||
* en: locales.en,
|
||||
* fr: locales.fr,
|
||||
* },
|
||||
* }),
|
||||
* ],
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* @example Override specific messages for a locale
|
||||
* ```ts
|
||||
* import { i18n, locales } from "@better-auth/i18n";
|
||||
*
|
||||
* export const auth = betterAuth({
|
||||
* plugins: [
|
||||
* i18n({
|
||||
* translations: {
|
||||
* ...locales,
|
||||
* fr: {
|
||||
* ...locales.fr,
|
||||
* USER_NOT_FOUND: "Membre introuvable",
|
||||
* },
|
||||
* },
|
||||
* }),
|
||||
* ],
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
|
||||
export { ar } from "./ar";
|
||||
export { bn } from "./bn";
|
||||
export { de } from "./de";
|
||||
export { en } from "./en";
|
||||
export { es } from "./es";
|
||||
export { fa } from "./fa";
|
||||
export { fr } from "./fr";
|
||||
export { hi } from "./hi";
|
||||
export { id } from "./id";
|
||||
export { it } from "./it";
|
||||
export { ja } from "./ja";
|
||||
export { ko } from "./ko";
|
||||
export { nl } from "./nl";
|
||||
export { pl } from "./pl";
|
||||
export { pt } from "./pt";
|
||||
export { ru } from "./ru";
|
||||
export { sv } from "./sv";
|
||||
export { th } from "./th";
|
||||
export { tr } from "./tr";
|
||||
export { uk } from "./uk";
|
||||
export { vi } from "./vi";
|
||||
export { zh } from "./zh";
|
||||
46
packages/i18n/src/locales/it.ts
Normal file
46
packages/i18n/src/locales/it.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Italian translations
|
||||
*/
|
||||
export const it: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Utente non trovato",
|
||||
FAILED_TO_CREATE_USER: "Impossibile creare l'utente",
|
||||
FAILED_TO_CREATE_SESSION: "Impossibile creare la sessione",
|
||||
FAILED_TO_UPDATE_USER: "Impossibile aggiornare l'utente",
|
||||
FAILED_TO_GET_SESSION: "Impossibile ottenere la sessione",
|
||||
INVALID_PASSWORD: "Password non valida",
|
||||
INVALID_EMAIL: "Indirizzo e-mail non valido",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Indirizzo e-mail o password non validi",
|
||||
INVALID_USER: "Utente non valido",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Account social già collegato",
|
||||
PROVIDER_NOT_FOUND: "Provider non trovato",
|
||||
INVALID_TOKEN: "Token non valido",
|
||||
TOKEN_EXPIRED: "Token scaduto",
|
||||
FAILED_TO_GET_USER_INFO:
|
||||
"Impossibile ottenere le informazioni dell'utente",
|
||||
USER_EMAIL_NOT_FOUND: "Indirizzo e-mail dell'utente non trovato",
|
||||
EMAIL_NOT_VERIFIED: "Indirizzo e-mail non verificato",
|
||||
PASSWORD_TOO_SHORT: "Password troppo corta",
|
||||
PASSWORD_TOO_LONG: "Password troppo lunga",
|
||||
USER_ALREADY_EXISTS: "L'utente esiste già",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"L'utente esiste già. Usa un altro indirizzo e-mail.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "L'indirizzo e-mail non può essere aggiornato",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Account delle credenziali non trovato",
|
||||
SESSION_EXPIRED:
|
||||
"Sessione scaduta. Esegui nuovamente l'autenticazione per eseguire questa azione.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Non puoi scollegare il tuo ultimo account",
|
||||
ACCOUNT_NOT_FOUND: "Account non trovato",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"L'utente ha già una password. Forniscila per eliminare l'account.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "L'e-mail di verifica non è abilitata",
|
||||
EMAIL_ALREADY_VERIFIED: "L'indirizzo e-mail è già verificato",
|
||||
EMAIL_MISMATCH: "Gli indirizzi e-mail non corrispondono",
|
||||
SESSION_NOT_FRESH: "La sessione non è recente",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "L'account collegato esiste già",
|
||||
VALIDATION_ERROR: "Errore di validazione",
|
||||
MISSING_FIELD: "Questo campo è obbligatorio",
|
||||
PASSWORD_ALREADY_SET: "L'utente ha già una password impostata",
|
||||
};
|
||||
45
packages/i18n/src/locales/ja.ts
Normal file
45
packages/i18n/src/locales/ja.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Japanese translations
|
||||
*/
|
||||
export const ja: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "ユーザーが見つかりません",
|
||||
FAILED_TO_CREATE_USER: "ユーザーの作成に失敗しました",
|
||||
FAILED_TO_CREATE_SESSION: "セッションの作成に失敗しました",
|
||||
FAILED_TO_UPDATE_USER: "ユーザーの更新に失敗しました",
|
||||
FAILED_TO_GET_SESSION: "セッションの取得に失敗しました",
|
||||
INVALID_PASSWORD: "パスワードが無効です",
|
||||
INVALID_EMAIL: "メールアドレスが無効です",
|
||||
INVALID_EMAIL_OR_PASSWORD: "メールアドレスまたはパスワードが無効です",
|
||||
INVALID_USER: "ユーザーが無効です",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "ソーシャルアカウントはすでに連携されています",
|
||||
PROVIDER_NOT_FOUND: "プロバイダーが見つかりません",
|
||||
INVALID_TOKEN: "トークンが無効です",
|
||||
TOKEN_EXPIRED: "トークンの有効期限が切れています",
|
||||
FAILED_TO_GET_USER_INFO: "ユーザー情報の取得に失敗しました",
|
||||
USER_EMAIL_NOT_FOUND: "ユーザーのメールアドレスが見つかりません",
|
||||
EMAIL_NOT_VERIFIED: "メールアドレスが確認されていません",
|
||||
PASSWORD_TOO_SHORT: "パスワードが短すぎます",
|
||||
PASSWORD_TOO_LONG: "パスワードが長すぎます",
|
||||
USER_ALREADY_EXISTS: "ユーザーはすでに存在します",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"ユーザーはすでに存在します。別のメールアドレスをご使用ください。",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "メールアドレスは更新できません",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "認証アカウントが見つかりません",
|
||||
SESSION_EXPIRED:
|
||||
"セッションの有効期限が切れています。このアクションを実行するには再認証してください。",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"最後のアカウントの連携を解除することはできません",
|
||||
ACCOUNT_NOT_FOUND: "アカウントが見つかりません",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"ユーザーにはすでにパスワードが設定されています。アカウントを削除するにはパスワードを入力してください。",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "確認メールが有効化されていません",
|
||||
EMAIL_ALREADY_VERIFIED: "メールアドレスはすでに確認済みです",
|
||||
EMAIL_MISMATCH: "メールアドレスが一致しません",
|
||||
SESSION_NOT_FRESH: "セッションが最新ではありません",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "連携アカウントはすでに存在します",
|
||||
VALIDATION_ERROR: "バリデーションエラー",
|
||||
MISSING_FIELD: "このフィールドは必須です",
|
||||
PASSWORD_ALREADY_SET: "ユーザーにはすでにパスワードが設定されています",
|
||||
};
|
||||
44
packages/i18n/src/locales/ko.ts
Normal file
44
packages/i18n/src/locales/ko.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Korean translations
|
||||
*/
|
||||
export const ko: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "사용자를 찾을 수 없습니다",
|
||||
FAILED_TO_CREATE_USER: "사용자 생성에 실패했습니다",
|
||||
FAILED_TO_CREATE_SESSION: "세션 생성에 실패했습니다",
|
||||
FAILED_TO_UPDATE_USER: "사용자 업데이트에 실패했습니다",
|
||||
FAILED_TO_GET_SESSION: "세션을 가져오는 데 실패했습니다",
|
||||
INVALID_PASSWORD: "유효하지 않은 비밀번호",
|
||||
INVALID_EMAIL: "유효하지 않은 이메일",
|
||||
INVALID_EMAIL_OR_PASSWORD: "유효하지 않은 이메일 또는 비밀번호",
|
||||
INVALID_USER: "유효하지 않은 사용자",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "소셜 계정이 이미 연결되어 있습니다",
|
||||
PROVIDER_NOT_FOUND: "제공자를 찾을 수 없습니다",
|
||||
INVALID_TOKEN: "유효하지 않은 토큰",
|
||||
TOKEN_EXPIRED: "토큰이 만료되었습니다",
|
||||
FAILED_TO_GET_USER_INFO: "사용자 정보를 가져오는 데 실패했습니다",
|
||||
USER_EMAIL_NOT_FOUND: "사용자 이메일을 찾을 수 없습니다",
|
||||
EMAIL_NOT_VERIFIED: "이메일이 인증되지 않았습니다",
|
||||
PASSWORD_TOO_SHORT: "비밀번호가 너무 짧습니다",
|
||||
PASSWORD_TOO_LONG: "비밀번호가 너무 깁니다",
|
||||
USER_ALREADY_EXISTS: "사용자가 이미 존재합니다",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"사용자가 이미 존재합니다. 다른 이메일을 사용해 주세요.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "이메일을 업데이트할 수 없습니다",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "자격 증명 계정을 찾을 수 없습니다",
|
||||
SESSION_EXPIRED:
|
||||
"세션이 만료되었습니다. 이 작업을 수행하려면 다시 인증해 주세요.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "마지막 계정의 연결을 해제할 수 없습니다",
|
||||
ACCOUNT_NOT_FOUND: "계정을 찾을 수 없습니다",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"사용자에게 이미 비밀번호가 있습니다. 계정을 삭제하려면 비밀번호를 제공해 주세요.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "인증 이메일이 활성화되지 않았습니다",
|
||||
EMAIL_ALREADY_VERIFIED: "이메일이 이미 인증되었습니다",
|
||||
EMAIL_MISMATCH: "이메일이 일치하지 않습니다",
|
||||
SESSION_NOT_FRESH: "세션이 최신 상태가 아닙니다",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "연결된 계정이 이미 존재합니다",
|
||||
VALIDATION_ERROR: "유효성 검사 오류",
|
||||
MISSING_FIELD: "이 필드는 필수입니다",
|
||||
PASSWORD_ALREADY_SET: "사용자에게 이미 비밀번호가 설정되어 있습니다",
|
||||
};
|
||||
44
packages/i18n/src/locales/nl.ts
Normal file
44
packages/i18n/src/locales/nl.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Dutch translations
|
||||
*/
|
||||
export const nl: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Gebruiker niet gevonden",
|
||||
FAILED_TO_CREATE_USER: "Gebruiker aanmaken mislukt",
|
||||
FAILED_TO_CREATE_SESSION: "Sessie aanmaken mislukt",
|
||||
FAILED_TO_UPDATE_USER: "Gebruiker bijwerken mislukt",
|
||||
FAILED_TO_GET_SESSION: "Sessie ophalen mislukt",
|
||||
INVALID_PASSWORD: "Ongeldig wachtwoord",
|
||||
INVALID_EMAIL: "Ongeldig e-mailadres",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Ongeldig e-mailadres of wachtwoord",
|
||||
INVALID_USER: "Ongeldige gebruiker",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Sociaal account al gekoppeld",
|
||||
PROVIDER_NOT_FOUND: "Provider niet gevonden",
|
||||
INVALID_TOKEN: "Ongeldig token",
|
||||
TOKEN_EXPIRED: "Token verlopen",
|
||||
FAILED_TO_GET_USER_INFO: "Gebruikersinformatie ophalen mislukt",
|
||||
USER_EMAIL_NOT_FOUND: "E-mailadres van gebruiker niet gevonden",
|
||||
EMAIL_NOT_VERIFIED: "E-mailadres niet geverifieerd",
|
||||
PASSWORD_TOO_SHORT: "Wachtwoord te kort",
|
||||
PASSWORD_TOO_LONG: "Wachtwoord te lang",
|
||||
USER_ALREADY_EXISTS: "Gebruiker bestaat al",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Gebruiker bestaat al. Gebruik een ander e-mailadres.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "E-mailadres kan niet worden bijgewerkt",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Referentieaccount niet gevonden",
|
||||
SESSION_EXPIRED:
|
||||
"Sessie verlopen. Authenticeer opnieuw om deze actie uit te voeren.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "U kunt uw laatste account niet ontkoppelen",
|
||||
ACCOUNT_NOT_FOUND: "Account niet gevonden",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Gebruiker heeft al een wachtwoord. Geef dit op om het account te verwijderen.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Verificatie-e-mail is niet ingeschakeld",
|
||||
EMAIL_ALREADY_VERIFIED: "E-mailadres is al geverifieerd",
|
||||
EMAIL_MISMATCH: "E-mailadressen komen niet overeen",
|
||||
SESSION_NOT_FRESH: "Sessie is niet actueel",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Gekoppeld account bestaat al",
|
||||
VALIDATION_ERROR: "Validatiefout",
|
||||
MISSING_FIELD: "Dit veld is verplicht",
|
||||
PASSWORD_ALREADY_SET: "Gebruiker heeft al een wachtwoord ingesteld",
|
||||
};
|
||||
47
packages/i18n/src/locales/pl.ts
Normal file
47
packages/i18n/src/locales/pl.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Polish translations
|
||||
*/
|
||||
export const pl: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Użytkownik nie znaleziony",
|
||||
FAILED_TO_CREATE_USER: "Nie udało się utworzyć użytkownika",
|
||||
FAILED_TO_CREATE_SESSION: "Nie udało się utworzyć sesji",
|
||||
FAILED_TO_UPDATE_USER: "Nie udało się zaktualizować użytkownika",
|
||||
FAILED_TO_GET_SESSION: "Nie udało się pobrać sesji",
|
||||
INVALID_PASSWORD: "Nieprawidłowe hasło",
|
||||
INVALID_EMAIL: "Nieprawidłowy adres e-mail",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Nieprawidłowy adres e-mail lub hasło",
|
||||
INVALID_USER: "Nieprawidłowy użytkownik",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Konto społecznościowe jest już połączone",
|
||||
PROVIDER_NOT_FOUND: "Dostawca nie znaleziony",
|
||||
INVALID_TOKEN: "Nieprawidłowy token",
|
||||
TOKEN_EXPIRED: "Token wygasł",
|
||||
FAILED_TO_GET_USER_INFO:
|
||||
"Nie udało się pobrać informacji o użytkowniku",
|
||||
USER_EMAIL_NOT_FOUND: "Adres e-mail użytkownika nie znaleziony",
|
||||
EMAIL_NOT_VERIFIED: "Adres e-mail nie został zweryfikowany",
|
||||
PASSWORD_TOO_SHORT: "Hasło jest za krótkie",
|
||||
PASSWORD_TOO_LONG: "Hasło jest za długie",
|
||||
USER_ALREADY_EXISTS: "Użytkownik już istnieje",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Użytkownik już istnieje. Użyj innego adresu e-mail.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "Adres e-mail nie może zostać zaktualizowany",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND:
|
||||
"Konto z danymi uwierzytelniającymi nie znalezione",
|
||||
SESSION_EXPIRED:
|
||||
"Sesja wygasła. Uwierzytelnij się ponownie, aby wykonać tę akcję.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Nie możesz odłączyć swojego ostatniego konta",
|
||||
ACCOUNT_NOT_FOUND: "Konto nie znalezione",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Użytkownik ma już hasło. Podaj je, aby usunąć konto.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "E-mail weryfikacyjny nie jest włączony",
|
||||
EMAIL_ALREADY_VERIFIED: "Adres e-mail jest już zweryfikowany",
|
||||
EMAIL_MISMATCH: "Adresy e-mail nie są zgodne",
|
||||
SESSION_NOT_FRESH: "Sesja nie jest aktualna",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Połączone konto już istnieje",
|
||||
VALIDATION_ERROR: "Błąd walidacji",
|
||||
MISSING_FIELD: "To pole jest wymagane",
|
||||
PASSWORD_ALREADY_SET: "Użytkownik ma już ustawione hasło",
|
||||
};
|
||||
45
packages/i18n/src/locales/pt.ts
Normal file
45
packages/i18n/src/locales/pt.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Portuguese translations
|
||||
*/
|
||||
export const pt: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Usuário não encontrado",
|
||||
FAILED_TO_CREATE_USER: "Falha ao criar usuário",
|
||||
FAILED_TO_CREATE_SESSION: "Falha ao criar sessão",
|
||||
FAILED_TO_UPDATE_USER: "Falha ao atualizar usuário",
|
||||
FAILED_TO_GET_SESSION: "Falha ao obter sessão",
|
||||
INVALID_PASSWORD: "Senha inválida",
|
||||
INVALID_EMAIL: "E-mail inválido",
|
||||
INVALID_EMAIL_OR_PASSWORD: "E-mail ou senha inválidos",
|
||||
INVALID_USER: "Usuário inválido",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Conta social já vinculada",
|
||||
PROVIDER_NOT_FOUND: "Provedor não encontrado",
|
||||
INVALID_TOKEN: "Token inválido",
|
||||
TOKEN_EXPIRED: "Token expirado",
|
||||
FAILED_TO_GET_USER_INFO: "Falha ao obter informações do usuário",
|
||||
USER_EMAIL_NOT_FOUND: "E-mail do usuário não encontrado",
|
||||
EMAIL_NOT_VERIFIED: "E-mail não verificado",
|
||||
PASSWORD_TOO_SHORT: "Senha muito curta",
|
||||
PASSWORD_TOO_LONG: "Senha muito longa",
|
||||
USER_ALREADY_EXISTS: "Usuário já existe",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Usuário já existe. Use outro e-mail.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "O e-mail não pode ser atualizado",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Conta de credencial não encontrada",
|
||||
SESSION_EXPIRED:
|
||||
"Sessão expirada. Autentique-se novamente para realizar esta ação.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Você não pode desvincular sua última conta",
|
||||
ACCOUNT_NOT_FOUND: "Conta não encontrada",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Usuário já tem uma senha. Forneça-a para excluir a conta.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "E-mail de verificação não está habilitado",
|
||||
EMAIL_ALREADY_VERIFIED: "E-mail já está verificado",
|
||||
EMAIL_MISMATCH: "E-mails não correspondem",
|
||||
SESSION_NOT_FRESH: "Sessão não está recente",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Conta vinculada já existe",
|
||||
VALIDATION_ERROR: "Erro de validação",
|
||||
MISSING_FIELD: "Este campo é obrigatório",
|
||||
PASSWORD_ALREADY_SET: "Usuário já tem uma senha definida",
|
||||
};
|
||||
45
packages/i18n/src/locales/ru.ts
Normal file
45
packages/i18n/src/locales/ru.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Russian translations
|
||||
*/
|
||||
export const ru: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Пользователь не найден",
|
||||
FAILED_TO_CREATE_USER: "Не удалось создать пользователя",
|
||||
FAILED_TO_CREATE_SESSION: "Не удалось создать сессию",
|
||||
FAILED_TO_UPDATE_USER: "Не удалось обновить пользователя",
|
||||
FAILED_TO_GET_SESSION: "Не удалось получить сессию",
|
||||
INVALID_PASSWORD: "Неверный пароль",
|
||||
INVALID_EMAIL: "Недействительный адрес электронной почты",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Неверный адрес электронной почты или пароль",
|
||||
INVALID_USER: "Недействительный пользователь",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Аккаунт в социальной сети уже привязан",
|
||||
PROVIDER_NOT_FOUND: "Провайдер не найден",
|
||||
INVALID_TOKEN: "Недействительный токен",
|
||||
TOKEN_EXPIRED: "Токен истёк",
|
||||
FAILED_TO_GET_USER_INFO:
|
||||
"Не удалось получить информацию о пользователе",
|
||||
USER_EMAIL_NOT_FOUND: "Электронная почта пользователя не найдена",
|
||||
EMAIL_NOT_VERIFIED: "Электронная почта не подтверждена",
|
||||
PASSWORD_TOO_SHORT: "Пароль слишком короткий",
|
||||
PASSWORD_TOO_LONG: "Пароль слишком длинный",
|
||||
USER_ALREADY_EXISTS: "Пользователь уже существует",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Пользователь уже существует. Используйте другой адрес электронной почты.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "Адрес электронной почты не может быть обновлён",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Учётная запись с паролем не найдена",
|
||||
SESSION_EXPIRED:
|
||||
"Сессия истекла. Выполните повторную аутентификацию для выполнения этого действия.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "Вы не можете отвязать последний аккаунт",
|
||||
ACCOUNT_NOT_FOUND: "Аккаунт не найден",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"У пользователя уже есть пароль. Укажите его для удаления аккаунта.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Письмо для подтверждения не включено",
|
||||
EMAIL_ALREADY_VERIFIED: "Электронная почта уже подтверждена",
|
||||
EMAIL_MISMATCH: "Адреса электронной почты не совпадают",
|
||||
SESSION_NOT_FRESH: "Сессия устарела",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Привязанный аккаунт уже существует",
|
||||
VALIDATION_ERROR: "Ошибка валидации",
|
||||
MISSING_FIELD: "Это поле обязательно для заполнения",
|
||||
PASSWORD_ALREADY_SET: "У пользователя уже установлен пароль",
|
||||
};
|
||||
46
packages/i18n/src/locales/sv.ts
Normal file
46
packages/i18n/src/locales/sv.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Swedish translations
|
||||
*/
|
||||
export const sv: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Användare hittades inte",
|
||||
FAILED_TO_CREATE_USER: "Misslyckades med att skapa användare",
|
||||
FAILED_TO_CREATE_SESSION: "Misslyckades med att skapa session",
|
||||
FAILED_TO_UPDATE_USER: "Misslyckades med att uppdatera användare",
|
||||
FAILED_TO_GET_SESSION: "Misslyckades med att hämta session",
|
||||
INVALID_PASSWORD: "Ogiltigt lösenord",
|
||||
INVALID_EMAIL: "Ogiltig e-postadress",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Ogiltig e-postadress eller lösenord",
|
||||
INVALID_USER: "Ogiltig användare",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Socialt konto redan länkat",
|
||||
PROVIDER_NOT_FOUND: "Leverantör hittades inte",
|
||||
INVALID_TOKEN: "Ogiltigt token",
|
||||
TOKEN_EXPIRED: "Token har gått ut",
|
||||
FAILED_TO_GET_USER_INFO:
|
||||
"Misslyckades med att hämta användarinformation",
|
||||
USER_EMAIL_NOT_FOUND: "Användarens e-postadress hittades inte",
|
||||
EMAIL_NOT_VERIFIED: "E-postadressen är inte verifierad",
|
||||
PASSWORD_TOO_SHORT: "Lösenordet är för kort",
|
||||
PASSWORD_TOO_LONG: "Lösenordet är för långt",
|
||||
USER_ALREADY_EXISTS: "Användaren finns redan",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Användaren finns redan. Använd en annan e-postadress.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "E-postadressen kan inte uppdateras",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Inloggningskontot hittades inte",
|
||||
SESSION_EXPIRED:
|
||||
"Sessionen har gått ut. Autentisera dig igen för att utföra denna åtgärd.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Du kan inte ta bort länken till ditt sista konto",
|
||||
ACCOUNT_NOT_FOUND: "Kontot hittades inte",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Användaren har redan ett lösenord. Ange det för att ta bort kontot.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Verifieringsmail är inte aktiverat",
|
||||
EMAIL_ALREADY_VERIFIED: "E-postadressen är redan verifierad",
|
||||
EMAIL_MISMATCH: "E-postadresserna stämmer inte överens",
|
||||
SESSION_NOT_FRESH: "Sessionen är inte aktuell",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Det länkade kontot finns redan",
|
||||
VALIDATION_ERROR: "Valideringsfel",
|
||||
MISSING_FIELD: "Det här fältet är obligatoriskt",
|
||||
PASSWORD_ALREADY_SET: "Användaren har redan ett lösenord inställt",
|
||||
};
|
||||
45
packages/i18n/src/locales/th.ts
Normal file
45
packages/i18n/src/locales/th.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Thai translations
|
||||
*/
|
||||
export const th: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "ไม่พบผู้ใช้",
|
||||
FAILED_TO_CREATE_USER: "สร้างผู้ใช้ไม่สำเร็จ",
|
||||
FAILED_TO_CREATE_SESSION: "สร้างเซสชันไม่สำเร็จ",
|
||||
FAILED_TO_UPDATE_USER: "อัปเดตผู้ใช้ไม่สำเร็จ",
|
||||
FAILED_TO_GET_SESSION: "ดึงเซสชันไม่สำเร็จ",
|
||||
INVALID_PASSWORD: "รหัสผ่านไม่ถูกต้อง",
|
||||
INVALID_EMAIL: "อีเมลไม่ถูกต้อง",
|
||||
INVALID_EMAIL_OR_PASSWORD: "อีเมลหรือรหัสผ่านไม่ถูกต้อง",
|
||||
INVALID_USER: "ผู้ใช้ไม่ถูกต้อง",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "บัญชีโซเชียลเชื่อมต่อแล้ว",
|
||||
PROVIDER_NOT_FOUND: "ไม่พบผู้ให้บริการ",
|
||||
INVALID_TOKEN: "โทเคนไม่ถูกต้อง",
|
||||
TOKEN_EXPIRED: "โทเคนหมดอายุ",
|
||||
FAILED_TO_GET_USER_INFO: "ดึงข้อมูลผู้ใช้ไม่สำเร็จ",
|
||||
USER_EMAIL_NOT_FOUND: "ไม่พบอีเมลผู้ใช้",
|
||||
EMAIL_NOT_VERIFIED: "อีเมลยังไม่ได้รับการยืนยัน",
|
||||
PASSWORD_TOO_SHORT: "รหัสผ่านสั้นเกินไป",
|
||||
PASSWORD_TOO_LONG: "รหัสผ่านยาวเกินไป",
|
||||
USER_ALREADY_EXISTS: "ผู้ใช้มีอยู่แล้ว",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"ผู้ใช้มีอยู่แล้ว กรุณาใช้อีเมลอื่น",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "ไม่สามารถอัปเดตอีเมลได้",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "ไม่พบบัญชีข้อมูลรับรอง",
|
||||
SESSION_EXPIRED:
|
||||
"เซสชันหมดอายุ กรุณายืนยันตัวตนใหม่เพื่อดำเนินการนี้",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"คุณไม่สามารถยกเลิกการเชื่อมต่อบัญชีสุดท้ายของคุณได้",
|
||||
ACCOUNT_NOT_FOUND: "ไม่พบบัญชี",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"ผู้ใช้มีรหัสผ่านอยู่แล้ว กรุณาระบุรหัสผ่านเพื่อลบบัญชี",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "ไม่ได้เปิดใช้งานอีเมลยืนยัน",
|
||||
EMAIL_ALREADY_VERIFIED: "อีเมลได้รับการยืนยันแล้ว",
|
||||
EMAIL_MISMATCH: "อีเมลไม่ตรงกัน",
|
||||
SESSION_NOT_FRESH: "เซสชันไม่ใหม่",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "บัญชีที่เชื่อมต่อมีอยู่แล้ว",
|
||||
VALIDATION_ERROR: "ข้อผิดพลาดในการตรวจสอบ",
|
||||
MISSING_FIELD: "ต้องกรอกฟิลด์นี้",
|
||||
PASSWORD_ALREADY_SET: "ผู้ใช้มีรหัสผ่านที่ตั้งค่าไว้แล้ว",
|
||||
};
|
||||
45
packages/i18n/src/locales/tr.ts
Normal file
45
packages/i18n/src/locales/tr.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Turkish translations
|
||||
*/
|
||||
export const tr: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Kullanıcı bulunamadı",
|
||||
FAILED_TO_CREATE_USER: "Kullanıcı oluşturulamadı",
|
||||
FAILED_TO_CREATE_SESSION: "Oturum oluşturulamadı",
|
||||
FAILED_TO_UPDATE_USER: "Kullanıcı güncellenemedi",
|
||||
FAILED_TO_GET_SESSION: "Oturum alınamadı",
|
||||
INVALID_PASSWORD: "Geçersiz şifre",
|
||||
INVALID_EMAIL: "Geçersiz e-posta adresi",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Geçersiz e-posta adresi veya şifre",
|
||||
INVALID_USER: "Geçersiz kullanıcı",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Sosyal hesap zaten bağlı",
|
||||
PROVIDER_NOT_FOUND: "Sağlayıcı bulunamadı",
|
||||
INVALID_TOKEN: "Geçersiz token",
|
||||
TOKEN_EXPIRED: "Token süresi doldu",
|
||||
FAILED_TO_GET_USER_INFO: "Kullanıcı bilgileri alınamadı",
|
||||
USER_EMAIL_NOT_FOUND: "Kullanıcı e-posta adresi bulunamadı",
|
||||
EMAIL_NOT_VERIFIED: "E-posta adresi doğrulanmadı",
|
||||
PASSWORD_TOO_SHORT: "Şifre çok kısa",
|
||||
PASSWORD_TOO_LONG: "Şifre çok uzun",
|
||||
USER_ALREADY_EXISTS: "Kullanıcı zaten mevcut",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Kullanıcı zaten mevcut. Başka bir e-posta adresi kullanın.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "E-posta adresi güncellenemiyor",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Kimlik bilgisi hesabı bulunamadı",
|
||||
SESSION_EXPIRED:
|
||||
"Oturum süresi doldu. Bu işlemi gerçekleştirmek için yeniden kimlik doğrulayın.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Son hesabınızın bağlantısını kaldıramazsınız",
|
||||
ACCOUNT_NOT_FOUND: "Hesap bulunamadı",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Kullanıcının zaten bir şifresi var. Hesabı silmek için şifreyi girin.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Doğrulama e-postası etkin değil",
|
||||
EMAIL_ALREADY_VERIFIED: "E-posta adresi zaten doğrulandı",
|
||||
EMAIL_MISMATCH: "E-posta adresleri uyuşmuyor",
|
||||
SESSION_NOT_FRESH: "Oturum güncel değil",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Bağlı hesap zaten mevcut",
|
||||
VALIDATION_ERROR: "Doğrulama hatası",
|
||||
MISSING_FIELD: "Bu alan gerekli",
|
||||
PASSWORD_ALREADY_SET: "Kullanıcının şifresi zaten ayarlanmış",
|
||||
};
|
||||
47
packages/i18n/src/locales/uk.ts
Normal file
47
packages/i18n/src/locales/uk.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Ukrainian translations
|
||||
*/
|
||||
export const uk: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Користувача не знайдено",
|
||||
FAILED_TO_CREATE_USER: "Не вдалося створити користувача",
|
||||
FAILED_TO_CREATE_SESSION: "Не вдалося створити сеанс",
|
||||
FAILED_TO_UPDATE_USER: "Не вдалося оновити користувача",
|
||||
FAILED_TO_GET_SESSION: "Не вдалося отримати сеанс",
|
||||
INVALID_PASSWORD: "Неправильний пароль",
|
||||
INVALID_EMAIL: "Недійсна адреса електронної пошти",
|
||||
INVALID_EMAIL_OR_PASSWORD:
|
||||
"Неправильна адреса електронної пошти або пароль",
|
||||
INVALID_USER: "Недійсний користувач",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Соціальний акаунт вже прив'язано",
|
||||
PROVIDER_NOT_FOUND: "Провайдера не знайдено",
|
||||
INVALID_TOKEN: "Недійсний токен",
|
||||
TOKEN_EXPIRED: "Термін дії токена закінчився",
|
||||
FAILED_TO_GET_USER_INFO:
|
||||
"Не вдалося отримати інформацію про користувача",
|
||||
USER_EMAIL_NOT_FOUND: "Адресу електронної пошти користувача не знайдено",
|
||||
EMAIL_NOT_VERIFIED: "Адресу електронної пошти не підтверджено",
|
||||
PASSWORD_TOO_SHORT: "Пароль занадто короткий",
|
||||
PASSWORD_TOO_LONG: "Пароль занадто довгий",
|
||||
USER_ALREADY_EXISTS: "Користувач вже існує",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Користувач вже існує. Використовуйте іншу адресу електронної пошти.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED:
|
||||
"Адресу електронної пошти не можна оновити",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "Обліковий запис із даними не знайдено",
|
||||
SESSION_EXPIRED:
|
||||
"Сеанс закінчився. Пройдіть повторну аутентифікацію для виконання цієї дії.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "Ви не можете від'єднати останній акаунт",
|
||||
ACCOUNT_NOT_FOUND: "Акаунт не знайдено",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Користувач вже має пароль. Вкажіть його, щоб видалити акаунт.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Лист для підтвердження не увімкнено",
|
||||
EMAIL_ALREADY_VERIFIED: "Адресу електронної пошти вже підтверджено",
|
||||
EMAIL_MISMATCH: "Адреси електронної пошти не збігаються",
|
||||
SESSION_NOT_FRESH: "Сеанс не є актуальним",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Прив'язаний акаунт вже існує",
|
||||
VALIDATION_ERROR: "Помилка валідації",
|
||||
MISSING_FIELD: "Це поле є обов'язковим",
|
||||
PASSWORD_ALREADY_SET: "У користувача вже встановлено пароль",
|
||||
};
|
||||
46
packages/i18n/src/locales/vi.ts
Normal file
46
packages/i18n/src/locales/vi.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Vietnamese translations
|
||||
*/
|
||||
export const vi: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "Không tìm thấy người dùng",
|
||||
FAILED_TO_CREATE_USER: "Tạo người dùng thất bại",
|
||||
FAILED_TO_CREATE_SESSION: "Tạo phiên thất bại",
|
||||
FAILED_TO_UPDATE_USER: "Cập nhật người dùng thất bại",
|
||||
FAILED_TO_GET_SESSION: "Lấy phiên thất bại",
|
||||
INVALID_PASSWORD: "Mật khẩu không hợp lệ",
|
||||
INVALID_EMAIL: "Email không hợp lệ",
|
||||
INVALID_EMAIL_OR_PASSWORD: "Email hoặc mật khẩu không hợp lệ",
|
||||
INVALID_USER: "Người dùng không hợp lệ",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "Tài khoản mạng xã hội đã được liên kết",
|
||||
PROVIDER_NOT_FOUND: "Không tìm thấy nhà cung cấp",
|
||||
INVALID_TOKEN: "Token không hợp lệ",
|
||||
TOKEN_EXPIRED: "Token đã hết hạn",
|
||||
FAILED_TO_GET_USER_INFO: "Lấy thông tin người dùng thất bại",
|
||||
USER_EMAIL_NOT_FOUND: "Không tìm thấy email người dùng",
|
||||
EMAIL_NOT_VERIFIED: "Email chưa được xác minh",
|
||||
PASSWORD_TOO_SHORT: "Mật khẩu quá ngắn",
|
||||
PASSWORD_TOO_LONG: "Mật khẩu quá dài",
|
||||
USER_ALREADY_EXISTS: "Người dùng đã tồn tại",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:
|
||||
"Người dùng đã tồn tại. Sử dụng email khác.",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "Email không thể được cập nhật",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND:
|
||||
"Không tìm thấy tài khoản thông tin xác thực",
|
||||
SESSION_EXPIRED:
|
||||
"Phiên đã hết hạn. Xác thực lại để thực hiện hành động này.",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT:
|
||||
"Bạn không thể hủy liên kết tài khoản cuối cùng của mình",
|
||||
ACCOUNT_NOT_FOUND: "Không tìm thấy tài khoản",
|
||||
USER_ALREADY_HAS_PASSWORD:
|
||||
"Người dùng đã có mật khẩu. Cung cấp mật khẩu để xóa tài khoản.",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "Email xác minh chưa được bật",
|
||||
EMAIL_ALREADY_VERIFIED: "Email đã được xác minh",
|
||||
EMAIL_MISMATCH: "Email không khớp",
|
||||
SESSION_NOT_FRESH: "Phiên không còn mới",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "Tài khoản được liên kết đã tồn tại",
|
||||
VALIDATION_ERROR: "Lỗi xác thực",
|
||||
MISSING_FIELD: "Trường này là bắt buộc",
|
||||
PASSWORD_ALREADY_SET: "Người dùng đã có mật khẩu được đặt",
|
||||
};
|
||||
41
packages/i18n/src/locales/zh.ts
Normal file
41
packages/i18n/src/locales/zh.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import type { TranslationDictionary } from "../types";
|
||||
|
||||
/**
|
||||
* Simplified Chinese translations
|
||||
*/
|
||||
export const zh: TranslationDictionary = {
|
||||
USER_NOT_FOUND: "用户未找到",
|
||||
FAILED_TO_CREATE_USER: "创建用户失败",
|
||||
FAILED_TO_CREATE_SESSION: "创建会话失败",
|
||||
FAILED_TO_UPDATE_USER: "更新用户失败",
|
||||
FAILED_TO_GET_SESSION: "获取会话失败",
|
||||
INVALID_PASSWORD: "密码无效",
|
||||
INVALID_EMAIL: "邮箱无效",
|
||||
INVALID_EMAIL_OR_PASSWORD: "邮箱或密码无效",
|
||||
INVALID_USER: "用户无效",
|
||||
SOCIAL_ACCOUNT_ALREADY_LINKED: "社交账户已绑定",
|
||||
PROVIDER_NOT_FOUND: "提供商未找到",
|
||||
INVALID_TOKEN: "令牌无效",
|
||||
TOKEN_EXPIRED: "令牌已过期",
|
||||
FAILED_TO_GET_USER_INFO: "获取用户信息失败",
|
||||
USER_EMAIL_NOT_FOUND: "用户邮箱未找到",
|
||||
EMAIL_NOT_VERIFIED: "邮箱未验证",
|
||||
PASSWORD_TOO_SHORT: "密码太短",
|
||||
PASSWORD_TOO_LONG: "密码太长",
|
||||
USER_ALREADY_EXISTS: "用户已存在",
|
||||
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL: "用户已存在,请使用其他邮箱",
|
||||
EMAIL_CAN_NOT_BE_UPDATED: "邮箱无法更新",
|
||||
CREDENTIAL_ACCOUNT_NOT_FOUND: "凭证账户未找到",
|
||||
SESSION_EXPIRED: "会话已过期,请重新验证身份以执行此操作",
|
||||
FAILED_TO_UNLINK_LAST_ACCOUNT: "无法取消绑定最后一个账户",
|
||||
ACCOUNT_NOT_FOUND: "账户未找到",
|
||||
USER_ALREADY_HAS_PASSWORD: "用户已设置密码,请提供密码以删除账户",
|
||||
VERIFICATION_EMAIL_NOT_ENABLED: "验证邮件未启用",
|
||||
EMAIL_ALREADY_VERIFIED: "邮箱已验证",
|
||||
EMAIL_MISMATCH: "邮箱不匹配",
|
||||
SESSION_NOT_FRESH: "会话已过时",
|
||||
LINKED_ACCOUNT_ALREADY_EXISTS: "已绑定账户已存在",
|
||||
VALIDATION_ERROR: "验证错误",
|
||||
MISSING_FIELD: "此字段为必填项",
|
||||
PASSWORD_ALREADY_SET: "用户已设置密码",
|
||||
};
|
||||
@@ -3,6 +3,6 @@ import { defineConfig } from "tsdown";
|
||||
export default defineConfig({
|
||||
dts: { build: true, incremental: true },
|
||||
format: ["esm"],
|
||||
entry: ["./src/index.ts", "./src/client.ts"],
|
||||
entry: ["./src/index.ts", "./src/client.ts", "./src/locales/index.ts"],
|
||||
treeshake: true,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user