Compare commits

...

38 Commits

Author SHA1 Message Date
Julian Lam
9c36e81f3a 0.9.2 2015-12-10 16:01:35 -05:00
Julian Lam
4ce6bcfa6a latest translations 2015-12-10 16:01:16 -05:00
Julian Lam
7220ed2010 nodebb/nodebb-theme-persona#214 2015-12-10 11:08:30 -05:00
Julian Lam
aebaf8f589 #3939 2015-12-10 10:18:16 -05:00
barisusakli
745007a2b3 closes #3873 2015-12-10 12:19:43 +02:00
barisusakli
0ffd5254ad closes #3933, closes #3934 2015-12-10 09:00:46 +02:00
Barış Soner Uşaklı
cdca09a7b2 escape error message on 500 page 2015-12-09 21:18:56 +02:00
barisusakli
7b21760f00 refactor get user by x 2015-12-09 17:43:28 +02:00
Barış Soner Uşaklı
69bc870017 Merge pull request #3927 from lots0logs/master
Add api endpoints to get user by username and by email
2015-12-09 17:32:40 +02:00
barisusakli
5a2062ba32 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	package.json
2015-12-08 19:03:20 +02:00
Julian Lam
d1fb09caec apparently I *did* need html-to-text. 2015-12-07 16:41:21 -05:00
Julian Lam
963d9b22b3 Removing and updating dependencies to satisfy david-dm.org 2015-12-07 16:06:42 -05:00
Julian Lam
5adb8da427 enabled Gmail routing for email fallback 2015-12-07 15:27:04 -05:00
Julian Lam
7d9136f655 closes #3926 2015-12-07 13:53:14 -05:00
Dustin Falgout
17e5d72815 fix waterfall
Signed-off-by: Dustin Falgout <dustin@falgout.us>
2015-12-06 09:34:51 -06:00
Dustin Falgout
0e5830d6f2 add api endpoints to get user by username and by email
Signed-off-by: Dustin Falgout <dustin@falgout.us>
2015-12-06 09:16:20 -06:00
Julian Lam
bc199d6872 By default, always switch chat in chats page
closes #3915
2015-12-04 15:49:32 -05:00
Julian Lam
648e9c4dc8 fix #3889 2015-12-04 14:44:34 -05:00
Julian Lam
9560ee3a14 upped mentions minver, #3911 2015-12-04 12:41:56 -05:00
Julian Lam
acc2dfa037 latest translations, closes #3911 2015-12-04 12:39:42 -05:00
Julian Lam
2af11a23ce fixes #3922 2015-12-04 11:30:18 -05:00
Julian Lam
f77f39e937 Fixed #3925
Also updated port local variable to be a Number, since all of the
conditional checks assume it is a number, when all along it has
been a string.... heh.
2015-12-04 08:32:01 -05:00
Barış Soner Uşaklı
721649bff9 Merge pull request #3919 from yariplus/noredirectoncathp
Don't change url when homepage is set to a category.
2015-12-03 06:27:34 -05:00
Julian Lam
6a3200ed48 fixes #3921 2015-12-02 10:44:40 -05:00
yariplus
12fb512d3c Don't change url when homepage is set to a category. 2015-12-01 12:59:18 -05:00
Julian Lam
3a520cdfbf Successful web installer now doesn't show 503 2015-11-30 23:10:59 -05:00
Barış Soner Uşaklı
9770983fdb closes #3913 2015-11-29 16:49:23 -05:00
Julian Lam
fc495a83ec closes #3763 2015-11-28 23:26:51 -05:00
Julian Lam
992bcffcdf we stopped using -dev versions, so this conditional is unnecessary 2015-11-28 23:25:32 -05:00
Julian Lam
1b9defdf8b closes #3892 2015-11-28 23:22:39 -05:00
Julian Lam
335d711dbd closes #3907 2015-11-28 22:41:39 -05:00
Julian Lam
07d57f945b nodebb/nodebb#3907 2015-11-28 22:38:12 -05:00
Julian Lam
91c012e642 #3907 2015-11-28 22:32:28 -05:00
Julian Lam
a936866688 revamped ACP Flags interface, #3907 2015-11-28 22:08:06 -05:00
Julian Lam
07e1102500 fixes #3909 2015-11-28 21:40:20 -05:00
Julian Lam
fc476ba168 Fixes #3906
Initially, the removed block of code was used to stop the chat modal
from popping up altogether, since the /chats page was usable on
mobile. Since the re-design, only the contact list is shown on
mobile, leaving the modal as the main way to communicate. So, this
intercepting code is actually interfering now.
2015-11-27 12:52:58 -05:00
Julian Lam
bbc42a937e fixed LRU cache problem 2015-11-26 23:34:55 -05:00
barisusakli
0283bfbef2 up vanilla 2015-11-26 10:36:15 -05:00
80 changed files with 381 additions and 231 deletions

View File

@@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
"version": "0.9.1",
"version": "0.9.2",
"homepage": "http://www.nodebb.org",
"repository": {
"type": "git",
@@ -29,11 +29,11 @@
"express": "^4.9.5",
"express-session": "^1.8.2",
"heapdump": "^0.3.0",
"html-to-text": "1.3.2",
"jimp": "0.2.19",
"html-to-text": "1.5.0",
"jimp": "0.2.20",
"less": "^2.0.0",
"logrotate-stream": "^0.2.3",
"lru-cache": "^2.6.1",
"lru-cache": "3.2.0",
"mime": "^1.3.4",
"minimist": "^1.1.1",
"mkdirp": "~0.5.0",
@@ -41,15 +41,15 @@
"nconf": "~0.8.2",
"nodebb-plugin-composer-default": "1.0.24",
"nodebb-plugin-dbsearch": "0.2.18",
"nodebb-plugin-emoji-extended": "0.4.16",
"nodebb-plugin-emoji-extended": "0.4.17",
"nodebb-plugin-markdown": "4.0.8",
"nodebb-plugin-mentions": "1.0.10",
"nodebb-plugin-mentions": "1.0.12",
"nodebb-plugin-soundpack-default": "0.1.5",
"nodebb-plugin-spam-be-gone": "0.4.5",
"nodebb-rewards-essentials": "0.0.6",
"nodebb-theme-lavender": "3.0.0",
"nodebb-theme-persona": "4.0.37",
"nodebb-theme-vanilla": "5.0.14",
"nodebb-theme-lavender": "3.0.2",
"nodebb-theme-persona": "4.0.40",
"nodebb-theme-vanilla": "5.0.15",
"nodebb-widget-essentials": "2.0.5",
"nodemailer": "0.7.1",
"npm": "^2.1.4",
@@ -64,8 +64,8 @@
"sitemap": "^1.4.0",
"socket.io": "^1.2.1",
"socket.io-client": "^1.2.1",
"socket.io-redis": "^0.1.3",
"socketio-wildcard": "~0.1.1",
"socket.io-redis": "^0.2.0",
"socketio-wildcard": "~0.2.0",
"string": "^3.0.0",
"templates.js": "0.3.1",
"toobusy-js": "^0.4.2",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> أشعَرَ بمشاركة مخلة في <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> أضاف ردا إلى: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> أنشأ موضوعًا جديدًا: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> ذكرَ اسمك في <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> صار يتابعك.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "تم التحقق من عنوان البريد الإلكتروني",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> докладва Ваша публикация в <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> публикува отговор на: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> публикува нова тема: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> Ви спомена в <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> започна да Ви следва.",
"new_register": "<strong>%1</strong> изпрати заявка за регистрация.",
"email-confirmed": "Е-пощата беше потвърдена",

View File

@@ -22,7 +22,7 @@
"pagination.out_of": "%2 এর মাঝে %1",
"pagination.enter_index": "সূচক লিখুন",
"header.admin": "অ্যাডমিন",
"header.categories": "Categories",
"header.categories": "বিভাগ",
"header.recent": "সাম্প্রতিক",
"header.unread": "অপঠিত",
"header.tags": "ট্যাগ",
@@ -52,7 +52,7 @@
"views": "দেখেছেন",
"reputation": "সন্মাননা",
"read_more": "আরো পড়ুন",
"more": "More",
"more": "আরো...",
"posted_ago_by_guest": "অতিথি পোস্ট করেছেন %1",
"posted_ago_by": " %1 %2 দ্বারা পোস্টকৃত",
"posted_ago": "পোস্ট করেছেন %1",
@@ -83,5 +83,5 @@
"follow": "Follow",
"unfollow": "Unfollow",
"delete_all": "সব মুছে ফেলুন",
"map": "Map"
"map": "ম্যাপ"
}

