Merge remote-tracking branch 'origin/master' into develop

v1.18.x
Julian Lam 7 years ago
commit 7089e5c6a6

@ -74,9 +74,9 @@
"nodebb-plugin-spam-be-gone": "0.5.3",
"nodebb-rewards-essentials": "0.0.11",
"nodebb-theme-lavender": "5.0.4",
"nodebb-theme-persona": "8.0.10",
"nodebb-theme-persona": "8.0.11",
"nodebb-theme-slick": "1.2.1",
"nodebb-theme-vanilla": "9.0.7",
"nodebb-theme-vanilla": "9.0.8",
"nodebb-widget-essentials": "4.0.2",
"nodemailer": "4.4.1",
"passport": "^0.4.0",

@ -1,5 +1,5 @@
{
"alert.confirm-rebuild-and-restart": "Are you sure you wish to rebuild and restart NodeBB?",
"alert.confirm-rebuild-and-restart": "Bist du sicher, dass du NodeBB neu bauen und neu starten möchtest?",
"alert.confirm-restart": "Bist du sicher, dass du NodeBB neu starten möchtest?",
"acp-title": "%1 | NodeBB Admin Systemsteuerung",

@ -7,5 +7,5 @@
"revert-confirm": "Bist du dir sicher, dass du das standard NodeBB Theme wieder herstellen willst?",
"theme-changed": "Theme geändert",
"revert-success": "Du hast dein NodeBB erfolgreich wieder auf das Standard-Theme zurückgesetzt.",
"restart-to-activate": "Please rebuild and restart your NodeBB to fully activate this theme."
"restart-to-activate": "Bitte baue und starte NodeBB neu um das Theme zu aktivieren."
}

@ -6,7 +6,7 @@
"titles": "Titel",
"titles-posts": "Titel und Beiträge",
"match-words": "Match words",
"all": "All",
"all": "Alle",
"any": "Any",
"posted-by": "Geschrieben von",
"in-categories": "In Kategorien",

@ -44,6 +44,8 @@
"alert.package-manager-unreachable": "<p>NodeBB could not reach the package manager, an upgrade is not suggested at this time.</p>",
"alert.incompatible": "<p>Your version of NodeBB (v%1) is only cleared to upgrade to v%2 of this plugin. Please update your NodeBB if you wish to install a newer version of this plugin.</p>",
"alert.possibly-incompatible": "<div class=\"alert alert-warning\"><p><strong>No Compatibility Information Found</strong></p><p>This plugin did not specify a specific version for installation given your NodeBB version. Full compatibility cannot be guaranteed, and may cause your NodeBB to no longer start properly.</p></div><p>In the event that NodeBB cannot boot properly:</p><pre><code>$ ./nodebb reset plugin=\"%1\"</code></pre><p>Continue installation of latest version of this plugin?</p>",
"alert.reorder": "Plugins Re-ordered",
"alert.reorder-success": "Please rebuild and restart your NodeBB to fully complete the process.",
"license.title": "Plugin License Information",
"license.intro": "The plugin <strong>%1</strong> is licensed under the %2. Please read and understand the license terms prior to activating this plugin.",

@ -21,6 +21,7 @@
"invalid-username-or-password": "Please specify both a username and password",
"invalid-search-term": "Invalid search term",
"invalid-url": "Invalid URL",
"local-login-disabled": "Local login system has been disabled for non-privileged accounts.",
"csrf-invalid": "We were unable to log you in, likely due to an expired session. Please try again",
"invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2",

@ -150,5 +150,7 @@
"diffs.title": "Post Edit History",
"diffs.description": "This post has <strong>%1</strong> revisions. Click one of the revisions below to see the post content at that point in time.",
"diffs.no-revisions-description": "This post has <strong>%1</strong> revisions."
"diffs.no-revisions-description": "This post has <strong>%1</strong> revisions.",
"diffs.current-revision": "current revision",
"diffs.original-revision": "original revision"
}

@ -2,10 +2,10 @@
"post-queue": "Post Queue",
"description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings &rarr; Post &rarr; Posting Restrictions</a> and enable <strong>Post Queue</strong>.",
"user": "User",
"category": "Category",
"title": "Title",
"content": "Content",
"posted": "Posted",
"reply-to": "Reply to \"%1\"",
"category": "Categoría",
"title": "Título",
"content": "Contenido",
"posted": "Publicado",
"reply-to": "Responder a %1",
"content-editable": "You can click on individual content to edit before posting."
}

@ -7,7 +7,7 @@
"create": "צור תג",
"modify": "שנה תג",
"rename": "שנה שם של תג",
"delete": "Delete Selected Tags",
"delete": "מחק תגים שנבחרו",
"search": "חפש תג...",
"settings": "Click <a href=\"%1\">here</a> to visit the tag settings page.",
"name": "שם תג",

