diff --git a/.docker/dockerfiles/develop/Dockerfile b/.docker/dockerfiles/develop/Dockerfile index 2adc1194716..14e23628e99 100644 --- a/.docker/dockerfiles/develop/Dockerfile +++ b/.docker/dockerfiles/develop/Dockerfile @@ -1,12 +1,10 @@ FROM node:0.10 -# crafted and tuned by pierre@ozoux.net and sing.li@rocket.chat +# IMPORTANT - FOR TESTING ONLY - DO NOT USE THIS FOR DEVELOPMENT OR PRODUCTION! MAINTAINER buildmaster@rocket.chat RUN groupadd -r rocketchat \ -&& useradd -r -g rocketchat rocketchat \ -&& mkdir /app \ -&& mkdir /app/uploads +&& useradd -r -g rocketchat rocketchat VOLUME /app/uploads diff --git a/.docker/dockerfiles/latest/Dockerfile b/.docker/dockerfiles/latest/Dockerfile index 58332d6c3ff..286962d174d 100644 --- a/.docker/dockerfiles/latest/Dockerfile +++ b/.docker/dockerfiles/latest/Dockerfile @@ -4,9 +4,7 @@ FROM node:0.10 MAINTAINER buildmaster@rocket.chat RUN groupadd -r rocketchat \ -&& useradd -r -g rocketchat rocketchat \ -&& mkdir /app \ -&& mkdir /app/uploads +&& useradd -r -g rocketchat rocketchat VOLUME /app/uploads diff --git a/.meteor/versions b/.meteor/versions index bcc646ddc33..ff8301b12be 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -38,7 +38,7 @@ ecmascript@0.1.6 ecmascript-runtime@0.2.6 ejson@1.0.7 email@1.0.8 -emojione:emojione@2.0.0 +emojione:emojione@2.0.1 facebook@1.2.2 fastclick@1.0.7 francocatena:status@1.5.0 @@ -74,7 +74,7 @@ livedata@1.0.15 localstorage@1.0.5 logging@1.0.8 matb33:collection-hooks@0.8.1 -mdg:validation-error@0.2.0 +mdg:validation-error@0.3.0 meteor@1.1.10 meteor-base@1.0.1 meteor-developer@1.1.5 @@ -85,7 +85,7 @@ mizzao:autocomplete@0.5.1 mizzao:timesync@0.3.4 mobile-experience@1.0.1 mobile-status-bar@1.0.6 -momentjs:moment@2.11.0 +momentjs:moment@2.11.1 monbro:mongodb-mapreduce-aggregation@1.0.1 mongo@1.1.3 mongo-id@1.0.1 @@ -105,7 +105,7 @@ ostrio:cookies@2.0.1 pauli:accounts-linkedin@1.2.0 pauli:linkedin@1.2.0 perak:codemirror@1.2.8 -percolate:migrations@0.9.7 +percolate:migrations@0.9.8 percolate:synced-cron@1.3.0 pntbr:js-yaml-client@0.0.1 promise@0.5.1 diff --git a/README.md b/README.md index 2abb716a596..731063addc3 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ The Ultimate Open Source WebChat Platform * [Docker](#docker) * [FreeBSD](#freebsd) * [Ansible](#ansible) + * [Raspberry Pi 2](#raspberry-pi-2) * [Ubuntu VPS](#ubuntu-vps) * [Ubuntu Software Center](#ubuntu-software-center) * [About Rocket.Chat](#about-rocketchat) @@ -24,7 +25,7 @@ The Ultimate Open Source WebChat Platform * [Documentation](#documentation) * [License](#license) * [Development](#development) - * [Installation](#installation) + * [Quick Start](#quick-start-for-code-developers) * [Branching Model](#branching-model) * [Translations](#translations) * [Community](#community) @@ -71,7 +72,7 @@ Deploy your own Rocket.Chat server instantly on [Scalingo](https://scalingo.com) ## Sandstorm.io [![Rocket.Chat on Sandstorm.io](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/sandstorm.jpg)](https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0) -_*Grab*_ the [Sandstorm SPK for the latest Rocket.Chat release](https://github.com/RocketChat/Rocket.Chat/releases/latest) for testing on your own server. +_*Grab*_ the [Sandstorm SPK for the latest Rocket.Chat release](https://rocket.chat/releases/latest/spk) for testing on your own server. ## Sloppy.io Host your docker container at [sloppy.io](http://sloppy.io). Get an account and use the [quickstarter](https://github.com/sloppyio/quickstarters/tree/master/rocketchat) @@ -110,6 +111,11 @@ Automated production-grade deployment in minutes, for RHEL / CentOS 7 or Ubuntu [![Ansible deployment](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/ansible.png)](https://github.com/RocketChat/Rocket.Chat/wiki/Easy,-hands-off-deployment-with-Ansible) +## Raspberry Pi 2 +Run Rocket.Chat on this world famous $30 quad core server: + +[![Raspberry Pi 2](https://raw.githubusercontent.com/Sing-Li/bbug/master/images/pitiny.png)](https://github.com/RocketChat/Rocket.Chat.RaspberryPi) + ## Ubuntu VPS Follow these [deployment instructions](https://github.com/RocketChat/Rocket.Chat/wiki/Deploy-Rocket.Chat-without-docker) @@ -252,7 +258,7 @@ Note that Rocket.Chat is distributed under the [MIT License](http://opensource.o # Development -## Installation +## Quick start for code developers Prerequisites: * [Git](http://git-scm.com/book/en/v2/Getting-Started-Installing-Git) @@ -266,13 +272,7 @@ cd Rocket.Chat meteor ``` -or use docker: - -``` -git clone https://github.com/RocketChat/Rocket.Chat.git -cd Rocket.Chat -docker run -it -p 3000:3000 -v "$(pwd)":/app danieldent/meteor -``` +If you are not a developer and just want to run the server - see [deployment methods](https://github.com/RocketChat/Rocket.Chat/wiki#deployment). ## Branching Model diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json index fd1ca738d36..bc196b60c39 100644 --- a/i18n/ar.i18n.json +++ b/i18n/ar.i18n.json @@ -56,8 +56,10 @@ "close" : "غلق", "coming_soon" : "قريبا", "Commands" : "الأوامر", + "Compact_View" : "عرض متراص", "Confirm_password" : "تأكيد كلمة السر", "Conversation" : "محادثة", + "Convert_Ascii_Emojis" : "حول محارف الأسكي إلى اموجي", "COPY_TO_CLIPBOARD" : "نسخ", "Create_new" : "إنشاء جديد", "Create_new_direct_message_room" : "إنشاء غرفة رسالة مباشرة جديدة", @@ -81,7 +83,7 @@ "Email_already_exists" : "البريد الالكتروني موجود مسبقا", "Email_or_username" : "البريد الإلكتروني أو اسم المستخدم", "Email_verified" : "تم التحقق من البريد الإلكتروني", - "Emoji" : "الرموز التعبيرية", + "Emoji" : "رمز تعبيري (اموجي)", "Enable_Desktop_Notifications" : "تفعيل تنبيهات سطح المكتب", "Enter_info" : "ادخل المعلومات الخاصة بك", "Enter_to" : "ادخل الى", @@ -144,6 +146,7 @@ "Login_with" : "تسجيل الدخول بـ %s", "login_with" : "أو الدخول مباشرة بـ", "Logout" : "تسجيل خروج", + "Logout_Others" : "تسجيل الخروج من الأجهزة الأخرى", "Make_Admin" : "جعل مدير", "Mark_as_read" : "تعليم كمقروء", "Members" : "الأعضاء", @@ -200,6 +203,7 @@ "optional" : "اختياري", "others" : "آخرون", "Password" : "كلمة السر", + "Password_Change_Disabled" : "مدير الموقع منع تغيير كلمة السر", "Password_changed_successfully" : "تم تغيير كلمة السر بنجاح", "People" : "الناس", "Please_enter_your_new_password_below" : "الرجاء إدخال كلمة المرور الجديدة أدناه:", @@ -224,6 +228,7 @@ "Remove" : "إزالة", "Remove_Admin" : "إزالة مدير", "Remove_from_room" : "إزالة من الغرفة", + "Removed" : "تمت اﻹزالة", "Reset" : "إعادة التعيين", "Reset_password" : "إعادة تعيين كلمة السر", "Restart" : "إعادة التشغيل", @@ -239,6 +244,7 @@ "Rooms" : "الغرف", "S_new_messages_since_s" : "% رسالة جديدة منذ %", "Save_changes" : "حفظ التغيرات", + "Save_Mobile_Bandwidth" : "توفير استهلاك الانترنت", "Search" : "بحث", "Search_Messages" : "بحث الرسائل", "Search_settings" : "إعدادات البحث", @@ -254,7 +260,7 @@ "Send_Message" : "أرسل رسالة", "Settings" : "اﻹعدادات", "Settings_updated" : "تم تحديث الإعدادات", - "Showing_online_users" : "عرض __total_online__ of __total__ users", + "Showing_online_users" : "عرض __total_online__من __total__ عضو", "Showing_results" : "

يعرض %s نتائج