View File

@@ -1,7 +1,7 @@
{
"username-email": "Username / Email",
"username": "Username",
"email": "Email",
"username-email": "ইউজারনেম / ইমেইল",
"username": "ইউজারনেম",
"email": "ইমেইল",
"remember_me": "মনে রাখুন",
"forgot_password": "পাসওয়ার্ড ভুলে গিয়েছেন?",
"alternative_logins": "বিকল্প প্রবেশ",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> একটি উত্তর দিয়েছেন: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong>, <strong>%2</strong> এ আপনার নাম উল্লেখ করেছেন",
"user_started_following_you": "<strong>%1</strong> আপনাকে অনুসরন করা শুরু করেছেন।",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "ইমেইল নিশ্চিত করা হয়েছে",

View File

@@ -13,12 +13,12 @@
"users/map": "User Map",
"users/search": "User Search",
"notifications": "বিজ্ঞপ্তি",
"tags": "Tags",
"tags": "ট্যাগসমূহ",
"tag": "Topics tagged under \"%1\"",
"register": "Register an account",
"login": "Login to your account",
"reset": "Reset your account password",
"categories": "Categories",
"categories": "বিভাগ",
"groups": "Groups",
"group": "%1 group",
"chats": "Chats",

View File

@@ -15,5 +15,5 @@
"alternative_registration": "বিকল্প নিবন্ধন",
"terms_of_use": "নিয়মাবলী",
"agree_to_terms_of_use": "আমি নিয়মাবলী মেনে চলতে সম্মতি জানালাম",
"registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator."
"registration-added-to-queue": "আপনার নিবন্ধনটি এ্যাপ্লুভাল তালিকায় যুক্ত হয়েছে। একজন এডমিনিস্ট্রেটর কর্তৃক নিবন্ধন গৃহীত হলে আপনি একটি মেইল পাবেন। "
}

View File

@@ -1,40 +1,40 @@
{
"results_matching": "\"%2\" এর সাথে মিলিয়ে %1 ফলাফল পাওয়া গেছে, ( %3 seconds সময় লেগেছে )",
"no-matches": "No matches found",
"advanced-search": "Advanced Search",
"in": "In",
"titles": "Titles",
"titles-posts": "Titles and Posts",
"posted-by": "Posted by",
"in-categories": "In Categories",
"search-child-categories": "Search child categories",
"reply-count": "Reply Count",
"at-least": "At least",
"at-most": "At most",
"post-time": "Post time",
"no-matches": "কোন মিল খুঁজে পাওয়া যায় নি",
"advanced-search": "এডভান্সড সার্চ",
"in": "এর মধ্যে",
"titles": "টাইটেলস",
"titles-posts": "টাইটেল এবং পোস্ট সমূহ",
"posted-by": "পোষ্ট করেছেন",
"in-categories": "বিভাগের ভিতরে",
"search-child-categories": "উপবিভাগের ভিতরে",
"reply-count": "রিপ্লাই কাউন্ট",
"at-least": "কমপক্ষে",
"at-most": "সর্বোচ্চ",
"post-time": "পোস্টের সময়",
"newer-than": "Newer than",
"older-than": "Older than",
"any-date": "Any date",
"yesterday": "Yesterday",
"one-week": "One week",
"two-weeks": "Two weeks",
"one-month": "One month",
"three-months": "Three months",
"six-months": "Six months",
"one-year": "One year",
"sort-by": "Sort by",
"last-reply-time": "Last reply time",
"topic-title": "Topic title",
"number-of-replies": "Number of replies",
"number-of-views": "Number of views",
"topic-start-date": "Topic start date",
"username": "Username",
"any-date": "যেকোন তারিখ",
"yesterday": "গতকাল",
"one-week": "এক সপ্তাহ",
"two-weeks": "দুই সপ্তাহ",
"one-month": "এক মাস",
"three-months": "তিন মাস",
"six-months": "ছয় মাস",
"one-year": "এক বছর",
"sort-by": "সাজানোর ভিত্তি",
"last-reply-time": "সর্বশেষ রিপ্লাইয়ের সময়",
"topic-title": "টপিকের টাইটেল",
"number-of-replies": "রিপ্লাইয়ের সংখ্যা",
"number-of-views": "সর্বমোট ভিউ",
"topic-start-date": "টপিক শুরুর তারিখ",
"username": "ইউজারনেম",
"category": "বিভাগ",
"descending": "In descending order",
"ascending": "In ascending order",
"save-preferences": "Save preferences",
"descending": "বড় থেকে ছোট অর্ডারে",
"ascending": "ছোট থেকে বড় অর্ডারে",
"save-preferences": "প্রেফারেন্স সেভ",
"clear-preferences": "Clear preferences",
"search-preferences-saved": "Search preferences saved",
"search-preferences-cleared": "Search preferences cleared",
"show-results-as": "Show results as"
"show-results-as": "ফলাফল দেখানো হোক : "
}

View File