@ -3,13 +3,13 @@
"edit": "ערוך",
"make-admin": "הפוך למנהל",
"remove-admin": "הסר הרשאת מנהל",
"validate-email": "אמת דוא\"ל",
"send-validation-email": "שלח דואל אימות",
"validate-email": "סמן את דוא\"ל המשתמש/ים כמאומת",
"send-validation-email": "שלח בקשת אימות דוא\"ל למשתמש/ים",
"password-reset-email": "שלח דוא\"ל לאיפוס סיסמה",
"ban": "הרחק משתמש(ים)",
"temp-ban": "הרחק משתמש(ים) באופן זמני",
"unban": "בטל הרחקת משתמש(ים)",
"reset-lockout": "אתחל מחדש נעילה",
"reset-lockout": "שחרר נעילת חשבון",
"reset-flags": "Reset Flags",
"delete": "מחק משתמש(ים)",
"purge": "מחק משתמש(ים) ומידע",
@ -18,17 +18,17 @@
"new": "משתמש חדש",
"pills.latest": "משתמשים אחרונים",
"pills.unvalidated": "Not Validated",
"pills.unvalidated": "לא מאומת",
"pills.no-posts": "אין פוסטים",
"pills.top-posters": "מפרסמים הכי הרבה",
"pills.top-rep": "Most Reputation",
"pills.top-rep": "מוניטין הכי גבוה",
"pills.inactive": "לא-פעיל",
"pills.flagged": "Most Flagged",
"pills.banned": "מורחק",
"pills.search": "חיפוש משתמשים",
"search.uid": "על פי זהות משתמש",
"search.uid-placeholder": "Enter a user ID to search",
"search.uid-placeholder": "הזן מספר משתמש לחיפוש",
"search.username": "על פי שם משתמש",
"search.username-placeholder": "הזן שם משתמש לחיפוש",
"search.email": "על פי דוא\"ל",
@ -46,10 +46,10 @@
"users.email": "דוא\"ל",
"users.postcount": "postcount",
"users.reputation": "reputation",
"users.flags": "flags",
"users.joined": "joined",
"users.last-online": "last online",
"users.banned": "banned",
"users.flags": "דגלים",
"users.joined": "הצטרף",
"users.last-online": "נראה לאחרונה",
"users.banned": "מורחק",
"create.username": "שם משתמש",
"create.email": "דוא\"ל",
@ -57,35 +57,35 @@
"create.password": "סיסמה",
"create.password-confirm": "אשר סיסמה",
"temp-ban.length": "Ban Length",
"temp-ban.length": "זמן הרחקה",
"temp-ban.reason": "סיבה <span class=\"text-muted\">(אופציונאלי)</span>",
"temp-ban.hours": "שעות",
"temp-ban.days": "ימים",
"temp-ban.explanation": "Enter the length of time for the ban. Note that a time of 0 will be a considered a permanent ban.",
"temp-ban.explanation": "הזן את זמן ההרחקה. שים לב כי הזנת זמן 0 יחשב כהרחקה לצמיתות.",
"alerts.confirm-ban": "האם אתה רוצה להרחיק משתמש זה <strong>לצמיתות</strong>?",
"alerts.confirm-ban-multi": "Do you really want to ban these users <strong>permanently</strong>?",
"alerts.ban-success": "User(s) banned!",
"alerts.button-ban-x": "Ban %1 user(s)",
"alerts.unban-success": "User(s) unbanned!",
"alerts.confirm-ban-multi": "האם אתה באמת רוצה להרחיק את המשתמשים <strong>לצמיתות</strong>?",
"alerts.ban-success": "משתמש(ים) הורחק/ו!",
"alerts.button-ban-x": "אזהרה, %1 משתמש(ים) יפגעו",
"alerts.unban-success": "משתמש(ים) הורחק/ו!",
"alerts.lockout-reset-success": "Lockout(s) reset!",
"alerts.flag-reset-success": "Flags(s) reset!",
"alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!",
"alerts.no-remove-yourself-admin": "אינך יכול להרחיק את עצמך כמנהל!",
"alerts.make-admin-success": "המשתמש הנו מנהל עכשיו",
"alerts.confirm-remove-admin": "האם אתה בטוח רוצה להסיר את המנהל הזה?",
"alerts.remove-admin-success": "בוטלה הרשאת מנהל למשתמש",
"alerts.make-global-mod-success": "מעתה המשתמש הנו מנהל קבוצות כללי",
"alerts.confirm-remove-global-mod": "Do you really want to remove this global moderator?",
"alerts.remove-global-mod-success": "User is no longer global moderator.",
"alerts.make-moderator-success": "User is now moderator.",
"alerts.make-moderator-success": "המשתמש מנהל קבוצה כעת.",
"alerts.confirm-remove-moderator": "Do you really want to remove this moderator?",
"alerts.remove-moderator-success": "User is no longer moderator.",
"alerts.confirm-validate-email": "האם אתה רוצה לאמת דואל(ים) למשתמש(ים) האלה?",
"alerts.confirm-validate-email": "האם אתה רוצה לאמת דואל(ים) למשתמש(ים) הללו?",
"alerts.validate-email-success": "דואלים אומתו.",
"alerts.password-reset-confirm": "האם אתה רוצה לשלוח איפוס סיסמת דואל(ים) למשתמש(ים) האלה?",
"alerts.confirm-delete": "<b>אזהרה!</b><br/>האם אתה רוצה למחוק משתמש(ים)?<br/>פעולה זו אינה הפיכה! רק חשבון המשתמש יימחק, הפוסטים והנושאים שלו ישארו.",
"alerts.delete-success": "משתמש(ים) נמחק!",
"alerts.confirm-purge": "<b>אזהרה!</b><br/>האם אתה באמת רוצה למחוק משתמש(ים) ואת התוכן שלהם? פעולה זו בלתי הפיכה! כל המידע והתכנים של המשתמש ימחקו!",
"alerts.confirm-purge": "<b>אזהרה!</b><br/>האם אתה באמת רוצה למחוק משתמש(ים) ואת התוכן שיצרו? פעולה זו בלתי הפיכה! כל המידע והתכנים של המשתמש ימחקו!",
"alerts.create": "צור משתמש",
"alerts.button-create": "צור",
"alerts.button-cancel": "בטל",

