-
+
-
-
-
-
-
-
+ {{/if}}
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index e54feaf03578..4425223ece14 100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -213,7 +213,7 @@
"Welcome_to_the" : "Willkommen bei",
"With_whom" : "Mit wem?",
"you_are_in_preview_mode_of" : "Sie sind m Vorschau-Modus des Kanals #
__room_name__",
- "You_neeed_confirm_email" : "Sie müssen Ihre Email bestätigen!",
+ "You_need_confirm_email" : "Sie müssen Ihre Email bestätigen!",
"Your_Open_Source_solution" : "Deine eigene Open Source Chat Lösung",
"You_will_not_be_able_to_recover" : "Sie können es nicht wieder rückgängig machen!",
"Yes_delete_it" : "Ja, lösche es!",
diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json
index abff0d753918..c3927da5e397 100644
--- a/i18n/el.i18n.json
+++ b/i18n/el.i18n.json
@@ -214,7 +214,7 @@
"Welcome_to_the" : "Καλως ήλθατε στο",
"With_whom" : "Με ποιον",
"you_are_in_preview_mode_of" : "Είστε σε κατάσταση προεπισκόπησης του καναλιού #
__room_name__",
- "You_neeed_confirm_email" : "Πρεπει να επιβεβαίώσετε το email σας για να συνδεθείτε!",
+ "You_need_confirm_email" : "Πρεπει να επιβεβαίώσετε το email σας για να συνδεθείτε!",
"Your_Open_Source_solution" : "Η δικιά σου λύση ανοιχτού κώδικα",
"You_will_not_be_able_to_recover" : "Δεν θα μπορείτε να το επαναφέρετε!",
"Yes_delete_it" : "Ναι, διέγραψέ το!",
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json
index 26bf6d464f8a..435293146159 100644
--- a/i18n/en.i18n.json
+++ b/i18n/en.i18n.json
@@ -3,32 +3,33 @@
"Access_Online_Demo" : "Access the Online Demo",
"Accounts_denyUnverifiedEmail" : "Deny unverified e-mail",
"Accounts_EmailVerification" : "E-mail Verification",
- "Accounts_RegistrationRequired" : "Registration Required",
"Accounts_Facebook": "Facebook Login",
"Accounts_Facebook_id": "Facebook App Id",
"Accounts_Facebook_secret": "Facebook Secret",
- "Accounts_Google": "Google Login",
- "Accounts_Google_id": "Google Id",
- "Accounts_Google_secret": "Google Secret",
"Accounts_Github": "GitHub Login",
"Accounts_Github_id": "GitHub Id",
"Accounts_Github_secret": "GitHub Secret",
+ "Accounts_Google": "Google Login",
+ "Accounts_Google_id": "Google Id",
+ "Accounts_Google_secret": "Google Secret",
"Accounts_Linkedin": "LinkedIn Login",
"Accounts_Linkedin_id": "LinkedIn Id",
"Accounts_Linkedin_secret": "LinkedIn Secret",
+ "Accounts_ManuallyApproveNewUsers" : "Manually aprove new users",
"Accounts_Meteor": "Meteor Login",
"Accounts_Meteor_id": "Meteor Id",
"Accounts_Meteor_secret": "Meteor Secret",
+ "Accounts_RegistrationRequired" : "Registration Required",
"Accounts_Twitter": "Twitter Login",
"Accounts_Twitter_id": "Twitter Id",
"Accounts_Twitter_secret": "Twitter Secret",
"Add_Members" : "Add Members",
"Add_users" : "Add users",
+ "Administration" : "Administration",
"All_channels" : "All channels",
"and" : "and",
"API_Analytics" : "Analytics",
"API_Embed" : "Embed",
- "Administration" : "Administration",
"are_also_typing" : "are also typing",
"are_typing" : "are typing",
"Are_you_sure" : "Are you sure?",
@@ -62,11 +63,14 @@
"Create_new_private_group" : "Create a new private group",
"Create_new_public_channel" : "Create a new public channel",
"Created_at" : "Created at",
+ "days": "days",
+ "Delete_User_Warning": "Deleting a user will delete all messages from that user as well. This cannot be undone.",
"Deleted" : "Deleted!",
"Direct_Messages" : "Direct Messages",
"Drop_to_upload_file" : "Drop to upload file",
"Duplicate_channel_name" : "A Channel with name '%s' exists",
"Duplicate_private_group_name" : "A Private Group with name '%s' exists",
+ "E-mail" : "E-mail",
"edited" : "edited",
"Email_already_exists" : "Email already exists",
"Email_or_username" : "Email or username",
@@ -83,6 +87,7 @@
"Have_your_own_chat" : "Have your own web chat. Developed with Meteor.com, the Rocket.Chat is a great solution for developers looking forward to build and evolve their own chat platform.",
"Hide_room" : "Hide room",
"History" : "History",
+ "hours": "hours",
"inline_code" : "inline_code",
"Invalid_confirm_pass" : "The password confirmation does not match password",
"Invalid_email" : "The e-mail entered is invalid",
@@ -115,6 +120,7 @@
"Login_with" : "Login with %s",
"login_with" : "Or login directly with",
"Logout" : "Logout",
+ "Make_Admin" : "Make Admin",
"Members" : "Members",
"Members_List" : "Members List",
"Members_placeholder" : "Members",
@@ -132,6 +138,7 @@
"Meta_language" : "Language",
"Meta_msvalidate01" : "MSValidate.01",
"Meta_robots" : "Robots",
+ "minutes": "minutes",
"More_channels" : "More channels",
"Msgs" : "Msgs",
"multi" : "multi",
@@ -155,6 +162,8 @@
"Password" : "Password",
"Password_changed_successfully" : "Password changed successfully",
"Please_wait" : "Please wait",
+ "Please_wait_activation" : "Please wait, this can take some time.",
+ "Please_wait_statistics" : "Please wait, statistics are being generated.",
"Powered_by" : "Powered by",
"Privacy" : "Privacy",
"Private_Groups" : "Private Groups",
@@ -174,8 +183,10 @@
"quote" : "quote",
"Recents" : "Recents",
"Register" : "Register a new account",
+ "Registration_Succeeded" : "Registration Succeeded",
"Remember_me" : "Remember me",
"Remove" : "Remove",
+ "Remove_Admin" : "Remove Admin",
"Reset_password" : "Reset password",
"Room" : "Room",
"Room_name_changed" : "Room name changed to:
__room_name__ by
__user_by__",
@@ -185,6 +196,7 @@
"Save_changes" : "Save changes",
"Search" : "Search",
"Search_settings" : "Search settings",
+ "seconds": "seconds",
"See_all" : "See all",
"See_only_online" : "Only online",
"Select_an_avatar" : "Select an avatar",
@@ -204,6 +216,27 @@
"SMTP_Port" : "SMTP Port",
"SMTP_Username" : "SMTP Username",
"Start_of_conversation" : "Start of conversation",
+ "Stats_Active_Users": "Active Users",
+ "Stats_Avg_Channel_Users": "Average Channel Users",
+ "Stats_Avg_Private_Group_Users": "Average Private Group Users",
+ "Stats_Max_Room_Users": "Max Rooms Users",
+ "Stats_Non_Active_Users": "Inactive Users",
+ "Stats_Offline_Users": "Offline Users",
+ "Stats_Online_Users": "Online Users",
+ "Stats_OS_Arch": "OS Arch",
+ "Stats_OS_Cpus": "OS CPU Count",
+ "Stats_OS_Freemem": "OS Free Memory",
+ "Stats_OS_Loadavg": "OS Load Average",
+ "Stats_OS_Platform": "OS Platform",
+ "Stats_OS_Release": "OS Release",
+ "Stats_OS_Totalmem": "OS Total Memory",
+ "Stats_OS_Type": "OS Type",
+ "Stats_OS_Uptime": "OS Uptime",
+ "Stats_Total_Channels": "Total Channels",
+ "Stats_Total_Direct_Messages": "Total Direct Messages",
+ "Stats_Total_Private_Groups": "Total Private Groups",
+ "Stats_Total_Rooms": "Total Rooms",
+ "Stats_Total_Users": "Total Users",
"strike" : "strike",
"Submit" : "Submit",
"The_field_is_required" : "The field %s is required.",
@@ -219,6 +252,10 @@
"User_added_by" : "User
__user_added__ added by
__user_by__.",
"User_has_been_activated" : "User has been activated",
"User_has_been_deactivated" : "User has been deactivated",
+ "User_has_been_deleted" : "User has been deleted",
+ "User_is_no_longer_an_admin" : "User is no longer an admin",
+ "User_is_not_activated" : "User is not activated",
+ "User_is_now_an_admin" : "User is now an admin",
"User_joined_channel" : "Has joined the channel.",
"User_joined_channel_female" : "Has joined the channel.",
"User_joined_channel_male" : "Has joined the channel.",
@@ -228,6 +265,7 @@
"User_logged_out" : "User is logged out",
"User_removed_by" : "User
__user_removed__ removed by
__user_by__.",
"User_Settings" : "User Settings",
+ "User_updated_successfully" : "User updated successfully",
"Username" : "Username",
"Username_cant_be_empty" : "The username cannot be empty",
"Username_description" : "The username is used to allow others to mention you in messages.",
@@ -235,6 +273,7 @@
"Username_title" : "Register username",
"Username_unavaliable" : "
%s is already in use :(",
"View_All" : "View All",
+ "Wait_activation_warning" : "Before you can login, your account must be manually activated by an administrator.",
"We_have_sent_password_email" : "We have sent you an e-mail with password reset instructions. If you do not receive an e-mail shortly, please come back and try again.",
"We_have_sent_registration_email" : "We have sent you an e-mail to confirm your registration. If you do not receive an e-mail shortly, please come back and try again.",
"Welcome" : "Welcome
%s.",
@@ -242,7 +281,7 @@
"With_whom" : "With whom",
"Yes_delete_it" : "Yes, delete it!",
"you_are_in_preview_mode_of" : "You are in preview mode of channel #
__room_name__",
- "You_neeed_confirm_email" : "You need to confirm your email to login!",
+ "You_need_confirm_email" : "You need to confirm your email to login!",
"You_will_not_be_able_to_recover" : "You will not be able to recover!",
"Your_entry_has_been_deleted" : "Your entry has been deleted.",
"Your_Open_Source_solution" : "Your own Open Source chat solution"
diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json
index 49ce1c738feb..fe16f2cf9dc8 100644
--- a/i18n/es.i18n.json
+++ b/i18n/es.i18n.json
@@ -135,6 +135,6 @@
"Welcome" : "Bienvenido
%s.",
"Welcome_to_the" : "Bienvenido a la",
"With_whom" : "Con quien",
- "You_neeed_confirm_email" : "¡Es necesario confirmar tu correo electrónico para poder identificarte!",
+ "You_need_confirm_email" : "¡Es necesario confirmar tu correo electrónico para poder identificarte!",
"Your_Open_Source_solution" : "Tu propia solución de chat de código abierto"
}
\ No newline at end of file
diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json
index 946f978c81be..09201b9a155d 100644
--- a/i18n/fi.i18n.json
+++ b/i18n/fi.i18n.json
@@ -207,7 +207,7 @@
"Welcome_to_the" : "Tervetuloa",
"With_whom" : "kanssa",
"you_are_in_preview_mode_of" : "Tämä on kanavan #
__room_name__ esikatselutila",
- "You_neeed_confirm_email" : "Sinun tulee vahvistaa sähköpostiosoitteesi!",
+ "You_need_confirm_email" : "Sinun tulee vahvistaa sähköpostiosoitteesi!",
"Your_Open_Source_solution" : "Your own Open Source chat solution",
"You_will_not_be_able_to_recover" : "Palauttaminen ei ole mahdollista!",
"Yes_delete_it" : "Kyllä, poista!",
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index 293f915fb235..3585d3e85e3f 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -168,7 +168,7 @@
"Welcome_to_the" : "Bienvenue sur",
"With_whom" : "Avec qui",
"you_are_in_preview_mode_of" : "Aperçu du salon #
__room_name__ ",
- "You_neeed_confirm_email" : "Vous devez confirmer votre adresse email pour vous connecter !",
+ "You_need_confirm_email" : "Vous devez confirmer votre adresse email pour vous connecter !",
"Your_Open_Source_solution" : "Votre propre solution de chat Open Source",
"You_will_not_be_able_to_recover" : "Cette action n'est pas réversible !",
"Yes_delete_it" : "Oui, je confirme la suppression !",
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index 1c8db528aab7..172381775443 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -145,6 +145,6 @@
"Welcome" : "ברוך הבא
%s.",
"Welcome_to_the" : "ברוך הבא ל-",
"you_are_in_preview_mode_of" : "הנך בתצוגה מוקדמת של ערוץ #
__rom_name__",
- "You_neeed_confirm_email" : "הינך צריך לאמת את כתובת האימייל על מנת להתחבר!",
+ "You_need_confirm_email" : "הינך צריך לאמת את כתובת האימייל על מנת להתחבר!",
"Your_Open_Source_solution" : "פתרון הקוד הפתוח שלך לצ'אט"
}
\ No newline at end of file
diff --git a/i18n/hr.i18n.json b/i18n/hr.i18n.json
index 5e80d84c5353..a6b503e87494 100644
--- a/i18n/hr.i18n.json
+++ b/i18n/hr.i18n.json
@@ -199,7 +199,7 @@
"Welcome_to_the" : "Dobro došli »",
"With_whom" : "Sa kim",
"you_are_in_preview_mode_of" : "Ti si u preglednom načinu kanala #
__room_name__",
- "You_neeed_confirm_email" : "Trebaš potvrditi svoj email kako bi se prijavio!",
+ "You_need_confirm_email" : "Trebaš potvrditi svoj email kako bi se prijavio!",
"Your_Open_Source_solution" : "Vaše vlastito Open Source chat rješenje",
"You_will_not_be_able_to_recover" : "Ovo nećeš moći promijeniti!",
"Yes_delete_it" : "Da, obriši!",
diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json
index 1a9f1f4a1dfa..eb1febf22ce8 100644
--- a/i18n/hu.i18n.json
+++ b/i18n/hu.i18n.json
@@ -124,6 +124,6 @@
"We_have_sent_registration_email" : "Küldtünk egy email-t hogy megerősíthessük a regisztrációt. Ha nem kapnál hamarosan levelet akkor gyere vissza később és próbáld újra.",
"Welcome" : "Üdvözöllek
%s",
"Welcome_to_the" : "Üdvözöllek a",
- "You_neeed_confirm_email" : "Kérlek hitelesítsd az email címed a bejelntkezéshez",
+ "You_need_confirm_email" : "Kérlek hitelesítsd az email címed a bejelntkezéshez",
"Your_Open_Source_solution" : "A saját Nyílt Forrású chat-ed"
}
\ No newline at end of file
diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json
index e8f8805f2039..13a19ec071b3 100644
--- a/i18n/it.i18n.json
+++ b/i18n/it.i18n.json
@@ -124,6 +124,6 @@
"We_have_sent_registration_email" : "Abbiamo inviato una email per confermare la registrazione. Se non ricevi una email a breve tempo, torna e prova di nuovo.",
"Welcome" : "Benvenuto
%s.",
"Welcome_to_the" : "Benvenuto a",
- "You_neeed_confirm_email" : "Hai bisogno di confermare il tuo email per accedere!",
+ "You_need_confirm_email" : "Hai bisogno di confermare il tuo email per accedere!",
"Your_Open_Source_solution" : "La tua soluzione per chat Open Source"
}
\ No newline at end of file
diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json
index cdf0e0febd64..7a1c2d3a817e 100644
--- a/i18n/ja.i18n.json
+++ b/i18n/ja.i18n.json
@@ -131,6 +131,6 @@
"We_have_sent_registration_email" : "登録を確認するメールを送信しました。すぐにメールが届かない場合は、再度お試しください。",
"Welcome" : "ようこそ
%s.",
"Welcome_to_the" : "Welcome to the",
- "You_neeed_confirm_email" : "ログインするためにはメールを確認する必要があります!",
+ "You_need_confirm_email" : "ログインするためにはメールを確認する必要があります!",
"Your_Open_Source_solution" : "独自のオープンソースチャットソリューション"
}
\ No newline at end of file
diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json
index a0eabb2e0bba..ef21958dbe06 100644
--- a/i18n/km.i18n.json
+++ b/i18n/km.i18n.json
@@ -170,7 +170,7 @@
"Welcome_to_the" : "ស្វាគមន៍មកកាន់",
"With_whom" : "ជាមួយនរណា",
"you_are_in_preview_mode_of" : "អ្នកស្ថិតក្នុងទម្រង់មើលជាមុននៃប៉ុស្តិ៍ #
__room_name__",
- "You_neeed_confirm_email" : "អ្នកត្រូវបញ្ជាក់អ៊ីមែលដើម្បីឡុកចូល!",
+ "You_need_confirm_email" : "អ្នកត្រូវបញ្ជាក់អ៊ីមែលដើម្បីឡុកចូល!",
"Your_Open_Source_solution" : "ដំណោះស្រាយពិភាក្សាកូដចំហររបស់អ្នក",
"You_will_not_be_able_to_recover" : "អ្នកនឹងមិនអាចទាញមកវិញ!",
"Yes_delete_it" : "បាទ លប់វា!",
diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json
index 7ac58828b47a..e6b24d3fb912 100644
--- a/i18n/ko.i18n.json
+++ b/i18n/ko.i18n.json
@@ -165,7 +165,7 @@
"Welcome_to_the" : "오신것을 환영합니다",
"With_whom" : "누구랑?",
"you_are_in_preview_mode_of" : "#
__room_name__ 채널 미리보기 모드",
- "You_neeed_confirm_email" : "로그인하려면 이메일 확인이 필요합니다!",
+ "You_need_confirm_email" : "로그인하려면 이메일 확인이 필요합니다!",
"Your_Open_Source_solution" : "자신만의 오픈소스 채팅 솔루션",
"You_will_not_be_able_to_recover" : "복구 안됩니다!",
"Yes_delete_it" : "넵, 삭제!",
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index 9249cb652345..1ce4e7ecec2c 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -190,7 +190,7 @@
"Welcome_to_the" : "Witaj w",
"With_whom" : "Z kim",
"you_are_in_preview_mode_of" : "Jesteś w trybie podglądu kanału #
__room_name__",
- "You_neeed_confirm_email" : "Musisz potwierdzić swój adres e-mail, aby zalogować się!",
+ "You_need_confirm_email" : "Musisz potwierdzić swój adres e-mail, aby zalogować się!",
"Your_Open_Source_solution" : "Twój własny czat Open Source",
"You_will_not_be_able_to_recover" : "Nie będziesz w stanie odzyskać!",
"Yes_delete_it" : "Tak, usuń to!",
diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json
index 67901ca35ab1..b3ea4672f288 100644
--- a/i18n/pt.i18n.json
+++ b/i18n/pt.i18n.json
@@ -175,7 +175,7 @@
"Welcome_to_the" : "Bem-vindo ao",
"With_whom" : "Com quem",
"you_are_in_preview_mode_of" : "Esta é uma prévia do canal #
__room_name__",
- "You_neeed_confirm_email" : "Você precisa confirmar seu email para logar!",
+ "You_need_confirm_email" : "Você precisa confirmar seu email para logar!",
"Your_Open_Source_solution" : "Sua própria solução Open Source",
"You_will_not_be_able_to_recover" : "Você não será capaz de desfazer!",
"Yes_delete_it" : "Sim, exclua!",
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index 7c3b70a03708..66f6b215e7d0 100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -167,7 +167,7 @@
"Welcome" : "Добро пожаловать,
%s.",
"Welcome_to_the" : "Добро пожаловать в",
"you_are_in_preview_mode_of" : "Вы находитесь в режиме предварительного просмотра канала #
__room_name__",
- "You_neeed_confirm_email" : "Необходимо подтвердить email для входа!",
+ "You_need_confirm_email" : "Необходимо подтвердить email для входа!",
"Your_Open_Source_solution" : "Ваш собственный чат на базе Open Source-технологий",
"You_will_not_be_able_to_recover" : "Вы не сможете восстановить!",
"Yes_delete_it" : "Да, удалить его!"
diff --git a/i18n/ta-IN.i18n.json b/i18n/ta-IN.i18n.json
index 2a03468e9540..f63cea319fda 100644
--- a/i18n/ta-IN.i18n.json
+++ b/i18n/ta-IN.i18n.json
@@ -99,7 +99,7 @@
"View_All" : "அனைத்தையும் பார்க்க",
"Welcome" : "
% s உங்களை வரவேற்கிறோம்.",
"With_whom" : "யாருடன்",
- "You_neeed_confirm_email" : "நீங்கள் உள்நுழைய உங்கள் மின்னஞ்சல் முகவரியை உறுதிப்படுத்த வேண்டும்!",
+ "You_need_confirm_email" : "நீங்கள் உள்நுழைய உங்கள் மின்னஞ்சல் முகவரியை உறுதிப்படுத்த வேண்டும்!",
"You_will_not_be_able_to_recover" : "நீங்கள் மீட்க முடியாது!",
"Yes_delete_it" : "ஆம், நீக்கு!",
"Your_entry_has_been_deleted" : "உங்கள் உள்ளீடு நீக்கப்பட்டுவிட்டது."
diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json
index bc166b89499e..ea55d3949fd6 100644
--- a/i18n/tr.i18n.json
+++ b/i18n/tr.i18n.json
@@ -150,7 +150,7 @@
"Welcome_to_the" : "Hoşgeldiniz",
"With_whom" : "Kiminle",
"you_are_in_preview_mode_of" : "Kanal #
__room_name__",
- "You_neeed_confirm_email" : "Giriş yapabilmek için öncelikle e-posta adresinizi onaylamanız gerekmektedir!",
+ "You_need_confirm_email" : "Giriş yapabilmek için öncelikle e-posta adresinizi onaylamanız gerekmektedir!",
"Your_Open_Source_solution" : "Açık Kaynak Sohbet Uygulaması",
"You_will_not_be_able_to_recover" : "Sen kurtarmak mümkün olmayacaktır!",
"Yes_delete_it" : "Evet, bunu silin!",
diff --git a/i18n/ug.i18n.json b/i18n/ug.i18n.json
index a4a7e8896bbe..b8ef64cc2af9 100644
--- a/i18n/ug.i18n.json
+++ b/i18n/ug.i18n.json
@@ -137,6 +137,6 @@
"View_All" : "ھەممىنى كۆرۈش",
"Welcome" : "ئەسسالامۇ-ئەلەيكۇم
%s.",
"Welcome_to_the" : "كەلگىنىزگە مەرھابا",
- "You_neeed_confirm_email" : "ئىلخەتنى جەزملەشتۈرۈپ بولغاندىن كېيىن كىرەلەيسىز!",
+ "You_need_confirm_email" : "ئىلخەتنى جەزملەشتۈرۈپ بولغاندىن كېيىن كىرەلەيسىز!",
"Your_Open_Source_solution" : "ئۆزىڭىزنىڭ ئوچۇق كودلۇق پاراڭلىشىش ھەل قىلىش ئۇسۇلى"
}
\ No newline at end of file
diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json
index 83e7d7e986b8..060e3f84c8fc 100644
--- a/i18n/uk.i18n.json
+++ b/i18n/uk.i18n.json
@@ -125,6 +125,6 @@
"We_have_sent_registration_email" : "Ми відправили вам по електронній пошті, щоб підтвердити свою реєстрацію. Якщо ви не отримуєте електронну пошту найближчим часом, будь ласка, повернутися і спробувати знову.",
"Welcome" : "Вітаємо,
%s.",
"Welcome_to_the" : "Ласкаво просимо в",
- "You_neeed_confirm_email" : "Для входу необхідно підтвердити e-mail!",
+ "You_need_confirm_email" : "Для входу необхідно підтвердити e-mail!",
"Your_Open_Source_solution" : "Ваш власний Open Source чат"
}
\ No newline at end of file
diff --git a/i18n/zh.i18n.json b/i18n/zh.i18n.json
index f0ffe7c0cd29..62bdabd53d08 100644
--- a/i18n/zh.i18n.json
+++ b/i18n/zh.i18n.json
@@ -124,6 +124,6 @@
"We_have_sent_registration_email" : "我们已经向您发出一封电子邮件,以确认您的注册。如果您没有收到邮件,请重试。",
"Welcome" : "欢迎
%s",
"Welcome_to_the" : "欢迎来到",
- "You_neeed_confirm_email" : "登录前请验证您的电子邮件!",
+ "You_need_confirm_email" : "登录前请验证您的电子邮件!",
"Your_Open_Source_solution" : "您自己的开源聊天解决方案"
}
\ No newline at end of file
diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js
index e674dcc61554..6d4ecf74d7e7 100644
--- a/packages/rocketchat-lib/package.js
+++ b/packages/rocketchat-lib/package.js
@@ -21,12 +21,18 @@ Package.onUse(function(api) {
api.addFiles([
'server/functions/checkUsernameAvailability.coffee',
+ 'server/functions/getAvgStatistics.coffee',
+ 'server/functions/getStatistics.coffee',
+ 'server/functions/saveStatistics.coffee',
'server/functions/setUsername.coffee'
], ['server']);
api.addFiles([
+ 'server/methods/generateStatistics.coffee',
'server/methods/joinDefaultChannels.coffee',
- 'server/methods/setUsername.coffee'
+ 'server/methods/setAdminStatus.coffee',
+ 'server/methods/setUsername.coffee',
+ 'server/methods/updateUser.coffee'
], ['server']);
api.addFiles('server/sendMessage.coffee', ['server']);
diff --git a/packages/rocketchat-lib/server/functions/getAvgStatistics.coffee b/packages/rocketchat-lib/server/functions/getAvgStatistics.coffee
new file mode 100644
index 000000000000..b76754d3f360
--- /dev/null
+++ b/packages/rocketchat-lib/server/functions/getAvgStatistics.coffee
@@ -0,0 +1,56 @@
+RocketChat.getAvgStatistics = ->
+ statistics = {}
+
+ m = ->
+ d = this.createdAt
+ this.count = 1
+ emit "#{d.getFullYear()}-#{d.getMonth()+1}-#{d.getDate()}", this
+
+ r = (k, v) ->
+ a = v.shift()
+ for b in v
+ a.count += b.count
+ a.totalUsers += b.totalUsers
+ a.activeUsers += b.activeUsers
+ a.nonActiveUsers += b.nonActiveUsers
+ a.onlineUsers += b.onlineUsers
+ a.offlineUsers += b.offlineUsers
+ a.totalRooms += b.totalRooms
+ a.totalChannels += b.totalChannels
+ a.totalPrivateGroups += b.totalPrivateGroups
+ a.totalDirect += b.totalDirect
+ a.avgChannelUsers += b.avgChannelUsers
+ a.avgPrivateGroupUsers += b.avgPrivateGroupUsers
+ a.maxRoomUsers = Math.max a.maxRoomUsers, b.maxRoomUsers
+ a.os.uptime += b.os.uptime
+ a.os.totalmem += b.os.totalmem
+ a.os.freemem += b.os.freemem
+ a.os.loadavg[0] += b.os.loadavg[0]
+ a.os.loadavg[1] += b.os.loadavg[1]
+ a.os.loadavg[2] += b.os.loadavg[2]
+ return a
+
+ f = (k, v) ->
+ out = {}
+ out.totalUsers = v.totalUsers / v.count
+ out.activeUsers = v.activeUsers / v.count
+ out.nonActiveUsers = v.nonActiveUsers / v.count
+ out.onlineUsers = v.onlineUsers / v.count
+ out.offlineUsers = v.offlineUsers / v.count
+ out.totalRooms = v.totalRooms / v.count
+ out.totalChannels = v.totalChannels / v.count
+ out.totalPrivateGroups = v.totalPrivateGroups / v.count
+ out.totalDirect = v.totalDirect / v.count
+ out.avgChannelUsers = v.avgChannelUsers / v.count
+ out.avgPrivateGroupUsers = v.avgPrivateGroupUsers / v.count
+ out.maxRoomUsers = v.maxRoomUsers / v.count
+ out.os = {}
+ out.os.uptime = v.os.uptime / v.count
+ out.os.totalmem = v.os.totalmem / v.count
+ out.os.freemem = v.os.freemem / v.count
+ out.os.loadavg = [ (v.os.loadavg[0] / v.count), (v.os.loadavg[1] / v.count), (v.os.loadavg[2] / v.count) ]
+ return out
+
+ result = Statistics.mapReduce(m, r, { finalize: f, out: "rocketchat_mr_statistics" })
+ statistics = MapReducedStatistics.find().fetch()
+ return statistics
\ No newline at end of file
diff --git a/packages/rocketchat-lib/server/functions/getStatistics.coffee b/packages/rocketchat-lib/server/functions/getStatistics.coffee
new file mode 100644
index 000000000000..95c66fcf0043
--- /dev/null
+++ b/packages/rocketchat-lib/server/functions/getStatistics.coffee
@@ -0,0 +1,65 @@
+RocketChat.getStatistics = ->
+ statistics = {}
+
+ # Version
+ statistics.version = BuildInfo?.commit?.hash
+ statistics.versionDate = BuildInfo?.commit?.date
+
+ # User statistics
+ statistics.totalUsers = Meteor.users.find().count()
+ statistics.activeUsers = Meteor.users.find({ active: true }).count()
+ statistics.nonActiveUsers = statistics.totalUsers - statistics.activeUsers
+ statistics.onlineUsers = Meteor.users.find({ statusConnection: 'online' }).count()
+ statistics.offlineUsers = statistics.totalUsers - statistics.onlineUsers
+
+ # Room statistics
+ statistics.totalRooms = ChatRoom.find().count()
+ statistics.totalChannels = ChatRoom.find({ t: 'c' }).count()
+ statistics.totalPrivateGroups = ChatRoom.find({ t: 'p' }).count()
+ statistics.totalDirect = ChatRoom.find({ t: 'd' }).count()
+
+ m = ->
+ emit 1,
+ sum: this.usernames.length or 0
+ min: this.usernames.length or 0
+ max: this.usernames.length or 0
+ count: 1
+
+ emit this.t,
+ sum: this.usernames.length or 0
+ min: this.usernames.length or 0
+ max: this.usernames.length or 0
+ count: 1
+
+ r = (k, v) ->
+ a = v.shift()
+ for b in v
+ a.sum += b.sum
+ a.min = Math.min a.min, b.min
+ a.max = Math.max a.max, b.max
+ a.count += b.count
+ return a
+
+ f = (k, v) ->
+ v.avg = v.sum / v.count
+ return v
+
+ result = ChatRoom.mapReduce(m, r, { finalize: f, out: "rocketchat_mr_statistics" })
+
+ statistics.maxRoomUsers = MapReducedStatistics.findOne({ _id: 1 }).value.max
+ statistics.avgChannelUsers = MapReducedStatistics.findOne({ _id: 'c' }).value.avg
+ statistics.avgPrivateGroupUsers = MapReducedStatistics.findOne({ _id: 'p' }).value.avg
+
+ os = Npm.require('os')
+ statistics.os =
+ type: os.type()
+ platform: os.platform()
+ arch: os.arch()
+ release: os.release()
+ uptime: os.uptime()
+ loadavg: os.loadavg()
+ totalmem: os.totalmem()
+ freemem: os.freemem()
+ cpus: os.cpus()
+
+ return statistics
\ No newline at end of file
diff --git a/packages/rocketchat-lib/server/functions/saveStatistics.coffee b/packages/rocketchat-lib/server/functions/saveStatistics.coffee
new file mode 100644
index 000000000000..fca2fb1c8086
--- /dev/null
+++ b/packages/rocketchat-lib/server/functions/saveStatistics.coffee
@@ -0,0 +1,5 @@
+RocketChat.saveStatistics = ->
+ statistics = RocketChat.getStatistics()
+ statistics.createdAt = new Date
+ Statistics.insert statistics
+ return statistics
\ No newline at end of file
diff --git a/packages/rocketchat-lib/server/methods/generateStatistics.coffee b/packages/rocketchat-lib/server/methods/generateStatistics.coffee
new file mode 100644
index 000000000000..2f6174ea08ac
--- /dev/null
+++ b/packages/rocketchat-lib/server/methods/generateStatistics.coffee
@@ -0,0 +1,11 @@
+Meteor.methods
+ generateStatistics: ->
+ if not Meteor.userId()
+ throw new Meteor.Error('invalid-user', "[methods] generateStatistics -> Invalid user")
+
+ console.log '[methods] generateStatistics -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
+
+ unless Meteor.user()?.admin is true
+ throw new Meteor.Error 'not-authorized', '[methods] setAdminStatus -> Not authorized'
+
+ return RocketChat.getStatistics()
\ No newline at end of file
diff --git a/packages/rocketchat-lib/server/methods/setAdminStatus.coffee b/packages/rocketchat-lib/server/methods/setAdminStatus.coffee
new file mode 100644
index 000000000000..6d2cdbb82ae6
--- /dev/null
+++ b/packages/rocketchat-lib/server/methods/setAdminStatus.coffee
@@ -0,0 +1,11 @@
+Meteor.methods
+ setAdminStatus: (userId, admin) ->
+ if not Meteor.userId()
+ throw new Meteor.Error 'invalid-user', "[methods] setAdminStatus -> Invalid user"
+
+ unless Meteor.user()?.admin is true
+ throw new Meteor.Error 'not-authorized', '[methods] setAdminStatus -> Not authorized'
+
+ Meteor.users.update userId, { $set: { admin: admin } }
+
+ return true
diff --git a/packages/rocketchat-lib/server/methods/updateUser.coffee b/packages/rocketchat-lib/server/methods/updateUser.coffee
new file mode 100644
index 000000000000..adbda89a168b
--- /dev/null
+++ b/packages/rocketchat-lib/server/methods/updateUser.coffee
@@ -0,0 +1,20 @@
+Meteor.methods
+ updateUser: (userData) ->
+ if not Meteor.userId()
+ throw new Meteor.Error('invalid-user', "[methods] updateUser -> Invalid user")
+
+ console.log '[methods] updateUser -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
+
+ user = Meteor.user()
+
+ if user._id isnt userData._id and user.admin isnt true
+ throw new Meteor.Error 'not-authorized', '[methods] updateUser -> Not authorized'
+
+ unless userData._id
+ throw new Meteor.Error 'id-is-required', '[methods] updateUser -> User id is required'
+
+ unless userData.name
+ throw new Meteor.Error 'name-is-required', 'Name field is required'
+
+ Meteor.users.update { _id: userData._id }, { $set: { name: userData.name } }
+ return true
\ No newline at end of file
diff --git a/packages/rocketchat-lib/settings/server/startup.coffee b/packages/rocketchat-lib/settings/server/startup.coffee
index 678200b4c2b6..5fd5d4dc161f 100644
--- a/packages/rocketchat-lib/settings/server/startup.coffee
+++ b/packages/rocketchat-lib/settings/server/startup.coffee
@@ -21,6 +21,7 @@ Meteor.startup ->
RocketChat.settings.add 'Accounts_Twitter', false, { type: 'boolean', group: 'Accounts' }
RocketChat.settings.add 'Accounts_Twitter_id', '', { type: 'string', group: 'Accounts' }
RocketChat.settings.add 'Accounts_Twitter_secret', '', { type: 'string', group: 'Accounts' }
+ RocketChat.settings.add 'Accounts_ManuallyApproveNewUsers', false, { type: 'boolean', group: 'Accounts' }
RocketChat.settings.addGroup 'API'
RocketChat.settings.add 'API_Analytics', '', { type: 'string', group: 'API', public: true }
diff --git a/server/lib/accounts.coffee b/server/lib/accounts.coffee
index e260e9d602ec..6667d7bb13f0 100644
--- a/server/lib/accounts.coffee
+++ b/server/lib/accounts.coffee
@@ -20,7 +20,7 @@ Accounts.onCreateUser (options, user) ->
# console.log 'user ->',JSON.stringify user, null, ' '
user.status = 'offline'
- user.active = true
+ user.active = not RocketChat.settings.get 'Accounts_ManuallyApproveNewUsers'
serviceName = null
@@ -59,7 +59,7 @@ Accounts.validateLoginAttempt (login) ->
return login.allowed
if login.user?.active isnt true
- throw new Meteor.Error 'inactive-user', 'Your_user_has_been_deactivated'
+ throw new Meteor.Error 'inactive-user', TAPi18next.t 'project:User_is_not_activated'
return false
if login.type is 'password' and RocketChat.settings.get('Accounts_denyUnverifiedEmails') is true
diff --git a/server/lib/collections.coffee b/server/lib/collections.coffee
index 99be4160b350..4c22f223ad07 100644
--- a/server/lib/collections.coffee
+++ b/server/lib/collections.coffee
@@ -1,4 +1,6 @@
@ChatMessage = new Meteor.Collection 'rocketchat_message'
@ChatRoom = new Meteor.Collection 'rocketchat_room'
@ChatSubscription = new Meteor.Collection 'rocketchat_subscription'
-@ChatReports = new Meteor.Collection 'rocketchat_reports'
\ No newline at end of file
+@MapReducedStatistics = new Mongo.Collection 'rocketchat_mr_statistics'
+@Statistics = new Mongo.Collection 'rocketchat_statistics'
+@ChatReports = new Meteor.Collection 'rocketchat_reports'