@@ -2,17 +2,17 @@
"banned": "নিষিদ্ধ",
"offline": "অফলাইন",
"username": "সদস্যের নাম",
"joindate": "Join Date",
"postcount": "Post Count",
"joindate": "নিবন্ধন তারিখ",
"postcount": "সর্বমোট পোষ্ট",
"email": "ইমেইল",
"confirm_email": "ইমেইল নিশ্চিত করুন",
"ban_account": "Ban Account",
"ban_account_confirm": "Do you really want to ban this user?",
"unban_account": "Unban Account",
"ban_account": "একাউন্ট নিষিদ্ধ করুন",
"ban_account_confirm": "আপনি কি নিশ্চিত যে এই সদস্যকে নিষিদ্ধ করতে চান ?",
"unban_account": "নিষেদ্ধাজ্ঞা তুলে নিন",
"delete_account": "একাউন্ট মুছে ফেলুন",
"delete_account_confirm": "আপনি কি নিশ্চিত যে আপনি আপনার একাউন্ট মুছে ফেলতে চান ? <br /><strong>এই কাজটির ফলে আপনার কোন তথ্য পুনরূদ্ধার করা সম্ভব নয় </strong><br /><br /> নিশ্চিত করতে আপনার ইউজারনেম প্রবেশ করান। ",
"delete_this_account_confirm": "Are you sure you want to delete this account? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />",
"account-deleted": "Account deleted",
"account-deleted": "একাউন্ট মুছে ফেলা হয়েছে",
"fullname": "পুর্ণ নাম",
"website": "ওয়েবসাইট",
"location": "স্থান",
@@ -23,23 +23,23 @@
"profile_views": "প্রোফাইল দেখেছেন",
"reputation": "সন্মাননা",
"favourites": "পছন্দের তালিকা",
"watched": "Watched",
"watched": "দেখা হয়েছে",
"followers": "যাদের অনুসরণ করছেন",
"following": "যারা আপনাকে অনুসরণ করছে",
"aboutme": "About me",
"aboutme": "আমার সম্পর্কে: ",
"signature": "স্বাক্ষর",
"birthday": "জন্মদিন",
"chat": "বার্তালাপ",
"chat_with": "Chat with %1",
"chat_with": "চ্যাট উইথ %1",
"follow": "অনুসরন করুন",
"unfollow": "অনুসরন করা থেকে বিরত থাকুন",
"more": "More",
"more": "আরো...",
"profile_update_success": "প্রোফাইল আপডেট সফল হয়েছে",
"change_picture": "ছবি পরিবর্তন",
"change_username": "Change Username",
"change_email": "Change Email",
"change_username": "ইউজারনেম পরিবর্তন করুন",
"change_email": "ইমেইল পরিবর্তন করুন",
"edit": "সম্পাদনা",
"default_picture": "Default Icon",
"default_picture": "ডিফল্ট আইকন",
"uploaded_picture": "ছবি আপলোড করুন",
"upload_new_picture": "নতুন ছবি আপলোড করুন",
"upload_new_picture_from_url": "URL থেকে নতুন ছবি আপলোড করুন",
@@ -57,8 +57,8 @@
"password_same_as_username": "Your password is the same as your username, please select another password.",
"upload_picture": "ছবি আপলোড করুন",
"upload_a_picture": "ছবি (একটি) আপলোড করুন",
"remove_uploaded_picture": "Remove Uploaded Picture",
"image_spec": "You may only upload PNG, JPG, or BMP files",
"remove_uploaded_picture": "আপলোড করা ছবিটি সরিয়ে নাও",
"image_spec": "আপনি শুধুমাত্র PNG, JPG অথবা BMP ফাইল আপলোড করতে পারবেন",
"settings": "সেটিংস",
"show_email": "আমার ইমেইল দেখাও",
"show_fullname": "আমার সম্পূর্ণ নাম দেখাও",
@@ -70,21 +70,21 @@
"digest_weekly": "সাপ্তাহিক",
"digest_monthly": "মাসিক",
"send_chat_notifications": "যদি আমি অনলাইনে না থাকি, সেক্ষেত্রে নতুন চ্যাট মেসেজ আসলে আমাকে ইমেইল করুন",
"send_post_notifications": "Send an email when replies are made to topics I am subscribed to",
"settings-require-reload": "Some setting changes require a reload. Click here to reload the page.",
"send_post_notifications": "আমার সাবস্ক্রাইব করা টপিকগুলোতে রিপ্লাই করা হলে আমাকে মেইল করা হোক",
"settings-require-reload": "কিছু কিছু পরিবর্তনের জন্য রিলোড করা আবশ্যক। পেজটি রিলোড করতে এখানে ক্লিক করুন",
"has_no_follower": "এই সদস্যের কোন ফলোয়ার নেই :(",
"follows_no_one": "এই সদস্য কাউকে ফলো করছেন না :(",
"has_no_posts": "This user hasn't posted anything yet.",
"has_no_topics": "This user hasn't posted any topics yet.",
"has_no_watched_topics": "This user hasn't watched any topics yet.",
"has_no_posts": "এই সদস্য এখন পর্যন্ত কোন পোস্ট করেন নি",
"has_no_topics": "এই সদস্য এখনো কোন টপিক করেন নি",
"has_no_watched_topics": "এই সদস্য এখনো কোন টপিক দেখেন নি",
"email_hidden": "ইমেইল গোপন রাখা হয়েছে",
"hidden": "গোপন করা হয়েছে",
"paginate_description": "Paginate topics and posts instead of using infinite scroll",
"paginate_description": "ইনফাইনাইট স্ক্রলের বদলে টপিক ও পোস্টের জন্য পেজিনেশন ব্যাবহার করা হোক",
"topics_per_page": "প্রতি পেজে কতগুলো টপিক থাকবে",
"posts_per_page": "প্রতি পেইজে কতগুলো পোষ্ট থাকবে",
"notification_sounds": "Play a sound when you receive a notification",
"notification_sounds": "নোটিফিকেশনের জন্য নোটিফিকেশন সাউন্ড এনাবল করুন",
"browsing": "Browsing সেটিংস",
"open_links_in_new_tab": "Open outgoing links in new tab",
"open_links_in_new_tab": "আউটগোয়িং লিংকগুলো নতুন ট্যাবে খুলুন",
"enable_topic_searching": "In-Topic সার্চ সক্রীয় করো",
"topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen",
"follow_topics_you_reply_to": "Follow topics that you reply to",

View File

@@ -5,17 +5,17 @@
"search": "খুঁজুন",
"enter_username": "ইউজারনেম এর ভিত্তিতে সার্চ করুন",
"load_more": "আরো লোড করুন",
"users-found-search-took": "%1 user(s) found! Search took %2 seconds.",
"filter-by": "Filter By",
"online-only": "Online only",
"picture-only": "Picture only",
"invite": "Invite",
"invitation-email-sent": "An invitation email has been sent to %1",
"user_list": "User List",
"recent_topics": "Recent Topics",
"popular_topics": "Popular Topics",
"unread_topics": "Unread Topics",
"categories": "Categories",
"tags": "Tags",
"map": "Map"
"users-found-search-took": "%1 জন সদস্য(দের) খুঁজে পাওয়া গেছে। খুঁজতে সময় লেগেছে %2 সেকেন্ড ",
"filter-by": "ফিল্টার করার ধরন",
"online-only": "শুধুমাত্র অনলাইন",
"picture-only": "শুধুমাত্র ছবি",
"invite": "ইনভাইট",
"invitation-email-sent": "%1 কে একটি ইনভাইটেশন ইমেইল পাঠানো হয়েছে",
"user_list": "সদস্য তালিকা",
"recent_topics": "সাম্প্রতিক টপিক",
"popular_topics": "জনপ্রিয় টপিক",
"unread_topics": "অপঠিত টপিক",
"categories": "বিভাগ",
"tags": "ট্যাগসমূহ",
"map": "ম্যাপ"
}

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> has posted a reply to: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email Confirmed",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> har anmeldt et indlæg i <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> har skrevet et svar til: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> har oprettet en ny tråd: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> nævnte dig i <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> har valgt at følge dig.",
"new_register": "<strong>%1</strong> har sendt en registrerings anmodning.",
"email-confirmed": "Email bekræftet",

View File