@ -53,7 +53,7 @@
"topics": "נושאים",
"posts": "פוסטים",
"best": "הגבוה ביותר",
"votes": "Votes",
"votes": "הצבעות",
"upvoters": "מצביעי בעד",
"upvoted": "הוצבע בעד",
"downvoters": "מצביעי נגד",
@ -107,5 +107,5 @@
"edited": "נערך",
"disabled": "לא מאופשר",
"select": "בחר",
"user-search-prompt": "Type something here to find users..."
"user-search-prompt": "נסה כאן למציאת משתמשים"
}

@ -1,5 +1,5 @@
{
"chat.chatting_with": "Chat with",
"chat.chatting_with": "לשוחח עם",
"chat.placeholder": "הקלד את הודעת הצ'אט כאן, לחץ אנטר לשליחה",
"chat.send": "שלח",
"chat.no_active": "אין לך צ'אטים פעילים",
@ -12,7 +12,7 @@
"chat.recent-chats": "צ'אטים אחרונים",
"chat.contacts": "אנשי קשר",
"chat.message-history": "היסטוריית הודעות",
"chat.options": "Chat options",
"chat.options": "אפשרויות לשיחה",
"chat.pop-out": "הוצא את חלון הצ'אט",
"chat.minimize": "צמצם",
"chat.maximize": "הרחב",
@ -21,17 +21,17 @@
"chat.three_months": "3 חודשים",
"chat.delete_message_confirm": "האם אתה בטוח שברצונך למחוק הודעה זו?",
"chat.add-users-to-room": "הוסף משתמשים לצ'אט",
"chat.retrieving-users": "Retrieving users...",
"chat.manage-room": "Manage Chat Room",
"chat.add-user-help": "Search for users here. When selected, the user will be added to the chat. The new user will not be able to see chat messages written before they were added to the conversation.",
"chat.retrieving-users": "שולף משתמשים",
"chat.manage-room": "נהל חדר צ'אט",
"chat.add-user-help": "חפש משתמשים כאן. בבחירת משתמש הוא יצטרף לצ'אט. המשתמש החדש יוכל לראות הודעות שנכתבו לפני הצטרפותו.",
"chat.confirm-chat-with-dnd-user": "משתמש זה שינה את הסטטוס שלו ל 'לא להפריע'. אתה עדיין מעוניין לשוחח איתו?",
"chat.rename-room": "Rename room",
"chat.rename-placeholder": "Enter your room name here",
"chat.rename-help": "The room name set here will be viewable by all participants in the room.",
"chat.leave": "Leave Chat",
"chat.leave-prompt": "Are you sure you wish to leave this chat?",
"chat.leave-help": "Leaving this chat will remove you from future correspondence in this chat. If you are re-added in the future, you will not see any chat history from prior to your re-joining.",
"chat.in-room": "In this room",
"chat.rename-room": "שנה שם של חדר",
"chat.rename-placeholder": "הזן את שם החדר שלך כאן",
"chat.rename-help": "שם החדר המוגדר כאן יהיה זמין לכל המשתתפים בחדר.",
"chat.leave": "עזוב שיחה",
"chat.leave-prompt": "האם אתה בטוח שאתה רוצה לעזוב את השיחה הזו?",
"chat.leave-help": "עזיבת צ'אט זה תסיר אותך מהתכתבות עתידית בצ'אט זה. אם תתווסף מחדש בעתיד, לא תראה כל היסטוריית צ'אט שלפני הצטרפותך מחדש.",
"chat.in-room": "בתוך החדר הזה",
"composer.compose": "צור",
"composer.show_preview": "הצג תצוגה מקדימה",
"composer.hide_preview": "הסתר תצוגה מקדימה",

@ -9,7 +9,7 @@
"continue_to": "המשך ל %1",
"return_to": "חזור ל %1",
"new_notification": "התראה חדשה",
"new_notification_from": "You have a new Notification from %1",
"new_notification_from": "יש לך התראה חדשה מ %1",
"you_have_unread_notifications": "יש לך התראות שלא נקראו.",
"all": "הכל",
"topics": "נושאים",
@ -51,14 +51,14 @@
"notification_only": "התראות בלבד",
"email_only": "דוא\"ל בלבד",
"notification_and_email": "התראות & דוא\"ל",
"notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
"notificationType_new-post-flag": "When a post is flagged",
"notificationType_new-user-flag": "When a user is flagged"
"notificationType_upvote": "כאשר מישהו מצביע בעד הפוסט שלך",
"notificationType_new-topic": "כשמישהו שאתה עוקב אחריו פרסם נושא",
"notificationType_new-reply": "כשתגובה חדשה מפורסמת בנושא שאתה צופה בו",
"notificationType_follow": "כשמישהו מתחיל לעקוב אחריך",
"notificationType_new-chat": "כשאתה מקבל הודעת צאט",
"notificationType_group-invite": "כשאתה מקבל הזמנה מקבוצה",
"notificationType_new-register": "כאשר מישהו מתווסף לתור הרישום",
"notificationType_post-queue": "כשהודעה חדשה נכנסת לתור",
"notificationType_new-post-flag": "כאשר פוסט מסומן",
"notificationType_new-user-flag": "כאשר משתמש מסומן"
}

