diff --git a/frontend/elements/README.md b/frontend/elements/README.md index 69cb670a0..76dc2569f 100644 --- a/frontend/elements/README.md +++ b/frontend/elements/README.md @@ -567,6 +567,7 @@ Markup: Translations are currently available for the following languages: +- "bn" - Bengali - "de" - German - "en" - English - "fr" - French @@ -580,11 +581,12 @@ You can import them individually: // "https://cdn.jsdelivr.net/npm/@teamhanko/hanko-elements/dist/i18n/{en|de|all|...}.js" // if you're using CDN. +import { bn } from "@teamhanko/hanko-elements/i18n/bn"; import { de } from "@teamhanko/hanko-elements/i18n/de"; import { en } from "@teamhanko/hanko-elements/i18n/en"; import { fr } from "@teamhanko/hanko-elements/i18n/fr"; -import { zh } from "@teamhanko/hanko-elements/i18n/zh"; import { ptBR } from "@teamhanko/hanko-elements/i18n/pt-BR"; +import { zh } from "@teamhanko/hanko-elements/i18n/zh"; ``` Or import all translations at once: @@ -596,7 +598,7 @@ import { all } from "@teamhanko/hanko-elements/i18n/all"; After importing, provide the translations through the `register()` function: ```typescript -register("https://hanko.yourdomain.com", { translations: { de, en, fr, ptBR, zh } }); +register("https://hanko.yourdomain.com", { translations: { bn, de, en, fr, ptBR, zh } }); // or diff --git a/frontend/elements/package.json b/frontend/elements/package.json index f44a293cd..463951d3c 100644 --- a/frontend/elements/package.json +++ b/frontend/elements/package.json @@ -32,6 +32,9 @@ "i18n/zh": [ "dist/i18n/zh.d.ts" ], + "i18n/bn":[ + "dist/i18n/bn.d.ts" + ], "i18n/all": [ "dist/i18n/all.d.ts" ] @@ -68,6 +71,11 @@ "import": "./dist/i18n/zh.js", "require": "./dist/i18n/zh.js" }, + "./i18n/bn": { + "types": "./dist/i18n/bn.d.ts", + "import": "./dist/i18n/bn.js", + "require": "./dist/i18n/bn.js" + }, "./i18n/all": { "types": "./dist/i18n/all.d.ts", "import": "./dist/i18n/all.js", diff --git a/frontend/elements/src/i18n/all.ts b/frontend/elements/src/i18n/all.ts index 8f02118f4..8b72b79cc 100644 --- a/frontend/elements/src/i18n/all.ts +++ b/frontend/elements/src/i18n/all.ts @@ -1,7 +1,8 @@ import { Translations } from "./translations"; +import { bn } from "./bn"; import { de } from "./de"; import { en } from "./en"; import { fr } from "./fr"; import { ptBR } from "./pt-BR"; import { zh } from "./zh"; -export const all: Translations = { de, en, fr, ptBR, zh }; +export const all: Translations = { bn, de, en, fr, ptBR, zh }; diff --git a/frontend/elements/src/i18n/bn.ts b/frontend/elements/src/i18n/bn.ts new file mode 100644 index 000000000..b839e2c9e --- /dev/null +++ b/frontend/elements/src/i18n/bn.ts @@ -0,0 +1,123 @@ +import { Translation } from "./translations"; + +export const bn: Translation = { + headlines: { + error: "একটি ত্রুটি উৎপন্ন হয়েছে", + loginEmail: "সাইন ইন করুন অথবা নিবন্ধন করুন", + loginEmailNoSignup: "সাইন ইন", + loginFinished: "সফল লগইন", + loginPasscode: "পাসকোড দিন", + loginPassword: "পাসওয়ার্ড লিখুন", + registerAuthenticator: "একটি পাসকি তৈরি করুন", + registerConfirm: "অ্যাকাউন্ট তৈরি করুন", + registerPassword: "নতুন পাসওয়ার্ড সেট করুন", + profileEmails: "ইমেইল", + profilePassword: "পাসওয়ার্ড", + profilePasskeys: "পাসকি", + isPrimaryEmail: "প্রাথমিক ইমেইল", + setPrimaryEmail: "প্রাথমিক ইমেল সেট করুন", + emailVerified: "যাচাইকৃত ", + emailUnverified: "অযাচাইকৃত", + emailDelete: "মুছে ফেলা", + renamePasskey: "পাসকির নাম পরিবর্তন করুন", + deletePasskey: "পাসকি মুছুন", + lastUsedAt: "শেষবার ব্যবহার করা হয়েছে", + createdAt: "এ নির্মিত", + connectedAccounts: "সংযুক্ত অ্যাকাউন্ট", + deleteAccount: "অ্যাকাউন্ট মুছে ফেলুন", + accountNotFound: "অ্যাকাউন্ট পাওয়া যাচ্ছে না", + }, + texts: { + enterPasscode: 'যে পাসকোডটি পাঠানো হয়েছিল "{emailAddress}" এ তা লিখুন.', + setupPasskey: + "একটি পাসকি দিয়ে সহজে এবং নিরাপদে আপনার অ্যাকাউন্টে সাইন ইন করুন। দ্রষ্টব্য: আপনার বায়োমেট্রিক ডেটা শুধুমাত্র আপনার ডিভাইসে সংরক্ষিত থাকে এবং কখনই কারো সাথে শেয়ার করা হবে না।", + createAccount: + '"{emailAddress}"-এর জন্য কোনো অ্যাকাউন্ট বিদ্যমান নেই। আপনি একটি নতুন অ্যাকাউন্ট তৈরি করতে চান?', + passwordFormatHint: + "{minLength} এবং {maxLength} অক্ষরের মধ্যে হতে হবে।", + manageEmails: + "পাসকোড প্রমাণীকরণের জন্য ব্যবহৃত হয়।", + changePassword: "একটি নতুন পাসওয়ার্ড সেট করুন।", + managePasskeys: "আপনার পাসকিগুলি আপনাকে এই অ্যাকাউন্টে সাইন ইন করতে দেয়৷", + isPrimaryEmail: + "এই ইমেলটি আপনার পাসকিগুলির জন্য ব্যবহারকারীর নাম হিসাবে ব্যবহার করা হবে৷", + setPrimaryEmail: + "নতুন পাসকিগুলির জন্য ব্যবহারকারীর নাম হিসাবে ব্যবহার করার জন্য এই ইমেলটি সেট করুন৷", + emailVerified: "এই ইমেল ঠিকানা যাচাই করা হয়েছে.", + emailUnverified: "এই ইমেল ঠিকানা যাচাই করা হয়নি.", + emailDelete: + "আপনি এই ইমেল ঠিকানা মুছে ফেললে, এটি আর সাইন ইন করতে ব্যবহার করা যাবে না.", + emailDeleteThirdPartyConnection: + "আপনি এই ইমেল ঠিকানা মুছে ফেললে, এটি আর সাইন ইন করতে ব্যবহার করা যাবে না.", + emailDeletePrimary: + "প্রাথমিক ইমেল ঠিকানা মুছে ফেলা যাবে না.", + renamePasskey: + "পাসকির জন্য একটি নাম সেট করুন।", + deletePasskey: + "আপনার অ্যাকাউন্ট থেকে এই পাসকি মুছুন.", + deleteAccount: + "আপনি কি এই অ্যাকাউন্টটি মুছে ফেলার বিষয়ে নিশ্চিত? সমস্ত ডেটা অবিলম্বে মুছে ফেলা হবে এবং পুনরুদ্ধার করা যাবে না।", + noAccountExists: + '"{emailAddress}"-এর জন্য কোনো অ্যাকাউন্ট বিদ্যমান নেই।', + }, + labels: { + or: "বা", + no: "না", + yes: "হ্যাঁ", + email: "ইমেইল", + continue: "চালিয়ে যান", + skip: "এড়িয়ে যান", + save: "সংরক্ষণ", + password: "পাসওয়ার্ড", + signInPassword: "একটি পাসওয়ার্ড দিয়ে সাইন ইন", + signInPasscode: "একটি পাসকোড দিয়ে সাইন ইন করুন", + forgotYourPassword: "আপনি কি পাসওয়ার্ড ভুলে গেছেন?", + back: "পেছনে", + signInPasskey: "একটি পাসকি দিয়ে সাইন ইন করুন", + registerAuthenticator: "একটি পাসকি তৈরি করুন", + signIn: "সাইন ইন করুন", + signUp: "সাইন আপ", + sendNewPasscode: "নতুন কোড পাঠান", + passwordRetryAfter: "{passwordRetryAfter} এ আবার চেষ্টা করুন", + passcodeResendAfter: "{passcodeResendAfter} এ একটি নতুন কোডের অনুরোধ করুন", + unverifiedEmail: "অযাচাইকৃত", + primaryEmail: "প্রাথমিক", + setAsPrimaryEmail: "প্রাথমিক হিসাবে সেট করুন", + verify: "যাচাই করুন", + delete: "মুছুন", + newEmailAddress: "নতুন ইমেইল ঠিকানা", + newPassword: "নতুন পাসওয়ার্ড", + rename: "নাম পরিবর্তন করুন", + newPasskeyName: "নতুন পাসকি নাম", + addEmail: "ইমেল যোগ করুন", + changePassword: "পাসওয়ার্ড পরিবর্তন করুন", + createPasskey: "একটি পাসকি তৈরি করুন", + webauthnUnsupported: "পাসকিগুলি আপনার ব্রাউজার দ্বারা সমর্থিত নয়৷", + signInWith: "{provider} দিয়ে সাইন ইন করুন", + deleteAccount: "হ্যাঁ, এই অ্যাকাউন্টটি মুছুন.", + }, + errors: { + somethingWentWrong: + "একটি প্রযুক্তিগত ত্রুটি ঘটেছে. অনুগ্রহ করে একটু পরে আবার চেষ্টা করুন.", + requestTimeout: "অনুরোধ সময় শেষ হয়েছে.", + invalidPassword: "ভুল ইমেইল বা পাসওয়ার্ড।", + invalidPasscode: "দেওয়া পাসকোড সঠিক ছিল না।", + passcodeAttemptsReached: + "পাসকোডটি অনেকবার ভুলভাবে প্রবেশ করানো হয়েছে৷ একটি নতুন কোড অনুরোধ করুন.", + tooManyRequests: + "অনেক অনুরোধ করা হয়েছে. অনুগ্রহ করে অনুরোধকৃত অপারেশন পুনরাবৃত্তি করার জন্য অপেক্ষা করুন।", + unauthorized: "আপনার সেশনের মেয়াদ শেষ হয়ে গেছে। অনুগ্রহ পূর্বক আরো একবার প্রবেশ করুন.", + invalidWebauthnCredential: "এই পাসকি আর ব্যবহার করা যাবে না।", + passcodeExpired: "পাসকোড মেয়াদ শেষ হয়েছে. একটি নতুন অনুরোধ করুন.", + userVerification: + "ব্যবহারকারী যাচাইকরণ প্রয়োজন. অনুগ্রহ করে নিশ্চিত করুন যে আপনার প্রমাণীকরণকারী ডিভাইসটি একটি পিন বা বায়োমেট্রিক দ্বারা সুরক্ষিত।", + emailAddressAlreadyExistsError: "ইমেল ঠিকানাটি ইতিমধ্যেই বিদ্যমান।", + maxNumOfEmailAddressesReached: "আর কোন ইমেল ঠিকানা যোগ করা যাবে না.", + thirdPartyAccessDenied: + "অ্যাক্সেস অস্বীকার করা হয়েছে৷ অনুরোধটি ব্যবহারকারীর দ্বারা বাতিল করা হয়েছে বা প্রদানকারী অন্যান্য কারণে অ্যাক্সেস অস্বীকার করেছে৷", + thirdPartyMultipleAccounts: + "অ্যাকাউন্ট শনাক্ত করতে পারে না। ইমেল ঠিকানা একাধিক অ্যাকাউন্ট দ্বারা ব্যবহৃত হয়।", + thirdPartyUnverifiedEmail: + "ইমেল যাচাইকরণ প্রয়োজন. অনুগ্রহ করে আপনার প্রদানকারীর সাথে ব্যবহৃত ইমেল ঠিকানা যাচাই করুন।", + }, +}; diff --git a/frontend/elements/webpack.config.cjs b/frontend/elements/webpack.config.cjs index 49560cba9..c85711373 100644 --- a/frontend/elements/webpack.config.cjs +++ b/frontend/elements/webpack.config.cjs @@ -47,6 +47,13 @@ module.exports = { type: "module", }, }, + bn: { + filename: "i18n/bn.js", + import: "./src/i18n/bn.ts", + library: { + type: "module", + }, + }, all: { filename: "i18n/all.js", import: "./src/i18n/all.ts",