From 7f258a994e31570b646cbe1109ad2c8de29e7411 Mon Sep 17 00:00:00 2001 From: dhairyashil Date: Sun, 2 Feb 2025 05:16:45 +0530 Subject: [PATCH 1/4] Implement custom i18n package for Embedded Chat with language support --- packages/i18n/.eslintrc.json | 25 +++++ packages/i18n/.prettierrc | 4 + packages/i18n/babel.config.js | 13 +++ packages/i18n/package.json | 16 ++++ packages/i18n/src/i18n.js | 35 +++++++ packages/i18n/src/index.d.ts | 17 ++++ packages/i18n/src/index.js | 3 + packages/i18n/src/locales/ar.i18n.json | 93 ++++++++++++++++++ packages/i18n/src/locales/bn.i18n.json | 93 ++++++++++++++++++ packages/i18n/src/locales/en.i18n.json | 94 +++++++++++++++++++ packages/i18n/src/locales/es.i18n.json | 93 ++++++++++++++++++ packages/i18n/src/locales/fr.i18n.json | 93 ++++++++++++++++++ packages/i18n/src/locales/hi.i18n.json | 93 ++++++++++++++++++ packages/i18n/src/locales/pt.i18n.json | 93 ++++++++++++++++++ packages/i18n/src/locales/ru.i18n.json | 93 ++++++++++++++++++ packages/react/package.json | 1 + packages/react/rollup.config.js | 1 + packages/react/src/views/EmbeddedChat.js | 8 ++ .../react/src/views/RoomMembers/RoomMember.js | 3 +- yarn.lock | 10 ++ 20 files changed, 880 insertions(+), 1 deletion(-) create mode 100644 packages/i18n/.eslintrc.json create mode 100644 packages/i18n/.prettierrc create mode 100644 packages/i18n/babel.config.js create mode 100644 packages/i18n/package.json create mode 100644 packages/i18n/src/i18n.js create mode 100644 packages/i18n/src/index.d.ts create mode 100644 packages/i18n/src/index.js create mode 100644 packages/i18n/src/locales/ar.i18n.json create mode 100644 packages/i18n/src/locales/bn.i18n.json create mode 100644 packages/i18n/src/locales/en.i18n.json create mode 100644 packages/i18n/src/locales/es.i18n.json create mode 100644 packages/i18n/src/locales/fr.i18n.json create mode 100644 packages/i18n/src/locales/hi.i18n.json create mode 100644 packages/i18n/src/locales/pt.i18n.json create mode 100644 packages/i18n/src/locales/ru.i18n.json diff --git a/packages/i18n/.eslintrc.json b/packages/i18n/.eslintrc.json new file mode 100644 index 0000000000..7e12575d07 --- /dev/null +++ b/packages/i18n/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "parser": "@babel/eslint-parser", + "env": { + "node": true, + "es6": true + }, + "extends": [ + "airbnb-base", + "prettier" + ], + "plugins": ["prettier"], + "rules": { + "prettier/prettier": "error", + "no-console": "off", + "no-unused-vars": "warn", + "no-underscore-dangle": "off", + "no-param-reassign": "off", + "consistent-return": "off", + "import/no-extraneous-dependencies": "off", + "no-nested-ternary": "off", + "no-undef": "error", + "no-restricted-exports": "off" + } + } + \ No newline at end of file diff --git a/packages/i18n/.prettierrc b/packages/i18n/.prettierrc new file mode 100644 index 0000000000..474613576c --- /dev/null +++ b/packages/i18n/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "semi": true + } \ No newline at end of file diff --git a/packages/i18n/babel.config.js b/packages/i18n/babel.config.js new file mode 100644 index 0000000000..f485650aa3 --- /dev/null +++ b/packages/i18n/babel.config.js @@ -0,0 +1,13 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + modules: false, + bugfixes: true, + targets: { node: 'current' }, + }, + ], + ], + }; + \ No newline at end of file diff --git a/packages/i18n/package.json b/packages/i18n/package.json new file mode 100644 index 0000000000..7d46ca5309 --- /dev/null +++ b/packages/i18n/package.json @@ -0,0 +1,16 @@ +{ + "name": "@embeddedchat/i18n", + "version": "0.1.0", + "main": "src/index.js", + "scripts": { + "format": "prettier --write 'src/' ", + "format:check": "prettier --check 'src/' ", + "lint": "eslint 'src/**/*.js'", + "lint:fix": "eslint 'src/**/*.js' --fix", + "test:lint": "eslint src/**/*.js" + }, + "devDependencies": { + "eslint": "^8.30.0", + "prettier": "^2.8.1" + } +} diff --git a/packages/i18n/src/i18n.js b/packages/i18n/src/i18n.js new file mode 100644 index 0000000000..73502ef18c --- /dev/null +++ b/packages/i18n/src/i18n.js @@ -0,0 +1,35 @@ +class I18n { + constructor() { + this.translations = {}; + this.currentLang = 'en'; + this.loadTranslations(this.currentLang); + } + + async loadTranslations(lang) { + try { + const module = await import(`./locales/${lang}.i18n.json`); + this.translations = module.default || module; + this.currentLang = lang; + } catch (error) { + console.error(`Failed to load translations for ${lang}:`, error); + const fallbackModule = await import('./locales/en.i18n.json'); + this.translations = fallbackModule.default || fallbackModule; + } + } + + t(key) { + return this.translations[key] || key; + } + + changeLanguage(lang) { + this.loadTranslations(lang); + } + + getCurrentLang() { + return this.currentLang; + } +} + +const i18n = new I18n(); + +export default i18n; diff --git a/packages/i18n/src/index.d.ts b/packages/i18n/src/index.d.ts new file mode 100644 index 0000000000..fc4c20e0ea --- /dev/null +++ b/packages/i18n/src/index.d.ts @@ -0,0 +1,17 @@ +declare module '@embeddedchat/i18n' { + class I18n { + translations: Record; + currentLang: string; + + constructor(); + + loadTranslations(lang: string): void; + t(key: string): string; + changeLanguage(lang: string): void; + getCurrentLang(): string; + } + + const i18n: I18n; + + export default i18n; +} diff --git a/packages/i18n/src/index.js b/packages/i18n/src/index.js new file mode 100644 index 0000000000..97614c8045 --- /dev/null +++ b/packages/i18n/src/index.js @@ -0,0 +1,3 @@ +import i18n from './i18n'; + +export default i18n; diff --git a/packages/i18n/src/locales/ar.i18n.json b/packages/i18n/src/locales/ar.i18n.json new file mode 100644 index 0000000000..eeac81bb39 --- /dev/null +++ b/packages/i18n/src/locales/ar.i18n.json @@ -0,0 +1,93 @@ +{ + "#general": "#عام", + "All": "الكل", + "Are_You_Sure": "هل أنت متأكد؟", + "Audios": "الملفات الصوتية", + "Cancel": "إلغاء", + "Close": "إغلاق", + "Delete": "حذف", + "Delete_Forever_Warning": "حذف الملف سيؤدي إلى حذفه نهائيًا. لا يمكن التراجع عن ذلك.", + "Download": "تنزيل", + "Editing_Message": "تحرير الرسالة", + "Email_Or_Username": "البريد الإلكتروني أو اسم المستخدم", + "Esc_Enter_Instruction": "اضغط على ESC للإلغاء · اضغط على ENTER للحفظ", + "Files": "الملفات", + "Images": "الصور", + "Invite_Link": "رابط الدعوة", + "Invite_Link_Will_Expire_On": "رابط الدعوة سينتهي في", + "Invite_Members": "دعوة أعضاء", + "Join": "انضمام", + "Login": "تسجيل الدخول", + "Login_To_Chat": "تسجيل الدخول للدردشة", + "Logout": "تسجيل الخروج", + "Maximize": "تكبير", + "Members": "الأعضاء", + "Mentions": "الإشارات", + "Message": "رسالة", + "Message_Too_Long": "الرسالة طويلة جدًا!", + "Minimize": "تصغير", + "No_Files_Found": "لا توجد ملفات", + "No_Mentions_Found": "لم يتم العثور على إشارات", + "No_Pinned_Messages": "لا توجد رسائل مثبتة", + "No_Starred_Messages": "لا توجد رسائل في المفضلة", + "Ok": "موافق", + "Options": "الخيارات", + "Password": "كلمة المرور", + "Pinned_Messages": "الرسائل المثبتة", + "Read_Only_Room": "هذه الغرفة فقط للقراءة", + "Ready_To_Chat": "هل أنت جاهز للدردشة؟ سجل الدخول الآن للانضمام إلى المرح.", + "Report_message": "الإبلاغ عن الرسالة", + "Report_this_message": "هل ترغب في الإبلاغ عن هذه الرسالة؟", + "Room_Information": "معلومات الغرفة", + "Search_Messages": "البحث في الرسائل", + "Search_Threads": "بحث في المواضيع", + "Search_Members": "بحث في الأعضاء", + "Search_Files": "بحث في الملفات", + "Send_It_As_Attachment_Instead": "هل ترغب في إرسالها كمرفق بدلاً من ذلك؟", + "Sign_In_To_Chat": "سجل الدخول للدردشة", + "Starred_Messages": "الرسائل المفضلة", + "Texts": "النصوص", + "Threads": "المواضيع", + "Toast_Channel_Not_Exist": "القناة غير موجودة. سيتم تسجيل الخروج.", + "Toast_Copied_To_Clipboard": "تم النسخ إلى الحافظة", + "Toast_Copy_Failed": "فشل النسخ إلى الحافظة.", + "Toast_Error_In_Copying_Message": "خطأ في نسخ الرسالة", + "Toast_Error_In_Copying_Message_Link": "خطأ في نسخ رابط الرسالة", + "Toast_Error_In_Deleting_Message": "خطأ في حذف الرسالة", + "Toast_Error_In_Editing_Message": "خطأ في تحرير الرسالة، يرجى تسجيل الدخول مرة أخرى", + "Toast_Error_In_File_Deleting": "خطأ في حذف الملف", + "Toast_Error_In_Pinning_Message": "خطأ في تثبيت الرسالة", + "Toast_Error_In_Reporting_Message": "خطأ في الإبلاغ عن الرسالة", + "Toast_File_Deleted": "تم حذف الملف", + "Toast_Invalid_TOTP": "رمز TOTP (كلمة المرور لمرة واحدة المعتمدة على الوقت) غير صالح.", + "Toast_Invalid_Username_Password": "اسم المستخدم أو كلمة المرور غير صحيحة. تحقق من بيانات اعتمادك وحاول مرة أخرى", + "Toast_Logged_In": "تم تسجيل الدخول بنجاح", + "Toast_Media_Type_Not_Accepted": "نوع الوسائط غير مقبول", + "Toast_Message_Copied": "تم نسخ الرسالة بنجاح", + "Toast_Message_Deleted": "تم حذف الرسالة بنجاح", + "Toast_Message_Link_Copied": "تم نسخ رابط الرسالة بنجاح", + "Toast_Message_Pinned": "تم تثبيت الرسالة", + "Toast_Message_Reported": "تم الإبلاغ عن الرسالة بنجاح", + "Toast_Message_Starred": "تم وضع الرسالة في المفضلة", + "Toast_Message_Unpinned": "تم إلغاء تثبيت الرسالة", + "Toast_Message_Unstarred": "تم إزالة الرسالة من المفضلة", + "Toast_Not_Have_Permission_To_Access_Channel": "ليس لديك إذن للوصول إلى هذه القناة. سيتم تسجيل الخروج.", + "Toast_Open_Authentication_App": "يرجى فتح تطبيق المصادقة الخاص بك وإدخال الرمز.", + "Toast_Theme_Copied": "تم نسخ السمة إلى الحافظة.", + "Tooltip_Audio_Message": "رسالة صوتية", + "Tooltip_Bold": "عريض", + "Tooltip_Cancel_Recording": "إلغاء التسجيل", + "Tooltip_Code": "رمز", + "Tooltip_Emoji": "إيموجي", + "Tooltip_Finish_Recording": "إنهاء التسجيل", + "Tooltip_Italic": "مائل", + "Tooltip_Link": "رابط", + "Tooltip_More": "المزيد", + "Tooltip_Multiline": "متعدد الأسطر", + "Tooltip_Pinned": "مثبت", + "Tooltip_Starred": "في المفضلة", + "Tooltip_Strike": "مشطوب", + "Tooltip_Upload_File": "رفع ملف", + "Tooltip_Video_Message": "رسالة فيديو", + "Videos": "فيديوهات" +} diff --git a/packages/i18n/src/locales/bn.i18n.json b/packages/i18n/src/locales/bn.i18n.json new file mode 100644 index 0000000000..c0c99dc148 --- /dev/null +++ b/packages/i18n/src/locales/bn.i18n.json @@ -0,0 +1,93 @@ +{ + "#general": "#সাধারণ", + "All": "সব", + "Are_You_Sure": "আপনি কি নিশ্চিত?", + "Audios": "অডিও", + "Cancel": "বাতিল", + "Close": "বন্ধ", + "Delete": "মুছে ফেলুন", + "Delete_Forever_Warning": "ফাইল মুছে ফেললে তা চিরকাল মুছে যাবে। এটি পূর্বাবস্থায় ফিরিয়ে আনা যাবে না।", + "Download": "ডাউনলোড", + "Editing_Message": "বার্তা সম্পাদনা", + "Email_Or_Username": "ইমেইল বা ব্যবহারকারীর নাম", + "Esc_Enter_Instruction": "esc বাতিল করতে · enter সেভ করতে", + "Files": "ফাইল", + "Images": "ছবি", + "Invite_Link": "আমন্ত্রণ লিংক", + "Invite_Link_Will_Expire_On": "আপনার আমন্ত্রণ লিংকটি সময়মতো শেষ হয়ে যাবে", + "Invite_Members": "সদস্য আমন্ত্রণ করুন", + "Join": "যোগদান", + "Login": "লগ ইন", + "Login_To_Chat": "চ্যাটে লগ ইন করুন", + "Logout": "লগ আউট", + "Maximize": "সম্পূর্ণ করুন", + "Members": "সদস্যগণ", + "Mentions": "উল্লেখ", + "Message": "বার্তা", + "Message_Too_Long": "বার্তা খুব দীর্ঘ!", + "Minimize": "সঙ্কুচিত করুন", + "No_Files_Found": "কোন ফাইল পাওয়া যায়নি", + "No_Mentions_Found": "কোন উল্লেখ পাওয়া যায়নি", + "No_Pinned_Messages": "কোন বার্তা পিন করা হয়নি", + "No_Starred_Messages": "কোন বার্তা চিহ্নিত করা হয়নি", + "Ok": "ওকে", + "Options": "বিকল্প", + "Password": "পাসওয়ার্ড", + "Pinned_Messages": "পিন করা বার্তাগুলি", + "Read_Only_Room": "এই রুমটি শুধুমাত্র পাঠযোগ্য", + "Ready_To_Chat": "চ্যাটে কথা বলার জন্য প্রস্তুত? এখন লগ ইন করুন এবং মজা করুন।", + "Report_message": "বার্তা রিপোর্ট করুন", + "Report_this_message": "এই বার্তা রিপোর্ট করবেন?", + "Room_Information": "রুম তথ্য", + "Search_Messages": "বার্তা অনুসন্ধান", + "Search_Threads": "থ্রেড অনুসন্ধান", + "Search_Members": "সদস্য অনুসন্ধান", + "Search_Files": "ফাইল অনুসন্ধান", + "Send_It_As_Attachment_Instead": "এটি একটি সংযুক্তি হিসেবে পাঠাবেন কি?", + "Sign_In_To_Chat": "চ্যাটে সাইন ইন করুন", + "Starred_Messages": "চিহ্নিত বার্তাগুলি", + "Texts": "টেক্সট", + "Threads": "থ্রেডস", + "Toast_Channel_Not_Exist": "চ্যানেল বিদ্যমান নেই। লগ আউট হচ্ছে।", + "Toast_Copied_To_Clipboard": "কপি করা হয়েছে ক্লিপবোর্ডে", + "Toast_Copy_Failed": "ক্লিপবোর্ডে কপি করা ব্যর্থ হয়েছে।", + "Toast_Error_In_Copying_Message": "বার্তা কপি করতে ত্রুটি", + "Toast_Error_In_Copying_Message_Link": "বার্তা লিঙ্ক কপি করতে ত্রুটি", + "Toast_Error_In_Deleting_Message": "বার্তা মুছে ফেলতে ত্রুটি", + "Toast_Error_In_Editing_Message": "বার্তা সম্পাদন করতে ত্রুটি, পুনরায় লগ ইন করুন", + "Toast_Error_In_File_Deleting": "ফাইল মুছে ফেলতে ত্রুটি", + "Toast_Error_In_Pinning_Message": "বার্তা পিন করতে ত্রুটি", + "Toast_Error_In_Reporting_Message": "বার্তা রিপোর্ট করতে ত্রুটি", + "Toast_File_Deleted": "ফাইল মুছে ফেলা হয়েছে", + "Toast_Invalid_TOTP": "অবৈধ TOTP (সময়ভিত্তিক এককালীন পাসওয়ার্ড)।", + "Toast_Invalid_Username_Password": "অবৈধ ব্যবহারকারীর নাম বা পাসওয়ার্ড। অনুগ্রহ করে আপনার শংসাপত্র পরীক্ষা করুন এবং আবার চেষ্টা করুন", + "Toast_Logged_In": "সফলভাবে লগ ইন হয়েছে", + "Toast_Media_Type_Not_Accepted": "মিডিয়া টাইপ গ্রহণ করা হয়নি", + "Toast_Message_Copied": "বার্তা সফলভাবে কপি করা হয়েছে", + "Toast_Message_Deleted": "বার্তা সফলভাবে মুছে ফেলা হয়েছে", + "Toast_Message_Link_Copied": "বার্তা লিঙ্ক সফলভাবে কপি করা হয়েছে", + "Toast_Message_Pinned": "বার্তা পিন করা হয়েছে", + "Toast_Message_Reported": "বার্তা সফলভাবে রিপোর্ট করা হয়েছে", + "Toast_Message_Starred": "বার্তা চিহ্নিত করা হয়েছে", + "Toast_Message_Unpinned": "বার্তা আনপিন করা হয়েছে", + "Toast_Message_Unstarred": "বার্তা চিহ্নিত থেকে মুছে ফেলা হয়েছে", + "Toast_Not_Have_Permission_To_Access_Channel": "এই চ্যানেলে প্রবেশের জন্য আপনার অনুমতি নেই। লগ আউট হচ্ছে।", + "Toast_Open_Authentication_App": "অনুগ্রহ করে আপনার প্রমাণীকরণ অ্যাপটি খুলুন এবং কোডটি প্রবেশ করান।", + "Toast_Theme_Copied": "থিম সফলভাবে ক্লিপবোর্ডে কপি করা হয়েছে।", + "Tooltip_Audio_Message": "অডিও বার্তা", + "Tooltip_Bold": "বোল্ড", + "Tooltip_Cancel_Recording": "রেকর্ডিং বাতিল করুন", + "Tooltip_Code": "কোড", + "Tooltip_Emoji": "ইমোজি", + "Tooltip_Finish_Recording": "রেকর্ডিং শেষ করুন", + "Tooltip_Italic": "ইটালিক", + "Tooltip_Link": "লিঙ্ক", + "Tooltip_More": "আরও", + "Tooltip_Multiline": "একাধিক লাইন", + "Tooltip_Pinned": "পিন করা", + "Tooltip_Starred": "চিহ্নিত করা", + "Tooltip_Strike": "স্ট্রাইক", + "Tooltip_Upload_File": "ফাইল আপলোড করুন", + "Tooltip_Video_Message": "ভিডিও বার্তা", + "Videos": "ভিডিও" +} diff --git a/packages/i18n/src/locales/en.i18n.json b/packages/i18n/src/locales/en.i18n.json new file mode 100644 index 0000000000..0622d22881 --- /dev/null +++ b/packages/i18n/src/locales/en.i18n.json @@ -0,0 +1,94 @@ +{ + "#general": "#general", + "All": "All", + "Are_You_Sure": "Are you sure?", + "Audios": "Audios", + "Cancel": "Cancel", + "Close": "Close", + "Delete": "Delete", + "Delete_Forever_Warning": "Deleting a file will delete it forever. This cannot be undone.", + "Download": "Download", + "Editing_Message": "Editing Message", + "Email_Or_Username": "Email or username", + "Esc_Enter_Instruction": "esc to cancel · enter to save", + "Files": "Files", + "Images": "Images", + "Invite_Link": "Invite Link", + "Invite_Link_Will_Expire_On": "Your invite link will expire on", + "Invite_Members": "Invite Members", + "Join": "Join", + "Login": "Login", + "Login_To_Chat": "Login to chat", + "Logout": "Logout", + "Maximize": "Maximize", + "Members": "Members", + "Mentions": "Mentions", + "Message": "Message", + "Message_Too_Long": "Message Too Long!", + "Minimize": "Minimize", + "No_Files_Found": "No Files Found", + "No_Mentions_Found": "No mentions found", + "No_Pinned_Messages": "No Pinned Messages", + "No_Starred_Messages": "No Starred Messages", + "Ok": "Ok", + "Options": "Options", + "Password": "Password", + "Pinned_Messages": "Pinned Messages", + "Read_Only_Room": "This room is read only", + "Ready_To_Chat": "Ready to chat? Login now to join the fun.", + "Report_message": "Report message", + "Report_this_message": "Report this message?", + "Room_Information": "Room Information", + "Search_Messages": "Search Messages", + "Search_Threads": "Search Threads", + "Search_Members": "Search Members", + "Search_Files": "Search Files", + "Send_It_As_Attachment_Instead": "Send it as attachment instead?", + "Sign_In_To_Chat": "Sign in to chat", + "Starred_Messages": "Starred Messages", + "Texts": "Texts", + "Threads": "Threads", + "Toast_Channel_Not_Exist": "Channel doesn't exist. Logging out.", + "Toast_Copied_To_Clipboard": "Copied to clipboard", + "Toast_Copy_Failed": "Copy to clipboard failed.", + "Toast_Error_In_Copying_Message": "Error in copying message", + "Toast_Error_In_Copying_Message_Link": "Error in copying message link", + "Toast_Error_In_Deleting_Message": "Error in deleting message", + "Toast_Error_In_Editing_Message": "Error editing message, login again", + + "Toast_Error_In_File_Deleting": "Error in deleting file", + "Toast_Error_In_Pinning_Message": "Error pinning message", + "Toast_Error_In_Reporting_Message": "Error in reporting message", + "Toast_File_Deleted": "File deleted", + "Toast_Invalid_TOTP": "Invalid TOTP Time-based One-time Password.", + "Toast_Invalid_Username_Password": "Invalid username or password. Please check your credentials and try again", + "Toast_Logged_In": "Successfully logged in", + "Toast_Media_Type_Not_Accepted": "Media Type Not Accepted", + "Toast_Message_Copied": "Message copied successfully", + "Toast_Message_Deleted": "Message deleted successfully", + "Toast_Message_Link_Copied": "Message link copied successfully", + "Toast_Message_Pinned": "Message pinned", + "Toast_Message_Reported": "Message reported successfully", + "Toast_Message_Starred": "Message starred", + "Toast_Message_Unpinned": "Message unpinned", + "Toast_Message_Unstarred": "Message unstarred", + "Toast_Not_Have_Permission_To_Access_Channel": "You don't have permission to access this channel. Logging out", + "Toast_Open_Authentication_App": "Please Open your authentication app and enter the code.", + "Toast_Theme_Copied": "Theme copied to clipboard.", + "Tooltip_Audio_Message": "Audio Message", + "Tooltip_Bold": "Bold", + "Tooltip_Cancel_Recording": "Cancel Recording", + "Tooltip_Code": "Code", + "Tooltip_Emoji": "Emoji", + "Tooltip_Finish_Recording": "Finish Recording", + "Tooltip_Italic": "Italic", + "Tooltip_Link": "Link", + "Tooltip_More": "More", + "Tooltip_Multiline": "Multiline", + "Tooltip_Pinned": "Pinned", + "Tooltip_Starred": "Starred", + "Tooltip_Strike": "Strike", + "Tooltip_Upload_File": "Upload File", + "Tooltip_Video_Message": "Video Message", + "Videos": "Videos" +} diff --git a/packages/i18n/src/locales/es.i18n.json b/packages/i18n/src/locales/es.i18n.json new file mode 100644 index 0000000000..3576863c08 --- /dev/null +++ b/packages/i18n/src/locales/es.i18n.json @@ -0,0 +1,93 @@ +{ + "#general": "#general", + "All": "Todos", + "Are_You_Sure": "¿Estás seguro?", + "Audios": "Audios", + "Cancel": "Cancelar", + "Close": "Cerrar", + "Delete": "Eliminar", + "Delete_Forever_Warning": "Eliminar un archivo lo eliminará para siempre. Esto no se puede deshacer.", + "Download": "Descargar", + "Editing_Message": "Editando mensaje", + "Email_Or_Username": "Correo electrónico o nombre de usuario", + "Esc_Enter_Instruction": "esc para cancelar · enter para guardar", + "Files": "Archivos", + "Images": "Imágenes", + "Invite_Link": "Enlace de invitación", + "Invite_Link_Will_Expire_On": "Tu enlace de invitación expirará el", + "Invite_Members": "Invitar miembros", + "Join": "Unirse", + "Login": "Iniciar sesión", + "Login_To_Chat": "Iniciar sesión para chatear", + "Logout": "Cerrar sesión", + "Maximize": "Maximizar", + "Members": "Miembros", + "Mentions": "Menciones", + "Message": "Mensaje", + "Message_Too_Long": "¡Mensaje demasiado largo!", + "Minimize": "Minimizar", + "No_Files_Found": "No se encontraron archivos", + "No_Mentions_Found": "No se encontraron menciones", + "No_Pinned_Messages": "No hay mensajes anclados", + "No_Starred_Messages": "No hay mensajes destacados", + "Ok": "Ok", + "Options": "Opciones", + "Password": "Contraseña", + "Pinned_Messages": "Mensajes anclados", + "Read_Only_Room": "Esta sala es solo de lectura", + "Ready_To_Chat": "¿Listo para chatear? Inicia sesión ahora para unirte a la diversión.", + "Report_message": "Reportar mensaje", + "Report_this_message": "¿Reportar este mensaje?", + "Room_Information": "Información de la sala", + "Search_Messages": "Buscar mensajes", + "Search_Threads": "Buscar hilos", + "Search_Members": "Buscar miembros", + "Search_Files": "Buscar archivos", + "Send_It_As_Attachment_Instead": "¿Enviar como archivo adjunto en su lugar?", + "Sign_In_To_Chat": "Inicia sesión para chatear", + "Starred_Messages": "Mensajes destacados", + "Texts": "Textos", + "Threads": "Hilos", + "Toast_Channel_Not_Exist": "El canal no existe. Cierre sesión.", + "Toast_Copied_To_Clipboard": "Copiado al portapapeles", + "Toast_Copy_Failed": "Error al copiar al portapapeles.", + "Toast_Error_In_Copying_Message": "Error al copiar el mensaje", + "Toast_Error_In_Copying_Message_Link": "Error al copiar el enlace del mensaje", + "Toast_Error_In_Deleting_Message": "Error al eliminar el mensaje", + "Toast_Error_In_Editing_Message": "Error al editar el mensaje, inicie sesión nuevamente", + "Toast_Error_In_File_Deleting": "Error al eliminar el archivo", + "Toast_Error_In_Pinning_Message": "Error al fijar el mensaje", + "Toast_Error_In_Reporting_Message": "Error al reportar el mensaje", + "Toast_File_Deleted": "Archivo eliminado", + "Toast_Invalid_TOTP": "TOTP (Contraseña de un solo uso basada en el tiempo) inválida.", + "Toast_Invalid_Username_Password": "Nombre de usuario o contraseña inválidos. Verifique sus credenciales e intente nuevamente", + "Toast_Logged_In": "Inicio de sesión exitoso", + "Toast_Media_Type_Not_Accepted": "Tipo de medio no aceptado", + "Toast_Message_Copied": "Mensaje copiado exitosamente", + "Toast_Message_Deleted": "Mensaje eliminado exitosamente", + "Toast_Message_Link_Copied": "Enlace del mensaje copiado exitosamente", + "Toast_Message_Pinned": "Mensaje anclado", + "Toast_Message_Reported": "Mensaje reportado exitosamente", + "Toast_Message_Starred": "Mensaje destacado", + "Toast_Message_Unpinned": "Mensaje desanclado", + "Toast_Message_Unstarred": "Mensaje desmarcado", + "Toast_Not_Have_Permission_To_Access_Channel": "No tienes permiso para acceder a este canal. Cierre sesión.", + "Toast_Open_Authentication_App": "Por favor, abra su aplicación de autenticación e ingrese el código.", + "Toast_Theme_Copied": "Tema copiado al portapapeles.", + "Tooltip_Audio_Message": "Mensaje de audio", + "Tooltip_Bold": "Negrita", + "Tooltip_Cancel_Recording": "Cancelar grabación", + "Tooltip_Code": "Código", + "Tooltip_Emoji": "Emoji", + "Tooltip_Finish_Recording": "Terminar grabación", + "Tooltip_Italic": "Cursiva", + "Tooltip_Link": "Enlace", + "Tooltip_More": "Más", + "Tooltip_Multiline": "Multilínea", + "Tooltip_Pinned": "Anclado", + "Tooltip_Starred": "Destacado", + "Tooltip_Strike": "Tachado", + "Tooltip_Upload_File": "Subir archivo", + "Tooltip_Video_Message": "Mensaje de video", + "Videos": "Videos" +} diff --git a/packages/i18n/src/locales/fr.i18n.json b/packages/i18n/src/locales/fr.i18n.json new file mode 100644 index 0000000000..6e82d799cb --- /dev/null +++ b/packages/i18n/src/locales/fr.i18n.json @@ -0,0 +1,93 @@ +{ + "#general": "#général", + "All": "Tout", + "Are_You_Sure": "Êtes-vous sûr ?", + "Audios": "Audios", + "Cancel": "Annuler", + "Close": "Fermer", + "Delete": "Supprimer", + "Delete_Forever_Warning": "Supprimer un fichier le supprimera définitivement. Cela ne peut pas être annulé.", + "Download": "Télécharger", + "Editing_Message": "Édition du message", + "Email_Or_Username": "Email ou nom d'utilisateur", + "Esc_Enter_Instruction": "échappement pour annuler · entrée pour enregistrer", + "Files": "Fichiers", + "Images": "Images", + "Invite_Link": "Lien d'invitation", + "Invite_Link_Will_Expire_On": "Votre lien d'invitation expirera le", + "Invite_Members": "Inviter des membres", + "Join": "Rejoindre", + "Login": "Se connecter", + "Login_To_Chat": "Connectez-vous pour discuter", + "Logout": "Se déconnecter", + "Maximize": "Maximiser", + "Members": "Membres", + "Mentions": "Mentions", + "Message": "Message", + "Message_Too_Long": "Message trop long !", + "Minimize": "Minimiser", + "No_Files_Found": "Aucun fichier trouvé", + "No_Mentions_Found": "Aucune mention trouvée", + "No_Pinned_Messages": "Aucun message épinglé", + "No_Starred_Messages": "Aucun message marqué", + "Ok": "D'accord", + "Options": "Options", + "Password": "Mot de passe", + "Pinned_Messages": "Messages épinglés", + "Read_Only_Room": "Cette salle est en lecture seule", + "Ready_To_Chat": "Prêt à discuter ? Connectez-vous maintenant pour rejoindre le fun.", + "Report_message": "Signaler le message", + "Report_this_message": "Signaler ce message ?", + "Room_Information": "Informations sur la salle", + "Search_Messages": "Rechercher des messages", + "Search_Threads": "Rechercher des fils", + "Search_Members": "Rechercher des membres", + "Search_Files": "Rechercher des fichiers", + "Send_It_As_Attachment_Instead": "Envoyer plutôt en pièce jointe ?", + "Sign_In_To_Chat": "Connectez-vous pour discuter", + "Starred_Messages": "Messages marqués", + "Texts": "Textes", + "Threads": "Discussions", + "Toast_Channel_Not_Exist": "Le canal n'existe pas. Déconnexion.", + "Toast_Copied_To_Clipboard": "Copié dans le presse-papiers", + "Toast_Copy_Failed": "Échec de la copie dans le presse-papiers.", + "Toast_Error_In_Copying_Message": "Erreur lors de la copie du message", + "Toast_Error_In_Copying_Message_Link": "Erreur lors de la copie du lien du message", + "Toast_Error_In_Deleting_Message": "Erreur lors de la suppression du message", + "Toast_Error_In_Editing_Message": "Erreur lors de l'édition du message, veuillez vous reconnecter", + "Toast_Error_In_File_Deleting": "Erreur lors de la suppression du fichier", + "Toast_Error_In_Pinning_Message": "Erreur lors de l'épinglage du message", + "Toast_Error_In_Reporting_Message": "Erreur lors de la signalisation du message", + "Toast_File_Deleted": "Fichier supprimé", + "Toast_Invalid_TOTP": "TOTP (Mot de passe à usage unique basé sur le temps) invalide.", + "Toast_Invalid_Username_Password": "Nom d'utilisateur ou mot de passe invalide. Vérifiez vos informations d'identification et réessayez", + "Toast_Logged_In": "Connexion réussie", + "Toast_Media_Type_Not_Accepted": "Type de média non accepté", + "Toast_Message_Copied": "Message copié avec succès", + "Toast_Message_Deleted": "Message supprimé avec succès", + "Toast_Message_Link_Copied": "Lien du message copié avec succès", + "Toast_Message_Pinned": "Message épinglé", + "Toast_Message_Reported": "Message signalé avec succès", + "Toast_Message_Starred": "Message marqué", + "Toast_Message_Unpinned": "Message désépinglé", + "Toast_Message_Unstarred": "Message non marqué", + "Toast_Not_Have_Permission_To_Access_Channel": "Vous n'avez pas l'autorisation d'accéder à ce canal. Déconnexion.", + "Toast_Open_Authentication_App": "Veuillez ouvrir votre application d'authentification et entrer le code.", + "Toast_Theme_Copied": "Thème copié dans le presse-papiers.", + "Tooltip_Audio_Message": "Message audio", + "Tooltip_Bold": "Gras", + "Tooltip_Cancel_Recording": "Annuler l'enregistrement", + "Tooltip_Code": "Code", + "Tooltip_Emoji": "Emoji", + "Tooltip_Finish_Recording": "Terminer l'enregistrement", + "Tooltip_Italic": "Italique", + "Tooltip_Link": "Lien", + "Tooltip_More": "Plus", + "Tooltip_Multiline": "Multiligne", + "Tooltip_Pinned": "Épinglé", + "Tooltip_Starred": "Marqué", + "Tooltip_Strike": "Barré", + "Tooltip_Upload_File": "Télécharger le fichier", + "Tooltip_Video_Message": "Message vidéo", + "Videos": "Vidéos" +} diff --git a/packages/i18n/src/locales/hi.i18n.json b/packages/i18n/src/locales/hi.i18n.json new file mode 100644 index 0000000000..27e03ec4c9 --- /dev/null +++ b/packages/i18n/src/locales/hi.i18n.json @@ -0,0 +1,93 @@ +{ + "#general": "#सामान्य", + "All": "सभी", + "Are_You_Sure": "क्या आप सुनिश्चित हैं?", + "Audios": "ऑडियो", + "Cancel": "रद्द करें", + "Close": "बंद करें", + "Delete": "हटाएं", + "Delete_Forever_Warning": "एक फ़ाइल को हटाने से वह हमेशा के लिए हटा दी जाएगी। इसे पूर्ववत नहीं किया जा सकता।", + "Download": "डाउनलोड करें", + "Editing_Message": "संदेश संपादित कर रहे हैं", + "Email_Or_Username": "ईमेल या उपयोगकर्ता नाम", + "Esc_Enter_Instruction": "रद्द करने के लिए esc · सहेजने के लिए enter", + "Files": "फ़ाइलें", + "Images": "चित्र", + "Invite_Link": "आमंत्रण लिंक", + "Invite_Link_Will_Expire_On": "आपका आमंत्रण लिंक इस पर समाप्त होगा", + "Invite_Members": "सदस्यों को आमंत्रित करें", + "Join": "जोड़ें", + "Login": "लॉगिन", + "Login_To_Chat": "चैट करने के लिए लॉगिन करें", + "Logout": "लॉगआउट", + "Maximize": "बढ़ाएं", + "Members": "सदस्य", + "Mentions": "उल्लेख", + "Message": "संदेश", + "Message_Too_Long": "संदेश बहुत लंबा है!", + "Minimize": "घटाएं", + "No_Files_Found": "कोई फ़ाइल नहीं मिली", + "No_Mentions_Found ": "कोई उल्लेख नहीं मिला", + "No_Pinned_Message s": "कोई पिन किया गया संदेश नहीं है", + "No_Starred_Messag es": "कोई स्टार किए गए संदेश नहीं हैं", + "Ok": "ठीक है", + "Options": "विकल्प", + "Password": "पासवर्ड ", + "Pinned_Messages": "पिन किए गए संदेश", + "Read_Only_Room": "यह कक्ष केवल पढ़ने के लिए है", + "Ready_To_Chat": " चैट करने के लिए तैयार हैं? मज़े में शामिल होने के लिए अभी लॉगिन करें।", + "Report_message": "संदेश रिपोर्ट करें", + "Report_this_messa ge": "क्या इस संदेश को रिपोर्ट करें?", + "Room_Information": "कक्ष जानकारी", + "Search_Messages": "संदेश खोजें", + "Search_Threads": "थ्रेड्स खोजें", + "Search_Members": "सदस्यों को खोजें", + "Search_Files": "फा इल्स खोजें", + "Send_It_As_Attach ment_Instead": "क्या इसे संलग्नक के रूप में भेजें?", + "Sign_In_To_Chat": "चैट करने के लिए साइन इन करें", + "Starred_Messages": "स्टार किए गए संदेश", + "Texts": "पाठ", + "Threads": "थ्रेड्स", + "Toast_Channel_Not_Exist": "चैनल मौजूद नहीं है। लॉग आउट हो रहा है।", + "Toast_Copied_To_Clipboard": "क्लिपबोर्ड में कॉपी किया गया", + "Toast_Copy_Failed": "क्लिपबोर्ड में कॉपी करने में विफल", + "Toast_Error_In_Copying_Message": "संदेश को कॉपी करने में त्रुटि", + "Toast_Error_In_Copying_Message_Link": "संदेश लिंक को कॉपी करने में त्रुटि", + "Toast_Error_In_Deleting_Message": "संदेश को हटाने में त्रुटि", + "Toast_Error_In_Editing_Message": "संदेश संपादित करते समय त्रुटि, कृपया फिर से लॉगिन करें", + "Toast_Error_In_File_Deleting": "फ़ाइल हटाने में त्रुटि", + "Toast_Error_In_Pinning_Message": "संदेश को पिन करने में त्रुटि", + "Toast_Error_In_Reporting_Message": "संदेश को रिपोर्ट करने में त्रुटि", + "Toast_File_Deleted": "फ़ाइल हटाई गई", + "Toast_Invalid_TOTP": "अवैध TOTP (समय-आधारित एकल उपयोग पासवर्ड)।", + "Toast_Invalid_Username_Password": "अमान्य उपयोगकर्ता नाम या पासवर्ड। कृपया अपनी क्रेडेंशियल्स जांचें और फिर से प्रयास करें", + "Toast_Logged_In": "सफलतापूर्वक लॉगिन किया गया", + "Toast_Media_Type_Not_Accepted": "मीडिया प्रकार स्वीकार्य नहीं है", + "Toast_Message_Copied": "संदेश सफलतापूर्वक कॉपी किया गया", + "Toast_Message_Deleted": "संदेश सफलतापूर्वक हटाया गया", + "Toast_Message_Link_Copied": "संदेश लिंक सफलतापूर्वक कॉपी किया गया", + "Toast_Message_Pinned": "संदेश पिन किया गया", + "Toast_Message_Reported": "संदेश सफलतापूर्वक रिपोर्ट किया गया", + "Toast_Message_Starred": "संदेश स्टार किया गया", + "Toast_Message_Unpinned": "संदेश अनपिन किया गया", + "Toast_Message_Unstarred": "संदेश अनस्टार किया गया", + "Toast_Not_Have_Permission_To_Access_Channel": "आपको इस चैनल को एक्सेस करने की अनुमति नहीं है। लॉगआउट हो रहा है।", + "Toast_Open_Authentication_App": "कृपया अपनी प्रमाणीकरण ऐप खोलें और कोड दर्ज करें।", + "Toast_Theme_Copied": "थीम क्लिपबोर्ड में कॉपी की गई।", + "Tooltip_Audio_Message": "ऑडियो संदेश", + "Tooltip_Bold": "बोल्ड", + "Tooltip_Cancel_Recording": "रिकॉर्डिंग रद्द करें", + "Tooltip_Code": "कोड", + "Tooltip_Emoji": "इमोजी", + "Tooltip_Finish_Recording": "रिकॉर्डिंग समाप्त करें", + "Tooltip_Italic": "इटैलिक", + "Tooltip_Link": "लिंक", + "Tooltip_More": "अधिक", + "Tooltip_Multiline": "मल्टीलाइन", + "Tooltip_Pinned": "पिन किया गया", + "Tooltip_Starred": "स्टार किया गया", + "Tooltip_Strike": "स्ट्राइक", + "Tooltip_Upload_File": "फ़ाइल अपलोड करें", + "Tooltip_Video_Message": "वीडियो संदेश", + "Videos": "वीडियो" +} diff --git a/packages/i18n/src/locales/pt.i18n.json b/packages/i18n/src/locales/pt.i18n.json new file mode 100644 index 0000000000..56d5286de0 --- /dev/null +++ b/packages/i18n/src/locales/pt.i18n.json @@ -0,0 +1,93 @@ +{ + "#general": "#geral", + "All": "Tudo", + "Are_You_Sure": "Você tem certeza?", + "Audios": "Áudios", + "Cancel": "Cancelar", + "Close": "Fechar", + "Delete": "Excluir", + "Delete_Forever_Warning": "Excluir um arquivo o apagará permanentemente. Isso não pode ser desfeito.", + "Download": "Baixar", + "Editing_Message": "Editando a mensagem", + "Email_Or_Username": "E-mail ou nome de usuário", + "Esc_Enter_Instruction": "esc para cancelar · enter para salvar", + "Files": "Arquivos", + "Images": "Imagens", + "Invite_Link": "Link de convite", + "Invite_Link_Will_Expire_On": "Seu link de convite expirará em", + "Invite_Members": "Convidar membros", + "Join": "Entrar", + "Login": "Entrar", + "Login_To_Chat": "Entre para conversar", + "Logout": "Sair", + "Maximize": "Maximizar", + "Members": "Membros", + "Mentions": "Menções", + "Message": "Mensagem", + "Message_Too_Long": "Mensagem muito longa!", + "Minimize": "Minimizar", + "No_Files_Found": "Nenhum arquivo encontrado", + "No_Mentions_Found": "Nenhuma menção encontrada", + "No_Pinned_Messages": "Nenhuma mensagem fixada", + "No_Starred_Messages": "Nenhuma mensagem marcada", + "Ok": "Ok", + "Options": "Opções", + "Password": "Senha", + "Pinned_Messages": "Mensagens fixadas", + "Read_Only_Room": "Esta sala é apenas para leitura", + "Ready_To_Chat": "Pronto para conversar? Entre agora para se juntar à diversão.", + "Report_message": "Reportar mensagem", + "Report_this_message": "Reportar esta mensagem?", + "Room_Information": "Informações da sala", + "Search_Messages": "Pesquisar mensagens", + "Search_Threads": "Pesquisar tópicos", + "Search_Members": "Pesquisar membros", + "Search_Files": "Pesquisar arquivos", + "Send_It_As_Attachment_Instead": "Enviar como anexo em vez disso?", + "Sign_In_To_Chat": "Entre para conversar", + "Starred_Messages": "Mensagens marcadas", + "Texts": "Textos", + "Threads": "Tópicos", + "Toast_Channel_Not_Exist": "Canal não existe. Saindo.", + "Toast_Copied_To_Clipboard": "Copiado para a área de transferência", + "Toast_Copy_Failed": "Falha ao copiar para a área de transferência.", + "Toast_Error_In_Copying_Message": "Erro ao copiar mensagem", + "Toast_Error_In_Copying_Message_Link": "Erro ao copiar o link da mensagem", + "Toast_Error_In_Deleting_Message": "Erro ao excluir mensagem", + "Toast_Error_In_Editing_Message": "Erro ao editar mensagem, faça login novamente", + "Toast_Error_In_File_Deleting": "Erro ao excluir arquivo", + "Toast_Error_In_Pinning_Message": "Erro ao fixar mensagem", + "Toast_Error_In_Reporting_Message": "Erro ao reportar mensagem", + "Toast_File_Deleted": "Arquivo excluído", + "Toast_Invalid_TOTP": "TOTP (Senha de uso único baseada em tempo) inválido.", + "Toast_Invalid_Username_Password": "Nome de usuário ou senha inválidos. Verifique suas credenciais e tente novamente", + "Toast_Logged_In": "Logado com sucesso", + "Toast_Media_Type_Not_Accepted": "Tipo de mídia não aceito", + "Toast_Message_Copied": "Mensagem copiada com sucesso", + "Toast_Message_Deleted": "Mensagem excluída com sucesso", + "Toast_Message_Link_Copied": "Link da mensagem copiado com sucesso", + "Toast_Message_Pinned": "Mensagem fixada", + "Toast_Message_Reported": "Mensagem reportada com sucesso", + "Toast_Message_Starred": "Mensagem marcada", + "Toast_Message_Unpinned": "Mensagem desfixada", + "Toast_Message_Unstarred": "Mensagem desmarcada", + "Toast_Not_Have_Permission_To_Access_Channel": "Você não tem permissão para acessar este canal. Saindo.", + "Toast_Open_Authentication_App": "Por favor, abra seu aplicativo de autenticação e insira o código.", + "Toast_Theme_Copied": "Tema copiado para a área de transferência.", + "Tooltip_Audio_Message": "Mensagem de áudio", + "Tooltip_Bold": "Negrito", + "Tooltip_Cancel_Recording": "Cancelar gravação", + "Tooltip_Code": "Código", + "Tooltip_Emoji": "Emoji", + "Tooltip_Finish_Recording": "Concluir gravação", + "Tooltip_Italic": "Itálico", + "Tooltip_Link": "Link", + "Tooltip_More": "Mais", + "Tooltip_Multiline": "Multilinhas", + "Tooltip_Pinned": "Fixado", + "Tooltip_Starred": "Marcado", + "Tooltip_Strike": "Riscado", + "Tooltip_Upload_File": "Enviar arquivo", + "Tooltip_Video_Message": "Mensagem de vídeo", + "Videos": "Vídeos" +} diff --git a/packages/i18n/src/locales/ru.i18n.json b/packages/i18n/src/locales/ru.i18n.json new file mode 100644 index 0000000000..f494a20d23 --- /dev/null +++ b/packages/i18n/src/locales/ru.i18n.json @@ -0,0 +1,93 @@ +{ + "#general": "#общий", + "All": "Все", + "Are_You_Sure": "Вы уверены?", + "Audios": "Аудио", + "Cancel": "Отмена", + "Close": "Закрыть", + "Delete": "Удалить", + "Delete_Forever_Warning": "Удаление файла приведет к его безвозвратному удалению. Это нельзя отменить.", + "Download": "Скачать", + "Editing_Message": "Редактирование сообщения", + "Email_Or_Username": "Электронная почта или имя пользователя", + "Esc_Enter_Instruction": "esc для отмены · enter для сохранения", + "Files": "Файлы", + "Images": "Изображения", + "Invite_Link": "Ссылка для приглашения", + "Invite_Link_Will_Expire_On": "Ваша ссылка на приглашение истечет", + "Invite_Members": "Пригласить участников", + "Join": "Присоединиться", + "Login": "Войти", + "Login_To_Chat": "Войдите для чата", + "Logout": "Выйти", + "Maximize": "Максимизировать", + "Members": "Участники", + "Mentions": "Упоминания", + "Message": "Сообщение", + "Message_Too_Long": "Сообщение слишком длинное!", + "Minimize": "Свернуть", + "No_Files_Found": "Файлы не найдены", + "No_Mentions_Found": "Упоминания не найдены", + "No_Pinned_Messages": "Нет закрепленных сообщений", + "No_Starred_Messages": "Нет сообщений в избранном", + "Ok": "Ок", + "Options": "Опции", + "Password": "Пароль", + "Pinned_Messages": "Закрепленные сообщения", + "Read_Only_Room": "Эта комната только для чтения", + "Ready_To_Chat": "Готовы общаться? Войдите, чтобы присоединиться к веселью.", + "Report_message": "Сообщить о сообщении", + "Report_this_message": "Сообщить об этом сообщении?", + "Room_Information": "Информация о комнате", + "Search_Messages": "Поиск сообщений", + "Search_Threads": "Искать темы", + "Search_Members": "Искать участников", + "Search_Files": "Искать файлы", + "Send_It_As_Attachment_Instead": "Отправить как вложение вместо этого?", + "Sign_In_To_Chat": "Войдите, чтобы общаться", + "Starred_Messages": "Сообщения в избранном", + "Texts": "Тексты", + "Threads": "Треды", + "Toast_Channel_Not_Exist": "Канал не существует. Выход из системы.", + "Toast_Copied_To_Clipboard": "Скопировано в буфер обмена", + "Toast_Copy_Failed": "Не удалось скопировать в буфер обмена.", + "Toast_Error_In_Copying_Message": "Ошибка при копировании сообщения", + "Toast_Error_In_Copying_Message_Link": "Ошибка при копировании ссылки на сообщение", + "Toast_Error_In_Deleting_Message": "Ошибка при удалении сообщения", + "Toast_Error_In_Editing_Message": "Ошибка при редактировании сообщения, войдите снова", + "Toast_Error_In_File_Deleting": "Ошибка при удалении файла", + "Toast_Error_In_Pinning_Message": "Ошибка при закреплении сообщения", + "Toast_Error_In_Reporting_Message": "Ошибка при сообщении о сообщении", + "Toast_File_Deleted": "Файл удален", + "Toast_Invalid_TOTP": "Неверный TOTP (одноразовый пароль на основе времени).", + "Toast_Invalid_Username_Password": "Неверное имя пользователя или пароль. Проверьте свои учетные данные и попробуйте снова", + "Toast_Logged_In": "Успешный вход в систему", + "Toast_Media_Type_Not_Accepted": "Тип медиа не принят", + "Toast_Message_Copied": "Сообщение успешно скопировано", + "Toast_Message_Deleted": "Сообщение успешно удалено", + "Toast_Message_Link_Copied": "Ссылка на сообщение успешно скопирована", + "Toast_Message_Pinned": "Сообщение закреплено", + "Toast_Message_Reported": "Сообщение успешно отправлено на рассмотрение", + "Toast_Message_Starred": "Сообщение добавлено в избранное", + "Toast_Message_Unpinned": "Сообщение откреплено", + "Toast_Message_Unstarred": "Сообщение удалено из избранного", + "Toast_Not_Have_Permission_To_Access_Channel": "У вас нет прав для доступа к этому каналу. Выход из системы.", + "Toast_Open_Authentication_App": "Пожалуйста, откройте приложение для аутентификации и введите код.", + "Toast_Theme_Copied": "Тема скопирована в буфер обмена.", + "Tooltip_Audio_Message": "Аудиосообщение", + "Tooltip_Bold": "Полужирный", + "Tooltip_Cancel_Recording": "Отменить запись", + "Tooltip_Code": "Код", + "Tooltip_Emoji": "Эмодзи", + "Tooltip_Finish_Recording": "Завершить запись", + "Tooltip_Italic": "Курсив", + "Tooltip_Link": "Ссылка", + "Tooltip_More": "Подробнее", + "Tooltip_Multiline": "Многострочный", + "Tooltip_Pinned": "Закреплено", + "Tooltip_Starred": "Избранное", + "Tooltip_Strike": "Зачеркнутый", + "Tooltip_Upload_File": "Загрузить файл", + "Tooltip_Video_Message": "Видео сообщение", + "Videos": "Видео" +} diff --git a/packages/react/package.json b/packages/react/package.json index 82cc802682..93c7398b32 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -84,6 +84,7 @@ }, "dependencies": { "@embeddedchat/api": "workspace:^", + "@embeddedchat/i18n": "workspace:^", "@embeddedchat/markups": "workspace:^", "@embeddedchat/ui-elements": "workspace:^", "@embeddedchat/ui-kit": "workspace:^", diff --git a/packages/react/rollup.config.js b/packages/react/rollup.config.js index 4eac346993..f0a17da803 100644 --- a/packages/react/rollup.config.js +++ b/packages/react/rollup.config.js @@ -37,6 +37,7 @@ export default [ '@embeddedchat/ui-elements', '@embeddedchat/api', '@embeddedchat/ui-kit', + '@embeddedchat/i18n', '@embeddedchat/markups', ], plugins: [ diff --git a/packages/react/src/views/EmbeddedChat.js b/packages/react/src/views/EmbeddedChat.js index 17b1ff1a41..ba9a232afc 100644 --- a/packages/react/src/views/EmbeddedChat.js +++ b/packages/react/src/views/EmbeddedChat.js @@ -15,6 +15,7 @@ import { useComponentOverrides, ThemeProvider, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { ChatLayout } from './ChatLayout'; import { ChatHeader } from './ChatHeader'; import { RCInstanceProvider } from '../context/RCInstance'; @@ -97,6 +98,12 @@ const EmbeddedChat = (props) => { ); } + useEffect(() => { + if (props.language) { + i18n.changeLanguage(props.language); + } + }, [props.language]); + const initializeRCInstance = useCallback(() => { const newRCInstance = new EmbeddedChatApi(host, roomId, { getToken, @@ -273,6 +280,7 @@ const EmbeddedChat = (props) => { }; EmbeddedChat.propTypes = { + language: PropTypes.string, width: PropTypes.string, height: PropTypes.string, isClosable: PropTypes.bool, diff --git a/packages/react/src/views/RoomMembers/RoomMember.js b/packages/react/src/views/RoomMembers/RoomMember.js index f60c3476f9..f2adb55867 100644 --- a/packages/react/src/views/RoomMembers/RoomMember.js +++ b/packages/react/src/views/RoomMembers/RoomMember.js @@ -10,6 +10,7 @@ import { useComponentOverrides, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import RoomMemberItem from './RoomMemberItem'; import RCContext, { useRCContext } from '../../context/RCInstance'; import useInviteStore from '../../store/inviteStore'; @@ -67,7 +68,7 @@ const RoomMembers = ({ members }) => { return ( setExclusiveState(null)} style={{ width: '400px', zIndex: window.innerWidth <= 780 ? 1 : null }} diff --git a/yarn.lock b/yarn.lock index d3dec11bea..42431e5264 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2326,6 +2326,15 @@ __metadata: languageName: unknown linkType: soft +"@embeddedchat/i18n@workspace:^, @embeddedchat/i18n@workspace:packages/i18n": + version: 0.0.0-use.local + resolution: "@embeddedchat/i18n@workspace:packages/i18n" + dependencies: + eslint: ^8.30.0 + prettier: ^2.8.1 + languageName: unknown + linkType: soft + "@embeddedchat/markups@workspace:^, @embeddedchat/markups@workspace:packages/markups": version: 0.0.0-use.local resolution: "@embeddedchat/markups@workspace:packages/markups" @@ -2450,6 +2459,7 @@ __metadata: "@babel/preset-env": ^7.16.11 "@babel/preset-react": ^7.16.7 "@embeddedchat/api": "workspace:^" + "@embeddedchat/i18n": "workspace:^" "@embeddedchat/markups": "workspace:^" "@embeddedchat/ui-elements": "workspace:^" "@embeddedchat/ui-kit": "workspace:^" From 10e64f6bd29e9cc188c299756171a8236f27ceaa Mon Sep 17 00:00:00 2001 From: dhairyashil Date: Mon, 3 Feb 2025 09:27:35 +0530 Subject: [PATCH 2/4] Implement logic for all components, tested all cases --- packages/i18n/src/i18n.js | 15 +- packages/i18n/src/locales/ar.i18n.json | 136 +++++++++---- packages/i18n/src/locales/bn.i18n.json | 188 ++++++++++++------ packages/i18n/src/locales/en.i18n.json | 81 +++++++- packages/i18n/src/locales/es.i18n.json | 126 +++++++++--- packages/i18n/src/locales/fr.i18n.json | 110 ++++++++-- packages/i18n/src/locales/hi.i18n.json | 132 +++++++++--- packages/i18n/src/locales/pt.i18n.json | 154 ++++++++++---- packages/i18n/src/locales/ru.i18n.json | 138 +++++++++---- packages/react/src/views/ChatBody/ChatBody.js | 5 +- .../react/src/views/ChatHeader/ChatHeader.js | 30 +-- .../views/ChatInput/AudioMessageRecorder.js | 7 +- .../react/src/views/ChatInput/ChatInput.js | 22 +- .../ChatInput/ChatInputFormattingToolbar.js | 9 +- .../src/views/ChatInput/InsertLinkToolBox.js | 5 +- .../views/ChatInput/VideoMessageRecoder.js | 11 +- .../src/views/FileMessage/FileMessage.js | 17 +- .../src/views/ImageGallery/ImageGallery.js | 5 +- .../react/src/views/LoginForm/LoginForm.js | 9 +- .../react/src/views/Mentions/MembersList.js | 5 +- packages/react/src/views/Message/Message.js | 23 ++- .../views/Message/MessageAvatarContainer.js | 7 +- .../src/views/Message/MessageBodyContainer.js | 1 - .../react/src/views/Message/MessageDivider.js | 1 - .../react/src/views/Message/MessageHeader.js | 89 +++++---- .../react/src/views/Message/MessageMetrics.js | 3 +- .../react/src/views/Message/MessageToolbox.js | 39 ++-- .../views/MessageAggregators/FileGallery.js | 19 +- .../MessageAggregators/MentionedMessages.js | 5 +- .../MessageAggregators/PinnedMessages.js | 5 +- .../MessageAggregators/SearchMessages.js | 7 +- .../MessageAggregators/StarredMessages.js | 5 +- .../MessageAggregators/ThreadedMessages.js | 9 +- .../src/views/MessageList/MessageList.js | 3 +- .../src/views/QuoteMessage/QuoteMessage.js | 5 +- .../ReportMessage/MessageReportWindow.js | 5 +- .../ReportMessage/ReportWindowButtons.js | 11 +- .../views/RoomInformation/RoomInformation.js | 11 +- .../src/views/RoomMembers/InviteMembers.js | 9 +- .../react/src/views/RoomMembers/RoomMember.js | 7 +- .../src/views/TotpModal/TwoFactorTotpModal.js | 7 +- .../src/views/TypingUsers/TypingUsers.js | 16 +- .../views/UserInformation/UserInformation.js | 27 +-- 43 files changed, 1067 insertions(+), 452 deletions(-) diff --git a/packages/i18n/src/i18n.js b/packages/i18n/src/i18n.js index 73502ef18c..485fd72f1c 100644 --- a/packages/i18n/src/i18n.js +++ b/packages/i18n/src/i18n.js @@ -17,8 +17,19 @@ class I18n { } } - t(key) { - return this.translations[key] || key; + t(key, params = null) { + let translation = this.translations[key] || key; + + if (params) { + Object.keys(params).forEach((param) => { + translation = translation.replace( + new RegExp(`{{${param}}}`, 'g'), + params[param] + ); + }); + } + + return translation; } changeLanguage(lang) { diff --git a/packages/i18n/src/locales/ar.i18n.json b/packages/i18n/src/locales/ar.i18n.json index eeac81bb39..f2a5cb4789 100644 --- a/packages/i18n/src/locales/ar.i18n.json +++ b/packages/i18n/src/locales/ar.i18n.json @@ -1,66 +1,105 @@ { - "#general": "#عام", + "Add": "إضافة", + "Add_Reaction": "إضافة رد فعل", + "Admin": "مدير", "All": "الكل", + "all": "الكل", + "Announcement": "إعلان", "Are_You_Sure": "هل أنت متأكد؟", "Audios": "الملفات الصوتية", + "avatar": "الصورة الشخصية", + "Bio": "السيرة الذاتية", + "Browser_Not_Support_Audio": "متصفحك لا يدعم عنصر الصوت.", + "Browser_Not_Support_Video": "متصفحك لا يدعم عنصر الفيديو.", "Cancel": "إلغاء", "Close": "إغلاق", + "Copy_link": "نسخ الرابط", + "Copy_Message": "نسخ الرسالة", + "Created_At": "تم الإنشاء في", "Delete": "حذف", "Delete_Forever_Warning": "حذف الملف سيؤدي إلى حذفه نهائيًا. لا يمكن التراجع عن ذلك.", - "Download": "تنزيل", - "Editing_Message": "تحرير الرسالة", + "Delete_Message": "حذف الرسالة", + "Delete_Message_Ask": "هل تريد حذف هذه الرسالة؟", + "Description": "الوصف", + "Download": "تحميل", + "Edit": "تعديل", + "Editing_Message": "تعديل الرسالة", + "Email": "البريد الإلكتروني", "Email_Or_Username": "البريد الإلكتروني أو اسم المستخدم", - "Esc_Enter_Instruction": "اضغط على ESC للإلغاء · اضغط على ENTER للحفظ", + "Enter_TOTP": "أدخل رمز TOTP", + "Esc_Enter_Instruction": "اضغط على esc للإلغاء · اضغط على enter للحفظ", + "Field_Required": "هذا الحقل مطلوب", "Files": "الملفات", + "Full_Name": "الاسم الكامل", + "general": "عام", + "here": "هنا", "Images": "الصور", "Invite_Link": "رابط الدعوة", - "Invite_Link_Will_Expire_On": "رابط الدعوة سينتهي في", - "Invite_Members": "دعوة أعضاء", - "Join": "انضمام", + "Invite_Link_Will_Expire_On": "رابط الدعوة سينتهي في ", + "Invite_Members": "دعوة الأعضاء", + "Join": "الانضمام", + "Last_Login": "آخر تسجيل دخول", "Login": "تسجيل الدخول", "Login_To_Chat": "تسجيل الدخول للدردشة", "Logout": "تسجيل الخروج", + "Mailto_Email": "mailto:{{email}}", "Maximize": "تكبير", "Members": "الأعضاء", "Mentions": "الإشارات", - "Message": "رسالة", + "Message": "الرسالة", "Message_Too_Long": "الرسالة طويلة جدًا!", "Minimize": "تصغير", - "No_Files_Found": "لا توجد ملفات", + "New_Messages": "رسائل جديدة", + "Nickname": "اسم الشهرة", + "No_Files_Found": "لم يتم العثور على ملفات", + "No_Members_Found": "لم يتم العثور على أعضاء", "No_Mentions_Found": "لم يتم العثور على إشارات", + "No_Messages_Found": "لم يتم العثور على رسائل", "No_Pinned_Messages": "لا توجد رسائل مثبتة", - "No_Starred_Messages": "لا توجد رسائل في المفضلة", + "No_Starred_Messages": "لا توجد رسائل مميزة", + "No_Threads_Found": "لم يتم العثور على مواضيع", "Ok": "موافق", "Options": "الخيارات", "Password": "كلمة المرور", + "Pin": "تثبيت", "Pinned_Messages": "الرسائل المثبتة", - "Read_Only_Room": "هذه الغرفة فقط للقراءة", - "Ready_To_Chat": "هل أنت جاهز للدردشة؟ سجل الدخول الآن للانضمام إلى المرح.", - "Report_message": "الإبلاغ عن الرسالة", - "Report_this_message": "هل ترغب في الإبلاغ عن هذه الرسالة؟", + "Quote": "اقتباس", + "Read_Only_Room": "هذه الغرفة للقراءة فقط", + "Ready_To_Chat": "مستعد للدردشة؟ سجل الدخول الآن للانضمام إلى المرح.", + "Reply": "رد", + "Report": "تقرير", + "Report_message": "تقرير رسالة", + "Report_this_message": "هل تريد الإبلاغ عن هذه الرسالة؟", + "Report_this_message_Why": "لماذا ترغب في الإبلاغ عن هذه الرسالة؟", + "Roles": "الأدوار", "Room_Information": "معلومات الغرفة", - "Search_Messages": "البحث في الرسائل", - "Search_Threads": "بحث في المواضيع", - "Search_Members": "بحث في الأعضاء", - "Search_Files": "بحث في الملفات", + "Search_Files": "بحث عن ملفات", + "Search_Members": "بحث عن أعضاء", + "Search_Messages": "بحث عن رسائل", + "Search_Threads": "بحث عن مواضيع", "Send_It_As_Attachment_Instead": "هل ترغب في إرسالها كمرفق بدلاً من ذلك؟", - "Sign_In_To_Chat": "سجل الدخول للدردشة", - "Starred_Messages": "الرسائل المفضلة", + "Sign_In_To_Chat": "تسجيل الدخول للدردشة", + "Something_Wrong": "حدث خطأ ما", + "Star": "نجم", + "Starred_Messages": "الرسائل المميزة", + "Start_Of_Conversation": "بداية المحادثة", + "Submit": "إرسال", + "Team_Information": "معلومات الفريق", "Texts": "النصوص", "Threads": "المواضيع", - "Toast_Channel_Not_Exist": "القناة غير موجودة. سيتم تسجيل الخروج.", + "Toast_Channel_Not_Exist": "القناة غير موجودة. جاري تسجيل الخروج.", "Toast_Copied_To_Clipboard": "تم النسخ إلى الحافظة", "Toast_Copy_Failed": "فشل النسخ إلى الحافظة.", "Toast_Error_In_Copying_Message": "خطأ في نسخ الرسالة", "Toast_Error_In_Copying_Message_Link": "خطأ في نسخ رابط الرسالة", "Toast_Error_In_Deleting_Message": "خطأ في حذف الرسالة", - "Toast_Error_In_Editing_Message": "خطأ في تحرير الرسالة، يرجى تسجيل الدخول مرة أخرى", + "Toast_Error_In_Editing_Message": "خطأ في تعديل الرسالة، يرجى تسجيل الدخول مرة أخرى", "Toast_Error_In_File_Deleting": "خطأ في حذف الملف", "Toast_Error_In_Pinning_Message": "خطأ في تثبيت الرسالة", "Toast_Error_In_Reporting_Message": "خطأ في الإبلاغ عن الرسالة", "Toast_File_Deleted": "تم حذف الملف", - "Toast_Invalid_TOTP": "رمز TOTP (كلمة المرور لمرة واحدة المعتمدة على الوقت) غير صالح.", - "Toast_Invalid_Username_Password": "اسم المستخدم أو كلمة المرور غير صحيحة. تحقق من بيانات اعتمادك وحاول مرة أخرى", + "Toast_Invalid_TOTP": "رمز TOTP غير صالح.", + "Toast_Invalid_Username_Password": "اسم المستخدم أو كلمة المرور غير صحيحة. يرجى التحقق من بياناتك والمحاولة مرة أخرى", "Toast_Logged_In": "تم تسجيل الدخول بنجاح", "Toast_Media_Type_Not_Accepted": "نوع الوسائط غير مقبول", "Toast_Message_Copied": "تم نسخ الرسالة بنجاح", @@ -68,26 +107,55 @@ "Toast_Message_Link_Copied": "تم نسخ رابط الرسالة بنجاح", "Toast_Message_Pinned": "تم تثبيت الرسالة", "Toast_Message_Reported": "تم الإبلاغ عن الرسالة بنجاح", - "Toast_Message_Starred": "تم وضع الرسالة في المفضلة", + "Toast_Message_Starred": "تم تمييز الرسالة", "Toast_Message_Unpinned": "تم إلغاء تثبيت الرسالة", - "Toast_Message_Unstarred": "تم إزالة الرسالة من المفضلة", - "Toast_Not_Have_Permission_To_Access_Channel": "ليس لديك إذن للوصول إلى هذه القناة. سيتم تسجيل الخروج.", - "Toast_Open_Authentication_App": "يرجى فتح تطبيق المصادقة الخاص بك وإدخال الرمز.", + "Toast_Message_Unstarred": "تم إزالة تمييز الرسالة", + "Toast_Not_Have_Permission_To_Access_Channel": "ليس لديك إذن للوصول إلى هذه القناة. جاري تسجيل الخروج", + "Toast_Open_Authentication_App": "يرجى فتح تطبيق المصادقة وإدخال الرمز.", "Toast_Theme_Copied": "تم نسخ السمة إلى الحافظة.", "Tooltip_Audio_Message": "رسالة صوتية", - "Tooltip_Bold": "عريض", + "Tooltip_Bold": "غامق", "Tooltip_Cancel_Recording": "إلغاء التسجيل", - "Tooltip_Code": "رمز", - "Tooltip_Emoji": "إيموجي", + "Tooltip_Code": "كود", + "Tooltip_Emoji": "رمز تعبيري", "Tooltip_Finish_Recording": "إنهاء التسجيل", "Tooltip_Italic": "مائل", "Tooltip_Link": "رابط", "Tooltip_More": "المزيد", - "Tooltip_Multiline": "متعدد الأسطر", + "Tooltip_Multiline": "عدة أسطر", "Tooltip_Pinned": "مثبت", - "Tooltip_Starred": "في المفضلة", - "Tooltip_Strike": "مشطوب", + "Tooltip_Starred": "مميز", + "Tooltip_Strike": "مضرب", "Tooltip_Upload_File": "رفع ملف", "Tooltip_Video_Message": "رسالة فيديو", + "Topic": "الموضوع", + "Unpin": "إلغاء التثبيت", + "Unstar": "إلغاء التمييز", + "user": "مستخدم", + "User_Action_Added_Message": "أضاف @{{message}}", + "User_Action_Allowed_Reactions": "سمح بالردود", + "User_Action_Archived_Room": "أرشفة الغرفة", + "User_Action_Changed_Room": "غَيَّر الغرفة إلى {{message}}", + "User_Action_Changed_Room_Announcement": "غَيَّر إعلان الغرفة إلى: {{message}}", + "User_Action_Changed_Room_Avatar": "غَيَّر صورة الغرفة", + "User_Action_Changed_Room_Description": "غَيَّر وصف الغرفة إلى: {{message}}", + "User_Action_Changed_Room_Name": "غَيَّر اسم الغرفة إلى {{message}}", + "User_Action_Changed_Room_Topic": "غَيَّر موضوع الغرفة إلى: {{message}}", + "User_Action_Converted_Room": "تحويل #{{message}}", + "User_Action_Joined_The_Channel": "انضم إلى القناة", + "User_Action_Left_The_Channel": "غادر القناة", + "User_Action_Message_Removed": "تم إزالة الرسالة", + "User_Action_Pinned_Message": "تثبيت رسالة:", + "User_Action_Removed_Message": "تم إزالة @{{message}}", + "User_Action_Removed_Read_Only": "تمت إزالة صلاحيات القراءة فقط", + "User_Action_Removed_Role": "تم إزالة {{message}} كـ {{role}}", + "User_Action_Set_Role": "تم تعيين {{message}} كـ {{role}}", + "User_Action_Set_Room_Read_Only": "تم تعيين الغرفة للقراءة فقط", + "User_Action_Unarchived_Room": "إلغاء أرشفة الغرفة", + "User_Action_User_Typing_Multiple": ", و{{count}} آخرين يكتبون...", + "User_Action_User_Typing_One": "{{user}} يكتب...", + "User_Action_User_Typing_Two": "{{user1}} و{{user2}} يكتبان...", + "Verified": "موثق", + "Verified_Not": "غير موثق", "Videos": "فيديوهات" } diff --git a/packages/i18n/src/locales/bn.i18n.json b/packages/i18n/src/locales/bn.i18n.json index c0c99dc148..d13102db4a 100644 --- a/packages/i18n/src/locales/bn.i18n.json +++ b/packages/i18n/src/locales/bn.i18n.json @@ -1,79 +1,118 @@ { - "#general": "#সাধারণ", + "Add": "যোগ করুন", + "Add_Reaction": "প্রতিক্রিয়া যোগ করুন", + "Admin": "অ্যাডমিন", "All": "সব", + "all": "সব", + "Announcement": "ঘোষণা", "Are_You_Sure": "আপনি কি নিশ্চিত?", "Audios": "অডিও", - "Cancel": "বাতিল", - "Close": "বন্ধ", - "Delete": "মুছে ফেলুন", - "Delete_Forever_Warning": "ফাইল মুছে ফেললে তা চিরকাল মুছে যাবে। এটি পূর্বাবস্থায় ফিরিয়ে আনা যাবে না।", - "Download": "ডাউনলোড", - "Editing_Message": "বার্তা সম্পাদনা", + "avatar": "অ্যাভাটার", + "Bio": "জীবনবৃত্তান্ত", + "Browser_Not_Support_Audio": "আপনার ব্রাউজার অডিও উপাদানটি সমর্থন করে না।", + "Browser_Not_Support_Video": "আপনার ব্রাউজার ভিডিও ট্যাগটি সমর্থন করে না।", + "Cancel": "বাতিল করুন", + "Close": "বন্ধ করুন", + "Copy_link": "লিঙ্ক কপি করুন", + "Copy_Message": "বার্তা কপি করুন", + "Created_At": "তৈরি হয়েছে", + "Delete": "মুছুন", + "Delete_Forever_Warning": "একটি ফাইল মুছে ফেলা হলে তা চিরকাল মুছে যাবে। এটি পুনরুদ্ধার করা যাবে না।", + "Delete_Message": "বার্তা মুছুন", + "Delete_Message_Ask": "আপনি কি এই বার্তাটি মুছতে চান?", + "Description": "বর্ণনা", + "Download": "ডাউনলোড করুন", + "Edit": "সম্পাদনা করুন", + "Editing_Message": "বার্তা সম্পাদনা করা হচ্ছে", + "Email": "ইমেইল", "Email_Or_Username": "ইমেইল বা ব্যবহারকারীর নাম", - "Esc_Enter_Instruction": "esc বাতিল করতে · enter সেভ করতে", + "Enter_TOTP": "TOTP প্রবেশ করুন", + "Esc_Enter_Instruction": "esc চাপুন বাতিল করতে · enter চাপুন সংরক্ষণ করতে", + "Field_Required": "এই ক্ষেত্রটি আবশ্যক", "Files": "ফাইল", - "Images": "ছবি", - "Invite_Link": "আমন্ত্রণ লিংক", - "Invite_Link_Will_Expire_On": "আপনার আমন্ত্রণ লিংকটি সময়মতো শেষ হয়ে যাবে", - "Invite_Members": "সদস্য আমন্ত্রণ করুন", - "Join": "যোগদান", - "Login": "লগ ইন", - "Login_To_Chat": "চ্যাটে লগ ইন করুন", - "Logout": "লগ আউট", - "Maximize": "সম্পূর্ণ করুন", + "Full_Name": "সম্পূর্ণ নাম", + "general": "সাধারণ", + "here": "এখানে", + "Images": "চিত্র", + "Invite_Link": "আন্তরিক লিঙ্ক", + "Invite_Link_Will_Expire_On": "আপনার আমন্ত্রণ লিঙ্কটি শেষ হবে ", + "Invite_Members": "সদস্যদের আমন্ত্রণ করুন", + "Join": "যোগ দিন", + "Last_Login": "সর্বশেষ লগইন", + "Login": "লগইন", + "Login_To_Chat": "চ্যাটে লগইন করুন", + "Logout": "লগআউট", + "Mailto_Email": "mailto:{{email}}", + "Maximize": "বর্ধিত করুন", "Members": "সদস্যগণ", - "Mentions": "উল্লেখ", + "Mentions": "উল্লেখগুলি", "Message": "বার্তা", "Message_Too_Long": "বার্তা খুব দীর্ঘ!", "Minimize": "সঙ্কুচিত করুন", - "No_Files_Found": "কোন ফাইল পাওয়া যায়নি", - "No_Mentions_Found": "কোন উল্লেখ পাওয়া যায়নি", - "No_Pinned_Messages": "কোন বার্তা পিন করা হয়নি", - "No_Starred_Messages": "কোন বার্তা চিহ্নিত করা হয়নি", - "Ok": "ওকে", + "New_Messages": "নতুন বার্তাগুলি", + "Nickname": "উপনাম", + "No_Files_Found": "কোনো ফাইল পাওয়া যায়নি", + "No_Members_Found": "কোনো সদস্য পাওয়া যায়নি", + "No_Mentions_Found": "কোনো উল্লেখ পাওয়া যায়নি", + "No_Messages_Found": "কোনো বার্তা পাওয়া যায়নি", + "No_Pinned_Messages": "কোনো স্থির বার্তা নেই", + "No_Starred_Messages": "কোনো তারকাচিহ্নিত বার্তা নেই", + "No_Threads_Found": "কোনো থ্রেড পাওয়া যায়নি", + "Ok": "ঠিক আছে", "Options": "বিকল্প", "Password": "পাসওয়ার্ড", - "Pinned_Messages": "পিন করা বার্তাগুলি", - "Read_Only_Room": "এই রুমটি শুধুমাত্র পাঠযোগ্য", - "Ready_To_Chat": "চ্যাটে কথা বলার জন্য প্রস্তুত? এখন লগ ইন করুন এবং মজা করুন।", - "Report_message": "বার্তা রিপোর্ট করুন", - "Report_this_message": "এই বার্তা রিপোর্ট করবেন?", - "Room_Information": "রুম তথ্য", - "Search_Messages": "বার্তা অনুসন্ধান", - "Search_Threads": "থ্রেড অনুসন্ধান", - "Search_Members": "সদস্য অনুসন্ধান", - "Search_Files": "ফাইল অনুসন্ধান", - "Send_It_As_Attachment_Instead": "এটি একটি সংযুক্তি হিসেবে পাঠাবেন কি?", + "Pin": "পিন করুন", + "Pinned_Messages": "স্থির বার্তাগুলি", + "Quote": "উদ্ধৃতি", + "Read_Only_Room": "এই রুমটি শুধু পড়ার জন্য", + "Ready_To_Chat": "চ্যাট করতে প্রস্তুত? এখন লগইন করুন এবং মজা শুরু করুন।", + "Reply": "উত্তর দিন", + "Report": "প্রতিবেদন", + "Report_message": "বার্তা প্রতিবেদন করুন", + "Report_this_message": "আপনি কি এই বার্তাটি প্রতিবেদন করতে চান?", + "Report_this_message_Why": "আপনি কেন এই বার্তাটি প্রতিবেদন করতে চান?", + "Roles": "ভূমিকা", + "Room_Information": "রুমের তথ্য", + "Search_Files": "ফাইল অনুসন্ধান করুন", + "Search_Members": "সদস্য অনুসন্ধান করুন", + "Search_Messages": "বার্তা অনুসন্ধান করুন", + "Search_Threads": "থ্রেড অনুসন্ধান করুন", + "Send_It_As_Attachment_Instead": "এটি মাইক্রোফোন হিসেবে পাঠাবেন?", "Sign_In_To_Chat": "চ্যাটে সাইন ইন করুন", - "Starred_Messages": "চিহ্নিত বার্তাগুলি", + "Something_Wrong": "কিছু ভুল হয়েছে", + "Star": "তারকা", + "Starred_Messages": "তারকাচিহ্নিত বার্তাগুলি", + "Start_Of_Conversation": "আলাপের শুরু", + "Submit": "জমা দিন", + "Team_Information": "টিম তথ্য", "Texts": "টেক্সট", - "Threads": "থ্রেডস", - "Toast_Channel_Not_Exist": "চ্যানেল বিদ্যমান নেই। লগ আউট হচ্ছে।", - "Toast_Copied_To_Clipboard": "কপি করা হয়েছে ক্লিপবোর্ডে", - "Toast_Copy_Failed": "ক্লিপবোর্ডে কপি করা ব্যর্থ হয়েছে।", + "Threads": "থ্রেডগুলি", + "Toast_Channel_Not_Exist": "চ্যানেলটি নেই। লগ আউট হচ্ছে।", + "Toast_Copied_To_Clipboard": "কপি করা হয়েছে", + "Toast_Copy_Failed": "কপি করতে ব্যর্থ হয়েছে", "Toast_Error_In_Copying_Message": "বার্তা কপি করতে ত্রুটি", - "Toast_Error_In_Copying_Message_Link": "বার্তা লিঙ্ক কপি করতে ত্রুটি", - "Toast_Error_In_Deleting_Message": "বার্তা মুছে ফেলতে ত্রুটি", - "Toast_Error_In_Editing_Message": "বার্তা সম্পাদন করতে ত্রুটি, পুনরায় লগ ইন করুন", - "Toast_Error_In_File_Deleting": "ফাইল মুছে ফেলতে ত্রুটি", + "Toast_Error_In_Copying_Message_Link": "বার্তার লিঙ্ক কপি করতে ত্রুটি", + "Toast_Error_In_Deleting_Message": "বার্তা মুছতে ত্রুটি", + "Toast_Error_In_Editing_Message": "বার্তা সম্পাদনা করতে ত্রুটি, আবার লগইন করুন", + "Toast_Error_In_File_Deleting": "ফাইল মুছতে ত্রুটি", "Toast_Error_In_Pinning_Message": "বার্তা পিন করতে ত্রুটি", - "Toast_Error_In_Reporting_Message": "বার্তা রিপোর্ট করতে ত্রুটি", + "Toast_Error_In_Reporting_Message": "বার্তা প্রতিবেদন করতে ত্রুটি", "Toast_File_Deleted": "ফাইল মুছে ফেলা হয়েছে", - "Toast_Invalid_TOTP": "অবৈধ TOTP (সময়ভিত্তিক এককালীন পাসওয়ার্ড)।", - "Toast_Invalid_Username_Password": "অবৈধ ব্যবহারকারীর নাম বা পাসওয়ার্ড। অনুগ্রহ করে আপনার শংসাপত্র পরীক্ষা করুন এবং আবার চেষ্টা করুন", - "Toast_Logged_In": "সফলভাবে লগ ইন হয়েছে", - "Toast_Media_Type_Not_Accepted": "মিডিয়া টাইপ গ্রহণ করা হয়নি", - "Toast_Message_Copied": "বার্তা সফলভাবে কপি করা হয়েছে", + "Toast_Invalid_TOTP": "অবৈধ TOTP (টাইম-ভিত্তিক এককালীন পাসওয়ার্ড)।", + "Toast_Invalid_Username_Password": "অবৈধ ব্যবহারকারীর নাম অথবা পাসওয়ার্ড। দয়া করে আপনার প্রমাণপত্রগুলি পরীক্ষা করুন এবং আবার চেষ্টা করুন", + "Toast_Logged_In": "সফলভাবে লগইন হয়েছে", + "Toast_Media_Type_Not_Accepted": "মিডিয়া টাইপ গ্রহণযোগ্য নয়", + "Toast_Message_Copied": "বার্তা সফলভাবে কপি হয়েছে", "Toast_Message_Deleted": "বার্তা সফলভাবে মুছে ফেলা হয়েছে", - "Toast_Message_Link_Copied": "বার্তা লিঙ্ক সফলভাবে কপি করা হয়েছে", + "Toast_Message_Link_Copied": "বার্তার লিঙ্ক সফলভাবে কপি হয়েছে", "Toast_Message_Pinned": "বার্তা পিন করা হয়েছে", - "Toast_Message_Reported": "বার্তা সফলভাবে রিপোর্ট করা হয়েছে", - "Toast_Message_Starred": "বার্তা চিহ্নিত করা হয়েছে", - "Toast_Message_Unpinned": "বার্তা আনপিন করা হয়েছে", - "Toast_Message_Unstarred": "বার্তা চিহ্নিত থেকে মুছে ফেলা হয়েছে", - "Toast_Not_Have_Permission_To_Access_Channel": "এই চ্যানেলে প্রবেশের জন্য আপনার অনুমতি নেই। লগ আউট হচ্ছে।", - "Toast_Open_Authentication_App": "অনুগ্রহ করে আপনার প্রমাণীকরণ অ্যাপটি খুলুন এবং কোডটি প্রবেশ করান।", - "Toast_Theme_Copied": "থিম সফলভাবে ক্লিপবোর্ডে কপি করা হয়েছে।", + "Toast_Message_Reported": "বার্তা সফলভাবে প্রতিবেদন করা হয়েছে", + "Toast_Message_Starred": "বার্তা তারকাচিহ্নিত হয়েছে", + "Toast_Message_Unpinned": "বার্তা পিন আনপিন করা হয়েছে", + "Toast_Message_Unstarred": "বার্তা তারকাচিহ্নিত অপসারণ হয়েছে", + "Toast_Not_Have_Permission_To_Access_Channel": "আপনার এই চ্যানেলে প্রবেশ করার অনুমতি নেই। লগ আউট হচ্ছে", + "Toast_Open_Authentication_App": "আপনার প্রমাণীকরণ অ্যাপটি খুলুন এবং কোড প্রবেশ করুন।", + "Toast_Theme_Copied": "থিম কপি করা হয়েছে।", "Tooltip_Audio_Message": "অডিও বার্তা", "Tooltip_Bold": "বোল্ড", "Tooltip_Cancel_Recording": "রেকর্ডিং বাতিল করুন", @@ -82,12 +121,41 @@ "Tooltip_Finish_Recording": "রেকর্ডিং শেষ করুন", "Tooltip_Italic": "ইটালিক", "Tooltip_Link": "লিঙ্ক", - "Tooltip_More": "আরও", + "Tooltip_More": "আরো", "Tooltip_Multiline": "একাধিক লাইন", - "Tooltip_Pinned": "পিন করা", - "Tooltip_Starred": "চিহ্নিত করা", + "Tooltip_Pinned": "পিন করা হয়েছে", + "Tooltip_Starred": "তারকাচিহ্নিত", "Tooltip_Strike": "স্ট্রাইক", "Tooltip_Upload_File": "ফাইল আপলোড করুন", "Tooltip_Video_Message": "ভিডিও বার্তা", + "Topic": "বিষয়", + "Unpin": "পিন আনপিন করুন", + "Unstar": "তারকা অপসারণ করুন", + "user": "ব্যবহারকারী", + "User_Action_Added_Message": "@{{message}} যোগ করেছেন", + "User_Action_Allowed_Reactions": "প্রতিক্রিয়া অনুমোদিত", + "User_Action_Archived_Room": "ঘরটি আর্কাইভ করা হয়েছে", + "User_Action_Changed_Room": "ঘরটি {{message}} এ পরিবর্তিত হয়েছে", + "User_Action_Changed_Room_Announcement": "ঘরের ঘোষণা পরিবর্তিত হয়েছে: {{message}}", + "User_Action_Changed_Room_Avatar": "ঘরের অ্যাভাটার পরিবর্তিত হয়েছে", + "User_Action_Changed_Room_Description": "ঘরের বর্ণনা পরিবর্তিত হয়েছে: {{message}}", + "User_Action_Changed_Room_Name": "ঘরের নাম পরিবর্তিত হয়েছে: {{message}}", + "User_Action_Changed_Room_Topic": "ঘরের বিষয় পরিবর্তিত হয়েছে: {{message}}", + "User_Action_Converted_Room": "#{{message}} রূপান্তরিত হয়েছে", + "User_Action_Joined_The_Channel": "চ্যানেলে যোগদান করেছে", + "User_Action_Left_The_Channel": "চ্যানেল ছেড়েছে", + "User_Action_Message_Removed": "বার্তা মুছে ফেলা হয়েছে", + "User_Action_Pinned_Message": "একটি বার্তা পিন করা হয়েছে:", + "User_Action_Removed_Message": "@{{message}} মুছে ফেলা হয়েছে", + "User_Action_Removed_Read_Only": "পড়ার শুধুমাত্র অনুমতি মুছে ফেলা হয়েছে", + "User_Action_Removed_Role": "{{role}} হিসেবে {{message}} মুছে ফেলা হয়েছে", + "User_Action_Set_Role": "{{role}} হিসেবে {{message}} সেট করা হয়েছে", + "User_Action_Set_Room_Read_Only": "ঘরটি পড়ার জন্য সেট করা হয়েছে", + "User_Action_Unarchived_Room": "ঘরটি আনআর্কাইভ করা হয়েছে", + "User_Action_User_Typing_Multiple": ", এবং {{count}} আরও লিখছেন...", + "User_Action_User_Typing_One": "{{user}} লিখছেন...", + "User_Action_User_Typing_Two": "{{user1}} এবং {{user2}} লিখছেন...", + "Verified": "যাচাইকৃত", + "Verified_Not": "যাচাইকৃত নয়", "Videos": "ভিডিও" } diff --git a/packages/i18n/src/locales/en.i18n.json b/packages/i18n/src/locales/en.i18n.json index 0622d22881..7fb848bde7 100644 --- a/packages/i18n/src/locales/en.i18n.json +++ b/packages/i18n/src/locales/en.i18n.json @@ -1,51 +1,90 @@ { - "#general": "#general", + "Add": "Add", + "Add_Reaction": "Add reaction", + "Admin": "Admin", "All": "All", + "all": "all", + "Announcement": "Announcement", "Are_You_Sure": "Are you sure?", "Audios": "Audios", + "avatar": "avatar", + "Bio": "Bio", + "Browser_Not_Support_Audio": "Your browser does not support the audio element.", + "Browser_Not_Support_Video": "Your browser does not support the video tag.", "Cancel": "Cancel", "Close": "Close", + "Copy_link": "Copy link", + "Copy_Message": "Copy message", + "Created_At": "Created at", "Delete": "Delete", "Delete_Forever_Warning": "Deleting a file will delete it forever. This cannot be undone.", + "Delete_Message": "Delete message", + "Delete_Message_Ask": "Delete this message?", + "Description": "Description", "Download": "Download", + "Edit": "Edit", "Editing_Message": "Editing Message", + "Email": "Email", "Email_Or_Username": "Email or username", + "Enter_TOTP": "Enter TOTP", "Esc_Enter_Instruction": "esc to cancel · enter to save", + "Field_Required": "This field is required", "Files": "Files", + "Full_Name": "Full Name", + "general": "general", + "here": "here", "Images": "Images", "Invite_Link": "Invite Link", - "Invite_Link_Will_Expire_On": "Your invite link will expire on", + "Invite_Link_Will_Expire_On": "Your invite link will expire on ", "Invite_Members": "Invite Members", - "Join": "Join", + "Join": "JOIN", + "Last_Login": "Last login", "Login": "Login", "Login_To_Chat": "Login to chat", "Logout": "Logout", + "Mailto_Email": "mailto:{{email}}", "Maximize": "Maximize", "Members": "Members", "Mentions": "Mentions", "Message": "Message", "Message_Too_Long": "Message Too Long!", "Minimize": "Minimize", + "New_Messages": "New messages", + "Nickname": "Nickname", "No_Files_Found": "No Files Found", - "No_Mentions_Found": "No mentions found", + "No_Members_Found": "No Members Found", + "No_Mentions_Found": "No mentions Found", + "No_Messages_Found": "No Messages Found", "No_Pinned_Messages": "No Pinned Messages", "No_Starred_Messages": "No Starred Messages", + "No_Threads_Found": "No Threads Found", "Ok": "Ok", "Options": "Options", "Password": "Password", + "Pin": "Pin", "Pinned_Messages": "Pinned Messages", + "Quote": "Quote", "Read_Only_Room": "This room is read only", "Ready_To_Chat": "Ready to chat? Login now to join the fun.", + "Reply": "Reply", + "Report": "Report", "Report_message": "Report message", "Report_this_message": "Report this message?", + "Report_this_message_Why": "Why do you want to report this message?", + "Roles": "Roles", "Room_Information": "Room Information", + "Search_Files": "Search Files", + "Search_Members": "Search Members", "Search_Messages": "Search Messages", "Search_Threads": "Search Threads", - "Search_Members": "Search Members", - "Search_Files": "Search Files", "Send_It_As_Attachment_Instead": "Send it as attachment instead?", "Sign_In_To_Chat": "Sign in to chat", + "Something_Wrong": "Something went wrong", + "Star": "Star", "Starred_Messages": "Starred Messages", + "Start_Of_Conversation": "Start of conversation", + "Submit": "Submit", + "Team_Information": "Team Information", "Texts": "Texts", "Threads": "Threads", "Toast_Channel_Not_Exist": "Channel doesn't exist. Logging out.", @@ -55,7 +94,6 @@ "Toast_Error_In_Copying_Message_Link": "Error in copying message link", "Toast_Error_In_Deleting_Message": "Error in deleting message", "Toast_Error_In_Editing_Message": "Error editing message, login again", - "Toast_Error_In_File_Deleting": "Error in deleting file", "Toast_Error_In_Pinning_Message": "Error pinning message", "Toast_Error_In_Reporting_Message": "Error in reporting message", @@ -90,5 +128,34 @@ "Tooltip_Strike": "Strike", "Tooltip_Upload_File": "Upload File", "Tooltip_Video_Message": "Video Message", + "Topic": "Topic", + "Unpin": "Unpin", + "Unstar": "Unstar", + "user": "user", + "User_Action_Added_Message": "added @{{message}}", + "User_Action_Allowed_Reactions": "allowed reactions", + "User_Action_Archived_Room": "archived room", + "User_Action_Changed_Room": "changed room to {{message}}", + "User_Action_Changed_Room_Announcement": "changed room announcement to: {{message}}", + "User_Action_Changed_Room_Avatar": "changed room avatar", + "User_Action_Changed_Room_Description": "changed room description to: {{message}}", + "User_Action_Changed_Room_Name": "changed room name to {{message}}", + "User_Action_Changed_Room_Topic": "changed room topic to: {{message}}", + "User_Action_Converted_Room": "converted #{{message}}", + "User_Action_Joined_The_Channel": "joined the channel", + "User_Action_Left_The_Channel": "left the channel", + "User_Action_Message_Removed": "message removed", + "User_Action_Pinned_Message": "Pinned a message:", + "User_Action_Removed_Message": "removed @{{message}}", + "User_Action_Removed_Read_Only": "removed read only permission", + "User_Action_Removed_Role": "removed {{message}} as {{role}}", + "User_Action_Set_Role": "set {{message}} as {{role}}", + "User_Action_Set_Room_Read_Only": "set room to read only", + "User_Action_Unarchived_Room": "unarchived room", + "User_Action_User_Typing_Multiple": ", and {{count}} more are typing...", + "User_Action_User_Typing_One": "{{user}} is typing...", + "User_Action_User_Typing_Two": "{{user1}} and {{user2}} are typing...", + "Verified": "Verified", + "Verified_Not": "Not Verified", "Videos": "Videos" } diff --git a/packages/i18n/src/locales/es.i18n.json b/packages/i18n/src/locales/es.i18n.json index 3576863c08..36f9fb32de 100644 --- a/packages/i18n/src/locales/es.i18n.json +++ b/packages/i18n/src/locales/es.i18n.json @@ -1,93 +1,161 @@ { - "#general": "#general", + "Add": "Añadir", + "Add_Reaction": "Añadir reacción", + "Admin": "Administrador", "All": "Todos", + "all": "todos", + "Announcement": "Anuncio", "Are_You_Sure": "¿Estás seguro?", "Audios": "Audios", + "avatar": "avatar", + "Bio": "Biografía", + "Browser_Not_Support_Audio": "Tu navegador no soporta el elemento de audio.", + "Browser_Not_Support_Video": "Tu navegador no soporta la etiqueta de video.", "Cancel": "Cancelar", "Close": "Cerrar", + "Copy_link": "Copiar enlace", + "Copy_Message": "Copiar mensaje", + "Created_At": "Creado el", "Delete": "Eliminar", "Delete_Forever_Warning": "Eliminar un archivo lo eliminará para siempre. Esto no se puede deshacer.", + "Delete_Message": "Eliminar mensaje", + "Delete_Message_Ask": "¿Eliminar este mensaje?", + "Description": "Descripción", "Download": "Descargar", + "Edit": "Editar", "Editing_Message": "Editando mensaje", + "Email": "Correo electrónico", "Email_Or_Username": "Correo electrónico o nombre de usuario", + "Enter_TOTP": "Introduzca el TOTP", "Esc_Enter_Instruction": "esc para cancelar · enter para guardar", + "Field_Required": "Este campo es obligatorio", "Files": "Archivos", + "Full_Name": "Nombre completo", + "general": "general", + "here": "aquí", "Images": "Imágenes", "Invite_Link": "Enlace de invitación", - "Invite_Link_Will_Expire_On": "Tu enlace de invitación expirará el", + "Invite_Link_Will_Expire_On": "Tu enlace de invitación caducará el ", "Invite_Members": "Invitar miembros", - "Join": "Unirse", + "Join": "UNIRSE", + "Last_Login": "Último inicio de sesión", "Login": "Iniciar sesión", - "Login_To_Chat": "Iniciar sesión para chatear", + "Login_To_Chat": "Inicia sesión para chatear", "Logout": "Cerrar sesión", + "Mailto_Email": "mailto:{{email}}", "Maximize": "Maximizar", "Members": "Miembros", "Mentions": "Menciones", "Message": "Mensaje", "Message_Too_Long": "¡Mensaje demasiado largo!", "Minimize": "Minimizar", + "New_Messages": "Nuevos mensajes", + "Nickname": "Apodo", "No_Files_Found": "No se encontraron archivos", + "No_Members_Found": "No se encontraron miembros", "No_Mentions_Found": "No se encontraron menciones", - "No_Pinned_Messages": "No hay mensajes anclados", + "No_Messages_Found": "No se encontraron mensajes", + "No_Pinned_Messages": "No hay mensajes fijados", "No_Starred_Messages": "No hay mensajes destacados", - "Ok": "Ok", + "No_Threads_Found": "No se encontraron hilos", + "Ok": "Aceptar", "Options": "Opciones", "Password": "Contraseña", - "Pinned_Messages": "Mensajes anclados", - "Read_Only_Room": "Esta sala es solo de lectura", + "Pin": "Fijar", + "Pinned_Messages": "Mensajes fijados", + "Quote": "Citar", + "Read_Only_Room": "Esta sala es solo lectura", "Ready_To_Chat": "¿Listo para chatear? Inicia sesión ahora para unirte a la diversión.", - "Report_message": "Reportar mensaje", - "Report_this_message": "¿Reportar este mensaje?", + "Reply": "Responder", + "Report": "Informar", + "Report_message": "Informar mensaje", + "Report_this_message": "¿Informar este mensaje?", + "Report_this_message_Why": "¿Por qué deseas informar este mensaje?", + "Roles": "Roles", "Room_Information": "Información de la sala", + "Search_Files": "Buscar archivos", + "Search_Members": "Buscar miembros", "Search_Messages": "Buscar mensajes", "Search_Threads": "Buscar hilos", - "Search_Members": "Buscar miembros", - "Search_Files": "Buscar archivos", "Send_It_As_Attachment_Instead": "¿Enviar como archivo adjunto en su lugar?", - "Sign_In_To_Chat": "Inicia sesión para chatear", + "Sign_In_To_Chat": "Iniciar sesión para chatear", + "Something_Wrong": "Algo salió mal", + "Star": "Estrella", "Starred_Messages": "Mensajes destacados", + "Start_Of_Conversation": "Inicio de la conversación", + "Submit": "Enviar", + "Team_Information": "Información del equipo", "Texts": "Textos", "Threads": "Hilos", - "Toast_Channel_Not_Exist": "El canal no existe. Cierre sesión.", + "Toast_Channel_Not_Exist": "El canal no existe. Cerrando sesión.", "Toast_Copied_To_Clipboard": "Copiado al portapapeles", "Toast_Copy_Failed": "Error al copiar al portapapeles.", - "Toast_Error_In_Copying_Message": "Error al copiar el mensaje", + "Toast_Error_In_Copying_Message": "Error al copiar mensaje", "Toast_Error_In_Copying_Message_Link": "Error al copiar el enlace del mensaje", - "Toast_Error_In_Deleting_Message": "Error al eliminar el mensaje", - "Toast_Error_In_Editing_Message": "Error al editar el mensaje, inicie sesión nuevamente", - "Toast_Error_In_File_Deleting": "Error al eliminar el archivo", - "Toast_Error_In_Pinning_Message": "Error al fijar el mensaje", - "Toast_Error_In_Reporting_Message": "Error al reportar el mensaje", + "Toast_Error_In_Deleting_Message": "Error al eliminar mensaje", + "Toast_Error_In_Editing_Message": "Error al editar mensaje, inicia sesión nuevamente", + "Toast_Error_In_File_Deleting": "Error al eliminar archivo", + "Toast_Error_In_Pinning_Message": "Error al fijar mensaje", + "Toast_Error_In_Reporting_Message": "Error al reportar mensaje", "Toast_File_Deleted": "Archivo eliminado", - "Toast_Invalid_TOTP": "TOTP (Contraseña de un solo uso basada en el tiempo) inválida.", - "Toast_Invalid_Username_Password": "Nombre de usuario o contraseña inválidos. Verifique sus credenciales e intente nuevamente", - "Toast_Logged_In": "Inicio de sesión exitoso", + "Toast_Invalid_TOTP": "TOTP no válido (Contraseña de un solo uso basada en tiempo).", + "Toast_Invalid_Username_Password": "Nombre de usuario o contraseña no válidos. Verifica tus credenciales e intenta nuevamente", + "Toast_Logged_In": "Sesión iniciada exitosamente", "Toast_Media_Type_Not_Accepted": "Tipo de medio no aceptado", "Toast_Message_Copied": "Mensaje copiado exitosamente", "Toast_Message_Deleted": "Mensaje eliminado exitosamente", "Toast_Message_Link_Copied": "Enlace del mensaje copiado exitosamente", - "Toast_Message_Pinned": "Mensaje anclado", + "Toast_Message_Pinned": "Mensaje fijado", "Toast_Message_Reported": "Mensaje reportado exitosamente", "Toast_Message_Starred": "Mensaje destacado", - "Toast_Message_Unpinned": "Mensaje desanclado", + "Toast_Message_Unpinned": "Mensaje despinado", "Toast_Message_Unstarred": "Mensaje desmarcado", - "Toast_Not_Have_Permission_To_Access_Channel": "No tienes permiso para acceder a este canal. Cierre sesión.", - "Toast_Open_Authentication_App": "Por favor, abra su aplicación de autenticación e ingrese el código.", + "Toast_Not_Have_Permission_To_Access_Channel": "No tienes permiso para acceder a este canal. Cerrando sesión", + "Toast_Open_Authentication_App": "Por favor abre tu aplicación de autenticación e ingresa el código.", "Toast_Theme_Copied": "Tema copiado al portapapeles.", "Tooltip_Audio_Message": "Mensaje de audio", "Tooltip_Bold": "Negrita", "Tooltip_Cancel_Recording": "Cancelar grabación", "Tooltip_Code": "Código", "Tooltip_Emoji": "Emoji", - "Tooltip_Finish_Recording": "Terminar grabación", + "Tooltip_Finish_Recording": "Finalizar grabación", "Tooltip_Italic": "Cursiva", "Tooltip_Link": "Enlace", "Tooltip_More": "Más", "Tooltip_Multiline": "Multilínea", - "Tooltip_Pinned": "Anclado", + "Tooltip_Pinned": "Fijado", "Tooltip_Starred": "Destacado", "Tooltip_Strike": "Tachado", "Tooltip_Upload_File": "Subir archivo", "Tooltip_Video_Message": "Mensaje de video", + "Topic": "Tema", + "Unpin": "Desfijar", + "Unstar": "Quitar estrella", + "user": "usuario", + "User_Action_Added_Message": "añadió @{{message}}", + "User_Action_Allowed_Reactions": "permitió reacciones", + "User_Action_Archived_Room": "archivó la sala", + "User_Action_Changed_Room": "cambió la sala a {{message}}", + "User_Action_Changed_Room_Announcement": "cambió el anuncio de la sala a: {{message}}", + "User_Action_Changed_Room_Avatar": "cambió el avatar de la sala", + "User_Action_Changed_Room_Description": "cambió la descripción de la sala a: {{message}}", + "User_Action_Changed_Room_Name": "cambió el nombre de la sala a {{message}}", + "User_Action_Changed_Room_Topic": "cambió el tema de la sala a: {{message}}", + "User_Action_Converted_Room": "convertió #{{message}}", + "User_Action_Joined_The_Channel": "se unió al canal", + "User_Action_Left_The_Channel": "dejó el canal", + "User_Action_Message_Removed": "mensaje eliminado", + "User_Action_Pinned_Message": "Mensaje fijado:", + "User_Action_Removed_Message": "eliminó @{{message}}", + "User_Action_Removed_Read_Only": "eliminó el permiso de solo lectura", + "User_Action_Removed_Role": "eliminó a {{message}} como {{role}}", + "User_Action_Set_Role": "estableció a {{message}} como {{role}}", + "User_Action_Set_Room_Read_Only": "estableció la sala como solo lectura", + "User_Action_Unarchived_Room": "desarchivó la sala", + "User_Action_User_Typing_Multiple": ", y {{count}} más están escribiendo...", + "User_Action_User_Typing_One": "{{user}} está escribiendo...", + "User_Action_User_Typing_Two": "{{user1}} y {{user2}} están escribiendo...", + "Verified": "Verificado", + "Verified_Not": "No verificado", "Videos": "Videos" } diff --git a/packages/i18n/src/locales/fr.i18n.json b/packages/i18n/src/locales/fr.i18n.json index 6e82d799cb..a1f3d5a55c 100644 --- a/packages/i18n/src/locales/fr.i18n.json +++ b/packages/i18n/src/locales/fr.i18n.json @@ -1,66 +1,105 @@ { - "#general": "#général", - "All": "Tout", + "Add": "Ajouter", + "Add_Reaction": "Ajouter une réaction", + "Admin": "Administrateur", + "All": "Tous", + "all": "tous", + "Announcement": "Annonce", "Are_You_Sure": "Êtes-vous sûr ?", "Audios": "Audios", + "avatar": "avatar", + "Bio": "Biographie", + "Browser_Not_Support_Audio": "Votre navigateur ne prend pas en charge l'élément audio.", + "Browser_Not_Support_Video": "Votre navigateur ne prend pas en charge la balise vidéo.", "Cancel": "Annuler", "Close": "Fermer", + "Copy_link": "Copier le lien", + "Copy_Message": "Copier le message", + "Created_At": "Créé le", "Delete": "Supprimer", "Delete_Forever_Warning": "Supprimer un fichier le supprimera définitivement. Cela ne peut pas être annulé.", + "Delete_Message": "Supprimer le message", + "Delete_Message_Ask": "Supprimer ce message ?", + "Description": "Description", "Download": "Télécharger", - "Editing_Message": "Édition du message", + "Edit": "Modifier", + "Editing_Message": "Modification du message", + "Email": "Email", "Email_Or_Username": "Email ou nom d'utilisateur", - "Esc_Enter_Instruction": "échappement pour annuler · entrée pour enregistrer", + "Enter_TOTP": "Entrez le TOTP", + "Esc_Enter_Instruction": "esc pour annuler · entrer pour enregistrer", + "Field_Required": "Ce champ est requis", "Files": "Fichiers", + "Full_Name": "Nom complet", + "general": "général", + "here": "ici", "Images": "Images", "Invite_Link": "Lien d'invitation", - "Invite_Link_Will_Expire_On": "Votre lien d'invitation expirera le", + "Invite_Link_Will_Expire_On": "Votre lien d'invitation expirera le ", "Invite_Members": "Inviter des membres", - "Join": "Rejoindre", + "Join": "REJOINDRE", + "Last_Login": "Dernière connexion", "Login": "Se connecter", "Login_To_Chat": "Connectez-vous pour discuter", "Logout": "Se déconnecter", + "Mailto_Email": "mailto:{{email}}", "Maximize": "Maximiser", "Members": "Membres", "Mentions": "Mentions", "Message": "Message", "Message_Too_Long": "Message trop long !", "Minimize": "Minimiser", + "New_Messages": "Nouveaux messages", + "Nickname": "Pseudo", "No_Files_Found": "Aucun fichier trouvé", + "No_Members_Found": "Aucun membre trouvé", "No_Mentions_Found": "Aucune mention trouvée", + "No_Messages_Found": "Aucun message trouvé", "No_Pinned_Messages": "Aucun message épinglé", - "No_Starred_Messages": "Aucun message marqué", - "Ok": "D'accord", + "No_Starred_Messages": "Aucun message épinglé", + "No_Threads_Found": "Aucun fil trouvé", + "Ok": "Ok", "Options": "Options", "Password": "Mot de passe", + "Pin": "Épingler", "Pinned_Messages": "Messages épinglés", + "Quote": "Citer", "Read_Only_Room": "Cette salle est en lecture seule", - "Ready_To_Chat": "Prêt à discuter ? Connectez-vous maintenant pour rejoindre le fun.", + "Ready_To_Chat": "Prêt à discuter ? Connectez-vous maintenant pour rejoindre la conversation.", + "Reply": "Répondre", + "Report": "Signaler", "Report_message": "Signaler le message", "Report_this_message": "Signaler ce message ?", + "Report_this_message_Why": "Pourquoi voulez-vous signaler ce message ?", + "Roles": "Rôles", "Room_Information": "Informations sur la salle", + "Search_Files": "Rechercher des fichiers", + "Search_Members": "Rechercher des membres", "Search_Messages": "Rechercher des messages", "Search_Threads": "Rechercher des fils", - "Search_Members": "Rechercher des membres", - "Search_Files": "Rechercher des fichiers", - "Send_It_As_Attachment_Instead": "Envoyer plutôt en pièce jointe ?", - "Sign_In_To_Chat": "Connectez-vous pour discuter", - "Starred_Messages": "Messages marqués", + "Send_It_As_Attachment_Instead": "Envoyer cela en tant que pièce jointe à la place ?", + "Sign_In_To_Chat": "Se connecter pour discuter", + "Something_Wrong": "Quelque chose s'est mal passé", + "Star": "Étoile", + "Starred_Messages": "Messages épinglés", + "Start_Of_Conversation": "Début de la conversation", + "Submit": "Soumettre", + "Team_Information": "Informations sur l'équipe", "Texts": "Textes", - "Threads": "Discussions", + "Threads": "Fils", "Toast_Channel_Not_Exist": "Le canal n'existe pas. Déconnexion.", "Toast_Copied_To_Clipboard": "Copié dans le presse-papiers", "Toast_Copy_Failed": "Échec de la copie dans le presse-papiers.", "Toast_Error_In_Copying_Message": "Erreur lors de la copie du message", "Toast_Error_In_Copying_Message_Link": "Erreur lors de la copie du lien du message", "Toast_Error_In_Deleting_Message": "Erreur lors de la suppression du message", - "Toast_Error_In_Editing_Message": "Erreur lors de l'édition du message, veuillez vous reconnecter", + "Toast_Error_In_Editing_Message": "Erreur lors de la modification du message, veuillez vous reconnecter", "Toast_Error_In_File_Deleting": "Erreur lors de la suppression du fichier", "Toast_Error_In_Pinning_Message": "Erreur lors de l'épinglage du message", "Toast_Error_In_Reporting_Message": "Erreur lors de la signalisation du message", "Toast_File_Deleted": "Fichier supprimé", - "Toast_Invalid_TOTP": "TOTP (Mot de passe à usage unique basé sur le temps) invalide.", - "Toast_Invalid_Username_Password": "Nom d'utilisateur ou mot de passe invalide. Vérifiez vos informations d'identification et réessayez", + "Toast_Invalid_TOTP": "TOTP invalide (mot de passe à usage unique basé sur le temps).", + "Toast_Invalid_Username_Password": "Nom d'utilisateur ou mot de passe invalide. Veuillez vérifier vos informations d'identification et réessayer.", "Toast_Logged_In": "Connexion réussie", "Toast_Media_Type_Not_Accepted": "Type de média non accepté", "Toast_Message_Copied": "Message copié avec succès", @@ -71,7 +110,7 @@ "Toast_Message_Starred": "Message marqué", "Toast_Message_Unpinned": "Message désépinglé", "Toast_Message_Unstarred": "Message non marqué", - "Toast_Not_Have_Permission_To_Access_Channel": "Vous n'avez pas l'autorisation d'accéder à ce canal. Déconnexion.", + "Toast_Not_Have_Permission_To_Access_Channel": "Vous n'avez pas la permission d'accéder à ce canal. Déconnexion.", "Toast_Open_Authentication_App": "Veuillez ouvrir votre application d'authentification et entrer le code.", "Toast_Theme_Copied": "Thème copié dans le presse-papiers.", "Tooltip_Audio_Message": "Message audio", @@ -85,9 +124,38 @@ "Tooltip_More": "Plus", "Tooltip_Multiline": "Multiligne", "Tooltip_Pinned": "Épinglé", - "Tooltip_Starred": "Marqué", + "Tooltip_Starred": "Étoilé", "Tooltip_Strike": "Barré", - "Tooltip_Upload_File": "Télécharger le fichier", + "Tooltip_Upload_File": "Télécharger un fichier", "Tooltip_Video_Message": "Message vidéo", + "Topic": "Sujet", + "Unpin": "Désépingler", + "Unstar": "Enlever l'étoile", + "user": "utilisateur", + "User_Action_Added_Message": "a ajouté @{{message}}", + "User_Action_Allowed_Reactions": "a autorisé les réactions", + "User_Action_Archived_Room": "a archivé la salle", + "User_Action_Changed_Room": "a changé la salle en {{message}}", + "User_Action_Changed_Room_Announcement": "a changé l'annonce de la salle à : {{message}}", + "User_Action_Changed_Room_Avatar": "a changé l'avatar de la salle", + "User_Action_Changed_Room_Description": "a changé la description de la salle à : {{message}}", + "User_Action_Changed_Room_Name": "a changé le nom de la salle à {{message}}", + "User_Action_Changed_Room_Topic": "a changé le sujet de la salle à : {{message}}", + "User_Action_Converted_Room": "a converti #{{message}}", + "User_Action_Joined_The_Channel": "a rejoint le canal", + "User_Action_Left_The_Channel": "a quitté le canal", + "User_Action_Message_Removed": "message supprimé", + "User_Action_Pinned_Message": "Message épinglé :", + "User_Action_Removed_Message": "a supprimé @{{message}}", + "User_Action_Removed_Read_Only": "a supprimé la permission de lecture seule", + "User_Action_Removed_Role": "a supprimé {{message}} comme {{role}}", + "User_Action_Set_Role": "a défini {{message}} comme {{role}}", + "User_Action_Set_Room_Read_Only": "a défini la salle comme lecture seule", + "User_Action_Unarchived_Room": "a désarchivé la salle", + "User_Action_User_Typing_Multiple": ", et {{count}} autres sont en train d'écrire...", + "User_Action_User_Typing_One": "{{user}} est en train d'écrire...", + "User_Action_User_Typing_Two": "{{user1}} et {{user2}} sont en train d'écrire...", + "Verified": "Vérifié", + "Verified_Not": "Non vérifié", "Videos": "Vidéos" } diff --git a/packages/i18n/src/locales/hi.i18n.json b/packages/i18n/src/locales/hi.i18n.json index 27e03ec4c9..62732d3f0a 100644 --- a/packages/i18n/src/locales/hi.i18n.json +++ b/packages/i18n/src/locales/hi.i18n.json @@ -1,68 +1,107 @@ { - "#general": "#सामान्य", + "Add": "जोड़ें", + "Add_Reaction": "प्रतिक्रिया जोड़ें", + "Admin": "प्रशासक", "All": "सभी", + "all": "सभी", + "Announcement": "घोषणा", "Are_You_Sure": "क्या आप सुनिश्चित हैं?", "Audios": "ऑडियो", + "avatar": "अवतार", + "Bio": "जीवनी", + "Browser_Not_Support_Audio": "आपका ब्राउज़र ऑडियो तत्व का समर्थन नहीं करता।", + "Browser_Not_Support_Video": "आपका ब्राउज़र वीडियो टैग का समर्थन नहीं करता।", "Cancel": "रद्द करें", "Close": "बंद करें", + "Copy_link": "लिंक कॉपी करें", + "Copy_Message": "संदेश कॉपी करें", + "Created_At": "निर्मित किया गया", "Delete": "हटाएं", - "Delete_Forever_Warning": "एक फ़ाइल को हटाने से वह हमेशा के लिए हटा दी जाएगी। इसे पूर्ववत नहीं किया जा सकता।", + "Delete_Forever_Warning": "फाइल को हटाने से यह हमेशा के लिए हट जाएगी। इसे पलटा नहीं जा सकता।", + "Delete_Message": "संदेश हटाएं", + "Delete_Message_Ask": "क्या आप इस संदेश को हटाना चाहते हैं?", + "Description": "विवरण", "Download": "डाउनलोड करें", + "Edit": "संपादित करें", "Editing_Message": "संदेश संपादित कर रहे हैं", + "Email": "ईमेल", "Email_Or_Username": "ईमेल या उपयोगकर्ता नाम", - "Esc_Enter_Instruction": "रद्द करने के लिए esc · सहेजने के लिए enter", - "Files": "फ़ाइलें", - "Images": "चित्र", + "Enter_TOTP": "TOTP दर्ज करें", + "Esc_Enter_Instruction": "esc रद्द करने के लिए · enter सहेजने के लिए", + "Field_Required": "यह फ़ील्ड आवश्यक है", + "Files": "फाइलें", + "Full_Name": "पूरा नाम", + "general": "सामान्य", + "here": "यहाँ", + "Images": "छवियां", "Invite_Link": "आमंत्रण लिंक", - "Invite_Link_Will_Expire_On": "आपका आमंत्रण लिंक इस पर समाप्त होगा", + "Invite_Link_Will_Expire_On": "आपका आमंत्रण लिंक समाप्त हो जाएगा ", "Invite_Members": "सदस्यों को आमंत्रित करें", "Join": "जोड़ें", - "Login": "लॉगिन", + "Last_Login": "अंतिम लॉगिन", + "Login": "लॉग इन करें", "Login_To_Chat": "चैट करने के लिए लॉगिन करें", - "Logout": "लॉगआउट", - "Maximize": "बढ़ाएं", + "Logout": "लॉग आउट", + "Mailto_Email": "mailto:{{email}}", + "Maximize": "विस्तार करें", "Members": "सदस्य", "Mentions": "उल्लेख", "Message": "संदेश", "Message_Too_Long": "संदेश बहुत लंबा है!", - "Minimize": "घटाएं", - "No_Files_Found": "कोई फ़ाइल नहीं मिली", - "No_Mentions_Found ": "कोई उल्लेख नहीं मिला", - "No_Pinned_Message s": "कोई पिन किया गया संदेश नहीं है", - "No_Starred_Messag es": "कोई स्टार किए गए संदेश नहीं हैं", + "Minimize": "संकुचित करें", + "New_Messages": "नए संदेश", + "Nickname": "उप नाम", + "No_Files_Found": "कोई फाइल नहीं मिली", + "No_Members_Found": "कोई सदस्य नहीं मिला", + "No_Mentions_Found": "कोई उल्लेख नहीं मिला", + "No_Messages_Found": "कोई संदेश नहीं मिला", + "No_Pinned_Messages": "कोई पिन किया हुआ संदेश नहीं है", + "No_Starred_Messages": "कोई स्टार किया हुआ संदेश नहीं है", + "No_Threads_Found": "कोई थ्रेड नहीं मिला", "Ok": "ठीक है", "Options": "विकल्प", - "Password": "पासवर्ड ", + "Password": "पासवर्ड", + "Pin": "पिन करें", "Pinned_Messages": "पिन किए गए संदेश", - "Read_Only_Room": "यह कक्ष केवल पढ़ने के लिए है", - "Ready_To_Chat": " चैट करने के लिए तैयार हैं? मज़े में शामिल होने के लिए अभी लॉगिन करें।", + "Quote": "उद्धरण", + "Read_Only_Room": "यह कमरा केवल पढ़ने के लिए है", + "Ready_To_Chat": "चैट करने के लिए तैयार हैं? अब लॉगिन करके जुड़ें।", + "Reply": "उत्तर दें", + "Report": "रिपोर्ट करें", "Report_message": "संदेश रिपोर्ट करें", - "Report_this_messa ge": "क्या इस संदेश को रिपोर्ट करें?", - "Room_Information": "कक्ष जानकारी", + "Report_this_message": "क्या आप इस संदेश को रिपोर्ट करना चाहते हैं?", + "Report_this_message_Why": "आप इस संदेश को क्यों रिपोर्ट करना चाहते हैं?", + "Roles": "भूमिकाएं", + "Room_Information": "कमरे की जानकारी", + "Search_Files": "फाइलें खोजें", + "Search_Members": "सदस्य खोजें", "Search_Messages": "संदेश खोजें", "Search_Threads": "थ्रेड्स खोजें", - "Search_Members": "सदस्यों को खोजें", - "Search_Files": "फा इल्स खोजें", - "Send_It_As_Attach ment_Instead": "क्या इसे संलग्नक के रूप में भेजें?", + "Send_It_As_Attachment_Instead": "क्या इसे अटैचमेंट के रूप में भेजें?", "Sign_In_To_Chat": "चैट करने के लिए साइन इन करें", + "Something_Wrong": "कुछ गलत हुआ", + "Star": "स्टार", "Starred_Messages": "स्टार किए गए संदेश", + "Start_Of_Conversation": "वार्ता की शुरुआत", + "Submit": "सबमिट करें", + "Team_Information": "टीम जानकारी", "Texts": "पाठ", "Threads": "थ्रेड्स", - "Toast_Channel_Not_Exist": "चैनल मौजूद नहीं है। लॉग आउट हो रहा है।", + "Toast_Channel_Not_Exist": "चैनल मौजूद नहीं है। लॉगआउट हो रहा है।", "Toast_Copied_To_Clipboard": "क्लिपबोर्ड में कॉपी किया गया", "Toast_Copy_Failed": "क्लिपबोर्ड में कॉपी करने में विफल", "Toast_Error_In_Copying_Message": "संदेश को कॉपी करने में त्रुटि", "Toast_Error_In_Copying_Message_Link": "संदेश लिंक को कॉपी करने में त्रुटि", "Toast_Error_In_Deleting_Message": "संदेश को हटाने में त्रुटि", - "Toast_Error_In_Editing_Message": "संदेश संपादित करते समय त्रुटि, कृपया फिर से लॉगिन करें", - "Toast_Error_In_File_Deleting": "फ़ाइल हटाने में त्रुटि", + "Toast_Error_In_Editing_Message": "संदेश को संपादित करने में त्रुटि, कृपया फिर से लॉगिन करें", + "Toast_Error_In_File_Deleting": "फाइल को हटाने में त्रुटि", "Toast_Error_In_Pinning_Message": "संदेश को पिन करने में त्रुटि", "Toast_Error_In_Reporting_Message": "संदेश को रिपोर्ट करने में त्रुटि", - "Toast_File_Deleted": "फ़ाइल हटाई गई", - "Toast_Invalid_TOTP": "अवैध TOTP (समय-आधारित एकल उपयोग पासवर्ड)।", - "Toast_Invalid_Username_Password": "अमान्य उपयोगकर्ता नाम या पासवर्ड। कृपया अपनी क्रेडेंशियल्स जांचें और फिर से प्रयास करें", + "Toast_File_Deleted": "फाइल हटा दी गई", + "Toast_Invalid_TOTP": "अमान्य TOTP (समय आधारित एक बार उपयोग होने वाला पासवर्ड)।", + "Toast_Invalid_Username_Password": "अमान्य उपयोगकर्ता नाम या पासवर्ड। कृपया अपनी जानकारी जांचें और पुनः प्रयास करें", "Toast_Logged_In": "सफलतापूर्वक लॉगिन किया गया", - "Toast_Media_Type_Not_Accepted": "मीडिया प्रकार स्वीकार्य नहीं है", + "Toast_Media_Type_Not_Accepted": "मीडिया प्रकार स्वीकार नहीं किया गया", "Toast_Message_Copied": "संदेश सफलतापूर्वक कॉपी किया गया", "Toast_Message_Deleted": "संदेश सफलतापूर्वक हटाया गया", "Toast_Message_Link_Copied": "संदेश लिंक सफलतापूर्वक कॉपी किया गया", @@ -71,8 +110,8 @@ "Toast_Message_Starred": "संदेश स्टार किया गया", "Toast_Message_Unpinned": "संदेश अनपिन किया गया", "Toast_Message_Unstarred": "संदेश अनस्टार किया गया", - "Toast_Not_Have_Permission_To_Access_Channel": "आपको इस चैनल को एक्सेस करने की अनुमति नहीं है। लॉगआउट हो रहा है।", - "Toast_Open_Authentication_App": "कृपया अपनी प्रमाणीकरण ऐप खोलें और कोड दर्ज करें।", + "Toast_Not_Have_Permission_To_Access_Channel": "आपको इस चैनल को एक्सेस करने की अनुमति नहीं है। लॉगआउट हो रहा है", + "Toast_Open_Authentication_App": "कृपया अपने प्रमाणन ऐप को खोलें और कोड दर्ज करें।", "Toast_Theme_Copied": "थीम क्लिपबोर्ड में कॉपी की गई।", "Tooltip_Audio_Message": "ऑडियो संदेश", "Tooltip_Bold": "बोल्ड", @@ -87,7 +126,36 @@ "Tooltip_Pinned": "पिन किया गया", "Tooltip_Starred": "स्टार किया गया", "Tooltip_Strike": "स्ट्राइक", - "Tooltip_Upload_File": "फ़ाइल अपलोड करें", + "Tooltip_Upload_File": "फाइल अपलोड करें", "Tooltip_Video_Message": "वीडियो संदेश", + "Topic": "विषय", + "Unpin": "अनपिन करें", + "Unstar": "स्टार हटाएं", + "user": "उपयोगकर्ता", + "User_Action_Added_Message": "ने @{{message}} जोड़ा", + "User_Action_Allowed_Reactions": "ने प्रतिक्रियाओं की अनुमति दी", + "User_Action_Archived_Room": "ने कमरे को संग्रहित किया", + "User_Action_Changed_Room": "ने कमरे को {{message}} में बदल दिया", + "User_Action_Changed_Room_Announcement": "ने कमरे की घोषणा को बदला: {{message}}", + "User_Action_Changed_Room_Avatar": "ने कमरे का अवतार बदला", + "User_Action_Changed_Room_Description": "ने कमरे का विवरण बदला: {{message}}", + "User_Action_Changed_Room_Name": "ने कमरे का नाम बदला: {{message}}", + "User_Action_Changed_Room_Topic": "ने कमरे का विषय बदला: {{message}}", + "User_Action_Converted_Room": "ने #{{message}} को परिवर्तित किया", + "User_Action_Joined_The_Channel": "ने चैनल में शामिल हुआ", + "User_Action_Left_The_Channel": "ने चैनल छोड़ दिया", + "User_Action_Message_Removed": "संदेश हटा दिया", + "User_Action_Pinned_Message": "संदेश पिन किया: ", + "User_Action_Removed_Message": "ने @{{message}} हटाया", + "User_Action_Removed_Read_Only": "ने केवल पढ़ने की अनुमति हटा दी", + "User_Action_Removed_Role": "ने {{message}} को {{role}} के रूप में हटा दिया", + "User_Action_Set_Role": "ने {{message}} को {{role}} के रूप में सेट किया", + "User_Action_Set_Room_Read_Only": "ने कमरे को केवल पढ़ने के लिए सेट किया", + "User_Action_Unarchived_Room": "ने कमरे को अनआर्काइव किया", + "User_Action_User_Typing_Multiple": ", और {{count}} अन्य टाइप कर रहे हैं...", + "User_Action_User_Typing_One": "{{user}} टाइप कर रहा है...", + "User_Action_User_Typing_Two": "{{user1}} और {{user2}} टाइप कर रहे हैं...", + "Verified": "पुष्ट", + "Verified_Not": "अविकसित", "Videos": "वीडियो" } diff --git a/packages/i18n/src/locales/pt.i18n.json b/packages/i18n/src/locales/pt.i18n.json index 56d5286de0..6121dbb066 100644 --- a/packages/i18n/src/locales/pt.i18n.json +++ b/packages/i18n/src/locales/pt.i18n.json @@ -1,78 +1,117 @@ { - "#general": "#geral", + "Add": "Adicionar", + "Add_Reaction": "Adicionar reação", + "Admin": "Administrador", "All": "Tudo", - "Are_You_Sure": "Você tem certeza?", + "all": "tudo", + "Announcement": "Anúncio", + "Are_You_Sure": "Tem a certeza?", "Audios": "Áudios", + "avatar": "avatar", + "Bio": "Biografia", + "Browser_Not_Support_Audio": "O seu navegador não suporta o elemento de áudio.", + "Browser_Not_Support_Video": "O seu navegador não suporta a tag de vídeo.", "Cancel": "Cancelar", "Close": "Fechar", - "Delete": "Excluir", - "Delete_Forever_Warning": "Excluir um arquivo o apagará permanentemente. Isso não pode ser desfeito.", - "Download": "Baixar", - "Editing_Message": "Editando a mensagem", - "Email_Or_Username": "E-mail ou nome de usuário", - "Esc_Enter_Instruction": "esc para cancelar · enter para salvar", - "Files": "Arquivos", + "Copy_link": "Copiar link", + "Copy_Message": "Copiar mensagem", + "Created_At": "Criado em", + "Delete": "Eliminar", + "Delete_Forever_Warning": "Eliminar um ficheiro apagá-lo-á para sempre. Isto não pode ser revertido.", + "Delete_Message": "Eliminar mensagem", + "Delete_Message_Ask": "Eliminar esta mensagem?", + "Description": "Descrição", + "Download": "Descarregar", + "Edit": "Editar", + "Editing_Message": "A editar mensagem", + "Email": "E-mail", + "Email_Or_Username": "E-mail ou nome de utilizador", + "Enter_TOTP": "Introduza o TOTP", + "Esc_Enter_Instruction": "esc para cancelar · enter para guardar", + "Field_Required": "Este campo é obrigatório", + "Files": "Ficheiros", + "Full_Name": "Nome completo", + "general": "geral", + "here": "aqui", "Images": "Imagens", "Invite_Link": "Link de convite", - "Invite_Link_Will_Expire_On": "Seu link de convite expirará em", + "Invite_Link_Will_Expire_On": "O seu link de convite irá expirar em ", "Invite_Members": "Convidar membros", "Join": "Entrar", - "Login": "Entrar", - "Login_To_Chat": "Entre para conversar", + "Last_Login": "Último login", + "Login": "Iniciar sessão", + "Login_To_Chat": "Iniciar sessão para conversar", "Logout": "Sair", + "Mailto_Email": "mailto:{{email}}", "Maximize": "Maximizar", "Members": "Membros", "Mentions": "Menções", "Message": "Mensagem", - "Message_Too_Long": "Mensagem muito longa!", + "Message_Too_Long": "Mensagem demasiado longa!", "Minimize": "Minimizar", - "No_Files_Found": "Nenhum arquivo encontrado", + "New_Messages": "Novas mensagens", + "Nickname": "Apelido", + "No_Files_Found": "Nenhum ficheiro encontrado", + "No_Members_Found": "Nenhum membro encontrado", "No_Mentions_Found": "Nenhuma menção encontrada", - "No_Pinned_Messages": "Nenhuma mensagem fixada", - "No_Starred_Messages": "Nenhuma mensagem marcada", - "Ok": "Ok", + "No_Messages_Found": "Nenhuma mensagem encontrada", + "No_Pinned_Messages": "Sem mensagens fixadas", + "No_Starred_Messages": "Sem mensagens destacadas", + "No_Threads_Found": "Nenhum tópico encontrado", + "Ok": "OK", "Options": "Opções", - "Password": "Senha", + "Password": "Palavra-passe", + "Pin": "Fixar", "Pinned_Messages": "Mensagens fixadas", - "Read_Only_Room": "Esta sala é apenas para leitura", - "Ready_To_Chat": "Pronto para conversar? Entre agora para se juntar à diversão.", + "Quote": "Citar", + "Read_Only_Room": "Este quarto é apenas para leitura", + "Ready_To_Chat": "Pronto para conversar? Inicie sessão agora para entrar na diversão.", + "Reply": "Responder", + "Report": "Reportar", "Report_message": "Reportar mensagem", "Report_this_message": "Reportar esta mensagem?", - "Room_Information": "Informações da sala", + "Report_this_message_Why": "Porque quer reportar esta mensagem?", + "Roles": "Funções", + "Room_Information": "Informações do quarto", + "Search_Files": "Pesquisar ficheiros", + "Search_Members": "Pesquisar membros", "Search_Messages": "Pesquisar mensagens", "Search_Threads": "Pesquisar tópicos", - "Search_Members": "Pesquisar membros", - "Search_Files": "Pesquisar arquivos", "Send_It_As_Attachment_Instead": "Enviar como anexo em vez disso?", - "Sign_In_To_Chat": "Entre para conversar", - "Starred_Messages": "Mensagens marcadas", + "Sign_In_To_Chat": "Iniciar sessão para conversar", + "Something_Wrong": "Algo correu mal", + "Star": "Estrela", + "Starred_Messages": "Mensagens destacadas", + "Start_Of_Conversation": "Início da conversa", + "Submit": "Submeter", + "Team_Information": "Informações da equipa", "Texts": "Textos", "Threads": "Tópicos", - "Toast_Channel_Not_Exist": "Canal não existe. Saindo.", + "Toast_Channel_Not_Exist": "O canal não existe. A sair.", "Toast_Copied_To_Clipboard": "Copiado para a área de transferência", "Toast_Copy_Failed": "Falha ao copiar para a área de transferência.", "Toast_Error_In_Copying_Message": "Erro ao copiar mensagem", - "Toast_Error_In_Copying_Message_Link": "Erro ao copiar o link da mensagem", - "Toast_Error_In_Deleting_Message": "Erro ao excluir mensagem", - "Toast_Error_In_Editing_Message": "Erro ao editar mensagem, faça login novamente", - "Toast_Error_In_File_Deleting": "Erro ao excluir arquivo", + "Toast_Error_In_Copying_Message_Link": "Erro ao copiar link da mensagem", + "Toast_Error_In_Deleting_Message": "Erro ao eliminar mensagem", + "Toast_Error_In_Editing_Message": "Erro ao editar mensagem, inicie sessão novamente", + "Toast_Error_In_File_Deleting": "Erro ao eliminar ficheiro", "Toast_Error_In_Pinning_Message": "Erro ao fixar mensagem", "Toast_Error_In_Reporting_Message": "Erro ao reportar mensagem", - "Toast_File_Deleted": "Arquivo excluído", - "Toast_Invalid_TOTP": "TOTP (Senha de uso único baseada em tempo) inválido.", - "Toast_Invalid_Username_Password": "Nome de usuário ou senha inválidos. Verifique suas credenciais e tente novamente", - "Toast_Logged_In": "Logado com sucesso", - "Toast_Media_Type_Not_Accepted": "Tipo de mídia não aceito", + "Toast_File_Deleted": "Ficheiro eliminado", + "Toast_Invalid_TOTP": "TOTP (senha de uso único baseada no tempo) inválido.", + "Toast_Invalid_Username_Password": "Nome de utilizador ou palavra-passe inválidos. Por favor, verifique as suas credenciais e tente novamente", + "Toast_Logged_In": "Início de sessão bem-sucedido", + "Toast_Media_Type_Not_Accepted": "Tipo de media não aceito", "Toast_Message_Copied": "Mensagem copiada com sucesso", - "Toast_Message_Deleted": "Mensagem excluída com sucesso", + "Toast_Message_Deleted": "Mensagem eliminada com sucesso", "Toast_Message_Link_Copied": "Link da mensagem copiado com sucesso", "Toast_Message_Pinned": "Mensagem fixada", "Toast_Message_Reported": "Mensagem reportada com sucesso", - "Toast_Message_Starred": "Mensagem marcada", + "Toast_Message_Starred": "Mensagem destacada", "Toast_Message_Unpinned": "Mensagem desfixada", - "Toast_Message_Unstarred": "Mensagem desmarcada", - "Toast_Not_Have_Permission_To_Access_Channel": "Você não tem permissão para acessar este canal. Saindo.", - "Toast_Open_Authentication_App": "Por favor, abra seu aplicativo de autenticação e insira o código.", + "Toast_Message_Unstarred": "Mensagem retirada do destaque", + "Toast_Not_Have_Permission_To_Access_Channel": "Não tem permissão para aceder a este canal. A sair.", + "Toast_Open_Authentication_App": "Por favor, abra a sua aplicação de autenticação e insira o código.", "Toast_Theme_Copied": "Tema copiado para a área de transferência.", "Tooltip_Audio_Message": "Mensagem de áudio", "Tooltip_Bold": "Negrito", @@ -83,11 +122,40 @@ "Tooltip_Italic": "Itálico", "Tooltip_Link": "Link", "Tooltip_More": "Mais", - "Tooltip_Multiline": "Multilinhas", + "Tooltip_Multiline": "Multilinha", "Tooltip_Pinned": "Fixado", - "Tooltip_Starred": "Marcado", + "Tooltip_Starred": "Destacado", "Tooltip_Strike": "Riscado", - "Tooltip_Upload_File": "Enviar arquivo", + "Tooltip_Upload_File": "Carregar ficheiro", "Tooltip_Video_Message": "Mensagem de vídeo", + "Topic": "Tópico", + "Unpin": "Desfixar", + "Unstar": "Retirar destaque", + "user": "utilizador", + "User_Action_Added_Message": "adicionou @{{message}}", + "User_Action_Allowed_Reactions": "permitiu reações", + "User_Action_Archived_Room": "arquivou o quarto", + "User_Action_Changed_Room": "mudou o quarto para {{message}}", + "User_Action_Changed_Room_Announcement": "mudou o anúncio do quarto para: {{message}}", + "User_Action_Changed_Room_Avatar": "mudou o avatar do quarto", + "User_Action_Changed_Room_Description": "mudou a descrição do quarto para: {{message}}", + "User_Action_Changed_Room_Name": "mudou o nome do quarto para {{message}}", + "User_Action_Changed_Room_Topic": "mudou o tópico do quarto para: {{message}}", + "User_Action_Converted_Room": "convertido #{{message}}", + "User_Action_Joined_The_Channel": "entrou no canal", + "User_Action_Left_The_Channel": "deixou o canal", + "User_Action_Message_Removed": "mensagem removida", + "User_Action_Pinned_Message": "Fixou uma mensagem:", + "User_Action_Removed_Message": "removeu @{{message}}", + "User_Action_Removed_Read_Only": "removeu a permissão de somente leitura", + "User_Action_Removed_Role": "removeram {{message}} como {{role}}", + "User_Action_Set_Role": "definiu {{message}} como {{role}}", + "User_Action_Set_Room_Read_Only": "definiu o quarto como somente leitura", + "User_Action_Unarchived_Room": "desarquivou o quarto", + "User_Action_User_Typing_Multiple": ", e {{count}} outros estão a escrever...", + "User_Action_User_Typing_One": "{{user}} está a escrever...", + "User_Action_User_Typing_Two": "{{user1}} e {{user2}} estão a escrever...", + "Verified": "Verificado", + "Verified_Not": "Não verificado", "Videos": "Vídeos" } diff --git a/packages/i18n/src/locales/ru.i18n.json b/packages/i18n/src/locales/ru.i18n.json index f494a20d23..e4a9bdac4a 100644 --- a/packages/i18n/src/locales/ru.i18n.json +++ b/packages/i18n/src/locales/ru.i18n.json @@ -1,93 +1,161 @@ { - "#general": "#общий", + "Add": "Добавить", + "Add_Reaction": "Добавить реакцию", + "Admin": "Администратор", "All": "Все", + "all": "все", + "Announcement": "Объявление", "Are_You_Sure": "Вы уверены?", "Audios": "Аудио", + "avatar": "аватар", + "Bio": "Биография", + "Browser_Not_Support_Audio": "Ваш браузер не поддерживает элемент audio.", + "Browser_Not_Support_Video": "Ваш браузер не поддерживает тег video.", "Cancel": "Отмена", "Close": "Закрыть", + "Copy_link": "Копировать ссылку", + "Copy_Message": "Копировать сообщение", + "Created_At": "Создано", "Delete": "Удалить", - "Delete_Forever_Warning": "Удаление файла приведет к его безвозвратному удалению. Это нельзя отменить.", + "Delete_Forever_Warning": "Удаление файла приведет к его безвозвратному удалению.", + "Delete_Message": "Удалить сообщение", + "Delete_Message_Ask": "Удалить это сообщение?", + "Description": "Описание", "Download": "Скачать", + "Edit": "Редактировать", "Editing_Message": "Редактирование сообщения", + "Email": "Электронная почта", "Email_Or_Username": "Электронная почта или имя пользователя", + "Enter_TOTP": "Введите TOTP", "Esc_Enter_Instruction": "esc для отмены · enter для сохранения", + "Field_Required": "Это поле обязательно для заполнения", "Files": "Файлы", + "Full_Name": "Полное имя", + "general": "общий", + "here": "здесь", "Images": "Изображения", "Invite_Link": "Ссылка для приглашения", - "Invite_Link_Will_Expire_On": "Ваша ссылка на приглашение истечет", + "Invite_Link_Will_Expire_On": "Ваша ссылка для приглашения истечет ", "Invite_Members": "Пригласить участников", - "Join": "Присоединиться", + "Join": "Войти", + "Last_Login": "Последний вход", "Login": "Войти", - "Login_To_Chat": "Войдите для чата", + "Login_To_Chat": "Войдите в чат", "Logout": "Выйти", - "Maximize": "Максимизировать", + "Mailto_Email": "mailto:{{email}}", + "Maximize": "Развернуть", "Members": "Участники", "Mentions": "Упоминания", "Message": "Сообщение", "Message_Too_Long": "Сообщение слишком длинное!", "Minimize": "Свернуть", + "New_Messages": "Новые сообщения", + "Nickname": "Никнейм", "No_Files_Found": "Файлы не найдены", + "No_Members_Found": "Участники не найдены", "No_Mentions_Found": "Упоминания не найдены", + "No_Messages_Found": "Сообщения не найдены", "No_Pinned_Messages": "Нет закрепленных сообщений", - "No_Starred_Messages": "Нет сообщений в избранном", + "No_Starred_Messages": "Нет отмеченных сообщений", + "No_Threads_Found": "Тематические обсуждения не найдены", "Ok": "Ок", - "Options": "Опции", + "Options": "Настройки", "Password": "Пароль", + "Pin": "Закрепить", "Pinned_Messages": "Закрепленные сообщения", - "Read_Only_Room": "Эта комната только для чтения", - "Ready_To_Chat": "Готовы общаться? Войдите, чтобы присоединиться к веселью.", - "Report_message": "Сообщить о сообщении", - "Report_this_message": "Сообщить об этом сообщении?", + "Quote": "Цитата", + "Read_Only_Room": "Этот чат только для чтения", + "Ready_To_Chat": "Готовы к чату? Войдите, чтобы присоединиться.", + "Reply": "Ответить", + "Report": "Пожаловаться", + "Report_message": "Пожаловаться на сообщение", + "Report_this_message": "Пожаловаться на это сообщение?", + "Report_this_message_Why": "Почему вы хотите пожаловаться на это сообщение?", + "Roles": "Роли", "Room_Information": "Информация о комнате", + "Search_Files": "Поиск файлов", + "Search_Members": "Поиск участников", "Search_Messages": "Поиск сообщений", - "Search_Threads": "Искать темы", - "Search_Members": "Искать участников", - "Search_Files": "Искать файлы", - "Send_It_As_Attachment_Instead": "Отправить как вложение вместо этого?", - "Sign_In_To_Chat": "Войдите, чтобы общаться", - "Starred_Messages": "Сообщения в избранном", + "Search_Threads": "Поиск тем", + "Send_It_As_Attachment_Instead": "Отправить как вложение?", + "Sign_In_To_Chat": "Войдите в чат", + "Something_Wrong": "Что-то пошло не так", + "Star": "Звезда", + "Starred_Messages": "Отмеченные сообщения", + "Start_Of_Conversation": "Начало разговора", + "Submit": "Отправить", + "Team_Information": "Информация о команде", "Texts": "Тексты", - "Threads": "Треды", + "Threads": "Тематические обсуждения", "Toast_Channel_Not_Exist": "Канал не существует. Выход из системы.", "Toast_Copied_To_Clipboard": "Скопировано в буфер обмена", - "Toast_Copy_Failed": "Не удалось скопировать в буфер обмена.", - "Toast_Error_In_Copying_Message": "Ошибка при копировании сообщения", - "Toast_Error_In_Copying_Message_Link": "Ошибка при копировании ссылки на сообщение", + "Toast_Copy_Failed": "Ошибка копирования в буфер обмена.", + "Toast_Error_In_Copying_Message": "Ошибка копирования сообщения", + "Toast_Error_In_Copying_Message_Link": "Ошибка копирования ссылки на сообщение", "Toast_Error_In_Deleting_Message": "Ошибка при удалении сообщения", "Toast_Error_In_Editing_Message": "Ошибка при редактировании сообщения, войдите снова", "Toast_Error_In_File_Deleting": "Ошибка при удалении файла", "Toast_Error_In_Pinning_Message": "Ошибка при закреплении сообщения", - "Toast_Error_In_Reporting_Message": "Ошибка при сообщении о сообщении", + "Toast_Error_In_Reporting_Message": "Ошибка при подаче жалобы на сообщение", "Toast_File_Deleted": "Файл удален", - "Toast_Invalid_TOTP": "Неверный TOTP (одноразовый пароль на основе времени).", - "Toast_Invalid_Username_Password": "Неверное имя пользователя или пароль. Проверьте свои учетные данные и попробуйте снова", - "Toast_Logged_In": "Успешный вход в систему", + "Toast_Invalid_TOTP": "Недействительный TOTP (одноразовый пароль по времени).", + "Toast_Invalid_Username_Password": "Неверный логин или пароль. Пожалуйста, проверьте свои данные и попробуйте снова", + "Toast_Logged_In": "Вы успешно вошли в систему", "Toast_Media_Type_Not_Accepted": "Тип медиа не принят", "Toast_Message_Copied": "Сообщение успешно скопировано", "Toast_Message_Deleted": "Сообщение успешно удалено", "Toast_Message_Link_Copied": "Ссылка на сообщение успешно скопирована", "Toast_Message_Pinned": "Сообщение закреплено", - "Toast_Message_Reported": "Сообщение успешно отправлено на рассмотрение", - "Toast_Message_Starred": "Сообщение добавлено в избранное", + "Toast_Message_Reported": "Сообщение успешно пожаловано", + "Toast_Message_Starred": "Сообщение отмечено", "Toast_Message_Unpinned": "Сообщение откреплено", - "Toast_Message_Unstarred": "Сообщение удалено из избранного", - "Toast_Not_Have_Permission_To_Access_Channel": "У вас нет прав для доступа к этому каналу. Выход из системы.", - "Toast_Open_Authentication_App": "Пожалуйста, откройте приложение для аутентификации и введите код.", + "Toast_Message_Unstarred": "Сообщение снято с отметки", + "Toast_Not_Have_Permission_To_Access_Channel": "У вас нет прав для доступа к этому каналу. Выход из системы", + "Toast_Open_Authentication_App": "Пожалуйста, откройте ваше приложение для аутентификации и введите код.", "Toast_Theme_Copied": "Тема скопирована в буфер обмена.", - "Tooltip_Audio_Message": "Аудиосообщение", - "Tooltip_Bold": "Полужирный", + "Tooltip_Audio_Message": "Аудио сообщение", + "Tooltip_Bold": "Жирный", "Tooltip_Cancel_Recording": "Отменить запись", "Tooltip_Code": "Код", "Tooltip_Emoji": "Эмодзи", "Tooltip_Finish_Recording": "Завершить запись", "Tooltip_Italic": "Курсив", "Tooltip_Link": "Ссылка", - "Tooltip_More": "Подробнее", + "Tooltip_More": "Больше", "Tooltip_Multiline": "Многострочный", "Tooltip_Pinned": "Закреплено", - "Tooltip_Starred": "Избранное", + "Tooltip_Starred": "Отмечено", "Tooltip_Strike": "Зачеркнутый", "Tooltip_Upload_File": "Загрузить файл", "Tooltip_Video_Message": "Видео сообщение", + "Topic": "Тема", + "Unpin": "Открепить", + "Unstar": "Снять отметку", + "user": "пользователь", + "User_Action_Added_Message": "добавил @{{message}}", + "User_Action_Allowed_Reactions": "разрешил реакции", + "User_Action_Archived_Room": "архивировал комнату", + "User_Action_Changed_Room": "изменил комнату на {{message}}", + "User_Action_Changed_Room_Announcement": "изменил объявление комнаты на: {{message}}", + "User_Action_Changed_Room_Avatar": "изменил аватар комнаты", + "User_Action_Changed_Room_Description": "изменил описание комнаты на: {{message}}", + "User_Action_Changed_Room_Name": "изменил имя комнаты на {{message}}", + "User_Action_Changed_Room_Topic": "изменил тему комнаты на: {{message}}", + "User_Action_Converted_Room": "конвертировал #{{message}}", + "User_Action_Joined_The_Channel": "присоединился к каналу", + "User_Action_Left_The_Channel": "покинул канал", + "User_Action_Message_Removed": "сообщение удалено", + "User_Action_Pinned_Message": "Закрепил сообщение:", + "User_Action_Removed_Message": "удалил @{{message}}", + "User_Action_Removed_Read_Only": "удалил права только для чтения", + "User_Action_Removed_Role": "удалил {{message}} как {{role}}", + "User_Action_Set_Role": "назначил {{message}} роль {{role}}", + "User_Action_Set_Room_Read_Only": "установил комнату как только для чтения", + "User_Action_Unarchived_Room": "разархивировал комнату", + "User_Action_User_Typing_Multiple": ", и ещё {{count}} пишут...", + "User_Action_User_Typing_One": "{{user}} пишет...", + "User_Action_User_Typing_Two": "{{user1}} и {{user2}} пишут...", + "Verified": "Подтверждено", + "Verified_Not": "Не подтверждено", "Videos": "Видео" } diff --git a/packages/react/src/views/ChatBody/ChatBody.js b/packages/react/src/views/ChatBody/ChatBody.js index 8d7c3ac978..0ebe4e45b3 100644 --- a/packages/react/src/views/ChatBody/ChatBody.js +++ b/packages/react/src/views/ChatBody/ChatBody.js @@ -15,6 +15,7 @@ import { Modal, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import RCContext from '../../context/RCInstance'; import { useMessageStore, @@ -318,7 +319,7 @@ const ChatBody = ({ {isModalOpen && ( - Announcement + {i18n.t('Announcement')} )} diff --git a/packages/react/src/views/ChatHeader/ChatHeader.js b/packages/react/src/views/ChatHeader/ChatHeader.js index 0971ce7c77..96185b18c1 100644 --- a/packages/react/src/views/ChatHeader/ChatHeader.js +++ b/packages/react/src/views/ChatHeader/ChatHeader.js @@ -11,6 +11,7 @@ import { useTheme, Avatar, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useRCContext } from '../../context/RCInstance'; import { useUserStore, @@ -190,14 +191,13 @@ const ChatHeader = ({ ) { dispatchToastMessage({ type: 'error', - message: "Channel doesn't exist. Logging out.", + message: i18n.t('Toast_Channel_Not_Exist'), }); await RCInstance.logout(); } else if ('errorType' in res && res.errorType === 'Not Allowed') { dispatchToastMessage({ type: 'error', - message: - "You don't have permission to access this channel. Logging out", + message: i18n.t('Toast_Not_Have_Permission_To_Access_Channel'), }); await RCInstance.logout(); } @@ -224,77 +224,77 @@ const ChatHeader = ({ const options = useMemo( () => ({ minmax: { - label: `${fullScreen ? 'Minimize' : 'Maximize'}`, + label: `${fullScreen ? i18n.t('Minimize') : i18n.t('Maximize')}`, id: 'minmax', onClick: () => setFullScreen((prev) => !prev), iconName: `${fullScreen ? 'collapse' : 'expand'}`, visible: true, }, close: { - label: 'Close', + label: i18n.t('Close'), id: 'close', onClick: () => setClosableState((prev) => !prev), iconName: 'cross', visible: isClosable, }, thread: { - label: 'Threads', + label: i18n.t('Threads'), id: 'thread', onClick: () => setExclusiveState(setShowAllThreads), iconName: 'thread', visible: true, }, mentions: { - label: 'Mentions', + label: i18n.t('Mentions'), id: 'mention', onClick: () => setExclusiveState(setShowMentions), iconName: 'at', visible: true, }, starred: { - label: 'Starred Messages', + label: i18n.t('Starred_Messages'), id: 'starred', onClick: () => setExclusiveState(setShowStarred), iconName: 'star', visible: true, }, pinned: { - label: 'Pinned Messages', + label: i18n.t('Pinned_Messages'), id: 'pinned', onClick: () => setExclusiveState(setShowPinned), iconName: 'pin', visible: true, }, members: { - label: 'Members', + label: i18n.t('Members'), id: 'members', onClick: () => setExclusiveState(setShowMembers), iconName: 'members', visible: isUserAuthenticated, }, files: { - label: 'Files', + label: i18n.t('Files'), id: 'files', onClick: () => setExclusiveState(setShowAllFiles), iconName: 'clip', visible: isUserAuthenticated, }, search: { - label: 'Search Messages', + label: i18n.t('Search_Messages'), id: 'search', onClick: () => setExclusiveState(setShowSearch), iconName: 'magnifier', visible: isUserAuthenticated, }, rInfo: { - label: 'Room Information', + label: i18n.t('Room_Information'), id: 'rInfo', onClick: () => setExclusiveState(setShowChannelinfo), iconName: 'info', visible: isUserAuthenticated, }, logout: { - label: 'Logout', + label: i18n.t('Logout'), id: 'logout', onClick: handleLogout, iconName: 'reply-directly', @@ -414,7 +414,7 @@ const ChatHeader = ({ className="ec-chat-header--channelName" css={styles.clearSpacing} > - {channelName || 'Login to chat'} + {channelName || i18n.t('Login_To_Chat')} )} diff --git a/packages/react/src/views/ChatInput/AudioMessageRecorder.js b/packages/react/src/views/ChatInput/AudioMessageRecorder.js index 53dbddf4bd..bee2d27d8b 100644 --- a/packages/react/src/views/ChatInput/AudioMessageRecorder.js +++ b/packages/react/src/views/ChatInput/AudioMessageRecorder.js @@ -6,6 +6,7 @@ import { Tooltip, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useMediaRecorder } from '../../hooks/useMediaRecorder'; import useMessageStore from '../../store/messageStore'; import { getCommonRecorderStyles } from './ChatInput.styles'; @@ -148,7 +149,7 @@ const AudioMessageRecorder = (props) => { {displayName} ) : ( - + { {state === 'recording' && ( <> - + @@ -176,7 +177,7 @@ const AudioMessageRecorder = (props) => { {time} - + diff --git a/packages/react/src/views/ChatInput/ChatInput.js b/packages/react/src/views/ChatInput/ChatInput.js index 34ebffb86f..b27da19ca7 100644 --- a/packages/react/src/views/ChatInput/ChatInput.js +++ b/packages/react/src/views/ChatInput/ChatInput.js @@ -12,6 +12,7 @@ import { useComponentOverrides, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useRCContext } from '../../context/RCInstance'; import { useUserStore, @@ -328,7 +329,7 @@ const ChatInput = ({ scrollToBottom }) => { message.replace(/\n/g, '\\n') ); if (!res.success) { - handleSendError('Error editing message, login again'); + handleSendError(i18n.t('Toast_Error_In_Editing_Message')); } }; @@ -464,9 +465,9 @@ const ChatInput = ({ scrollToBottom }) => { { } instructions={ editMessage.msg || editMessage.attachments - ? 'esc to cancel · enter to save' + ? i18n.t('Esc_Enter_Instruction') : undefined } /> @@ -526,8 +527,8 @@ const ChatInput = ({ scrollToBottom }) => { isUserAuthenticated && canSendMsg ? `Message ${channelInfo.name ? `#${channelInfo.name}` : ''}` : isUserAuthenticated - ? 'This room is read only' - : 'Sign in to chat' + ? i18n.t('Read_Only_Room') + : i18n.t('Sign_In_To_Chat') } css={styles.textInput} onChange={onTextChange} @@ -557,7 +558,7 @@ const ChatInput = ({ scrollToBottom }) => { /> ) : ( )} @@ -580,7 +581,7 @@ const ChatInput = ({ scrollToBottom }) => { - Message Too Long! + {i18n.t('Message_Too_Long')} setIsMsgLong(false)} /> @@ -589,14 +590,15 @@ const ChatInput = ({ scrollToBottom }) => { margin: 1em; `} > - Send it as attachment instead? + {i18n.t('Send_It_As_Attachment_Instead')} diff --git a/packages/react/src/views/ChatInput/ChatInputFormattingToolbar.js b/packages/react/src/views/ChatInput/ChatInputFormattingToolbar.js index 5d8c20a600..f8e0ddbf5e 100644 --- a/packages/react/src/views/ChatInput/ChatInputFormattingToolbar.js +++ b/packages/react/src/views/ChatInput/ChatInputFormattingToolbar.js @@ -8,6 +8,7 @@ import { useComponentOverrides, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { EmojiPicker } from '../EmojiPicker/index'; import { useMessageStore } from '../../store'; import { formatter } from '../../lib/textFormat'; @@ -99,7 +100,7 @@ const ChatInputFormattingToolbar = ({ emoji ) : ( - + file ) : ( - + link ) : ( - + 0 && ( - + diff --git a/packages/react/src/views/ChatInput/VideoMessageRecoder.js b/packages/react/src/views/ChatInput/VideoMessageRecoder.js index 814c2093aa..dfa4d3bb30 100644 --- a/packages/react/src/views/ChatInput/VideoMessageRecoder.js +++ b/packages/react/src/views/ChatInput/VideoMessageRecoder.js @@ -8,6 +8,7 @@ import { Modal, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useMediaRecorder } from '../../hooks/useMediaRecorder'; import useMessageStore from '../../store/messageStore'; import { getCommonRecorderStyles } from './ChatInput.styles'; @@ -193,7 +194,10 @@ const VideoMessageRecorder = (props) => { `} /> - + @@ -202,7 +206,10 @@ const VideoMessageRecorder = (props) => { {time} - + diff --git a/packages/react/src/views/FileMessage/FileMessage.js b/packages/react/src/views/FileMessage/FileMessage.js index 4944005c0d..a3eb506df0 100644 --- a/packages/react/src/views/FileMessage/FileMessage.js +++ b/packages/react/src/views/FileMessage/FileMessage.js @@ -13,6 +13,7 @@ import { lighten, darken, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import FilePreviewContainer from './FilePreviewContainer'; import FileBodyContainer from '../Message/MessageBodyContainer'; @@ -62,12 +63,12 @@ const FileMessage = ({ fileMessage }) => { if (res.success) { dispatchToastMessage({ type: 'success', - message: 'File deleted', + message: i18n.t('Toast_File_Deleted'), }); } else { dispatchToastMessage({ type: 'error', - message: 'Error in deleting file', + message: i18n.t('Toast_Error_In_File_Deleting'), }); } } @@ -103,13 +104,13 @@ const FileMessage = ({ fileMessage }) => { { id: 'download', action: () => downloadFile(fileMessage?.url, fileMessage?.title), - label: 'Download', + label: i18n.t('Download'), icon: 'circle-arrow-down', }, { id: 'delete', action: () => setFileToDelete(fileMessage), - label: 'Delete', + label: i18n.t('Delete'), icon: 'trash', }, ]} @@ -125,19 +126,19 @@ const FileMessage = ({ fileMessage }) => { size="1.25rem" style={{ marginRight: '0.5rem' }} /> - Are you sure? + {i18n.t('Are_You_Sure')} - Deleting a file will delete it forever. This cannot be undone. + {i18n.t('Delete_Forever_Warning')} diff --git a/packages/react/src/views/ImageGallery/ImageGallery.js b/packages/react/src/views/ImageGallery/ImageGallery.js index 3a10b2e55a..5c0ba54b36 100644 --- a/packages/react/src/views/ImageGallery/ImageGallery.js +++ b/packages/react/src/views/ImageGallery/ImageGallery.js @@ -8,6 +8,7 @@ import { useTheme, ReactPortal, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useRCContext } from '../../context/RCInstance'; import { Swiper, SwiperSlide } from './Swiper'; import getImageGalleryStyles from './ImageGallery.styles'; @@ -79,7 +80,7 @@ const ImageGallery = ({ currentFileId, setShowGallery }) => { color: theme.colors.primaryForeground, }} > - Something went wrong + {i18n.t('Something_Wrong')} ) : ( diff --git a/packages/react/src/views/LoginForm/LoginForm.js b/packages/react/src/views/LoginForm/LoginForm.js index 1285e5e1eb..9ad99f74fe 100644 --- a/packages/react/src/views/LoginForm/LoginForm.js +++ b/packages/react/src/views/LoginForm/LoginForm.js @@ -8,6 +8,7 @@ import { Icon, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useLoginStore } from '../../store'; import { useRCAuth } from '../../hooks/useRCAuth'; import styles from './LoginForm.styles'; @@ -68,13 +69,13 @@ export default function LoginForm() { const iconName = showPassword ? 'eyeopen' : 'eyeclose'; const fields = [ { - label: 'Email or username', + label: i18n.t('Email_Or_Username'), onChange: handleEdituserOrEmail, placeholder: 'example@example.com', error: usernameError, }, { - label: 'Password', + label: i18n.t('Password'), type: showPassword ? 'text' : 'password', onChange: handleEditPassword, error: passwordError, @@ -124,7 +125,7 @@ export default function LoginForm() { font-size: 13px; `} > - This field is required + {i18n.t('Field_Required')} )} @@ -136,7 +137,7 @@ export default function LoginForm() { margin: 10px 0; `} > - Login + {i18n.t('Login')} diff --git a/packages/react/src/views/Mentions/MembersList.js b/packages/react/src/views/Mentions/MembersList.js index f0cbc49d30..f362c7b51b 100644 --- a/packages/react/src/views/Mentions/MembersList.js +++ b/packages/react/src/views/Mentions/MembersList.js @@ -1,6 +1,7 @@ import React, { useCallback, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import { Box, useTheme } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import getMemberListStyles from './MembersList.styles'; function MembersList({ @@ -155,7 +156,7 @@ function MembersList({ }} > - all + {i18n.t('all')}
  • - here + {i18n.t('here')}
  • diff --git a/packages/react/src/views/Message/Message.js b/packages/react/src/views/Message/Message.js index dd8cf8d09d..8a8923cd6d 100644 --- a/packages/react/src/views/Message/Message.js +++ b/packages/react/src/views/Message/Message.js @@ -10,6 +10,7 @@ import { lighten, darken, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { Attachments } from '../AttachmentHandler'; import { Markdown } from '../Markdown'; import MessageHeader from './MessageHeader'; @@ -105,13 +106,13 @@ const Message = ({ await RCInstance.starMessage(msg._id); dispatchToastMessage({ type: 'success', - message: 'Message starred', + message: i18n.t('Toast_Message_Starred'), }); } else { await RCInstance.unstarMessage(msg._id); dispatchToastMessage({ type: 'success', - message: 'Message unstarred', + message: i18n.t('Toast_Message_Unstarred'), }); } getStarredMessages(); @@ -127,12 +128,14 @@ const Message = ({ msg.pinned = isPinned; dispatchToastMessage({ type: 'error', - message: 'Error pinning message', + message: i18n.t('Toast_Error_In_Pinning_Message'), }); } else { dispatchToastMessage({ type: 'success', - message: isPinned ? 'Message unpinned' : 'Message pinned', + message: isPinned + ? i18n.t('Toast_Message_Unpinned') + : i18n.t('Toast_Message_Pinned'), }); } }; @@ -148,12 +151,12 @@ const Message = ({ await navigator.clipboard.writeText(textToCopy); dispatchToastMessage({ type: 'success', - message: 'Message copied successfully', + message: i18n.t('Toast_Message_Copied'), }); } catch (error) { dispatchToastMessage({ type: 'error', - message: 'Error in copying message', + message: i18n.t('Toast_Error_In_Copying_Message'), }); } }; @@ -170,12 +173,12 @@ const Message = ({ await navigator.clipboard.writeText(messageLink); dispatchToastMessage({ type: 'success', - message: 'Message link copied successfully', + message: i18n.t('Toast_Message_Link_Copied'), }); } catch (err) { dispatchToastMessage({ type: 'error', - message: 'Error in copying message link', + message: i18n.t('Toast_Error_In_Copying_Message_Link'), }); } }; @@ -186,12 +189,12 @@ const Message = ({ if (res.success) { dispatchToastMessage({ type: 'success', - message: 'Message deleted successfully', + message: i18n.t('Toast_Message_Deleted'), }); } else { dispatchToastMessage({ type: 'error', - message: 'Error in deleting message', + message: i18n.t('Toast_Error_In_Deleting_Message'), }); } }; diff --git a/packages/react/src/views/Message/MessageAvatarContainer.js b/packages/react/src/views/Message/MessageAvatarContainer.js index 016bbb0b06..09e0fb4838 100644 --- a/packages/react/src/views/Message/MessageAvatarContainer.js +++ b/packages/react/src/views/Message/MessageAvatarContainer.js @@ -6,6 +6,7 @@ import { Tooltip, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import RCContext from '../../context/RCInstance'; import { getMessageAvatarContainerStyles } from './Message.styles'; import useSetExclusiveState from '../../hooks/useSetExclusiveState'; @@ -42,7 +43,7 @@ const MessageAvatarContainer = ({ {!sequential ? ( ) : null} {isStarred && sequential ? ( - + ) : null} {isPinned && sequential ? ( - + ) : null} diff --git a/packages/react/src/views/Message/MessageBodyContainer.js b/packages/react/src/views/Message/MessageBodyContainer.js index 7c124135fe..0abd26ea53 100644 --- a/packages/react/src/views/Message/MessageBodyContainer.js +++ b/packages/react/src/views/Message/MessageBodyContainer.js @@ -5,7 +5,6 @@ import { appendClassNames, useTheme, } from '@embeddedchat/ui-elements'; - import { getMessageBodyContainerStyles } from './Message.styles'; const MessageBodyContainer = ({ diff --git a/packages/react/src/views/Message/MessageDivider.js b/packages/react/src/views/Message/MessageDivider.js index 617b7615cf..fd41988c02 100644 --- a/packages/react/src/views/Message/MessageDivider.js +++ b/packages/react/src/views/Message/MessageDivider.js @@ -5,7 +5,6 @@ import { appendClassNames, useTheme, } from '@embeddedchat/ui-elements'; - import { getMessageDividerStyles } from './Message.styles'; export const MessageDivider = ({ diff --git a/packages/react/src/views/Message/MessageHeader.js b/packages/react/src/views/Message/MessageHeader.js index eaaaa54cd0..19621c26e2 100644 --- a/packages/react/src/views/Message/MessageHeader.js +++ b/packages/react/src/views/Message/MessageHeader.js @@ -9,6 +9,7 @@ import { useTheme, appendClassNames, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useMemberStore, useUserStore } from '../../store'; import { getMessageHeaderStyles } from './Message.styles'; import useDisplayNameColor from '../../hooks/useDisplayNameColor'; @@ -41,59 +42,75 @@ const MessageHeader = ({ const userActions = () => { switch (message.t) { case 'ul': - return 'left the channel'; + return i18n.t('User_Action_Left_The_Channel'); case 'uj': - return 'joined the channel'; + return i18n.t('User_Action_Joined_The_Channel'); case 'ru': - return `removed @${message.message || message.msg}`; + return i18n.t('User_Action_Removed_Message', { + message: message.message || message.msg, + }); case 'au': - return `added @${message.message || message.msg}`; + return i18n.t('User_Action_Added_Message', { + message: message.message || message.msg, + }); case 'message_pinned': - return 'Pinned a message:'; + return i18n.t('User_Action_Pinned_Message'); case 'rm': - return 'message removed'; + return i18n.t('User_Action_Message_Removed'); case 'subscription-role-added': - return `set ${message?.msg} as ${message?.role}`; + return i18n.t('User_Action_Set_Role', { + message: message?.msg, + role: message?.role, + }); case 'subscription-role-removed': - return `removed ${message?.msg} as ${message?.role}`; + return i18n.t('User_Action_Removed_Role', { + message: message?.msg, + role: message?.role, + }); case 'room_changed_privacy': - return `changed room to ${message?.msg}`; + return i18n.t('User_Action_Changed_Room', { message: message?.msg }); case 'room-set-read-only': - return 'set room to read only'; + return i18n.t('User_Action_Set_Room_Read_Only'); case 'room-removed-read-only': - return 'removed read only permission'; + return i18n.t('User_Action_Removed_Read_Only'); case 'room-archived': - return 'archived room'; + return i18n.t('User_Action_Archived_Room'); case 'room-unarchived': - return 'unarchived room'; + return i18n.t('User_Action_Unarchived_Room'); case 'room-allowed-reacting': - return 'allowed reactions'; + return i18n.t('User_Action_Allowed_Reactions'); case 'room_changed_avatar': - return `changed room avatar`; + return i18n.t('User_Action_Changed_Room_Avatar'); case 'room_changed_announcement': - return `changed room announcement to: ${ - message?.msg && message.msg.length > 0 ? message.msg : '(none)' - }`; + return i18n.t('User_Action_Changed_Room_Announcement', { + message: + message?.msg && message.msg.length > 0 ? message.msg : '(none)', + }); case 'room_changed_description': - return `changed room description to: ${ - message?.msg && message.msg.length > 0 ? message.msg : '(none)' - }`; + return i18n.t('User_Action_Changed_Room_Description', { + message: + message?.msg && message.msg.length > 0 ? message.msg : '(none)', + }); case 'room_changed_topic': - return `changed room topic to: ${ - message?.msg && message.msg.length > 0 ? message.msg : '(none)' - }`; + return i18n.t('User_Action_Changed_Room_Topic', { + message: + message?.msg && message.msg.length > 0 ? message.msg : '(none)', + }); case 'r': - return `changed room name to ${ - message?.msg && message.msg.length > 0 ? message.msg : '(none)' - }`; + return i18n.t('User_Action_Changed_Room_Name', { + message: + message?.msg && message.msg.length > 0 ? message.msg : '(none)', + }); case 'user-converted-to-team': - return `converted #${ - message?.msg && message.msg.length > 0 ? message.msg : '(none)' - } to team`; + return i18n.t('User_Action_Converted_Room', { + message: + message?.msg && message.msg.length > 0 ? message.msg : '(none)', + }); case 'user-converted-to-channel': - return `converted #${ - message?.msg && message.msg.length > 0 ? message.msg : '(none)' - } to channel`; + return i18n.t('User_Action_Converted_Room', { + message: + message?.msg && message.msg.length > 0 ? message.msg : '(none)', + }); default: return ''; } @@ -141,7 +158,7 @@ const MessageHeader = ({ css={styles.userRole} className={appendClassNames('ec-message-user-role')} > - Admin + {i18n.t('Admin')} )} @@ -189,7 +206,7 @@ const MessageHeader = ({ /> )} {isStarred ? ( - + ) : null} {isPinned ? ( - + - Reply + {i18n.t('Reply')} diff --git a/packages/react/src/views/Message/MessageToolbox.js b/packages/react/src/views/Message/MessageToolbox.js index 0208ff663d..ab6443655c 100644 --- a/packages/react/src/views/Message/MessageToolbox.js +++ b/packages/react/src/views/Message/MessageToolbox.js @@ -9,6 +9,7 @@ import { appendClassNames, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import RCContext from '../../context/RCInstance'; import { EmojiPicker } from '../EmojiPicker'; import { getMessageToolboxStyles } from './Message.styles'; @@ -89,14 +90,14 @@ export const MessageToolbox = ({ const options = useMemo( () => ({ reply: { - label: 'Reply in thread', + label: i18n.t('Reply'), id: 'reply', onClick: handleOpenThread(message), iconName: 'thread', visible: !isThreadMessage, }, quote: { - label: 'Quote', + label: i18n.t('Quote'), id: 'quote', onClick: () => handleQuoteMessage(message), iconName: 'quote', @@ -106,8 +107,8 @@ export const MessageToolbox = ({ label: message.starred && message.starred.find((u) => u._id === authenticatedUserId) - ? 'Unstar' - : 'Star', + ? i18n.t('Unstar') + : i18n.t('Star'), id: 'star', onClick: () => handleStarMessage(message), iconName: @@ -118,21 +119,21 @@ export const MessageToolbox = ({ visible: true, }, reaction: { - label: 'Add reaction', + label: i18n.t('Add_Reaction'), id: 'reaction', onClick: () => setEmojiOpen(true), iconName: 'emoji', visible: true, }, pin: { - label: message.pinned ? 'Unpin' : 'Pin', + label: message.pinned ? i18n.t('Unpin') : i18n.t('Pin'), id: 'pin', onClick: () => handlePinMessage(message), iconName: message.pinned ? 'pin-filled' : 'pin', visible: isAllowedToPin, }, edit: { - label: 'Edit', + label: i18n.t('Edit'), id: 'edit', onClick: () => handleEditMessage(message), iconName: 'edit', @@ -141,21 +142,21 @@ export const MessageToolbox = ({ ghost: !isEditing, }, copy: { - label: 'Copy message', + label: i18n.t('Copy_Message'), id: 'copy', onClick: () => handleCopyMessage(message), iconName: 'copy', visible: true, }, link: { - label: 'Copy link', + label: i18n.t('Copy_link'), id: 'link', onClick: () => handleCopyMessageLink(message), iconName: 'link', visible: true, }, delete: { - label: 'Delete', + label: i18n.t('Delete'), id: 'delete', onClick: () => setShowDeleteModal(true), iconName: 'trash', @@ -163,7 +164,7 @@ export const MessageToolbox = ({ type: 'destructive', }, report: { - label: 'Report', + label: i18n.t('Report'), id: 'report', onClick: () => handlerReportMessage(message), iconName: 'report', @@ -232,7 +233,11 @@ export const MessageToolbox = ({ @@ -263,7 +268,7 @@ export const MessageToolbox = ({ size="1.25rem" style={{ marginRight: '0.5rem' }} />{' '} - Delete this message? + {i18n.t('Delete_Message_Ask')} @@ -296,7 +301,7 @@ export const MessageToolbox = ({ src={`${instanceHost}/file-upload/${message.file._id}/${message.file.name}`} type={message.file.type} /> - Your browser does not support the video tag. + {i18n.t('Browser_Not_Support_Video')} ) : message.file.type.startsWith('audio/') ? ( ) : ( @@ -327,7 +332,7 @@ export const MessageToolbox = ({ diff --git a/packages/react/src/views/MessageAggregators/FileGallery.js b/packages/react/src/views/MessageAggregators/FileGallery.js index 8c23f6eefd..aee5c742f1 100644 --- a/packages/react/src/views/MessageAggregators/FileGallery.js +++ b/packages/react/src/views/MessageAggregators/FileGallery.js @@ -1,5 +1,6 @@ import React, { useState, useMemo, useEffect } from 'react'; import { useComponentOverrides } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useChannelStore, useMessageStore } from '../../store'; import { useRCContext } from '../../context/RCInstance'; import { MessageAggregator } from './common/MessageAggregator'; @@ -18,12 +19,12 @@ const FileGallery = () => { const [selectedFilter, setSelectedFilter] = useState('all'); const options = [ - { value: 'all', label: 'All' }, - { value: 'application', label: 'Files' }, - { value: 'video', label: 'Videos' }, - { value: 'image', label: 'Images' }, - { value: 'audio', label: 'Audios' }, - { value: 'text', label: 'Texts' }, + { value: 'all', label: i18n.t('All') }, + { value: 'application', label: i18n.t('Files') }, + { value: 'video', label: i18n.t('Videos') }, + { value: 'image', label: i18n.t('Images') }, + { value: 'audio', label: i18n.t('Audios') }, + { value: 'text', label: i18n.t('Texts') }, ]; const handleInputChange = (e) => { @@ -70,9 +71,9 @@ const FileGallery = () => { return ( { searchProps={{ isSearch: true, handleInputChange, - placeholder: 'Search Files', + placeholder: i18n.t('Search_Files'), }} fetching={isFetching} shouldRender={(file) => file.path} diff --git a/packages/react/src/views/MessageAggregators/MentionedMessages.js b/packages/react/src/views/MessageAggregators/MentionedMessages.js index 67da546a5b..be934f4cdd 100644 --- a/packages/react/src/views/MessageAggregators/MentionedMessages.js +++ b/packages/react/src/views/MessageAggregators/MentionedMessages.js @@ -1,5 +1,6 @@ import React from 'react'; import { useComponentOverrides } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useUserStore } from '../../store'; import { MessageAggregator } from './common/MessageAggregator'; @@ -9,9 +10,9 @@ const MentionedMessages = () => { const viewType = variantOverrides.viewType || 'Sidebar'; return ( msg.mentions && msg.mentions.some((star) => star._id === authenticatedUserId) diff --git a/packages/react/src/views/MessageAggregators/PinnedMessages.js b/packages/react/src/views/MessageAggregators/PinnedMessages.js index 884e13529c..540e7e4a13 100644 --- a/packages/react/src/views/MessageAggregators/PinnedMessages.js +++ b/packages/react/src/views/MessageAggregators/PinnedMessages.js @@ -1,5 +1,6 @@ import React from 'react'; import { useComponentOverrides } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { MessageAggregator } from './common/MessageAggregator'; const PinnedMessages = () => { @@ -7,9 +8,9 @@ const PinnedMessages = () => { const viewType = variantOverrides.viewType || 'Sidebar'; return ( msg.pinned} viewType={viewType} /> diff --git a/packages/react/src/views/MessageAggregators/SearchMessages.js b/packages/react/src/views/MessageAggregators/SearchMessages.js index b4248461c6..73562e32ab 100644 --- a/packages/react/src/views/MessageAggregators/SearchMessages.js +++ b/packages/react/src/views/MessageAggregators/SearchMessages.js @@ -1,6 +1,7 @@ import React, { useState, useContext, useEffect, useCallback } from 'react'; import debounce from 'lodash/debounce'; import { useComponentOverrides } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import RCContext from '../../context/RCInstance'; import { MessageAggregator } from './common/MessageAggregator'; @@ -42,13 +43,13 @@ const SearchMessages = () => { return ( !!msg} diff --git a/packages/react/src/views/MessageAggregators/StarredMessages.js b/packages/react/src/views/MessageAggregators/StarredMessages.js index 5ced944f06..430adf512b 100644 --- a/packages/react/src/views/MessageAggregators/StarredMessages.js +++ b/packages/react/src/views/MessageAggregators/StarredMessages.js @@ -1,5 +1,6 @@ import React, { useCallback, useEffect } from 'react'; import { useComponentOverrides } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useStarredMessageStore, useUserStore } from '../../store'; import { MessageAggregator } from './common/MessageAggregator'; @@ -18,9 +19,9 @@ const StarredMessages = () => { ); return ( { @@ -25,13 +24,13 @@ const ThreadedMessages = () => { return ( !msg.t && msg.tcount} diff --git a/packages/react/src/views/MessageList/MessageList.js b/packages/react/src/views/MessageList/MessageList.js index 6a13952165..efed44f0b0 100644 --- a/packages/react/src/views/MessageList/MessageList.js +++ b/packages/react/src/views/MessageList/MessageList.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { css } from '@emotion/react'; import { isSameDay } from 'date-fns'; import { Box, Icon, Throbber, useTheme } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useMessageStore } from '../../store'; import MessageReportWindow from '../ReportMessage/MessageReportWindow'; import isMessageSequential from '../../lib/isMessageSequential'; @@ -55,7 +56,7 @@ const MessageList = ({ zIndex: 10, }} > - Start of conversation + {i18n.t('Start_Of_Conversation')} )} {loadingOlderMessages && isUserAuthenticated && ( diff --git a/packages/react/src/views/QuoteMessage/QuoteMessage.js b/packages/react/src/views/QuoteMessage/QuoteMessage.js index 7fd9634e04..13a1c0926c 100644 --- a/packages/react/src/views/QuoteMessage/QuoteMessage.js +++ b/packages/react/src/views/QuoteMessage/QuoteMessage.js @@ -8,6 +8,7 @@ import { useComponentOverrides, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import RCContext from '../../context/RCInstance'; import { useMessageStore } from '../../store'; import getQuoteMessageStyles from './QuoteMessage.styles'; @@ -72,7 +73,7 @@ const QuoteMessage = ({ className = '', style = {}, message }) => { src={`${instanceHost}/file-upload/${message.file._id}/${message.file.name}`} type={message.file.type} /> - Your browser does not support the video tag. + {i18n.t('Browser_Not_Support_Video')} ) : message.file.type.startsWith('audio/') ? ( ) : ( diff --git a/packages/react/src/views/ReportMessage/MessageReportWindow.js b/packages/react/src/views/ReportMessage/MessageReportWindow.js index 33957e72ea..a7cc3eae06 100644 --- a/packages/react/src/views/ReportMessage/MessageReportWindow.js +++ b/packages/react/src/views/ReportMessage/MessageReportWindow.js @@ -1,6 +1,7 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { Box, Input } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import ReportWindowButtons from './ReportWindowButtons'; import styles from './ReportMessage.styles'; @@ -9,7 +10,7 @@ const MessageReportWindow = ({ messageId }) => { return ( { { setDescription(e.target.value); }} diff --git a/packages/react/src/views/ReportMessage/ReportWindowButtons.js b/packages/react/src/views/ReportMessage/ReportWindowButtons.js index 5763fc87bc..18703813b2 100644 --- a/packages/react/src/views/ReportMessage/ReportWindowButtons.js +++ b/packages/react/src/views/ReportMessage/ReportWindowButtons.js @@ -7,6 +7,7 @@ import { Modal, useToastBarDispatch, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { useMessageStore } from '../../store'; import RCContext from '../../context/RCInstance'; @@ -29,12 +30,12 @@ const ReportWindowButtons = ({ children, reportDescription, messageId }) => { if (res.success) { dispatchToastMessage({ type: 'success', - message: 'Message reported successfully', + message: i18n.t('Toast_Message_Reported'), }); } else { dispatchToastMessage({ type: 'error', - message: 'Error in reporting message', + message: i18n.t('Toast_Error_In_Reporting_Message'), }); } @@ -52,17 +53,17 @@ const ReportWindowButtons = ({ children, reportDescription, messageId }) => { margin-right: 0.5rem; `} /> - Report this message? + {i18n.t('Report_this_message')} {children} diff --git a/packages/react/src/views/RoomInformation/RoomInformation.js b/packages/react/src/views/RoomInformation/RoomInformation.js index 862ec4d736..1c94cd39ef 100644 --- a/packages/react/src/views/RoomInformation/RoomInformation.js +++ b/packages/react/src/views/RoomInformation/RoomInformation.js @@ -8,6 +8,7 @@ import { useComponentOverrides, Icon, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import RCContext from '../../context/RCInstance'; import { useChannelStore } from '../../store'; import getRoomInformationStyles from './RoomInformation.styles'; @@ -31,7 +32,9 @@ const Roominfo = () => { return ( setExclusiveState(null)} style={{ width: '400px', zIndex: window.innerWidth <= 780 ? 1 : null }} @@ -73,19 +76,19 @@ const Roominfo = () => { {channelInfo.description && ( <> - Description + {i18n.t('Description')} {channelInfo.description} )} {channelInfo.topic && ( <> - Topic + {i18n.t('Topic')} {channelInfo.topic} )} {channelInfo.announcement && ( <> - Announcement + {i18n.t('Announcement')} {channelInfo.announcement} )} diff --git a/packages/react/src/views/RoomMembers/InviteMembers.js b/packages/react/src/views/RoomMembers/InviteMembers.js index 9c04b55a3d..97b399243a 100644 --- a/packages/react/src/views/RoomMembers/InviteMembers.js +++ b/packages/react/src/views/RoomMembers/InviteMembers.js @@ -8,6 +8,7 @@ import { Heading, useToastBarDispatch, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import useInviteStore from '../../store/inviteStore'; import { InviteMemberStyles as styles } from './RoomMembers.styles'; import RCContext from '../../context/RCInstance'; @@ -41,7 +42,7 @@ const InviteMembers = () => { .then(() => { dispatchToastMessage({ type: 'success', - message: 'Copied to clipboard', + message: i18n.t('Toast_Copied_To_Clipboard'), }); }) .catch((error) => { @@ -69,7 +70,7 @@ const InviteMembers = () => { `} > - Invite Members + {i18n.t('Invite_Members')} toggleInviteView()} ghost size="small"> @@ -80,7 +81,7 @@ const InviteMembers = () => { - Invite Link + {i18n.t('Invite_Link')} @@ -100,7 +101,7 @@ const InviteMembers = () => { `} > - Your invite link will expire on{' '} + {i18n.t('Invite_Link_Will_Expire_On')} {new Date(inviteData.expires).toString().split('GMT')[0]}

    diff --git a/packages/react/src/views/RoomMembers/RoomMember.js b/packages/react/src/views/RoomMembers/RoomMember.js index f2adb55867..2ae5117476 100644 --- a/packages/react/src/views/RoomMembers/RoomMember.js +++ b/packages/react/src/views/RoomMembers/RoomMember.js @@ -93,7 +93,8 @@ const RoomMembers = ({ members }) => { toggleInviteView(); }} > - Invite Link + + {i18n.t('Invite_Link')} )} @@ -101,7 +102,7 @@ const RoomMembers = ({ members }) => { css={styles.textInput} value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} - placeholder="Search members" + placeholder={i18n.t('Search_Members')} /> @@ -117,7 +118,7 @@ const RoomMembers = ({ members }) => { )) ) : ( - No members found + {i18n.t('No_Members_Found')} )}
    diff --git a/packages/react/src/views/TotpModal/TwoFactorTotpModal.js b/packages/react/src/views/TotpModal/TwoFactorTotpModal.js index aef5d201ef..839c0155ff 100644 --- a/packages/react/src/views/TotpModal/TwoFactorTotpModal.js +++ b/packages/react/src/views/TotpModal/TwoFactorTotpModal.js @@ -8,6 +8,7 @@ import { Input, Button, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import { totpModalStore, useUserStore } from '../../store'; export default function TotpModal({ handleLogin }) { @@ -38,7 +39,7 @@ export default function TotpModal({ handleLogin }) { <> @@ -53,10 +54,10 @@ export default function TotpModal({ handleLogin }) {
    diff --git a/packages/react/src/views/TypingUsers/TypingUsers.js b/packages/react/src/views/TypingUsers/TypingUsers.js index db05619ec1..b5665a3407 100644 --- a/packages/react/src/views/TypingUsers/TypingUsers.js +++ b/packages/react/src/views/TypingUsers/TypingUsers.js @@ -1,5 +1,6 @@ import { css } from '@emotion/react'; import { useTheme, Box } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import React, { useContext, useEffect, useMemo, useState } from 'react'; import RCContext from '../../context/RCInstance'; import { useUserStore } from '../../store'; @@ -23,24 +24,25 @@ export default function TypingUsers() { return ( {typingUsers[0]} - {' is typing...'} + {i18n.t('User_Action_User_Typing_One', { user: typingUsers[0] })} ); if (typingUsers.length === 2) return ( {typingUsers[0]} - {' and '} - {typingUsers[1]} - {' are typing...'} + {i18n.t('User_Action_User_Typing_Two', { + user1: typingUsers[0], + user2: typingUsers[1], + })} ); return ( {typingUsers[0]} - {', '} - {typingUsers[1]} - {`and ${typingUsers.length - 2} more are typing...`} + {i18n.t('User_Action_User_Typing_Multiple', { + count: typingUsers.length - 2, + })} ); }, [typingUsers]); diff --git a/packages/react/src/views/UserInformation/UserInformation.js b/packages/react/src/views/UserInformation/UserInformation.js index 7937f2ab5e..f03eef67ad 100644 --- a/packages/react/src/views/UserInformation/UserInformation.js +++ b/packages/react/src/views/UserInformation/UserInformation.js @@ -11,6 +11,7 @@ import { appendClassNames, useTheme, } from '@embeddedchat/ui-elements'; +import i18n from '@embeddedchat/i18n'; import RCContext from '../../context/RCInstance'; import { useUserStore } from '../../store'; import formatTimestamp from '../../lib/formatTimestamp'; @@ -113,7 +114,7 @@ const UserInformation = () => { )} {currentUserInfo?.nickname && ( { )} {currentUserInfo?.roles?.length && ( {currentUserInfo?.roles?.map((role, index) => ( @@ -133,9 +134,9 @@ const UserInformation = () => { className={appendClassNames('ec-message-user-role')} > {role === 'admin' - ? 'Admin' + ? i18n.t('Admin') : role === 'user' - ? 'user' + ? i18n.t('user') : role.charAt(0).toUpperCase() + role.slice(1)} ))} @@ -147,14 +148,14 @@ const UserInformation = () => { /> )} { currentUserInfo={currentUserInfo} /> { /> {currentUserInfo?.bio && ( { /> )} ( {email.address} - {email.verified ? 'Verified' : 'Not Verified'} + {email.verified + ? i18n.t('Verified') + : i18n.t('Verified_Not')} ))} @@ -200,7 +203,7 @@ const UserInformation = () => { currentUserInfo={currentUserInfo} /> Date: Mon, 3 Feb 2025 09:50:33 +0530 Subject: [PATCH 3/4] Added i18n support --- packages/react/src/views/ChatHeader/ChatHeader.js | 11 ++++++++++- packages/react/src/views/EmbeddedChat.js | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/react/src/views/ChatHeader/ChatHeader.js b/packages/react/src/views/ChatHeader/ChatHeader.js index 96185b18c1..7b184fab96 100644 --- a/packages/react/src/views/ChatHeader/ChatHeader.js +++ b/packages/react/src/views/ChatHeader/ChatHeader.js @@ -427,7 +427,16 @@ const ChatHeader = ({ {surfaceOptions.length > 0 && ( )} - {menuOptions.length > 0 && } + {menuOptions.length > 0 && ( + + )} {isThreadOpen && ( diff --git a/packages/react/src/views/EmbeddedChat.js b/packages/react/src/views/EmbeddedChat.js index ba9a232afc..4c550bdf77 100644 --- a/packages/react/src/views/EmbeddedChat.js +++ b/packages/react/src/views/EmbeddedChat.js @@ -43,6 +43,7 @@ const EmbeddedChat = (props) => { channelName, anonymousMode = false, toastBarPosition = 'bottom right', + language = 'en', showRoles = false, showAvatar = true, showAnnouncement = true, @@ -280,7 +281,6 @@ const EmbeddedChat = (props) => { }; EmbeddedChat.propTypes = { - language: PropTypes.string, width: PropTypes.string, height: PropTypes.string, isClosable: PropTypes.bool, @@ -290,6 +290,7 @@ EmbeddedChat.propTypes = { channelName: PropTypes.string, anonymousMode: PropTypes.bool, toastBarPosition: PropTypes.string, + language: PropTypes.string, showRoles: PropTypes.bool, showAvatar: PropTypes.bool, showAnnouncement: PropTypes.bool, From 0ce00a011913fa67426c7336002d38f3be148050 Mon Sep 17 00:00:00 2001 From: dhairyashil Date: Mon, 3 Feb 2025 16:13:51 +0530 Subject: [PATCH 4/4] Fixed Tooltip i18n configuration of formatters --- packages/i18n/src/locales/ar.i18n.json | 3 ++- packages/i18n/src/locales/bn.i18n.json | 1 + packages/i18n/src/locales/en.i18n.json | 5 +++-- packages/i18n/src/locales/es.i18n.json | 1 + packages/i18n/src/locales/fr.i18n.json | 1 + packages/i18n/src/locales/hi.i18n.json | 3 ++- packages/i18n/src/locales/pt.i18n.json | 1 + packages/i18n/src/locales/ru.i18n.json | 3 ++- packages/react/src/lib/textFormat.js | 12 +++++++----- .../views/ChatInput/ChatInputFormattingToolbar.js | 2 +- .../react/src/views/ChatInput/VideoMessageRecoder.js | 2 +- packages/react/src/views/MessageList/MessageList.js | 4 ++-- 12 files changed, 24 insertions(+), 14 deletions(-) diff --git a/packages/i18n/src/locales/ar.i18n.json b/packages/i18n/src/locales/ar.i18n.json index f2a5cb4789..92e4851569 100644 --- a/packages/i18n/src/locales/ar.i18n.json +++ b/packages/i18n/src/locales/ar.i18n.json @@ -119,13 +119,14 @@ "Tooltip_Code": "كود", "Tooltip_Emoji": "رمز تعبيري", "Tooltip_Finish_Recording": "إنهاء التسجيل", + "Tooltip_Inline": "كود مدمج", "Tooltip_Italic": "مائل", "Tooltip_Link": "رابط", "Tooltip_More": "المزيد", "Tooltip_Multiline": "عدة أسطر", "Tooltip_Pinned": "مثبت", "Tooltip_Starred": "مميز", - "Tooltip_Strike": "مضرب", + "Tooltip_Strike": "شطب", "Tooltip_Upload_File": "رفع ملف", "Tooltip_Video_Message": "رسالة فيديو", "Topic": "الموضوع", diff --git a/packages/i18n/src/locales/bn.i18n.json b/packages/i18n/src/locales/bn.i18n.json index d13102db4a..214047a6ab 100644 --- a/packages/i18n/src/locales/bn.i18n.json +++ b/packages/i18n/src/locales/bn.i18n.json @@ -119,6 +119,7 @@ "Tooltip_Code": "কোড", "Tooltip_Emoji": "ইমোজি", "Tooltip_Finish_Recording": "রেকর্ডিং শেষ করুন", + "Tooltip_Inline": "ইনলাইন কোড", "Tooltip_Italic": "ইটালিক", "Tooltip_Link": "লিঙ্ক", "Tooltip_More": "আরো", diff --git a/packages/i18n/src/locales/en.i18n.json b/packages/i18n/src/locales/en.i18n.json index 7fb848bde7..fe07cc3653 100644 --- a/packages/i18n/src/locales/en.i18n.json +++ b/packages/i18n/src/locales/en.i18n.json @@ -119,13 +119,14 @@ "Tooltip_Code": "Code", "Tooltip_Emoji": "Emoji", "Tooltip_Finish_Recording": "Finish Recording", + "Tooltip_Inline": "Inline code", "Tooltip_Italic": "Italic", "Tooltip_Link": "Link", "Tooltip_More": "More", - "Tooltip_Multiline": "Multiline", + "Tooltip_Multiline": "Multiline Code", "Tooltip_Pinned": "Pinned", "Tooltip_Starred": "Starred", - "Tooltip_Strike": "Strike", + "Tooltip_Strike": "Strikethrough", "Tooltip_Upload_File": "Upload File", "Tooltip_Video_Message": "Video Message", "Topic": "Topic", diff --git a/packages/i18n/src/locales/es.i18n.json b/packages/i18n/src/locales/es.i18n.json index 36f9fb32de..8d211ba4c3 100644 --- a/packages/i18n/src/locales/es.i18n.json +++ b/packages/i18n/src/locales/es.i18n.json @@ -119,6 +119,7 @@ "Tooltip_Code": "Código", "Tooltip_Emoji": "Emoji", "Tooltip_Finish_Recording": "Finalizar grabación", + "Tooltip_Inline": "Código en línea", "Tooltip_Italic": "Cursiva", "Tooltip_Link": "Enlace", "Tooltip_More": "Más", diff --git a/packages/i18n/src/locales/fr.i18n.json b/packages/i18n/src/locales/fr.i18n.json index a1f3d5a55c..a6a8ba437b 100644 --- a/packages/i18n/src/locales/fr.i18n.json +++ b/packages/i18n/src/locales/fr.i18n.json @@ -119,6 +119,7 @@ "Tooltip_Code": "Code", "Tooltip_Emoji": "Emoji", "Tooltip_Finish_Recording": "Terminer l'enregistrement", + "Tooltip_Inline": "Code en ligne", "Tooltip_Italic": "Italique", "Tooltip_Link": "Lien", "Tooltip_More": "Plus", diff --git a/packages/i18n/src/locales/hi.i18n.json b/packages/i18n/src/locales/hi.i18n.json index 62732d3f0a..22bbafcb01 100644 --- a/packages/i18n/src/locales/hi.i18n.json +++ b/packages/i18n/src/locales/hi.i18n.json @@ -119,10 +119,11 @@ "Tooltip_Code": "कोड", "Tooltip_Emoji": "इमोजी", "Tooltip_Finish_Recording": "रिकॉर्डिंग समाप्त करें", + "Tooltip_Inline": "इनलाइन कोड", "Tooltip_Italic": "इटैलिक", "Tooltip_Link": "लिंक", "Tooltip_More": "अधिक", - "Tooltip_Multiline": "मल्टीलाइन", + "Tooltip_Multiline": "मल्टीलाइन कोड", "Tooltip_Pinned": "पिन किया गया", "Tooltip_Starred": "स्टार किया गया", "Tooltip_Strike": "स्ट्राइक", diff --git a/packages/i18n/src/locales/pt.i18n.json b/packages/i18n/src/locales/pt.i18n.json index 6121dbb066..c0fd9c79f4 100644 --- a/packages/i18n/src/locales/pt.i18n.json +++ b/packages/i18n/src/locales/pt.i18n.json @@ -119,6 +119,7 @@ "Tooltip_Code": "Código", "Tooltip_Emoji": "Emoji", "Tooltip_Finish_Recording": "Concluir gravação", + "Tooltip_Inline": "Código em linha", "Tooltip_Italic": "Itálico", "Tooltip_Link": "Link", "Tooltip_More": "Mais", diff --git a/packages/i18n/src/locales/ru.i18n.json b/packages/i18n/src/locales/ru.i18n.json index e4a9bdac4a..b5925b8ae5 100644 --- a/packages/i18n/src/locales/ru.i18n.json +++ b/packages/i18n/src/locales/ru.i18n.json @@ -119,10 +119,11 @@ "Tooltip_Code": "Код", "Tooltip_Emoji": "Эмодзи", "Tooltip_Finish_Recording": "Завершить запись", + "Tooltip_Inline": "Встроенный код", "Tooltip_Italic": "Курсив", "Tooltip_Link": "Ссылка", "Tooltip_More": "Больше", - "Tooltip_Multiline": "Многострочный", + "Tooltip_Multiline": "Многострочный код", "Tooltip_Pinned": "Закреплено", "Tooltip_Starred": "Отмечено", "Tooltip_Strike": "Зачеркнутый", diff --git a/packages/react/src/lib/textFormat.js b/packages/react/src/lib/textFormat.js index a1978c0033..3540713dd5 100644 --- a/packages/react/src/lib/textFormat.js +++ b/packages/react/src/lib/textFormat.js @@ -1,11 +1,13 @@ +import i18n from '@embeddedchat/i18n'; + export const formatter = [ - { name: 'bold', pattern: '*{{text}}*', tooltip: 'Bold' }, - { name: 'italic', pattern: '_{{text}}_', tooltip: 'Italic' }, - { name: 'strike', pattern: '~{{text}}~', tooltip: 'Strikethrough' }, - { name: 'code', pattern: '`{{text}}`', tooltip: 'Inline code' }, + { name: 'bold', pattern: '*{{text}}*', tooltip: i18n.t('Tooltip_Bold') }, + { name: 'italic', pattern: '_{{text}}_', tooltip: i18n.t('Tooltip_Italic') }, + { name: 'strike', pattern: '~{{text}}~', tooltip: i18n.t('Tooltip_Strike') }, + { name: 'code', pattern: '`{{text}}`', tooltip: i18n.t('Tooltip_Inline') }, { name: 'multiline', pattern: '```\n{{text}}\n```', - tooltip: 'Multi-line code', + tooltip: i18n.t('Tooltip_Multiline'), }, ]; diff --git a/packages/react/src/views/ChatInput/ChatInputFormattingToolbar.js b/packages/react/src/views/ChatInput/ChatInputFormattingToolbar.js index f8e0ddbf5e..1b1a3807bc 100644 --- a/packages/react/src/views/ChatInput/ChatInputFormattingToolbar.js +++ b/packages/react/src/views/ChatInput/ChatInputFormattingToolbar.js @@ -215,7 +215,7 @@ const ChatInputFormattingToolbar = ({ ) : ( diff --git a/packages/react/src/views/ChatInput/VideoMessageRecoder.js b/packages/react/src/views/ChatInput/VideoMessageRecoder.js index dfa4d3bb30..86a95ca23e 100644 --- a/packages/react/src/views/ChatInput/VideoMessageRecoder.js +++ b/packages/react/src/views/ChatInput/VideoMessageRecoder.js @@ -160,7 +160,7 @@ const VideoMessageRecorder = (props) => { {displayName} ) : ( - + {isMessageLoaded - ? 'No messages' - : 'Ready to chat? Login now to join the fun.'} + ? i18n.t('No_Messages_Found') + : i18n.t('Ready_To_Chat')} ) : (