* Add post images hook
This hook would allow plugins to manipulate images inside posts after images are manipulated by nodebb (for example, delay loading). Without this hook we can manipulate images by searching post data for them and manipulate that data, but any change on that level is either erased by nodebb once image loading starts (if delay is turned on) or it disables native image behaviour by changing image code so native behaviour is not triggered.
Hook at this place works for both delayed loading turned on and off.
Usage for this kind of hook was talked about here: https://community.nodebb.org/topic/10960/opening-uploaded-images-in-modal-windows
* trying to fix Travis error
* Update images.js
Hook moved out of wrapImagesInLinks function to places where images are actually loaded. One of the places is inside unloadImage function but in place where loading is happening because of failed if check (delayImageLoading not se in users configuration).
* Adds the filter:uploadStored hook which fires after the file is saved in the async waterfall and passes:
var storedFile = {
url: nconf.get('relative_path') + upload.url,
path: upload.path,
name: uploadedFile.name,
}
plugins.fireHook( 'filter:uploadStored', { uploadedFile: uploadedFile, storedFile: storedFile } );
* Corrections per PR. Should match style guide.
* Correction attempts take 2.
Per:
/home/travis/build/NodeBB/NodeBB/src/controllers/uploads.js
234:5 error Missing semicolon semi
235:3 error Expected indentation of 3 tabs but found 2 indent
235:19 error There should be no spaces inside this paren space-in-parens
235:105 error There should be no spaces inside this paren space-in-parens
236:3 error Expected indentation of 3 tabs but found 2 indent
* next() shouldn't fire twice, but I see no documentation suggesting that the paramaters will fire correctly.
Previous comments imply it is preferred to have fireHook fire fof the callback rather than having it happen next, so I'm wrapping next in an anonymous function to ensure it passes the parameters.
If this is not the preferred method, please provide a thorough correction.
* Meh. Figuring out this style requirement is so hit and miss.
* Corrected for proper callback? technique.
Might blow up on style. Will watch.
This fixes the following error:
$ wget https://nodebb.yourdomain/apple-touch-icon
28/6 09:57:06 [28332] - error: /apple-touch-icon
Error: ENOENT: no such file or directory, stat '/home/sweet/nodebb/public/assets/uploads/system/touchicon-orig.png'
at Error (native)
- Target aliases and bundles
- More concurrency
- Use `--series` to force series processing
- Minifier self-hosted threading
- meta/css delegates to minifier
if the `src` of the `img` does not have an extension, most browsers will trigger a download with whatever filename is set, also without an extension, so when it's opened in any OS, it wont have a default application to open it with.
So, In this case, if the `alt` attribute has an extension (meaning if it looks like filename) - we use that with the html5 [`download` attr](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download)
The PR does not affect any src if they have an extension.
- Fix sound ACP uploads
- Display soundpack names with sound files
- Soundpacks can have sounds with identical names
- Link sounds during build step
- Generate map of sound name to file name during build step
- Change how soundpacks work. It's now done via a field in plugin.json
- Route `/assets` -> `build/public`, falling back on `public`
- Moved destinations for `nodebb.min.js`, `acp.min.js`, `admin.css`, `stylesheet.css`, `templates`, and `sounds` to `build/public`
- r.js modules previously routed through express are now symlinked into `public/build/src/modules`
- minfiles no longer served from a memory cache
- use config `views_dir` setting everywhere template directory is used
- fix cache buster `v=v=`
- Fix privilege table headers so bottom borders align
- Fix `/admin` route to show Dashboard title correctly
- Translate ACP category management and privileges templates
- Translate ACP category management JS
- Remove unnecessary translates in JS
- Fix bootbox wrapper to work with translations containing html
- Search uses translated titles if available
- Use `advanced` for `development` route titles
- Remove route title from showing up in results
- Highlight matching part of result title
- Don't show empty result contents when only title is matched
- Replaced minfied bootbox file with unminified one since it's minified at build anyways
- Removed existing override
- Made translator more verbose in dev mode; it now warns about missing translations
I got a lot of errors in Firefox 50 `TypeError: $(...).attr(...) is undefined nodebb.min.js:25167:24` which points exactly to that line I’ve changed.
Since HTML5 `href` is not a required attribute of an `a` tag. We have a couple of links without `href` and every time you click it you will get this error.
In Redis, scores of sorted sets can be floats – so we should use `parseFloat` instead of `parseInt` when converting from string to number.
Should not lead to #4939 again, as `new Date()` works regardless of whether it's being passed a float or integer.
* Use standard language codes. Fallback for plugins.
* Fix transifex config
* Tab vs space here for some reason
* Remove redundancies
* config.relative_path instead of allcaps
* added upgrade script for existing users' accounts
On socket.io connection, all clients join a room pertaining to
their express session id. We use this room to keep track of any
sessions in different browser windows (but the same cookie jar),
so if a login/logout occurs, we can throw a session mismatch
modal.
This room can also be used to emit messages across windows/tabs...
First of all, thank you! Please consider this [style guide](https://docs.nodebb.org/en/latest/contributing/style-guide.html) when submitting your changes. Also, please join our [community](https://community.nodebb.org) to meet other NodeBB developers and designers :)
First of all, thank you! Before submission, please run `npm test` to lint and run the automated NodeBB tests. If everything passes, you're good to go. If you have any errors, please fix them and re-run `npm test` to make sure there aren't any others.
## Styleguide and linting
NodeBB mostly conforms to the [AirBnB Javascript style guide](https://github.com/airbnb/javascript#readme). If you're running into a lot of ESlint errors, you may want to install an editor plugin to display them in real time.
## Contributor License Agreement
@@ -34,11 +38,9 @@ There is a chance that the issue you are experiencing may have already been fixe
You can find the NodeBB version number in the Admin Control Panel (ACP), as well as the first line output to the shell when running NodeBB
``` plaintext
info: NodeBB v0.5.2-dev Copyright (C) 2013-2014 NodeBB Inc.
info: This program comes with ABSOLUTELY NO WARRANTY.
info: This is free software, and you are welcome to redistribute it under certain conditions.
info:
info: Time: Tue Oct 07 2014 20:25:20 GMT-0400 (EDT)
3/4 12:38:57 [10752] - info: This program comes with ABSOLUTELY NO WARRANTY.
3/4 12:38:57 [10752] - info: This is free software, and you are welcome to redistribute it under certain conditions.
```
If you are running NodeBB via git, it is also helpful to let the maintainers know what commit hash you are on. To find the commit hash, execute the following command:
@@ -51,12 +53,13 @@ $ git rev-parse HEAD
If you have downloaded the `.zip` or `.tar.gz` packages from GitHub (or elsewhere), please let us know.
## Provide theme versions if issue is related to the theme/display
Use `npm ls` to list the versions of the theme you're using. In this example, we're running the Persona theme, which depends on the Vanilla theme.
``` bash
$ npm ls nodebb-theme-vanilla nodebb-theme-lavender
winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:');
winston.warn(' ./nodebb upgrade');
break;
case'dependencies-out-of-date':
winston.warn('One or more of NodeBB\'s dependent packages are out-of-date. Please run the following command to update them:');
winston.warn(' ./nodebb upgrade');
break;
case'dependencies-missing':
winston.warn('One or more of NodeBB\'s dependent packages are missing. Please run the following command to update them:');
winston.warn(' ./nodebb upgrade');
break;
default:
if(err.stacktrace!==false){
winston.error(err.stack);
}else{
winston.error(err.message);
}
break;
}
// Either way, bad stuff happened. Abort start.
process.exit();
}
});
if(typeofcallback==='function'){
callback();
}
}
functionsetup(){
winston.info('NodeBB Setup Triggered via Command Line');
varinstall=require('./src/install');
varbuild=require('./src/meta/build');
process.stdout.write('\nWelcome to NodeBB!\n');
process.stdout.write('\nThis looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.\n');
process.stdout.write('Press enter to accept the default setting (shown in brackets).\n');
process.stdout.write('\nPackage upgrades skipped'.yellow + '. Check for upgrades at any time by running "'.reset + './nodebb upgrade-plugins'.green + '".\n'.reset);
callback();
}
});
});
}
prompt.message = '';
prompt.delimiter = '';
prompt.start();
prompt.get({
name: 'upgrade',
description: 'Proceed with upgrade (y|n)?'.reset,
type: 'string'
}, function (err, result) {
if (err) {
return callback(err);
}
if (['y', 'Y', 'yes', 'YES'].indexOf(result.upgrade) !== -1) {
process.stdout.write('\t"' + './nodebb stop'.yellow + '" to stop the NodeBB server\n');
process.stdout.write('\t"' + './nodebb log'.yellow + '" to view server output\n');
process.stdout.write('\t"' + './nodebb restart'.yellow + '" to restart NodeBB\n\n');
} else {
process.stdout.write('\nPackage upgrades skipped'.yellow + '. Check for upgrades at any time by running "'.reset + './nodebb upgrade-plugins'.green + '".\n'.reset);
callback();
process.stdout.write('\nNodeBB is not running\n'.bold);
process.stdout.write('\t"' + './nodebb start'.yellow + '" to launch the NodeBB server\n\n'.reset);
}
});
});
};
},
},
start: {
description: 'Start the NodeBB server',
usage: 'Usage: ' + './nodebb start'.yellow,
handler: function () {
process.stdout.write('\nStarting NodeBB\n'.bold);
process.stdout.write(' "' + './nodebb stop'.yellow + '" to stop the NodeBB server\n');
process.stdout.write(' "' + './nodebb log'.yellow + '" to view server output\n');
process.stdout.write(' "' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'.reset);
"custom-css.description":"Enter your own CSS declarations here, which will be applied after all other styles.",
"custom-css.enable":"Enable Custom CSS",
"custom-header":"Custom Header",
"custom-header.description":"Enter custom HTML here (ex. JavaScript, Meta Tags, etc.), which will be appended to the <code><head></code> section of your forum's markup.",
"custom-header.enable":"Enable Custom Header",
"custom-css.livereload":"Enable Live Reload",
"custom-css.livereload.description":"Enable this to force all sessions on every device under your account to refresh whenever you click save"
"description":"By enabling the check boxes, you will receive logs to your terminal. If you specify a path, logs will then be saved to a file instead. HTTP logging is useful for collecting statistics about who, when, and what people access on your forum. In addition to logging HTTP requests, we can also log socket.io events. Socket.io logging, in combination with redis-cli monitor, can be very helpful for learning NodeBB's internals.",
"explanation":"Simply check/uncheck the logging settings to enable or disable logging on the fly. No restart needed.",
"enable-http":"Enable HTTP logging",
"enable-socket":"Enable socket.io event logging",
"file-path":"Path to log file",
"file-path-placeholder":"/path/to/log/file.log ::: leave blank to log to your terminal",
"plugin-search-placeholder":"Search for plugin...",
"reorder-plugins":"Re-order Plugins",
"order-active":"Order Active Plugins",
"dev-interested":"Interested in writing plugins for NodeBB?",
"docs-info":"Full documentation regarding plugin authoring can be found in the <a target=\"_blank\" href=\"https://docs.nodebb.org/development/plugins/\">NodeBB Docs Portal</a>.",
"order.description":"Certain plugins work ideally when they are initialised before/after other plugins.",
"order.explanation":"Plugins load in the order specified here, from top to bottom",
"plugin-item.themes":"Themes",
"plugin-item.deactivate":"Deactivate",
"plugin-item.activate":"Activate",
"plugin-item.install":"Install",
"plugin-item.uninstall":"Uninstall",
"plugin-item.settings":"Settings",
"plugin-item.installed":"Installed",
"plugin-item.latest":"Latest",
"plugin-item.upgrade":"Upgrade",
"plugin-item.more-info":"For more information:",
"plugin-item.unknown":"Unknown",
"plugin-item.unknown-explanation":"The state of this plugin could not be determined, possibly due to a misconfiguration error.",
"alert.enabled":"Plugin Enabled",
"alert.disabled":"Plugin Disabled",
"alert.upgraded":"Plugin Upgraded",
"alert.installed":"Plugin Installed",
"alert.uninstalled":"Plugin Uninstalled",
"alert.activate-success":"Please restart your NodeBB to fully activate this plugin",
"alert.upgrade-success":"Please reload your NodeBB to fully upgrade this plugin",
"alert.install-success":"Plugin successfully installed, please activate the plugin.",
"alert.uninstall-success":"The plugin has been successfully deactivated and uninstalled.",
"alert.suggest-error":"<p>NodeBB could not reach the package manager, proceed with installation of latest version?</p><div class=\"alert alert-danger\"><strong>Server returned (%1)</strong>: %2</div>",
"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>"
"page-views-custom-help":"Enter a date range of page views you would like to view. If no date picker is available, the accepted format is <code>YYYY-MM-DD</code>",
"page-views-custom-error":"Please enter a valid date range in the format <code>YYYY-MM-DD</code>",
"stats.day":"Day",
"stats.week":"Week",
"stats.month":"Month",
"stats.all":"All Time",
"updates":"Updates",
"running-version":"You are running <strong>NodeBB v<span id=\"version\">%1</span></strong>.",
"keep-updated":"Always make sure that your NodeBB is up to date for the latest security patches and bug fixes.",
"up-to-date":"<p>You are <strong>up-to-date</strong> <i class=\"fa fa-check\"></i></p>",
"upgrade-available":"<p>A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\">upgrading your NodeBB</a>.</p>",
"prerelease-upgrade-available":"<p>This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\">upgrading your NodeBB</a>.</p>",
"prerelease-warning":"<p>This is a <strong>pre-release</strong> version of NodeBB. Unintended bugs may occur. <i class=\"fa fa-exclamation-triangle\"></i></p>",
"running-in-development":"<span>Forum is running in development mode. The forum may be open to potential vulnerabilities; please contact your system administrator.</span>",
"description":"The default language determines the language settings for all users who are visiting your forum. <br />Individual users can override the default language on their account settings page.",
"default-language":"Default Language",
"auto-detect":"Auto Detect Language Setting for Guests"
"optional-clone-settings":"(Optional) Clone Settings From Category",
"purge":"Purge Category",
"enable":"Enable",
"disable":"Disable",
"edit":"Edit",
"select-category":"Select Category",
"set-parent-category":"Set Parent Category",
"privileges.description":"You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or a per-group basis. You can add a new user to this table by searching for them in the form below.",
"privileges.warning":"<strong>Note</strong>: Privilege settings take effect immediately. It is not necessary to save the category after adjusting these settings.",
"privileges.no-users":"No user-specific privileges in this category.",
"privileges.section-group":"Group",
"privileges.group-private":"This group is private",
"privileges.search-group":"Add Group",
"privileges.copy-to-children":"Copy to Children",
"privileges.copy-from-category":"Copy from Category",
"privileges.inherit":"If the <code>registered-users</code> group is granted a specific privilege, all other groups receive an <strong>implicit privilege</strong>, even if they are not explicitly defined/checked. This implicit privilege is shown to you because all users are part of the <code>registered-users</code> user group, and so, privileges for additional groups need not be explicitly granted.",
"analytics.back":"Back to Categories List",
"analytics.title":"Analytics for \"%1\" category",
"analytics.pageviews-hourly":"<strong>Figure 1</strong> – Hourly page views for this category</small>",
"analytics.pageviews-daily":"<strong>Figure 2</strong> – Daily page views for this category</small>",
"analytics.topics-daily":"<strong>Figure 3</strong> – Daily topics created in this category</small>",
"analytics.posts-daily":"<strong>Figure 4</strong> – Daily posts made in this category</small>",
"alert.none-active":"You have no active categories.",
"alert.create":"Create a Category",
"alert.confirm-moderate":"<strong>Are you sure you wish to grant the moderation privilege to this user group?</strong> This group is public, and any users can join at will.",
"alert.confirm-purge":"<p class=\"lead\">Do you really want to purge this category \"%1\"?</p><h5><strong class=\"text-danger\">Warning!</strong> All topics and posts in this category will be purged!</h5> <p class=\"help-block\">Purging a category will remove all topics and posts, and delete the category from the database. If you want to remove a category <em>temporarily</em>, you'll want to \"disable\" the category instead.</p>",
"description":"Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and they will be prevented from logging in to or registering a new account.",
"active-rules":"Active Rules",
"validate":"Validate Blacklist",
"apply":"Apply Blacklist",
"hints":"Syntax Hints",
"hint-1":"Define a single IP addresses per line. You can add IP blocks as long as they follow the CIDR format (e.g. <code>192.168.100.0/22</code>).",
"hint-2":"You can add in comments by starting lines with the <code>#</code> symbol.",
"validate.x-valid":"<strong>%1</strong> out of <strong>%2</strong> rule(s) valid.",
"validate.x-invalid":"The following <strong>%1</strong> rules are invalid:",
"description":"There are no users in the registration queue. <br> To enable this feature, go to <a href=\"%1\">Settings → User → User Registration</a> and set <strong>Registration Type</strong> to \"Admin Approval\".",
"invitations.description":"Below is a complete list of invitations sent. Use ctrl-f to search through the list by email or username. <br><br>The username will be displayed to the right of the emails for users who have redeemed their invitations.",
"alerts.password-reset-confirm":"Do you want to send password reset email(s) to these user(s)?",
"alerts.confirm-delete":"<b>Warning!</b><br/>Do you really want to delete user(s)?<br/> This action is not reversable! Only the user account will be deleted, their posts and topics will remain.",
"alerts.delete-success":"User(s) Deleted!",
"alerts.confirm-purge":"<b>Warning!</b><br/>Do you really want to delete user(s) and their content?<br/> This action is not reversable! All user data and content will be erased!",
"alerts.create":"Create User",
"alerts.button-create":"Create",
"alerts.button-cancel":"Cancel",
"alerts.error-passwords-different":"Passwords must match!",
"maintenance-mode.help":"When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.",
"maintenance-mode.message":"Maintenance Message",
"headers":"Headers",
"headers.allow-from":"Set ALLOW-FROM to Place NodeBB in an iFrame",
"headers.powered-by":"Customise the \"Powered By\" header sent by NodeBB",
"headers.acao":"Access-Control-Allow-Origin",
"headers.acao-help":"To deny access to all sites, leave empty",
"headers.acam":"Access-Control-Allow-Methods",
"headers.acah":"Access-Control-Allow-Headers",
"traffic-management":"Traffic Management",
"traffic.help":"NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.",
"traffic.enable":"Enable Traffic Management",
"traffic.event-lag":"Event Loop Lag Threshold (in milliseconds)",
"traffic.event-lag-help":"Lowering this value decreases wait times for page loads, but will also show the \"excessive load\" message to more users. (Restart required)",
"traffic.lag-check-interval":"Check Interval (in milliseconds)",
"traffic.lag-check-interval-help":"Lowering this value causes NodeBB to become more sensitive to spikes in load, but may also cause the check to become too sensitive. (Restart required)"
"address-help":"The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.",
"from":"From Name",
"from-help":"The from name to display in the email.",
"gmail-routing":"Gmail Routing",
"gmail-routing-help1":"There have been reports of Gmail Routing not working on accounts with heightened security. In those scenarios, you will have to <a href=\"https://www.google.com/settings/security/lesssecureapps\">configure your GMail account to allow less secure apps</a>.",
"gmail-routing-help2":"For more information about this workaround, <a href=\"https://nodemailer.com/using-gmail/\">please consult this NodeMailer article on the issue.</a> An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. <a href=\"{config.relative_path}/admin/extend/plugins\">Browse available plugins here</a>.",
"gmail-transport":"Route emails through a Gmail/Google Apps account",
"gmail-transport.username":"Username",
"gmail-transport.username-help":"Enter the full email address here, especially if you are using a Google Apps managed domain.",
"gmail-transport.password":"Password",
"template":"Edit Email Template",
"template.select":"Select Email Template",
"template.revert":"Revert to Original",
"testing":"Email Testing",
"testing.select":"Select Email Template",
"testing.send":"Send Test Email",
"testing.send-help":"The test email will be sent to the currently logged in user's email address.",
"subscriptions.hour-help":"Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>"
"handles.enabled-help":"This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
"privileges":"Guest Privileges",
"privileges.can-search":"Allow guests to search without logging in",
"privileges.can-search-users":"Allow guests to search users without logging in"
"restrictions.seconds-between":"Seconds between Posts",
"restrictions.seconds-between-new":"Seconds between Posts for New Users",
"restrictions.rep-threshold":"Reputation threshold before this restriction is lifted",
"restrictions.seconds-defore-new":"Seconds before new user can post",
"restrictions.seconds-edit-after":"Number of seconds users are allowed to edit posts after posting. (0 disabled)",
"restrictions.seconds-delete-after":"Number of seconds users are allowed to delete posts after posting. (0 disabled)",
"restrictions.replies-no-delete":"Number of replies after users are disallowed to delete their own topics. (0 disabled)",
"restrictions.min-title-length":"Minimum Title Length",
"restrictions.max-title-length":"Maximum Title Length",
"restrictions.min-post-length":"Minimum Post Length",
"restrictions.max-post-length":"Maximum Post Length",
"restrictions.days-until-stale":"Days until Topic is considered stale",
"restrictions.stale-help":"If a topic is considered \"stale\", then a warning will be shown to users who attempt to reply to that topic.",
"timestamp":"Timestamp",
"timestamp.cut-off":"Date cut-off (in days)",
"timestamp.cut-off-help":"Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
"teaser":"Teaser Post",
"teaser.last-post":"Last – Show the latest post, including the original post, if no replies",
"teaser.last-reply":"Last – Show the latest reply, or a \"No replies\" placeholder if no replies",
"teaser.first":"First",
"unread":"Unread Settings",
"unread.cutoff":"Unread cutoff days",
"unread.min-track-last":"Minimum posts in topic before tracking last read",
"recent":"Recent Settings",
"recent.categoryFilter.disable":"Disable filtering of topics in ignored categories on the /recent page",
"signature":"Signature Settings",
"signature.disable":"Disable signatures",
"signature.no-links":"Disable links in signatures",
"signature.no-images":"Disable images in signatures",
"composer-help":"The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.",
"composer.show-help":"Show \"Help\" tab",
"composer.enable-plugin-help":"Allow plugins to add content to the help tab",
"composer.custom-help":"Custom Help Text",
"ip-tracking":"IP Tracking",
"ip-tracking.each-post":"Track IP Address for each post"
"allowed-file-extensions-help":"Enter comma-separated list of file extensions here (e.g. <code>pdf,xls,doc</code>). An empty list means all extensions are allowed.",
"profile-avatars":"Profile Avatars",
"allow-profile-image-uploads":"Allow users to upload profile images",
"convert-profile-image-png":"Convert profile image uploads to PNG",
"disable-user-skins":"Prevent users from choosing a custom skin",
"account-protection":"Account Protection",
"login-attempts":"Login attempts per hour",
"login-attempts-help":"If login attempts to a user's account exceeds this threshold, that account will be locked for a pre-configured amount of time",
"registration-type.help":"Normal - Users can register from the /register page.<br/>\nAdmin Approval - User registrations are placed in an <a href=\"%1/admin/manage/registration\">approval queue</a> for administrators.<br/>\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.<br/>\nInvite Only - Users can invite others from the <a href=\"%1/users\" target=\"_blank\">users</a> page.<br/>\nAdmin Invite Only - Only administrators can invite others from <a href=\"%1/users\" target=\"_blank\">users</a> and <a href=\"%1/admin/manage/users\">admin/manage/users</a> pages.<br/>\nNo registration - No user registration.<br/>",
"registration.max-invites":"Maximum Invitations per User",
"max-invites":"Maximum Invitations per User",
"max-invites-help":"0 for no restriction. Admins get infinite invitations<br>Only applicable for \"Invite Only\"",
"invite-expiration":"Invite expiration",
"invite-expiration-help":"# of days invitations expire in.",
"notify_me":"تلق تنبيهات بالردود الجديدة في هذا الموضوع",
"quote":"اقتبس",
"reply":"رد",
"replies_to_this_post":"Replies: %1",
"replies_to_this_post":"%1 Replies",
"one_reply_to_this_post":"1 Reply",
"last_reply_time":"Last reply",
"reply-as-topic":"رد بموضوع",
"guest-login-reply":"يجب عليك تسجيل الدخول للرد",
"edit":"تعديل",
@@ -25,28 +27,11 @@
"link":"رابط",
"share":"نشر",
"tools":"أدوات",
"flag":"تبليغ",
"locked":"مقفل",
"pinned":"مثبت",
"moved":"منقول",
"bookmark_instructions":"اضغط هنا للعودة لأخر مشاركة مقروءة في الموضوع",
"flag_title":"إشعار بمشاركة مخلة.",
"flag_success":"تم الإشعار بهذه المشاركة على أنها مخلة",
"flag_manage_title":"Flagged post in %1",
"flag_manage_history":"Action History",
"flag_manage_no_history":"No event history to report",
"flag_manage_assignee":"Assignee",
"flag_manage_state":"State",
"flag_manage_state_open":"New/Open",
"flag_manage_state_wip":"Work in Progress",
"flag_manage_state_resolved":"Resolved",
"flag_manage_state_rejected":"Rejected",
"flag_manage_notes":"Shared Notes",
"flag_manage_update":"Update Flag Status",
"flag_manage_history_assignee":"Assigned to %1",
"flag_manage_history_state":"Updated state to %1",
"flag_manage_history_notes":"Updated flag notes",
"flag_manage_saved":"Flag Details Updated",
"deleted_message":"هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.",
"following_topic.message":"ستستلم تنبيها عند كل مشاركة جديدة في هذا الموضوع.",
"not_following_topic.message":"You will see this topic in the unread topics list, but you will not receive notifications when somebody posts to this topic.",
@@ -74,6 +59,7 @@
"thread_tools.unlock":"إلغاء إقفال الموضوع",
"thread_tools.move":"نقل الموضوع",
"thread_tools.move_all":"نقل الكل",
"thread_tools.select_category":"Select Category",
"thread_tools.fork":"إنشاء فرع الموضوع",
"thread_tools.delete":"حذف الموضوع",
"thread_tools.delete-posts":"مشاركات محذوفة",
@@ -87,7 +73,6 @@
"post_restore_confirm":"هل أنت متأكد أنك تريد استعادة هذه المشاركة؟",
"post_purge_confirm":"هل أنت متأكد أنك تريد تطهير هذه المشاركة؟",
"custom-css.description":"Въведете своите собствени декларации за стилове, те ще бъдат приложени след всички останали стилове.",
"custom-css.enable":"Включване на персонализиран CSS",
"custom-header":"Персонализирана заглавна част",
"custom-header.description":"Въведете своя персонализиран код HTML тук (напр. JavaScript, елементи „meta“ и т.н.), те ще бъдат добавени към секцията <code><head></code> в кода на Вашия форум.",
"custom-header.enable":"Включване на персонализирана заглавна част",
"custom-css.livereload":"Включване на моменталното презареждане",
"custom-css.livereload.description":"Ако включите това, всички сесии на всяко устройство, където използвате акаунта си, ще се презареждат, когато натискате „Запазване“."
"description":"Ако поставите отметки тук, Вие ще виждате журнала в терминала си. Ако посочите пътечка, то вместо това журналите ще бъдат записвани във файл. Журналът чрез HTTP е удобен за получаване на статистика за това кога, кои и какви хора посещават форума Ви. В допълнение към следенето на заявките чрез HTTP, можем също да следим и събитията на socket.io. Журналът на Socket.io, в комбинация с redis-cli, може да Ви бъде много полезно, ако искате да разучите как работи NodeBB.",
"explanation":"За да включите или изключите журналите в реално време, просто поставете или премахнете отметките в настройките на журнала. Няма нужда от рестартиране.",
"enable-http":"Включване на журнала чрез HTTP",
"enable-socket":"Включване на журналите за събития на socket.io",
"file-path":"Път до файла на журнала",
"file-path-placeholder":"/път/до/файла/на/журнала.log ::: ако е празно, журналът ще се извежда в терминала",
"control-panel":"Контролен панел за журнала",
"update-settings":"Промяна на настройките на журнала"
"plugin-search-placeholder":"Търсене на добавка…",
"reorder-plugins":"Пренареждане на добавките",
"order-active":"Подреждане на включените добавки",
"dev-interested":"Искате ли да пишете добавки за NodeBB?",
"docs-info":"Пълната документация относно създаването на добавки може да бъде намерена в <a target=\"_blank\" href=\"https://docs.nodebb.org/development/plugins/\">портала за документация на NodeBB</a>.",
"order.description":"Някои добавки работят най-добре, ако бъдат инсталирани преди или след други добавки.",
"order.explanation":"Добавките се зареждат в реда, посочен тук, от горе надолу.",
"plugin-item.themes":"Теми",
"plugin-item.deactivate":"Изключване",
"plugin-item.activate":"Включване",
"plugin-item.install":"Инсталиране",
"plugin-item.uninstall":"Деинсталиране",
"plugin-item.settings":"Настройки",
"plugin-item.installed":"Инсталирани",
"plugin-item.latest":"Най-нови",
"plugin-item.upgrade":"Обновяване",
"plugin-item.more-info":"За повече информация",
"plugin-item.unknown":"Неизвестно",
"plugin-item.unknown-explanation":"Състоянието на тази добавка не може да бъде определено, може би поради грешка в конфигурацията.",
"alert.enabled":"Добавката е включена",
"alert.disabled":"Добавката е изключена",
"alert.upgraded":"Добавката е обновена",
"alert.installed":"Добавката е инсталирана",
"alert.uninstalled":"Добавката е деинсталирана",
"alert.activate-success":"Моля, рестартирайте NodeBB, за да включите тази добавка напълно.",
"alert.deactivate-success":"Добавката е изключена успешно.",
"alert.upgrade-success":"Моля, презаредете NodeBB, за да обновите тази добавка напълно.",
"alert.install-success":"Добавката е инсталирана успешно, моля, включете я",
"alert.uninstall-success":"Добавката беше изключена и деинсталирана успешно.",
"alert.suggest-error":"<p>NodeBB не може да се свърже с пакетния мениджър. Искате ли да продължите с инсталацията на най-новата версия?</p><div class=\"alert alert-danger\"><strong>Сървърът върна (%1)</strong>: %2</div>",
"alert.package-manager-unreachable":"<p>NodeBB не може да се свърже с пакетния мениджър. Несе препоръчва обновяване в момента.</p>",
"alert.incompatible":"<p>Вашата версия на NodeBB (версия %1) може да използва най-много версия %2 на тази добавка. Моля, обновете NodeBB, ако искате да инсталирате по-нова версия на тази добавка.</p>",
"alert.possibly-incompatible":"<div class=\"alert alert-warning\"><p><strong>Няма информация за съвместимостта</strong></p><p>Тази добавка не е посочила конкретна версия за инсталация, съвместима с Вашата версия на NodeBB. Не можем да гарантираме пълна съвместимост и има възможност Вашият NodeBB да не може да стартира правилно.</p></div><p>Ако NodeBB не може да стартира, използвайте следната команда:</p><pre><code>$ ./nodebb reset plugin=\"%1\"</code></pre><p>Искате ли да продължите с инсталацията на най-новата версия на тази добавка?</p>"
"page-views-custom-help":"Въведете интервал от дати, за които искате да видите преглежданията на страниците. Ако не се появи календар за избор, можете да въведете датите във формат: <code>ГГГГ-ММ-ДД</code>",
"page-views-custom-error":"Моля, въведете правилен интервал от дати във формата: <code>ГГГГ-ММ-ДД</code>",
"stats.day":"Ден",
"stats.week":"Седмица",
"stats.month":"Месец",
"stats.all":"От началото",
"updates":"Обновления",
"running-version":"Вие използвате <strong>NodeBB версия <span id=\"version\">%1</span></strong>.",
"keep-updated":"Стремете се винаги да използвате най-новата версия на NodeBB, за да се възползвате от последните подобрения на сигурността и поправки на проблеми.",
"upgrade-available":"<p>Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\">обновете NodeBB</a>.</p>",
"prerelease-upgrade-available":"<p>Това е остаряла предварителна версия на NodeBB. Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\">обновете NodeBB</a>.</p>",
"prerelease-warning":"<p>Това е версия за <strong>предварителен преглед</strong> на NodeBB. Възможно е да има неочаквани неизправности. <i class=\"fa fa-exclamation-triangle\"></i></p>",
"running-in-development":"<span>Форумът работи в режим за разработчици, така че може да бъде уязвим. Моля, свържете се със системния си администратор.</span>",
"description":"Езикът по подразбиране определя езиковите настройки за всички потребители, които посещават Вашия форум. <br />Отделните потребители могат да сменят езика си от страницата с настройки на профила си.",
"default-language":"Език по подразбиране",
"auto-detect":"Автоматично разпознаване на езика за гостите"
"optional-clone-settings":"(Незадължително) Копиране на настройките от категория",
"purge":"Изтриване на категорията",
"enable":"Включване",
"disable":"Изключване",
"edit":"Редактиране",
"select-category":"Изберете категория",
"set-parent-category":"Задайте базова категория",
"privileges.description":"В тази секция можете да настроите правомощията за достъп до тази категория. Правомощията могат да бъдат давани на отделни потребители или на цели групи. Можете да добавите нов потребител в тази таблица като го потърсите чрез формуляра по-долу.",
"privileges.warning":"<strong>Забележка</strong>: Настройките за правомощията влизат в сила моментално. Нее нужно да запазвате категорията след като промените тези настройки.",
"privileges.section-viewing":"Правомощия за преглед",
"privileges.section-posting":"Правомощия за публикуване",
"privileges.section-moderation":"Правомощия за модериране",
"privileges.section-user":"Потребител",
"privileges.search-user":"Добавяне на потребител",
"privileges.no-users":"В тази категория няма правомощия за отделни потребители.",
"privileges.section-group":"Група",
"privileges.group-private":"Тази група е частна",
"privileges.search-group":"Добавяне на група",
"privileges.copy-to-children":"Копиране в наследниците",
"privileges.copy-from-category":"Копиране от категория",
"privileges.inherit":"Ако групата на <code>регистрираните потребители</code> получи дадено правомощие, всички останали групи го получават като <strong>подразбиращо се правомощие</strong>, дори то да не им е специално дадено. Вие виждате това подразбиращо се правомощие, защото всички потребители са членове на групата на <code>регистрираните потребители</code>, така че няма нужда да се дават едни и същи правомощия на още групи.",
"analytics.back":"Назад към списъка с категориите",
"analytics.title":"Аналитични данни за категорията „%1“",
"analytics.pageviews-hourly":"<strong>Фигура 1</strong> – Преглеждания на час за тази категория</small>",
"analytics.pageviews-daily":"<strong>Фигура 2</strong> – Преглеждания на ден за тази категория</small>",
"analytics.topics-daily":"<strong>Фигура 3</strong> – Брой теми в тази категория на ден</small>",
"analytics.posts-daily":"<strong>Фигура 4</strong> – Брой публикации в тази категория на ден</small>",
"alert.created":"Създадена",
"alert.create-success":"Категорията е създадена успешно!",
"alert.none-active":"Нямате активни категории.",
"alert.create":"Създаване на категория",
"alert.confirm-moderate":"<strong>Наистина ли искате да дадете правомощието за модериране на тази потребителска група?</strong> Тази група е публична и всеки може свободно да се присъедини към нея.",
"alert.confirm-purge":"<p class=\"lead\">Наистина ли искате да изтриете категорията „%1“?</p><h5><strong class=\"text-danger\">Внимание!</strong> Всички теми и публикации в тази категория ще бъдат изтрити!</h5> <p class=\"help-block\">Изтриването на категорията ще премахне всички теми и публикации, и ще изтрие категорията от базата данни. Ако искате да премахнете категорията <em>временно</em>, можете просто да я „изключите“.</p>",
"alert.purge-success":"Категорията е изтрита!",
"alert.copy-success":"Настройките са копирани!",
"alert.set-parent-category":"Задаване на базова категория",
"alert.updated":"Обновени категории",
"alert.updated-success":"Категориите с идентификатори %1 са обновени успешно.",
"alert.upload-image":"Качване на изображение за категорията",
"edit.confirm-remove-user":"Наистина ли искате да премахнете този потребител?",
"edit.save-success":"Промените са запазени!"
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.