@@ -6,7 +6,7 @@
"greeting_with_name": "Hallo %1",
"welcome.text1": "Vielen Dank für die Registrierung bei %1!",
"welcome.text2": "Um dein Konto vollständig zu aktivieren, müssen wir überprüfen, ob du Besitzer der E-Mail-Adresse bist, mit der du dich registriert hast.",
"welcome.text3": "Ein Administrator hat deine Registration aktzeptiert. Du kannst dich jetzt mit deinem Benutzernamen/Passwort einloggen.",
"welcome.text3": "Ein Administrator hat deine Registrierung aktzeptiert. Du kannst dich jetzt mit deinem Benutzernamen/Passwort einloggen.",
"welcome.cta": "Klicke hier, um deine E-Mail-Adresse zu bestätigen.",
"invitation.text1": "%1 hat dich eingeladen %2 beizutreten",
"invitation.ctr": "Klicke hier, um ein Konto zu erstellen.",
@@ -25,7 +25,7 @@
"notif.chat.cta": "Klicke hier, um die Unterhaltung fortzusetzen",
"notif.chat.unsub.info": "Diese Chat-Benachrichtigung wurde dir aufgrund deiner Abonnement-Einstellungen gesendet.",
"notif.post.cta": "Hier klicken, um das gesamte Thema zu lesen",
"notif.post.unsub.info": "Diese Mitteilung wurde wegen ihrer Abonnement-Einstellung gesendet.",
"notif.post.unsub.info": "Diese Mitteilung wurde dir aufgrund deiner Abonnement-Einstellungen gesendet.",
"test.text1": "Dies ist eine Test-E-Mail, um zu überprüfen, ob der E-Mailer deines NodeBB korrekt eingestellt wurde.",
"unsub.cta": "Klicke hier, um diese Einstellungen zu ändern.",
"closing": "Danke!"

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> hat einen Beitrag in </strong>%2</strong> gemeldet",
"user_posted_to": "<strong>%1</strong> hat auf <strong>%2</strong> geantwortet.",
"user_posted_topic": "<strong>%1</strong> hat ein neues Thema erstellt: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> erwähnte dich in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> folgt dir jetzt.",
"new_register": "<strong>%1</strong> hat eine Registrationsanfrage geschickt.",
"email-confirmed": "E-Mail bestätigt",

View File

@@ -27,7 +27,7 @@
"account/edit/password": "Bearbeite Passwort von \"%1\"",
"account/edit/username": "Bearbeite Benutzernamen von \"%1\"",
"account/edit/email": "Bearbeite E-Mail von \"%1\"",
"account/following": "Nutzer, die %1 folgt",
"account/following": "Nutzer, denen %1 folgt",
"account/followers": "Nutzer, die %1 folgen",
"account/posts": "Beiträge von %1",
"account/topics": "Themen verfasst von %1",

View File

@@ -24,8 +24,8 @@
"reputation": "Reputation",
"favourites": "Favoriten",
"watched": "Beobachtet",
"followers": "Folger",
"following": "Folgt",
"followers": "Follower",
"following": "Folge ich",
"aboutme": "Über mich",
"signature": "Signatur",
"birthday": "Geburtstag",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "Ο/Η <strong>%1</strong> επεσήμανε μια δημοσίευσή σου στο <strong>%2</strong>",
"user_posted_to": "Ο/Η <strong>%1</strong> έγραψε μια απάντηση στο: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "Ο/Η <strong>%1</strong> σε ανέφερε στο <strong>%2</strong>",
"user_started_following_you": "Ο/Η <strong>%1</strong> σε ακολουθεί.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Το Εmail Επιβεβαιώθηκε",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> has posted a reply to: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email Confirmed",

View File

@@ -20,7 +20,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to" : "<strong>%1</strong> has posted a reply to: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> has posted a reply to: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email Confirmed",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> ha reportado una respuesta en <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> ha respondido a: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> ha publicado un nuevo tema: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> te mencionó en <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> comenzó a seguirte.",
"new_register": "<strong>%1</strong> envió una solicitud de registro.",
"email-confirmed": "Correo electrónico confirmado",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> raporteeris postitust <strong>%2</strong>",
"user_posted_to": "Kasutaja <strong>%1</strong> postitas vastuse teemasse <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> on postitanud uue teema: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mainis sind postituses <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> hakkas sind jälgima.",
"new_register": "<strong>%1</strong> saatis registreerimistaotluse.",
"email-confirmed": "Emaili aadress kinnitatud",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> دیدگاه شما را در <strong>%2</strong> علامتدار کرده",
"user_posted_to": "پاسخ دادن به <strong>%2</strong> از سوی <strong>%1</strong>",
"user_posted_topic": "<strong>%1</strong> یک جستار جدید ارسال کرده: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> در \n<strong>%1</strong> mentioned you in <strong>%2</strong> از شما نام برده",
"user_started_following_you": "<strong>%1</strong> شروع به دنبال کردن شما کرده",
"new_register": "<strong>%1</strong> یک درخواست ثبت نام ارسال کرده است",
"email-confirmed": "رایانامه تایید شد",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> on vastannut viestiin: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> on kirjoittanut uuden aiheen: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mainitsi sinut viestissä <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> alkoi seurata sinua.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Sähköpostiosoite vahvistettu",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> a signalé un message dans <strong>%2</strong>.",
"user_posted_to": "<strong>%1</strong> a répondu à : <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> a posté un nouveau sujet: <strong>%2</strong>.",
"user_mentioned_you_in": "<strong>%1</strong> vous a mentionné dans <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> vous suit.",
"new_register": "<strong>%1</strong> a envoyé une demande d'incription.",
"email-confirmed": "Email vérifié",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> reportou unha mensaxe en <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> publicou unha resposta en: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> publicou un novo tema: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mencionóute en <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> comezou a seguirte.",
"new_register": "<strong>%1</strong> enviou unha petición de rexistro.",
"email-confirmed": "Correo confirmado",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> דיווח על פוסט ב <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> פרסם תגובה ל: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> העלה נושא חדש: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> הזכיר אותך ב <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> התחיל לעקוב אחריך.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "כתובת המייל אושרה",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> has posted a reply to: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email Confirmed",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> menandai sebuah posting di <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> telah mengirim sebuah balasan kepada: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> telah membuat topik baru: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> menyebut mu di <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> mulai mengikutimu.",
"new_register": "<strong>%1</strong> mengirim permintaan registrasi.",
"email-confirmed": "Email telah Dikonfirmasi",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> ha segnalato un post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> ha postato una risposta a: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> ha postato un nuovo Topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> ti ha menzionato in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> ha iniziato a seguirti.",
"new_register": "<strong>%1</strong> ha inviato una richiesta di registrazione.",
"email-confirmed": "Email Confermata",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> は <strong>%2</strong> への返事を作成しました。",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email Confirmed",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong>님이 <strong>%2</strong>의 게시물을 신고했습니다.",
"user_posted_to": "<strong>%1</strong>님이 <strong>%2</strong>에 답글을 작성했습니다.",
"user_posted_topic": "<strong>%1</strong>님이 새 주제를 작성했습니다: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong>님이 <strong>%2</strong>에서 나를 언급했습니다.",
"user_started_following_you": "<strong>%1</strong>님이 나를 팔로우합니다.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "확인된 이메일",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong>pagrįso nuomone čia <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> parašė atsaką <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> paskelbė naują temą: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> paminėjo Jus <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> pradėjo sekti tave",
"new_register": "<strong>%1</strong> atsiuntė registracijos prašymą",
"email-confirmed": "El. paštas patvirtintas",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> menanda kiriman anda di <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> telah membalas kiriman kepada: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> membuka topik baru : <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> sebut anda di <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> mula mengikut anda.",
"new_register": "<strong>%1</strong> menghantar jemputan pendaftaran.",
"email-confirmed": "Emel Disahkan",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> har flagget et innlegg i <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> har skrevet et svar til: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> har skrevet et nytt emne: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> nevnte deg i <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> begynte å følge deg.",
"new_register": "<strong>%1</strong> sendte en forespørsel om registrering",
"email-confirmed": "E-post bekreftet",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> rapporteerde een bericht in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> heeft een reactie geplaatst in <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> heeft een nieuw onderwerp geplaatst: <strong>%2</strong>",
"user_mentioned_you_in": "Onze naam is genoemd door <strong>%1</strong> in <strong>%2</strong>.",
"user_started_following_you": "<strong>%1</strong> volgt jou nu.",
"new_register": "<strong>%1</strong> heeft een registratie verzoek aangevraagd.",
"email-confirmed": "E-mailadres bevestigd",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1<strong> oflagował Twój post w <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> dodał odpowiedź do <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> wysłał nowy temat: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> wspomniał cię w <strong>%2</strong>",
"user_started_following_you": "<string>%1</strong> zaczął Cię śledzić.",
"new_register": "<strong>%1</strong> wysłał żądanie rejestracji.",
"email-confirmed": "E-mail potwierdzony",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> sinalizou um post em <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> postou uma resposta para: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> postou um novo tópico: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mencionou você em <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> começou a seguir você.",
"new_register": "<strong>%1</strong> lhe enviou um pedido de cadastro.",
"email-confirmed": "Email Confirmado",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> a semnalizat un mesaj în <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> a postat un răspuns la: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> te-a menționat în <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> a început să te urmărească.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email confirmat",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> пометил сообщение в <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> ответил на запись: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> открыл новую тему: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> упомянул Вас в <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> подписался на Вас.",
"new_register": "<strong>%1</strong> отправлен запрос на регистрацию.",
"email-confirmed": "Email подтвержден",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> yatambikanye ikintu muri <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> yanditse kuri: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> yatangije ikiganiro gishya: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> yakuvuze muri <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> yatangiye kugukurikira.",
"new_register": "<strong>%1</strong> yasabye kwandikwa.",
"email-confirmed": "Email Yemejwe",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> has posted a reply to: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email Confirmed",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> odpovedal: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email bol potvrdený",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong>je prijavil vašo objavo v <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> je odgovoril na: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> je odprl novo temo: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> te je omenil v <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> te sledi.",
"new_register": "<strong>%1</strong> je poslal prošnjo za registracijo.",
"email-confirmed": "E-mail naslov potrjen",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> означи поруку у <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> посла нови одговор за: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> постави нову тему:",
"user_mentioned_you_in": "<strong>%1</strong> вас помену у <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> поче да вас прати.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Е-пошта је је отврђена.",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flaggade ett inlägg i <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> har skrivit ett svar på: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> har skapat ett nytt ämne: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> nämnde dig i <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> började följa dig.",
"new_register": "<strong>%1</strong> skickade en registreringsförfrågan.",
"email-confirmed": "Epost bekräftad",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> has posted a reply to: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> started following you.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Email ได้รับการยืนยันแล้ว",

