diff --git a/src/components/video-editor/SettingsPanel.tsx b/src/components/video-editor/SettingsPanel.tsx index 9ea6279d1..3e18ed30c 100644 --- a/src/components/video-editor/SettingsPanel.tsx +++ b/src/components/video-editor/SettingsPanel.tsx @@ -624,6 +624,7 @@ const APP_LANGUAGE_LABELS: Record = { "pt-BR": "Português", "zh-CN": "簡體中文", "zh-TW": "繁體中文", + bn: "বাংলা", }; function loadPreviewImage(url: string) { diff --git a/src/contexts/I18nContext.tsx b/src/contexts/I18nContext.tsx index da831a168..ab47bf79b 100644 --- a/src/contexts/I18nContext.tsx +++ b/src/contexts/I18nContext.tsx @@ -84,6 +84,13 @@ import zhTWLaunch from "@/i18n/locales/zh-TW/launch.json"; import zhTWSettings from "@/i18n/locales/zh-TW/settings.json"; import zhTWShortcuts from "@/i18n/locales/zh-TW/shortcuts.json"; import zhTWTimeline from "@/i18n/locales/zh-TW/timeline.json"; +import bnCommon from "@/i18n/locales/bn/common.json"; +import bnDialogs from "@/i18n/locales/bn/dialogs.json"; +import bnEditor from "@/i18n/locales/bn/editor.json"; +import bnLaunch from "@/i18n/locales/bn/launch.json"; +import bnSettings from "@/i18n/locales/bn/settings.json"; +import bnShortcuts from "@/i18n/locales/bn/shortcuts.json"; +import bnTimeline from "@/i18n/locales/bn/timeline.json"; const LOCALE_STORAGE_KEY = "recordly.locale"; @@ -180,6 +187,15 @@ const messages: Record = { dialogs: zhTWDialogs, shortcuts: zhTWShortcuts, }, + bn: { + common: bnCommon, + launch: bnLaunch, + editor: bnEditor, + timeline: bnTimeline, + settings: bnSettings, + dialogs: bnDialogs, + shortcuts: bnShortcuts, + }, } as const; interface I18nContextValue { diff --git a/src/i18n/config.ts b/src/i18n/config.ts index 567d72efe..a8038cf8a 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -11,6 +11,7 @@ export const SUPPORTED_LOCALES = [ "pt-BR", "zh-CN", "zh-TW", + "bn", ] as const; export const I18N_NAMESPACES = [ diff --git a/src/i18n/locales/bn/common.json b/src/i18n/locales/bn/common.json new file mode 100644 index 000000000..f70fd3081 --- /dev/null +++ b/src/i18n/locales/bn/common.json @@ -0,0 +1,26 @@ +{ + "app": { + "name": "Recordly", + "editorTitle": "Recordly এডিটর", + "subtitle": "স্ক্রিন রেকর্ডিং এবং এডিটিং", + "language": "ভাষা", + "manageRecordings": "রেকর্ডিং ফোল্ডার খুলুন" + }, + "actions": { + "cancel": "বাতিল", + "close": "বন্ধ করুন", + "export": "এক্সপোর্ট", + "load": "লোড", + "redo": "পুনরায় করুন", + "reset": "রিসেট", + "save": "সংরক্ষণ", + "undo": "পূর্বাবস্থায় ফেরান", + "delete": "মুছে ফেলুন", + "done": "সম্পন্ন" + }, + "errors": { + "invalidFileType": "অকার্যকর ফাইল ধরন", + "failedToUploadImage": "ছবি আপলোড করতে ব্যর্থ হয়েছে", + "fileReadError": "ফাইলটি পড়ার সময় একটি সমস্যা হয়েছে।" + } +} diff --git a/src/i18n/locales/bn/dialogs.json b/src/i18n/locales/bn/dialogs.json new file mode 100644 index 000000000..3667d60eb --- /dev/null +++ b/src/i18n/locales/bn/dialogs.json @@ -0,0 +1,62 @@ +{ + "export": { + "pleaseTryAgain": "অনুগ্রহ করে আবার চেষ্টা করুন", + "compilingGifProgress": "GIF কম্পাইল হচ্ছে... {{progress}}%", + "compilingGifWait": "GIF কম্পাইল হচ্ছে... কিছুটা সময় লাগতে পারে", + "takeMoment": "এটিতে কিছুটা সময় লাগতে পারে...", + "exportFailed": "এক্সপোর্ট ব্যর্থ হয়েছে", + "compilingGifTitle": "GIF কম্পাইল করা হচ্ছে", + "exportingFormat": "{{format}} এক্সপোর্ট হচ্ছে", + "exportComplete": "এক্সপোর্ট সম্পন্ন হয়েছে", + "formatReady": "আপনার {{format}} ফাইল প্রস্তুত", + "showInFolder": "ফোল্ডারে দেখান", + "compiling": "কম্পাইল হচ্ছে", + "renderingFrames": "ফ্রেম রেন্ডার হচ্ছে", + "processing": "প্রসেসিং হচ্ছে...", + "status": "অবস্থা", + "format": "ফরম্যাট", + "compilingStatus": "কম্পাইল হচ্ছে...", + "frames": "ফ্রেম", + "cancelExport": "এক্সপোর্ট বাতিল করুন", + "reopenSaveDialog": "সংরক্ষণ ডায়ালগ পুনরায় খুলুন", + "savedSuccess": "{{format}} সফলভাবে সংরক্ষিত হয়েছে!" + }, + "addFont": { + "title": "Google ফন্ট যোগ করুন", + "heading": "Google ফন্ট যোগ করুন", + "description": "আপনার অ্যানোটেশনে ব্যবহারের জন্য Google Fonts থেকে কাস্টম ফন্ট যোগ করুন।", + "urlLabel": "Google Fonts Import URL", + "urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap", + "urlHelp": "Google Fonts থেকে এটি নিন: ফন্ট নির্বাচন করুন → \"Get font\" চাপুন → @import URL কপি করুন", + "nameLabel": "প্রদর্শনের নাম", + "namePlaceholder": "আমার কাস্টম ফন্ট", + "nameHelp": "ফন্ট নির্বাচকে এটি যেভাবে প্রদর্শিত হবে", + "adding": "যোগ হচ্ছে...", + "addFont": "ফন্ট যোগ করুন", + "enterUrl": "অনুগ্রহ করে একটি Google Fonts import URL লিখুন", + "invalidUrl": "অনুগ্রহ করে একটি সঠিক Google Fonts URL দিন", + "enterName": "অনুগ্রহ করে একটি ফন্টের নাম দিন", + "extractFailed": "URL থেকে ফন্ট ফ্যামিলি পাওয়া যায়নি", + "addSuccess": "\"{{name}}\" ফন্ট সফলভাবে যোগ করা হয়েছে", + "addFailed": "ফন্ট যোগ করতে ব্যর্থ হয়েছে", + "loadTimeout": "ফন্ট লোড হতে অতিরিক্ত সময় নিচ্ছে। URL পরীক্ষা করে আবার চেষ্টা করুন।", + "loadFailed": "ফন্টটি লোড করা যায়নি। Google Fonts URL সঠিক কিনা তা পরীক্ষা করুন।" + }, + "shortcutsConfig": { + "title": "কীবোর্ড শর্টকাট", + "configurable": "কনফিগারযোগ্য", + "fixed": "নির্দিষ্ট", + "pressEscToCancel": "বাতিল করতে Esc চাপুন", + "clickToChange": "পরিবর্তন করতে ক্লিক করুন", + "pressAKey": "যেকোনো কী চাপুন…", + "alreadyUsedBy": "ইতিমধ্যে {{action}}-এ ব্যবহৃত হচ্ছে", + "swap": "অদলবদল করুন", + "reserved": "এই শর্টকাটটি \"{{label}}\"-এর জন্য সংরক্ষিত এবং পুনরায় নির্ধারণ করা যাবে না।", + "saved": "কীবোর্ড শর্টকাট সংরক্ষিত হয়েছে", + "resetNotice": "ডিফল্ট শর্টকাটে রিসেট করা হয়েছে — প্রয়োগ করতে সংরক্ষণ ক্লিক করুন", + "instructions": "একটি শর্টকাটে ক্লিক করে নতুন কী চাপুন। বাতিল করতে Esc চাপুন।", + "resetToDefaults": "ডিফল্টে রিসেট করুন", + "cancel": "বাতিল", + "save": "সংরক্ষণ" + } +} diff --git a/src/i18n/locales/bn/editor.json b/src/i18n/locales/bn/editor.json new file mode 100644 index 000000000..4ad86657c --- /dev/null +++ b/src/i18n/locales/bn/editor.json @@ -0,0 +1,199 @@ +{ + "cloud": { + "signInRequired": "শেয়ারেবল লিংক তৈরির আগে Recordly-তে সাইন ইন করুন।", + "prepareFailed": "শেয়ার করার জন্য বর্তমান এডিট প্রস্তুত করা যায়নি।", + "uploadFailed": "ক্লাউড আপলোড ব্যর্থ হয়েছে।", + "linkCreated": "শেয়ার লিংক তৈরি হয়েছে", + "linkCopied": "লিংক কপি করা হয়েছে", + "copyFailed": "লিংক কপি করা যায়নি। নির্বাচন করে ম্যানুয়ালি কপি করুন।", + "copied": "কপি হয়েছে", + "copy": "কপি করুন", + "preparing": "বর্তমান এডিট প্রস্তুত হচ্ছে…", + "createLink": "লিংক তৈরি করুন", + "heading": "ক্লাউডে শেয়ার করুন", + "ready": "আপনার ভিডিও শেয়ার করার জন্য প্রস্তুত।", + "openPage": "শেয়ার পেজ খুলুন", + "notes": "নোট", + "publish": "পাবলিশ করুন এবং লিংক তৈরি করুন", + "createLinkTitle": "একটি শেয়ারেবল লিংক তৈরি করুন", + "notesPlaceholder": "দর্শকদের জন্য প্রসঙ্গ, নির্দেশনা বা সংক্ষিপ্ত সারসংক্ষেপ যোগ করুন…", + "description": "বর্তমান এডিটটি Recordly ভিউয়িং ও ফিডব্যাক পেজে পাবলিশ করুন। কোনো ডাউনলোডের প্রয়োজন নেই। শেয়ার করা ভিডিওগুলো ১০৮০p পর্যন্ত তৈরি করা হয়।", + "uploading": "আপলোড হচ্ছে… {progress}%", + "googleUnavailable": "Google সাইন-ইন এখনও সক্রিয় নয়। আপাতত ইমেল ব্যবহার করুন অথবা অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।", + "xUnavailable": "X সাইন-ইন এখনও সক্রিয় নয়। আপাতত ইমেল ব্যবহার করুন অথবা অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।", + "providerUnavailable": "এই সাইন-ইন পদ্ধতিটি Recordly-তে এখনও সক্রিয় নয়। আপাতত ইমেল ব্যবহার করুন।", + "enterEmail": "প্রথমে আপনার ইমেল ঠিকানা দিন।", + "resetSent": "পাসওয়ার্ড রিসেট ইমেল পাঠানো হয়েছে।", + "accountHeading": "আপনার Recordly একাউন্ট", + "signInHeading": "Recordly-তে সাইন ইন করুন", + "signInShareDescription": "এই ভিডিওটি পাবলিশ করতে এবং এর শেয়ার লিংক ম্যানেজ করতে সাইন ইন করুন।", + "signInDescription": "আপনার রেকর্ডিং এবং শেয়ার করা লিংকগুলো অ্যাক্সেস করুন।", + "signingOut": "সাইন আউট হচ্ছে…", + "signOut": "সাইন আউট", + "signingIn": "সাইন ইন হচ্ছে…", + "signIn": "সাইন ইন", + "or": "অথবা", + "email": "ইমেল", + "password": "পাসওয়ার্ড", + "forgotPassword": "পাসওয়ার্ড ভুলে গেছেন?", + "unavailable": "এই বিল্ডে ক্লাউড সাইন-ইন এখনও উপলব্ধ নয়। আপনি এখনও আপনার কম্পিউটারে ভিডিও সংরক্ষণ করতে পারেন।", + "createShareLink": "শেয়ার লিংক তৈরি করুন", + "done": "সম্পন্ন", + "addingVideo": "ভিডিও যোগ হচ্ছে…", + "preparingFootage": "টাইমলাইনের জন্য ফুটেজ এবং অডিও প্রস্তুত হচ্ছে।" + }, + "library": { + "videos": "ভিডিওসমূহ" + }, + "playback": { + "play": "চালান", + "pause": "বিরতি", + "skipBack": "পেছনে যান", + "skipForward": "সামনে যান", + "muteUnmute": "মিউট/আনমিউট", + "volume": "প্রিভিউ ভলিউম" + }, + "annotations": { + "settings": "অ্যানোটেশন সেটিংস", + "active": "সক্রিয়", + "text": "টেক্সট", + "image": "ছবি", + "arrow": "তীরচিহ্ন", + "blur": "ব্লার", + "textContent": "টেক্সট বিষয়বস্তু", + "textPlaceholder": "আপনার টেক্সট লিখুন...", + "fontStyle": "ফন্ট স্টাইল", + "selectStyle": "স্টাইল নির্বাচন করুন", + "size": "আকার", + "toggleBold": "বোল্ড টগল করুন", + "toggleItalic": "ইটালিক টগল করুন", + "toggleUnderline": "আন্ডারলাইন টগল করুন", + "alignLeft": "বামে সারিবদ্ধ করুন", + "alignCenter": "মাঝখানে সারিবদ্ধ করুন", + "alignRight": "ডানে সারিবদ্ধ করুন", + "textColor": "টেক্সটের রঙ", + "background": "ব্যাকগ্রাউন্ড", + "none": "কিছুই নয়", + "clearBackground": "ব্যাকগ্রাউন্ড মুছুন", + "uploadImage": "ছবি আপলোড করুন", + "supportedFormats": "সমর্থিত ফরম্যাট: JPG, PNG, GIF, WebP", + "arrowDirection": "তীরের দিক", + "strokeWidth": "স্ট্রোকের পুরুত্ব: {{width}}px", + "arrowColor": "তীরের রঙ", + "deleteAnnotation": "অ্যানোটেশন মুছুন", + "shortcutsAndTips": "শর্টকাট এবং টিপস", + "tipSelectAnnotation": "ওভারল্যাপ করা অ্যানোটেশন সেকশনে প্লেহেড নিয়ে যান এবং আইটেম নির্বাচন করুন।", + "tipCycleForward": "ওভারল্যাপিং আইটেমগুলোর মধ্য দিয়ে যেতে Tab চাপুন।", + "tipCycleBackward": "পেছনে যেতে Shift+Tab চাপুন।", + "imageUploadSuccess": "ছবি সফলভাবে আপলোড হয়েছে!", + "imageUploadError": "অনুগ্রহ করে একটি JPG, PNG, GIF, বা WebP ছবি ফাইল আপলোড করুন।", + "blurStrength": "ব্লার মাত্রা: {{strength}}", + "solidColor": "সলিড রঙ (সেন্সরশিপ)", + "borderRadius": "বর্ডার রেডিয়াস" + }, + + "fontStyles": { + "classic": "ক্লাসিক", + "editor": "এডিটর", + "strong": "স্ট্রং", + "typewriter": "টাইপরাইটার", + "deco": "ডেকো", + "simple": "সাধারণ", + "modern": "মডার্ন", + "clean": "ক্লিন" + }, + "format": { + "mp4Video": "MP4 ভিডিও", + "mp4Description": "উচ্চ মানের ভিডিও ফাইল", + "gifAnimation": "GIF অ্যানিমেশন", + "gifDescription": "শেয়ার করার উপযোগী অ্যানিমেটেড ছবি" + }, + "gifOptions": { + "frameRate": "ফ্রেম রেট", + "outputSize": "আউটপুট আকার", + "outputDimensions": "আউটপুট: {{width}} × {{height}}px", + "loopAnimation": "লুপ অ্যানিমেশন", + "loopDescription": "GIF অবিরাম চলতে থাকবে" + }, + "tutorial": { + "howTrimmingWorks": "ট্রিমিং কীভাবে কাজ করে", + "title": "ট্রিমিং যেভাবে কাজ করে", + "understanding": "ভিডিওর অপ্রয়োজনীয় অংশ কীভাবে বাদ দেবেন তা জানুন।", + "descriptionP1": "ট্রিম টুল ব্যবহার করে যে অংশগুলো আপনি আপনার ভিডিও থেকে", + "descriptionRemove": "বাদ দিতে", + "descriptionP2": "চান তা নির্ধারণ করা হয়।", + "descriptionP3": "টাইমলাইনের যে অংশটি লাল ট্রিম সেগমেন্ট দ্বারা আচ্ছাদিত থাকবে, তা এক্সপোর্টের সময় কেটে বাদ দেওয়া হবে।", + "visualExample": "ভিজ্যুয়াল উদাহরণ", + "removed": "বাদ দেওয়া হয়েছে", + "kept": "রাখা হয়েছে", + "finalVideo": "চূড়ান্ত ভিডিও", + "part": "পার্ট {{number}}", + "addTrimStep": "১. ট্রিম যোগ করুন", + "addTrimDesc": "বাদ দেওয়ার অংশ চিহ্নিত করতে T চাপুন বা কাঁচি আইকনে ক্লিক করুন।", + "adjustStep": "২. অ্যাডজাস্ট করুন", + "adjustDesc": "যে অংশটি কাটতে চান তা নিখুঁতভাবে নির্ধারণ করতে লাল অংশের প্রান্তগুলো টেনে আনুন।" + }, + "feedback": { + "trigger": "ফিডব্যাক", + "title": "ফিডব্যাক এবং যোগাযোগ", + "description": "কোনো কিছু ঠিকমতো কাজ না করলে বা কোনো কিছু অনুপস্থিত থাকলে সরাসরি যোগাযোগ করুন বা ইস্যু খুলুন।", + "emailLabel": "ইমেল", + "xLabel": "X", + "reportIssue": "ইস্যু রিপোর্ট করুন / ফিডব্যাক পাঠান", + "openFailed": "লিংক খুলতে ব্যর্থ হয়েছে।" + }, + "keyboardShortcuts": { + "trigger": "শর্টকাট", + "title": "কীবোর্ড শর্টকাট", + "description": "টাইমলাইন এবং এডিটর নিয়ন্ত্রণের দ্রুত রেফারেন্স।", + "customizeTooltip": "শর্টকাট কাস্টমাইজ করুন", + "customize": "কাস্টমাইজ", + "panTimeline": "টাইমলাইন ডানে-বামে সরান", + "zoomTimeline": "টাইমলাইন জুম করুন", + "cycleAnnotations": "অ্যানোটেশন পরিবর্তন করুন", + "tab": "Tab" + }, + "actions": { + "saveAgain": "পুনরায় সংরক্ষণ করুন", + "showInFolder": "ফোল্ডারে দেখান" + }, + "project": { + "untitled": "শিরোনামহীন", + "unsavedChangesTitle": "অসংরক্ষিত পরিবর্তন", + "unsavedChangesDescription": "{{action}} করার আগে কি বর্তমান প্রজেক্ট সংরক্ষণ করতে চান?", + "discardChanges": "পরিবর্তন বাতিল করুন", + "saveProject": "প্রজেক্ট সংরক্ষণ করুন" + }, + "exportTips": { + "autoZooms": "টিপ: সেটিংসে অটো-প্রয়োগ করা জুম বন্ধ করতে পারেন", + "experimentalBuilds": "টিপ: সেটিংসে অ্যাক্সেস চালু করে পরীক্ষামূলক বিল্ড ব্যবহার করে দেখতে পারেন", + "cursorAppearance": "টিপ: আপনি আপনার কার্সরের চেহারা কাস্টমাইজ করতে পারেন" + }, + "account": { "title": "একাউন্ট", "comingSoon": "একাউন্ট ফিচার শীঘ্রই আসছে" }, + "nativeCaptureUnavailable": { + "title": "কিছু ভাঙেনি, তবে আমরা অ্যানিমেটেড কার্সর ওভারলে রেন্ডার করতে পারব না।", + "description": "আপনার ডিভাইস নেটিভ ক্যাপচার সমর্থন করে না। বিভিন্ন কারণে এমন হতে পারে যা এখনও শনাক্ত করা যায়নি। এটি Recordly-কে ব্যাহত করে না, তবে কার্সর মসৃণ করা সম্ভব হবে না।", + "confirm": "ঠিক আছে" + }, + "exportStatus": { + "exporting": "এক্সপোর্ট হচ্ছে", + "renderingFile": "আপনার ফাইল রেন্ডার হচ্ছে।", + "preparing": "এক্সপোর্ট প্রস্তুত হচ্ছে...", + "completePercent": "{{percent}}% সম্পন্ন", + "issue": "এক্সপোর্টে সমস্যা", + "complete": "এক্সপোর্ট সম্পন্ন", + "savedSuccessfully": "আপনার ফাইলটি সফলভাবে সংরক্ষিত হয়েছে।" + }, + "export": { + "processingAudioEdits": "স্পিড/ওভারলে এডিটের সাথে অডিও প্রসেস করা হচ্ছে" + }, + "toolbar": { + "addLayer": "লেয়ার যোগ করুন", + "splitClip": "ক্লিপ স্প্লিট করুন (C)" + }, + "timeline": { + "expand": "টাইমলাইন প্রসারিত করুন", + "collapse": "টাইমলাইন সংকুচিত করুন" + }, + "openRecordingsFolder": "রেকর্ডিং ফোল্ডার খুলুন" +} diff --git a/src/i18n/locales/bn/launch.json b/src/i18n/locales/bn/launch.json new file mode 100644 index 000000000..180c4eec0 --- /dev/null +++ b/src/i18n/locales/bn/launch.json @@ -0,0 +1,96 @@ +{ + "recording": { + "home": "হোম", + "disableSystemAudio": "সিস্টেম অডিও নিষ্ক্রিয় করুন", + "enableSystemAudio": "সিস্টেম অডিও সক্রিয় করুন", + "disableMicrophone": "মাইক্রোফোন নিষ্ক্রিয় করুন", + "enableMicrophone": "মাইক্রোফোন সক্রিয় করুন", + "micToggleDisabledTip": "রেকর্ডিং চলাকালীন মাইক্রোফোন পরিবর্তন করা যাবে না", + "disableWebcam": "ওয়েবক্যাম ওভারলে নিষ্ক্রিয় করুন", + "enableWebcam": "ওয়েবক্যাম ওভারলে সক্রিয় করুন", + "countdownDelay": "কাউন্টডাউন বিলম্ব", + "noDelay": "কোনো বিলম্ব নেই", + "record": "রেকর্ড করুন", + "recordingFolder": "রেকর্ডিং পাথ: {{path}}", + "chooseRecordingsFolder": "রেকর্ডিং পাথ নির্বাচন করুন", + "folderPath": "পাথ: /{{name}}/", + "openVideoFile": "ভিডিও ফাইল খুলুন", + "openProject": "প্রজেক্ট খুলুন", + "hideHudFromVideo": "রেকর্ডিং থেকে HUD লুকান", + "showHudInVideo": "রেকর্ডিংয়ে HUD দেখান", + "hideHud": "HUD লুকান", + "closeApp": "অ্যাপ বন্ধ করুন", + "screens": "স্ক্রিনসমূহ", + "windows": "উইন্ডোসমূহ", + "screen": "স্ক্রিন", + "window": "উইন্ডো", + "noSourcesFound": "কোনো সোর্স পাওয়া যায়নি", + "microphone": "মাইক্রোফোন", + "turnOffMicrophone": "মাইক্রোফোন বন্ধ করুন", + "selectMicToEnable": "চালু করতে একটি মাইক্রোফোন নির্বাচন করুন", + "noMicrophonesFound": "কোনো মাইক্রোফোন পাওয়া যায়নি", + "webcam": "ওয়েবক্যাম", + "turnOffWebcam": "ওয়েবক্যাম বন্ধ করুন", + "hideFloatingWebcamPreview": "ভাসমান প্রিভিউ লুকান", + "showFloatingWebcamPreview": "ভাসমান প্রিভিউ দেখান", + "selectWebcamToEnable": "চালু করতে একটি ওয়েবক্যাম নির্বাচন করুন", + "noWebcamsFound": "কোনো ওয়েবক্যাম পাওয়া যায়নি", + "recordingsFolder": "রেকর্ডিং পাথ", + "language": "ভাষা", + "paused": "স্থগিত", + "rec": "রেকর্ড হচ্ছে", + "resume": "পুনরায় শুরু করুন", + "pause": "বিরতি দিন", + "stop": "থামান", + "cancel": "বাতিল", + "more": "আরও", + "update": { + "update": "আপডেট", + "updated": "আপডেট হয়েছে", + "idleTitle": "আপডেট চেক করুন।", + "checkingTitle": "আপডেট চেক করা হচ্ছে...", + "downloadingTitle": "আপডেট ডাউনলোড হচ্ছে...", + "errorTitle": "আপডেট পরীক্ষা ব্যর্থ হয়েছে। পুনরায় চেষ্টা করতে ক্লিক করুন।", + "upToDateTitle": "Recordly {{version}} আপ-টু-ডেট রয়েছে।", + "availableTitle": "Recordly {{version}} পাওয়া যাচ্ছে।", + "availableGenericTitle": "একটি আপডেট পাওয়া যাচ্ছে।" + } + }, + "sourceSelector": { + "loadingSources": "সোর্স লোড হচ্ছে...", + "screens": "স্ক্রিনসমূহ", + "windows": "উইন্ডোসমূহ", + "noScreensAvailable": "কোনো স্ক্রিন পাওয়া যায়নি", + "noWindowsAvailable": "কোনো উইন্ডো পাওয়া যায়নি", + "windowsNote": "শুধুমাত্র দৃশ্যমান (মিনিমাইজ না করা) উইন্ডোগুলো রেকর্ড করা যাবে।", + "windowPlaceholder": "উইন্ডো", + "cancel": "বাতিল", + "share": "শেয়ার করুন" + }, + "permissions": { + "screenRecordingNeeded": "শুরু করার আগে Recordly-র স্ক্রিন রেকর্ডিংয়ের অনুমতি প্রয়োজন। সিস্টেম সেটিংস খোলা হয়েছে। অনুমতি সক্রিয় করার পর Recordly বন্ধ করে পুনরায় খুলুন।", + "screenRecordingMissing": "স্ক্রিন রেকর্ডিংয়ের অনুমতি এখনও পাওয়া যায়নি। সিস্টেম সেটিংস আবার খোলা হয়েছে। এটি সক্রিয় করে রেকর্ডিংয়ের আগে Recordly বন্ধ করে পুনরায় চালু করুন।", + "accessibilityNeeded": "কার্সর ট্র্যাকিংয়ের জন্য Recordly-র অ্যাক্সেসিবিলিটি অনুমতিও প্রয়োজন। সিস্টেম সেটিংস খোলা হয়েছে। অনুমতি চালু করার পর Recordly বন্ধ করে আবার খুলুন।", + "accessibilityMissing": "অ্যাক্সেসিবিলিটি অনুমতি এখনও দেওয়া হয়নি। সিস্টেম সেটিংস আবার খোলা হয়েছে। এটি সক্রিয় করে রেকর্ডিংয়ের আগে Recordly বন্ধ করে পুনরায় চালু করুন।", + "selectSource": "রেকর্ড করার জন্য অনুগ্রহ করে একটি সোর্স নির্বাচন করুন", + "systemAudioUnavailable": "এই সোর্সের জন্য সিস্টেম অডিও উপলব্ধ নয়। সিস্টেম অডিও ছাড়াই রেকর্ডিং চলবে।", + "microphoneDenied": "মাইক্রোফোন ব্যবহারের অনুমতি বাতিল করা হয়েছে। মাইক্রোফোন অডিও ছাড়াই রেকর্ডিং চলবে।", + "failedToStart": "রেকর্ডিং শুরু করতে ব্যর্থ হয়েছে: {{error}}", + "failedToStartGeneric": "রেকর্ডিং শুরু করতে ব্যর্থ হয়েছে" + }, + "updateToast": { + "availableTitle": "আপডেট উপলব্ধ", + "experimentalAvailableTitle": "পরীক্ষামূলক আপডেট উপলব্ধ", + "experimentalDescription": "আপনি পরীক্ষামূলক আপডেটে সম্মতি দিয়েছেন, তাই সাধারণ ব্যবহারকারীদের জন্য উন্মুক্ত হওয়ার আগেই Recordly-র সর্বশেষ আপডেট পরীক্ষা করার সুযোগ পাচ্ছেন।", + "downloadingTitle": "আপনার আপডেট ডাউনলোড হচ্ছে", + "readyTitle": "রিস্টার্ট করার জন্য প্রস্তুত", + "checkErrorTitle": "আপডেট চেক করা যায়নি", + "downloadErrorTitle": "আপডেট ডাউনলোড করা যায়নি", + "experimentalBadge": "পরীক্ষামূলক", + "previewBadge": "প্রিভিউ", + "notNow": "এখন নয়", + "updateNow": "এখনই আপডেট করুন", + "restartToUpdate": "আপডেট করতে রিস্টার্ট করুন", + "tryAgain": "আবার চেষ্টা করুন" + } +} diff --git a/src/i18n/locales/bn/settings.json b/src/i18n/locales/bn/settings.json new file mode 100644 index 000000000..6ca8871be --- /dev/null +++ b/src/i18n/locales/bn/settings.json @@ -0,0 +1,262 @@ +{ + "updates": { + "title": "আপডেট", + "experimental": "পরীক্ষামূলক আপডেট", + "experimentalDescription": "আপনি পরীক্ষামূলক আপডেটে সম্মতি দিয়েছেন, তাই সাধারণ ব্যবহারকারীদের জন্য উন্মুক্ত হওয়ার আগেই Recordly-র সর্বশেষ আপডেট পরীক্ষা করার সুযোগ পাচ্ছেন।", + "saveFailed": "আপডেট চ্যানেল পরিবর্তন করতে ব্যর্থ হয়েছে।" + }, + "zoom": { + "level": "জুম লেভেল", + "selectRegion": "অ্যাডজাস্ট করতে একটি জুম অঞ্চল নির্বাচন করুন", + "deleteZoom": "জুম মুছুন", + "modeAuto": "স্বয়ংক্রিয়", + "modeManual": "ম্যানুয়াল", + "modeManualDescription": "এই জুমের জন্য একটি নির্দিষ্ট ফোকাস পয়েন্ট নির্ধারণ করুন", + "modeAutoDescription": "কার্সর জুম করা ভিউয়ের কিনারার কাছে গেলে ক্যামেরা পুনরায় কেন্দ্রে চলে আসে" + }, + "trim": { + "deleteRegion": "ট্রিম অঞ্চল মুছুন" + }, + "speed": { + "playbackSpeed": "প্লেব্যাক স্পিড", + "selectRegion": "অ্যাডজাস্ট করতে একটি স্পিড অঞ্চল নির্বাচন করুন", + "deleteRegion": "স্পিড অঞ্চল মুছুন", + "label": "স্পিড" + }, + "clip": { + "title": "ক্লিপ", + "mute": "ক্লিপ মিউট করুন", + "resetAudioSettings": "অডিও সেটিংস রিসেট করুন", + "mutedState": "অডিও মিউট করা আছে", + "unmutedState": "অডিও চলছে", + "separateClipFromAudio": "ক্লিপ থেকে অডিও আলাদা করুন", + "delete": "ক্লিপ মুছুন" + }, + "effects": { + "title": "ভিডিও ইফেক্ট", + "show": "দেখান", + "showCursor": "কার্সর দেখান", + "loopCursor": "কার্সর লুপ করুন", + "cursorStyle": "কার্সর স্টাইল", + "cursorStyleOptions": { + "macos": "macOS", + "tahoe": "Tahoe", + "tahoe-inverted": "Tahoe ইনভার্টেড", + "windows11": "Windows 11", + "dot": "ডট", + "figma": "মিনিমাল", + "lavender": "ল্যাভেন্ডার", + "parched": "পার্চড", + "chooper": "চুপার", + "amongus": "অ্যামাং আস", + "turtle": "টার্টল" + }, + "backgroundBlur": "ব্লার", + "zoomMotionBlur": "জুম মোশন ব্লার", + "auto": "স্বয়ংক্রিয়", + "connectZooms": "জুম সংযুক্ত করুন", + "connectZoomsDescription": "টানা ক্যামেরার মুভমেন্টে একাধিক ধারাবাহিক জুম অঞ্চলকে মসৃণভাবে যুক্ত করুন।", + "autoApplyFreshRecordingZooms": "নতুন রেকর্ডিংয়ে স্বয়ংক্রিয়ভাবে জুম প্রয়োগ করুন", + "autoApplyFreshRecordingZoomsDescription": "নতুন রেকর্ডিং খোলার সময় স্বয়ংক্রিয়ভাবে এজ-রিসেন্টারিং জুমের পরামর্শ দিন।", + "zoomGeneralTitle": "সাধারণ", + "zoomGeneralDescription": "প্রতিটি জুম ট্রানজিশনের জন্য গ্লোবাল মোশন সেটিংস।", + "zoomInTitle": "জুম ইন", + "zoomInDescription": "ক্যামেরা কীভাবে জুম অঞ্চলে প্রবেশ করবে তা নিয়ন্ত্রণ করুন।", + "zoomOutTitle": "জুম আউট", + "zoomOutDescription": "ক্যামেরা কীভাবে জুম অঞ্চল থেকে বের হবে তা নিয়ন্ত্রণ করুন।", + "connectedZoomTitle": "জুমের মধ্যবর্তী অংশ", + "connectedZoomDescription": "সংযুক্তি সক্রিয় থাকলে একাধিক ধারাবাহিক জুম অঞ্চলের মধ্যবর্তী গ্লাইড টিউন করুন।", + "motionPresetsTitle": "মোশন প্রিসেট", + "motionPresetsZoomHint": "জুম মোশন প্রিসেট সেটিংসে পাওয়া যাবে।", + "animationPresets": "অ্যানিমেশন প্রিসেট", + "cursorMotionPresets": "কার্সর মোশন প্রিসেট", + "motionPresets": { + "focused": { + "label": "ফোকাসড", + "description": "ডেমো, ওয়াকথ্রু এবং দৈনন্দিন রেকর্ডিংয়ের জন্য দ্রুত ও নিখুঁত মোশন।" + }, + "smooth": { + "label": "স্মুথ", + "description": "উপস্থাপনা, কিনোট-স্টাইল ভিডিও এবং মার্জিত রিভিলের জন্য কোমল মোশন।" + } + }, + "zoomInDuration": "জুম ইন সময়কাল", + "zoomInOverlap": "জুম ইন ওভারল্যাপ", + "zoomOutDuration": "জুম আউট সময়কাল", + "zoomInEasing": "জুম ইন কার্ভ", + "zoomOutEasing": "জুম আউট কার্ভ", + "connectedZoomGap": "সংযুক্ত জুম গ্যাপ", + "connectedZoomDuration": "সংযুক্ত জুম সময়কাল", + "connectedZoomEasing": "সংযুক্ত প্যান কার্ভ", + "zoomEasingOptions": { + "recordly": "Recordly", + "glide": "গ্লাইড", + "smooth": "স্মুথ", + "snappy": "স্ন্যাপী", + "linear": "লিনিয়ার" + }, + "cursorSize": "কার্সরের আকার", + "cursorSmoothing": "কার্সর স্মুথিং", + "cursorSpringStiffness": "কার্সর স্প্রিং স্টিফনেস", + "cursorSpringDamping": "কার্সর স্প্রিং ড্যাম্পিং", + "cursorSpringMass": "কার্সর স্প্রিং ম্যাস", + "off": "বন্ধ", + "cursorClickEffects": { + "title": "ক্লিক ইফেক্ট", + "advanced": "উন্নত", + "advancedShow": "উন্নত ক্লিক ইফেক্ট নিয়ন্ত্রণ দেখান", + "advancedHide": "উন্নত ক্লিক ইফেক্ট নিয়ন্ত্রণ লুকান", + "color": "ইফেক্টের রঙ", + "size": "ইফেক্টের আকার", + "opacity": "ইফেক্টের অস্বচ্ছতা", + "duration": "ইফেক্টের সময়কাল", + "none": { + "label": "বন্ধ", + "description": "কোনো ক্লিক গ্রাফিক্স নেই। ক্লিক করার সময় কেবল কার্সরের গতি পরিবর্তন হয়।" + }, + "ripple": { + "label": "রিপল", + "description": "প্রতিটি ক্লিক থেকে সম্প্রসারিত রিং তৈরি হয় যাতে মোশনে ট্যাপগুলো স্পষ্টভাবে বোঝা যায়।" + }, + "spotlight": { + "label": "স্পটলাইট", + "description": "ক্লিক করা অংশকে জোর দেওয়ার জন্য পয়েন্টারের চারপাশে একটি হালকা আলো জ্বলে ওঠে।" + }, + "echo": { + "label": "ইকো", + "description": "একটি পরিষ্কার পালসসহ বাইরের দিকে ছড়িয়ে পড়া একজোড়া রিং।" + } + }, + "cursorMotionBlur": "কার্সর মোশন ব্লার", + "cursorClickBounce": "কার্সর ক্লিক বাউন্স", + "cursorClickBounceDuration": "বাউন্স স্পিড", + "cursorSway": "কার্সর দোলা", + "webcam": "ওয়েবক্যাম ওভারলে", + "webcamFootage": "ওয়েবক্যাম ফুটেজ", + "webcamFootageDescription": "এই ভিডিওর সাথে কোনো ওয়েবক্যাম ফুটেজ যুক্ত নেই", + "uploadWebcamFootage": "ফুটেজ আপলোড করুন", + "replaceWebcamFootage": "ফুটেজ প্রতিস্থাপন করুন", + "removeWebcamFootage": "ফুটেজ সরান", + "webcamFootageAdded": "ওয়েবক্যাম ফুটেজ যুক্ত করা হয়েছে", + "webcamFootageRemoved": "ওয়েবক্যাম ফুটেজ সরানো হয়েছে", + "webcamSize": "ওয়েবক্যামের আকার", + "webcamWidth": "ওয়েবক্যামের প্রস্থ", + "webcamHeight": "ওয়েবক্যামের উচ্চতা", + "webcamCrop": "ওয়েবক্যাম ক্রপ", + "webcamReactToZoom": "ওয়েবক্যাম জুমে প্রতিক্রিয়া দেখাবে", + "webcamMirror": "ওয়েবক্যাম মিরর করুন", + "webcamRoundness": "ওয়েবক্যামের গোলাকার ভাব", + "webcamShadow": "ওয়েবক্যাম ছায়া", + "shadow": "ছায়া", + "radius": "রেডিয়াস", + "roundness": "গোলাকার", + "padding": "প্যাডিং", + "paddingLinked": "সংযুক্ত (সমান)", + "paddingUnlinked": "অসংযুক্ত (অসম)", + "paddingTop": "উপরে", + "paddingBottom": "নিচে", + "paddingLeft": "বামে", + "paddingRight": "ডানে", + "removeBackground": "ব্যাকগ্রাউন্ড সরান" + }, + "sections": { + "scene": "দৃশ্য", + "captions": "ক্যাপশনসমূহ", + "caption": "ক্যাপশন", + "zoom": "জুম", + "cursor": "কার্সর", + "webcam": "ওয়েবক্যাম", + "frame": "ফ্রেম", + "crop": "ক্রপ" + }, + "captions": { + "selectOnTimeline": "এডিট করতে টাইমলাইনে একটি ক্যাপশন নির্বাচন করুন।", + "enabled": "দেখান", + "timelineQuickAdd": "টাইমলাইনে যোগ করতে মাউস রাখুন", + "language": "ভাষা", + "downloading": "ডাউনলোড হচ্ছে...", + "deleteModel": "মডেল মুছুন", + "clearModel": "মডেল ক্লিয়ার করুন", + "downloadModel": "মডেল ডাউনলোড করুন", + "generating": "তৈরি হচ্ছে...", + "generateFull": "ক্যাপশন তৈরি করুন", + "regenerateFull": "ক্যাপশন পুনরায় তৈরি করুন", + "clearFull": "ক্যাপশন ক্লিয়ার করুন", + "fontSettings": "ফন্ট সেটিংস", + "defaultFont": "ডিফল্ট", + "fontFamily": "ফন্ট", + "fontSize": "ফন্টের আকার", + "rowCount": "সারি সংখ্যা", + "animation": "অ্যানিমেশন", + "animationOff": "বন্ধ", + "animationFade": "ফেড", + "animationRise": "রাইজ", + "animationPop": "পপ", + "bottomOffset": "নিচের অফসেট", + "maxWidth": "সর্বোচ্চ প্রস্থ", + "boxRadius": "বক্স রেডিয়াস", + "backgroundOpacity": "ব্যাকগ্রাউন্ডের অস্বচ্ছতা", + "textColor": "টেক্সটের রঙ", + "editor": { + "text": "টেক্সট", + "start": "শুরু", + "end": "শেষ", + "split": "স্প্লিট", + "merge": "মার্জ", + "delete": "মুছুন" + } + }, + "crop": { + "title": "ভিডিও ক্রপ করুন", + "instruction": "ক্রপ এলাকা নির্ধারণ করতে প্রতিটি পাশে টেনে আনুন", + "top": "উপরে", + "bottom": "নিচে", + "left": "বামে", + "right": "ডানে", + "openEditor": "ক্রপ এডিটর খুলুন" + }, + "background": { + "title": "ব্যাকগ্রাউন্ড", + "image": "ছবি", + "color": "রঙ", + "gradient": "গ্রেডিয়েন্ট", + "wallpaperPreview": "ওয়ালপেপার প্রিভিউ", + "uploadCustom": "কাস্টম আপলোড করুন", + "uploadSuccess": "কাস্টম ছবি সফলভাবে আপলোড হয়েছে!", + "uploadError": "অনুগ্রহ করে একটি JPG বা JPEG ছবি ফাইল আপলোড করুন।", + "uploadErrorDescription": "শুধুমাত্র JPG এবং JPEG ছবি সমর্থিত।" + }, + "export": { + "title": "এক্সপোর্ট", + "mp4": "MP4", + "gif": "GIF", + "quality": { + "low": "কম", + "medium": "মাঝারি", + "high": "উচ্চ", + "original": "আসল" + }, + "fpsTitle": "FPS", + "loop": "লুপ", + "outputDimensions": "আউটপুট: {{dimensions}}px", + "sizePresetOriginalShort": "আসল", + "sizePresetMediumShort": "মাঝারি", + "sizePresetLargeShort": "বড়", + "loadProject": "প্রজেক্ট লোড করুন", + "saveProject": "প্রজেক্ট সংরক্ষণ করুন", + "exportVideo": "{{format}} এক্সপোর্ট করুন", + "reportBug": "বাগ রিপোর্ট করুন", + "starOnGithub": "GitHub-এ স্টার দিন" + }, + "audio": { + "title": "অডিও", + "volumeTitle": "অডিও", + "volume": "ভলিউম", + "normalize": "নরমালাইজ", + "sourceTracksTitle": "ক্লিপ সোর্স অডিও", + "systemLabel": "সোর্স সিস্টেম", + "micLabel": "সোর্স মাইক", + "mixedLabel": "সোর্স", + "deleteRegion": "অডিও মুছুন" + } +} diff --git a/src/i18n/locales/bn/shortcuts.json b/src/i18n/locales/bn/shortcuts.json new file mode 100644 index 000000000..c5be14ae3 --- /dev/null +++ b/src/i18n/locales/bn/shortcuts.json @@ -0,0 +1,16 @@ +{ + "actions": { + "addZoom": "জুম যোগ করুন", + "addTrim": "ট্রিম যোগ করুন", + "addSpeed": "স্পিড যোগ করুন", + "addAnnotation": "অ্যানোটেশন যোগ করুন", + "addKeyframe": "কি-ফ্রেম যোগ করুন", + "deleteSelected": "নির্বাচিত অংশ মুছুন", + "playPause": "চালান / থামান", + "cycleForward": "পরবর্তী অ্যানোটেশনে যান", + "cycleBackward": "পূর্ববর্তী অ্যানোটেশনে যান", + "deleteSelectedAlt": "নির্বাচিত অংশ মুছুন (বিকল্প)", + "panTimeline": "টাইমলাইন ডানে-বামে সরান", + "zoomTimeline": "টাইমলাইন জুম করুন" + } +} diff --git a/src/i18n/locales/bn/timeline.json b/src/i18n/locales/bn/timeline.json new file mode 100644 index 000000000..db45153a8 --- /dev/null +++ b/src/i18n/locales/bn/timeline.json @@ -0,0 +1,41 @@ +{ + "zoom": { + "cannotPlace": "এখানে জুম বসানো সম্ভব নয়", + "existsOrNoSpace": "এই অবস্থানে ইতিমধ্যে জুম রয়েছে অথবা পর্যাপ্ত জায়গা নেই।", + "suggestHandlerUnavailable": "জুম পরামর্শ হ্যান্ডলার অনুপলব্ধ", + "noTelemetry": "কোনো কার্সর টেলিমেট্রি পাওয়া যায়নি", + "recordFirst": "কার্সর-ভিত্তিক পরামর্শ পেতে প্রথমে একটি স্ক্রিনকাস্ট রেকর্ড করুন।", + "noUsableTelemetry": "ব্যবহারযোগ্য কোনো কার্সর টেলিমেট্রি নেই", + "notEnoughMovement": "রেকর্ডিংটিতে পর্যাপ্ত কার্সর মুভমেন্ট ডেটা নেই।", + "noInteractionMoments": "কোনো স্পষ্ট ইন্টারঅ্যাকশন মুহূর্ত পাওয়া যায়নি", + "tryRecording": "গুরুত্বপূর্ণ অ্যাকশনগুলোর আশেপাশে বিরতি বা ক্লিক রেখে রেকর্ড করার চেষ্টা করুন।", + "noAutoZoomSlots": "কোনো অটো-জুম স্লট অবশিষ্ট নেই", + "dwellPointsOverlap": "শনাক্তকৃত অবস্থানগুলো বিদ্যমান জুম অঞ্চলের সাথে ওভারল্যাপ করছে।", + "addedSuggestions": "{{count}}টি ইন্টারঅ্যাকশন-ভিত্তিক জুম পরামর্শ যোগ করা হয়েছে", + "label": "জুম {{index}}", + "addZoom": "জুম যোগ করুন (Z)", + "suggestZooms": "কার্সর থেকে জুমের পরামর্শ দিন" + }, + "trim": { + "cannotPlace": "এখানে ট্রিম বসানো সম্ভব নয়", + "existsOrNoSpace": "এই অবস্থানে ইতিমধ্যে ট্রিম রয়েছে অথবা পর্যাপ্ত জায়গা নেই।", + "label": "ট্রিম {{index}}", + "addTrim": "ট্রিম যোগ করুন (T)" + }, + "speed": { + "cannotPlace": "এখানে স্পিড বসানো সম্ভব নয়", + "existsOrNoSpace": "এই অবস্থানে ইতিমধ্যে স্পিড অঞ্চল রয়েছে অথবা পর্যাপ্ত জায়গা নেই।", + "label": "স্পিড" + }, + "annotation": { + "label": "অ্যানোটেশন", + "image": "ছবি", + "addAnnotation": "অ্যানোটেশন যোগ করুন (A)" + }, + "audio": { + "label": "অডিও" + }, + "addSpeed": "স্পিড যোগ করুন (S)", + "resizeLeft": "বামে আকার পরিবর্তন করুন", + "resizeRight": "ডানে আকার পরিবর্তন করুন" +}