", "Silence" : "الصمت", "since_creation" : "منذ %s", @@ -290,7 +296,7 @@ "Submit" : "تقديم", "The_channel_name_is_required" : "اسم القناة مطلوب", "The_field_is_required" : "هذا الحقل %s مطلوب.", - "The_server_will_restart_in_s_seconds" : "سيتم إعادة تشغيل السيرفر في ٪s ثانية", + "The_server_will_restart_in_s_seconds" : "سيتم إعادة تشغيل الخادم في %s ثانية", "True" : "نعم", "Type_your_new_password" : "اكتب كلمة المرور الجديدة", "Unmute_user" : "إلغاء اسكات المستخدم", @@ -298,7 +304,7 @@ "Unread_Rooms_Mode" : "وضع الغرف الغير مقروءة", "Upload_file_question" : "تحميل الملف؟", "Uploading_file" : "تحميل الملف ...", - "Use_Emojis" : "استخدام Emojis", + "Use_Emojis" : "استخدم الرموز التعبيرية (ايموجي)", "Use_initials_avatar" : "استخدم الأحرف الأولى من اسم المستخدم", "use_menu" : "استخدم القائمة الجانبية للوصول إلى الغرف الخاصة بك والمحادثات", "Use_service_avatar" : "استخدام %s الرمزية", @@ -330,11 +336,13 @@ "User_updated_successfully" : "تم تحديث العضو بنجاح", "Username" : "اسم المستخدم", "Username_cant_be_empty" : "اسم المستخدم لا يمكن أن يكون فارغا", + "Username_Change_Disabled" : "مدير الموقع منع تغيير اسم المستخدم", "Username_description" : "يتم استخدام اسم المستخدم للسماح للآخرين بذكرك في الرسائل.", "Username_invalid" : "%s لا يصلح كإسم مستخدم،
استخدم فقط حروفا وأرقاما وشرطات", "Username_title" : "تسجيل اسم المستخدم", "Username_unavaliable" : "%s مستخدم مسبقا :(", "Users" : "المستخدمين", + "UTF8_Names_Validation_Description" : "لا تسمح باستخدام رموز خاصة و مسافات. يمكنك استخدام العلامات التالية - _  . لكن لا تسمح بهن في نهاية الاسم.", "View_All" : "مشاهدة الكل", "We_have_sent_password_email" : "لقد قمنا بإرسال رسالة بريد إلكتروني مع إرشادات إعادة تعيين كلمة السر. إذا لم يصلك البريد الإلكتروني قريبا، يرجى العودة والمحاولة مرة أخرى.", "We_have_sent_registration_email" : "لقد قمنا بإرسال رسالة بريد إلكتروني لتأكيد تسجيلك. إذا لم يصلك البريد الإلكتروني قريبا، يرجى العودة والمحاولة مرة أخرى.", @@ -344,6 +352,7 @@ "Yes" : "نعم", "Yes_clear_all" : "نعم، حذف الكل!", "Yes_delete_it" : "نعم، أحذف!", + "You_can_use_an_emoji_as_avatar" : "تستطيع استخدام ايموجي كصورة رمزية", "You_have_been_muted" : "لقد تم اسكاتك ولا يمكنك التحدث في هذه الغرفة", "You_need_confirm_email" : "تحتاج إلى تأكيد بريدك الإلكتروني لتسجيل الدخول!", "You_will_not_be_able_to_recover" : "لن تستطيع استرداد هذه الرسالة!", diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json index 6e9a76cccb4..ebca809b478 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -88,6 +88,7 @@ "are_typing" : "schreiben", "Are_you_sure" : "Sind Sie sicher?", "Authorization_URL" : "Autorisierungs-URL", + "Authorize" : "Berechtigen", "Auto_Load_Images" : "Automatisches Laden der Bilder", "Avatar_changed_successfully" : "Das Profilbild wurde erfolgreich geändert.", "Avatar_URL" : "URL des Profilbilds", @@ -231,7 +232,9 @@ "is_typing_male" : "schreibt", "italics" : "kursiv", "join" : "Beitreten", + "Join_audio_call" : "Anruf beitreiten", "Join_the_Community" : "Trete der Community bei", + "Join_video_call" : "Videoanruf beitreten", "Jump_to_first_unread" : "Erste ungelesene Nachricht anzeigen", "Jump_to_message" : "Diese Nachricht im Chat anzeigen", "Jump_to_recent_messages" : "Neue Nachricht im Chat anzeigen", @@ -251,6 +254,7 @@ "LDAP" : "LDAP", "LDAP_Bind_Search" : "Bind-Suche", "LDAP_Bind_Search_Description" : "Ein Stück von JSON, welches Bind und Verbindungsinformationen regelt, und folgende Form hat: {\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}", + "LDAP_CA_Cert" : "CA-Cert", "LDAP_Description" : "LDAP ist ein Frontend zu hierarchischen Datenbanken, die viele Unternehmen nutzen, um eine eine Einmalanmeldung (SSO) zu ermöglichen. Über SSO kann \"ein Benutzer nach einer einmaligen Authentifizierung an einem Arbeitsplatz auf alle Rechner und Dienste, für die er lokal berechtigt ist, am selben Arbeitsplatz zugreifen kann, ohne sich jedes Mal neu anmelden zu müssen\". Genauere Informationen zur Konfiguration von LDAP mit Konfigurationsbeispielen erhalten Sie unter folgendem Link: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication", "LDAP_DN" : "Distinguished Name (DN)", "LDAP_DN_Description" : "Suche root. Beispiel: dc=domain, dc=com", @@ -258,10 +262,12 @@ "LDAP_Enable_Description" : "LDAP für die Authentifizierung verwenden.", "LDAP_Port" : "LDAP-Port", "LDAP_Port_Description" : "Port für den Zugriff auf LDAP. Beispiel: Port 389", + "LDAP_Reject_Unauthorized" : "Unberechtigte ablehnen", "LDAP_Sync_User_Data" : "Daten synchronisieren", "LDAP_Sync_User_Data_Description" : "Bei der Anmeldung die Benutzerdaten mit dem Server synchronisieren (Beispiel: Name, E-Mail).", "LDAP_Sync_User_Data_FieldMap" : "Nutzerdaten-Feldkarte", "LDAP_Sync_User_Data_FieldMap_Description" : "Konfigurieren Sie, wie Benutzer-Account-Felder (wie die E-Mail-Adresse) aus einem Datensatz (sobald gefunden) in LDAP besiedelt werden. Beispiel: {\"cn\": \"Name\", \"Mail\": \"E-Mail\"} nimmt einen von Menschen lesbaren Namen von dem cn-Attribut und die E-Mail-Adresse vom Mail-Attribut. Verfügbare Felder beinhalten den Namen und die E-Mail-Adresse.", + "LDAP_TLS" : "TLS", "LDAP_Url" : "LDAP-URL", "LDAP_Url_Description" : "URL des LDAP-Servers. Beispiel: ldap://company.dns.com", "Leave_room" : "Raum verlassen", @@ -270,10 +276,12 @@ "Loading..." : "Wird geladen ...", "Loading_more_from_history" : "Mehr Nachrichten aus dem Verlauf anzeigen", "Loading_suggestion" : "Vorschläge werden geladen...", + "Logged_out_of_other_clients_successfully" : "Sie wurden erfolgreich von anderen Geräten abgemeldet.", "Login" : "Anmelden", "Login_with" : "Anmelden mit %s", "login_with" : "Oder melden Sie sich direkt mit folgenden Accounts an", "Logout" : "Abmelden", + "Logout_Others" : "Von anderen Geräten abmelden", "Make_Admin" : "Benutzer zum Admin ernennen", "Mark_as_read" : "Als gelesen markieren", "Markdown_Headers" : "Markdown-Überschriften", @@ -315,6 +323,7 @@ "Msgs" : "Nachrichten", "multi" : "mehrere", "Mute_user" : "Benutzern das Chatten verbieten", + "Muted" : "Stumm geschaltet", "My_Account" : "Mein Konto", "n_messages" : "%s Nachrichten", "Name" : "Name", @@ -348,7 +357,7 @@ "Only_you_can_see_this_message" : "Nur Sie können diese Nachricht sehen.", "Oops!" : "Hoppla", "Opt_out_statistics" : "Meine anonymen Statistiken nicht an Rocket.Chat senden", - "Opt_out_statistics_warning" : "Indem Sie uns Ihre anonymen Statistiken zur Verfügung stellen, können wir feststellen, wie viele Personen Rocket.Chat installiert haben und wie gut Rocket.Chat funktioniert. Das hilft uns dabei, Rocket.Chat weiterzuentwickeln. Wenn Sie weiterhin anonyme Statistiken an uns senden möchten, deaktivieren Sie bitte das Kontrollkästchen oben. Vielen Dank.", + "Opt_out_statistics_warning" : "Indem Sie uns Ihre anonymen Statistiken zur Verfügung stellen, können wir feststellen, wie viele Personen Rocket.Chat installiert haben und wie gut Rocket.Chat funktioniert. Das hilft uns dabei, Rocket.Chat weiterzuentwickeln. Es werden keine Benutzerinformationen gesendet und die erhaltenen Daten werden vertraulich behandelt. Wenn Sie weiterhin anonyme Statistiken an uns senden möchten, deaktivieren Sie bitte das Kontrollkästchen oben. Vielen Dank.", "optional" : "optional", "others" : "andere", "Password" : "Passwort", @@ -399,8 +408,11 @@ "Remember_me" : "Erinnere mich", "Remove" : "Entfernen", "Remove_Admin" : "Admin entfernen", + "Remove_as_moderator" : "Moderatorenrechte entfernen", + "Remove_as_owner" : "als Besitzer entfernen", "Remove_custom_oauth" : "OAuth-Konto entfernen", "Remove_from_room" : "Aus dem Raum entfernen", + "Removed" : "Entfernt", "Reset" : "Zurücksetzen", "Reset_password" : "Passwort zurücksetzen", "Restart" : "Neustart", @@ -448,6 +460,8 @@ "Send_invitation_email_warning" : "Um Einladungen per E-Mail zu versenden, müssen Sie zuerst die SMTP-Einstellungen konfigurieren.", "Send_Message" : "Nachricht senden", "Send_your_JSON_payloads_to_this_URL" : "Senden Sie Ihre JSON-Nutzlasten an diese URL.", + "Set_as_moderator" : "Zum Moderator ernennen", + "Set_as_owner" : "zum Besitzer machen", "Settings" : "Einstellungen", "Settings_updated" : "Die Einstellungen wurden aktualisiert.", "Should_be_a_URL_of_an_image" : "Dies soll die URL des Bildes sein.", @@ -467,7 +481,9 @@ "SMTP_Test_Button" : "SMTP-Einstellungen testen", "SMTP_Username" : "SMTP-Benutzername", "Sound" : "Ton", + "Start_audio_call" : "Anruf starten", "Start_of_conversation" : "Beginn der Konversation", + "Start_video_call" : "Videoanruf starten", "Start_with_s_for_user_or_s_for_channel_Eg_s_or_s" : "Starten Sie mit %s für Nutzer oder %s für Kanäle. Beispiel: %s oder %s", "Statistics" : "Statistiken", "Stats_Active_Users" : "Aktive Benutzer", @@ -504,6 +520,8 @@ "The_redirectUri_is_required" : "Es muss eine Weiterleitung-URL angegeben werden.", "The_server_will_restart_in_s_seconds" : "Der Server wird in %s Sekunden neu gestartet", "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s" : "Die Einstellung %s wurde zu %s konfiguriert und Sie greifen von %s zu!", + "The_user_will_be_removed_from_s" : "Der Benutzer wird von %s entfernt.", + "The_user_wont_be_able_to_type_in_s" : "Der Benutzer kann nicht mehr in %s schreiben.", "There_are_no_integrations" : "Es sind keine Integrationen vorhanden.", "This_is_a_push_test_messsage" : "Dies ist eine Test-Push-Nachricht.", "True" : "Ja", @@ -522,11 +540,21 @@ "Use_this_username" : "Benutzen Sie folgenden Benutzernamen", "Use_uploaded_avatar" : "Das hochgeladene Profilbild verwenden", "Use_url_for_avatar" : "URL für Profilbild verwenden", + "User__username__is_now_a_moderator_of__room_name_" : "Der Benuzer __username__ ist jetzt ein Moderator des Raums __room_name__.", + "User__username__is_now_a_owner_of__room_name_" : "Benutzer __username__ ist jetzt ein Besitzer von __room_name__", + "User__username__removed_from__room_name__moderators" : "Der Benutzer __username__ wurde von einem Moderator aus __room_name__ entfernt.", + "User__username__removed_from__room_name__owners" : "Benutzer __username__ wurde als Besitzer von __room_name__ entfernt.", + "User__username__was_added_as_a_moderator_by__user_by_" : "Der Benuzer __username__ wurde von __user_by__ als Moderator hinzugefügt.", + "User__username__was_added_as_a_owner_by__user_by_" : "Benutzer __username__ wurde von __user_by__ als Besitzer hinzugefügt.", + "User__username__was_removed_as_a_moderator_by__user_by_" : "Dem Benutzer __username__ wurden die Moderatorenrechte von __user_by__ entfernt.", + "User__username__was_removed_as_a_owner_by__user_by_" : "Benutzer __username__ wurde von __user_by__ als Besitzer entfernt.", "User_added_by" : "Der Benutzer __user_added__ wurde von __user_by__ hinzugefügt.", "User_Channels" : "Benutzerkanäle", "User_has_been_activated" : "Der Benutzer wurde aktiviert.", "User_has_been_deactivated" : "Der Benutzer wurde deaktiviert.", "User_has_been_deleted" : "Der Benutzer wurde gelöscht.", + "User_has_been_muted_in_s" : "Dem Nutzer wurde das Schreiben in %s verboten.", + "User_has_been_removed_from_s" : "Der Benutzer wurde von %s entfernt.", "User_Info" : "Benutzerinformationen", "User_is_no_longer_an_admin" : "Der Benutzer ist kein Admin mehr.", "User_is_not_activated" : "Der Benutzer ist nicht aktiviert.", @@ -565,11 +593,15 @@ "We_have_sent_registration_email" : "Wir haben Ihnen eine Bestätigungsmail gesendet. Wenn Sie keine E-Mail erhalten haben, versuchen Sie es bitte noch einmal.", "Welcome" : "Willkommen, %s.", "Welcome_to_the" : "Willkommen bei", + "will_be_able_to" : "wird in der Lage sein,", "With_whom" : "Mit wem?", "Yes" : "Ja", "Yes_clear_all" : "Ja!", "Yes_delete_it" : "Ja!", + "Yes_mute_user" : "Ja, Benutzer stumm schalten!\n", + "Yes_remove_user" : "Ja, Nutzer entfernen!", "you_are_in_preview_mode_of" : "Sie befinden sich im Vorschaumodus des Kanals #__room_name__.", + "You_are_logged_in_as" : "Sie sind angemeldet als", "You_can_change_a_different_avatar_too" : "Sie können das aktuell verwendete Profilbild überschreiben, um von dieser Integration zu veröffentlichen.", "You_can_use_an_emoji_as_avatar" : "Sie können auch einen Emoji als Profilbild verwenden.", "You_have_been_muted" : "Ihnen wurde das Chatten in diesem Raum verboten. ", diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index e17e14d18a4..75144642647 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -88,6 +88,7 @@ "are_typing" : "are typing", "Are_you_sure" : "Are you sure?", "Authorization_URL" : "Authorization URL", + "Authorize" : "Authorize", "Auto_Load_Images" : "Auto Load Images", "Avatar_changed_successfully" : "Avatar changed successfully", "Avatar_URL" : "Avatar URL", @@ -181,6 +182,7 @@ "FileUpload_ProtectFiles" : "Protect uploaded files", "FileUpload_ProtectFilesDescription" : "Only authenticated users will have access", "Follow_social_profiles" : "Follow our social profiles, fork us on github and share your thoughts about the rocket.chat app on our trello board.", + "Force_SSL" : "Force SSL", "Forgot_password" : "Forgot your password", "Fork_it_on_github" : "Fork it on github", "From_Email" : "From Email", @@ -231,7 +233,9 @@ "is_typing_male" : "is typing", "italics" : "italics", "join" : "Join", + "Join_audio_call" : "Join audio call", "Join_the_Community" : "Join the Community", + "Join_video_call" : "Join video call", "Jump_to_first_unread" : "Jump to first unread", "Jump_to_message" : "Jump to message", "Jump_to_recent_messages" : "Jump to recent messages", @@ -251,6 +255,7 @@ "LDAP" : "LDAP", "LDAP_Bind_Search" : "Bind Search", "LDAP_Bind_Search_Description" : "A piece of JSON that governs bind and connection info and is of the form {\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}", + "LDAP_CA_Cert" : "CA Cert", "LDAP_Description" : "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.", "LDAP_DN" : "Distinguished Name (DN)", "LDAP_DN_Description" : "Search root; example: dc=domain,dc=com", @@ -258,10 +263,12 @@ "LDAP_Enable_Description" : "Attempt to utilize LDAP for authentication.", "LDAP_Port" : "LDAP Port", "LDAP_Port_Description" : "Port to access LDAP on; eg: 389", + "LDAP_Reject_Unauthorized" : "Reject Unauthorized", "LDAP_Sync_User_Data" : "Sync Data", "LDAP_Sync_User_Data_Description" : "Keep user data in sync with server on login (eg: name, email).", "LDAP_Sync_User_Data_FieldMap" : "User Data Field Map", "LDAP_Sync_User_Data_FieldMap_Description" : "Configure how user account fields (like email) are populated from a record in LDAP (once found). As an example, {\"cn\":\"name\", \"mail\":\"email\"} will choose a person's human readable name from the cn attribute, and their email from the mail attribute. Available fields include name, and email.", + "LDAP_TLS" : "TLS", "LDAP_Url" : "LDAP URL", "LDAP_Url_Description" : "URL of the LDAP server; example: ldap://company.dns.com", "Leave_room" : "Leave room", @@ -270,10 +277,12 @@ "Loading..." : "Loading...", "Loading_more_from_history" : "Loading more from history", "Loading_suggestion" : "Loading suggestions...", + "Logged_out_of_other_clients_successfully" : "Logged out of other clients successfully", "Login" : "Login", "Login_with" : "Login with %s", "login_with" : "Or login directly with", "Logout" : "Logout", + "Logout_Others" : "Logout From Other Logged In Locations", "Make_Admin" : "Make Admin", "Mark_as_read" : "Mark as read", "Markdown_Headers" : "Markdown Headers", @@ -315,6 +324,7 @@ "Msgs" : "Msgs", "multi" : "multi", "Mute_user" : "Mute user", + "Muted" : "Muted", "My_Account" : "My Account", "n_messages" : "%s messages", "Name" : "Name", @@ -399,8 +409,11 @@ "Remember_me" : "Remember me", "Remove" : "Remove", "Remove_Admin" : "Remove Admin", + "Remove_as_moderator" : "Remove as moderator", + "Remove_as_owner" : "Remove as owner", "Remove_custom_oauth" : "Remove custom oauth", "Remove_from_room" : "Remove from room", + "Removed" : "Removed", "Reset" : "Reset", "Reset_password" : "Reset password", "Restart" : "Restart", @@ -448,6 +461,8 @@ "Send_invitation_email_warning" : "In order to send invitation e-mails, you must first configure SMTP settings.", "Send_Message" : "Send Message", "Send_your_JSON_payloads_to_this_URL" : "Send your JSON payloads to this URL.", + "Set_as_moderator" : "Set as moderator", + "Set_as_owner" : "Set as owner", "Settings" : "Settings", "Settings_updated" : "Settings updated", "Should_be_a_URL_of_an_image" : "Should be a URL of an image.", @@ -467,7 +482,9 @@ "SMTP_Test_Button" : "Test SMTP Settings", "SMTP_Username" : "SMTP Username", "Sound" : "Sound", + "Start_audio_call" : "Start audio call", "Start_of_conversation" : "Start of conversation", + "Start_video_call" : "Start video call", "Start_with_s_for_user_or_s_for_channel_Eg_s_or_s" : "Start with %s for user or %s for channel. Eg: %s or %s", "Statistics" : "Statistics", "Stats_Active_Users" : "Active Users", @@ -504,6 +521,8 @@ "The_redirectUri_is_required" : "The redirectUri is required", "The_server_will_restart_in_s_seconds" : "The server will restart in %s seconds", "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s" : "The setting %s is configured to %s and you are accessing from %s!", + "The_user_will_be_removed_from_s" : "The user will be removed from %s", + "The_user_wont_be_able_to_type_in_s" : "The user won't be able to type in %s", "There_are_no_integrations" : "There are no integrations", "This_is_a_push_test_messsage" : "This is a push test messsage", "True" : "True", @@ -522,11 +541,21 @@ "Use_this_username" : "Use this username", "Use_uploaded_avatar" : "Use uploaded avatar", "Use_url_for_avatar" : "Use url for avatar", + "User__username__is_now_a_moderator_of__room_name_" : "User __username__ is now a moderator of __room_name__", + "User__username__is_now_a_owner_of__room_name_" : "User __username__ is now a owner of __room_name__", + "User__username__removed_from__room_name__moderators" : "User __username__ removed from __room_name__ moderators", + "User__username__removed_from__room_name__owners" : "User __username__ removed from __room_name__ owners", + "User__username__was_added_as_a_moderator_by__user_by_" : "User __username__ was added as a moderator by __user_by__", + "User__username__was_added_as_a_owner_by__user_by_" : "User __username__ was added as a owner by __user_by__", + "User__username__was_removed_as_a_moderator_by__user_by_" : "User __username__ was removed as a moderator by __user_by__", + "User__username__was_removed_as_a_owner_by__user_by_" : "User __username__ was removed as a owner by __user_by__", "User_added_by" : "User __user_added__ added by __user_by__.", "User_Channels" : "User Channels", "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_has_been_muted_in_s" : "User has been muted in %s", + "User_has_been_removed_from_s" : "User has been removed from %s", "User_Info" : "User Info", "User_is_no_longer_an_admin" : "User is no longer an admin", "User_is_not_activated" : "User is not activated", @@ -565,11 +594,15 @@ "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.", "Welcome_to_the" : "Welcome to the", + "will_be_able_to" : "will be able to", "With_whom" : "With whom", "Yes" : "Yes", "Yes_clear_all" : "Yes, clear all!", "Yes_delete_it" : "Yes, delete it!", + "Yes_mute_user" : "Yes, mute user!", + "Yes_remove_user" : "Yes, remove user!", "you_are_in_preview_mode_of" : "You are in preview mode of channel #__room_name__", + "You_are_logged_in_as" : "You are logged in as", "You_can_change_a_different_avatar_too" : "You can override the avatar used to post from this integration.", "You_can_use_an_emoji_as_avatar" : "You can also use an emoji as an avatar.", "You_have_been_muted" : "You have been muted and cannot speak in this room", diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json index 77a8acfa104..83fdccc6647 100644 --- a/i18n/fi.i18n.json +++ b/i18n/fi.i18n.json @@ -88,6 +88,7 @@ "are_typing" : "kirjoittavat", "Are_you_sure" : "Oletko varma?", "Authorization_URL" : "Valtuutus URL", + "Authorize" : "Valtuuta", "Auto_Load_Images" : "Lataa kuvat automaattisesti\n", "Avatar_changed_successfully" : "Avatar vaihdettu onnistuneesti", "Avatar_URL" : "Avatarin URL", @@ -231,7 +232,9 @@ "is_typing_male" : "kirjoittaa", "italics" : "kursivoitu", "join" : "Liity", + "Join_audio_call" : "Liity äänipuheluun", "Join_the_Community" : "Liity yhteisöön", + "Join_video_call" : "Liity videopuheluun", "Jump_to_first_unread" : "Siirry ensimmäiseen lukemattomaan", "Jump_to_message" : "Siirry viestiin", "Jump_to_recent_messages" : "Siirry viimeisimpiin viestiin", @@ -270,10 +273,12 @@ "Loading..." : "Ladataan...", "Loading_more_from_history" : "Ladataan lisää historiasta", "Loading_suggestion" : "Ladataan ehdotuksia...", + "Logged_out_of_other_clients_successfully" : "Muut sessiot kirjattu ulos onnistuneesti", "Login" : "Kirjaudu", "Login_with" : "Kirjaudu käyttäen %s", "login_with" : "tai kirjaudu suoraan", "Logout" : "Kirjaudu ulos", + "Logout_Others" : "Kirjaa ulos muut sessiot", "Make_Admin" : "Tee ylläpitäjäksi", "Mark_as_read" : "Merkitse luetuksi", "Markdown_Headers" : "Markdown otsikot", @@ -315,6 +320,7 @@ "Msgs" : "Viestit", "multi" : "monta", "Mute_user" : "Mykistä käyttäjä", + "Muted" : "Mykistetty", "My_Account" : "Käyttäjätilini", "n_messages" : "%s viestiä", "Name" : "Nimi", @@ -399,8 +405,11 @@ "Remember_me" : "Muista minut", "Remove" : "Poista", "Remove_Admin" : "Poista ylläpitäjyys", + "Remove_as_moderator" : "Poista moderaattoristatus", + "Remove_as_owner" : "Poista omistajuus", "Remove_custom_oauth" : "Poista mukautettu oauth", "Remove_from_room" : "Poista huoneesta", + "Removed" : "Poistettu", "Reset" : "Nollaa", "Reset_password" : "Nollaa salasana", "Restart" : "Käynnistä uudelleen", @@ -448,6 +457,8 @@ "Send_invitation_email_warning" : "Lähettääksesi sähköpostikutsuja, sinun täytyy ensin tehdä SMTP asetukset.", "Send_Message" : "Lähetä viesti", "Send_your_JSON_payloads_to_this_URL" : "Lähetä JSON payload tähän URL-osoitteeseen", + "Set_as_moderator" : "Aseta moderaattoriksi", + "Set_as_owner" : "Aseta omistajaksi", "Settings" : "Asetukset", "Settings_updated" : "Asetukset päivitetty", "Should_be_a_URL_of_an_image" : "Kuvan URL-osoite", @@ -467,7 +478,9 @@ "SMTP_Test_Button" : "Testaa SMTP-asetukset", "SMTP_Username" : "SMTP Käyttäjätunnus", "Sound" : "Ääni", + "Start_audio_call" : "Aloita äänipuhelu", "Start_of_conversation" : "Keskustelun alku", + "Start_video_call" : "Aloita videopuhelu", "Start_with_s_for_user_or_s_for_channel_Eg_s_or_s" : "Aloita %s käyttäjänä or %s kanavana. Esim: %s tai %s", "Statistics" : "Tilastot", "Stats_Active_Users" : "Aktiivisia käyttäjiä", @@ -504,6 +517,8 @@ "The_redirectUri_is_required" : "Ohjaus URI on pakollinen", "The_server_will_restart_in_s_seconds" : "Palvelin käynnistyy %s sekunnin kuluttua", "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s" : "Asetus %s on määritelty arvoon %s yrität käyttää tätä lähteenä %s!", + "The_user_will_be_removed_from_s" : "Käyttäjä poistetaan %s", + "The_user_wont_be_able_to_type_in_s" : "Käyttäjä ei pysty kirjoittamaan %s", "There_are_no_integrations" : "Ei integraatioita", "This_is_a_push_test_messsage" : "Tämä on testi-pushviesti", "True" : "Kyllä", @@ -522,11 +537,21 @@ "Use_this_username" : "Käytä tätä käyttäjänimieä", "Use_uploaded_avatar" : "Käytä ladattua avataria", "Use_url_for_avatar" : "Käytä avatar-URLia", + "User__username__is_now_a_moderator_of__room_name_" : "Käyttäjä __username__ on nyt __room_name__ moderaattori", + "User__username__is_now_a_owner_of__room_name_" : "Käyttäjä __username__ on nyt __room_name__ omistaja", + "User__username__removed_from__room_name__moderators" : "Käyttäjän __username__ moderaattoristatus __room_name__  on poistettu", + "User__username__removed_from__room_name__owners" : "Käyttäjä __username__ poistettu __room_name__ omistajista", + "User__username__was_added_as_a_moderator_by__user_by_" : "Käyttäjä __username__ on lisätty moderaattoriksi __user_by__ toimesta", + "User__username__was_added_as_a_owner_by__user_by_" : "Käyttäjä __username__ lisätty __user_by__ omistajaksi", + "User__username__was_removed_as_a_moderator_by__user_by_" : "Käyttäjän __username__ moderaattoristatus poistettu käyttäjän  __user_by__ toimesta", + "User__username__was_removed_as_a_owner_by__user_by_" : "Käyttäjä __username__ on poistettu __user_by__ omistajista", "User_added_by" : "Käyttäjä __user_added__ lisätty __user_by__ toimesta.", "User_Channels" : "Käyttäjän kanavat", "User_has_been_activated" : "Käyttäjä on aktivoitu", "User_has_been_deactivated" : "Käyttäjä on deaktivoitu", "User_has_been_deleted" : "Käyttäjä on poistettu", + "User_has_been_muted_in_s" : "Käyttäjä on mykistetty %s", + "User_has_been_removed_from_s" : "Käyttäjä on poistettu %s", "User_Info" : "Käyttäjän tiedot", "User_is_no_longer_an_admin" : "Käyttäjä ei ole enää ylläpitäjä", "User_is_not_activated" : "Käyttäjää ei ole aktivoitu", @@ -565,11 +590,15 @@ "We_have_sent_registration_email" : "Lähetimme rekisteröitymisvahvistuksen sähköpostiisi. Mikäli et saanut sähköpostia, yritä uudelleen.", "Welcome" : "Tervetuloa %s.", "Welcome_to_the" : "Tervetuloa", + "will_be_able_to" : "mahdollistaa", "With_whom" : "kanssa", "Yes" : "Kyllä", "Yes_clear_all" : "Jep, tyhjennä kaikki!", "Yes_delete_it" : "Kyllä, poista!", + "Yes_mute_user" : "Kyllä, mykistä käyttäjä!", + "Yes_remove_user" : "Kyllä, poista käyttäjä!", "you_are_in_preview_mode_of" : "Tämä on kanavan #__room_name__ esikatselutila", + "You_are_logged_in_as" : "Olet kirjautunut sisään käyttäjänä", "You_can_change_a_different_avatar_too" : "Voit vaihtaa tähän eri avatarin tätä integraatiota varten", "You_can_use_an_emoji_as_avatar" : "Voit käyttää myös emojia avatarina.", "You_have_been_muted" : "Olet mykistetty, et voi puhua tässä huoneessa.", diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json index 4dceb39fb3d..fdd4e9b7b7f 100644 --- a/i18n/he.i18n.json +++ b/i18n/he.i18n.json @@ -4,14 +4,33 @@ "Access_Online_Demo" : "צפייה בגרסת ההדגמה", "Accounts" : "חשבונות", "Accounts_EmailVerification" : "אימות דוא״ל", + "Accounts_OAuth_Custom_Authorize_Path" : "נתיב אימות", + "Accounts_OAuth_Custom_Button_Color" : "צבע הכפתור", + "Accounts_OAuth_Custom_Button_Label_Color" : "צבע טקסט הכפתור", + "Accounts_OAuth_Custom_Button_Label_Text" : "טקסט הכפתור", + "Accounts_OAuth_Custom_Enable" : "הפעלה", + "Accounts_OAuth_Custom_Identity_Path" : "נתיב הזהות", "Accounts_OAuth_Custom_Secret" : "סוד", + "Accounts_OAuth_Custom_Token_Path" : "נתיב האסימון", "Accounts_OAuth_Custom_URL" : "כתובת", + "Accounts_OAuth_Facebook" : "כניסה לפייסבוק", + "Accounts_OAuth_Facebook_id" : "מזהה יישומון פייסבוק", + "Accounts_OAuth_Facebook_secret" : "סוד פייסבוק", + "Accounts_OAuth_Github_id" : "מזהה לקוח", + "Accounts_OAuth_Github_secret" : "סוד לקוח", + "Accounts_OAuth_Google" : "כניסה לגוגל", + "Accounts_OAuth_Google_id" : "מזהה בגוגל", + "Accounts_OAuth_Google_secret" : "סוד גוגל", + "Accounts_OAuth_Linkedin" : "כניסה ל־LinkedIn", + "Accounts_OAuth_Linkedin_id" : "מזהה LinkedIn", + "Accounts_OAuth_Linkedin_secret" : "סוד LinkedIn", "Accounts_PasswordReset" : "איפוס ססמה", "Accounts_RegistrationForm" : "טופס הרשמה", "Accounts_RegistrationForm_Secret_URL" : "כתובת סודית", "Accounts_RegistrationRequired" : "נדרשת הרשמה", "Add_Members" : "הוספת חברים", "Add_users" : "הוספת משתמשים", + "Administration" : "ניהול", "All_channels" : "כל הערוצים", "and" : "ו", "API_Embed" : "הטמעה", @@ -45,6 +64,7 @@ "Confirm_password" : "אימות הססמה", "Contact" : "יצירת קשר", "Conversation" : "שיחה", + "Convert_Ascii_Emojis" : "המרת ASCII לאימוג׳י", "COPY_TO_CLIPBOARD" : "העתקה ללוח הגזירים", "Create_new" : "יצירת חדש", "Create_new_direct_message_room" : "יצירת חדר הודעה ישירה חדש", @@ -54,6 +74,8 @@ "days" : "ימים", "Deleted" : "נמחק!", "Direct_Messages" : "הודעות ישירות", + "Disable_New_Message_Notification" : "נטרול התרעת הודעה חדשה", + "Disable_New_Room_Notification" : "נטרול התרעת חדר חדש", "Drop_to_upload_file" : "יש להשליך לכאן כדי להעלות קובץ", "Duplicate_channel_name" : "כבר קיים ערוץ בשם ‚%s‘", "Duplicate_private_group_name" : "כבר קיימת קבוצה פרטית בשם ‚%s‘", @@ -75,6 +97,7 @@ "General" : "כללי", "Get_to_know_the_team" : "היכרות עם הצוות שמאחורי Rocket.Chat", "github_no_public_email" : "אין לך אף כתובת דוא״ל פומבית בחשבון ה־GitHub שלך", + "Has_more" : "יש עוד", "Have_your_own_chat" : "קח את העניינים לידיים. האפליקציה Rocket.Chat, ש", "Hide_room" : "להסתיר את החדר", "History" : "היסטוריה", @@ -101,8 +124,13 @@ "Jump_to_recent_messages" : "מעבר להודעות האחרונות", "Language" : "שפה", "Language_Version" : "גרסה אנגלית", + "Last_login" : "כניסה אחרונה", "Last_message" : "ההודעה האחרונה", "Layout" : "פריסה", + "Layout_Home_Body" : "גוף עמוד הבית", + "Layout_Home_Title" : "כותרת עמוד הבית", + "Layout_Login_Header" : "כותרת כניסה", + "Layout_Login_Terms" : "תנאי כניסה", "Layout_Privacy_Policy" : "מדיניות פרטיות", "Layout_Terms_of_Service" : "תנאי השירות", "LDAP" : "LDAP", @@ -112,18 +140,23 @@ "Leave_room" : "לעזוב את החדר", "line" : "שורה", "Load_more" : "טעינת נוספים", + "Loading..." : "בטעינה…", + "Loading_more_from_history" : "הודעות נוספות נטענות מההיסטוריה", "Loading_suggestion" : "ההצעות נטענות…", "Login" : "התחברות", "Login_with" : "כניסה עם %s", "login_with" : "או להיכנס ישירות עם", "Logout" : "יציאה", + "Mark_as_read" : "סימון כנקרא", "Members" : "חברים", "Members_List" : "רשימת חברים", "Members_placeholder" : "חברים", "Message" : "הודעה", "Message_AllowDeleting" : "לאפשר מחיקת הודעות", "Message_AllowEditing" : "לאפשר עריכת הודעות", + "Message_KeepHistory" : "שמירה על היסטוריית הודעות", "Message_MaxAllowedSize" : "גודל ההודעה המרבי המותר", + "Message_removed" : "ההודעה הוסרה", "Message_ShowDeletedStatus" : "הצגת מצב מחיקה", "Message_ShowEditedStatus" : "הצגת מצב ערוך", "Meta_language" : "שפה", @@ -152,6 +185,7 @@ "Notify_all_in_this_room" : "להודיע לכל מי שבחדר", "Online" : "מחובר", "Oops!" : "אופס", + "Opt_out_statistics" : "לא לשלוח את הסטטיסטיקה שלי ל־Rocket.Chat", "others" : "אחרים", "Password" : "ססמה", "Password_changed_successfully" : "הססמה הוחלפה בהצלחה", @@ -167,6 +201,7 @@ "Profile_saved_successfully" : "הפרופיל נשמר בהצלחה", "Proudly_developed" : "פותח בגאווה עם Meteor", "Push" : "דחיפה", + "Push_debug" : "ניפוי שגיאות", "Push_enable_gateway" : "הפעלת שער גישה", "Push_gateway" : "שער גישה", "Push_test_push" : "בדיקה", @@ -183,6 +218,7 @@ "Room" : "חדר", "Room_name_changed" : "שם החדר שונה ל: __room_name__ על ידי המשתמש __user_by__", "Room_name_changed_successfully" : "שם החדר שונה בהצלחה", + "room_user_count" : "משתמשי %s", "Rooms" : "חדרים", "SAML" : "SAML", "Save_changes" : "שמירת השינויים", @@ -201,21 +237,29 @@ "Send_confirmation_email" : "שליחת דוא״ל אימות", "Send_Message" : "שליחת הודעה", "Settings" : "הגדרות", + "Settings_updated" : "ההגדרות עודכנו", "Showing_online_users" : "מציג __total_online__ מתוך __total__ משתמשים", "Showing_results" : "

מוצגות %s תוצאות

", "Silence" : "השתקה", "since_creation" : "מאז %s", "Site_Name" : "שם האתר", "SMTP" : "SMTP", + "SMTP_Host" : "מארח ", + "SMTP_Password" : "ססמה ל־", + "SMTP_Port" : "פתחת SMTP", + "SMTP_Username" : "שם משתמש ב־SMTP", "Sound" : "שמע", "Start_of_conversation" : "התחלת השיחה", "Statistics" : "סטטיסטיקה", + "Stats_Away_Users" : "משתמשים שאינם נמצאים", + "Stats_Total_Messages" : "סך כל ההודעות", "strike" : "מחוק", "Submit" : "שליחה", "Success" : "הצליח", "The_channel_name_is_required" : "שם הערוץ נדרש", "The_field_is_required" : "השדה %s הוא חובה.", "The_server_will_restart_in_s_seconds" : "השרת יפעיל את עצמו מחדש בעוד ", + "Upload_file_question" : "להעלות קובץ?", "Use_Emojis" : "שימוש באימוג׳י", "Use_initials_avatar" : "שימוש בראשי התיבות של שם המשתמש שלך", "use_menu" : "ניתן להשתמש בתפריט הצד כדי לגשת לחדרים ולצ׳אטים שלך.", @@ -223,6 +267,8 @@ "Use_this_username" : "יש להשתמש בשם המשתמש הזה", "Use_uploaded_avatar" : "שימוש בתמונה שהועלתה", "User_added_by" : "המשתמש __user_added__ נוסף על ידי __user_by__", + "User_has_been_activated" : "המשתמש הופעל", + "User_has_been_deactivated" : "המשתמש נוטרל", "User_joined_channel" : "הצטרף לערוץ.", "User_joined_channel_female" : "הצטרפה לערוץ.", "User_joined_channel_male" : "הצטרף לערוץ.", diff --git a/i18n/hr.i18n.json b/i18n/hr.i18n.json index 6507783c957..c70aaf9488d 100644 --- a/i18n/hr.i18n.json +++ b/i18n/hr.i18n.json @@ -230,6 +230,7 @@ "Remove" : "Makni", "Remove_Admin" : "Makni Administratora", "Remove_from_room" : "Uklonite iz sobe", + "Removed" : "Uklonjeno", "Reset_password" : "Resetiraj lozinku", "Room" : "Soba", "Room_archived" : "Soba je arhivirana", diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json index f75a22a35ac..3804dedd2f5 100644 --- a/i18n/ko.i18n.json +++ b/i18n/ko.i18n.json @@ -326,6 +326,7 @@ "Remove" : "삭제", "Remove_Admin" : "관리자 권한 제거", "Remove_custom_oauth" : "사용자 정의 OAuth 제거", + "Removed" : "제거됨", "Reset_password" : "암호 재설정", "Restart" : "재시작", "Room" : "방", diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json index 15ab951691a..6a04b1d6d65 100644 --- a/i18n/nl.i18n.json +++ b/i18n/nl.i18n.json @@ -334,6 +334,7 @@ "Remove_Admin" : "Verwijder Admin", "Remove_custom_oauth" : "Verwijder aangepaste OAuth", "Remove_from_room" : "Verwijderen uit de kamer", + "Removed" : "Verwijderd", "Reset" : "Reset", "Reset_password" : "Reset Wachtwoord", "Restart" : "Herstart", diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json index 42ccf79d1fd..59a316acc47 100644 --- a/i18n/pl.i18n.json +++ b/i18n/pl.i18n.json @@ -59,7 +59,7 @@ "Accounts_RegistrationForm_SecretURL" : "Sekretny adres URL formularza rejestracyjnego", "Accounts_RegistrationRequired" : "Musisz się zarejestrować", "Accounts_RequireNameForSignUp" : "Wymagaj podana nazwy podczas rejestracji", - "Accounts_ShowFormLogin" : "Pokaż Formularz logowania", + "Accounts_ShowFormLogin" : "Pokaż formularz logowania", "Activate" : "Aktywuj", "Add_custom_oauth" : "Dodaj własne OAuth", "Add_Members" : "Dodaj członków", @@ -74,6 +74,7 @@ "API_Embed" : "Osadź", "API_EmbedDisabledFor" : "Wyłącz osadzanie dla użytkowników", "API_EmbedDisabledFor_Description" : "Lista użytkowników oddzielonych przecinkami", + "Archive" : "Archiwizuj", "are_also_typing" : "również piszą", "are_typing" : "piszą", "Are_you_sure" : "Jesteś pewny?", @@ -86,6 +87,7 @@ "Away_female" : "Zaraz wracam", "away_male" : "zaraz wracam", "Away_male" : "Zaraz wracam", + "Back_to_integrations" : "Powrót do integracji", "Back_to_login" : "Wróć do strony logowania", "bold" : "pogrubienie", "busy" : "zajęty", @@ -110,6 +112,7 @@ "Contact" : "Kontakt", "Conversation" : "Rozmowa", "Convert_Ascii_Emojis" : "Konwertuj ASCII do Emoji", + "COPY_TO_CLIPBOARD" : "SKOPIUJ DO SCHOWKA", "Create_new" : "Utwórz", "Create_new_direct_message_room" : "Nowa prywatna rozmowa", "Create_new_private_group" : "Utwórz prywatną grupę", @@ -141,6 +144,7 @@ "Enable_Desktop_Notifications" : "Włącz powiadomienia na pulpicie", "Enter_info" : "Podaj swoje dane", "Enter_to" : "Naciśnij Enter: ", + "Error" : "Błąd", "Error_changing_password" : "Błąd zmiany hasła", "Error_too_many_requests" : "Błąd, zbyt wiele żądań. Proszę zwolnij. Musisz poczekać %s sekund zanim spróbujesz ponownie", "Esc_to" : "Naciśnij Esc: ", @@ -166,13 +170,18 @@ "hours" : "godzin", "Incorrect_Password" : "Hasło jest nieprawidłowe", "inline_code" : "kod", + "Install_Extension" : "Zainstaluj rozszerzenie", "Install_FxOs" : "Zainstaluj Rocket.Chat w Firefoksie", "Install_FxOs_done" : "Świetnie! Możesz teraz włączać Rocket.Chat poprzez ikonę na ekranie głównym. Życzymy miłego korzystania z Rocket.Chat!", "Install_FxOs_error" : "Niestety, coś nie zadziałało! Wystąpił następujący błąd:", "Install_FxOs_follow_instructions" : "Potwierdź instalowanie aplikacji na twoim urządzeniu (gdy wyskoczy pytanie naciśnij przycisk \"Zainstaluj\").", + "Integration_New" : "Nowy Integracja", + "Integrations" : "Integracje", "Invalid_confirm_pass" : "Podane hasła nie są jednakowe", "Invalid_email" : "E-mail jest nieprawidłowy", + "Invalid_file_height" : "Nieprawidłowa wysokość pliku", "Invalid_file_type" : "Nieprawidłowy typ pliku", + "Invalid_file_width" : "Nieprawidłowa szerokość pliku", "Invalid_name" : "Nazwa nie może być pusta", "Invalid_pass" : "Hasło nie może być puste", "Invalid_room_name" : "%s nie jest poprawną nazwą pokoju,
użyj tylko liter, cyfr i myślników", @@ -191,6 +200,8 @@ "italics" : "kursywa", "join" : "Dołącz", "Join_the_Community" : "Dołącz do społeczności", + "Jump_to_first_unread" : "Przejdź do pierwszej nieprzeczytanej", + "Jump_to_recent_messages" : "Przejdź do ostatnich wiadomości", "Language" : "Język", "Language_Version" : "Wersja angielska", "Last_login" : "Ostatnie logowanie", @@ -270,6 +281,7 @@ "Name" : "Nazwa", "Name_cant_be_empty" : "Nazwa nie może być pusta", "Name_optional" : "Nazwa (opcjonalnie)", + "New_integration" : "Nowa integracja", "New_messages" : "Nowe wiadomości", "New_password" : "Nowe hasło", "No_channel_with_name_%s_was_found" : "Nie odnaleziono kanału o nazwie \"%s\"!", @@ -293,6 +305,7 @@ "Oops!" : "Ups", "Opt_out_statistics" : "Nie wysyłaj statystyk do autorów Rocket.Chat", "Opt_out_statistics_warning" : "Przesyłając swoje statystyki pomagasz nam określić jak instalacji Rocket.Chat jest w użyciu i jak dobrze sprawuje się nasza aplikacja, co pozwala nam ją wciąż ulepszać. Nie przesyłamy żadnych informacji o użytkownikach, a wszystkie otrzymane informacje są traktowane jako poufne. Jeśli chcesz nadal przesyłać nam statystyki, odznacz powyższe pole. Dziękujemy.", + "optional" : "opcjonalne", "others" : "inni", "Password" : "Hasło", "Password_Change_Disabled" : "Administrator czatu wyłączył możliwość zmiany haseł", @@ -329,14 +342,19 @@ "quote" : "cytat", "Recents" : "Najnowsze", "Record" : "Nagrywaj", + "Refresh_your_page_after_install_to_enable_screen_sharing" : "Odśwież stronę po instalacji, aby umożliwić dzielenie ekranu", "Register" : "Zarejestruj nowe konto", "Registration_Succeeded" : "Rejestracja zakończona", "Remember_me" : "Zapamiętaj mnie", "Remove" : "Usuń", "Remove_Admin" : "Zabierz Admina", "Remove_custom_oauth" : "Usuń własne OAuth", + "Removed" : "Usunięto", "Reset_password" : "Zresetuj hasło", + "Restart" : "Uruchom ponownie", + "Restart_the_server" : "Uruchom serwer ponownie", "Room" : "Pokój", + "Room_archived" : "Pokój zarchiwizowany", "Room_name_changed" : "Nazwa pokoju zmieniona na: __room_name__przez __user_by__", "Room_name_changed_successfully" : "Nazwa pokoju zmieniona", "Room_not_found" : "Nie odnaleziono pokoju", @@ -353,6 +371,7 @@ "SAML_Custom_Provider" : "Własny dostawca (provider)", "Save_changes" : "Zapisz zmiany", "Save_Mobile_Bandwidth" : "Oszczędzaj przepustowość", + "Screen_Share" : "Współdzielenie ekranu", "Search" : "Szukaj", "Search_Messages" : "Przeszukaj wiadomości", "Search_settings" : "Przeszukaj ustawienia", @@ -414,8 +433,11 @@ "Stop_Recording" : "Zatrzymaj nagrywanie", "strike" : "przekreślenie", "Submit" : "Prześlij", + "Success" : "Sukces", "The_field_is_required" : "Pole %s jest wymagane.", + "The_server_will_restart_in_s_seconds" : "Serwer zostanie ponownie uruchomiony za %s sekund", "True" : "Tak", + "Type_your_new_password" : "Wprowadź nowe hasło", "Unnamed" : "Anonimowy", "Unread_Rooms" : "Nieprzeczytane pokoje", "Unread_Rooms_Mode" : "Tryb nieprzeczytanych pokoi", @@ -468,6 +490,7 @@ "Yes_delete_it" : "Tak, usuń to!", "you_are_in_preview_mode_of" : "Jesteś w trybie podglądu kanału # __room_name__", "You_need_confirm_email" : "Aby się zalogować musisz potwierdzić swój adres e-mail!", + "You_need_install_an_extension_to_allow_screen_sharing" : "Musisz zainstalować rozszerzenie, aby umożliwić dzielenie ekranu", "You_will_not_be_able_to_recover" : "Nie będziesz w stanie odzyskać tej wiadomości!", "Your_entry_has_been_deleted" : "Twój wpis został usunięty.", "Your_Open_Source_solution" : "Twój własny czat Open Source" diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json index 737b5fe3a2e..e4af9ea8aba 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -66,6 +66,7 @@ "are_also_typing" : "também estão digitando", "are_typing" : "estão digitando", "Are_you_sure" : "Você tem certeza?", + "Authorize" : "Autorizar", "Auto_Load_Images" : "Auto Carregar Imagens", "Avatar_changed_successfully" : "Avatar alterado com sucesso", "Avatar_url_invalid_or_error" : "A URL fornecida é inválida ou não acessível. Por favor tente novamente, mas com uma url diferente.", @@ -317,6 +318,7 @@ "Remove" : "Remover", "Remove_Admin" : "Remover Administrador", "Remove_custom_oauth" : "Remover oauth customizado", + "Removed" : "Removido", "Reset_password" : "Resetar senha", "Restart" : "Reiniciar", "Restart_the_server" : "Reiniciar o servidor", @@ -448,11 +450,13 @@ "We_have_sent_registration_email" : "Nós lhe enviamos um e-mail para confirmar o seu registro. Se você não receber um e-mail em breve, por favor retorne e tente novamente.", "Welcome" : "Seja bem-vindo %s.", "Welcome_to_the" : "Bem-vindo ao", + "will_be_able_to" : "poderá", "With_whom" : "Com quem", "Yes" : "Sim", "Yes_clear_all" : "Sim, limpar tudo!", "Yes_delete_it" : "Sim, exclua!", "you_are_in_preview_mode_of" : "Esta é uma prévia do canal #__room_name__", + "You_are_logged_in_as" : "Vocês está logado como", "You_need_confirm_email" : "Você precisa confirmar seu email para logar!", "You_will_not_be_able_to_recover" : "Você não será capaz de desfazer!", "Your_entry_has_been_deleted" : "Sua mensagem foi excluída.", diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json index ab846688091..15571b9486e 100644 --- a/i18n/ro.i18n.json +++ b/i18n/ro.i18n.json @@ -2,6 +2,7 @@ "Access_not_authorized" : "Acces neautorizat", "Access_online_demo" : "Accesați demo on-line", "Access_Online_Demo" : "Accesati Demo Online", + "Access_Token_URL" : "Acces Token URL", "Accounts" : "Conturi", "Accounts_AllowedDomainsList" : "Listă domenii permise", "Accounts_AllowedDomainsList_Description" : "Lista separată cu virgule a domeniilor acceptate", @@ -86,6 +87,8 @@ "are_also_typing" : "tastează", "are_typing" : "tastează", "Are_you_sure" : "Sigur doriți asta?", + "Authorization_URL" : "URL de autorizare", + "Authorize" : "Autorizează", "Auto_Load_Images" : "Auto-încarcă imagini", "Avatar_changed_successfully" : "Avatar schimbat cu succes", "Avatar_URL" : "URL Avatar ", @@ -229,7 +232,9 @@ "is_typing_male" : "tastează", "italics" : "cursive", "join" : "Alăturați-vă", + "Join_audio_call" : "Intră în apel audio", "Join_the_Community" : "Intrați în comunitate", + "Join_video_call" : "Intră în apel video", "Jump_to_first_unread" : "Salt la primul mesaj necitit", "Jump_to_message" : "Salt la mesaj", "Jump_to_recent_messages" : "Salt la mesajele recente", @@ -268,10 +273,12 @@ "Loading..." : "Se încarcă...", "Loading_more_from_history" : "Se încarcă mai multe din istoric", "Loading_suggestion" : "Se încarcă sugestii...", + "Logged_out_of_other_clients_successfully" : "Delogat cu succes din alți clienți", "Login" : "Autentificare", "Login_with" : "Autentifică-te cu %s", "login_with" : "Sau conectare direct cu", "Logout" : "Ieșire", + "Logout_Others" : "Delogare din celelalte locații", "Make_Admin" : "Fă utilizator de tip Admin", "Mark_as_read" : "Marchează ca citit", "Markdown_Headers" : "Markdown Headers", @@ -313,6 +320,7 @@ "Msgs" : "Mesaje", "multi" : "multi", "Mute_user" : "Blochează mesajele utilizatorului", + "Muted" : "Silențios", "My_Account" : "Contul meu", "n_messages" : "%s mesaje", "Name" : "Nume", @@ -397,8 +405,11 @@ "Remember_me" : "Ține-mă minte", "Remove" : "Elimină", "Remove_Admin" : "Eliminați utilizator de tip Admin", + "Remove_as_moderator" : "Eliminați ca moderator", + "Remove_as_owner" : "Eliminați ca proprietar", "Remove_custom_oauth" : "Eliminați OAuth personalizat", "Remove_from_room" : "Eliminați din cameră", + "Removed" : "Eliminat", "Reset" : "Reset", "Reset_password" : "Resetează parola", "Restart" : "Repornire", @@ -446,6 +457,8 @@ "Send_invitation_email_warning" : "Pentru a trimite invitații e-mail, trebuie să configurați mai întâi setările SMTP.", "Send_Message" : "Trimite mesaj", "Send_your_JSON_payloads_to_this_URL" : "Trimiteți JSON către această adresă URL.", + "Set_as_moderator" : "Setați ca moderator", + "Set_as_owner" : "Setați ca proprietar", "Settings" : "Setări", "Settings_updated" : "Setări actualizare", "Should_be_a_URL_of_an_image" : "Ar trebui să fie o adresă URL a unei imagini.", @@ -465,7 +478,9 @@ "SMTP_Test_Button" : "Setări SMTP de testare", "SMTP_Username" : "Nume de utilizator SMTP ", "Sound" : "Sunet", + "Start_audio_call" : "Pornește apel audio", "Start_of_conversation" : "Începutul conversației", + "Start_video_call" : "Pornește apel video", "Start_with_s_for_user_or_s_for_channel_Eg_s_or_s" : "Începe cu %s pentru utilizator sau %s pentru canal. Ex: %s sau %s", "Statistics" : "Statistici", "Stats_Active_Users" : "Utilizatori activi", @@ -502,6 +517,8 @@ "The_redirectUri_is_required" : "URI de redirectare este necesar", "The_server_will_restart_in_s_seconds" : "Serverul va reporni în %s secunde", "The_setting_s_is_configured_to_s_and_you_are_accessing_from_s" : "Setarea %s e configurată să %s iar dumneavoastră accesați din %s!", + "The_user_will_be_removed_from_s" : "Utilizatorul va fi eliminat din %s", + "The_user_wont_be_able_to_type_in_s" : "Utilizatorul nu va putea să introducă text în %s", "There_are_no_integrations" : "Nu sunt integrări", "This_is_a_push_test_messsage" : "Acesta este un test de notificare Push", "True" : "Adevărat", @@ -520,11 +537,21 @@ "Use_this_username" : "Folosiți acest nume de utilizator", "Use_uploaded_avatar" : "Utilizați avatar încărcat", "Use_url_for_avatar" : "Utilizați URL pentru avatar", + "User__username__is_now_a_moderator_of__room_name_" : "Utilizator __username__  este acum un moderator al __room_name__", + "User__username__is_now_a_owner_of__room_name_" : "Utilizatorul __username__ este acum proprietar al  __room_name__", + "User__username__removed_from__room_name__moderators" : "Utilizatorul __username__ a fost eliminat din moderatorii  __room_name__", + "User__username__removed_from__room_name__owners" : "Utilizatorul __username__ scos din proprietarii __room_name__", + "User__username__was_added_as_a_moderator_by__user_by_" : "Utilizatorul __username__ a fost adăugat ca moderator de către __user_by__", + "User__username__was_added_as_a_owner_by__user_by_" : "Utilizatorul __username__ a fost adăugat ca proprietar de către __user_by__", + "User__username__was_removed_as_a_moderator_by__user_by_" : "Utilizatorul __username__ a fost scos ca moderator de către __user_by__", + "User__username__was_removed_as_a_owner_by__user_by_" : "Utilizatorul __username__ a fost eliminat ca proprietar de către __user_by__", "User_added_by" : "Utilizator __user_added__ adăugat de către __user_by__.", "User_Channels" : "Canale utilizator", "User_has_been_activated" : "Utilizatorul a fost activat", "User_has_been_deactivated" : "Utilizator a fost dezactivat", "User_has_been_deleted" : "Utilizatorul a fost șters", + "User_has_been_muted_in_s" : "Utilizator a fost oprit în %s", + "User_has_been_removed_from_s" : "Utilizator a fost eliminat din %s", "User_Info" : "Info utilizator", "User_is_no_longer_an_admin" : "Utilizatorul nu mai este Admin", "User_is_not_activated" : "Utilizatorul nu este activat", @@ -563,11 +590,15 @@ "We_have_sent_registration_email" : "V-am trimis un e-mail pentru a confirma înregistrarea dumneavoastră. Dacă nu primiți un e-mail în scurt timp, vă rugăm să reveniți și să încercați din nou.", "Welcome" : "Bun venit %s.", "Welcome_to_the" : "Bun venit în", + "will_be_able_to" : "va putea", "With_whom" : "Cu cine", "Yes" : "Da", "Yes_clear_all" : "Da, șterge toate!", "Yes_delete_it" : "Da, șterge-l!", + "Yes_mute_user" : "Da, blochează mesajele utilizatorului", + "Yes_remove_user" : "Da, eliminați utilizatorul!", "you_are_in_preview_mode_of" : "Vă aflați în modul de previzualizare a canalului #", + "You_are_logged_in_as" : "Sunteți autentificat ca ", "You_can_change_a_different_avatar_too" : "Puteți înlocui avatarul folosit pentru a posta din această integrare.", "You_can_use_an_emoji_as_avatar" : "Puteți utiliza un emoji ca avatar", "You_have_been_muted" : "Ați fost blocat și nu puteți vorbi în această cameră", diff --git a/packages/rocketchat-api/server/routes.coffee b/packages/rocketchat-api/server/routes.coffee index b7cafb17220..16a3efc14ae 100644 --- a/packages/rocketchat-api/server/routes.coffee +++ b/packages/rocketchat-api/server/routes.coffee @@ -54,74 +54,21 @@ RocketChat.API.v1.addRoute 'chat.messageExamples', authRequired: true, # Send Channel Message RocketChat.API.v1.addRoute 'chat.postMessage', authRequired: true, post: -> - channel = @bodyParams.channel - channelType = channel[0] - channel = channel.substr(1) - - switch channelType - when '#' - room = RocketChat.models.Rooms.findOne - $or: [ - {_id: channel} - {name: channel} - ] - - if not room? - return RocketChat.API.v1.failure 'invalid-channel' - - rid = room._id - if room.t is 'c' - Meteor.runAsUser @userId, -> - Meteor.call 'joinRoom', room._id - - when '@' - roomUser = RocketChat.models.Users.findOne - $or: [ - {_id: channel} - {username: channel} - ] - - if not roomUser? - return RocketChat.API.v1.failure 'invalid-channel' - - rid = [@useId, roomUser._id].sort().join('') - room = RocketChat.models.Rooms.findOne(rid) - - if not room - Meteor.runAsUser @userId, -> - Meteor.call 'createDirectMessage', roomUser.username - room = RocketChat.models.Rooms.findOne(rid) - - else - return RocketChat.API.v1.failure 'invalid-channel-type' - - message = - alias: @bodyParams.username or @bodyParams.alias - msg: _.trim(@bodyParams.text or @bodyParams.msg or '') - attachments: @bodyParams.attachments - parseUrls: false - bot: + try + @bodyParams.bot = u: @userId - groupable: false - - if @bodyParams.icon_url? or @bodyParams.avatar? - message.avatar = @bodyParams.icon_url or @bodyParams.avatar - else if @bodyParams.icon_emoji? or @bodyParams.emoji? - message.emoji = @bodyParams.icon_emoji or @bodyParams.emoji - if _.isArray message.attachments - for attachment in message.attachments - if attachment.msg - attachment.text = _.trim(attachment.msg) - delete attachment.msg + messageReturn = processWebhookMessage @bodyParams, @user - message = RocketChat.sendMessage @user, message, room, {} - - return RocketChat.API.v1.success - ts: Date.now() - channel: channel - message: message + if not messageReturn? + return RocketChat.API.v1.failure 'unknown-error' + return RocketChat.API.v1.success + ts: Date.now() + channel: messageReturn.channel + message: messageReturn.message + catch e + return RocketChat.API.v1.failure e.error # Set Channel Topic RocketChat.API.v1.addRoute 'channels.setTopic', authRequired: true, diff --git a/packages/rocketchat-assets/.npm/package/npm-shrinkwrap.json b/packages/rocketchat-assets/.npm/package/npm-shrinkwrap.json index f69e18d8fe1..78afe4f3ae8 100644 --- a/packages/rocketchat-assets/.npm/package/npm-shrinkwrap.json +++ b/packages/rocketchat-assets/.npm/package/npm-shrinkwrap.json @@ -2,6 +2,14 @@ "dependencies": { "image-size": { "version": "0.4.0" + }, + "mime-types": { + "version": "2.1.9", + "dependencies": { + "mime-db": { + "version": "1.21.0" + } + } } } } diff --git a/packages/rocketchat-assets/package.js b/packages/rocketchat-assets/package.js index ea0504827fe..7f299bb33aa 100644 --- a/packages/rocketchat-assets/package.js +++ b/packages/rocketchat-assets/package.js @@ -20,7 +20,8 @@ Package.onUse(function(api) { }); Npm.depends({ - "image-size": "0.4.0" + "image-size": "0.4.0", + "mime-types": "2.1.9" }); Package.onTest(function(api) { diff --git a/packages/rocketchat-assets/server/assets.coffee b/packages/rocketchat-assets/server/assets.coffee index acf9d258456..4c99b703d1d 100644 --- a/packages/rocketchat-assets/server/assets.coffee +++ b/packages/rocketchat-assets/server/assets.coffee @@ -1,5 +1,5 @@ sizeOf = Npm.require 'image-size' - +mime = Npm.require 'mime-types' @RocketChatAssetsInstance = new RocketChatFile.GridFS name: 'assets' @@ -11,8 +11,7 @@ assets = defaultUrl: 'favicon.ico?v=3' constraints: type: 'image' - contentType: 'image/vnd.microsoft.icon' - extention: 'ico' + extension: 'ico' width: undefined height: undefined 'favicon.svg': @@ -20,8 +19,7 @@ assets = defaultUrl: '/images/logo/icon.svg?v=3' constraints: type: 'image' - contentType: 'image/svg+xml' - extention: 'svg' + extension: 'svg' width: undefined height: undefined 'favicon_64.png': @@ -29,8 +27,7 @@ assets = defaultUrl: 'images/logo/favicon-64x64.png?v=3' constraints: type: 'image' - contentType: 'image/png' - extention: 'png' + extension: 'png' width: 64 height: 64 'favicon_96.png': @@ -38,8 +35,7 @@ assets = defaultUrl: 'images/logo/favicon-96x96.png?v=3' constraints: type: 'image' - contentType: 'image/png' - extention: 'png' + extension: 'png' width: 96 height: 96 'favicon_128.png': @@ -47,8 +43,7 @@ assets = defaultUrl: 'images/logo/favicon-128x128.png?v=3' constraints: type: 'image' - contentType: 'image/png' - extention: 'png' + extension: 'png' width: 128 height: 128 'favicon_192.png': @@ -56,8 +51,7 @@ assets = defaultUrl: 'images/logo/android-chrome-192x192.png?v=3' constraints: type: 'image' - contentType: 'image/png' - extention: 'png' + extension: 'png' width: 192 height: 192 'favicon_256.png': @@ -65,8 +59,7 @@ assets = defaultUrl: 'images/logo/favicon-256x256.png?v=3' constraints: type: 'image' - contentType: 'image/png' - extention: 'png' + extension: 'png' width: 256 height: 256 @@ -104,8 +97,8 @@ Meteor.methods if not assets[asset]? throw new Meteor.Error "Invalid_asset" - if contentType isnt assets[asset].constraints.contentType - throw new Meteor.Error "Invalid_file_type" + if mime.extension(contentType) isnt assets[asset].constraints.extension + throw new Meteor.Error "Invalid_file_type", contentType file = new Buffer(binaryContent, 'binary') diff --git a/packages/rocketchat-authorization/i18n/ar.i18n.json b/packages/rocketchat-authorization/i18n/ar.i18n.json index 243fae72104..2c88e2e3004 100644 --- a/packages/rocketchat-authorization/i18n/ar.i18n.json +++ b/packages/rocketchat-authorization/i18n/ar.i18n.json @@ -2,7 +2,6 @@ "Add_user" : "إضافة مستخدم", "Back_to_permissions" : "العودة إلى التصريحات", "Permissions" : "التصريحات", - "Removed" : "تمت اﻹزالة", "Saving" : "جاري الحفظ", "User_added" : "وأضاف العضو __user_added__.", "User_not_found" : "لم يتم العثور على المستخدم", diff --git a/packages/rocketchat-authorization/i18n/de.i18n.json b/packages/rocketchat-authorization/i18n/de.i18n.json index 1ac87a82351..18f0ee3d481 100644 --- a/packages/rocketchat-authorization/i18n/de.i18n.json +++ b/packages/rocketchat-authorization/i18n/de.i18n.json @@ -5,7 +5,6 @@ "Cannot_delete_role_because_its_in_use" : "Die Rolle kann nicht gelöscht werden, da sie gerade verwendet wird.", "New_role" : "Neue Rolle", "Permissions" : "Berechtigungen", - "Removed" : "Entfernt", "Role" : "Rolle", "Role_Editing" : "Rolle bearbeiten", "Role_removed" : "Die Rolle wurde entfernt.", diff --git a/packages/rocketchat-authorization/i18n/en.i18n.json b/packages/rocketchat-authorization/i18n/en.i18n.json index 89f68bed6c9..1a2b7b7080a 100644 --- a/packages/rocketchat-authorization/i18n/en.i18n.json +++ b/packages/rocketchat-authorization/i18n/en.i18n.json @@ -5,7 +5,6 @@ "Cannot_delete_role_because_its_in_use" : "Cannot delete role because it's in use", "New_role" : "New role", "Permissions" : "Permissions", - "Removed" : "Removed", "Role" : "Role", "Role_Editing" : "Role Editing", "Role_removed" : "Role removed", diff --git a/packages/rocketchat-authorization/i18n/fi.i18n.json b/packages/rocketchat-authorization/i18n/fi.i18n.json index 488fab46a3f..989d23b26ef 100644 --- a/packages/rocketchat-authorization/i18n/fi.i18n.json +++ b/packages/rocketchat-authorization/i18n/fi.i18n.json @@ -5,7 +5,6 @@ "Cannot_delete_role_because_its_in_use" : "Et voi poistaa roolia, koska se on käytössä", "New_role" : "Uusi rooli", "Permissions" : "Oikeudet", - "Removed" : "Poistettu", "Role" : "Rooli", "Role_Editing" : "Roolin muokkaaminen", "Role_removed" : "Rooli poistettu", diff --git a/packages/rocketchat-authorization/i18n/hr.i18n.json b/packages/rocketchat-authorization/i18n/hr.i18n.json index 22aa475a059..4bf37f94d0c 100644 --- a/packages/rocketchat-authorization/i18n/hr.i18n.json +++ b/packages/rocketchat-authorization/i18n/hr.i18n.json @@ -2,7 +2,6 @@ "Add_user" : "Dodaj korisnika", "Back_to_permissions" : "Povratak na dozvole", "Permissions" : "Dopuštenja", - "Removed" : "Uklonjeno", "Role" : "Uloga", "Saving" : "Spremanje", "There_are_no_users_in_this_role" : "Nema korisnika u toj ulozi.", diff --git a/packages/rocketchat-authorization/i18n/ko.i18n.json b/packages/rocketchat-authorization/i18n/ko.i18n.json index c0502addf31..d55848ec945 100644 --- a/packages/rocketchat-authorization/i18n/ko.i18n.json +++ b/packages/rocketchat-authorization/i18n/ko.i18n.json @@ -2,7 +2,6 @@ "Add_user" : "사용자 추가", "New_role" : "새로운 역할", "Permissions" : "권한", - "Removed" : "제거됨", "Saving" : "저장 중", "User_added" : "사용자 추가함.", "User_not_found" : "사용자를 찾을 수 없음", diff --git a/packages/rocketchat-authorization/i18n/nl.i18n.json b/packages/rocketchat-authorization/i18n/nl.i18n.json index 5e8bfb8e955..5b85b6b0984 100644 --- a/packages/rocketchat-authorization/i18n/nl.i18n.json +++ b/packages/rocketchat-authorization/i18n/nl.i18n.json @@ -5,7 +5,6 @@ "Cannot_delete_role_because_its_in_use" : "Kan rol niet verwijderen omdat het in gebruik is", "New_role" : "Nieuwe rol", "Permissions" : "Machtigingen", - "Removed" : "Verwijderd", "Role" : "Rol", "Role_Editing" : "Rol bewerken", "Role_removed" : "Rol verwijderd", diff --git a/packages/rocketchat-authorization/i18n/pl.i18n.json b/packages/rocketchat-authorization/i18n/pl.i18n.json index 03956a989db..a022338c789 100644 --- a/packages/rocketchat-authorization/i18n/pl.i18n.json +++ b/packages/rocketchat-authorization/i18n/pl.i18n.json @@ -3,10 +3,11 @@ "Back_to_permissions" : "Powrót do uprawnień", "New_role" : "Nowa rola", "Permissions" : "Uprawnienia", - "Removed" : "Usunięto", "Role" : "Rola", + "Role_Editing" : "Edycja ról", "Role_removed" : "Rola usunięta", "Saving" : "Zapisywanie", + "There_are_no_users_in_this_role" : "Ta rola nie ma przypisanych użytkowników.", "User_added" : "Użytkownik __user_added__ dodany.", "User_not_found" : "Użytkownik nie znaleziony", "User_removed" : "Użytkownik usunięty" diff --git a/packages/rocketchat-authorization/i18n/pt.i18n.json b/packages/rocketchat-authorization/i18n/pt.i18n.json index e1152abd2c3..b0bb242a6c7 100644 --- a/packages/rocketchat-authorization/i18n/pt.i18n.json +++ b/packages/rocketchat-authorization/i18n/pt.i18n.json @@ -5,7 +5,6 @@ "Cannot_delete_role_because_its_in_use" : "Não é possível remover o papel pois ele está em uso", "New_role" : "Novo papel", "Permissions" : "Permissões", - "Removed" : "Removido", "Role" : "Papel", "Role_Editing" : "Edição de Papel", "Role_removed" : "Papel Removido", diff --git a/packages/rocketchat-authorization/i18n/ro.i18n.json b/packages/rocketchat-authorization/i18n/ro.i18n.json index 10f94926353..30f9bb1036b 100644 --- a/packages/rocketchat-authorization/i18n/ro.i18n.json +++ b/packages/rocketchat-authorization/i18n/ro.i18n.json @@ -5,7 +5,6 @@ "Cannot_delete_role_because_its_in_use" : "Nu se poate șterge rol, deoarece este în uz", "New_role" : "Rol nou", "Permissions" : "Permisiuni", - "Removed" : "Eliminat", "Role" : "Rol", "Role_Editing" : "Editare rol", "Role_removed" : "Rol eliminat", diff --git a/packages/rocketchat-authorization/server/startup.coffee b/packages/rocketchat-authorization/server/startup.coffee index d9bd6b1a7b1..7febc408c37 100644 --- a/packages/rocketchat-authorization/server/startup.coffee +++ b/packages/rocketchat-authorization/server/startup.coffee @@ -55,22 +55,28 @@ Meteor.startup -> roles : ['admin']} { _id: 'edit-room', - roles : ['admin', 'moderator']} + roles : ['admin', 'moderator', 'owner']} { _id: 'edit-message', - roles : ['admin', 'moderator']} + roles : ['admin', 'moderator', 'owner']} { _id: 'delete-message', - roles : ['admin', 'moderator']} + roles : ['admin', 'moderator', 'owner']} { _id: 'remove-user', - roles : ['admin', 'moderator']} + roles : ['admin', 'moderator', 'owner']} { _id: 'mute-user', - roles : ['admin', 'moderator']} + roles : ['admin', 'moderator', 'owner']} { _id: 'ban-user', - roles : ['admin', 'moderator']} + roles : ['admin', 'moderator', 'owner']} + + { _id: 'set-moderator', + roles : ['admin', 'owner']} + + { _id: 'set-owner', + roles : ['admin']} { _id: 'create-p', roles : ['admin', 'user']} @@ -115,6 +121,7 @@ Meteor.startup -> defaultRoles = [ { name: 'admin', scope: 'Users' } { name: 'moderator', scope: 'Subscriptions' } + { name: 'owner', scope: 'Subscriptions' } { name: 'user', scope: 'Users' } { name: 'bot', scope: 'Users' } ] diff --git a/packages/rocketchat-channel-settings-mail-messages/i18n/de.i18n.json b/packages/rocketchat-channel-settings-mail-messages/i18n/de.i18n.json index f22508aa5a5..5e5f1ba3fb4 100644 --- a/packages/rocketchat-channel-settings-mail-messages/i18n/de.i18n.json +++ b/packages/rocketchat-channel-settings-mail-messages/i18n/de.i18n.json @@ -6,7 +6,7 @@ "Mail_Message_Invalid_emails" : "Sie haben eine oder mehrere ungültige E-Mail-Adressen angegeben: %s", "Mail_Message_Missing_to" : "Sie müssen einen/mehrere Benutzer auswählen oder einen/mehrere E-Mail-Adressen durch Kommata getrennt angeben.", "Mail_Message_No_messages_selected_select_all" : "Sie haben keine Nachrichten ausgewählt. Möchten Sie alle sichtbaren Nachrichten auswählen?", - "Mail_Messages" : "E-Mail-Nachrichten", + "Mail_Messages" : "Nachrichten per E-Mail senden", "Mail_Messages_Instructions" : "Wählen Sie aus, welche Nachrichten Sie per E-Mail senden möchten, indem Sie die Nachrichten anklicken. ", "Mail_Messages_Subject" : "Hier ist ein ausgewählter Teil aus %s Nachrichten", "Sending" : "Senden...", diff --git a/packages/rocketchat-channel-settings-mail-messages/i18n/pl.i18n.json b/packages/rocketchat-channel-settings-mail-messages/i18n/pl.i18n.json index 6f31cf5a2e6..ba59cee84fe 100644 --- a/packages/rocketchat-channel-settings-mail-messages/i18n/pl.i18n.json +++ b/packages/rocketchat-channel-settings-mail-messages/i18n/pl.i18n.json @@ -1 +1,4 @@ -{ } \ No newline at end of file +{ + "Choose_messages" : "Wybierz wiadomości", + "Mail_Messages" : "Wysyłanie wiadomości przez email" +} \ No newline at end of file diff --git a/packages/rocketchat-channel-settings-mail-messages/server/methods/mailMessages.coffee b/packages/rocketchat-channel-settings-mail-messages/server/methods/mailMessages.coffee index 446df06f288..f1c07f4bb78 100644 --- a/packages/rocketchat-channel-settings-mail-messages/server/methods/mailMessages.coffee +++ b/packages/rocketchat-channel-settings-mail-messages/server/methods/mailMessages.coffee @@ -32,6 +32,8 @@ Meteor.methods name = user.name email = user.emails?[0]?.address + data.language = data.language.split('-').shift().toLowerCase() + if data.language isnt 'en' localeFn = Meteor.call 'loadLocale', data.language if localeFn diff --git a/packages/rocketchat-channel-settings/i18n/pl.i18n.json b/packages/rocketchat-channel-settings/i18n/pl.i18n.json index 1258e187316..8200c8c1f59 100644 --- a/packages/rocketchat-channel-settings/i18n/pl.i18n.json +++ b/packages/rocketchat-channel-settings/i18n/pl.i18n.json @@ -1,7 +1,12 @@ { + "Archive_Unarchive" : "Przeniesienie do archiwum", "Channel" : "Kanał", "Private_Group" : "Grupa Prywatna", "Save" : "Zapisz", + "Topic" : "Temat", + "Type" : "Rodzaj", + "Room_Info" : "Ustawienia pokoju", "room_changed_privacy" : "__user_by__ zmienił(a) rodzaj pokoju na: __room_type__", - "room_changed_topic" : "__user_by__ zmienił(a) temat pokoju na: __room_topic__" + "room_changed_topic" : "__user_by__ zmienił(a) temat pokoju na: __room_topic__", + "Room_topic_changed_successfully" : "Temat pokoju został zmieniony" } \ No newline at end of file diff --git a/packages/rocketchat-cors/cors.coffee b/packages/rocketchat-cors/cors.coffee index 38e411e857b..b7b557fbb82 100644 --- a/packages/rocketchat-cors/cors.coffee +++ b/packages/rocketchat-cors/cors.coffee @@ -47,3 +47,42 @@ WebAppInternals._staticFilesMiddleware = (staticFiles, req, res, next) -> res.setHeader("X-Rocket-Chat-Version", VERSION) res.setHeader("Access-Control-Expose-Headers", "X-Rocket-Chat-Version") _staticFilesMiddleware(staticFiles, req, res, next) + + +url = Npm.require("url") + +httpServer = WebApp.httpServer +oldHttpServerListeners = httpServer.listeners('request').slice(0) +httpServer.removeAllListeners('request') + +httpServer.addListener 'request', (req, res) -> + args = arguments + next = -> + for oldListener in oldHttpServerListeners + oldListener.apply(httpServer, args) + + if RocketChat.settings.get('Force_SSL') isnt true + next() + return + + remoteAddress = req.connection.remoteAddress or req.socket.remoteAddress + + localhostRegexp = /^\s*(127\.0\.0\.1|::1)\s*$/ + localhostTest = (x) -> + return localhostRegexp.test(x) + + isLocal = localhostRegexp.test(remoteAddress) and (not req.headers['x-forwarded-for'] or _.all(req.headers['x-forwarded-for'].split(','), localhostTest)) + + isSsl = req.connection.pair or (req.headers['x-forwarded-proto'] and req.headers['x-forwarded-proto'].indexOf('https') isnt -1) + + if not isLocal and not isSsl + host = req.headers['host'] or url.parse(Meteor.absoluteUrl()).hostname + + host = host.replace(/:\d+$/, '') + + res.writeHead 302, + 'Location': 'https://' + host + req.url + res.end() + return + + next() diff --git a/packages/rocketchat-integrations/package.js b/packages/rocketchat-integrations/package.js index dc2b48f48e4..f5ce2880e3e 100644 --- a/packages/rocketchat-integrations/package.js +++ b/packages/rocketchat-integrations/package.js @@ -14,6 +14,7 @@ Package.onUse(function(api) { api.use('simple:highlight.js'); api.use('rocketchat:lib'); api.use('rocketchat:authorization'); + api.use('rocketchat:api'); api.use('kadira:flow-router', 'client'); api.use('templating', 'client'); @@ -56,6 +57,8 @@ Package.onUse(function(api) { api.addFiles('server/triggers.coffee', 'server'); + api.addFiles('server/processWebhookMessage.js', 'server'); + var _ = Npm.require('underscore'); var fs = Npm.require('fs'); tapi18nFiles = _.compact(_.map(fs.readdirSync('packages/rocketchat-integrations/i18n'), function(filename) { diff --git a/packages/rocketchat-integrations/server/api/api.coffee b/packages/rocketchat-integrations/server/api/api.coffee index 54e564e7264..98e926b07de 100644 --- a/packages/rocketchat-integrations/server/api/api.coffee +++ b/packages/rocketchat-integrations/server/api/api.coffee @@ -22,89 +22,24 @@ Api.addRoute ':integrationId/:userId/:token', authRequired: true, integration = RocketChat.models.Integrations.findOne(@urlParams.integrationId) user = RocketChat.models.Users.findOne(@userId) - channel = @bodyParams.channel or integration.channel - channelType = channel[0] - channel = channel.substr(1) - - switch channelType - when '#' - room = RocketChat.models.Rooms.findOne - $or: [ - {_id: channel} - {name: channel} - ] - - if not room? - return {} = - statusCode: 400 - body: - success: false - error: 'invalid-channel' - - rid = room._id - if room.t is 'c' - Meteor.runAsUser user._id, -> - Meteor.call 'joinRoom', room._id - - when '@' - roomUser = RocketChat.models.Users.findOne - $or: [ - {_id: channel} - {username: channel} - ] - - if not roomUser? - return {} = - statusCode: 400 - body: - success: false - error: 'invalid-channel' - - rid = [user._id, roomUser._id].sort().join('') - room = RocketChat.models.Rooms.findOne(rid) - - if not room - Meteor.runAsUser user._id, -> - Meteor.call 'createDirectMessage', roomUser.username - room = RocketChat.models.Rooms.findOne(rid) - - else - return {} = - statusCode: 400 - body: - success: false - error: 'invalid-channel-type' - - message = - alias: @bodyParams.username or @bodyParams.alias or integration.alias - msg: _.trim(@bodyParams.text or @bodyParams.msg or '') - attachments: @bodyParams.attachments - parseUrls: false - bot: - i: integration._id - groupable: false - - if @bodyParams.icon_url? or @bodyParams.avatar? - message.avatar = @bodyParams.icon_url or @bodyParams.avatar - else if @bodyParams.icon_emoji? or @bodyParams.emoji? - message.emoji = @bodyParams.icon_emoji or @bodyParams.emoji - else if integration.avatar? - message.avatar = integration.avatar - else if integration.emoji? - message.emoji = integration.emoji - - if _.isArray message.attachments - for attachment in message.attachments - if attachment.msg - attachment.text = _.trim(attachment.msg) - delete attachment.msg - - RocketChat.sendMessage user, message, room, {} + @bodyParams.bot = + i: integration._id - return {} = - statusCode: 200 - body: - success: true + defaultValues = + channel: integration.channel + alias: integration.alias + avatar: integration.avatar + emoji: integration.emoji + + try + message = processWebhookMessage @bodyParams, user, defaultValues + + if not message? + return RocketChat.API.v1.failure 'unknown-error' + + return RocketChat.API.v1.success() + catch e + return RocketChat.API.v1.failure e.error createIntegration = (options, user) -> diff --git a/packages/rocketchat-integrations/server/methods/outgoing/updateOutgoingIntegration.coffee b/packages/rocketchat-integrations/server/methods/outgoing/updateOutgoingIntegration.coffee index 26610e89785..2e2d7afb2d1 100644 --- a/packages/rocketchat-integrations/server/methods/outgoing/updateOutgoingIntegration.coffee +++ b/packages/rocketchat-integrations/server/methods/outgoing/updateOutgoingIntegration.coffee @@ -17,7 +17,12 @@ Meteor.methods if integration.urls.length is 0 throw new Meteor.Error 'invalid_urls', '[methods] updateOutgoingIntegration -> urls is required' - if integration.channel?.trim() isnt '' and integration.channel[0] not in ['@', '#'] + if _.isString(integration.channel) + integration.channel = integration.channel.trim() + else + integration.channel = undefined + + if integration.channel? and integration.channel[0] not in ['@', '#'] throw new Meteor.Error 'invalid_channel', '[methods] updateOutgoingIntegration -> channel should start with # or @' if not integration.token? or integration.token?.trim() is '' @@ -36,7 +41,7 @@ Meteor.methods throw new Meteor.Error 'invalid_integration', '[methods] updateOutgoingIntegration -> integration not found' - if integration.channel?.trim() isnt '' + if integration.channel? record = undefined channelType = integration.channel[0] channel = integration.channel.substr(1) diff --git a/packages/rocketchat-integrations/server/processWebhookMessage.js b/packages/rocketchat-integrations/server/processWebhookMessage.js new file mode 100644 index 00000000000..ee684f4d59a --- /dev/null +++ b/packages/rocketchat-integrations/server/processWebhookMessage.js @@ -0,0 +1,102 @@ +this.processWebhookMessage = function(messageObj, user, defaultValues) { + var attachment, channel, channelType, i, len, message, ref, rid, room, roomUser; + + if (!defaultValues) { + defaultValues = { + channel: '', + alias: '', + avatar: '', + emoji: '' + }; + } + + channel = messageObj.channel || defaultValues.channel; + + channelType = channel[0]; + + channel = channel.substr(1); + + switch (channelType) { + case '#': + room = RocketChat.models.Rooms.findOne({ + $or: [ + { + _id: channel + }, { + name: channel + } + ] + }); + if (room == null) { + throw new Meteor.Error('invalid-channel'); + } + rid = room._id; + if (room.t === 'c') { + Meteor.runAsUser(user._id, function() { + return Meteor.call('joinRoom', room._id); + }); + } + break; + case '@': + roomUser = RocketChat.models.Users.findOne({ + $or: [ + { + _id: channel + }, { + username: channel + } + ] + }); + if (roomUser == null) { + throw new Meteor.Error('invalid-channel'); + } + rid = [user._id, roomUser._id].sort().join(''); + room = RocketChat.models.Rooms.findOne(rid); + if (!room) { + Meteor.runAsUser(user._id, function() { + Meteor.call('createDirectMessage', roomUser.username); + return room = RocketChat.models.Rooms.findOne(rid); + }); + } + break; + default: + throw new Meteor.Error('invalid-channel-type'); + } + + message = { + alias: messageObj.username || messageObj.alias || defaultValues.alias, + msg: _.trim(messageObj.text || messageObj.msg || ''), + attachments: messageObj.attachments, + parseUrls: false, + bot: messageObj.bot, + groupable: false + }; + + if ((messageObj.icon_url != null) || (messageObj.avatar != null)) { + message.avatar = messageObj.icon_url || messageObj.avatar; + } else if ((messageObj.icon_emoji != null) || (messageObj.emoji != null)) { + message.emoji = messageObj.icon_emoji || messageObj.emoji; + } else if (defaultValues.avatar != null) { + message.avatar = defaultValues.avatar; + } else if (defaultValues.emoji != null) { + message.emoji = defaultValues.emoji; + } + + if (_.isArray(message.attachments)) { + ref = message.attachments; + for (i = 0, len = ref.length; i < len; i++) { + attachment = ref[i]; + if (attachment.msg) { + attachment.text = _.trim(attachment.msg); + delete attachment.msg; + } + } + } + + var messageReturn = RocketChat.sendMessage(user, message, room, {}); + + return { + channel: channel, + message: messageReturn + } +}; diff --git a/packages/rocketchat-integrations/server/triggers.coffee b/packages/rocketchat-integrations/server/triggers.coffee index 6c815d45758..72fae25524a 100644 --- a/packages/rocketchat-integrations/server/triggers.coffee +++ b/packages/rocketchat-integrations/server/triggers.coffee @@ -61,9 +61,28 @@ ExecuteTriggerUrl = (url, trigger, message, room, tries=0) -> , Math.pow(10, tries+2) return - # TODO process return and insert message if necessary + # process outgoing webhook response as a new message + else if result?.statusCode is 200 and (result.data?.text? or result.data?.attachments?) + user = RocketChat.models.Users.findOneByUsername(trigger.username) + result.data.bot = + i: trigger._id + defaultValues = + channel: trigger.channel + alias: trigger.alias + avatar: trigger.avatar + emoji: trigger.emoji + + try + message = processWebhookMessage result.data, user, defaultValues + + if not message? + return RocketChat.API.v1.failure 'unknown-error' + + return RocketChat.API.v1.success() + catch e + return RocketChat.API.v1.failure e.error ExecuteTrigger = (trigger, message, room) -> for url in trigger.urls diff --git a/packages/rocketchat-ldap/config_server.coffee b/packages/rocketchat-ldap/config_server.coffee index 1964aaf48e3..66e79c07854 100644 --- a/packages/rocketchat-ldap/config_server.coffee +++ b/packages/rocketchat-ldap/config_server.coffee @@ -2,13 +2,22 @@ MeteorWrapperLdapjs = Npm.require 'ldapjs' Meteor.startup -> RocketChat.settings.addGroup 'LDAP', -> + enableQuery = {_id: 'LDAP_Enable', value: true} + enableTLSQuery = [ + {_id: 'LDAP_Enable', value: true} + {_id: 'LDAP_TLS', value: true} + ] + @add 'LDAP_Enable', false, { type: 'boolean', public: true } - @add 'LDAP_Url', 'ldap://', { type: 'string' , enableQuery: {_id: 'LDAP_Enable', value: true} } - @add 'LDAP_Port', '389', { type: 'string' , enableQuery: {_id: 'LDAP_Enable', value: true} } - @add 'LDAP_DN', '', { type: 'string' , public: true, enableQuery: {_id: 'LDAP_Enable', value: true} } - @add 'LDAP_Bind_Search', '', { type: 'string' , enableQuery: {_id: 'LDAP_Enable', value: true} } - @add 'LDAP_Sync_User_Data', false, { type: 'boolean' , enableQuery: {_id: 'LDAP_Enable', value: true} } - @add 'LDAP_Sync_User_Data_FieldMap', '{"cn":"name", "mail":"email"}', { type: 'string', enableQuery: {_id: 'LDAP_Enable', value: true} } + @add 'LDAP_TLS', false, { type: 'boolean', enableQuery: enableQuery } + @add 'LDAP_CA_Cert', '', { type: 'string', multiline: true, enableQuery: enableTLSQuery } + @add 'LDAP_Reject_Unauthorized', true, { type: 'boolean', enableQuery: enableTLSQuery } + @add 'LDAP_Url', 'ldap://', { type: 'string' , enableQuery: enableQuery } + @add 'LDAP_Port', '389', { type: 'string' , enableQuery: enableQuery } + @add 'LDAP_DN', '', { type: 'string' , public: true, enableQuery: enableQuery } + @add 'LDAP_Bind_Search', '', { type: 'string' , enableQuery: enableQuery } + @add 'LDAP_Sync_User_Data', false, { type: 'boolean' , enableQuery: enableQuery } + @add 'LDAP_Sync_User_Data_FieldMap', '{"cn":"name", "mail":"email"}', { type: 'string', enableQuery: enableQuery } timer = undefined @@ -20,11 +29,17 @@ updateServices = -> if enable? console.log "Enabling LDAP".blue + LDAP_DEFAULTS.TLS = RocketChat.settings.get 'LDAP_TLS' + LDAP_DEFAULTS.CACert = RocketChat.settings.get 'LDAP_CA_Cert' + LDAP_DEFAULTS.rejectUnauthorized = RocketChat.settings.get 'LDAP_Reject_Unauthorized' LDAP_DEFAULTS.url = RocketChat.settings.get 'LDAP_Url' LDAP_DEFAULTS.port = RocketChat.settings.get 'LDAP_Port' if RocketChat.settings.get 'LDAP_Port' LDAP_DEFAULTS.dn = RocketChat.settings.get 'LDAP_DN' or false LDAP_DEFAULTS.bindSearch = RocketChat.settings.get 'LDAP_Bind_Search' or '' else + LDAP_DEFAULTS.TLS = undefined + LDAP_DEFAULTS.CACert = undefined + LDAP_DEFAULTS.rejectUnauthorized = undefined LDAP_DEFAULTS.url = undefined LDAP_DEFAULTS.port = undefined LDAP_DEFAULTS.dn = undefined diff --git a/packages/rocketchat-ldap/ldap_server.js b/packages/rocketchat-ldap/ldap_server.js index 197c21a9f98..7cf5ff8c44f 100644 --- a/packages/rocketchat-ldap/ldap_server.js +++ b/packages/rocketchat-ldap/ldap_server.js @@ -11,6 +11,7 @@ var slug = function (text) { // e.g. "uid=someuser,cn=users,dc=somevalue" LDAP_DEFAULTS = { url: false, + TLS: false, port: '389', dn: false, createNewUser: true, @@ -42,6 +43,25 @@ var LDAP = function(options) { this.ldapjs = MeteorWrapperLdapjs; }; + +function startTLS(client) { + var opts = { + rejectUnauthorized: LDAP_DEFAULTS.rejectUnauthorized + }; + + if ( LDAP_DEFAULTS.CACert && LDAP_DEFAULTS.CACert != '' ){ + opts.ca = [LDAP_DEFAULTS.CACert]; + } + + var starttlsSync = Meteor.wrapAsync(client.starttls); + + var res = starttlsSync(opts , null); + if (res) { + console.log("StartTLS Result: " + res); + } +} + + /** * Attempt to bind (authenticate) ldap * and perform a dn search if specified @@ -56,22 +76,29 @@ LDAP.prototype.ldapCheck = function(options) { options = options || {}; - if (options.hasOwnProperty('username') && options.hasOwnProperty('ldapPass')) { + if (!options.hasOwnProperty('username') || !options.hasOwnProperty('ldapPass')) { + throw new Meteor.Error(403, "Missing LDAP Auth Parameter"); + } - var ldapAsyncFut = new Future(); + var ldapAsyncFut = new Future(); - // Create ldap client - var fullUrl = self.options.url + ':' + self.options.port; - var client = self.ldapjs.createClient({ - url: fullUrl, - reconnect: false - }); + // Create ldap client + var fullUrl = self.options.url + ':' + self.options.port; + var client = self.ldapjs.createClient({ + url: fullUrl, + reconnect: false + }); - client.on('error', function() { - console.log('Client Error:', arguments); - }); + if (LDAP_DEFAULTS.TLS == true) { + startTLS(client); + } + + client.on('error', function(e) { + ldapAsyncFut.return({error: e}); + }); + client.on('connect', function(e) { var bindSync = Meteor.wrapAsync(client.bind.bind(client)); // Slide @xyz.whatever from username if it was passed in @@ -195,13 +222,9 @@ LDAP.prototype.ldapCheck = function(options) { } else { bind(self.options.dn); } + }); - return ldapAsyncFut.wait(); - - } else { - throw new Meteor.Error(403, "Missing LDAP Auth Parameter"); - } - + return ldapAsyncFut.wait(); }; @@ -210,6 +233,7 @@ LDAP.prototype.ldapCheck = function(options) { // Meteor.loginWithLDAP on client side // @param {Object} loginRequest will consist of username, ldapPass, ldap, and ldapOptions Accounts.registerLoginHandler("ldap", function(loginRequest) { + var self = this; // If "ldap" isn't set in loginRequest object, // then this isn't the proper handler (return undefined) if (!loginRequest.ldap) { @@ -232,7 +256,24 @@ Accounts.registerLoginHandler("ldap", function(loginRequest) { var ldapResponse = ldapObj.ldapCheck(loginRequest); if (ldapResponse.error) { - throw new Meteor.Error("LDAP-login-error", ldapResponse.error); + console.log(ldapResponse.error); + console.log('[LDAP] Falling back to standard account base'); + if (typeof loginRequest.username === 'string') + if (loginRequest.username.indexOf('@') === -1) + loginRequest.username = {username: loginRequest.username}; + else + loginRequest.username = {email: loginRequest.username}; + + loginRequest = { + user: loginRequest.username, + password: { + digest: SHA256(loginRequest.ldapPass), + algorithm: "sha-256" + } + } + + return Accounts._runLoginHandlers(self, loginRequest); + // throw new Meteor.Error("LDAP-login-error", ldapResponse.error); } else { // Set initial userId and token vals var userId = null; diff --git a/packages/rocketchat-ldap/package.js b/packages/rocketchat-ldap/package.js index 7c6b23a79d0..38720bb37dd 100644 --- a/packages/rocketchat-ldap/package.js +++ b/packages/rocketchat-ldap/package.js @@ -26,6 +26,7 @@ Package.onUse(function(api) { api.use('tap:i18n'); api.use('yasaricli:slugify'); api.use('coffeescript'); + api.use('sha'); // Client api.use('templating', 'client'); // Server diff --git a/packages/rocketchat-lib/client/lib/openRoom.coffee b/packages/rocketchat-lib/client/lib/openRoom.coffee index 0d3a594583c..7e74d9fd949 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.coffee +++ b/packages/rocketchat-lib/client/lib/openRoom.coffee @@ -27,6 +27,7 @@ currentTracker = undefined BlazeLayout.render 'main', {center: 'roomNotFound'} return + $('.rocket-loader').remove(); mainNode = document.querySelector('.main-content') if mainNode? for child in mainNode.children diff --git a/packages/rocketchat-lib/client/lib/settings.coffee b/packages/rocketchat-lib/client/lib/settings.coffee index 2e96a93d50e..7a19eb1d3fb 100644 --- a/packages/rocketchat-lib/client/lib/settings.coffee +++ b/packages/rocketchat-lib/client/lib/settings.coffee @@ -38,7 +38,7 @@ Meteor.startup -> if not siteUrl or not Meteor.userId()? return - if RocketChat.authz.hasRole(Meteor.userId(), 'admin') is false + if RocketChat.authz.hasRole(Meteor.userId(), 'admin') is false or Meteor.settings.public.sandstorm return c.stop() siteUrl = siteUrl.replace /\/$/, '' diff --git a/packages/rocketchat-lib/lib/MessageTypes.coffee b/packages/rocketchat-lib/lib/MessageTypes.coffee index 3c6f3cea63a..58f651d4586 100644 --- a/packages/rocketchat-lib/lib/MessageTypes.coffee +++ b/packages/rocketchat-lib/lib/MessageTypes.coffee @@ -82,3 +82,31 @@ Meteor.startup -> message: 'User_unmuted_by' data: (message) -> return { user_unmuted: message.msg, user_by: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'new-moderator' + system: true + message: 'User__username__was_added_as_a_moderator_by__user_by_' + data: (message) -> + return { username: message.msg, user_by: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'moderator-removed' + system: true + message: 'User__username__was_removed_as_a_moderator_by__user_by_' + data: (message) -> + return { username: message.msg, user_by: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'new-owner' + system: true + message: 'User__username__was_added_as_a_owner_by__user_by_' + data: (message) -> + return { username: message.msg, user_by: message.u.username } + + RocketChat.MessageTypes.registerType + id: 'owner-removed' + system: true + message: 'User__username__was_removed_as_a_owner_by__user_by_' + data: (message) -> + return { username: message.msg, user_by: message.u.username } diff --git a/packages/rocketchat-lib/server/functions/sendMessage.coffee b/packages/rocketchat-lib/server/functions/sendMessage.coffee index 6b14009c97c..fa30388ff35 100644 --- a/packages/rocketchat-lib/server/functions/sendMessage.coffee +++ b/packages/rocketchat-lib/server/functions/sendMessage.coffee @@ -11,7 +11,7 @@ RocketChat.sendMessage = (user, message, room, options) -> message.rid = room._id if message.parseUrls isnt false - if urls = message.msg.match /([A-Za-z]{3,9}):\/\/([-;:&=\+\$,\w]+@{1})?([-A-Za-z0-9\.]+)+:?(\d+)?((\/[-\+=!:~%\/\.@\,\w]+)?\??([-\+=&!:;%@\/\.\,\w]+)?#?([\w]+)?)?/g + if urls = message.msg.match /([A-Za-z]{3,9}):\/\/([-;:&=\+\$,\w]+@{1})?([-A-Za-z0-9\.]+)+:?(\d+)?((\/[-\+=!:~%\/\.@\,\w]+)?\??([-\+=&!:;%@\/\.\,\w]+)?#?([^\s]+)?)?/g message.urls = urls.map (url) -> url: url message = RocketChat.callbacks.run 'beforeSaveMessage', message diff --git a/packages/rocketchat-lib/server/functions/settings.coffee b/packages/rocketchat-lib/server/functions/settings.coffee index fc9df927563..81b4099fe66 100644 --- a/packages/rocketchat-lib/server/functions/settings.coffee +++ b/packages/rocketchat-lib/server/functions/settings.coffee @@ -18,6 +18,9 @@ RocketChat.settings.add = (_id, value, options = {}) -> options.hidden = false options.sorter ?= RocketChat.settings._sorter++ + if options.enableQuery? + options.enableQuery = JSON.stringify options.enableQuery + if process?.env?[_id]? value = process.env[_id] options.processEnvValue = value diff --git a/packages/rocketchat-lib/server/models/Messages.coffee b/packages/rocketchat-lib/server/models/Messages.coffee index 3c9375f075b..c7e7bf5ba00 100644 --- a/packages/rocketchat-lib/server/models/Messages.coffee +++ b/packages/rocketchat-lib/server/models/Messages.coffee @@ -294,6 +294,22 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base message = user.username return @createWithTypeRoomIdMessageAndUser 'user-unmuted', roomId, message, user, extraData + createNewModeratorWithRoomIdAndUser: (roomId, user, extraData) -> + message = user.username + return @createWithTypeRoomIdMessageAndUser 'new-moderator', roomId, message, user, extraData + + createModeratorRemovedWithRoomIdAndUser: (roomId, user, extraData) -> + message = user.username + return @createWithTypeRoomIdMessageAndUser 'moderator-removed', roomId, message, user, extraData + + createNewOwnerWithRoomIdAndUser: (roomId, user, extraData) -> + message = user.username + return @createWithTypeRoomIdMessageAndUser 'new-owner', roomId, message, user, extraData + + createOwnerRemovedWithRoomIdAndUser: (roomId, user, extraData) -> + message = user.username + return @createWithTypeRoomIdMessageAndUser 'owner-removed', roomId, message, user, extraData + # REMOVE removeById: (_id) -> query = diff --git a/packages/rocketchat-lib/server/models/Subscriptions.coffee b/packages/rocketchat-lib/server/models/Subscriptions.coffee index 77c697dd41a..5a324807120 100644 --- a/packages/rocketchat-lib/server/models/Subscriptions.coffee +++ b/packages/rocketchat-lib/server/models/Subscriptions.coffee @@ -25,6 +25,15 @@ RocketChat.models.Subscriptions = new class extends RocketChat.models._Base return @find query, options + # FIND + findByRoomIdAndRoles: (roomId, roles, options) -> + roles = [].concat roles + query = + "rid": roomId + "roles": { $in: roles } + + return @find query, options + getLastSeen: (options = {}) -> query = { ls: { $exists: 1 } } options.sort = { ls: -1 } @@ -210,6 +219,26 @@ RocketChat.models.Subscriptions = new class extends RocketChat.models._Base return @update query, update, { multi: true } + addRoleById: (_id, role) -> + query = + _id: _id + + update = + $addToSet: + roles: role + + return @update query, update + + removeRoleById: (_id, role) -> + query = + _id: _id + + update = + $pull: + roles: role + + return @update query, update + # INSERT createWithRoomAndUser: (room, user, extraData) -> subscription = diff --git a/packages/rocketchat-lib/server/startup/settings.coffee b/packages/rocketchat-lib/server/startup/settings.coffee index 36d5778fee5..4f3bf96d8cb 100644 --- a/packages/rocketchat-lib/server/startup/settings.coffee +++ b/packages/rocketchat-lib/server/startup/settings.coffee @@ -77,6 +77,7 @@ RocketChat.settings.addGroup 'General', -> @add 'Allow_Invalid_SelfSigned_Certs', false, { type: 'boolean' } @add 'Disable_Favorite_Rooms', false, { type: 'boolean' } @add 'CDN_PREFIX', '', { type: 'string' } + @add 'Force_SSL', false, { type: 'boolean', public: true } @add 'Debug_Level', 'error', { type: 'select', values: [ { key: 'error', i18nLabel: 'Only_errors' }, { key: 'debug', i18nLabel: 'All_logs' } ] } @add 'Restart', 'restart_server', { type: 'action', actionText: 'Restart_the_server' } diff --git a/packages/rocketchat-lib/server/startup/settingsOnLoadSMTP.coffee b/packages/rocketchat-lib/server/startup/settingsOnLoadSMTP.coffee index 8047dd24417..67dfa65a82d 100644 --- a/packages/rocketchat-lib/server/startup/settingsOnLoadSMTP.coffee +++ b/packages/rocketchat-lib/server/startup/settingsOnLoadSMTP.coffee @@ -1,7 +1,10 @@ buildMailURL = _.debounce -> console.log 'Updating process.env.MAIL_URL' - if RocketChat.settings.get('SMTP_Host') and RocketChat.settings.get('SMTP_Username') and RocketChat.settings.get('SMTP_Password') - process.env.MAIL_URL = "smtp://" + encodeURIComponent(RocketChat.settings.get('SMTP_Username')) + ':' + encodeURIComponent(RocketChat.settings.get('SMTP_Password')) + '@' + encodeURIComponent(RocketChat.settings.get('SMTP_Host')) + if RocketChat.settings.get('SMTP_Host') + process.env.MAIL_URL = "smtp://" + if RocketChat.settings.get('SMTP_Username') and RocketChat.settings.get('SMTP_Password') + process.env.MAIL_URL += encodeURIComponent(RocketChat.settings.get('SMTP_Username')) + ':' + encodeURIComponent(RocketChat.settings.get('SMTP_Password')) + '@' + process.env.MAIL_URL += encodeURIComponent(RocketChat.settings.get('SMTP_Host')) if RocketChat.settings.get('SMTP_Port') process.env.MAIL_URL += ':' + parseInt(RocketChat.settings.get('SMTP_Port')) , 500 diff --git a/packages/rocketchat-livechat/app/client/views/message.coffee b/packages/rocketchat-livechat/app/client/views/message.coffee index 1b49884bd82..87cc3d9164e 100644 --- a/packages/rocketchat-livechat/app/client/views/message.coffee +++ b/packages/rocketchat-livechat/app/client/views/message.coffee @@ -4,7 +4,7 @@ Template.message.helpers return 'own' if this.u?._id is Meteor.userId() time: -> - return moment(this.ts).format('HH:mm') + return moment(this.ts).format('LT') date: -> return moment(this.ts).format('LL') diff --git a/packages/rocketchat-livechat/app/i18n/pl.i18n.json b/packages/rocketchat-livechat/app/i18n/pl.i18n.json index 0c082b62370..f3e5e78e699 100644 --- a/packages/rocketchat-livechat/app/i18n/pl.i18n.json +++ b/packages/rocketchat-livechat/app/i18n/pl.i18n.json @@ -1,3 +1,5 @@ { - "Start_Chat" : "Rozpocznij czat" + "Skip" : "Pomiń", + "Start_Chat" : "Rozpocznij czat", + "Survey" : "Ankieta" } \ No newline at end of file diff --git a/packages/rocketchat-livechat/client/views/app/livechatAppearance.js b/packages/rocketchat-livechat/client/views/app/livechatAppearance.js index a8415b6be65..94e56f6f9ca 100644 --- a/packages/rocketchat-livechat/client/views/app/livechatAppearance.js +++ b/packages/rocketchat-livechat/client/views/app/livechatAppearance.js @@ -18,7 +18,7 @@ Template.livechatAppearance.helpers({ u: { username: 'guest' }, - time: moment(this.ts).format('HH:mm'), + time: moment(this.ts).format('LT'), date: moment(this.ts).format('LL'), body: 'Hello', sequential: null @@ -28,7 +28,7 @@ Template.livechatAppearance.helpers({ u: { username: 'rocketchat-agent' }, - time: moment(this.ts).format('HH:mm'), + time: moment(this.ts).format('LT'), date: moment(this.ts).format('LL'), body: 'Hey, what can I help you with?', sequential: null @@ -38,7 +38,7 @@ Template.livechatAppearance.helpers({ u: { username: 'guest' }, - time: moment(this.ts).format('HH:mm'), + time: moment(this.ts).format('LT'), date: moment(this.ts).format('LL'), body: 'I\'m looking for informations about your product.', sequential: null @@ -48,7 +48,7 @@ Template.livechatAppearance.helpers({ u: { username: 'rocketchat-agent' }, - time: moment(this.ts).format('HH:mm'), + time: moment(this.ts).format('LT'), date: moment(this.ts).format('LL'), body: 'Our product is open source, you can do what you want with it! =D', sequential: null @@ -58,7 +58,7 @@ Template.livechatAppearance.helpers({ u: { username: 'guest' }, - time: moment(this.ts).format('HH:mm'), + time: moment(this.ts).format('LT'), date: moment(this.ts).format('LL'), body: 'Yay, thanks. That\'s awesome.', sequential: null @@ -68,7 +68,7 @@ Template.livechatAppearance.helpers({ u: { username: 'rocketchat-agent' }, - time: moment(this.ts).format('HH:mm'), + time: moment(this.ts).format('LT'), date: moment(this.ts).format('LL'), body: 'You\'re welcome.', sequential: null diff --git a/packages/rocketchat-livechat/i18n/ar.i18n.json b/packages/rocketchat-livechat/i18n/ar.i18n.json index 3685d82004b..5d22fd60b4c 100644 --- a/packages/rocketchat-livechat/i18n/ar.i18n.json +++ b/packages/rocketchat-livechat/i18n/ar.i18n.json @@ -12,5 +12,6 @@ "Please_fill_a_username" : "يرجى ملء اسم المستخدم", "Saved" : "تم الحفظ", "Send_a_message" : "إرسال رسالة", + "Theme" : "سمات", "Time_in_seconds" : "الوقت بالثواني" } \ No newline at end of file diff --git a/packages/rocketchat-livechat/i18n/pl.i18n.json b/packages/rocketchat-livechat/i18n/pl.i18n.json index ce4ab92fc99..9a1059cc5e7 100644 --- a/packages/rocketchat-livechat/i18n/pl.i18n.json +++ b/packages/rocketchat-livechat/i18n/pl.i18n.json @@ -1,9 +1,13 @@ { "Add" : "Dodaj", "Description" : "Opis", + "Enable" : "Włącz", + "Enabled" : "Włączone", "Enter_a_username" : "Nazwa użytkownika", "Livechat_title" : "Tytuł Livechatu", "Livechat_title_color" : "Kolor tła nagłówka Livechat", "Please_fill_a_username" : "Proszę wypełnić nazwę użytkownika", - "Saved" : "Zapisano" + "Saved" : "Zapisano", + "Send_a_message" : "Wyślij wiadomość", + "Theme" : "Motyw" } \ No newline at end of file diff --git a/packages/rocketchat-livechat/livechat.js b/packages/rocketchat-livechat/livechat.js index b33e6eb5909..1e854bd8f64 100644 --- a/packages/rocketchat-livechat/livechat.js +++ b/packages/rocketchat-livechat/livechat.js @@ -2,7 +2,7 @@ WebApp = Package.webapp.WebApp; Autoupdate = Package.autoupdate.Autoupdate; WebApp.connectHandlers.use('/livechat/', (req, res, next) => { - res.setHeader('content-type', 'html'); + res.setHeader('content-type', 'text/html; charset=utf-8'); head = Assets.getText('public/head.html'); diff --git a/packages/rocketchat-mailer/i18n/ar.i18n.json b/packages/rocketchat-mailer/i18n/ar.i18n.json index 7301eab2102..d93ff17e2ea 100644 --- a/packages/rocketchat-mailer/i18n/ar.i18n.json +++ b/packages/rocketchat-mailer/i18n/ar.i18n.json @@ -1,4 +1,6 @@ { + "Dry_run" : "تنفيذ تجريبي", + "Dry_run_description" : "سيتم إرسال رسالة بريدية واحدة إلى نفس العنوان الموجود في خانة \"من\". تأكد من كون ذلك العنوان البريدي فعال", "Email_from" : "من", "Email_subject" : "الموضوع", "Send_email" : "إرسال البريد الإلكتروني", diff --git a/packages/rocketchat-mailer/i18n/pl.i18n.json b/packages/rocketchat-mailer/i18n/pl.i18n.json index 292bea7592f..e44e595d29f 100644 --- a/packages/rocketchat-mailer/i18n/pl.i18n.json +++ b/packages/rocketchat-mailer/i18n/pl.i18n.json @@ -6,6 +6,7 @@ "Email_body" : "Treść wiadomości", "Mailer" : "Wyślij email użytkownikom", "Mailer_body_tags" : "Musisz użyć znacznika [unsubscribe] aby zawrzeć w treści odnośnik do rezygnacji z subskrypcji.
Możesz użyć znaczników [name], [fname], [lname] by wstawić odpowiednio pełną nazwę użytkownika, jego imię, nazwisko.
\nMożesz użyć znacznika [email] by wstawić adres email użytkownika.", + "Query" : "Zapytanie", "Send_email" : "Wyślij wiadomość", "The_emails_are_being_sent" : "Wiadomości e-mail są wysyłane.", "You_are_not_authorized_to_view_this_page" : "Nie masz uprawnień, aby zobaczyć tę stronę.", diff --git a/packages/rocketchat-mentions-flextab/i18n/pl.i18n.json b/packages/rocketchat-mentions-flextab/i18n/pl.i18n.json index 6f31cf5a2e6..4668ec4afa7 100644 --- a/packages/rocketchat-mentions-flextab/i18n/pl.i18n.json +++ b/packages/rocketchat-mentions-flextab/i18n/pl.i18n.json @@ -1 +1,4 @@ -{ } \ No newline at end of file +{ + "Mentions" : "Wzmianki o tobie", + "No_mentions_found" : "Nie znaleziono wzmianek o tobie" +} \ No newline at end of file diff --git a/packages/rocketchat-message-attachments/client/messageAttachment.html b/packages/rocketchat-message-attachments/client/messageAttachment.html index dc02f0c03c9..06fc30ea37c 100644 --- a/packages/rocketchat-message-attachments/client/messageAttachment.html +++ b/packages/rocketchat-message-attachments/client/messageAttachment.html @@ -73,7 +73,7 @@ {{#if video_url}}
-