View File

@@ -58,7 +58,7 @@
"group-name-too-short": "Grup ismi çok kısa",
"group-already-exists": "Grup zaten var",
"group-name-change-not-allowed": "Grup ismini değiştiremezsiniz",
"group-already-member": "Already part of this group",
"group-already-member": "Bu grubun zaten bir parçasısın.",
"group-not-member": "Bu grubun bir üyesi yok",
"group-needs-owner": "Bu grubu en az bir kişi sahiplenmesi gerekiyor",
"group-already-invited": "Bu kullanıcı zaten davet edilmiş",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> bir iletiyi bayrakladı. <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> <strong>%2</strong> başlığına bir ileti gönderdi.",
"user_posted_topic": "<strong>%1</strong> yeni bir konu yarattı: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> <strong>%2</strong> başlığında sizden bahsetti.",
"user_started_following_you": "<strong>%1</strong> sizi takip etmeye başladı.",
"new_register": "<strong>%1</strong> kayıt olma isteği gönderdi.",
"email-confirmed": "E-posta onaylandı",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> gắn cờ 1 bài trong <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> đã trả lời <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> đã gởi chủ đề mới ở <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> nhắc đến bạn trong <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> đã theo dõi bạn.",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "Đã xác nhận email",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> 在 <strong>%2</strong> 标记了一个帖子",
"user_posted_to": "<strong>%1</strong> 回复了:<strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> 发表了新主题:<strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> 在 <strong>%2</strong> 中提到了您",
"user_started_following_you": "<strong>%1</strong>关注了您。",
"new_register": "<strong>%1</strong> 发出了注册请求",
"email-confirmed": "电子邮箱已确认",

View File

@@ -18,7 +18,6 @@
"user_flagged_post_in": "<strong>%1</strong> 舉報了 <strong>%2</strong>裡的一個post。",
"user_posted_to": "<strong>%1</strong> 發布一個回覆給: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> 發布了一個新的主題: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> 在 <strong>%2</strong>提到你",
"user_started_following_you": "<strong>%1</strong> 開始關注你。",
"new_register": "<strong>%1</strong> sent a registration request.",
"email-confirmed": "已確認電郵",

View File

@@ -1 +1,22 @@
.flag-reporters {
font-size: 1.2rem;
ul {
padding-left: 0;
li {
list-style-type: none;
img, .user-icon {
.user-icon-style(18px, 1rem);
margin-right: 1rem;
}
}
}
}
.flag-post-body {
img, .user-icon {
.user-icon-style(24px, 1.5rem);
}
}

View File

@@ -55,3 +55,24 @@
vertical-align: middle;
}
}
.avatar {
/* Contains the user icon class as a mixin, so there's no need to include that in the template */
.user-icon;
&.avatar-sm {
width: 24px;
height: 24px;
.user-icon-style(24px, 1.5rem);
}
&.avatar-lg {
width: 128px;
height: 128px;
.user-icon-style(128px, 7.5rem);
}
&.avatar-rounded {
border-radius: 50%;
}
}

View File