@ -35,11 +35,11 @@
"view-history": "ערוך היסטוריה",
"bookmark_instructions": "לחץ כאן לחזור לפוסט האחרון שקראת בנושא הזה.",
"flag_title": "דווח על פוסט זה למנהל",
"merged_message": "This topic has been merged into <a href=\"/topic/%1\">%2</a>",
"merged_message": "נושא זה מוזג עם <a href=\"/topic/%1\">%2</a>",
"deleted_message": "נושא זה נמחק. רק משתמשים עם ההרשאות המתאימות יכולים לצפות בו.",
"following_topic.message": "מעתה, תקבל הודעות כאשר מישהו יעלה פוסט לנושא זה.",
"not_following_topic.message": "תוכל לראות נושא זה ברשימת הנושאים שלא נקראו, אולם לא תוכל לקבל התראות כשמישהו יעלה פוסט על נושא זה.",
"ignoring_topic.message": "You will no longer see this topic in the unread topics list. You will be notified when you are mentioned or your post is up voted.",
"ignoring_topic.message": "לא תוכל לראות עוד נושא זה ברשימת הנושאים של נקראו. תקבל הודעה כשאתה תוזכר או כשהפוסט שלך יקבל הצבעה חיובית",
"login_to_subscribe": "אנא הרשם או התחבר על-מנת לעקוב אחר נושא זה.",
"markAsUnreadForAll.success": "נושא זה סומן כלא נקרא לכולם.",
"mark_unread": "סמן כלא נקרא",
@ -52,8 +52,8 @@
"watching": "עוקב",
"not-watching": "לא עוקב",
"ignoring": "מתעלם",
"watching.description": "Notify me of new replies.<br/>Show topic in unread.",
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"watching.description": "הודע לי על תגובות חדשות. <br/>הצג נושא חדש ברשימת הלא נקראו.",
"not-watching.description": "אל תיידע אותי על תגובות חדשות. <br/>הצג נושא חדש ברשימת הלא נקראו במידה ובחרתי לא להתעלם מקבוצת הדיון",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread_tools.title": "כלי נושא",
"thread_tools.markAsUnreadForAll": "סמן לא נקרא לכולם",
@ -127,5 +127,5 @@
"link_back": "תגובה: [%1](%2)",
"diffs.title": "Post Edit History",
"diffs.description": "This post has <strong>%1</strong> revisions. Click one of the revisions below to see the post content at that point in time.",
"diffs.no-revisions-description": "This post has <strong>%1</strong> revisions."
"diffs.no-revisions-description": "לפוסט זה יש <strong>%1</strong>גרסאות"
}

