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')}
) : (