@@ -10,8 +10,13 @@ define('admin/appearance/skins', function() {
$('body').append(scriptEl);
$('#skins').on('click', function(e){
var target = $(e.target),
action = target.attr('data-action');
var target = $(e.target);
if (!target.attr('data-action')) {
target = target.parents('[data-action]');
}
var action = target.attr('data-action');
if (action && action === 'use') {
var parentEl = target.parents('[data-theme]'),
@@ -19,6 +24,7 @@ define('admin/appearance/skins', function() {
cssSrc = parentEl.attr('data-css'),
themeId = parentEl.attr('data-theme');
socket.emit('admin.themes.set', {
type: themeType,
id: themeId,

View File

@@ -60,10 +60,7 @@ define('admin/general/dashboard', ['semver'], function(semver) {
checkEl.append('<p>You are <strong>up-to-date</strong> <i class="fa fa-check"></i></p>');
} else if (semver.gt(latestVersion, version)) {
checkEl.removeClass('alert-info').addClass('alert-danger');
checkEl.append('<p>A new version (v' + latestVersion + ') has been released. Consider upgrading your NodeBB.</p>');
} else if (semver.gt(version, latestVersion)) {
checkEl.removeClass('alert-info').addClass('alert-warning');
checkEl.append('<p>You are running a <strong>development version</strong>! Unintended bugs may occur. <i class="fa fa-warning"></i></p>');
checkEl.append('<p>A new version (v' + latestVersion + ') has been released. Consider <a href="https://docs.nodebb.org/en/latest/upgrading/index.html">upgrading your NodeBB</a>.</p>');
}
});

View File

@@ -40,7 +40,7 @@ define('admin/manage/flags', [
return app.alertError(err.message);
}
$('.post-container').empty().text('No flagged posts!');
ajaxify.refresh();
});
});
}

View File

@@ -1,11 +1,9 @@
"use strict";
/* global config, socket, define, templates, bootbox, app, ajaxify, */
/* global config, socket, define, templates, bootbox, app, ajaxify */
define('admin/manage/users', ['admin/modules/selectable'], function(selectable) {
var Users = {};
Users.init = function() {
var yourid = ajaxify.data.yourid;
selectable.enable('#users-container', '.user-selectable');
function getSelectedUids() {
@@ -94,7 +92,7 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable)
return;
}
if (uids.indexOf(yourid) !== -1) {
if (uids.indexOf(app.user.uid.toString()) !== -1) {
app.alertError('You can\'t remove yourself as Administrator!');
} else {
socket.emit('admin.user.makeAdmins', uids, done('User(s) are now administrators.', '.administrator', true));
@@ -108,7 +106,7 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable)
return;
}
if (uids.indexOf(yourid.toString()) !== -1) {
if (uids.indexOf(app.user.uid.toString()) !== -1) {
app.alertError('You can\'t remove yourself as Administrator!');
} else {
bootbox.confirm('Do you really want to remove admins?', function(confirm) {

View File

@@ -38,13 +38,8 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll',
};
Chats.addEventListeners = function() {
$('.chats-list').on('click', 'li', function(e) {
var env = utils.findBootstrapEnvironment();
if (env === 'xs' || env === 'sm') {
app.openChat($(this).attr('data-username'), $(this).attr('data-uid'));
} else {
Chats.switchChat(parseInt($(this).attr('data-uid'), 10), $(this).attr('data-username'));
}
components.get('chat/recent').on('click', 'li', function(e) {
Chats.switchChat(parseInt($(this).attr('data-uid'), 10), $(this).attr('data-username'));
});
Chats.addSendHandlers(Chats.getRecipientUid(), $('.chat-input'), $('.expanded-chat button[data-action="send"]'));

View File

@@ -255,10 +255,12 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
pid: post.attr('data-pid'),
room_id: app.currentRoom
}, function(err) {
if (err.message === 'self-vote') {
showVotes(post.attr('data-pid'));
} else {
app.alertError(err.message);
if (err) {
if (err.message === 'self-vote') {
showVotes(post.attr('data-pid'));
} else {
app.alertError(err.message);
}
}
});
@@ -268,6 +270,11 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
function showVotes(pid) {
socket.emit('posts.getVoters', {pid: pid, cid: ajaxify.data.cid}, function(err, data) {
if (err) {
if (err.message === '[[error:no-privileges]]') {
return;
}
// Only show error if it's an unexpected error.
return app.alertError(err.message);
}

View File

@@ -115,7 +115,7 @@ $('document').ready(function() {
$.post('/launch', function() {
setInterval(function() {
$.get('/admin', function(data) {
$.get('/admin').done(function(data) {
window.location = 'admin';
});
}, 750);

View File

@@ -19,11 +19,6 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra
});
socket.on('event:chats.receive', function(data) {
if (ajaxify.currentPage.slice(0, 6) === 'chats/') {
// User is on the chats page, so do nothing (src/forum/chats.js will handle it)
return;
}
var username = data.message.fromUser.username;
var isSelf = parseInt(data.message.fromUser.uid, 10) === parseInt(app.user.uid, 10);
data.message.self = data.self;

View File

@@ -179,21 +179,68 @@ apiController.getObject = function(req, res, next) {
apiController.getUserByUID = function(req, res, next) {
var uid = req.params.uid ? req.params.uid : 0;
getUserByUID(uid, function(err, userData) {
if (err || !userData) {
return next(err);
}
res.json(userData);
});
};
apiController.getUserByUsername = function(req, res, next) {
var username = req.params.username ? req.params.username : 0;
async.waterfall([
function(next) {
user.getUidByUsername(username, next);
},
function(uid, next) {
getUserByUID(uid, next);
}
], function(err, userData) {
if (err || !userData) {
return next(err);
}
res.json(userData);
});
};
apiController.getUserByEmail = function(req, res, next) {
var email = req.params.email ? req.params.email : 0;
async.waterfall([
function(next) {
user.getUidByEmail(email, next);
},
function(uid, next) {
getUserByUID(uid, next);
}
], function(err, userData) {
if (err || !userData) {
return next(err);
}
res.json(userData);
});
};
function getUserByUID(uid, callback) {
async.parallel({
userData: async.apply(user.getUserData, uid),
settings: async.apply(user.getSettings, uid)
}, function(err, results) {
if (err || !results.userData) {
return next(err);
return callback(err, null);
}
results.userData.email = results.settings.showemail ? results.userData.email : undefined;
results.userData.fullname = results.settings.showfullname ? results.userData.fullname : undefined;
res.json(results.userData);
callback(null, results.userData);
});
};
}
apiController.getModerators = function(req, res, next) {
categories.getModerators(req.params.cid, function(err, moderators) {

View File

@@ -50,7 +50,16 @@ Controllers.home = function(req, res, next) {
} else if (route === 'popular') {
Controllers.popular.get(req, res, next);
} else {
res.redirect(route);
var match = /^category\/(\d+)\/(.*)$/.exec(route);
if (match) {
req.params.topic_index = "1";
req.params.category_id = match[1];
req.params.slug = match[2];
Controllers.categories.get(req, res, next);
} else {
res.redirect(route);
}
}
}
});

View File

@@ -14,13 +14,26 @@ var async = require('async'),
translator = require('../public/src/modules/translator'),
transports = {
direct: nodemailer.createTransport('direct')
direct: nodemailer.createTransport('direct'),
gmail: undefined
},
app;
(function(Emailer) {
Emailer.registerApp = function(expressApp) {
app = expressApp;
// Enable Gmail transport if enabled in ACP
if (parseInt(meta.config['email:GmailTransport:enabled'], 10) === 1) {
transports.gmail = nodemailer.createTransport('SMTP', {
service: 'Gmail',
auth: {
user: meta.config['email:GmailTransport:user'],
pass: meta.config['email:GmailTransport:pass']
}
});
}
return Emailer;
};
@@ -101,7 +114,8 @@ var async = require('async'),
data.text = data.plaintext;
delete data.plaintext;
transports.direct.sendMail(data, callback);
winston.verbose('[emailer] Sending email to uid ' + data.uid);
transports[transports.gmail ? 'gmail' : 'direct'].sendMail(data, callback);
};
function render(tpl, params, next) {

View File

@@ -133,19 +133,9 @@ var async = require('async'),
putVoteInProgress(pid, uid);
user.getUserField(uid, 'reputation', function(err, reputation) {
if (err) {
return callback(err);
}
if (reputation < parseInt(meta.config['privileges:downvote'], 10)) {
return callback(new Error('[[error:not-enough-reputation-to-downvote]]'));
}
toggleVote('downvote', pid, uid, function(err, data) {
clearVoteProgress(pid, uid);
callback(err, data);
});
toggleVote('downvote', pid, uid, function(err, data) {
clearVoteProgress(pid, uid);
callback(err, data);
});
};
@@ -197,6 +187,9 @@ var async = require('async'),
},
voteStatus: function(next) {
Favourites.hasVoted(pid, uid, next);
},
reputation: function(next) {
user.getUserField(uid, 'reputation', next);
}
}, function(err, results) {
if (err) {
@@ -207,6 +200,10 @@ var async = require('async'),
return callback(new Error('self-vote'));
}
if (command === 'downvote' && parseInt(results.reputation) < parseInt(meta.config['privileges:downvote'], 10)) {
return callback(new Error('[[error:not-enough-reputation-to-downvote]]'));
}
var voteStatus = results.voteStatus,
hook,
current = voteStatus.upvoted ? 'upvote' : 'downvote';

View File

@@ -10,7 +10,7 @@ var async = require('async'),
DATABASES = {
"redis": {
"dependencies": ["redis@~0.10.1", "connect-redis@~2.0.0"]
"dependencies": ["redis@~2.4.2", "connect-redis@~2.0.0"]
},
"mongo": {
"dependencies": ["mongodb@~2.0.0", "connect-mongo@~0.8.2"]

View File

@@ -222,7 +222,7 @@ middleware.privateUploads = function(req, res, next) {
middleware.busyCheck = function(req, res, next) {
if (global.env === 'production' && (!meta.config.hasOwnProperty('eventLoopCheckEnabled') || parseInt(meta.config.eventLoopCheckEnabled, 10) === 1) && toobusy()) {
res.type('text/html').sendFile(path.join(__dirname, '../../public/503.html'));
res.status(503).type('text/html').sendFile(path.join(__dirname, '../../public/503.html'));
} else {
next();
}

View File

@@ -9,9 +9,8 @@ module.exports = function(Posts) {
Posts.parsePost = function(postData, callback) {
postData.content = postData.content || '';
var cachedContent = cache.get(postData.pid);
if (cachedContent) {
postData.content = cachedContent;
if (postData.pid && cache.has(postData.pid)) {
postData.content = cache.get(postData.pid);
return callback(null, postData);
}
@@ -38,4 +37,4 @@ module.exports = function(Posts) {
plugins.fireHook('filter:parse.signature', {userData: userData, uid: uid}, callback);
};
};
};

View File

@@ -2,6 +2,7 @@
var winston = require('winston');
var nconf = require('nconf');
var async = require('async');
var db = require('./database');
var Reset = {};
@@ -81,11 +82,29 @@ function resetThemes(callback) {
}
function resetPlugin(pluginId) {
db.sortedSetRemove('plugins:active', pluginId, function(err) {
var active = false;
async.waterfall([
async.apply(db.isSortedSetMember, 'plugins:active', pluginId),
function(isMember, next) {
active = isMember;
if (isMember) {
db.sortedSetRemove('plugins:active', pluginId, next);
} else {
next();
}
}
], function(err) {
if (err) {
winston.error('[reset] Could not disable plugin: %s encountered error %s', pluginId, err.message);
} else {
winston.info('[reset] Plugin `%s` disabled', pluginId);
if (active) {
winston.info('[reset] Plugin `%s` disabled', pluginId);
} else {
winston.warn('[reset] Plugin `%s` was not active on this forum', pluginId);
winston.info('[reset] No action taken.');
}
}
process.exit();

View File

@@ -13,6 +13,9 @@ module.exports = function(app, middleware, controllers) {
router.get('/widgets/render', controllers.api.renderWidgets);
router.get('/user/uid/:uid', middleware.checkGlobalPrivacySettings, controllers.api.getUserByUID);
router.get('/user/username/:username', middleware.checkGlobalPrivacySettings, controllers.api.getUserByUsername);
router.get('/user/email/:email', middleware.checkGlobalPrivacySettings, controllers.api.getUserByEmail);
router.get('/:type/pid/:id', controllers.api.getObject);
router.get('/:type/tid/:id', controllers.api.getObject);
router.get('/:type/cid/:id', controllers.api.getObject);
@@ -28,7 +31,7 @@ module.exports = function(app, middleware, controllers) {
router.post('/post/upload', middlewares, uploadsController.uploadPost);
router.post('/topic/thumb/upload', middlewares, uploadsController.uploadThumb);
router.post('/user/:userslug/uploadpicture', middlewares.concat([middleware.authenticate, middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions]), controllers.accounts.edit.uploadPicture);
router.post('/user/:userslug/uploadcover', middlewares.concat([middleware.authenticate, middleware.checkGlobalPrivacySettings, middleware.checkAccountPermissions]), controllers.accounts.edit.uploadCoverPicture);
router.post('/groups/uploadpicture', middlewares.concat([middleware.authenticate]), controllers.groups.uploadCover);
};

View File

@@ -6,6 +6,7 @@ var nconf = require('nconf'),
controllers = require('../controllers'),
plugins = require('../plugins'),
express = require('express'),
validator = require('validator'),
accountRoutes = require('./accounts'),
@@ -195,7 +196,7 @@ function handleErrors(app, middleware) {
res.json({path: req.path, error: err.message});
} else {
middleware.buildHeader(req, res, function() {
res.render('500', {path: req.path, error: err.message});
res.render('500', {path: req.path, error: validator.escape(err.message)});
});
}
});

View File

@@ -32,7 +32,7 @@ var async = require('async'),
var confirm_code = utils.generateUUID(),
confirm_link = nconf.get('url') + '/confirm/' + confirm_code;
var emailInterval = 10;
var emailInterval = meta.config.hasOwnProperty('emailConfirmInterval') ? parseInt(meta.config.emailConfirmInterval, 10) : 10;
async.waterfall([
function(next) {

View File

@@ -10,9 +10,16 @@
<!-- BEGIN events -->
<div>
<span>#{events.eid} </span><span class="label label-info">{events.type}</span>
<a href="{config.relative_path}/user/{events.user.userslug}" target="_blank"><img class="user-img" src="{events.user.picture}"/></a> <a href="{config.relative_path}/user/{events.user.userslug}" target="_blank">{events.user.username}</a> (uid {events.user.uid}) (IP {events.ip})
<a href="{config.relative_path}/user/{events.user.userslug}" target="_blank">
<!-- IF events.user.picture -->
<img class="avatar avatar-sm" src="{events.user.picture}" />
<!-- ELSE -->
<div class="avatar avatar-sm" style="background-color: {events.user.icon:bgColor};">{events.user.icon:text}</div>
<!-- ENDIF events.user.picture -->
</a>
<a href="{config.relative_path}/user/{events.user.userslug}" target="_blank">{events.user.username}</a> (uid {events.user.uid}) (IP {events.ip})
<span class="pull-right">{events.timestampISO}</span>
<br/><br/>
<br /><br />
<pre>{events.jsonString}</pre>
</div>
<!-- END events -->

View File

@@ -30,42 +30,63 @@
<div class="post-container" data-next="{next}">
<!-- IF !posts.length -->
No flagged posts!
<div class="alert alert-success">
No flagged posts!
</div>
<!-- ENDIF !posts.length -->
<!-- BEGIN posts -->
<div>
<div class="panel panel-default" data-pid="{posts.pid}" data-tid="{posts.topic.tid}">
<div class="panel-body">
<a href="{config.relative_path}/user/{posts.user.userslug}">
<img title="{posts.user.username}" class="img-rounded user-img" src="{posts.user.picture}">
</a>
<div class="row">
<div class="col-sm-8">
<div class="panel panel-default" data-pid="{posts.pid}" data-tid="{posts.topic.tid}">
<div class="panel-body flag-post-body">
<a href="{config.relative_path}/user/{../user.userslug}">
<!-- IF ../user.picture -->
<img title="{posts.user.username}" src="{../user.picture}">
<!-- ELSE -->
<div class="user-icon" style="background-color: {../user.icon:bgColor};">{../user.icon:text}</div>
<!-- ENDIF ../user.picture -->
</a>
<a href="{config.relative_path}/user/{posts.user.userslug}">
<strong><span>{posts.user.username}</span></strong>
</a>
<div class="content">
<p>{posts.content}</p>
<p class="fade-out"></p>
<a href="{config.relative_path}/user/{../user.userslug}">
<strong><span>{../user.username}</span></strong>
</a>
<div class="content">
<p>{posts.content}</p>
<p class="fade-out"></p>
</div>
<small>
<span class="pull-right">
Posted in <a href="{config.relative_path}/category/{posts.category.slug}" target="_blank"><i class="fa {posts.category.icon}"></i> {posts.category.name}</a>, <span class="timeago" title="{posts.relativeTime}"></span> &bull;
<a href="{config.relative_path}/topic/{posts.topic.slug}/{posts.index}" target="_blank">Read More</a>
</span>
</small>
</div>
<small>
<span class="pull-right">
Posted in <a href="{config.relative_path}/category/{posts.category.slug}" target="_blank"><i class="fa {posts.category.icon}"></i> {posts.category.name}</a>, <span class="timeago" title="{posts.relativeTime}"></span> &bull;
<a href="{config.relative_path}/topic/{posts.topic.slug}/{posts.index}" target="_blank">Read More</a>
</span>
</small>
</div>
</div>
<span class="badge badge-warning"><i class="fa fa-flag"></i> {posts.flags}</span>
<br/>
<!-- BEGIN posts.flagReasons -->
<a target="_blank" href="{config.relative_path}/user/{../user.userslug}"><img class="user-img" src="{../user.picture}">{../user.username}</a>: "{../reason}" <br/>
<!-- END posts.flagReasons -->
<br/>
<button class="btn btn-warning dismiss">Dismiss</button>
<button class="btn btn-danger delete">Delete</button>
<br/><br/>
<div class="col-sm-4">
<i class="fa fa-flag"></i> This post has been flagged {posts.flags} time(s):
<blockquote class="flag-reporters">
<ul>
<!-- BEGIN posts.flagReasons -->
<li>
<a target="_blank" href="{config.relative_path}/user/{../user.userslug}">
<!-- IF ../user.picture -->
<img src="{../user.picture}" />
<!-- ELSE -->
<div class="user-icon" style="background-color: {../user.icon:bgColor};">{../user.icon:text}</div>
<!-- ENDIF ../user.picture -->
{../user.username}
</a>: "{../reason}"
</li>
<!-- END posts.flagReasons -->
</ul>
</blockquote>
<div class="btn-group">
<button class="btn btn-sm btn-success dismiss">Dismiss</button>
<button class="btn btn-sm btn-danger delete">Delete</button>
</div>
</div>
</div>
<!-- END posts -->
</div>

View File

@@ -8,7 +8,13 @@
<!-- IF privileges.users.length -->
<!-- BEGIN privileges.users -->
<tr data-uid="{privileges.users.uid}">
<td><img src="{privileges.users.picture}" title="{privileges.users.username}" /></td>
<td>
<!-- IF ../picture -->
<img class="avatar avatar-sm" src="{privileges.users.picture}" title="{privileges.users.username}" />
<!-- ELSE -->
<div class="avatar avatar-sm" style="background-color: {../icon:bgColor};">{../icon:text}</div>
<!-- ENDIF ../picture -->
</td>
<td>{privileges.users.username}</td>
{function.spawnPrivilegeStates, privileges.users.username, privileges}
</tr>

View File

@@ -4,9 +4,6 @@
<div class="col-sm-2 col-xs-12 settings-header">Email Settings</div>
<div class="col-sm-10 col-xs-12">
<form>
<p>
Please ensure that you have installed a third-party emailer (e.g. PostageApp, Mailgun, Mandrill, SendGrid, etc), otherwise emails will not be sent by NodeBB
</p>
<div class="form-group">
<label for="email:from"><strong>Email Address</strong></label>
<p class="help-block">
@@ -25,6 +22,31 @@
</div>
</div>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Gmail Routing</div>
<div class="col-sm-10 col-xs-12">
<form>
<div class="checkbox">
<label for="email:GmailTransport:enabled" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" id="email:GmailTransport:enabled" data-field="email:GmailTransport:enabled" name="email:GmailTransport:enabled" />
<span class="mdl-switch__label">Route emails through a Gmail/Google Apps account</span>
</label>
</div>
<div class="form-group">
<label for="email:GmailTransport:user"><strong>Username</strong></label>
<input type="text" class="form-control input-lg" id="email:GmailTransport:user" data-field="email:GmailTransport:user" placeholder="admin@example.org" /><br />
<p class="help-block">
Enter the full email address here, especially if you are using a Google Apps managed domain.
</p>
</div>
<div class="form-group">
<label for="email:GmailTransport:pass"><strong>Password</strong></label>
<input type="password" class="form-control input-lg" id="email:GmailTransport:pass" data-field="email:GmailTransport:pass" /><br />
</div>
</form>
</div>
</div>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Edit Email Template</div>
<div class="col-sm-10 col-xs-12">

View File

@@ -18,6 +18,12 @@
</label>
</div>
<div class="form-group form-inline">
<label for="emailConfirmInterval">User may not resend a confirmation email until</label>
<input class="form-control" data-field="emailConfirmInterval" type="number" id="emailConfirmInterval" placeholder="Default: 10" value="10" />
<label for="emailConfirmInterval">minutes have elapsed</label>
</div>
<div class="form-group">
<label>Allow login with</label>
<select class="form-control" data-field="allowLoginWith">

View File

@@ -121,7 +121,7 @@ function cacheStaticFiles(callback) {
}
function listen(callback) {
var port = nconf.get('port');
var port = parseInt(nconf.get('port'), 10);
if (Array.isArray(port)) {
if (!port.length) {
@@ -138,7 +138,7 @@ function listen(callback) {
}
}
if (port !== 80 && port !== 443 && nconf.get('use_port') === false) {
if ((port !== 80 && port !== 443) || nconf.get('trust_proxy') === true) {
winston.info('Enabling \'trust proxy\'');
app.enable('trust proxy');
}