@ -29,7 +29,7 @@
"ignored": "התעלם",
"followers": "עוקבים",
"following": "עוקב אחרי",
"aboutme": "עליי",
"aboutme": "אודותי",
"signature": "חתימה",
"birthday": "יום הולדת",
"chat": "צ'אט",
@ -66,7 +66,7 @@
"upload_a_picture": "העלה תמונה",
"remove_uploaded_picture": "מחק את התמונה שהועלתה",
"upload_cover_picture": "העלה תמונת נושא",
"remove_cover_picture_confirm": "האם אתה בטוח שאתה רוצה למחוק את תמונת הקאבר?",
"remove_cover_picture_confirm": "האם אתה בטוח שאתה רוצה למחוק את תמונת הרקע?",
"crop_picture": "חתוך תמונה",
"upload_cropped_picture": "חתוך והעלה",
"settings": "הגדרות",

@ -1,7 +1,7 @@
{
"alert.confirm-rebuild-and-restart": "Are you sure you wish to rebuild and restart NodeBB?",
"alert.confirm-rebuild-and-restart": "Weet u zeker dat u de NodeBB bestanden wilt hergenereren en NodeBB opnieuw wilt opstarten?",
"alert.confirm-restart": "Weet u zeker dat u NodeBB opnieuw wilt opstarten?",
"acp-title": "%1 | NodeBB Administratiepaneel",
"acp-title": "%1 | NodeBB Administrator Controle Paneel",
"settings-header-contents": "Inhoud"
}

@ -1,21 +1,21 @@
{
"users": "Users",
"edit": "Edit",
"make-admin": "Make Admin",
"remove-admin": "Remove Admin",
"validate-email": "Validate Email",
"send-validation-email": "Send Validation Email",
"password-reset-email": "Send Password Reset Email",
"ban": "Ban User(s)",
"temp-ban": "Ban User(s) Temporarily",
"users": "Gebruikers",
"edit": "Aanpassen",
"make-admin": "Maak administrator",
"remove-admin": "Verwijder administrator",
"validate-email": "Bevestig Email",
"send-validation-email": "Verstuur Email bevestiging",
"password-reset-email": "Verstuur wachtwoord herstel email",
"ban": "Verban gebruiker(s)",
"temp-ban": "Verban gebruiker(s) tijdelijk",
"unban": "Unban User(s)",
"reset-lockout": "Reset Lockout",
"reset-flags": "Reset Flags",
"delete": "Delete User(s)",
"purge": "Delete User(s) and Content",
"delete": "Verwijder gebruiker(s)",
"purge": "Verwijder gebruiker(s) en inhoud",
"download-csv": "Download CSV",
"invite": "Invite",
"new": "New User",
"invite": "Uitnodigen",
"new": "Nieuwe gebruiker",
"pills.latest": "Latest Users",
"pills.unvalidated": "Not Validated",

@ -2,7 +2,7 @@
"authentication": "Uwierzytelnianie",
"allow-local-login": "Zezwalaj na lokalne logowanie",
"require-email-confirmation": "Wymagaj potwierdzenia adresu email",
"email-confirm-interval": "Użytkownik nie może ponownie wysłać email z potwierdzeniem, dopóki nie minie",
"email-confirm-interval": "Użytkownik nie może ponownie wysłać e-maila z potwierdzeniem, dopóki nie minie",
"email-confirm-email2": "minut",
"allow-login-with": "Zezwalaj na logowanie przy użyciu",
"allow-login-with.username-email": "Nazwy użytkownika lub adresu email",

@ -18,7 +18,7 @@
"invalid-username-or-password": "Podaj nazwę użytkownika i hasło",
"invalid-search-term": "Błędne wyszukiwane wyrażenie",
"invalid-url": "Błąd w adresie URL.",
"csrf-invalid": "Logowanie nie powiodło się. Przyczyną jest zapewne wygaśnięcie sesji. Spróbój ponownie.",
"csrf-invalid": "Logowanie nie powiodło się, zapewne na skutek wygaśnięcia sesji. Spróbuj ponownie.",
"invalid-pagination-value": "Błędna wartość paginacji, zakres od %1 do %2",
"username-taken": "Login zajęty",
"email-taken": "Email zajęty",

@ -16,7 +16,7 @@
"please_log_in": "Proszę się zalogować",
"logout": "Wyloguj się",
"posting_restriction_info": "Posty mogą pisać tylko zarejestrowani użytkownicy forum. Kliknij tutaj, aby się zalogować.",
"welcome_back": "Witamy ponownie!",
"welcome_back": "Witaj ponownie,",
"you_have_successfully_logged_in": "Logowanie powiodło się.",
"save_changes": "Zapisz zmiany",
"save": "Zapisz",

@ -2,7 +2,7 @@
"reset_password": "Zresetuj hasło",
"update_password": "Zmień hasło",
"password_changed.title": "Hasło zmienione",
"password_changed.message": "<p>Hasło zostało zmienione pomyślnie. <a href=\"/login\">Zaloguj się ponownie</a>.",
"password_changed.message": "<p>Hasło zostało zmienione. <a href=\"/login\">Zaloguj się ponownie</a>.",
"wrong_reset_code.title": "Nieprawidłowy kod resetujący",
"wrong_reset_code.message": "Wprowadzony kod resetujący jest nieprawidłowy. Spróbuj ponownie lub <a href=\"/reset\">uzyskaj nowy kod</a>.",
"new_password": "Nowe hasło",

@ -28,8 +28,8 @@
"chat.rename-room": "Rename room",
"chat.rename-placeholder": "Enter your room name here",
"chat.rename-help": "The room name set here will be viewable by all participants in the room.",
"chat.leave": "Leave Chat",
"chat.leave-prompt": "Are you sure you wish to leave this chat?",
"chat.leave": "Покинуть Чат",
"chat.leave-prompt": "Вы действительно хотите покинуть чат?",
"chat.leave-help": "Leaving this chat will remove you from future correspondence in this chat. If you are re-added in the future, you will not see any chat history from prior to your re-joining.",
"chat.in-room": "In this room",
"composer.compose": "Редактор сообщений",

@ -6,8 +6,8 @@
"titles": "Названия",
"titles-posts": "Названия и записи",
"match-words": "Match words",
"all": "All",
"any": "Any",
"all": "Все",
"any": "Любые",
"posted-by": "В именах авторов записей",
"in-categories": "В сообществах",
"search-child-categories": "Искать в рубриках",

@ -3,7 +3,7 @@
"sorting.post-default": "默认帖子排序",
"sorting.oldest-to-newest": "从旧到新",
"sorting.newest-to-oldest": "从新到旧",
"sorting.most-votes": "最多投票",
"sorting.most-votes": "最多赞同",
"sorting.most-posts": "最多回复",
"sorting.topic-default": "默认主题排序",
"length": "帖子长度",

@ -53,7 +53,7 @@
"topics": "主题",
"posts": "帖子",
"best": "最佳",
"votes": "投票",
"votes": "赞同",
"upvoters": "顶的人",
"upvoted": "顶",
"downvoters": "踩的人",

@ -118,7 +118,7 @@
"sort_by": "排序",
"oldest_to_newest": "从旧到新",
"newest_to_oldest": "从新到旧",
"most_votes": "最多投票",
"most_votes": "最多赞同",
"most_posts": "最多回复",
"stale.title": "接受建议并创建新主题?",
"stale.warning": "您回复的主题已经很古老了,是否发布新主题并引用此主题的内容?",

@ -182,6 +182,19 @@ define('admin/extend/plugins', ['jqueryui', 'translator', 'benchpress'], functio
return app.alertError(err.message);
}
$('#order-active-plugins-modal').modal('hide');
app.alert({
alert_id: 'plugin_reordered',
title: '[[admin/extend/plugins:alert.reorder]]',
message: '[[admin/extend/plugins:alert.reorder-success]]',
type: 'success',
timeout: 5000,
clickfn: function () {
require(['admin/modules/instance'], function (instance) {
instance.rebuildAndRestart();
});
},
});
});
});

@ -109,9 +109,8 @@ $(document).ready(function () {
url = ajaxify.removeRelativePath(url.replace(/^\/|\/$/g, '')).toLowerCase();
var isClientToAdmin = url.startsWith('admin') && window.location.pathname.indexOf(RELATIVE_PATH + '/admin') !== 0;
var isAdminToClient = !url.startsWith('admin') && window.location.pathname.indexOf(RELATIVE_PATH + '/admin') === 0;
var uploadsOrApi = url.startsWith('assets/') || url.startsWith('uploads') || url.startsWith('api');
if (isClientToAdmin || isAdminToClient || uploadsOrApi) {
if (isClientToAdmin || isAdminToClient) {
window.open(RELATIVE_PATH + '/' + url, '_top');
return true;
}
@ -390,6 +389,13 @@ $(document).ready(function () {
return;
}
// Default behaviour for uploads and direct links to API urls
if (internalLink && ['/uploads', '/assets/uploads/', '/api/'].some(function (prefix) {
return String(_self.pathname).startsWith(config.relative_path + prefix);
})) {
return;
}
if (hrefEmpty(this.href) || this.protocol === 'javascript:' || $(this).attr('href') === '#') {
return e.preventDefault();
}

@ -15,6 +15,8 @@ define('forum/topic/diffs', ['forum/topic/images', 'benchpress', 'translator'],
return app.alertError(err.message);
}
timestamps.unshift(Date.now());
Benchpress.parse('partials/modals/post_history', {
diffs: timestamps.map(function (timestamp) {
timestamp = parseInt(timestamp, 10);

@ -9,6 +9,7 @@ var meta = require('../../meta');
var plugins = require('../../plugins');
var privileges = require('../../privileges');
var categories = require('../../categories');
var notifications = require('../../notifications');
var db = require('../../database');
var helpers = require('../helpers');
var accountHelpers = require('./helpers');
@ -180,15 +181,6 @@ settingsController.get = function (req, res, callback) {
};
function getNotificationSettings(userData, callback) {
var types = [
'notificationType_upvote',
'notificationType_new-topic',
'notificationType_new-reply',
'notificationType_follow',
'notificationType_new-chat',
'notificationType_group-invite',
];
var privilegedTypes = [];
async.waterfall([
@ -206,8 +198,7 @@ function getNotificationSettings(userData, callback) {
privilegedTypes.push('notificationType_new-user-flag');
}
plugins.fireHook('filter:user.notificationTypes', {
userData: userData,
types: types,
types: notifications.baseTypes.slice(),
privilegedTypes: privilegedTypes,
}, next);
},

@ -4,7 +4,7 @@ var async = require('async');
var meta = require('../../meta');
var emailer = require('../../emailer');
var plugins = require('../../plugins');
var notifications = require('../../notifications');
var settingsController = module.exports;
@ -45,32 +45,12 @@ function renderEmail(req, res, next) {
}
function renderUser(req, res, next) {
var types = [
'notificationType_upvote',
'notificationType_new-topic',
'notificationType_new-reply',
'notificationType_follow',
'notificationType_new-chat',
'notificationType_group-invite',
];
var privilegedTypes = [
'notificationType_new-register',
'notificationType_post-queue',
'notificationType_new-post-flag',
'notificationType_new-user-flag',
];
async.waterfall([
function (next) {
plugins.fireHook('filter:user.notificationTypes', {
userData: {},
types: types,
privilegedTypes: privilegedTypes,
}, next);
notifications.getAllNotificationTypes(next);
},
function (results) {
var notificationSettings = results.types.concat(results.privilegedTypes).map(function (type) {
function (notificationTypes) {
var notificationSettings = notificationTypes.map(function (type) {
return {
name: type,
label: '[[notifications:' + type + ']]',

@ -387,8 +387,8 @@ authenticationController.localLogin = function (req, username, password, next) {
userData: function (next) {
db.getObjectFields('user:' + uid, ['password', 'passwordExpiry'], next);
},
isAdmin: function (next) {
user.isAdministrator(uid, next);
isAdminOrGlobalMod: function (next) {
user.isAdminOrGlobalMod(uid, next);
},
banned: function (next) {
user.isBanned(uid, next);
@ -398,9 +398,9 @@ authenticationController.localLogin = function (req, username, password, next) {
function (result, next) {
userData = result.userData;
userData.uid = uid;
userData.isAdmin = result.isAdmin;
userData.isAdminOrGlobalMod = result.isAdminOrGlobalMod;
if (!result.isAdmin && parseInt(meta.config.allowLocalLogin, 10) === 0) {
if (!result.isAdminOrGlobalMod && parseInt(meta.config.allowLocalLogin, 10) === 0) {
return next(new Error('[[error:local-login-disabled]]'));
}

@ -11,6 +11,7 @@ var _ = require('lodash');
var plugins = require('../plugins');
var file = require('../file');
var db = require('../database');
var viewsPath = nconf.get('views_dir');
@ -44,20 +45,22 @@ function processImports(paths, templatePath, source, callback) {
}
Templates.processImports = processImports;
function getTemplateDirs(callback) {
var pluginTemplates = _.values(plugins.pluginsData)
.filter(function (pluginData) {
return !pluginData.id.startsWith('nodebb-theme-');
})
.map(function (pluginData) {
return path.join(__dirname, '../../node_modules/', pluginData.id, pluginData.templates || 'templates');
});
function getTemplateDirs(activePlugins, callback) {
var pluginTemplates = activePlugins.map(function (id) {
if (id.startsWith('nodebb-theme-')) {
return nconf.get('theme_templates_path');
}
if (!plugins.pluginsData[id]) {
return '';
}
return path.join(__dirname, '../../node_modules/', id, plugins.pluginsData[id].templates || 'templates');
}).filter(Boolean);
var themeConfig = require(nconf.get('theme_config'));
var theme = themeConfig.baseTheme;
var themePath;
var themeTemplates = [nconf.get('theme_templates_path')];
var themeTemplates = [];
while (theme) {
themePath = path.join(nconf.get('themes_path'), theme);
themeConfig = require(path.join(themePath, 'theme.json'));
@ -118,6 +121,9 @@ function compile(callback) {
function (next) {
mkdirp(viewsPath, function (err) { next(err); });
},
function (next) {
db.getSortedSetRange('plugins:active', 0, -1, next);
},
getTemplateDirs,
getTemplateFiles,
function (files, next) {

@ -17,6 +17,36 @@ var emailer = require('./emailer');
var Notifications = module.exports;
Notifications.baseTypes = [
'notificationType_upvote',
'notificationType_new-topic',
'notificationType_new-reply',
'notificationType_follow',
'notificationType_new-chat',
'notificationType_group-invite',
];
Notifications.privilegedTypes = [
'notificationType_new-register',
'notificationType_post-queue',
'notificationType_new-post-flag',
'notificationType_new-user-flag',
];
Notifications.getAllNotificationTypes = function (callback) {
async.waterfall([
function (next) {
plugins.fireHook('filter:user.notificationTypes', {
types: Notifications.baseTypes.slice(),
privilegedTypes: Notifications.privilegedTypes.slice(),
}, next);
},
function (results, next) {
next(null, results.types.concat(results.privilegedTypes));
},
], callback);
};
Notifications.startJobs = function () {
winston.verbose('[notifications.init] Registering jobs.');
new cron('*/30 * * * *', Notifications.prune, null, true);

@ -27,7 +27,7 @@ Diffs.get = function (pid, since, callback) {
function (timestamps, next) {
// Pass those made after `since`, and create keys
const keys = timestamps.filter(function (timestamp) {
return (parseInt(timestamp, 10) || 0) > since;
return (parseInt(timestamp, 10) || 0) >= since;
}).map(function (timestamp) {
return 'diff:' + pid + '.' + timestamp;
});

@ -6,6 +6,7 @@ var async = require('async');
var meta = require('../meta');
var db = require('../database');
var plugins = require('../plugins');
var notifications = require('../notifications');
module.exports = function (User) {
User.getSettings = function (uid, callback) {
@ -81,12 +82,14 @@ module.exports = function (User) {
settings.delayImageLoading = parseInt(getSetting(settings, 'delayImageLoading', 1), 10) === 1;
settings.bootswatchSkin = settings.bootswatchSkin || meta.config.bootswatchSkin || 'default';
settings.scrollToMyPost = parseInt(getSetting(settings, 'scrollToMyPost', 1), 10) === 1;
settings.notificationType_upvote = getSetting(settings, 'notificationType_upvote', 'notification');
settings['notificationType_new-topic'] = getSetting(settings, 'notificationType_new-topic', 'notification');
settings['notificationType_new-reply'] = getSetting(settings, 'notificationType_new-reply', 'notification');
settings.notificationType_follow = getSetting(settings, 'notificationType_follow', 'notification');
settings['notificationType_new-chat'] = getSetting(settings, 'notificationType_new-chat', 'notification');
settings['notificationType_group-invite'] = getSetting(settings, 'notificationType_group-invite', 'notification');
notifications.getAllNotificationTypes(next);
},
function (notificationTypes, next) {
notificationTypes.forEach(function (notificationType) {
settings[notificationType] = getSetting(settings, notificationType, 'notification');
});
next(null, settings);
},
], callback);
@ -139,26 +142,20 @@ module.exports = function (User) {
upvoteNotifFreq: data.upvoteNotifFreq,
};
var notificationTypes = [
'notificationType_upvote', 'notificationType_new-topic', 'notificationType_new-reply',
'notificationType_follow', 'notificationType_new-chat', 'notificationType_group-invite',
'notificationType_new-register', 'notificationType_post-queue', 'notificationType_new-post-flag',
'notificationType_new-user-flag',
];
notificationTypes.forEach(function (notificationType) {
if (data[notificationType]) {
settings[notificationType] = data[notificationType];
}
});
if (data.bootswatchSkin) {
settings.bootswatchSkin = data.bootswatchSkin;
}
async.waterfall([
function (next) {
notifications.getAllNotificationTypes(next);
},
function (notificationTypes, next) {
notificationTypes.forEach(function (notificationType) {
if (data[notificationType]) {
settings[notificationType] = data[notificationType];
}
});
plugins.fireHook('filter:user.saveSettings', { settings: settings, data: data }, next);
},
function (result, next) {

@ -1,6 +1,6 @@
<script>
window.addEventListener('load', function () {
define('/assets/templates/500.js', function () {
define(config.relative_path + '/assets/templates/500.js', function () {
function compiled(helpers, context, get, iter, helper) {
return '<div class="alert alert-danger">\n\t<strong>[[global:500.title]]</strong>\n\t<p>[[global:500.message]]</p>\n\t<p>' +
helpers.__escape(get(context && context['path'])) + '</p>\n\t' +

Loading…
Cancel
Save