diff --git a/Gemfile b/Gemfile index 25fcaa8662..3d49f0dc3a 100644 --- a/Gemfile +++ b/Gemfile @@ -105,7 +105,6 @@ gem 'sidekiq-statistic' gem 'sinatra', require: false gem 'execjs', require: false gem 'mini_racer' -gem 'thin', require: false gem 'highline', require: false gem 'rack-protection' # security diff --git a/Gemfile.lock b/Gemfile.lock index 79fdbde3bc..76dc704feb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -71,7 +71,6 @@ GEM concurrent-ruby (1.0.2) connection_pool (2.2.0) crass (1.0.2) - daemons (1.2.4) debug_inspector (0.0.2) diff-lcs (1.2.5) discourse-qunit-rails (0.0.9) @@ -94,7 +93,6 @@ GEM railties (>= 3.1) ember-source (2.10.0) erubis (2.7.0) - eventmachine (1.2.0.1) excon (0.53.0) execjs (2.7.0) exifr (1.2.4) @@ -107,7 +105,7 @@ GEM rake rake-compiler fast_xs (0.8.0) - ffi (1.9.10) + ffi (1.9.17) flamegraph (0.9.5) foreman (0.82.0) thor (~> 0.19.1) @@ -116,7 +114,7 @@ GEM globalid (0.3.7) activesupport (>= 4.1.0) guess_html_encoding (0.0.11) - hashie (3.4.4) + hashie (3.4.6) highline (1.7.8) hiredis (0.6.1) htmlentities (4.3.4) @@ -137,7 +135,7 @@ GEM rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (1.8.3) + json (1.8.6) jwt (1.5.2) kgio (2.10.0) libv8 (5.3.332.38.3) @@ -162,7 +160,7 @@ GEM metaclass (~> 0.0.1) mock_redis (0.15.4) moneta (0.8.1) - msgpack (0.7.6) + msgpack (1.0.2) multi_json (1.12.1) multi_xml (0.5.5) multipart-post (2.0.0) @@ -172,7 +170,7 @@ GEM mini_portile2 (~> 2.1.0) nokogumbo (1.4.7) nokogiri - oauth (0.4.7) + oauth (0.5.1) oauth2 (1.0.0) faraday (>= 0.8, < 0.10) jwt (~> 1.0) @@ -205,8 +203,7 @@ GEM omniauth-openid (1.0.1) omniauth (~> 1.0) rack-openid (~> 1.3.1) - omniauth-twitter (1.2.1) - json (~> 1.3) + omniauth-twitter (1.3.0) omniauth-oauth (~> 1.1) rack onebox (1.7.7) @@ -362,10 +359,6 @@ GEM activesupport (>= 4.0) sprockets (>= 3.0.0) stackprof (0.2.10) - thin (1.7.0) - daemons (~> 1.0, >= 1.0.9) - eventmachine (~> 1.0, >= 1.0.4) - rack (>= 1, < 3) thor (0.19.1) thread_safe (0.3.5) tilt (2.0.5) @@ -477,7 +470,6 @@ DEPENDENCIES sinatra spork-rails stackprof - thin timecop uglifier unf diff --git a/app/assets/javascripts/discourse/controllers/history.js.es6 b/app/assets/javascripts/discourse/controllers/history.js.es6 index e94852cf3e..b6e9a10377 100644 --- a/app/assets/javascripts/discourse/controllers/history.js.es6 +++ b/app/assets/javascripts/discourse/controllers/history.js.es6 @@ -109,6 +109,11 @@ export default Ember.Controller.extend(ModalFunctionality, { return !prevHidden && this.currentUser && this.currentUser.get('staff'); }, + @computed("model.wiki", "model.last_revision", "model.current_revision") + displayEdit(wiki, lastRevision, currentRevision) { + return wiki && (lastRevision === currentRevision); + }, + @computed() displayRevert() { return this.currentUser && this.currentUser.get('staff'); @@ -187,6 +192,11 @@ export default Ember.Controller.extend(ModalFunctionality, { hideVersion() { this.hide(this.get("model.post_id"), this.get("model.current_revision")); }, showVersion() { this.show(this.get("model.post_id"), this.get("model.current_revision")); }, + editWiki() { + this.get('topicController').send('editPost', this.get('post')); + this.send('closeModal'); + }, + revertToVersion() { this.revert(this.get("post"), this.get("model.current_revision")); }, displayInline() { this.set("viewMode", "inline"); }, diff --git a/app/assets/javascripts/discourse/helpers/application.js.es6 b/app/assets/javascripts/discourse/helpers/application.js.es6 index 455a2b9fb9..17f37e9455 100644 --- a/app/assets/javascripts/discourse/helpers/application.js.es6 +++ b/app/assets/javascripts/discourse/helpers/application.js.es6 @@ -13,7 +13,7 @@ registerUnbound('number', (orig, params) => { let title = I18n.toNumber(orig, { precision: 0 }); if (params.numberKey) { - title = I18n.t(params.numberKey, { number: title }); + title = I18n.t(params.numberKey, { number: title, count: parseInt(title) }); } let classNames = 'number'; diff --git a/app/assets/javascripts/discourse/initializers/message-bus.js.es6 b/app/assets/javascripts/discourse/initializers/message-bus.js.es6 index 650a9544a8..3ce1a033c3 100644 --- a/app/assets/javascripts/discourse/initializers/message-bus.js.es6 +++ b/app/assets/javascripts/discourse/initializers/message-bus.js.es6 @@ -29,7 +29,7 @@ export default { messageBus.callbackInterval = siteSettings.anon_polling_interval; messageBus.backgroundCallbackInterval = siteSettings.background_polling_interval; - messageBus.baseUrl = siteSettings.long_polling_base_url; + messageBus.baseUrl = siteSettings.long_polling_base_url.replace(/\/$/, '') + '/'; if (messageBus.baseUrl !== '/') { // zepto compatible, 1 param only diff --git a/app/assets/javascripts/discourse/lib/url.js.es6 b/app/assets/javascripts/discourse/lib/url.js.es6 index 6aca579c13..8f1b1d3e13 100644 --- a/app/assets/javascripts/discourse/lib/url.js.es6 +++ b/app/assets/javascripts/discourse/lib/url.js.es6 @@ -7,9 +7,15 @@ const TOPIC_REGEXP = /\/t\/([^\/]+)\/(\d+)\/?(\d+)?/; // We can add links here that have server side responses but not client side. const SERVER_SIDE_ONLY = [ + /^\/assets\//, + /^\/uploads\//, + /^\/stylesheets\//, + /^\/site_customizations\//, + /^\/raw\//, /^\/posts\/\d+\/raw/, + /^\/raw\/\d+/, /\.rss$/, - /\.json/, + /\.json$/, ]; let _jumpScheduled = false; @@ -121,8 +127,9 @@ const DiscourseURL = Ember.Object.extend({ return; } + const pathname = path.replace(/(https?\:)?\/\/[^\/]+/, ''); const serverSide = SERVER_SIDE_ONLY.some(r => { - if (path.match(r)) { + if (pathname.match(r)) { document.location = path; return true; } diff --git a/app/assets/javascripts/discourse/models/post.js.es6 b/app/assets/javascripts/discourse/models/post.js.es6 index b15683ca4a..127b81f861 100644 --- a/app/assets/javascripts/discourse/models/post.js.es6 +++ b/app/assets/javascripts/discourse/models/post.js.es6 @@ -70,7 +70,6 @@ const Post = RestModel.extend({ return ajax(`/posts/${this.get('id')}/${field}`, { type: 'PUT', data }).then(() => { this.set(field, value); - this.incrementProperty("version"); }).catch(popupAjaxError); }, diff --git a/app/assets/javascripts/discourse/raw-views/topic-status.js.es6 b/app/assets/javascripts/discourse/raw-views/topic-status.js.es6 index 17e370bc6e..e5d5befde9 100644 --- a/app/assets/javascripts/discourse/raw-views/topic-status.js.es6 +++ b/app/assets/javascripts/discourse/raw-views/topic-status.js.es6 @@ -1,54 +1,58 @@ +import computed from 'ember-addons/ember-computed-decorators'; + export default Ember.Object.extend({ - renderDiv: function(){ + + @computed + renderDiv() { return this.get('statuses').length > 0 && !this.noDiv; - }.property(), - statuses: function(){ - var topic = this.get("topic"); - var results = []; - var self = this; + }, + + @computed + statuses() { + const topic = this.get("topic"); + const results = []; // TODO, custom statuses? via override? - - if(topic.get('is_warning')){ + if (topic.get('is_warning')) { results.push({icon: 'envelope', key: 'warning'}); } - if(topic.get('bookmarked')){ - var url = topic.get('url'); - var postNumbers = topic.get('bookmarked_post_numbers'); - var extraClasses = ""; - if(postNumbers && postNumbers[0] > 1) { + if (topic.get('bookmarked')) { + const postNumbers = topic.get('bookmarked_post_numbers'); + let url = topic.get('url'); + let extraClasses = ""; + if (postNumbers && postNumbers[0] > 1) { url += '/' + postNumbers[0]; } else { extraClasses = "op-bookmark"; } - results.push({extraClasses: extraClasses, icon: 'bookmark', key: 'bookmarked', href: url}); + results.push({ extraClasses, icon: 'bookmark', key: 'bookmarked', href: url }); } if (topic.get('closed') && topic.get('archived')) { results.push({icon: 'lock', key: 'locked_and_archived'}); - } else if(topic.get('closed')){ + } else if (topic.get('closed')) { results.push({icon: 'lock', key: 'locked'}); - } else if(topic.get('archived')){ + } else if (topic.get('archived')) { results.push({icon: 'lock', key: 'archived'}); } - if(topic.get('pinned')){ + if (topic.get('pinned')) { results.push({icon: 'thumb-tack', key: 'pinned'}); } - if(topic.get('unpinned')){ + if (topic.get('unpinned')) { results.push({icon: 'thumb-tack unpinned', key: 'unpinned'}); } - if(topic.get('invisible')){ + if (topic.get('invisible')) { results.push({icon: 'eye-slash', key: 'invisible'}); } - _.each(results, function(result){ - result.title = I18n.t("topic_statuses." + result.key + ".help"); - if(!self.disableActions && (result.key === "pinned" ||result.key === "unpinned")){ + results.forEach(result => { + result.title = I18n.t(`topic_statuses.${result.key}.help`); + if (!self.disableActions && (result.key === "pinned" ||result.key === "unpinned")) { result.openTag = 'a href'; result.closeTag = 'a'; } else { @@ -58,6 +62,5 @@ export default Ember.Object.extend({ }); return results; - }.property() + } }); - diff --git a/app/assets/javascripts/discourse/routes/topic.js.es6 b/app/assets/javascripts/discourse/routes/topic.js.es6 index 9cda61f8d7..105d0e6ba0 100644 --- a/app/assets/javascripts/discourse/routes/topic.js.es6 +++ b/app/assets/javascripts/discourse/routes/topic.js.es6 @@ -72,8 +72,12 @@ const TopicRoute = Discourse.Route.extend({ showHistory(model) { showModal('history', { model }); - this.controllerFor('history').refresh(model.get("id"), "latest"); - this.controllerFor('history').set('post', model); + const historyController = this.controllerFor('history'); + + historyController.refresh(model.get("id"), "latest"); + historyController.set('post', model); + historyController.set('topicController', this.controllerFor('topic')); + this.controllerFor('modal').set('modalClass', 'history-modal'); }, diff --git a/app/assets/javascripts/discourse/templates/application.hbs b/app/assets/javascripts/discourse/templates/application.hbs index bf2de38396..6250c28d1f 100644 --- a/app/assets/javascripts/discourse/templates/application.hbs +++ b/app/assets/javascripts/discourse/templates/application.hbs @@ -20,11 +20,11 @@ {{outlet "user-card"}} -{{plugin-outlet name="above-footer"}} +{{plugin-outlet name="above-footer" args=(hash showFooter=showFooter)}} {{#if showFooter}} {{custom-html name="footer"}} {{/if}} -{{plugin-outlet name="below-footer"}} +{{plugin-outlet name="below-footer" args=(hash showFooter=showFooter)}} {{outlet "modal"}} {{topic-entrance}} diff --git a/app/assets/javascripts/discourse/templates/components/latest-topic-list-item.hbs b/app/assets/javascripts/discourse/templates/components/latest-topic-list-item.hbs index e42241f0bb..3d4aeab6a0 100644 --- a/app/assets/javascripts/discourse/templates/components/latest-topic-list-item.hbs +++ b/app/assets/javascripts/discourse/templates/components/latest-topic-list-item.hbs @@ -10,7 +10,7 @@ - {{topic-status topic=topic}} + {{raw "topic-status" topic=topic}} {{topic-link topic}} {{#if topic.featured_link}} {{topic-featured-link topic}} diff --git a/app/assets/javascripts/discourse/templates/components/topic-footer-buttons.hbs b/app/assets/javascripts/discourse/templates/components/topic-footer-buttons.hbs index ec1e9eac88..b2d37f5c70 100644 --- a/app/assets/javascripts/discourse/templates/components/topic-footer-buttons.hbs +++ b/app/assets/javascripts/discourse/templates/components/topic-footer-buttons.hbs @@ -68,8 +68,8 @@ {{d-button class="btn-primary create" icon="reply" action=replyToPost - label="topic.reply.title" - title="topic.reply.help"}} + label="topic.reply.topic.title" + title="topic.reply.topic.help"}} {{/if}} {{plugin-outlet name="after-topic-footer-main-buttons" diff --git a/app/assets/javascripts/discourse/templates/list/topic-list-item.raw.hbs b/app/assets/javascripts/discourse/templates/list/topic-list-item.raw.hbs index bd444a8e55..05b387b719 100644 --- a/app/assets/javascripts/discourse/templates/list/topic-list-item.raw.hbs +++ b/app/assets/javascripts/discourse/templates/list/topic-list-item.raw.hbs @@ -5,15 +5,19 @@ {{/if}} - {{raw "topic-status" topic=topic}} - {{topic-link topic}} - {{#if topic.featured_link}} - {{topic-featured-link topic}} - {{/if}} - {{raw-plugin-outlet name="topic-list-after-title"}} - {{#if showTopicPostBadges}} - {{raw "topic-post-badges" unread=topic.unread newPosts=topic.displayNewPosts unseen=topic.unseen url=topic.lastUnreadUrl}} - {{/if}} + + {{raw-plugin-outlet name="topic-list-before-status"}} + {{raw "topic-status" topic=topic}} + {{topic-link topic}} + {{#if topic.featured_link}} + {{topic-featured-link topic}} + {{/if}} + {{raw-plugin-outlet name="topic-list-after-title"}} + {{#if showTopicPostBadges}} + {{raw "topic-post-badges" unread=topic.unread newPosts=topic.displayNewPosts unseen=topic.unseen url=topic.lastUnreadUrl}} + {{/if}} + + {{#if topic.tags}}
{{#each topic.visibleListTags as |tag|}} diff --git a/app/assets/javascripts/discourse/templates/modal/history.hbs b/app/assets/javascripts/discourse/templates/modal/history.hbs index 9714e00409..62e7f9b984 100644 --- a/app/assets/javascripts/discourse/templates/modal/history.hbs +++ b/app/assets/javascripts/discourse/templates/modal/history.hbs @@ -11,11 +11,25 @@ {{d-button action="loadNextVersion" icon="forward" title="post.revisions.controls.next" disabled=loadNextDisabled}} {{d-button action="loadLastVersion" icon="fast-forward" title="post.revisions.controls.last" disabled=loadLastDisabled}}
+
- {{d-button action="displayInline" label="post.revisions.displays.inline.button" title="post.revisions.displays.inline.title" class=inlineClass}} + {{d-button action="displayInline" + icon="square-o" + label="post.revisions.displays.inline.button" + title="post.revisions.displays.inline.title" + class=inlineClass}} {{#unless site.mobileView}} - {{d-button action="displaySideBySide" label="post.revisions.displays.side_by_side.button" title="post.revisions.displays.side_by_side.title" class=sideBySideClass}} - {{d-button action="displaySideBySideMarkdown" label="post.revisions.displays.side_by_side_markdown.button" title="post.revisions.displays.side_by_side_markdown.title" class=sideBySideMarkdownClass}} + {{d-button action="displaySideBySide" + icon="columns" + label="post.revisions.displays.side_by_side.button" + title="post.revisions.displays.side_by_side.title" + class=sideBySideClass}} + + {{d-button action="displaySideBySideMarkdown" + icon="columns" + label="post.revisions.displays.side_by_side_markdown.button" + title="post.revisions.displays.side_by_side_markdown.title" + class=sideBySideMarkdownClass}} {{/unless}}
@@ -34,7 +48,7 @@ → {{bound-avatar-template model.user_changes.current.avatar_template "small"}} {{model.user_changes.current.username}} {{/if}} {{#if model.wiki_changes}} - — {{disabled-icon icon="pencil-square-o" secondary=wikiDisabled}} + — {{disabled-icon icon="pencil-square-o" disabled=wikiDisabled}} {{/if}} {{#if model.post_type_changes}} — {{disabled-icon icon="shield" disabled=postTypeDisabled}} @@ -59,7 +73,7 @@ {{/if}} {{#if model.wiki_changes}}
- {{disabled-icon icon="pencil-square-o" secondary=wikiDisabled}} + {{disabled-icon icon="pencil-square-o" disabled=wikiDisabled}}
{{/if}} {{#if model.post_type_changes}} @@ -103,11 +117,19 @@ {{#if displayRevert}} {{d-button action="revertToVersion" icon="undo" label="post.revisions.controls.revert" class="btn-danger" disabled=loading}} {{/if}} + {{#if displayHide}} {{d-button action="hideVersion" icon="eye-slash" label="post.revisions.controls.hide" class="btn-danger" disabled=loading}} {{/if}} + {{#if displayShow}} {{d-button action="showVersion" icon="eye" label="post.revisions.controls.show" disabled=loading}} {{/if}} + + {{#if displayEdit}} + {{d-button action="editWiki" + icon="pencil" + label="post.revisions.controls.edit_wiki"}} + {{/if}} {{/d-modal-body}} diff --git a/app/assets/javascripts/discourse/templates/navigation/category.hbs b/app/assets/javascripts/discourse/templates/navigation/category.hbs index 64cca24cbc..2e9579cbf2 100644 --- a/app/assets/javascripts/discourse/templates/navigation/category.hbs +++ b/app/assets/javascripts/discourse/templates/navigation/category.hbs @@ -33,4 +33,6 @@ {{#if canEditCategory}} {{d-button class="btn-default edit-category" action="editCategory" actionParam=category icon="wrench" label="category.edit_long"}} {{/if}} + + {{plugin-outlet name="category-navigation" args=(hash category=category)}} diff --git a/app/assets/javascripts/discourse/templates/user.hbs b/app/assets/javascripts/discourse/templates/user.hbs index 1f91c19993..1c1b821640 100644 --- a/app/assets/javascripts/discourse/templates/user.hbs +++ b/app/assets/javascripts/discourse/templates/user.hbs @@ -179,6 +179,7 @@ {{#if showBadges}}
  • {{#link-to 'user.badges'}}{{fa-icon "certificate"}}{{i18n 'badges.title'}}{{/link-to}}
  • {{/if}} + {{plugin-outlet name="user-main-nav" connectorTagName='li' args=(hash model=model)}}
  • {{#link-to 'user.summary'}}{{i18n 'user.summary.title'}}{{/link-to}}
  • {{#if model.can_edit}}
  • {{#link-to 'preferences'}}{{fa-icon "cog"}}{{i18n 'user.preferences'}}{{/link-to}}
  • diff --git a/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6 b/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6 index 64aa2218e4..1c489367c2 100644 --- a/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6 +++ b/app/assets/javascripts/discourse/widgets/avatar-flair.js.es6 @@ -38,7 +38,10 @@ createWidget('avatar-flair', { html(attrs) { if (this.isIcon(attrs)) { - return [h('i', { className: 'fa ' + attrs.primary_group_flair_url })]; + return [h('i', { + className: 'fa ' + attrs.primary_group_flair_url, + attributes: { style: attrs.primary_group_flair_color ? 'color: #' + Handlebars.Utils.escapeExpression(attrs.primary_group_flair_color) + '; ' : '' } + })]; } else { return []; } diff --git a/app/assets/javascripts/discourse/widgets/header.js.es6 b/app/assets/javascripts/discourse/widgets/header.js.es6 index 03fe6a6901..8dbb00349a 100644 --- a/app/assets/javascripts/discourse/widgets/header.js.es6 +++ b/app/assets/javascripts/discourse/widgets/header.js.es6 @@ -104,6 +104,8 @@ createWidget('header-icons', { }, html(attrs) { + if (this.siteSettings.login_required && !this.currentUser) { return []; } + const hamburger = this.attach('header-dropdown', { title: 'hamburger_menu', icon: 'bars', @@ -112,12 +114,9 @@ createWidget('header-icons', { action: 'toggleHamburger', contents() { if (!attrs.flagCount) { return; } - return this.attach('link', { - href: Discourse.getURL('/admin/flags/active'), - title: 'notifications.total_flagged', - rawLabel: attrs.flagCount, - className: 'badge-notification flagged-posts' - }); + return h('div.badge-notification.flagged-posts', { attributes: { + title: I18n.t('notifications.total_flagged') + } }, attrs.flagCount); } }); @@ -223,8 +222,8 @@ export default createWidget('header', { this.state.searchVisible = false; }, - linkClickedEvent() { - this.closeAll(); + linkClickedEvent(attrs) { + if (!(attrs && attrs.searchContextEnabled)) this.closeAll(); this.updateHighlight(); }, diff --git a/app/assets/javascripts/discourse/widgets/link.js.es6 b/app/assets/javascripts/discourse/widgets/link.js.es6 index 9ba519fff4..429403268d 100644 --- a/app/assets/javascripts/discourse/widgets/link.js.es6 +++ b/app/assets/javascripts/discourse/widgets/link.js.es6 @@ -79,7 +79,7 @@ export default createWidget('link', { e.preventDefault(); return this.sendWidgetAction(this.attrs.action, this.attrs.actionParam); } else { - this.sendWidgetEvent('linkClicked'); + this.sendWidgetEvent('linkClicked', this.attrs); } return DiscourseURL.routeToTag($(e.target).closest('a')[0]); diff --git a/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6 b/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6 index 9eac352d6b..531e439685 100644 --- a/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6 @@ -22,18 +22,41 @@ export default createWidget('post-edits-indicator', { }, html(attrs) { - const contents = [attrs.version - 1, ' ', iconNode('pencil')]; + let icon = 'pencil'; const updatedAt = new Date(attrs.updated_at); + let className = this.historyHeat(updatedAt); + const date = longDate(updatedAt); + let title; + + if (attrs.wiki) { + icon = 'pencil-square-o'; + className = `${className} wiki`; + + if (attrs.version > 1) { + title = `${I18n.t('post.last_edited_on')} ${date}`; + } else { + title = I18n.t('post.wiki.about'); + } + } else { + title = `${I18n.t('post.last_edited_on')} ${date}`; + } + + const contents = [ + attrs.version > 1 ? attrs.version - 1 : '', + ' ', + iconNode(icon) + ]; - const title = `${I18n.t('post.last_edited_on')} ${longDate(updatedAt)}`; return h('a', { - className: this.historyHeat(updatedAt), + className, attributes: { title } }, contents); }, click() { - if (this.attrs.canViewEditHistory) { + if (this.attrs.wiki && this.attrs.version === 1) { + this.sendWidgetAction('editPost'); + } else if (this.attrs.canViewEditHistory) { this.sendWidgetAction('showHistory'); } } diff --git a/app/assets/javascripts/discourse/widgets/post-menu.js.es6 b/app/assets/javascripts/discourse/widgets/post-menu.js.es6 index 4c39f4a542..cf3b3127f4 100644 --- a/app/assets/javascripts/discourse/widgets/post-menu.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-menu.js.es6 @@ -135,7 +135,7 @@ registerButton('reply', attrs => { if (!attrs.canCreatePost) { return; } if (!attrs.mobileView) { - args.label = 'topic.reply.title'; + args.label = 'topic.reply.post.title'; } return args; diff --git a/app/assets/javascripts/discourse/widgets/post.js.es6 b/app/assets/javascripts/discourse/widgets/post.js.es6 index 7e9fd93496..5309768e58 100644 --- a/app/assets/javascripts/discourse/widgets/post.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post.js.es6 @@ -110,20 +110,6 @@ createWidget('post-avatar', { } }); - -createWidget('wiki-edit-button', { - tagName: 'div.post-info.wiki', - title: 'post.wiki.about', - - html() { - return iconNode('pencil-square-o'); - }, - - click() { - this.sendWidgetAction('editPost'); - } -}); - createWidget('post-email-indicator', { tagName: 'div.post-info.via-email', @@ -181,14 +167,10 @@ createWidget('post-meta-data', { result.push(this.attach('post-email-indicator', attrs)); } - if (attrs.version > 1) { + if (attrs.version > 1 || attrs.wiki) { result.push(this.attach('post-edits-indicator', attrs)); } - if (attrs.wiki) { - result.push(this.attach('wiki-edit-button', attrs)); - } - if (attrs.multiSelect) { result.push(this.attach('select-post', attrs)); } diff --git a/app/assets/javascripts/discourse/widgets/search-menu-results.js.es6 b/app/assets/javascripts/discourse/widgets/search-menu-results.js.es6 index 2eddf7f87f..56ac661370 100644 --- a/app/assets/javascripts/discourse/widgets/search-menu-results.js.es6 +++ b/app/assets/javascripts/discourse/widgets/search-menu-results.js.es6 @@ -25,7 +25,8 @@ function createSearchResult(type, linkField, fn) { return h('li', this.attach('link', { href: r.get(linkField), contents: () => fn.call(this, r, attrs.term), - className: 'search-link' + className: 'search-link', + searchContextEnabled: this.attrs.searchContextEnabled })); }); } @@ -98,7 +99,11 @@ createWidget('search-menu-results', { } return [ - h('ul', this.attach(rt.componentName, { results: rt.results, term: attrs.term })), + h('ul', this.attach(rt.componentName, { + searchContextEnabled: this.attrs.searchContextEnabled, + results: rt.results, + term: attrs.term + })), h('div.no-results', more) ]; }); diff --git a/app/assets/javascripts/discourse/widgets/search-menu.js.es6 b/app/assets/javascripts/discourse/widgets/search-menu.js.es6 index f8d626f456..c50a314e45 100644 --- a/app/assets/javascripts/discourse/widgets/search-menu.js.es6 +++ b/app/assets/javascripts/discourse/widgets/search-menu.js.es6 @@ -125,7 +125,8 @@ export default createWidget('search-menu', { results.push(this.attach('search-menu-results', { term: searchData.term, noResults: searchData.noResults, results: searchData.results, - invalidTerm: searchData.invalidTerm })); + invalidTerm: searchData.invalidTerm, + searchContextEnabled: searchData.contextEnabled })); } } @@ -191,6 +192,8 @@ export default createWidget('search-menu', { if (url) { this.sendWidgetEvent('linkClicked'); DiscourseURL.routeTo(url); + } else if (searchData.contextEnabled) { + this.triggerSearch(); } } }); diff --git a/app/assets/javascripts/discourse/widgets/topic-map.js.es6 b/app/assets/javascripts/discourse/widgets/topic-map.js.es6 index 4cbcfae591..7d4c89c0b3 100644 --- a/app/assets/javascripts/discourse/widgets/topic-map.js.es6 +++ b/app/assets/javascripts/discourse/widgets/topic-map.js.es6 @@ -27,6 +27,10 @@ createWidget('topic-map-show-links', { }); createWidget('topic-participant', { + buildClasses(attrs) { + if (attrs.primary_group_name) { return `group-${attrs.primary_group_name}`; } + }, + html(attrs, state) { const linkContents = [avatarImg('medium', { username: attrs.username, template: attrs.avatar_template })]; @@ -34,6 +38,10 @@ createWidget('topic-participant', { linkContents.push(h('span.post-count', attrs.post_count.toString())); } + if (attrs.primary_group_flair_url || attrs.primary_group_flair_bg_color) { + linkContents.push(this.attach('avatar-flair', attrs)); + } + return h('a.poster.trigger-user-card', { className: state.toggled ? 'toggled' : null, attributes: { title: attrs.username, 'data-user-card': attrs.username } diff --git a/app/assets/javascripts/discourse/widgets/widget.js.es6 b/app/assets/javascripts/discourse/widgets/widget.js.es6 index f3f5d95356..0b3e169a46 100644 --- a/app/assets/javascripts/discourse/widgets/widget.js.es6 +++ b/app/assets/javascripts/discourse/widgets/widget.js.es6 @@ -298,12 +298,12 @@ export default class Widget { return result; } - sendWidgetEvent(name) { + sendWidgetEvent(name, attrs) { const methodName = `${name}Event`; return this.rerenderResult(() => { const widget = this._findAncestorWithProperty(methodName); if (widget) { - return widget[methodName](); + return widget[methodName](attrs); } }); } diff --git a/app/assets/stylesheets/common/base/discourse.scss b/app/assets/stylesheets/common/base/discourse.scss index 1429c55124..58cd75db00 100644 --- a/app/assets/stylesheets/common/base/discourse.scss +++ b/app/assets/stylesheets/common/base/discourse.scss @@ -80,15 +80,6 @@ body { .coldmap-low { color: dark-light-choose(scale-color($primary, $lightness: 50%), scale-color($secondary, $lightness: 50%)) !important; } - .heatmap-high { - color: #fe7a15 !important; - } - .heatmap-med { - color: #cf7721 !important; - } - .heatmap-low { - color: #9b764f !important; - } #loading-message { position: absolute; diff --git a/app/assets/stylesheets/common/base/onebox.scss b/app/assets/stylesheets/common/base/onebox.scss index ba0e0fb075..9ad0c248a8 100644 --- a/app/assets/stylesheets/common/base/onebox.scss +++ b/app/assets/stylesheets/common/base/onebox.scss @@ -95,6 +95,7 @@ aside.onebox { font-size: 1em; header { + margin-bottom: 8px; a[href] { color: dark-light-choose(scale-color($primary, $lightness: 50%), scale-color($secondary, $lightness: 50%)); text-decoration: none; diff --git a/app/assets/stylesheets/common/base/topic-post.scss b/app/assets/stylesheets/common/base/topic-post.scss index b946073cc8..4c82cb4f8e 100644 --- a/app/assets/stylesheets/common/base/topic-post.scss +++ b/app/assets/stylesheets/common/base/topic-post.scss @@ -158,15 +158,17 @@ aside.quote { position: relative; } -.topic-avatar .avatar-flair, .avatar-flair-preview .avatar-flair, .user-card-avatar .avatar-flair { - display: flex; - align-items: center; - justify-content: center; - background-repeat: no-repeat; - background-position: center; - position: absolute; - bottom: 0; - right: -6px; +.topic-avatar, .avatar-flair-preview, .user-card-avatar, .topic-map .poster { + .avatar-flair { + display: flex; + align-items: center; + justify-content: center; + background-repeat: no-repeat; + background-position: center; + position: absolute; + bottom: 0; + right: -6px; + } } .topic-avatar .avatar-flair, .avatar-flair-preview .avatar-flair { background-size: 20px 20px; @@ -197,6 +199,24 @@ aside.quote { font-size: 24px; } } +.topic-map .poster .avatar-flair { + right: 0; + background-size: 12px 12px; + width: 16px; + height: 16px; + bottom: -3px; + &.rounded { + background-size: 12px 12px; + border-radius: 8px; + width: 16px; + height: 16px; + bottom: -2px; + right: 0; + } + .fa { + font-size: 14px; + } +} .topic-avatar .poster-avatar-extra { display: none; } @@ -220,16 +240,17 @@ aside.quote { } .post-info { - &.wiki, &.via-email, &.whisper { + &.via-email, &.whisper { margin-right: 5px; i.fa { font-size: 1em; } } - &.wiki { - cursor: pointer; - color: #408040; + + .wiki { + color: green !important; } + &.via-email { color: dark-light-choose(scale-color($primary, $lightness: 70%), scale-color($secondary, $lightness: 30%)); } diff --git a/app/assets/stylesheets/desktop/compose.scss b/app/assets/stylesheets/desktop/compose.scss index 620a31a022..0f9bfb589b 100644 --- a/app/assets/stylesheets/desktop/compose.scss +++ b/app/assets/stylesheets/desktop/compose.scss @@ -373,6 +373,20 @@ .reply-to { margin-bottom: 10px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: $tertiary; + + @media (min-width: 1101px) { + max-width: 80%; + } + @media (max-width: 1100px) { + max-width: 500px; + } + @media (max-width: 600px) { + max-width: 300px; + } i { color: dark-light-choose(scale-color($primary, $lightness: 50%), scale-color($secondary, $lightness: 50%)); diff --git a/app/assets/stylesheets/desktop/history.scss b/app/assets/stylesheets/desktop/history.scss index 5becce0f32..bc228aa02c 100644 --- a/app/assets/stylesheets/desktop/history.scss +++ b/app/assets/stylesheets/desktop/history.scss @@ -1,10 +1,7 @@ // styles that apply to the popup that appears when you show the edit history of a post .modal.history-modal { - .btn { - // remove transitions on the buttons in the history modal - transition: none; - } + .modal-inner-container { min-width: 960px; min-height: 500px; @@ -21,6 +18,14 @@ } #display-modes { text-align: right; + .btn { + background-color:inherit; + color: dark-light-diff($primary, $secondary, 50%, -50%); + } + .btn-primary { + color: $primary; + font-weight: bold; + } } #revision-details { padding: 5px; diff --git a/app/assets/stylesheets/desktop/topic-post.scss b/app/assets/stylesheets/desktop/topic-post.scss index 75680a1061..219d31569f 100644 --- a/app/assets/stylesheets/desktop/topic-post.scss +++ b/app/assets/stylesheets/desktop/topic-post.scss @@ -155,10 +155,6 @@ nav.post-controls { box-shadow: none; } - &.wikied { - color: green; - } - &.bookmark {padding: 8px 11px; } .read-icon { @@ -333,7 +329,7 @@ a.star { } .post-count { position: absolute; - right: 3px; + right: 0; border-radius: 100px; padding: 4px 5px 2px 5px; text-align: center; diff --git a/app/assets/stylesheets/desktop/user.scss b/app/assets/stylesheets/desktop/user.scss index 5ec7d0ecd8..7b4527c9f5 100644 --- a/app/assets/stylesheets/desktop/user.scss +++ b/app/assets/stylesheets/desktop/user.scss @@ -142,7 +142,6 @@ .user-content { padding: 10px 8px; background-color: $secondary; - border: 1px solid dark-light-diff($primary, $secondary, 90%, -60%); margin-bottom: 10px; box-sizing: border-box; diff --git a/app/assets/stylesheets/mobile/topic-post.scss b/app/assets/stylesheets/mobile/topic-post.scss index 92c004d064..475d35b0c9 100644 --- a/app/assets/stylesheets/mobile/topic-post.scss +++ b/app/assets/stylesheets/mobile/topic-post.scss @@ -76,7 +76,7 @@ button { margin:10px 0 10px 0; } &.has-like {color: $love;} - &.wikied { color: green; } + .read-icon { &:before { font-family: "FontAwesome"; @@ -221,7 +221,7 @@ a.star { } .post-count { position: absolute; - right: 3px; + right: 0; border-radius: 100px; padding: 4px 5px 2px 5px; text-align: center; diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb index 5b614bc3dc..7c539b46eb 100644 --- a/app/controllers/invites_controller.rb +++ b/app/controllers/invites_controller.rb @@ -7,10 +7,15 @@ class InvitesController < ApplicationController skip_before_filter :redirect_to_login_if_required before_filter :ensure_logged_in, only: [:destroy, :create, :create_invite_link, :resend_invite, :resend_all_invites, :upload_csv] - before_filter :ensure_new_registrations_allowed, only: [:show, :redeem_disposable_invite] - before_filter :ensure_not_logged_in, only: [:show, :redeem_disposable_invite] + before_filter :ensure_new_registrations_allowed, only: [:show, :perform_accept_invitation, :redeem_disposable_invite] + before_filter :ensure_not_logged_in, only: [:show, :perform_accept_invitation, :redeem_disposable_invite] def show + expires_now + render layout: 'no_ember' + end + + def perform_accept_invitation invite = Invite.find_by(invite_key: params[:id]) if invite.present? @@ -27,9 +32,12 @@ class InvitesController < ApplicationController return end end - end - redirect_to path("/") + redirect_to path("/") + else + flash.now[:error] = I18n.t('invite.not_found') + render layout: 'no_ember' + end end def create diff --git a/app/jobs/regular/pull_hotlinked_images.rb b/app/jobs/regular/pull_hotlinked_images.rb index fd8191f4a1..14bd57948e 100644 --- a/app/jobs/regular/pull_hotlinked_images.rb +++ b/app/jobs/regular/pull_hotlinked_images.rb @@ -26,7 +26,7 @@ module Jobs downloaded_urls = {} extract_images_from(post.cooked).each do |image| - src = image['src'] + src = original_src = image['src'] src = "http:" + src if src.start_with?("//") if is_valid_image_url(src) @@ -53,7 +53,7 @@ module Jobs # have we successfully downloaded that file? if downloaded_urls[src].present? url = downloaded_urls[src] - escaped_src = Regexp.escape(src) + escaped_src = Regexp.escape(original_src) # there are 6 ways to insert an image in a post # HTML tag - raw.gsub!(/src=["']#{escaped_src}["']/i, "src='#{url}'") diff --git a/app/jobs/regular/update_group_mentions.rb b/app/jobs/regular/update_group_mentions.rb new file mode 100644 index 0000000000..67ea356d3b --- /dev/null +++ b/app/jobs/regular/update_group_mentions.rb @@ -0,0 +1,14 @@ +module Jobs + + class UpdateGroupMentions < Jobs::Base + + def execute(args) + group = Group.find_by(id: args[:group_id]) + return unless group + + previous_group_name = args[:previous_name] + + GroupMentionsUpdater.update(group.name, previous_group_name) + end + end +end diff --git a/app/models/color_scheme.rb b/app/models/color_scheme.rb index c2af572183..d9c9216c27 100644 --- a/app/models/color_scheme.rb +++ b/app/models/color_scheme.rb @@ -92,15 +92,21 @@ class ColorScheme < ActiveRecord::Base new_color_scheme end - def self.hex_for_name(name) - val = begin - hex_cache[name] ||= begin - # Can't use `where` here because base doesn't allow it - (enabled || base).colors.find {|c| c.name == name }.try(:hex) || :nil + def self.lookup_hex_for_name(name) + Discourse.plugin_themes.each do |pt| + if pt.color_scheme + found = pt.color_scheme[name.to_sym] + return found if found end end - val == :nil ? nil : val + # Can't use `where` here because base doesn't allow it + (enabled || base).colors.find {|c| c.name == name }.try(:hex) || :nil + end + + def self.hex_for_name(name) + hex_cache[name] ||= lookup_hex_for_name(name) + hex_cache[name] == :nil ? nil : hex_cache[name] end def colors=(arr) diff --git a/app/models/discourse_single_sign_on.rb b/app/models/discourse_single_sign_on.rb index a4c1fd151b..daf64826fa 100644 --- a/app/models/discourse_single_sign_on.rb +++ b/app/models/discourse_single_sign_on.rb @@ -146,7 +146,7 @@ class DiscourseSingleSignOn < SingleSignOn sso_record.last_payload = unsigned_payload sso_record.external_id = external_id else - Jobs.enqueue(:download_avatar_from_url, url: avatar_url, user_id: user.id) if avatar_url.present? + Jobs.enqueue(:download_avatar_from_url, url: avatar_url, user_id: user.id, override_gravatar: SiteSetting.sso_overrides_avatar) if avatar_url.present? user.create_single_sign_on_record( last_payload: unsigned_payload, external_id: external_id, @@ -180,7 +180,7 @@ class DiscourseSingleSignOn < SingleSignOn avatar_changed = sso_record.external_avatar_url != avatar_url if avatar_force_update || avatar_changed || avatar_missing - Jobs.enqueue(:download_avatar_from_url, url: avatar_url, user_id: user.id) + Jobs.enqueue(:download_avatar_from_url, url: avatar_url, user_id: user.id, override_gravatar: SiteSetting.sso_overrides_avatar) end end diff --git a/app/models/group.rb b/app/models/group.rb index ecf0033ed3..618d71cf31 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -22,6 +22,9 @@ class Group < ActiveRecord::Base after_save :update_primary_group after_save :update_title + after_save :enqueue_update_mentions_job, + if: Proc.new { |g| g.name_was && g.name_changed? } + after_save :expire_cache after_destroy :expire_cache @@ -161,7 +164,13 @@ class Group < ActiveRecord::Base # don't allow shoddy localization to break this localized_name = I18n.t("groups.default_names.#{name}") validator = UsernameValidator.new(localized_name) - group.name = validator.valid_format? ? localized_name : name + + group.name = + if !Group.where(name: localized_name).exists? && validator.valid_format? + localized_name + else + name + end # the everyone group is special, it can include non-users so there is no # way to have the membership in a table @@ -370,11 +379,6 @@ class Group < ActiveRecord::Base self.where("string_to_array(incoming_email, '|') @> ARRAY[?]", Email.downcase(email)).first end - def self.grants_by_email_domain - Group.where(automatic: false) - .where("LENGTH(COALESCE(automatic_membership_email_domains, '')) > 0") - end - def bulk_add(user_ids) if user_ids.present? Group.exec_sql("INSERT INTO group_users @@ -492,6 +496,15 @@ SQL builder.exec end end + + private + + def enqueue_update_mentions_job + Jobs.enqueue(:update_group_mentions, + previous_name: self.name_was, + group_id: self.id + ) + end end # == Schema Information diff --git a/app/models/post.rb b/app/models/post.rb index 417788a349..4670b6c075 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -69,10 +69,13 @@ class Post < ActiveRecord::Base scope :visible, -> { joins(:topic).where('topics.visible = true').where(hidden: false) } scope :secured, lambda { |guardian| where('posts.post_type in (?)', Topic.visible_post_types(guardian && guardian.user))} scope :for_mailing_list, ->(user, since) { - created_since(since) - .joins(:topic) - .where(topic: Topic.for_digest(user, 100.years.ago)) # we want all topics with new content, regardless when they were created - .order('posts.created_at ASC') + q = created_since(since) + .joins(:topic) + .where(topic: Topic.for_digest(user, 100.years.ago)) # we want all topics with new content, regardless when they were created + + q = q.where.not(post_type: Post.types[:whisper]) unless user.staff? + + q.order('posts.created_at ASC') } scope :mailing_list_new_topics, ->(user, since) { for_mailing_list(user, since).where('topics.created_at > ?', since) } scope :mailing_list_updates, ->(user, since) { for_mailing_list(user, since).where('topics.created_at <= ?', since) } @@ -129,7 +132,8 @@ class Post < ActiveRecord::Base updated_at: Time.now, user_id: user_id, last_editor_id: last_editor_id, - type: type + type: type, + version: version }.merge(options) if Topic.visible_post_types.include?(post_type) @@ -450,7 +454,7 @@ class Post < ActiveRecord::Base new_cooked = cook(raw, topic_id: topic_id, invalidate_oneboxes: opts.fetch(:invalidate_oneboxes, false)) old_cooked = cooked - update_columns(cooked: new_cooked, baked_at: Time.new, baked_version: BAKED_VERSION) + self.update!(cooked: new_cooked, baked_at: Time.new, baked_version: BAKED_VERSION) # Extracts urls from the body TopicLink.extract_from(self) diff --git a/app/models/user.rb b/app/models/user.rb index 6873d60eb6..0efcb78c84 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -40,6 +40,7 @@ class User < ActiveRecord::Base has_many :warnings has_many :user_archived_messages, dependent: :destroy has_many :email_change_requests, dependent: :destroy + has_many :directory_items, dependent: :delete_all has_one :user_option, dependent: :destroy @@ -90,13 +91,13 @@ class User < ActiveRecord::Base after_create :create_user_option after_create :create_user_profile after_create :ensure_in_trust_level_group - after_create :automatic_group_membership after_create :set_default_categories_preferences after_create :trigger_user_created_event before_save :update_username_lower before_save :ensure_password_is_hashed + after_save :automatic_group_membership after_save :clear_global_notice_if_needed after_save :refresh_avatar after_save :badge_grant @@ -932,23 +933,20 @@ class User < ActiveRecord::Base end def automatic_group_membership - Group.grants_by_email_domain.each do |group| + Group.where(automatic: false) + .where("LENGTH(COALESCE(automatic_membership_email_domains, '')) > 0") + .each do |group| + domains = group.automatic_membership_email_domains.gsub('.', '\.') - if self.email =~ Regexp.new("@(#{domains})$", true) && !group.users.include?(self) - group.add(self) - GroupActionLogger.new(Discourse.system_user, group).log_add_user_to_group(self) + user = User.find(self.id) + + if user.reload.email =~ Regexp.new("@(#{domains})$", true) && !group.users.include?(user) + group.add(user) + GroupActionLogger.new(Discourse.system_user, group).log_add_user_to_group(user) end end end - def automatic_group_from_email - Group.grants_by_email_domain.each do |group| - domains = group.automatic_membership_email_domains.gsub('.', '\.') - return group if self.email =~ Regexp.new("@(#{domains})$", true) - end - nil - end - def create_user_stat stat = UserStat.new(new_since: Time.now) stat.user_id = id @@ -978,15 +976,7 @@ class User < ActiveRecord::Base def add_trust_level # there is a possibility we did not load trust level column, skip it return unless has_attribute? :trust_level - self.trust_level ||= SiteSetting.default_trust_level - - group_from_email = automatic_group_from_email - if group_from_email&.grant_trust_level && - group_from_email.grant_trust_level > self.trust_level - self.trust_level = group_from_email.grant_trust_level - self.trust_level_locked = true - end end def update_username_lower diff --git a/app/models/user_action.rb b/app/models/user_action.rb index 4a880a10c2..5051302b81 100644 --- a/app/models/user_action.rb +++ b/app/models/user_action.rb @@ -277,7 +277,9 @@ SQL MessageBus.publish("/user/#{hash[:user_id]}", {user_action_id: action.id, remove: true}) end - update_like_count(hash[:user_id], hash[:action_type], -1) + if !Topic.where(id: hash[:target_topic_id], archetype: Archetype.private_message).exists? + update_like_count(hash[:user_id], hash[:action_type], -1) + end end def self.synchronize_target_topic_ids(post_ids = nil) diff --git a/app/serializers/post_revision_serializer.rb b/app/serializers/post_revision_serializer.rb index 8ff8b1826e..6fe950739d 100644 --- a/app/serializers/post_revision_serializer.rb +++ b/app/serializers/post_revision_serializer.rb @@ -23,7 +23,8 @@ class PostRevisionSerializer < ApplicationSerializer :body_changes, :title_changes, :user_changes, - :tags_changes + :tags_changes, + :wiki # Creates a field called field_name_changes with previous and @@ -95,6 +96,10 @@ class PostRevisionSerializer < ApplicationSerializer user.avatar_template end + def wiki + object.post.wiki + end + def edit_reason # only show 'edit_reason' when revisions are consecutive current["edit_reason"] if scope.can_view_hidden_post_revisions? || diff --git a/app/serializers/topic_post_count_serializer.rb b/app/serializers/topic_post_count_serializer.rb index c780d12031..70cac7fa57 100644 --- a/app/serializers/topic_post_count_serializer.rb +++ b/app/serializers/topic_post_count_serializer.rb @@ -1,6 +1,7 @@ class TopicPostCountSerializer < BasicUserSerializer - attributes :post_count + attributes :post_count, :primary_group_name, + :primary_group_flair_url, :primary_group_flair_color, :primary_group_flair_bg_color def id object[:user].id @@ -14,4 +15,21 @@ class TopicPostCountSerializer < BasicUserSerializer object[:post_count] end + def primary_group_name + return nil unless object[:user].primary_group_id + object[:user]&.primary_group&.name + end + + def primary_group_flair_url + object[:user]&.primary_group&.flair_url + end + + def primary_group_flair_bg_color + object[:user]&.primary_group&.flair_bg_color + end + + def primary_group_flair_color + object[:user]&.primary_group&.flair_color + end + end diff --git a/app/services/group_mentions_updater.rb b/app/services/group_mentions_updater.rb new file mode 100644 index 0000000000..0bd07a6425 --- /dev/null +++ b/app/services/group_mentions_updater.rb @@ -0,0 +1,14 @@ +class GroupMentionsUpdater + def self.update(current_name, previous_name) + Post.where( + "cooked LIKE '%class=\"mention-group\"%' AND raw LIKE :previous_name", + previous_name: "%@#{previous_name}%" + ).find_in_batches do |posts| + + posts.each do |post| + post.raw.gsub!(/(^|\s)(@#{previous_name})(\s|$)/, "\\1@#{current_name}\\3") + post.save! + end + end + end +end diff --git a/app/services/user_blocker.rb b/app/services/user_blocker.rb index cda62083c9..01b5896e88 100644 --- a/app/services/user_blocker.rb +++ b/app/services/user_blocker.rb @@ -31,8 +31,8 @@ class UserBlocker def hide_posts return unless @user.trust_level == TrustLevel[0] - Post.where(user_id: @user.id).update_all(["hidden = true, hidden_reason_id = COALESCE(hidden_reason_id, ?)", Post.hidden_reasons[:new_user_spam_threshold_reached]]) - topic_ids = Post.where(user_id: @user.id, post_number: 1).pluck(:topic_id) + Post.where(user_id: @user.id).where("created_at > ?", 24.hours.ago).update_all(["hidden = true, hidden_reason_id = COALESCE(hidden_reason_id, ?)", Post.hidden_reasons[:new_user_spam_threshold_reached]]) + topic_ids = Post.where(user_id: @user.id, post_number: 1).where("created_at > ?", 24.hours.ago).pluck(:topic_id) Topic.where(id: topic_ids).update_all(visible: false) unless topic_ids.empty? end diff --git a/app/views/invites/perform_accept_invitation.html.erb b/app/views/invites/perform_accept_invitation.html.erb new file mode 100644 index 0000000000..cc4b0acc1e --- /dev/null +++ b/app/views/invites/perform_accept_invitation.html.erb @@ -0,0 +1,7 @@ +
    + <%if flash[:error]%> +
    + <%=flash[:error]%> +
    + <%end%> +
    diff --git a/app/views/invites/show.html.erb b/app/views/invites/show.html.erb index cc4b0acc1e..1fdd39e3ee 100644 --- a/app/views/invites/show.html.erb +++ b/app/views/invites/show.html.erb @@ -3,5 +3,11 @@
    <%=flash[:error]%>
    + <%else%> +

    <%= t 'activation.welcome_to', site_name: SiteSetting.title %>

    +
    + <%= button_to(perform_accept_invite_path, method: :put, class: 'btn btn-primary') do %> + <%= t 'invite.accept_invite' %> + <% end %> <%end%> diff --git a/app/views/list/list.rss.erb b/app/views/list/list.rss.erb index 78193a8f0d..d0f6c14957 100644 --- a/app/views/list/list.rss.erb +++ b/app/views/list/list.rss.erb @@ -6,7 +6,7 @@ <%= @title %> <%= @link %> <%= @description %> - <% if lang %><%= lang%><% end %> + <% if lang %><%= lang.sub('_', '-')%><% end %> <% if @topic_list.topics && @topic_list.topics.length > 0 %> <%= @topic_list.topics.first.created_at.rfc2822 %> diff --git a/app/views/topics/show.rss.erb b/app/views/topics/show.rss.erb index aa7d08c4a8..a7efff9364 100644 --- a/app/views/topics/show.rss.erb +++ b/app/views/topics/show.rss.erb @@ -7,7 +7,7 @@ <%= @topic_view.title %> <%= topic_url %> <%= @topic_view.posts.first.raw %> - <%= "#{lang}" if lang %> + <% if lang %><%= lang.sub('_', '-')%><% end %> <%= @topic_view.topic.bumped_at.rfc2822 %> <%= @topic_view.topic.category.name %> diff --git a/config/locales/client.ar.yml b/config/locales/client.ar.yml index c70963c9b8..3a9c5625e5 100644 --- a/config/locales/client.ar.yml +++ b/config/locales/client.ar.yml @@ -1530,8 +1530,11 @@ ar: make_banner: "موضوع دعائي" remove_banner: "إزالة موضوع دعائي" reply: - title: 'ردّ' - help: 'ابدأ بكتابة رد على هذا الموضوع' + post: + title: 'ردّ' + topic: + title: 'ردّ' + help: 'ابدأ بكتابة رد على هذا الموضوع' clear_pin: title: "إلغاء التثبيت" help: "إلغاء تثبيت الموضوع حتى لا يظهر في أعلى القائمة" @@ -2127,7 +2130,6 @@ ar: many: "المشاهدات" other: "المشاهدات" replies: "الردود" - views_long: "هذا الموضوع قد تمت مشاهدته {{number}} مرات" activity: "النشاط" likes: "اعجابات" likes_lowercase: @@ -2456,8 +2458,6 @@ ar: backups: "النسخ الاحتياطية" traffic_short: "المرور" traffic: "طلبات تطبيقات الويب" - page_views: "طلبات API " - page_views_short: "طلبات API " show_traffic_report: "عرض تقرير مرور مفصل" reports: today: "اليوم" diff --git a/config/locales/client.bs_BA.yml b/config/locales/client.bs_BA.yml index 540965f483..440a5a3e65 100644 --- a/config/locales/client.bs_BA.yml +++ b/config/locales/client.bs_BA.yml @@ -40,6 +40,7 @@ bs_BA: long_date_with_year_without_time: "MMM D, 'YY" long_date_without_year_with_linebreak: "MMM D
    LT" long_date_with_year_with_linebreak: "MMM D, 'YY
    LT" + wrap_ago: "%{date} prije" tiny: half_a_minute: "< 1m" less_than_x_seconds: @@ -126,6 +127,7 @@ bs_BA: disabled: 'sklonjen %{when}' topic_admin_menu: "topic admin actions" emails_are_disabled: "Sve odlazeće email poruke su globalno onemogućene od strane administratora. Niti jedna notifikacija bilo kakve vrste neće biti poslana." + bootstrap_mode_disabled: "Bootstrap mod će biti ugašen u sljedećih 24 sata." edit: 'izmjeni naslov i kategoriju ove teme' not_implemented: "That feature hasn't been implemented yet, sorry!" no_value: "Ne" @@ -282,6 +284,8 @@ bs_BA: title: "Korisnici" likes_given: "Dato" likes_received: "Primljeno" + topics_entered: "Pregledano" + topics_entered_long: "Pregledano tema" time_read: "Pročitano puta" topic_count: "Teme" topic_count_long: "Kreirano Temi" @@ -296,8 +300,41 @@ bs_BA: one: "%{count} korisnik" few: "%{count} korisnika" other: "%{count} korisnika" + group_histories: + actions: + change_group_setting: "Promjeni grupne postavke" + add_user_to_group: "Dodaj korisnika" + remove_user_from_group: "Ukloni korisnika" + make_user_group_owner: "Napravi vlasnika" + remove_user_as_group_owner: "Ukloni vlasnika" groups: + logs: + title: "Logovi" + when: "Kad" + action: "Akcija" + acting_user: "Trenutni korisnik" + target_user: "Ciljani korisnik" + subject: "Subjekt" + details: "Detalji" + from: "Od" + to: "Za" + edit: + title: 'Edituj Grupu' + full_name: 'Puno ime' + add_members: "Dodaj Članove" + delete_member_confirm: "Ukloni '%{username}' iz '%{group}' grupe?" + request_membership_pm: + title: "Zahtjev za članstvom" + body: "Želio bi da apliciram u članstvo @%{groupName}." + name_placeholder: "Ime grupe, bez razmaka, ista pravila kao za korisničko ime" add: "Dodaj" + join: "Pridruži se grupi" + leave: "Napusti grupu" + request: "Zahtjevaj pristup grupi" + automatic_group: Automatska grupa + closed_group: Zatvorena grupa + is_group_user: "Vi ste član ove grupe" + membership: "Članstvo" selector_placeholder: "Dodaj članove" owner: "vlasnik" visible: "Grupa je vidljiva svim korisnicima" @@ -1246,7 +1283,6 @@ bs_BA: original_post: "Originalni Odgovor" views: "Pregleda" replies: "Odgovora" - views_long: "ova tema je pregledana {{number}} puta" activity: "Aktivnost" likes: "Lajkovi" likes_long: "postoji {{number}} lajkova u ovoj temi" @@ -1339,7 +1375,6 @@ bs_BA: space_free: "{{size}} slobodno" uploads: "Učitavanja" backups: "backupovi" - page_views_short: "API pozivi" show_traffic_report: "Pokaži detaljan izvještaj prometa" reports: today: "Today" diff --git a/config/locales/client.cs.yml b/config/locales/client.cs.yml index 876d31c75d..0607958150 100644 --- a/config/locales/client.cs.yml +++ b/config/locales/client.cs.yml @@ -1371,8 +1371,11 @@ cs: make_banner: "Banner Topic" remove_banner: "Remove Banner Topic" reply: - title: 'Odpovědět' - help: 'začněte psát odpověď na toto téma' + post: + title: 'Odpovědět' + topic: + title: 'Odpovědět' + help: 'začněte psát odpověď na toto téma' clear_pin: title: "Odstranit připnutí" help: "Odebere připnutí tohoto tématu, takže se již nebude zobrazovat na vrcholu seznamu témat" @@ -1891,7 +1894,6 @@ cs: few: "zobrazení" other: "zobrazení" replies: "Odpovědi" - views_long: "toto téma bylo zobrazeno {{number}}krát" activity: "Aktivita" likes: "Líbí se" likes_lowercase: @@ -2195,8 +2197,6 @@ cs: backups: "zálohy" traffic_short: "Provoz" traffic: "Webové požadavky na aplikaci" - page_views: "API požadavky" - page_views_short: "API požadavky" show_traffic_report: "Zobrazit detailní zprávu o provozu" reports: today: "Dnes" diff --git a/config/locales/client.da.yml b/config/locales/client.da.yml index 9a3c5e0fe7..5c6a2eb344 100644 --- a/config/locales/client.da.yml +++ b/config/locales/client.da.yml @@ -136,6 +136,7 @@ da: enabled: 'listet %{when}' disabled: 'aflistet %{when}' topic_admin_menu: "administrationshandlinger på emne" + wizard_required: "Det er tid til at konfigurere dig forum! Start Konfigurations Guiden!" emails_are_disabled: "Alle udgående emails er blevet deaktiveret globalt af en administrator. Ingen emailnotifikationer af nogen slags vil blive sendt." bootstrap_mode_enabled: "For at gøre det nemmere at lancere dit nye website, er du i bootstrap tilstand. Alle nye brugere vil blive tildelt niveau 1 og daglige email updateringer vil være slået til. Dette vil blive automatisk slået fra når total antal brugere overskrider %{min_users} brugere." bootstrap_mode_disabled: "Bootstrap tilstand vil blive deaktiveret indenfor de næste 24 timer." @@ -320,7 +321,19 @@ da: total_rows: one: "1 bruger" other: "%{count} brugere" + group_histories: + actions: + change_group_setting: "Skift gruppe indstilling" + add_user_to_group: "Tilføj bruger" + remove_user_from_group: "Fjern bruger" + make_user_group_owner: "Gør til ejer" + remove_user_as_group_owner: "Fjern ejer" groups: + logs: + title: "Logs" + when: "Når" + action: "Handling" + acting_user: "Fungerende bruger" add: "Tilføj" selector_placeholder: "Tilføj medlemmer" owner: "ejer" @@ -1263,8 +1276,11 @@ da: make_banner: "Gør emnet til en banner" remove_banner: "Emnet skal ikke være banner længere" reply: - title: 'Svar' - help: 'begynd at skrive et svar til dette emne' + post: + title: 'Svar' + topic: + title: 'Svar' + help: 'begynd at skrive et svar til dette emne' clear_pin: title: "Fjern tegnestift" help: "Fjern tegnestiften på dette emne så det ikke længere vises i toppen af emnelisten" @@ -1715,7 +1731,6 @@ da: one: "visning" other: "visninger" replies: "Svar" - views_long: "dette emne er blevet vist {{number}} gange" activity: "Aktivitet" likes: "Likes" likes_lowercase: @@ -1965,8 +1980,6 @@ da: backups: "backups" traffic_short: "Trafik" traffic: "Applikation web forespørgsler" - page_views: "API Forespørgsler" - page_views_short: "API Forespørgsler" show_traffic_report: "Vist detaljeret trafik rapport" reports: today: "I dag" diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml index 0dd4935720..a1af79beba 100644 --- a/config/locales/client.de.yml +++ b/config/locales/client.de.yml @@ -749,6 +749,7 @@ de: none: "Du hast hier noch niemanden eingeladen. Du kannst einzelne Einladungen versenden, oder eine Reihe von Leuten auf einmal einladen, indem du eine CSV-Datei hochlädst." text: "Masseneinladung aus Datei" success: "Die Datei wurde erfolgreich hochgeladen. Du erhältst eine Nachricht, sobald der Vorgang abgeschlossen ist." + error: "Entschuldige, die Datei sollte im CSV-Format sein." password: title: "Passwort" too_short: "Dein Passwort ist zu kurz." @@ -1402,8 +1403,11 @@ de: make_banner: "Ankündigungsbanner" remove_banner: "Ankündigungsbanner entfernen" reply: - title: 'Antworten' - help: 'beginne damit eine Antwort auf dieses Thema zu verfassen' + post: + title: 'Antworten' + topic: + title: 'Antworten' + help: 'beginne damit eine Antwort auf dieses Thema zu verfassen' clear_pin: title: "Loslösen" help: "Dieses Thema von der Themenliste loslösen, sodass es nicht mehr am Anfang der Liste steht." @@ -1883,7 +1887,9 @@ de: one: "Aufruf" other: "Aufrufe" replies: "Antworten" - views_long: "dieses Thema wurde {{number}} mal betrachtet" + views_long: + one: "dieses Thema wurde 1-mal betrachtet" + other: "dieses Thema wurde {{number}}-mal betrachtet" activity: "Aktivität" likes: "Likes" likes_lowercase: @@ -2188,8 +2194,8 @@ de: backups: "Backups" traffic_short: "Traffic" traffic: "Web Requests der Applikation" - page_views: "API Requests" - page_views_short: "API Requests" + page_views: "Seitenaufrufe" + page_views_short: "Seitenaufrufe" show_traffic_report: "Zeige detaillierten Traffic-Bericht" reports: today: "Heute" @@ -2676,6 +2682,11 @@ de: deleted_tag: "Schlagwort gelöscht" renamed_tag: "Schlagwort umbenannt" revoke_email: "E-Mail widerrufen" + lock_trust_level: "Vertrauensstufe sperren" + unlock_trust_level: "Vertrauensstufe entsperren" + activate_user: "Benutzer aktivieren" + deactivate_user: "Benutzer deaktivieren" + change_readonly_mode: "Nur-Lesen-Modus ändern" screened_emails: title: "Gefilterte E-Mails" description: "Wenn jemand ein Konto erstellt, werden die folgenden E-Mail-Adressen überprüft und es wird die Anmeldung blockiert oder eine andere Aktion ausgeführt." diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 5b38645a9e..2107e2511f 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -248,7 +248,7 @@ en: like_count: "Likes" topic_count: "Topics" post_count: "Posts" - user_count: "New Users" + user_count: "Users" active_user_count: "Active Users" contact: "Contact Us" contact_info: "In the event of a critical issue or urgent matter affecting this site, please contact us at %{contact_info}." @@ -696,7 +696,7 @@ en: email: title: "Email" - instructions: "Never shown to the public" + instructions: "never shown to the public" ok: "We will email you to confirm" invalid: "Please enter a valid email address" authenticated: "Your email has been authenticated by {{provider}}" @@ -707,13 +707,13 @@ en: name: title: "Name" - instructions: "Your full name (optional)" + instructions: "your full name (optional)" instructions_required: "Your full name" too_short: "Your name is too short" ok: "Your name looks good" username: title: "Username" - instructions: "Unique, no spaces, short" + instructions: "unique, no spaces, short" short_instructions: "People can mention you as @{{username}}" available: "Your username is available" global_match: "Email matches the registered username" @@ -842,7 +842,7 @@ en: same_as_username: "Your password is the same as your username." same_as_email: "Your password is the same as your email." ok: "Your password looks good." - instructions: "At least %{count} characters." + instructions: "at least %{count} characters" summary: title: "Summary" @@ -1554,8 +1554,12 @@ en: remove_banner: "Remove Banner Topic" reply: - title: 'Reply' - help: 'begin composing a reply to this topic' + post: + title: 'Reply' + # help i.e. tooltop is at controls.reply + topic: + title: 'Reply' + help: 'begin composing a reply to this topic' clear_pin: title: "Clear pin" @@ -1700,6 +1704,7 @@ en: edit: "Editing {{link}} {{replyAvatar}} {{username}}" edit_reason: "Reason: " post_number: "post {{number}}" + wiki_last_edited_on: "wiki last edited on" last_edited_on: "post last edited on" reply_as_new_topic: "Reply as linked Topic" continue_discussion: "Continuing the discussion from {{postLink}}:" @@ -1887,17 +1892,18 @@ en: hide: "Hide revision" show: "Show revision" revert: "Revert to this revision" + edit_wiki: "Edit wiki" comparing_previous_to_current_out_of_total: "{{previous}} {{current}} / {{total}}" displays: inline: title: "Show the rendered output with additions and removals inline" - button: ' HTML' + button: 'HTML' side_by_side: title: "Show the rendered output diffs side-by-side" - button: ' HTML' + button: 'HTML' side_by_side_markdown: title: "Show the raw source diffs side-by-side" - button: ' Raw' + button: 'Raw' category: can: 'can… ' diff --git a/config/locales/client.es.yml b/config/locales/client.es.yml index 8c492be56b..f5e0f72e0e 100644 --- a/config/locales/client.es.yml +++ b/config/locales/client.es.yml @@ -271,7 +271,7 @@ es: reject: 'Rechazar' delete_user: 'Eliminar usuario' title: "Necesita aprobación" - none: "No hay posts para revisar" + none: "No hay posts para revisar." edit: "Editar" cancel: "Cancelar" view_pending: "ver posts pendientes" @@ -312,7 +312,7 @@ es: topic_count: "Temas" topic_count_long: "Temas creados" post_count: "Respuestas" - post_count_long: "Posts escritos" + post_count_long: "Respuestas publicadas" no_results: "No se encontraron resultados." days_visited: "Visitas" days_visited_long: "Días visitados" @@ -358,7 +358,7 @@ es: logs: "No hay registros para este grupo." add: "Añadir" join: "Unirse al grupo" - leave: "Salirse del grupo" + leave: "Salir del grupo" request: "Solicitar unirse al grupo" automatic_group: Grupo automático closed_group: Grupo cerrado @@ -623,7 +623,7 @@ es: instructions: "Imágenes de fondo serán centrados y tendrán un ancho por default de 590px." email: title: "E-mail" - instructions: "Nunca se mostrará públicamente" + instructions: "nunca se mostrará al público" ok: "Te enviaremos un email para confirmar" invalid: "Por favor, introduce una dirección de correo válida" authenticated: "Tu dirección de correo ha sido autenticada por {{provider}}" @@ -633,13 +633,13 @@ es: other: "Sólo te enviaremos si no te hemos visto en los últimos {{count}} minutos." name: title: "Nombre" - instructions: "Tu nombre completo (opcional)" + instructions: "tu nombre completo (opcional)" instructions_required: "Tu nombre completo" too_short: "Tu nombre es demasiado corto" ok: "Tu nombre es válido" username: title: "Nombre de usuario" - instructions: "Debe ser único, sin espacios y conciso" + instructions: "único, sin espacios y corto" short_instructions: "Los demás usuarios pueden mencionarte como @{{username}}" available: "Tu nombre de usuario está disponible" global_match: "La dirección coincide con la del nombre de usuario registrado" @@ -749,6 +749,7 @@ es: none: "Aún no has invitado a nadie aquí. Puedes enviar invitaciones individuales, o invitar varias personas a la vez subiendo un archivo CSV." text: "Archivo de Invitación en Masa" success: "Archivo subido correctamente, se te notificará con un mensaje cuando se complete el proceso." + error: "Lo sentimos, el archivo debería tener formato csv." password: title: "Contraseña" too_short: "Tu contraseña es demasiada corta." @@ -756,7 +757,7 @@ es: same_as_username: "Tu contraseña es la misma que tu nombre de usuario." same_as_email: "Tu contraseña es la misma que tu dirección de correo electrónico." ok: "Tu contraseña es válida." - instructions: "Debe contener al menos %{count} caracteres." + instructions: "debe tener al menos %{count} caracteres" summary: title: "Resumen" stats: "Estadísticas" @@ -1402,8 +1403,11 @@ es: make_banner: "Tema de encabezado" remove_banner: "Remover tema de encabezado" reply: - title: 'Responder' - help: 'comienza a escribir una respuesta a este tema' + post: + title: 'Responder' + topic: + title: 'Responder' + help: 'comienza a escribir una respuesta a este tema' clear_pin: title: "Eliminar Destacado" help: "Elimina el estado 'Destacado' de este tema para que no aparezca más en lo más alto de tu lista de temas" @@ -1529,6 +1533,7 @@ es: edit: "Editando {{link}} {{replyAvatar}} {{username}}" edit_reason: "Motivo:" post_number: "post {{number}}" + wiki_last_edited_on: "wiki editada por última vez" last_edited_on: "post editado por última ven en" reply_as_new_topic: "Responder como tema enlazado" continue_discussion: "Continuando la discusión desde {{postLink}}:" @@ -1887,7 +1892,9 @@ es: one: "visita" other: "visitas" replies: "Respuestas" - views_long: "este tema se ha visto {{number}} veces" + views_long: + one: "este tema se ha visto 1 vez" + other: "este tema se ha visto {{number}} veces" activity: "Actividad" likes: "Likes" likes_lowercase: @@ -2192,8 +2199,8 @@ es: backups: "backups" traffic_short: "Tráfico" traffic: "Peticiones web de la app" - page_views: "Peticiones de API" - page_views_short: "Peticiones de API" + page_views: "Páginas vistas" + page_views_short: "Páginas vistas" show_traffic_report: "Mostrar informe detallado del tráfico" reports: today: "Hoy" @@ -2336,7 +2343,7 @@ es: warn_local_payload_url: "Parece que estás estableciendo el webhook a una url local. El evento enviado a una dirección local podría causar algún efecto secundario o comportamientos inesperados. ¿Continuar?" secret_invalid: "Secret no debe tener espacios en blanco." secret_too_short: "Secret debería tener al menos 12 caracteres." - secret_placeholder: "Una cadena opcional, para generar firma" + secret_placeholder: "Una cadena opcional, utilizada para generar una firma" event_type_missing: "Necesitas establecer al menos un tipo de evento." content_type: "Tipo de contenido" secret: "Secret" @@ -2676,10 +2683,17 @@ es: revoke_admin: "revocar administración" grant_moderation: "conceder moderación" revoke_moderation: "revocar moderación" - backup_operation: "operación de copia de seguridad de respaldo" + backup_create: "crear copia de seguridad" deleted_tag: "etiqueta eliminada" renamed_tag: "etiqueta renombrada" revoke_email: "revocar email" + lock_trust_level: "Bloqueó el nivel de confianza" + unlock_trust_level: "Desbloqueó el nivel de confianza" + activate_user: "activó a un usuario" + deactivate_user: "desactivó a un usuario" + change_readonly_mode: "cambio a modo de sólo lectura" + backup_download: "descargar copia de seguridad" + backup_destroy: "destruir copia de seguridad" screened_emails: title: "Correos bloqueados" description: "Cuando alguien trata de crear una cuenta nueva, los siguientes correos serán revisados y el registro será bloqueado, o alguna otra acción será realizada." diff --git a/config/locales/client.et.yml b/config/locales/client.et.yml index f61c6a0af9..e62204acd6 100644 --- a/config/locales/client.et.yml +++ b/config/locales/client.et.yml @@ -1401,8 +1401,11 @@ et: make_banner: "Tee teema bänneriks" remove_banner: "Eemalda teema bännerist" reply: - title: 'vasta' - help: 'alusta selle teema vastuse koostamist' + post: + title: 'vasta' + topic: + title: 'vasta' + help: 'alusta selle teema vastuse koostamist' clear_pin: title: "Kustuta esiletõstmine" help: "Eemalda sellelt teemalt esiletõstetu staatus nii, et ta enam ei ilmuks teemade loetelu tipus" @@ -1885,7 +1888,6 @@ et: one: "vaatamine" other: "vaatamisi" replies: "Vastuseid" - views_long: "seda teemat on vaadatud {{number}} korda" activity: "Aktiivsus" likes: "Meeldimisi" likes_lowercase: @@ -2192,8 +2194,6 @@ et: backups: "varundusi" traffic_short: "Liiklus" traffic: "Rakenduse veebipäringud" - page_views: "API päringuid" - page_views_short: "API päringuid" show_traffic_report: "Näita liikluse detailraportit" reports: today: "Täna" @@ -2336,7 +2336,6 @@ et: warn_local_payload_url: "Näib, et püüad seada veebihaaki lokaalsele URL-le. Lokaalsele aadressile saadetud sündmus võib esile kusuda kõrvalnähte või ootamatusi. Kas jätkame?" secret_invalid: "Salavõti ei tohi sisaldada tühikuid." secret_too_short: "Salavõti peab olema vähemalt 12 sümbolit pikk." - secret_placeholder: "Valikuline tekst, kasutatakse allkirja genereerimiseks" event_type_missing: "Pead seadistama vähemalt ühe sündmuse liigi." content_type: "Sisutüüp" secret: "Salavõti" diff --git a/config/locales/client.fa_IR.yml b/config/locales/client.fa_IR.yml index f5ea1fc915..a7af2fce1c 100644 --- a/config/locales/client.fa_IR.yml +++ b/config/locales/client.fa_IR.yml @@ -1411,7 +1411,6 @@ fa_IR: views_lowercase: other: "بازدیدها" replies: "پاسخ‌ها" - views_long: "از این موضوع {{number}} بار بازدید شده" activity: "فعالیت" likes: "پسندها" likes_lowercase: @@ -1543,8 +1542,6 @@ fa_IR: backups: "پشتیبان ها" traffic_short: "ترافیک" traffic: "درخواست های نرم افزار وب" - page_views: "درخواست های API" - page_views_short: "درخواست های API" show_traffic_report: "نمایش دقیق گزارش ترافیک" reports: today: "امروز" diff --git a/config/locales/client.fi.yml b/config/locales/client.fi.yml index 7e192e7492..157ca1bacf 100644 --- a/config/locales/client.fi.yml +++ b/config/locales/client.fi.yml @@ -168,7 +168,7 @@ fi: admin_title: "Ylläpito" flags_title: "Liput" show_more: "näytä lisää" - show_help: "ohjeet" + show_help: "valinnat" links: "Linkit" links_lowercase: one: "linkki" @@ -337,6 +337,8 @@ fi: target_user: "Kohdekäyttäjä" subject: "Aihe" details: "Yksityiskohdat" + from: "Lähettäjä" + to: "Vastaanottaja" edit: title: 'Muuta ryhmää' full_name: 'Täysimittainen nimi' @@ -622,7 +624,7 @@ fi: instructions: "Taustakuvan leveys on 590 pikseliä." email: title: "Sähköposti" - instructions: "Ei tule julkiseksi" + instructions: "ei näytetä julkisesti missään" ok: "Lähetämme sinulle sähköpostin varmistukseksi." invalid: "Sähköpostiosoite ei kelpaa." authenticated: "{{provider}} on todentanut sähköpostiosoitteesi" @@ -632,13 +634,13 @@ fi: other: "Lähetämme sähköpostia vain, jos emme ole nähneet sinua edellisen {{count}} minuutin aikana." name: title: "Nimi" - instructions: "Koko nimesi (valinnainen)" + instructions: "koko nimesi (valinnainen)" instructions_required: "Koko nimesi" too_short: "Nimesi on liian lyhyt" ok: "Nimesi vaikuttaa hyvältä" username: title: "Käyttäjätunnus" - instructions: "Uniikki, lyhyt, ei välilyöntejä" + instructions: "uniikki, ei välilyöntejä, lyhyt" short_instructions: "Muut käyttäjät voivat viitata sinuun nimellä @{{username}}" available: "Käyttäjätunnus on vapaana" global_match: "Sähköposti vastaa rekisteröityä käyttäjänimeä" @@ -748,6 +750,7 @@ fi: none: "Et ole kutsunut vielä ketään tänne. Voit lähettää yksittäisiä kutsuja tai kutsua joukon ihmisiä kerralla lataamalla CSV-tiedoston." text: "Lähetä massakutsu tiedostosta" success: "Tiedoston lähettäminen onnistui. Saat viestin, kun prosessi on valmis." + error: "Pahoittelut, tiedoston tulee olla CSV-muodossa." password: title: "Salasana" too_short: "Salasanasi on liian lyhyt." @@ -755,7 +758,7 @@ fi: same_as_username: "Salasanasi on sama kuin käyttäjätunnuksesi." same_as_email: "Salasanasi on sama kuin sähköpostisi." ok: "Salasana vaikuttaa hyvältä." - instructions: "Vähintään %{count} merkkiä." + instructions: "vähintään %{count} merkkiä." summary: title: "Yhteenveto" stats: "Tilastot" @@ -1321,7 +1324,7 @@ fi: other: "Ketjun viimeisin viesti on jo %{hours} tuntia vanha, joten ketju suljetaan heti." timeline: back: "Takaisin" - back_description: "Siirry takaisin viimeisimpään lukemattomaan viestiin" + back_description: "Siirry takaisin ensimmäiseen lukemattomaan viestiin" replies_short: "%{current} / %{total}" progress: title: ketjun edistyminen @@ -1401,8 +1404,11 @@ fi: make_banner: "Tee ketjusta banneri" remove_banner: "Poista banneri" reply: - title: 'Vastaa' - help: 'aloita kirjottamaan uutta vastausta tähän ketjuun' + post: + title: 'Vastaa' + topic: + title: 'Vastaa' + help: 'aloita kirjottamaan uutta vastausta tähän ketjuun' clear_pin: title: "Poista kiinnitys" help: "Poista kiinnitys, jotta ketju ei enää pysy listauksen ylimpänä" @@ -1528,6 +1534,7 @@ fi: edit: "Muokataan {{link}} {{replyAvatar}} {{username}}" edit_reason: "Syy:" post_number: "viesti {{number}}" + wiki_last_edited_on: "wikiä muokattiin viimeksi" last_edited_on: "viestin viimeisin muokkausaika" reply_as_new_topic: "Vastaa aihetta sivuavassa ketjussa" continue_discussion: "Jatkoa ketjulle {{postLink}}:" @@ -1585,7 +1592,7 @@ fi: undo_like: "peru tykkäys" edit: "muokkaa viestiä" edit_anonymous: "Pahoittelut, sinun täytyy ensin kirjautua sisään voidaksesi muokata tätä viestiä." - flag: "liputa tämä viesti tai lähetä käyttäjälle yksityisviesti" + flag: "liputa tämä viesti tai lähetä käyttäjälle yksityisesti siihen liittyvä huomio" delete: "poista tämä viesti" undelete: "peru viestin poistaminen" share: "jaa linkki tähän viestiin" @@ -1617,18 +1624,18 @@ fi: like: "Peru tykkäys" vote: "Peru ääni" people: - off_topic: "liputti tämän asiaan kuulumattomaksi" + off_topic: "liputti tämän eksyvän aiheesta" spam: "liputti tämän roskapostiksi" - inappropriate: "liputti tämän asiattomaksi" + inappropriate: "liputti tämän sopimattomaksi" notify_moderators: "ilmoitti valvojille" notify_user: "lähetti viestin" bookmark: "lisäsi tämän kirjanmerkkeihin" like: "tykkäsi tästä" vote: "äänesti tätä" by_you: - off_topic: "Liputit tämän asiaankuulumattomaksi" + off_topic: "Liputit tämän eksyvän aiheesta" spam: "Liputit tämän roskapostiksi" - inappropriate: "Liputit tämän asiattomaksi" + inappropriate: "Liputit tämän sopimattomaksi" notify_moderators: "Liputit tämän valvojille tiedoksi" notify_user: "Lähetit viestin tälle käyttäjälle" bookmark: "Olet lisännyt viestin kirjainmerkkeihisi" @@ -1636,39 +1643,39 @@ fi: vote: "Olet äänestänyt tätä viestiä" by_you_and_others: off_topic: - one: "Sinä ja yksi muu käyttäjä liputitte tämän asiaankuulumattomaksi" - other: "Sinä ja {{count}} muuta liputtivat tämän asiaankuulumattomaksi" + one: "Sinä ja toinen käyttäjä liputitte tämän eksyvän aiheesta" + other: "Sinä ja {{count}} muuta liputitte tämän eksyvän aiheesta" spam: - one: "Sinä ja yksi muu käyttäjä liputitte tämän roskapostiksi" - other: "Sinä ja {{count}} muuta liputtivat tämän roskapostiksi" + one: "Sinä ja toinen käyttäjä liputitte tämän roskapostiksi" + other: "Sinä ja {{count}} muuta liputitte tämän roskapostiksi" inappropriate: - one: "Sinä ja yksi muu käyttäjä liputitte tämän asiattomaksi" - other: "Sinä ja {{count}} muuta liputtivat tämän asiattomaksi" + one: "Sinä ja toinen käyttäjä liputitte tämän sopimattomaksi" + other: "Sinä ja {{count}} muuta liputitte tämän sopimattomaksi" notify_moderators: - one: "Sinä ja yksi muu käyttäjä liputitte tämän valvojille tiedoksi" - other: "Sinä ja {{count}} muuta liputtivat tämän valvojille tiedoksi" + one: "Sinä ja toinen käyttäjä liputitte tämän valvojille tiedoksi" + other: "Sinä ja {{count}} muuta liputitte tämän valvojille tiedoksi" notify_user: - one: "Sinä ja 1 muuta lähetitte tälle käyttäjälle yksityisviestin" + one: "Sinä ja toinen käyttäjä lähetitte tälle käyttäjälle yksityisviestin" other: "Sinä ja {{count}} muuta lähetitte tälle käyttäjälle viestin" bookmark: - one: "Sinä ja yksi muu käyttäjä lisäsitte tämän kirjanmerkkeihinne" - other: "Sinä ja {{count}} muuta lisäsivät tämän kirjanmerkkeihinsä" + one: "Sinä ja toinen käyttäjä lisäsitte tämän kirjanmerkkeihinne" + other: "Sinä ja {{count}} muuta lisäsitte tämän kirjanmerkkeihinne" like: - one: "Sinä ja yksi muu käyttäjä tykkäsitte tästä" - other: "Sinä ja {{count}} muuta tykkäsivät tästä" + one: "Sinä ja toinen käyttäjä tykkäsitte tästä" + other: "Sinä ja {{count}} muuta tykkäsitte tästä" vote: - one: "Sinä ja yksi muu käyttäjä äänestitte tätä viestiä" - other: "Sinä ja {{count}} muuta äänestivät tätä viestiä" + one: "Sinä ja toinen käyttäjä äänestitte tätä viestiä" + other: "Sinä ja {{count}} muuta äänestitte tätä viestiä" by_others: off_topic: - one: "Yksi käyttäjä liputti tämän asiaankuulumattomaksi" - other: "{{count}} käyttäjää liputtivat tämän asiaankuulumattomaksi" + one: "Yksi liputti tämän eksyvän aiheesta" + other: "{{count}} käyttäjää liputtivat tämän eksyvän aiheesta" spam: one: "yksi käyttäjä liputti tämän roskapostiksi" other: "{{count}} käyttäjää liputti tämän roskapostiksi" inappropriate: - one: "yksi käyttäjä liputti tämän epäasialliseksi" - other: "{{count}} käyttäjää liputti tämän epäasialliseksi" + one: "yksi liputti tämän sopimattomaksi" + other: "{{count}} käyttäjää liputti tämän sopimattomaksi" notify_moderators: one: "yksi käyttäjä liputti tämän tiedoksi valvojalle" other: "{{count}} käyttäjää liputti tämän tiedoksi valvojalle" @@ -1814,12 +1821,12 @@ fi: ip_address_missing: "-" hidden_email_address: "(piilotettu)" submit_tooltip: "Toimita lippu" - take_action_tooltip: "Saavuta liputusraja välittömästi, ennemmin kuin odota muidenkin käyttäjien liputuksia." + take_action_tooltip: "Saavuta liputusraja välittömästi; ei tarvetta odottaa muiden käyttäjien liputuksia." cant: "Pahoittelut, et pysty liputtamaan tätä viestiä tällä hetkellä." notify_staff: 'Ilmoita ylläpidolle yksityisesti' formatted_name: - off_topic: "Se on asiaankuulumaton" - inappropriate: "Se on asiaton" + off_topic: "Se eksyy aiheesta" + inappropriate: "Se on sopimaton" spam: "Se on roskapostia" custom_placeholder_notify_user: "Esitä asiasi ymmärrettäväsi, ole rakentava ja kohtelias." custom_placeholder_notify_moderators: "Kerro ymmärrettävästi ja selvästi, mistä olet huolestunut ja lisää viestiin oleelliset esimerkit ja linkit, jos mahdollista." @@ -1886,7 +1893,9 @@ fi: one: "katselu" other: "katselut" replies: "Vastauksia" - views_long: "tätä ketjua on katseltu {{number}} kertaa" + views_long: + one: "ketjua on katseltu yhden kerran" + other: "ketjua on katseltu {{number}} kertaa" activity: "Toiminta" likes: "Tykkäykset" likes_lowercase: @@ -2191,8 +2200,8 @@ fi: backups: "varmuuskopiot" traffic_short: "Liikenne" traffic: "Sovelluksen web-pyynnöt" - page_views: "API pyynnöt" - page_views_short: "API pyynnöt" + page_views: "Sivunkatselut" + page_views_short: "Sivunkatselut" show_traffic_report: "Näytä yksityiskohtainen liikenneraportti" reports: today: "Tänään" @@ -2261,10 +2270,10 @@ fi: summary: action_type_3: one: "asiaankuulumaton" - other: "asiaankuulumaton x{{count}}" + other: "eksyy aiheesta x{{count}}" action_type_4: - one: "asiaton" - other: "asiaton x{{count}}" + one: "sopimaton" + other: "sopimaton x{{count}}" action_type_6: one: "mukautettu" other: "mukautettu x{{count}}" @@ -2618,6 +2627,8 @@ fi: deleted_tag: "poistettu tunniste" renamed_tag: "uudelleen nimetty tunniste" revoke_email: "peru sähköpostiosoite" + unlock_trust_level: "poista luottamustason lukitus" + activate_user: "aktivoi käyttäjä" screened_emails: title: "Seulottavat sähköpostiosoitteet" description: "Uuden käyttäjätunnuksen luonnin yhteydessä annettua sähköpostiosoitetta verrataan alla olevaan listaan ja tarvittaessa tunnuksen luonti joko estetään tai suoritetaan muita toimenpiteitä." diff --git a/config/locales/client.fr.yml b/config/locales/client.fr.yml index 87ef615c99..22708255f3 100644 --- a/config/locales/client.fr.yml +++ b/config/locales/client.fr.yml @@ -623,7 +623,7 @@ fr: instructions: "Les images d'arrière-plan seront centrées avec une taille par défaut de 590 pixels." email: title: "Courriel" - instructions: "Ne sera jamais visible publiquement" + instructions: "jamais visible publiquement" ok: "Nous vous enverrons un courriel de confirmation" invalid: "Merci d'entrer une adresse de courriel valide" authenticated: "Votre adresse de courriel a été authentifiée par {{provider}}" @@ -633,13 +633,13 @@ fr: other: "Nous vous enverrons des courriels seulement si nous ne vous avons pas vu sur le site dans les dernières {{count}} minutes." name: title: "Nom d'utilisateur" - instructions: "Votre nom complet (facultatif)" + instructions: "votre nom complet (facultatif)" instructions_required: "Votre nom complet" too_short: "Votre nom est trop court" ok: "Votre nom a l'air correct" username: title: "Pseudo" - instructions: "Unique, sans espaces, court" + instructions: "unique, sans espaces, court" short_instructions: "Les gens peuvent vous mentionner avec @{{username}}" available: "Votre pseudo est disponible" global_match: "L'adresse de courriel correspond au pseudo enregistré" @@ -749,6 +749,7 @@ fr: none: "Vous n'avez invité personne pour le moment. Vous pouvez envoyer des invitations individuelles ou inviter plusieurs personnes à la fois en envoyant un fichier CSV." text: "Invitation massive depuis un fichier" success: "Le fichier a été correctement importé. Vous serez notifié par message privé lorsque le traitement sera terminé." + error: "Désolé, le fichier doit être au format CSV." password: title: "Mot de passe" too_short: "Votre mot de passe est trop court." @@ -756,7 +757,7 @@ fr: same_as_username: "Votre mot de passe est le même que votre pseudo." same_as_email: "Votre mot de passe est le même que votre adresse mail." ok: "Votre mot de passe semble correct." - instructions: "Au moins %{count} caractères." + instructions: "au moins %{count} caractères." summary: title: "Résumé" stats: "Statistiques" @@ -1402,8 +1403,11 @@ fr: make_banner: "Sujet à la une" remove_banner: "Retirer le sujet à la une" reply: - title: 'Répondre' - help: 'commencez à répondre à ce sujet' + post: + title: 'Répondre' + topic: + title: 'Répondre' + help: 'commencez à répondre à ce sujet' clear_pin: title: "Désépingler" help: "Retirer l'épingle de ce sujet afin qu'il n'apparaisse plus en tête de votre liste de sujet" @@ -1529,6 +1533,7 @@ fr: edit: "Modifier {{link}} par {{replyAvatar}} {{username}}" edit_reason: "Raison :" post_number: "message {{number}}" + wiki_last_edited_on: "Wiki dernièrement modifié le" last_edited_on: "message dernièrement modifié le" reply_as_new_topic: "Répondre par un nouveau sujet" continue_discussion: "Suite du sujet {{postLink}} :" @@ -1887,7 +1892,9 @@ fr: one: "vue" other: "vues" replies: "Réponses" - views_long: "ce sujet a été vu {{number}} fois" + views_long: + one: "ce sujet a été vu 1 fois" + other: "ce sujet a été vu {{number}} fois" activity: "Activité" likes: "J'aime" likes_lowercase: @@ -2192,8 +2199,8 @@ fr: backups: "sauvegardes" traffic_short: "Trafic" traffic: "Requêtes Web Application" - page_views: "Requêtes API" - page_views_short: "Requêtes API" + page_views: "Pages vues" + page_views_short: "Pages vues" show_traffic_report: "Afficher le rapport de trafic détaillé" reports: today: "Aujourd'hui" @@ -2575,7 +2582,7 @@ fr: send_test: "Envoyer un courriel de test" sent_test: "Envoyé !" delivery_method: "Méthode d'envoi" - preview_digest_desc: "Prévisualiser le contenu des courriels hebdomadaires sommaires envoyés aux utilisateurs inactifs." + preview_digest_desc: "Prévisualiser le contenu des résumés par courriel envoyés aux utilisateurs inactifs." refresh: "Rafraîchir" send_digest_label: "Envoyer ce résultat à :" send_digest: "Envoyer" @@ -2676,10 +2683,17 @@ fr: revoke_admin: "révoquer les droits d'administration" grant_moderation: "Accorder les droits de modération" revoke_moderation: "Révoquer les droits de modération" - backup_operation: "sauvegarde" + backup_create: "créer une sauvegarde" deleted_tag: "tag supprimé" renamed_tag: "tag renommé" revoke_email: "révoquer le courriel" + lock_trust_level: "verrouiller le niveau de confiance " + unlock_trust_level: "déverouiller le niveau de confiance" + activate_user: "activer l'utilisateur" + deactivate_user: "désactvier l'utilisateur" + change_readonly_mode: "changer le mode de lecteur seule" + backup_download: "télécharger la sauvegarde" + backup_destroy: "détruire la sauvegarde" screened_emails: title: "Courriels affichés" description: "Lorsque quelqu'un essaye de créer un nouveau compte, les adresses de courriel suivantes seront vérifiées et l'inscription sera bloquée, ou une autre action sera réalisée." diff --git a/config/locales/client.gl.yml b/config/locales/client.gl.yml index 0473816158..c4696e9f97 100644 --- a/config/locales/client.gl.yml +++ b/config/locales/client.gl.yml @@ -1145,8 +1145,11 @@ gl: make_banner: "Tema do báner" remove_banner: "Eliminar o tema do báner" reply: - title: 'Responder' - help: 'responder a este tema' + post: + title: 'Responder' + topic: + title: 'Responder' + help: 'responder a este tema' clear_pin: title: "Borrar o estado Pegar" help: "Borra o estado Pegado deste tema para que non apareza na banda superior da lista de temas." @@ -1568,7 +1571,6 @@ gl: one: "vista" other: "vistas" replies: "Respostas" - views_long: "este tema visitouse {{number}} veces" activity: "Actividade" likes: "Gústames" likes_lowercase: @@ -1700,8 +1702,6 @@ gl: backups: "copias de seguranza" traffic_short: "Tráfico" traffic: "Peticións web de aplicativos" - page_views: "Peticións API" - page_views_short: "Peticións API" show_traffic_report: "Amosar o informe detallado do tráfico" reports: today: "Hoxe" diff --git a/config/locales/client.he.yml b/config/locales/client.he.yml index 10c90c7b8f..35a32b9d98 100644 --- a/config/locales/client.he.yml +++ b/config/locales/client.he.yml @@ -623,7 +623,7 @@ he: instructions: "תמונות רקע ימורכזו ויוצגו ברוחב ברירת מחדל של 590px." email: title: "דואר אלקטרוני" - instructions: "לא נצפו מעולם" + instructions: "לעולם לא מוצג לציבור" ok: "נשלח אליכם דואר אלקטרוני לאישור" invalid: "בבקשה הכניסו כתובת דואר אלקטרוני תקינה" authenticated: "כתובת הדואר האלקטרוני שלך אושרה על ידי {{provider}}" @@ -633,13 +633,13 @@ he: other: "נשלח אליכם דוא\"ל רק אם לא ראינו אתכם ב{{count}} הדקות האחרונות." name: title: "שם" - instructions: "שמך המלא (רשות)" + instructions: "שמכם המלא (אופציונלי)" instructions_required: "שמך המלא" too_short: "השם שלך קצר מידי" ok: "השם נראה טוב" username: title: "שם משתמש/ת" - instructions: "ייחודי, ללא רווחים וקצר" + instructions: "ייחודי, ללא רווחים, קצר" short_instructions: "אנשים יכולים לאזכר אותך כ @{{username}}" available: "שם המשתמש שלך פנוי" global_match: "הדואר האלקטרוני תואם את שם המשתמש הרשום" @@ -749,6 +749,7 @@ he: none: "עדיין לא הזמנתם לכאן אף אחד. תוכלו לשלוח הזמנות פרטניות, או להזמין כמה אנשים יחד על ידי העלאת קובץ CSV." text: "הזמנה קבוצתית מקובץ" success: "העלאת הקובץ החלה בהצלחה, תקבלו התראה באמצעות מסר כאשר התהליך יושלם." + error: "מצטערים, הקובץ צריך להיות בפורמט csv." password: title: "סיסמה" too_short: "הסיסמה שלך קצרה מידי." @@ -756,7 +757,7 @@ he: same_as_username: "הסיסמה שלך זהה לשם המשתמש/ת שלך." same_as_email: "הסיסמה שלך זהה לכתובת הדוא\"ל שלך." ok: "הסיסמה שלך נראית טוב." - instructions: "לפחות %{count} תווים." + instructions: "לפחות %{count} תווים" summary: title: "סיכום" stats: "סטטיסטיקות" @@ -1404,8 +1405,11 @@ he: make_banner: "נושא באנר" remove_banner: "הסרת נושא באנר" reply: - title: 'תגובה' - help: 'התחילו לכתוב תגובה לנושא זה' + post: + title: 'תגובה' + topic: + title: 'תגובה' + help: 'התחילו לכתוב תגובה לנושא זה' clear_pin: title: "נקה נעיצה" help: "נקה סטטוס נעוץ של נושא זה כדי שהוא לא יופיע עוד בראש רשימת הנושאים שלכם" @@ -1531,6 +1535,7 @@ he: edit: "עורך את {{link}} {{replyAvatar}} {{username}}" edit_reason: "סיבה: " post_number: "פוסט {{number}}" + wiki_last_edited_on: "וויקי נערך לאחרונה ב" last_edited_on: "הפוסט נערך לאחרונה ב" reply_as_new_topic: "תגובה כנושא מקושר" continue_discussion: "ממשיך את הדיון מ {{postLink}}:" @@ -1889,7 +1894,9 @@ he: one: "צפיה" other: "צפיות" replies: "תגובות" - views_long: "הנושא הזה נצפה {{number}} פעמים" + views_long: + one: "נושא זה נצפה פעם 1" + other: "נושא זה נצפה {{number}} פעמים" activity: "פעילות" likes: "לייקים" likes_lowercase: @@ -2194,8 +2201,8 @@ he: backups: "גיבויים" traffic_short: "תנועה" traffic: "בקשות יישום web" - page_views: "בקשות API" - page_views_short: "בקשות API" + page_views: "צפיות-דף" + page_views_short: "צפיות-דף" show_traffic_report: "הצגת דו\"ח תנועה מפורט" reports: today: "היום" @@ -2338,7 +2345,7 @@ he: warn_local_payload_url: "נראה שאתם מנסים להגדיר webhook ל url מקומי. אירוע שנשלח לכתובת מקומית עלול לגרום לתופעות בלתי-צפויות מראש. האם להמשיך?" secret_invalid: "אסור שהסוד יכיל תווי רווח כלשהם." secret_too_short: "הסוד אמור להכיל לפחות 12 תווים." - secret_placeholder: "מחרוזת אופציונלית, משמשת ליצירת חתימות" + secret_placeholder: "מחרוזת אופציונלית, משמשת ליצירת חתימה" event_type_missing: "אתם צריכים לקבוע לפחות סוג אירועים אחד." content_type: "סוג תוכן" secret: "סוד" @@ -2678,10 +2685,17 @@ he: revoke_admin: "שללו אדמיניסטרציה" grant_moderation: "הענקת הנחיה" revoke_moderation: "שללו הנחיה" - backup_operation: "פעולת גיבוי" + backup_create: "יצירת גיבוי" deleted_tag: "תגית נמחקה" renamed_tag: "תגית שונתה" revoke_email: "שללו מייל" + lock_trust_level: "נעילת רמת אמון" + unlock_trust_level: "שחרור רמת אמון מנעילה" + activate_user: "הפעלת משתמש/ת" + deactivate_user: "ניטרול משתמש/ת" + change_readonly_mode: "שינוי מצב קריאה בלבד" + backup_download: "הורדת גיבוי" + backup_destroy: "השמדת גיבוי" screened_emails: title: "הודעות דואר מסוננות" description: "כשמישהו מנסה ליצור חשבון חדש, כתובות הדואר האלקטרוני הבאות ייבדקו וההרשמה תחסם או שיבוצו פעולות אחרות." diff --git a/config/locales/client.it.yml b/config/locales/client.it.yml index f1acec4aec..b777ad90a7 100644 --- a/config/locales/client.it.yml +++ b/config/locales/client.it.yml @@ -985,12 +985,12 @@ it: similar_topics: "Il tuo argomento è simile a..." drafts_offline: "bozze offline" group_mentioned: - one: "Menzionando {{group}}, stai per notificare 1 persona – sei sicuro?" - other: "Menzionando {{group}}, stai per notificare {{count}} persone – sei sicuro?" + one: "Menzionando {{group}}, verrà notificata 1 persona – sei sicuro?" + other: "Menzionando {{group}}, verranno notificate {{count}} persone – sei sicuro?" cannot_see_mention: - category: "Hai menzionato {{username}} ma non saranno notificati perché non hanno accesso a questa categoria. Dovrai aggiungerli ad un gruppo che ha accesso a questa categoria." - private: "Hai menzionato {{username}} ma non saranno notificati perché non hanno accesso a questo messaggio personale. Dovrai invitarli a questo MP." - duplicate_link: "Sembra che il tuo link a {{domain}} sia già stato pubblicato nell'argomento di @{{username}} una risposta {{ago}} – sei sicuro di volerlo pubblicare ancora?" + category: "Hai menzionato {{username}} ma non verranno notificati perché non hanno accesso a questa categoria. Dovrai aggiungerli ad un gruppo che ha accesso a questa categoria." + private: "Hai menzionato {{username}} ma non verranno notificati perché non hanno accesso a questo messaggio personale. Dovrai invitarli a questo MP." + duplicate_link: "Sembra che il collegamento a {{domain}} sia già stato pubblicato nell'argomento di @{{username}} in una risposta {{ago}} – sei sicuro di volerlo pubblicare ancora?" error: title_missing: "Il titolo è richiesto" title_too_short: "Il titolo deve essere lungo almeno {{min}} caratteri" @@ -1397,8 +1397,11 @@ it: make_banner: "Argomento Annuncio" remove_banner: "Rimuovi Argomento Annuncio" reply: - title: 'Rispondi' - help: 'inizia a scrivere una risposta a questo argomento' + post: + title: 'Rispondi' + topic: + title: 'Rispondi' + help: 'inizia a scrivere una risposta a questo argomento' clear_pin: title: "Spunta" help: "Rimuovi la spunta da questo argomento, così non comparirà più in cima alla lista degli argomenti" @@ -1874,7 +1877,6 @@ it: one: "visita" other: "visite" replies: "Risposte" - views_long: "questo argomento è stato visto {{number}} volte" activity: "Attività" likes: "Mi piace" likes_lowercase: @@ -2179,8 +2181,6 @@ it: backups: "backup" traffic_short: "Traffico" traffic: "Richieste web dell'applicazione" - page_views: "Richieste API" - page_views_short: "Richieste API" show_traffic_report: "Mostra rapporto di traffico dettagliato" reports: today: "Oggi" @@ -2323,7 +2323,6 @@ it: warn_local_payload_url: "Stai impostando un webhook che punta ad un indirizzo locale. Eventi inviati ad un indirizzo locale possono causare effetti collaterali o risultati inaspettati. Vuoi continuare?" secret_invalid: "La chiave segreta non può contenere spazi vuoti." secret_too_short: "La chiave segreta deve contenere almeno 12 caratteri." - secret_placeholder: "Una stringa opzionale, usata per generare la firma" event_type_missing: "Devi impostare almeno un tipo di evento." content_type: "Tipo Contenuto" secret: "Chiave segreta" @@ -2616,7 +2615,7 @@ it: do_nothing: "non fare nulla" staff_actions: title: "Azioni Staff" - instructions: "Fai clic sui nomi utenti e sulle azioni per filtrare la lista. Fai clic sulle immagini del profilo per andare alle pagine utenti." + instructions: "Fai clic sul nome utente o sulle azioni per filtrare la lista. Fai clic sulle immagini del profilo per andare alla pagina utente." clear_filters: "Mostra Tutto" staff_user: "Utente" target_user: "Destinatario" @@ -2658,10 +2657,17 @@ it: revoke_admin: "revoca amministrazione" grant_moderation: "assegna moderazione" revoke_moderation: "revoca moderazione" - backup_operation: "operazione di backup" + backup_create: "crea backup" deleted_tag: "etichetta cancellata" renamed_tag: "etichetta rinominata" revoke_email: "revoca email" + lock_trust_level: "C" + unlock_trust_level: "sblocca livello di esperienza" + activate_user: "attiva utente" + deactivate_user: "disattiva utente" + change_readonly_mode: "cambia la modalità di sola lettura" + backup_download: "scarica backup" + backup_destroy: "distruggi backup" screened_emails: title: "Email Scansionate" description: "Quando qualcuno cerca di creare un nuovo account, verrando controllati i seguenti indirizzi email e la registrazione viene bloccata, o eseguita qualche altra azione." diff --git a/config/locales/client.ja.yml b/config/locales/client.ja.yml index 890b564449..b7fe18bf31 100644 --- a/config/locales/client.ja.yml +++ b/config/locales/client.ja.yml @@ -1110,8 +1110,11 @@ ja: make_banner: "バナートピック" remove_banner: "バナートピックを削除" reply: - title: '返信' - help: 'このトピックに返信する' + post: + title: '返信' + topic: + title: '返信' + help: 'このトピックに返信する' clear_pin: title: "ピンを解除する" help: "このトピックのピンを外し、トピックリストの先頭に表示されないようにする" @@ -1474,7 +1477,6 @@ ja: views_lowercase: other: " 閲覧" replies: "返信" - views_long: "このトピックは{{number}}回閲覧されました" activity: "アクティビティ" likes: "いいね!" likes_lowercase: @@ -1659,8 +1661,6 @@ ja: backups: "バックアップ" traffic_short: "トラフィック" traffic: "Application web requests" - page_views: "API Requests" - page_views_short: "API Requests" show_traffic_report: "Show Detailed Traffic Report" reports: today: "今日" diff --git a/config/locales/client.ko.yml b/config/locales/client.ko.yml index 90200ca37d..f4e08280b8 100644 --- a/config/locales/client.ko.yml +++ b/config/locales/client.ko.yml @@ -26,6 +26,7 @@ ko: millions: "{{number}}백만" dates: time: "a h:mm" + timeline_date: "YYYY MMM" long_no_year: "M D a h:mm" long_no_year_no_time: "MMM D" full_no_year_no_time: "MMMM Do" @@ -117,6 +118,7 @@ ko: enabled: '%{when} 목록에 게시' disabled: '%{when} 목록에서 감춤' topic_admin_menu: "주제 관리자 기능" + wizard_required: "포럼을 설정하세요! 설치 마법사를 시작하세요!" emails_are_disabled: "관리자가 이메일 송신을 전체 비활성화 했습니다. 어떤 종류의 이메일 알림도 보내지지 않습니다." bootstrap_mode_enabled: "쉬운 시작을 위해 부트스트랩 모드로 구동 되었습니다. 모든 새로운 사용자에게 신뢰 수준 1이 부여되고 매일 이메일 다이제스트가 보내집니다. 이 기능은 총 사용자 수가% {min_users} 를 초과 할 때 자동으로 꺼집니다." bootstrap_mode_disabled: "부트스트랩 모드는 24시간 뒤 비활성화 될 것입니다." @@ -293,7 +295,28 @@ ko: posts_read_long: "게시글 읽음" total_rows: other: "%{count} 사용자" + group_histories: + actions: + change_group_setting: "그룹 설정 변경" + add_user_to_group: "사용자 추가" + remove_user_from_group: "사용자 삭제" groups: + logs: + title: "로그" + when: "언제" + action: "액션" + subject: "주제" + from: "부터" + to: "까지" + edit: + title: '그룹 편집' + full_name: '전체 이름' + add_members: "구성원 추가" + delete_member_confirm: "'%{username}'를 '%{group}' 그룹에서 삭제하겠습니까?" + request_membership_pm: + title: "멤버십 요청" + body: "@%{groupName} 에 멤버십을 요청합니다." + name_placeholder: "그룹 이름, 공백 없이 username 규칙과 동일하게 입력하세요." add: "추가" selector_placeholder: "멤버 추가" owner: "소유자" @@ -755,13 +778,13 @@ ko: complete_email_not_found: "%{email}과 일치하는 계정이 없습니다." login: title: "로그인" - username: "사용자" + username: "아이디" password: "비밀번호" - email_placeholder: "이메일 주소 또는 사용자 이름" + email_placeholder: "이메일 주소 또는 아이디" caps_lock_warning: "Caps Lock 켜짐" error: "알 수없는 오류" rate_limit: "다시 로그인 하기전에 잠시만 기다려주세요." - blank_username_or_password: "이메일 또는 사용자명과 비밀번호를 입력해 주세요." + blank_username_or_password: "이메일 또는 아이디, 비밀번호를 입력해 주세요." reset_password: '암호 재설정' logging_in: "로그인 중.." or: "또는" @@ -1128,8 +1151,11 @@ ko: make_banner: "배너 주제" remove_banner: "배너 주제 제거" reply: - title: '답글' - help: '이 주제에 대한 답글 작성 시작' + post: + title: '답글' + topic: + title: '답글' + help: '이 주제에 대한 답글 작성 시작' clear_pin: title: "고정 취소" help: "더 이상 목록의 맨 위에 표시하지 않도록 이 주제의 고정 상태를 해제합니다." @@ -1508,7 +1534,6 @@ ko: views_lowercase: other: "조회" replies: "답변" - views_long: "이 주제는 {{number}}번 읽혔습니다." activity: "활동" likes: "좋아요" likes_lowercase: @@ -1639,8 +1664,6 @@ ko: backups: "백업" traffic_short: "트래픽" traffic: "어플리케이션 웹 요청" - page_views: "API 요청" - page_views_short: "API 응답" show_traffic_report: "자세한 트래픽 리포트 보기" reports: today: "오늘" @@ -1965,7 +1988,7 @@ ko: none: "로그가 없습니다." filters: title: "필터" - user_placeholder: "사용자명" + user_placeholder: "아이디" address_placeholder: "name@example.com" type_placeholder: "다이제스트, 가입..." reply_key_placeholder: "답글 키" @@ -1988,7 +2011,7 @@ ko: do_nothing: "아무것도 하지 않음" staff_actions: title: "스태프 기록" - instructions: "사용자 이름을 클릭하여 목록에서 차단하십시오. 프로필 사진을 클릭하여 사용자 페이지로 갑니다." + instructions: "사용자 아이디을 클릭하여 목록에서 차단하십시오. 프로필 사진을 클릭하여 사용자 페이지로 갑니다." clear_filters: "전체 보기" staff_user: "스태프 사용자" target_user: "타겟 사용자" diff --git a/config/locales/client.nb_NO.yml b/config/locales/client.nb_NO.yml index 04f0801a4a..5e3e8376ce 100644 --- a/config/locales/client.nb_NO.yml +++ b/config/locales/client.nb_NO.yml @@ -749,6 +749,7 @@ nb_NO: none: "Du har ikke invitert noen hit enda. Du kan sende individuelle invitasjoner, eller du kan invitere flere personer samtidig ved å laste opp en CSV-fil." text: "Masseinvitasjon fra fil" success: "Filen er lastet opp, du vil motta en melding når prosessesen er ferdig" + error: "Beklager, filen skal være i CSV-format." password: title: "Passord" too_short: "Passordet ditt er for kort" @@ -1887,7 +1888,9 @@ nb_NO: one: "visninger" other: "visninger" replies: "Svar" - views_long: "dette emnet har blit sett {{number}} ganger" + views_long: + one: "dette emnet er vist 1 gang" + other: "dette emnet er vist {{number}} ganger" activity: "Aktivitet" likes: "Liker" likes_lowercase: @@ -2192,8 +2195,8 @@ nb_NO: backups: "sikkerhetskopier" traffic_short: "Trafikk" traffic: "Applikasjon webforespørsler" - page_views: "API forespørsler" - page_views_short: "API forespørsler" + page_views: "Sidevisninger" + page_views_short: "Sidevisninger" show_traffic_report: "Vis detaljert trafikkrapport" reports: today: "I dag" @@ -2336,7 +2339,7 @@ nb_NO: warn_local_payload_url: "Det ser ut som du prøver å sende webhooken til en lokal URL. Hendelser som sendes til lokale adresser kan gi sideeffekter eller føre til uventet oppførsel. Fortsette?" secret_invalid: "Delt hemmelighet kan ikke inneholde blanke tegn." secret_too_short: "Delt hemmelighet må være minst 12 tegn." - secret_placeholder: "En valgfri streng, brukt til å generere signatur" + secret_placeholder: "En valgfri streng som brukes for å lage signatur" event_type_missing: "Du må sette opp minst en type hendelse." content_type: "Content Type" secret: "Delt hemmelighet" @@ -2680,6 +2683,8 @@ nb_NO: deleted_tag: "slettet stikkord" renamed_tag: "stikkord med nytt navn" revoke_email: "tilbakekall e-post" + lock_trust_level: "lås tillitsnivå" + unlock_trust_level: "lås opp tillitsnivå" screened_emails: title: "Kontrollerte e-poster" description: "Når noen forsøker å lage en ny konto, vil de følgende e-postadressene bli sjekket, og registreringen vil bli blokkert, eller en annen handling vil bli utført." @@ -3038,7 +3043,7 @@ nb_NO: error_help: "Se følgende lenker for hjelp til spørringer for merker." bad_count_warning: header: "ADVARSEL!" - text: "Det er manglende grant samples. Dette skjer når merkesøket returnerer bruker-ID-er eller innleggs-ID-er som ikke eksisterer. Dette kan føre til uventede resultater senere - dobbeltsjekk søket ditt." + text: "Det er manglende grant samples. Dette skjer når merke-søket returnerer bruker-IDer eller innleggs-ID-er som ikke eksisterer. Dette kan føre til uventede resultater senere - dobbeltsjekk søket ditt." no_grant_count: "Ingen merker å tildele." grant_count: one: "Ett merke å tildele." diff --git a/config/locales/client.nl.yml b/config/locales/client.nl.yml index c17803f668..e25c4ad1ff 100644 --- a/config/locales/client.nl.yml +++ b/config/locales/client.nl.yml @@ -321,7 +321,19 @@ nl: total_rows: one: "1 lid" other: "%{count} leden" + group_histories: + actions: + change_group_setting: "Wijzig groepsinstellingen" + add_user_to_group: "Gebruiker toevoegen" + remove_user_from_group: "Gebruiker verwijderen" + make_user_group_owner: "Maak eigenaar" + remove_user_as_group_owner: "Eigenaar intrekken" groups: + edit: + title: 'Wijzig groep' + full_name: 'Volledige Naam' + add_members: "Voeg leden toe" + delete_member_confirm: "Verwijder '%{username}' uit de '%{group}' groep?" add: "Voeg toe" selector_placeholder: "Voeg leden toe" owner: "eigenaar" @@ -1340,8 +1352,11 @@ nl: make_banner: "Maak bannertopic" remove_banner: "Verwijder bannertopic" reply: - title: 'Reageer' - help: 'Schrijf een reactie op deze topic' + post: + title: 'Reageer' + topic: + title: 'Reageer' + help: 'Schrijf een reactie op deze topic' clear_pin: title: "Verwijder pin" help: "Verwijder de gepinde status van deze topic, zodat het niet langer bovenaan je topiclijst verschijnt." @@ -1815,7 +1830,6 @@ nl: one: "weergave" other: "weergaves" replies: "Reacties" - views_long: "deze topic is {{number}} keer bekeken" activity: "Activiteit" likes: "Likes" likes_lowercase: @@ -2118,8 +2132,6 @@ nl: backups: "backups" traffic_short: "Verkeer" traffic: "Applicatie webverzoeken" - page_views: "API-verzoeken" - page_views_short: "API-verzoeken" show_traffic_report: "Laat gedetailleerd verkeersrapport zien" reports: today: "Vandaag" @@ -2262,7 +2274,6 @@ nl: warn_local_payload_url: "Zo te zien probeer je een webhook naar een lokale URL te laten wijzen. Gebeurtenissen die hierheen gestuurd worden kunnen mogelijk resulteren in onverwacht gedrag. Doorgaan?" secret_invalid: "Secret mag geen lege tekens bevatten." secret_too_short: "Secret moet uit minimaal 12 tekens bestaan." - secret_placeholder: "Een optionele waarde, gebruikt bij het maken van een handtekening" event_type_missing: "Stel minstens één event type in." content_type: "Type inhoud" secret: "Secret" @@ -2903,6 +2914,7 @@ nl: user_preferences: "Gebruikersvoorkeuren" tags: "Tags" search: "Zoek" + groups: "Groepen" badges: title: Badges new_badge: Nieuwe badge diff --git a/config/locales/client.pl_PL.yml b/config/locales/client.pl_PL.yml index 666600d81c..ebc7057fb6 100644 --- a/config/locales/client.pl_PL.yml +++ b/config/locales/client.pl_PL.yml @@ -186,7 +186,7 @@ pl_PL: admin_title: "Administracja" flags_title: "Flagi" show_more: "pokaż więcej" - show_help: "pomoc" + show_help: "opcje" links: "Odnośniki" links_lowercase: one: "link" @@ -240,7 +240,7 @@ pl_PL: contact_info: "W sprawach wymagających szybkiej reakcji lub związanych z poprawnym funkcjonowaniem serwisu, prosimy o kontakt: %{contact_info}." bookmarked: title: "Zakładka" - clear_bookmarks: "Usuń z zakładek" + clear_bookmarks: "Wyczyść zakładki" help: bookmark: "Kliknij, aby dodać pierwszy wpis tematu do zakładek" unbookmark: "Kliknij, aby usunąć wszystkie zakładki z tego tematu" @@ -359,7 +359,7 @@ pl_PL: title: "Logi" when: "Kiedy" action: "Akcja" - subject: "Kontekst" + subject: "Temat" details: "Szczegóły" from: "Od" to: "Do" @@ -769,7 +769,7 @@ pl_PL: same_as_username: "Twoje hasło jest takie samo jak nazwa użytkownika." same_as_email: "Twoje hasło jest takie samo jak twój e-mail." ok: "Twoje hasło jest poprawne." - instructions: "Co najmniej %{count} znaków." + instructions: "przynajmniej %{count} znaków" summary: title: "Podsumowanie" stats: "Statystyki" @@ -1876,7 +1876,6 @@ pl_PL: few: "odsłony" other: "odsłon" replies: "Odpowiedzi" - views_long: "ten temat był oglądany {number}} razy" activity: "Aktywność" likes: "Lajki" likes_lowercase: @@ -2178,8 +2177,6 @@ pl_PL: backups: "kopie zapasowe" traffic_short: "Ruch" traffic: "Zapytania do aplikacji" - page_views: "Zapytania API" - page_views_short: "Zapytania API" show_traffic_report: "Pokaż szczegółowy raport ruchu" reports: today: "Dzisiaj" diff --git a/config/locales/client.pt.yml b/config/locales/client.pt.yml index cc3aae884e..e7eec8a3ae 100644 --- a/config/locales/client.pt.yml +++ b/config/locales/client.pt.yml @@ -1367,8 +1367,11 @@ pt: make_banner: "Tópico de Faixa" remove_banner: "Remover Tópico de Faixa" reply: - title: 'Responder' - help: 'começa a compor uma resposta a este tópico' + post: + title: 'Responder' + topic: + title: 'Responder' + help: 'começa a compor uma resposta a este tópico' clear_pin: title: "Remover destaque" help: "Remover destaque deste tópico para que o mesmo deixe de aparecer no topo da sua lista de tópicos" @@ -1849,7 +1852,6 @@ pt: one: "vista" other: "vistas" replies: "Respostas" - views_long: "este tópico foi visto {{number}} vezes" activity: "Atividade" likes: "Gostos" likes_lowercase: @@ -2154,8 +2156,6 @@ pt: backups: "fazer cópias de segurança" traffic_short: "Tráfego" traffic: "Pedidos de aplicação web" - page_views: "Pedidos API" - page_views_short: "Pedidos API" show_traffic_report: "Mostrar Relatório Detalhado do Tráfego" reports: today: "Hoje" @@ -2298,7 +2298,6 @@ pt: warn_local_payload_url: "Parece que está a tentar configurar um webhook para um url local. Eventos entregues num endereço local poderão causar efeitos secundários ou comportamentos inesperados. Continuar?" secret_invalid: "O segredo não pode ter espaços." secret_too_short: "O segredo tem de ter pelo menos 12 caracteres." - secret_placeholder: "Um texto adicional, usado para gerar uma assinatura" event_type_missing: "Tem de configurar pelo menos um tipo de evento." content_type: "Tipo de Conteúdo" secret: "Segredo" diff --git a/config/locales/client.pt_BR.yml b/config/locales/client.pt_BR.yml index 7b3979a90d..3b9bd220d3 100644 --- a/config/locales/client.pt_BR.yml +++ b/config/locales/client.pt_BR.yml @@ -1821,7 +1821,6 @@ pt_BR: one: "visualizar" other: "visualizações" replies: "Respostas" - views_long: "este tópico foi visto {{number}} vezes" activity: "Atividade" likes: "Curtidas" likes_lowercase: @@ -2124,8 +2123,6 @@ pt_BR: backups: "backups" traffic_short: "Tráfego" traffic: "Solicitações do aplicativo pela web" - page_views: "Solicitações de API" - page_views_short: "Solicitações de API" show_traffic_report: "Mostrar Relatório de Tráfego Detalhado" reports: today: "Hoje" @@ -2268,7 +2265,6 @@ pt_BR: warn_local_payload_url: "Parece que você está tentando configurar um webhook para uma URL local. Eventos entregues a endereços locais podem causar efeitos colaterais ou comportamentos inesperados. Continuar?" secret_invalid: "O segredo não deve conter caracteres em branco." secret_too_short: "O segredo deve ter pelo menos 12 caracteres." - secret_placeholder: "Uma string opcional, usada para gerar assinaturas" event_type_missing: "Você deve configurar apenas um tipo de evento." content_type: "Tipo de Conteúdo" secret: "Segredo" diff --git a/config/locales/client.ro.yml b/config/locales/client.ro.yml index 5dc82097e4..34507f458a 100644 --- a/config/locales/client.ro.yml +++ b/config/locales/client.ro.yml @@ -1452,8 +1452,11 @@ ro: make_banner: "Adaugă statutul de banner" remove_banner: "Șterge statutul de banner" reply: - title: 'Răspunde' - help: 'începe să scrii un răspuns la acest subiect' + post: + title: 'Răspunde' + topic: + title: 'Răspunde' + help: 'începe să scrii un răspuns la acest subiect' clear_pin: title: "Anulează subiect fixat" help: "Elimină subiectul fixat pentru a nu mai apărea la începutul listei de subiecte." @@ -1975,7 +1978,6 @@ ro: few: "vizualizări" other: "de vizualizări" replies: "Răspunsuri" - views_long: "acest subiect a fost vizualizat de {{number}} (de) ori" activity: "Activitate" likes: "Aprecieri" likes_lowercase: @@ -2292,8 +2294,6 @@ ro: backups: "back-up" traffic_short: "Trafic" traffic: "Cereri web" - page_views: "Cereri API" - page_views_short: "Cereri API" show_traffic_report: "Arată raportul detaliat cu privire la trafic" reports: today: "Astăzi" @@ -2441,7 +2441,6 @@ ro: warn_local_payload_url: "Se pare că dorești să setezi un webhook pentru un url local. Un eveniment livrat către o adresă locală ar putea avea efecte secundare și genera comportamente neașteptate. Continuă?" secret_invalid: "Secretul nu trebuie să aibă nici un caracter spațiu-gol." secret_too_short: "Secretul trebuie sa conțină cel puțin 12 caractere." - secret_placeholder: "Un șir opțional, folosit la generarea semnăturii" event_type_missing: "Va trebui să setezi cel puțin un tip de evenimente." content_type: "Tip conținut" secret: "Secret" diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml index 43bc1d0fe3..8f8d6d13a3 100644 --- a/config/locales/client.ru.yml +++ b/config/locales/client.ru.yml @@ -594,7 +594,7 @@ ru: watched_tags: "Наблюдение" watched_tags_instructions: "Вы будете автоматически отслеживать все новые темы в этих тэгах. Вам будут приходить уведомления о новых сообщениях и темах, а также количество непрочитанных и новых сообщений будет показано рядом с названиями тем. " tracked_tags: "Отслеживаемая" - tracked_tags_instructions: "Вы будете автоматически отслеживать новые темы в этих разделах. Рядом со списком тем будет отображено количество непрочитанных и новых сообщений." + tracked_tags_instructions: "Вы будете автоматически отслеживать новые темы с этими тегами. Рядом со списком тем будет отображено количество непрочитанных и новых сообщений." muted_tags: "Выключено" muted_tags_instructions: "Вы не будете получать уведомления о новых темах в этих разделах. Также, они не будут показываться во вкладке Непрочитанное." watched_categories: "Наблюдение" @@ -680,7 +680,7 @@ ru: instructions: "Картинки фона будут отцентрированы и по-умолчанию имеют ширину 590 пикселей." email: title: "E-mail" - instructions: "Всегда скрыт от публики" + instructions: "Не показывать" ok: "Мы вышлем вам письмо для подтверждения" invalid: "Введите действующий адрес электронной почты" authenticated: "Ваш адрес электронной почты подтвержден {{provider}}" @@ -692,7 +692,7 @@ ru: other: "Мы отправим вам письмо только в том случае, если вы не были онлайн последние {{count}} минyт." name: title: "Имя" - instructions: "Ваше полное имя (опционально)" + instructions: "ваше полное имя (опционально)" instructions_required: "Ваше полное имя" too_short: "Ваше имя слишком короткое" ok: "Допустимое имя" @@ -810,6 +810,7 @@ ru: none: "Вы еще никого не приглашали сюда. Вы можете отправить индивидуальные приглашения или пригласить группу людей сразу загрузив CSV файл." text: "Пригласить всех из файла" success: "Файл успешно загружен, вы получите сообщение, когда процесс будет завершен." + error: "Извините, но файл должен быть в csv формате." password: title: "Пароль" too_short: "Пароль слишком короткий." @@ -817,7 +818,7 @@ ru: same_as_username: "Ваш пароль такой же, как и ваше имя пользователя." same_as_email: "Ваш пароль такой же, как и ваш email." ok: "Допустимый пароль." - instructions: "Не менее %{count} символов." + instructions: "не менее %{count} символов" summary: title: "Сводка" stats: "Статистика" @@ -1347,7 +1348,7 @@ ru: one: "1 сообщение в теме" few: "{{post_count}} сообщений в теме" many: "{{post_count}} сообщений в теме" - other: "{{post_count}} сообщений в теме" + other: "{{count}} сообщений в теме" create: 'Создать Тему' create_long: 'Создать новую тему' private_message: 'Новое личное соощение' @@ -1506,8 +1507,11 @@ ru: make_banner: "Создать объявление" remove_banner: "Удалить объявление" reply: - title: 'Ответить' - help: 'ответить в теме' + post: + title: 'Ответить' + topic: + title: 'Ответить' + help: 'ответить в теме' clear_pin: title: "Открепить" help: "Открепить тему, чтобы она более не показывалась в самом начале списка тем" @@ -1647,6 +1651,7 @@ ru: edit: "Изменить {{link}} {{replyAvatar}} {{username}}" edit_reason: "Причина:" post_number: "сообщение {{number}}" + wiki_last_edited_on: "вики редактировалось" last_edited_on: "последний раз сообщение редактировалось" reply_as_new_topic: "Ответить в новой связанной теме" continue_discussion: "Продолжить обсуждение из {{postLink}}:" @@ -2066,7 +2071,11 @@ ru: few: "просмотра" other: "просмотров" replies: "Ответов" - views_long: "тема просмотрена {{number}} раз" + views_long: + one: "тема просмотрена 1 раз" + few: "тема просмотрена {{number}} раза" + many: "тема просмотрена {{number}} раз" + other: "тема просмотрена {{number}} раз" activity: "Активность" likes: "Нрав." likes_lowercase: @@ -2393,8 +2402,8 @@ ru: backups: "Резервные копии" traffic_short: "Трафик" traffic: "Трафик (веб-запросы)" - page_views: "Запросы API" - page_views_short: "Запросы API" + page_views: "Просмотров Страниц" + page_views_short: "Просмотров" show_traffic_report: "Раширенный отчет по трафику" reports: today: "Сегодня" @@ -2532,6 +2541,7 @@ ru: note_html: "Никому не сообщайте этот ключ. Тот, у кого он есть, сможет создавать сообщения, выдавая себя за любого пользователя форума." web_hooks: title: "Webhooks" + none: "Сейчас нет веб-перехватчиков." instruction: "Webhooks позволяют Discourse уведомлять внешние службы, когда определенное событие происходит на вашем сайте. При срабатывании webhook, на соответствующий URL будет отправлен POST-запрос." detailed_instruction: "При наступлении выбранного события, на соответствующий URL будет отправлен POST-запрос." new: "Добавить Webhook" @@ -2539,17 +2549,27 @@ ru: save: "Сохранить" destroy: "Удалить" description: "Описание" + controls: "Управление" go_back: "Вернуться к списку" + payload_url: "Ссылка для отправки" payload_url_placeholder: "https://example.com/postreceive" + warn_local_payload_url: "По-видимому вы пытаетесь настроить веб-перехватчик на локальный URL. Собитие, отправляемое на локальный адрес может иметь побочное действие или неожиданное поведение. Продолжить?" secret_invalid: "Ключ не должен содержать пустых символов." secret_too_short: "Ключ должен быть не менее 12 символов." - secret_placeholder: "Необязательная строка, используется для генерации подписи" + secret_placeholder: "Допольнительная строка, используется для создания подписи" event_type_missing: "Вам необходимо настроить по крайней мере один тип событий." + content_type: "Тип Содержимого" secret: "Ключ" + event_chooser: "Какие события должны вызывать веб-перехватчик?" wildcard_event: "Присылать мне всё." individual_event: "Выбрать отдельные события." + verify_certificate: "Проверять TLS сертификат ссылки для отправки данных" active: "Активный" active_notice: "Мы будем отправлять подробности события, когда оно будет происходить." + categories_filter_instructions: "Подходящие веб-перехватчики будут срабатывать только если событие связано с указанными разделами. Оставьте пустым, чтобы веб-перехватчик срабатывал для всех разделов." + categories_filter: "Только Для Этих Разделов" + groups_filter_instructions: "Подходящие веб-перехватчики будут срабатывать только если событие связано с указанными группами. Оставьте пустым, чтобы веб-перехватчик срабатывал для всех групп." + groups_filter: "Только Для Групп" delete_confirm: "Удалить Webhook?" topic_event: name: "Событие темы" @@ -2580,14 +2600,18 @@ ru: other: "Завершится через {{count}} секунд." request: "Запрос" response: "Ответ" + redeliver_confirm: "Вы уверены, что хотите повторно отправить теже самые данные?" headers: "Заголовки" + payload: "Данные для отправки" body: "Тело" go_list: "Перейти к списку" go_details: "Редактировать webhook" go_events: "Перейти к событию" ping: "Ping" + status: "Код Состояния" event_id: "Идентификатор (ID)" timestamp: "Создано" + completion: "Время Завершения" actions: "Действия" plugins: title: "Плагины" @@ -2876,10 +2900,17 @@ ru: revoke_admin: "отозваны права администратора" grant_moderation: "выданы права модератора" revoke_moderation: "отозваны права модератора" - backup_operation: "операции резервного копирования" + backup_create: "создать резервную копию" deleted_tag: "удаленный тег" renamed_tag: "переименованный тэг" revoke_email: "отозвать e-mail" + lock_trust_level: "заморозка уровня доверия" + unlock_trust_level: "разморозка уровня доверия" + activate_user: "активация пользователя" + deactivate_user: "деактивация пользователя" + change_readonly_mode: "изменение режима \"только для чтения\"" + backup_download: "скачать резервную копию" + backup_destroy: "удалить резервную копию" screened_emails: title: "Почтовые адреса" description: "Когда кто-то создает новую учетную запись, проверяется данный почтовый адрес и регистрация блокируется или производятся другие дополнительные действия." @@ -2989,6 +3020,7 @@ ru: moderator: "Модератор?" admin: "Администратор?" blocked: "Заблокирован?" + staged: "Имитация?" show_admin_profile: "Администратор" edit_title: "Редактировать заголовок" save_title: "Сохранить заголовок" @@ -3061,11 +3093,18 @@ ru: block_failed: 'Не удалось заблокировать пользователя.' block_confirm: 'Вы уверены что хотите заблокировать этого пользователя? Он больше не сможет создавать темы и отправлять сообщения.' block_accept: 'Подтвердить блокировку' + bounce_score: "Карма" reset_bounce_score: label: "Сбросить" + title: "сбросить карму к 0" deactivate_explanation: "Дезактивированные пользователи должны заново подтвердить свой e-mail." suspended_explanation: "Замороженный пользователь не может войти." block_explanation: "Заблокированный не может отвечать и создавать новые темы." + staged_explanation: "Имитированный пользователь может отправлять сообщения только по эл.почте в определённые темы." + bounce_score_explanation: + none: "Нет возвратов полученных недавно от этой эл.почты." + some: "Несколько возвратов получено недавно от этой эл.почты." + threshold_reached: "Получено слишком много возвратов от этой эл.почты." trust_level_change_failed: "Возникла ошибка при изменении уровня доверия пользователя." suspend_modal_title: "Заморозить пользователя" trust_level_2_users: "Пользователи с уровнем доверия 2" @@ -3272,6 +3311,7 @@ ru: sample: "Используйте следующий HTML-код на своем сайте, для возможности создания связанных тем. Замените REPLACE_ME канонической ссылкой страницы, куда производится встраивание." title: "Встраивание" host: "Разрешённые Хосты" + path_whitelist: "Разрешённый Путь" edit: "изменить" category: "Опубликовать в разделе" add_host: "Добавить хост" diff --git a/config/locales/client.sk.yml b/config/locales/client.sk.yml index e11000f12a..ae93d789b5 100644 --- a/config/locales/client.sk.yml +++ b/config/locales/client.sk.yml @@ -1288,8 +1288,11 @@ sk: make_banner: "Banerová téma" remove_banner: "Odstrániť banerovú tému" reply: - title: 'Odpovedať' - help: 'vytvor odpoveď k tejto téme' + post: + title: 'Odpovedať' + topic: + title: 'Odpovedať' + help: 'vytvor odpoveď k tejto téme' clear_pin: title: "Zruš pripnutie" help: "Zruší pripnutie tejto témy takže sa už viac nebude objavovať na vrchu Vášho zoznamu tém" @@ -1767,7 +1770,6 @@ sk: few: "zobrazenia" other: "zobrazení" replies: "Odpovede" - views_long: "táto téma bola prezeraná {{number}} krát " activity: "Aktivita" likes: "Páči sa mi" likes_lowercase: @@ -2054,8 +2056,6 @@ sk: backups: "zálohy" traffic_short: "Vyťaženie" traffic: "Požiadavky webových aplikácií" - page_views: "Požiadavky API" - page_views_short: "Požiadavky API" show_traffic_report: "Zobraziť detaily vyťaženia" reports: today: "Dnes" diff --git a/config/locales/client.sq.yml b/config/locales/client.sq.yml index 2f9c815211..6003891a8d 100644 --- a/config/locales/client.sq.yml +++ b/config/locales/client.sq.yml @@ -1268,8 +1268,11 @@ sq: make_banner: "Temë banderolë" remove_banner: "Çaktivizo temën banderolë" reply: - title: 'Përgjigju' - help: 'shkruaj një përgjigje tek kjo temë' + post: + title: 'Përgjigju' + topic: + title: 'Përgjigju' + help: 'shkruaj një përgjigje tek kjo temë' clear_pin: title: "Clear pin" help: "Hiqeni statusin \"e ngjitur\" të kësaj teme që të mos afishohet më në majë të listës së temave" @@ -1707,7 +1710,6 @@ sq: one: "shikim" other: "shikime" replies: "Përgjigjet" - views_long: "kjo temë është parë {{number}} herë" activity: "Aktiviteti" likes: "Pëlqimet" likes_lowercase: @@ -2002,8 +2004,6 @@ sq: backups: "backupe" traffic_short: "Trafik" traffic: "Kërkesat web të aplikimit" - page_views: "Kërkesat në API" - page_views_short: "Kërkesat në API" show_traffic_report: "Trego raportin e detajuar të trafikut" reports: today: "Sot" diff --git a/config/locales/client.sv.yml b/config/locales/client.sv.yml index d822038cdb..6b1d8884ad 100644 --- a/config/locales/client.sv.yml +++ b/config/locales/client.sv.yml @@ -1333,8 +1333,11 @@ sv: make_banner: "Gör ämne till banderoll" remove_banner: "Ta bort banderollämne" reply: - title: 'Svara' - help: 'börja komponera ett svar till detta ämne' + post: + title: 'Svara' + topic: + title: 'Svara' + help: 'börja komponera ett svar till detta ämne' clear_pin: title: "Ta bort nål" help: "Ta bort den klistrade statusen från detta ämne så den inte längre hamnar i toppen av din ämneslista" @@ -1811,7 +1814,6 @@ sv: one: "visning" other: "visningar" replies: "Svar" - views_long: "detta ämne har visats {{number}} gånger" activity: "Aktivitet" likes: "Gillningar" likes_lowercase: @@ -2113,8 +2115,6 @@ sv: backups: "säkerhetskopior" traffic_short: "Trafik" traffic: "Applikations-webbegäran" - page_views: "API-förfrågningar" - page_views_short: "API-förfrågningar" show_traffic_report: "Visa detaljerad trafikrapport" reports: today: "Idag" @@ -2253,7 +2253,6 @@ sv: payload_url_placeholder: "https://example.com/postreceive" secret_invalid: "Hemligheten får inte ha några blanka tecken." secret_too_short: "Hemligheten bör vara minst 12 tecken." - secret_placeholder: "En valfri sträng, används för att generera signatur" content_type: "Innehållstyp" secret: "Hemlighet" event_chooser: "Vilka event vill du ska utlösa den här webhooken?" diff --git a/config/locales/client.te.yml b/config/locales/client.te.yml index 6256baa99c..98fc63b25b 100644 --- a/config/locales/client.te.yml +++ b/config/locales/client.te.yml @@ -767,8 +767,11 @@ te: visible: "జాబితాగా గుర్తించు" reset_read: "చదివిన గణాంకాలను రీసెట్ చేయి" reply: - title: 'జవాబు' - help: 'ఈ విషయానికి జవాబివ్వుట ప్రారంభించు' + post: + title: 'జవాబు' + topic: + title: 'జవాబు' + help: 'ఈ విషయానికి జవాబివ్వుట ప్రారంభించు' clear_pin: title: "గుచ్చు శుభ్రపరుచు" help: "ఈ విషయపు గుచ్చు స్థితి శుభ్రపరుచు. తద్వారా అది ఇహ అగ్ర భాగాన కనిపించదు" @@ -1078,7 +1081,6 @@ te: original_post: "మూల టపా" views: "చూపులు" replies: "జవాబులు" - views_long: "ఈ విషయం {{number}} సార్లు చూడబడింది." activity: "కలాపం" likes: "ఇష్టాలు" likes_long: "ఈ విషయానికి {{number}} ఇష్టాలు ఉన్నాయి" @@ -1158,8 +1160,6 @@ te: backups: "బ్యాకప్లు" traffic_short: "ట్రాఫిక్" traffic: "అనువర్తన జాల రిక్వెస్టులు" - page_views: "API అభ్యర్ధనలు" - page_views_short: "API అభ్యర్ధనలు" show_traffic_report: "సవివరణ ట్రాఫిక్ రిపోర్టు చూపు" reports: today: "ఈరోజు" diff --git a/config/locales/client.tr_TR.yml b/config/locales/client.tr_TR.yml index b937320bb5..2b1ad1d892 100644 --- a/config/locales/client.tr_TR.yml +++ b/config/locales/client.tr_TR.yml @@ -295,18 +295,62 @@ tr_TR: posts_read_long: "Okunmuş Gönderiler" total_rows: other: "%{count} kullanıcı" + group_histories: + actions: + change_group_setting: "Grup ayarlarını değiştir" + add_user_to_group: "Kullanıcı ekle" + remove_user_from_group: "Kullanıcıyı kaldır" + make_user_group_owner: "Sahip yap" + remove_user_as_group_owner: "Sahipliğini İptal Et" groups: logs: + title: "Kayıtlar" when: "Ne zaman" action: "Eylem" + acting_user: "Temsili Kullanıcılar" + target_user: "Hedef Kullanıcı" subject: "Konu" details: "Ayrıntılar" + from: "Gönderen" + to: "Kime" + edit: + title: 'Grubu düzenle' + full_name: 'Tam İsim' + add_members: "Üyeleri ekle" + delete_member_confirm: "'%{username}' adlı kullanıcıyı '%{group}' grubundan çıkart?" + request_membership_pm: + title: "Üyelik isteği" + body: "@%{groupName} adlı gruba üye olarak başvurmak istiyorum." + name_placeholder: "Grup adı, kullanıcı adındaki gibi boşluksuz olmalı" + public: "Kullanıcıların gruptan serbest bir şekilde ayrılıp/katılmasına izin ver (grubun görünür olması gerekmekte)" + empty: + posts: "Bu grubun üyelerinden konu yok." + members: "Bu grupta üye bulunmamaktır." + mentions: "Bu grupta kimseden bahsedilmemiştir." + messages: "Bu grupta mesaj bulunmamaktadır." + topics: "Bu grubun üyeleri tarafından oluşturulmuştur başlık yoktur." + logs: "Bu grup için log kaydı bulunmamaktadır." add: "Ekle" + join: "Gruba katıl" + leave: "Gruptan ayrıl" + request: "Gruba katılmak için istek yolla" + automatic_group: Otomatik Grup + closed_group: Kapanmış Grup + is_group_user: "Bu grubun bir üyesisiniz." + allow_membership_requests: "Kullanıcıların Grup başlarına üyelik istekleri göndermelerine izin ver ( Herkesin grupta birbirleri hakkında bahsetme özelliğinin açık olması gerekmektedir.)" + membership: "Üyelik" + name: "İsim" + user_count: "Grup Sayısı" + bio: "Grup Hakkında" selector_placeholder: "Üye ekle" owner: "sahip" visible: "Grup tüm kullanıcılar tarafından görüntülenebiliyor" + index: + title: "Gruplar" + empty: "Görünen hiç bir grup bulunmamaktadır." title: other: "gruplar" + activity: "Etkinlik" members: "Üyeler" topics: "Konular" posts: "Gönderiler" @@ -338,6 +382,15 @@ tr_TR: muted: title: "Susturuldu" description: "Bu gruptaki herhangi yeni bir konuyla ilgili asla bildirim almayacaksınız." + flair_url: "Avatar Kabiliyet Resmi" + flair_url_placeholder: "(İsteğe bağlı) Resim URL'si veya Font Awesome Class'ı" + flair_bg_color: "Avatar Kabiliyet Arkaplan Rengi" + flair_bg_color_placeholder: "(İsteğe bağlı) Hex renk değeri" + flair_color: "Avatar Kabiliyet Rengi" + flair_color_placeholder: "(İsteğe bağlı) Hex renk değeri" + flair_preview_icon: "İkonu önizle" + flair_preview_image: "Resimi önizle" + flair_note: "Not: Kabiliyet sadece bir kullanıcının birincil grubu için gösterecek." user_action_groups: '1': "Verilen Beğeniler" '2': "Alınan Beğeniler" @@ -400,6 +453,8 @@ tr_TR: download_archive: button_text: "Gönderilerimi İndir" confirm: "Gönderilerinizi indirmek istediğinize emin misiniz?" + success: "İndirme başlatıldı, İşlem tamamlandığında mesaj ile bilgilendirileceksiniz." + rate_limit_error: "Gönderiler günde bir kez indirilebilir, lütfen yarın tekrar deneyin." new_private_message: "Yeni İleti" private_message: "İleti" private_messages: "İletiler" @@ -423,6 +478,7 @@ tr_TR: each_browser_note: "Not: Bu ayarı kullandığınız her tarayıcıda değiştirmelisiniz." dismiss_notifications: "Tümünü Yoksay" dismiss_notifications_tooltip: "Tüm okunmamış bildirileri okunmuş olarak işaretle" + first_notification: "İlk bilidiriminiz! Başlamak için seçiniz" disable_jump_reply: "Cevapladıktan sonra gönderime atlama" dynamic_favicon: "Tarayıcı simgesinde yeni / güncellenen konu sayısını göster" external_links_in_new_tab: "Tüm dış bağlantıları yeni sekmede aç" @@ -445,6 +501,7 @@ tr_TR: Susturulmuş konular ve kategoriler bu e-postalarda yer almaz. daily: "Günlük güncellemeleri gönder" individual: "Her yeni gönderi için bir e-posta gönder" + individual_no_echo: "Benim gönderilerim haricindeki her gönderi için mail gönder" many_per_day: "Her yeni gönderi için bir e-posta gönder (günde yaklaşık {{dailyEmailEstimate}})." few_per_day: "Her yeni gönderi için bana e-posta gönder ( günlük yaklaşık 2 )" tag_settings: "Etiketler" @@ -655,9 +712,13 @@ tr_TR: account_age_days: "Hesabın gün olarak yaşı" create: "Davet Yolla" generate_link: "Davet bağlantısını kopyala" + link_generated: "Davet linki başarılı bir şekilde oluşturuldu" + valid_for: "Davet linki sadece bu adres için geçerlidir: %{email}" bulk_invite: + none: "Henüz kimseyi davet etmemiş görünüyorsun. İstersen bireysel davetler gönderebilir veya CSV dosyası yükleyerek bir çok insanı aynı anda davet edebilirsin." text: "Dosyadan Toplu Davet Gönder" success: "Dosya başarıyla yüklendi, işlem tamamlandığında iletiyle bilgilendirileceksiniz." + error: "Üzgünüz, Dosya csv formatında olmalı" password: title: "Parola" too_short: "Parolanız çok kısa." @@ -800,6 +861,7 @@ tr_TR: trust_level: 'Güven Seviyesi' search_hint: 'kullanıcı adı, e-posta veya IP adresi' create_account: + disclaimer: "Kayıt olarak, gizlilik ilkesi ve hizmet kullanım şartlarını kabul etmiş olmaktasınız." title: "Yeni Hesap Oluştur" failed: "Bir şeyler ters gitti. Bu e-posta adına daha önce bir kayıt oluşturulmuş olabilir, parolamı unuttum bağlantısını dene." forgot_password: @@ -889,6 +951,9 @@ tr_TR: drafts_offline: "çevrimdışı taslaklar" group_mentioned: other: "{{group}} hakkında konuşarak {{count}} kişiyi bilgilendirmek üzeresin, emin misin?" + cannot_see_mention: + category: "{{username}} adlı kullanıcıdan bahsettiniz fakat Ona bildirim gönderilmeyecek çünkü bu kategoriye ulaşma izni yok. Bunun gerçekleşmesi için kişi bu gruba eklemeniz gerekmektedir." + private: "{{username}} adlı kullanıcıdan bahsettiniz fakat Ona bildirim gönderilmeyecek çünkü bu kişisel mesaja ulaşma izni yok. Bunun gerçekleşmesi için kişiyi bu PM'ye eklemeniz gerekmektedir." duplicate_link: "Görünüşe göre {{domain}} alan adına bağlanan bağlantınız @{{username}} tarafından a cevabı içerisinde {{ago}} yayınlanmış görünüyor. – tekrar yayınlamak istediğinize emin misiniz?" error: title_missing: "Başlık gerekli" @@ -908,8 +973,10 @@ tr_TR: title: "Ya da Ctrl+Enter'a bas" users_placeholder: "Kullanıcı ekle" title_placeholder: "Bir cümlede açıklamak gerekirse bu tartışmanın konusu nedir?" + title_or_link_placeholder: "Buraya bir başlık girin veya bir link paylaşın" edit_reason_placeholder: "neden düzenleme yapıyorsunuz?" show_edit_reason: "(düzenleme sebebi ekle)" + topic_featured_link_placeholder: "Başlığı olan bir link giriniz." reply_placeholder: "Buraya yazın. Biçimlendirmek için Markdown, BBCode ya da HTML kullanabilirsin. Resimleri sürükleyebilir ya da yapıştırabilirsin." view_new_post: "Yeni gönderinizi görüntüleyin." saving: "Kaydediliyor" @@ -1054,6 +1121,8 @@ tr_TR: label: Şu Kategoride in_group: label: Şu Grupta + with_badge: + label: Rozetle with_tags: label: Şu Etiketli filters: @@ -1064,6 +1133,7 @@ tr_TR: tracking: takip ettiğim private: iletilerimde olan bookmarks: imlediğim + first: en ilk gönderidir. pinned: tutturulmuş unpinned: tutturulmamış wiki: wiki olan @@ -1090,6 +1160,7 @@ tr_TR: new_messages_marker: "son ziyaret" bulk: select_all: "Tümünü Seç" + clear_all: "Tümünü Temizle" unlist_topics: "Konuları Listeleme" reset_read: "Okunmuşları Sıfırla" delete: "Konuları Sil" @@ -1207,6 +1278,8 @@ tr_TR: go_bottom: "en alt" go: "git" jump_bottom: "son gönderiye geç" + jump_prompt: "atla" + jump_prompt_of: " %{count} gönderinin" jump_prompt_long: "Hangi gönderiye gitmek istersin?" jump_bottom_with_number: "%{post_number} numaralı gönderiye geç" total: tüm gönderiler @@ -1393,6 +1466,7 @@ tr_TR: post: reply: " {{replyAvatar}} {{usernameLink}}" reply_topic: " {{link}}" + quote_reply: "Alıntı" edit: "{{link}} {{replyAvatar}} {{username}} düzenleniyor" edit_reason: "Neden: " post_number: "gönderi {{number}}" @@ -1424,6 +1498,7 @@ tr_TR: file_too_large: "Üzgünüz, bu dosya çok büyük (en fazla {{max_size_kb}}kb). Neden büyük boyutlu dosyanı bir paylaşım servisine yükleyip, sonra bağlantını paylaşmıyorsun ?" too_many_uploads: "Üzgünüz, aynı anda birden fazla dosya yükleyemezsiniz." too_many_dragged_and_dropped_files: "Üzgünüz, aynı anda 10'dan fazla dosya yükleyemezsiniz." + upload_not_authorized: "Üzgünüz, yüklemeye çalıştığınız dosya izinli değil (authorized extensions: {{authorized_extensions}})." image_upload_not_allowed_for_new_user: "Üzgünüz, yeni kullanıcılar resim yükleyemezler." attachment_upload_not_allowed_for_new_user: "Üzgünüz, yeni kullanıcılar dosya yükleyemezler." attachment_download_requires_login: "Üzgünüz, eklentileri indirebilmek için oturum açmanız gerekiyor." @@ -1569,6 +1644,7 @@ tr_TR: tags_allowed_tag_groups: "Yalnızca bu kategoride kullanılabilir etiket grupları:" tags_placeholder: "(Seçmeli) izin verilen etiketlerin listesi" tag_groups_placeholder: "(Seçmeli) izin verilen etiket gruplarının listesi" + topic_featured_link_allowed: " Featured link'lere bu kategoride izin ver" delete: 'Kategoriyi Sil' create: 'Yeni Kategori' create_long: 'Yeni bir kategori oluştur' @@ -1603,6 +1679,7 @@ tr_TR: email_in_disabled: "E-posta üzerinden yeni konu oluşturma özelliği Site Ayarları'nda devre dışı bırakılmış. E-posta üzerinden yeni konu oluşturma özelliğini etkinleştirmek için," email_in_disabled_click: '"e-postala" ayarını etkinleştir' suppress_from_homepage: "Bu kategoriyi ana sayfadan gizle" + all_topics_wiki: "Yeni konuyu varsayılan olarak wiki yap" sort_order: "Öntanımlı Sıralama:" allow_badges_label: "Bu kategoride rozet verilmesine izin ver" edit_permissions: "İzinleri Düzenle" @@ -1632,11 +1709,15 @@ tr_TR: sort_options: default: "öntanımlı" likes: "Beğeniler" + op_likes: "Orijinal Gönderi Beğenileri" views: "Gösterimler" posts: "Gönderiler" activity: "Etkinlik" + posters: "Yazanlar" category: "Kategori" created: "Oluşturulma" + sort_ascending: 'Artan' + sort_descending: 'Azalan' flagging: title: 'Topluluğumuzun düzenli kalmasına desteğiniz için teşekkürler!' action: 'Gönderiyi Bildir' @@ -1715,7 +1796,8 @@ tr_TR: views_lowercase: other: "gösterim" replies: "Cevap" - views_long: "bu konu {{number}} defa görüntülendi" + views_long: + other: "bu konu {{number}} defa görüntülendi" activity: "Etkinlik" likes: "Beğeni" likes_lowercase: @@ -2008,8 +2090,8 @@ tr_TR: backups: "yedekler" traffic_short: "Trafik" traffic: "Uygulama web istekleri" - page_views: "API istekleri" - page_views_short: "API istekleri" + page_views: "Sayfa Görüntülemeleri" + page_views_short: "Sayfa Görüntülemeleri" show_traffic_report: "Ayrıntılı Trafik Raporunu Görüntüle" reports: today: "Bugün" @@ -2147,7 +2229,7 @@ tr_TR: warn_local_payload_url: "Öyle görünüyor ki, web kancasını yerel bir URL'e ayarlamaya çalışıyorsunuz. Yerel bir adrese iletilen olay yan etki veya beklenmedik davranışlara neden olabilir. Devam edilsin mi?" secret_invalid: "Gizli alanında boş karakter olamaz." secret_too_short: "Gizi en azından 12 karakter olmalı." - secret_placeholder: "İsteğe bağlı bir kelime, imza oluşturmak için kullanılacak" + secret_placeholder: "İmza oluşturmak için isteğe bağlı bir dizi" event_type_missing: "En az bir olay tipi ayarlamalısınız." content_type: "İçerik Türü" secret: "Gizli" @@ -2170,6 +2252,7 @@ tr_TR: details: "Yeni bir cevap oluşturulduğunda, düzenlendiğinde veya silindiğinde." user_event: name: "Kullanıcı Olayı" + details: "Bir kullanıcı oluşturulduğunda, onaylandığında veya güncellendiğinde" delivery_status: title: "Teslim Durumu" inactive: "Etkin Değil" @@ -2392,6 +2475,7 @@ tr_TR: html: "html" text: "yazı" last_seen_user: "Son Görülen Kullanıcı:" + no_result: "Derleme için hiç bir sonuç bulunamadı." reply_key: "Cevapla Tuşu" skipped_reason: "Nedeni Atla" incoming_emails: @@ -2487,6 +2571,11 @@ tr_TR: deleted_tag: "silinmiş etiket" renamed_tag: "yeniden adlandırılmış etiket" revoke_email: "e-postayı kaldır" + lock_trust_level: "Güven Seviyesini Kilitle" + unlock_trust_level: "Güvenlik Seviyesi Kilidini Aç" + activate_user: "Kullanıcıyı etkinleştir." + deactivate_user: "Kullanıcıyı dondur" + change_readonly_mode: "Salt-okunur modunu değiştir" screened_emails: title: "Taranmış E-postalar" description: "Biri yeni bir hesap oluşturmaya çalıştığında, aşağıdaki e-posta adresleri kontrol edilecek ve kayıt önlenecek veya başka bir eylem gerçekleşecek." @@ -2779,6 +2868,7 @@ tr_TR: user_preferences: "Kullanıcı Tercihleri" tags: "Etiketler" search: "Arama" + groups: "Gruplar" badges: title: Rozetler new_badge: Yeni Rozet diff --git a/config/locales/client.uk.yml b/config/locales/client.uk.yml index b6e0ec8b4c..4d14d28569 100644 --- a/config/locales/client.uk.yml +++ b/config/locales/client.uk.yml @@ -839,8 +839,11 @@ uk: archive: "Заархівувати тему" reset_read: "Скинути дані про прочитаність" reply: - title: 'Відповісти' - help: 'почати складати відповідь на цю тему' + post: + title: 'Відповісти' + topic: + title: 'Відповісти' + help: 'почати складати відповідь на цю тему' clear_pin: title: "Відкріпити" help: "Скасувати закріплення цієї теми, щоб вона більше не з'являлася на початку Вашого переліку тем" @@ -1059,7 +1062,6 @@ uk: original_post: "Перший допис" views: "Перегляди" replies: "Відповіді" - views_long: "цю тему переглянули {{number}} разів" activity: "Активність" likes: "Вподобання" likes_long: "в цій темі {{number}} вподобань" diff --git a/config/locales/client.ur.yml b/config/locales/client.ur.yml index 6b20cfbffb..b500d837aa 100644 --- a/config/locales/client.ur.yml +++ b/config/locales/client.ur.yml @@ -19,6 +19,17 @@ ur: mb: ایم بی tb: ٹی بی dates: + time: "h:mm a" + medium: + x_minutes: + one: "1 منٹ" + other: "%{گنتی} منٹس" + x_hours: + one: "1 گھنٹا" + other: "%{گنتی} گھنٹے" + x_days: + one: "1 دن" + other: "%{گنتی} دن" medium_with_ago: x_minutes: one: "1 منٹ قبل" @@ -26,6 +37,23 @@ ur: x_hours: one: "1 گھنٹہ قبل " other: " %{count} گھنٹے قبل " + x_days: + one: "1 دن قبل" + other: "%{گنتی} دن قبل" + later: + x_days: + one: "1 دن بعد" + other: "%{گنتی} دن بعد" + x_months: + one: "1 مہینے بعد" + other: "%{گنتی} مہینے بعد" + x_years: + one: "1 سال بعد" + other: "%{گنتی} سال بعد" + previous_month: 'پچھلے ماہ' + next_month: 'اگلے ماہ' + share: + topic: 'اس ٹاپک کا لنک شیئرکریں' no_value: "نہیں " yes_value: "ہاں " age: "عمر " @@ -42,6 +70,13 @@ ur: user: desktop_notifications: each_browser_note: "نوٹ: آپ کو ہر براؤزر پر اس سیٹنگ کو تبدیل کرنا ہوگا." + name: + instructions: "آپ کا پورا نام (اختیاری)" + instructions_required: "آپ کا پورا نام" + too_short: "آپ کا نام بہت چھوٹا ہے" + ok: "آپ کا نام صحیح لگ رہا ہے" + username: + title: "صارف کا نام" admin_js: admin: export_json: diff --git a/config/locales/client.vi.yml b/config/locales/client.vi.yml index 3ead479e62..cbe4862de3 100644 --- a/config/locales/client.vi.yml +++ b/config/locales/client.vi.yml @@ -1136,8 +1136,11 @@ vi: make_banner: "Banner chủ đề" remove_banner: "Bỏ banner chủ đề" reply: - title: 'Trả lời' - help: 'bắt đầu soạn một trả lời mới cho chủ đề này' + post: + title: 'Trả lời' + topic: + title: 'Trả lời' + help: 'bắt đầu soạn một trả lời mới cho chủ đề này' clear_pin: title: "Xóa ghim" help: "Xóa trạng thái ghim của chủ đề này để nó không còn xuất hiện trên cùng danh sách chủ đề của bạn" @@ -1526,7 +1529,6 @@ vi: views_lowercase: other: "lượt xem" replies: "Trả lời" - views_long: "chủ đề đã được xem {{number}} lần" activity: "Hoạt động" likes: "Lượt thích" likes_lowercase: @@ -1650,8 +1652,6 @@ vi: backups: "sao lưu" traffic_short: "Băng thông" traffic: "Application web requests" - page_views: "API Requests" - page_views_short: "API Requests" show_traffic_report: "Xem chi tiết Báo cáo Lưu lượng" reports: today: "Hôm nay" diff --git a/config/locales/client.zh_CN.yml b/config/locales/client.zh_CN.yml index 24340c53e2..a70f150e4f 100644 --- a/config/locales/client.zh_CN.yml +++ b/config/locales/client.zh_CN.yml @@ -338,9 +338,9 @@ zh_CN: closed_group: 封闭群组 is_group_user: "你是该群组的一个成员" allow_membership_requests: "允许用户向群组拥有者发送加入小组请求(群组需要能让所有人提及)" - membership: "成员" + membership: "成员资格" name: "名字" - user_count: "成员数量" + user_count: "成员数目" bio: "关于群组" selector_placeholder: "添加成员" owner: "所有者" @@ -1795,7 +1795,6 @@ zh_CN: views_lowercase: other: "浏览" replies: "回复" - views_long: "本主题已经被浏览过 {{number}} 次" activity: "活动" likes: "赞" likes_lowercase: @@ -2088,8 +2087,6 @@ zh_CN: backups: "备份" traffic_short: "流量" traffic: "应用 web 请求" - page_views: "API 请求" - page_views_short: "API 请求" show_traffic_report: "显示详细的流量报告" reports: today: "今天" @@ -2227,7 +2224,6 @@ zh_CN: warn_local_payload_url: "你好像将 webhook 指向了一个本地地址。把相关事件发送到本地可能产生副作用或未预期的行为。继续吗?" secret_invalid: "密钥不能包含空白字符。" secret_too_short: "密钥必须至少有 12 个字符。" - secret_placeholder: "可选字符串,用于生成签名" event_type_missing: "你必须设置一个事件类型。" content_type: "内容格式" secret: "密钥" diff --git a/config/locales/client.zh_TW.yml b/config/locales/client.zh_TW.yml index e0cb9f6c2b..c13061512b 100644 --- a/config/locales/client.zh_TW.yml +++ b/config/locales/client.zh_TW.yml @@ -112,7 +112,7 @@ zh_TW: enabled: '於 %{when} 置頂' disabled: '於 %{when} 解除置頂' pinned_globally: - enabled: '於 %{when} 全局置頂' + enabled: '於 %{when} 全區置頂' disabled: '於 %{when} 解除置頂' visible: enabled: '於 %{when} 列出' @@ -317,7 +317,7 @@ zh_TW: title: '編輯群組' full_name: '全名' add_members: "增加成員" - delete_member_confirm: "從 '%{group}' 群組刪除 '%{username}' ?" + delete_member_confirm: "從「%{group}」群組移除「%{username}」?" request_membership_pm: title: "請求會員資格" body: "我想申請 @%{groupName} 的成員資格。" @@ -375,13 +375,13 @@ zh_TW: description: "你只會收到此組中每個新主題的第一帖的通知。" tracking: title: "追蹤" - description: "只有當有人@您或者回覆您的文章時,您才會收到通知,並且會顯示新回覆的次數。" + description: "只有當有人 @您 或者回覆您的文章時您才會收到通知,並且會顯示新回覆的數目。" regular: title: "一般" - description: "只有當有人@您或者回覆您的文章時,您才會收到通知。" + description: "只有當有人 @您 或者回覆您的文章時您才會收到通知。" muted: title: "靜音" - description: "你將不會再收到任何關於此群組的新通知。" + description: "您將不會再收到任何關於此群組新討論話題的通知。" flair_url: "頭像圖片" flair_url_placeholder: "(可選)圖片 URL 或 Font Awesome class" flair_bg_color: "頭像背景顏色" @@ -419,7 +419,7 @@ zh_TW: apply_all: "申請" position: "位置" posts: "貼文" - topics: "標題" + topics: "主題數" latest: "最近" latest_by: "最近由" toggle_ordering: "顯示/隱藏排序控制" @@ -453,7 +453,7 @@ zh_TW: download_archive: button_text: "下載我的文章" confirm: "你確定要下載你的文章嗎?" - success: "開始下載,處理完畢後將以私人訊息通知你。" + success: "開始下載,處理完畢後將以私人訊息通知您。" rate_limit_error: "帖子只能每天下載一次,請明天再重試。" new_private_message: "新訊息" private_message: "訊息" @@ -594,7 +594,7 @@ zh_TW: instructions: "背景會被置中,且默認寬度為850px。" email: title: "電子郵件" - instructions: "我們不會公開您的電子郵件信箱。" + instructions: "不會公開顯示" ok: "我們將寄一封確認郵件給您。" invalid: "請輸入有效的電子郵件地址。" authenticated: "你的 Email 已由 {{provider}} 驗證完成。" @@ -603,13 +603,13 @@ zh_TW: other: "我們只會在您 {{count}} 分鐘內沒有活動時,才會寄送電郵通知給您。" name: title: "名稱" - instructions: "您的全名 (選填)。" + instructions: "您的全名 (選填)" instructions_required: "您的匿稱" too_short: "你的匿稱太短。" ok: "你的匿稱符合要求。" username: title: "用戶名稱" - instructions: "獨一無二,沒有空白,夠短。" + instructions: "獨一、無空格、短的" short_instructions: "其他人可以輸入 @{{username}} 提到你。" available: "你的用戶名稱可以使用。" global_match: "電子郵件地址與註冊的用戶名稱相符。" @@ -718,6 +718,7 @@ zh_TW: none: "你還沒有邀請過任何人。你可以邀請一個人,或者上傳 CSV 檔案邀請一批人。" text: "從檔案大量邀請" success: "檔案已上傳成功,處理完畢後將以私人訊息通知你。" + error: "抱歉,檔案應該要用 CSV 格式。" password: title: "密碼" too_short: "你的密碼太短。" @@ -725,7 +726,7 @@ zh_TW: same_as_username: "密碼與使用者名稱相同" same_as_email: "你的密碼與電郵相同。" ok: "你的密碼符合要求。" - instructions: "至少 %{count} 個字。" + instructions: "至少 %{count} 個字元" summary: title: "摘要" stats: "統計" @@ -768,7 +769,7 @@ zh_TW: title: "個人資料圖片" header_title: "個人頁面、消息、書籤和設置" title: - title: "用戶標題" + title: "頭銜" filters: all: "全部" stream: @@ -1469,6 +1470,7 @@ zh_TW: edit: "編輯 {{replyAvatar}} {{username}} 發表的 {{link}}" edit_reason: "原因: " post_number: "文章 {{number}}" + wiki_last_edited_on: "共筆最後編輯時間" last_edited_on: "文章最近編輯的時間" reply_as_new_topic: "回覆為關連的討論話題" continue_discussion: "繼續 {{postLink}} 的討論:" @@ -1694,7 +1696,7 @@ zh_TW: title: "關注" description: "你將自動監看這些分類中的所有主題。每一個主題的每一個新帖,將通知你,還將顯示新回覆的數量。" watching_first_post: - title: "監看頭一帖" + title: "關注新的發文" description: "在這些分類裡面,只是每一個新主題的第一帖,才會通知你。" tracking: title: "追蹤" @@ -1795,7 +1797,8 @@ zh_TW: views_lowercase: other: "觀看" replies: "回覆" - views_long: "此討論話題已被看過 {{number}} 次" + views_long: + other: "這個討論話題已經被檢視過 {{number}} 次" activity: "活動" likes: "讚" likes_lowercase: @@ -2001,7 +2004,7 @@ zh_TW: title: "監看" description: "你將自動監看該標籤中的所有主題。新帖子和新主題會通知你,再者未讀和新帖的數量也將顯示在主題旁邊。" watching_first_post: - title: "監看頭一帖" + title: "關注新的發文" description: "在這個標籤中,只是每一個新主題的第一帖,才會通知你。" tracking: title: "跟蹤" @@ -2088,8 +2091,8 @@ zh_TW: backups: "備份檔" traffic_short: "流量" traffic: "網頁應用程式請求數" - page_views: "API 請求數量" - page_views_short: "API 請求數量" + page_views: "瀏覽數" + page_views_short: "瀏覽數" show_traffic_report: "顯示詳細的流量報表" reports: today: "今天" @@ -2227,7 +2230,7 @@ zh_TW: warn_local_payload_url: "你好像將 webhook 指向了一個本地地址。把相關事件發送到本地可能產生副作用或未預期的行為。繼續嗎?" secret_invalid: "密鑰不能包含空白字元。" secret_too_short: "密鑰必須至少有 12 個字元。" - secret_placeholder: "可選字元串,用於生成簽名" + secret_placeholder: "選填的字串,用來產生簽章" event_type_missing: "你必須設置一個事件類型。" content_type: "內容格式" secret: "密鑰" @@ -2565,10 +2568,17 @@ zh_TW: revoke_admin: "撤銷管理員權限" grant_moderation: "授予板主權限" revoke_moderation: "撤銷板主權限" - backup_operation: "備份操作" + backup_create: "新增備份" deleted_tag: "刪除的標籤" renamed_tag: "重命名的標籤" revoke_email: "撤銷郵件" + lock_trust_level: "鎖定信任等級" + unlock_trust_level: "解除信任等級鎖定" + activate_user: "啟動使用者" + deactivate_user: "撤銷使用者" + change_readonly_mode: "變更唯讀模式" + backup_download: "下載備份" + backup_destroy: "刪除備份" screened_emails: title: "過濾的電子郵件地址" description: "以下的電子郵件地址將無法用來建立新用戶。" @@ -2668,8 +2678,8 @@ zh_TW: blocked: "已封鎖?" staged: "暫存?" show_admin_profile: "管理員" - edit_title: "編輯標題" - save_title: "儲存標題" + edit_title: "編輯頭銜" + save_title: "儲存頭銜" refresh_browsers: "強制瀏覽器重新整理" refresh_browsers_message: "訊息已寄出給所有用戶!" show_public_profile: "顯示公開的基本資料" diff --git a/config/locales/server.ar.yml b/config/locales/server.ar.yml index 7b72d2fe20..2910360b49 100644 --- a/config/locales/server.ar.yml +++ b/config/locales/server.ar.yml @@ -1496,26 +1496,6 @@ ar: (أذا كنت بحاجة للتواصل مع [الموظفين](%{base_url}/about) كمستخدم جديد, فقط مجرد الرد على هذه الرسالة.) welcome_invite: subject_template: "مرحبا بك في %{site_name}!" - text_body_template: | - شكرًا لقبولك الدعوة إلى موقع %{site_name} أهلا بك . - - انشأنا حساب جديد لك **%{username}** وستقوم بتسجيل الدخول، وستتمكن من تغيير اسمك من [your user profile][prefs]. - - لتسجيل الدخول لاحقا: - - 1.دائما **استخدم نفس البريد الالكتروني الذي استقبلت فيه الدعوة** عند تسجيل الدخول، وإلا فإننا لن نستطيع معرفة أنه أنت ! - - 2. أنشأ كلمة مرور فريدة [your user profile][prefs] واستخدمها لتسجيل الدخول . - - %{new_user_tips} - - ونحن نتبع [civilized community behavior](%{base_url}/guidelines)دائما.. - - استمتع بوجودك بيننا ! - - (إذا كنت تريد التواصل مع [staff members](%{base_url}/about) كمستخدم جديد، رد على هذه الرسالة فقط لتتواصل معهم) - - [prefs]: %{user_preferences_url} backup_succeeded: subject_template: "اكتملت عملية النسخ الإحتياطي بنجاح" backup_failed: diff --git a/config/locales/server.bs_BA.yml b/config/locales/server.bs_BA.yml index 2f8009c83b..8e1da3c6a4 100644 --- a/config/locales/server.bs_BA.yml +++ b/config/locales/server.bs_BA.yml @@ -743,24 +743,6 @@ bs_BA: (Ako trebate razgovarati s nekim od [članova osoblja](%{base_url}/about) kao novi korisnik, samo odgovorite na ovu poruku.) welcome_invite: subject_template: "Dobrodošli na %{site_name}!" - text_body_template: | - Hvala vam što ste primili pozivnicu na %{site_name} -- dobrodošli! - - Mi smo automatski kreirali vaše korisničko ime: **%{username}**, ali možete ga promjeniti preko [tvoj profil][postavke]. - - Da se opet ulogujete: - - 1. Log in using any method you like -- but it must resolve to the **same email address** that you received your original invitation email at. Otherwise we won't be able to tell it is you! - - 2. Create a unique password for [your user profile][prefs], and use it to log in. - - %{new_user_tips} - - We believe in [civilized community behavior](%{base_url}/guidelines) at all times. - - Enjoy your stay! - - [prefs]: %{user_preferences_url} backup_succeeded: subject_template: "Backup completed successfully" backup_failed: diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml index a810b90a58..88a3653a42 100644 --- a/config/locales/server.de.yml +++ b/config/locales/server.de.yml @@ -32,6 +32,7 @@ de: purge_reason: "Verlassenes, deaktiviertes Konto automatisch gelöscht" disable_remote_images_download_reason: "Der Download von Bildern wurde deaktiviert, weil nicht mehr genug Plattenplatz vorhanden war." anonymous: "Anonym" + remove_posts_deleted_by_author: "Gelöscht vom Verfasser" emails: incoming: default_subject: "Eingehende E-Mail von %{email}" @@ -72,6 +73,8 @@ de: inclusion: ist nicht in der Liste enthalten invalid: ist ungültig is_invalid: "scheint unklar, ist das ein ganzer Satz?" + contains_censored_words: "Beinhaltet ein oder mehrere verbotene Wörter: %{censored_words}" + matches_censored_pattern: "stimmt mit dem folgenden verbotenen regulären Ausdruck überein: %{censored_pattern}" less_than: muss weniger als %{count} sein less_than_or_equal_to: muss weniger oder gleich %{count} sein not_a_number: ist keine Zahl @@ -1072,6 +1075,7 @@ de: max_attachment_size_kb: "Maximale Größe hochgeladener Dateianhänge in kB. Dieser Wert muss auch in Nginx (client_max_body_size), Apache oder anderen Proxies entsprechend konfiguriert werden." authorized_extensions: "Liste von erlaubten Dateiendungen für hochgeladene Dateien ('*' um alle Dateiendungen zu erlauben)" max_similar_results: "Anzahl ähnlicher Themen, die beim Erstellen eines neuen Themas über dem Editor angezeigt werden. Ähnlichkeit wird an Hand des Titels und Inhalts bestimmt." + max_image_megapixels: "Maximale erlaubte Auflösung für Bilder (in Megapixeln)." title_prettify: "Verhindert gängige Fehler im Titel, wie reine Grossschreibung, Kleinbuchstaben am Anfang, mehrere ! und ?, überflüssiger . am Ende, etc." topic_views_heat_low: "Aufrufe-Feld leicht hervorheben, sobald das Thema so oft gelesen wurde." topic_views_heat_medium: "Aufrufe-Feld mäßig hervorheben, sobald das Thema so oft gelesen wurde." @@ -1404,6 +1408,8 @@ de: user: no_accounts_associated: "Es sind keine Konten zugeordnet" deactivated: "Deaktiviert wegen zu vielen unzustellbaren E-Mails an '%{email}'." + deactivated_by_staff: "Deaktiviert vom Team" + activated_by_staff: "Aktiviert vom Team" username: short: "muss mindestens %{min} Zeichen lang sein" long: "darf nicht länger als %{max} Zeichen sein" @@ -1431,6 +1437,7 @@ de: one: "Eine Markierung wartet auf Bearbeitung" other: "%{count} Markierungen warten auf Bearbeitung" unsubscribe_mailer: + title: "Abbestellung von E-Mail-Updates" subject_template: "Bitte bestätige, dass du keine E-Mail-Updates mehr von %{site_title} erhalten möchtest." text_body_template: | Jemand (wahrscheinlich du?) hat angefragt, keine E-Mail-Updates mehr von %{site_domain_name} auf dieser Adresse zu erhalten. @@ -1441,6 +1448,7 @@ de: Wenn du weiterhin E-Mail-Updates erhalten möchtest, dann kannst du diese E-Mail ignorieren. invite_mailer: + title: "Einladung zu einem Thema" subject_template: "%{invitee_name} hat dich zum Thema '%{topic_title}' auf %{site_domain_name} eingeladen" text_body_template: | %{invitee_name} hat dich dazu eingeladen, an einer Diskussion teilzunehmen: @@ -1457,6 +1465,7 @@ de: Dies ist eine Einladung von einem vertrauenswürdigen Benutzer. Du kannst deshalb sofort auf die Diskussion antworten. custom_invite_mailer: + title: "Einladung zu einem Thema (mit Nachricht)" subject_template: "%{invitee_name} hat dich eingeladen zu '%{topic_title}' auf %{site_domain_name}" text_body_template: | %{invitee_name} hat dich zu einer Diskussion eingeladen @@ -1479,38 +1488,45 @@ de: Diese Einladung stammt von einem vertrauenswürdigen Benutzer, daher kannst du direkt auf die Diskussion antworten. invite_forum_mailer: + title: "Einladung zur Teilnahme" subject_template: "%{invitee_name} hat dich eingeladen %{site_domain_name} beizutreten" text_body_template: | - %{invitee_name} hat dich zur Teilnahme eingeladen + %{invitee_name} hat dich eingeladen, > **%{site_title}** > > %{site_description} - Wenn du Interesse hast, klicke auf den nachfolgenden Link: + beizutreten. + + Wenn du interessiert bist, folge dem folgenden Link: %{invite_link} - Diese Einladung stammt von einem vertrauenswürdigen Benutzer. Daher wird für dich automatisch ein Konto erstellt. + Die Einladung kommt von einem vertrauenswürdigen Benutzer. Daher wird für dich beim Betreten automatisch ein Benutzerkonto mit dieser E-Mail-Adresse erstellt. custom_invite_forum_mailer: + title: "Einladung zur Teilnahme" subject_template: "%{invitee_name} hat dich eingeladen %{site_domain_name} beizutreten" text_body_template: | - %{invitee_name} hat dich zur Teilnahme eingeladen + %{invitee_name} hat dich eingeladen, > **%{site_title}** > > %{site_description} + beizutreten. + Nachricht von %{invitee_name}: %{user_custom_message} - Wenn du Interesse hast, klicke auf den nachfolgenden Link: + Wenn du interessiert bist, folge einfach diesem Link: %{invite_link} - Diese Einladung stammt von einem vertrauenswürdigen Benutzer. Daher wird für dich automatisch ein Konto erstellt. + Diese Einladung kommt von einem vertrauenswürdigen Benutzer. Daher wird für dich beim Betreten automatisch ein Benutzerkonto mit dieser E-Mail-Adresse erstellt. invite_password_instructions: + title: "Passwort festlegen" subject_template: "Lege ein Passwort für dein %{site_name}-Konto fest" text_body_template: | Schön, dass du die Einladung zu %{site_name} angenommen hast -- Willkommen! @@ -1520,6 +1536,7 @@ de: (Wenn der Link abgelaufen ist, wähle "Passwort vergessen" aus, wenn du dich mit deiner E-Mail-Adresse einloggen möchtest.) test_mailer: + title: "Test-E-Mail" subject_template: "[%{site_name}] Test der E-Mail-Zustellbarkeit" text_body_template: | Dies ist eine Test-E-Mail von @@ -1563,6 +1580,7 @@ de: [mj]: https://www.mailjet.com/pricing [mt]: http://www.mail-tester.com/ new_version_mailer: + title: "Neue Version" subject_template: "[%{site_name}] Neue Discourse Version, Update verfügbar" text_body_template: | Hurra, eine neue Version von [Discourse](http://www.discourse.org) ist verfügbar! @@ -1576,6 +1594,7 @@ de: - Besuche [meta.discourse.org](https://meta.discourse.org) für Neuigkeiten, Diskussionen und Support für Discourse new_version_mailer_with_notes: + title: "Neue Version mit Versionshinweisen" subject_template: "[%{site_name}] Update verfügbar" text_body_template: | Hurra, eine neue Version von [Discourse](http://www.discourse.org) ist verfügbar! @@ -1593,6 +1612,7 @@ de: %{notes} queued_posts_reminder: + title: "Erinnerung an Freischaltung wartender Beiträge" subject_template: one: "[%{site_name}] %{count} auf Freischaltung wartender Beitrag." other: "[%{site_name}] %{count} auf Freischaltung wartende Beiträge." @@ -1614,6 +1634,7 @@ de: temporarily_closed_due_to_flags: "Dieses Thema ist vorrübergehend geschlossen. Mehrere User haben dieses Thema gemeldet. " system_messages: post_hidden: + title: "Benachrichtigung: Beitrag versteckt" subject_template: "Beitrag versteckt wegen Community-Meldungen" text_body_template: | Hallo, @@ -1635,6 +1656,7 @@ de: Während du hier teilnimmst, werden wir dich kennenlernen und die vorübergehenden Einschränkungen für neue Benutzer werden aufgehoben. Über die Zeit, erreichst du [Vertrauensstufen](https://meta.discourse.org/t/what-do-user-trust-levels-do/4924), die spezielle Fähigkeiten beinhalten, um die Community gemeinsam zu verwalten. welcome_user: + title: "Willkommen: Benutzer" subject_template: "Willkommen bei %{site_name}!" text_body_template: | Danke fürs Anmelden bei %{site_name}, sei willkommen! @@ -1647,28 +1669,26 @@ de: (Wenn du als neuer Benutzer unter vier Augen mit einem unserer [Team-Mitglieder](%{base_url}/about) reden möchtest, antworte einfach auf diese Nachricht.) welcome_invite: + title: "Willkommen: Einladung" subject_template: "Willkommen bei %{site_name}!" text_body_template: | - Danke, dass du der Einladung zu %{site_name} gefolgt bist -- herzlich willkommen! + Danke, dass du die Einladung zu %{site_name} angenommen hast -- und willkommen! - Wir haben automatisch das Konto **%{username}** für dich angelegt und du bist bereits angemeldet, aber du kannst deinen Benutzernamen in [deinem Profil][prefs] noch ändern. + - Wir haben dieses neue Konto **%{username}** für dich erstellt. Ändere deinen Namen oder dein Passwort, indem du [dein Benutzerprofil][prefs] aufrufst. - Um dich später wieder anzumelden: - - 1. Verwende bitte **dieselbe E-Mail-Adresse, unter der du die ursprüngliche Einladung erhalten hast**. Ansonsten können wir nicht erkennen, dass du es bist! - - 2. Wähle ein eindeutiges Passwort in [deinem Profil][prefs] und verwende dieses, um dich anzumelden. + - Wenn du dich anmeldest, **verwende immer die gleiche E-Mail-Adresse wie von deiner ursprünglichen Einladung** – sonst wissen wir nicht, ob du es wirklich bist! %{new_user_tips} - Wir wünschen uns ein stets [zivilisiertes Verhalten in unserer Community](%{base_url}/guidelines). + Wir glauben an [zivilisiertes Verhalten in unserer Community(%{base_url}/guidelines) zu jeder Zeit. - Viel Spaß! + Genieße deinen Aufenthalt! - (Wenn du als neuer Benutzer unter vier Augen mit einem unserer [Team-Mitgileder](%{base_url}/about) reden möchtest, antworte einfach auf diese Nachricht.) + (Wenn du als neuer Benutzer mit [Team-mitgliedern](%{base_url}/about) kommunizieren möchtest, antworte einfach auf diese Nachricht.) [prefs]: %{user_preferences_url} backup_succeeded: + title: "Backup erfolgreich" subject_template: "Sicherung erfolgreich abgeschlossen" text_body_template: | Backup erfolgreich erstellt. @@ -1681,6 +1701,7 @@ de: %{logs} ``` backup_failed: + title: "Backup fehlgeschlagen" subject_template: "Sicherung fehlgeschlagen" text_body_template: | Die Sicherung ist fehlgeschlagen. @@ -1691,6 +1712,7 @@ de: %{logs} ``` restore_succeeded: + title: "Wiederherstellung erfolgreich" subject_template: "Wiederherstellung erfolgreich abgeschlossen" text_body_template: | Die Wiederherstellung war erfolgreich. @@ -1701,6 +1723,7 @@ de: %{logs} ``` restore_failed: + title: "Wiederherstellung fehlgeschlagen" subject_template: "Wiederherstellung fehlgeschlagen" text_body_template: | Die Wiederherstellung ist fehlgeschlagen. @@ -1711,9 +1734,11 @@ de: %{logs} ``` bulk_invite_succeeded: + title: "Masseneinladung erfolgreich" subject_template: "Masseneinladung von Benutzern erfolgreich verarbeitet" text_body_template: "Deine Masseneinladung von Benutzern wurde erfolgreich verarbeitet, insgesamt wurden %{sent} Einladungen per E-Mail verschickt." bulk_invite_failed: + title: "Masseneinladung fehlgeschlagen" subject_template: "Bei der Verarbeitung der Masseneinladung von Benutzern sind Fehler aufgetreten" text_body_template: | Deine Masseneinladungs-Datei wurde verarbeitet, insgesamt wurden %{sent} Einladungen verschickt und dabei traten %{failed} Fehler auf. @@ -1724,6 +1749,7 @@ de: %{logs} ``` csv_export_succeeded: + title: "CSV-Export erfolgreich" subject_template: "Datenexport abgeschlossen" text_body_template: | Deine Daten wurden erfolgreich exportiert! :dvd: @@ -1732,51 +1758,60 @@ de: Dieser Download-Link ist für die nächsten 48 Stunden gültig. csv_export_failed: + title: "CSV-Export fehlgeschlagen" subject_template: "Datenexport fehlgeschlagen" text_body_template: "Entschuldigung, beim Exportieren deiner Daten trat ein Fehler auf. Bitte kontaktiere ein Team-Mitglied oder überprüfe die Logdateien." email_reject_insufficient_trust_level: + title: "E-Mail abgelehnt weil Vertrauensstufe unzureichend" subject_template: "[%{site_name}] E-Mail-Problem -- Unzureichende Vertrauensstufe" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (Titel: %{former_title}) konnte nicht zugestellt werden. Du hast nicht die notwendige Vertrauensstufe, um neue Themen über diese E-Mail-Adresse zu erstellen. Wenn du glaubst, dass das ein Irrtum ist, dann kontaktiere ein Team-Mitglied. email_reject_user_not_found: + title: "E-Mail abgelehnt weil Benutzer nicht gefunden" subject_template: "[%{site_name}] E-Mail-Problem -- Benutzer nicht gefunden" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Deine Antwort wurde von einer unbekannten E-Mail-Adresse gesendet. Probiere eine andere Absende-Adresse oder wende dich an ein Team-Mitglied. email_reject_screened_email: + title: "E-Mail abgelehnt weil E-Mail-Adresse gesperrt" subject_template: "[%{site_name}] E-Mail-Problem -- Blockiertee E-Mail-Adresse" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Deine Antwort wurde von einer blockierten E-Mail-Adresse gesendet. Probiere eine andere Absende-Adresse oder wende dich an ein Team-Mitglied. email_reject_inactive_user: + title: "E-Mail abgelehnt weil Benutzer inaktiv" subject_template: "[%{site_name}] E-Mail-Problem -- Inaktiver Benutzer" text_body_template: | Es tut uns leid, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) hat nicht funktioniert. Dein mit dieser E-Mail-Adresse verbundenes Benutzerkonto ist nicht aktiviert. Bitte aktiviere dein Konto bevor du E-Mails sendest. email_reject_blocked_user: + title: "E-Mail abgelehnt weil Benutzer gesperrt" subject_template: "[%{site_name}] E-Mail-Problem -- Blockierter Benutzer" text_body_template: | Es tut uns leid, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) hat nicht funktioniert. Dein mit dieser E-Mail-Adresse verbundenes Konto wurde blockiert. email_reject_reply_user_not_matching: + title: "E-Mail abgelehnt weil E-Mail-Adresse abweichend" subject_template: "[%{site_name}] E-Mail-Problem -- Unerwartete Antwort-Adresse" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Deine Antwort wurde von einer anderen E-Mail-Adresse versandt als wir erwartet haben, weshalb wir nicht sicher wissen ob das die gleiche Person ist. Probiere eine andere Absende-Adresse oder wende dich an ein Team-Mitglied. email_reject_no_account: + title: "E-Mail abgelehnt weil unbekanntes Konto" subject_template: "[%{site_name}] E-Mail-Problem -- Unbekanntes Konto" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Wir konnten kein Konto finden, das zu deiner E-Mail-Adresse passt. Probiere eine andere Absende-Adresse oder wende dich an ein Team-Mitglied. email_reject_empty: + title: "E-Mail abgelehnt weil kein Inhalt" subject_template: "[%{site_name}] E-Mail-Problem -- Kein Inhalt" text_body_template: | Es tut uns leid, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) hat nicht funktioniert. @@ -1785,30 +1820,35 @@ de: Wenn du diese E-Mail bekommst, obwohl deine E-Mail Inhalt enthalten hat, versuche es erneut mit weniger Formatierung. email_reject_parsing: + title: "E-Mail abgelehnt weil Inhalt nicht erkannt" subject_template: "[%{site_name}] E-Mail-Problem -- Inhalt nicht erkannt" text_body_template: | Es tut uns leid, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) hat nicht funktioniert. Wir konnten keinen Inhalt in deiner E-Mail feststellen. **Versichere dich, dass du den Inhalt oberhalb der erhaltenen E-Mail eingegeben hast** -- Eingebettete Antworten können wir nicht verarbeiten. email_reject_invalid_access: + title: "E-Mail abgelehnt weil nicht erlaubt" subject_template: "[%{site_name}] E-Mail-Problem -- Nicht erlaubt" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Du hast nicht die notwendigen Zugriffsrechte, um neue Themen in dieser Kategorie zu erstellen. Wenn du glaubst, dass das ein Irrtum ist, dann kontaktiere ein Team-Mitglied. email_reject_strangers_not_allowed: + title: "E-Mail abgelehnt weil Zugriff nicht erlaubt" subject_template: "[%{site_name}] E-Mail-Problem -- Zugriff nicht erlaubt" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Die Kategorie, an die du die E-Mail geschickt hast, erlaubt nur Antworten von Benutzern mit gültigem Konto und von bekannten E-Mail-Adressen. Wenn du glaubst, dass das ein Irrtum ist, dann kontaktiere ein Team-Mitglied. email_reject_invalid_post: + title: "E-Mail abgelehnt weil ungültiger Beitrag" subject_template: "[%{site_name}] E-Mail-Problem -- Ungültiger Beitrag" text_body_template: | Es tut uns leid, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) hat nicht funktioniert. Mögliche Gründe sind komplizierte Formatierung und zu lange oder kurze Nachrichten. Bitte versuche es erneut oder schreibe deinen Beitrag über die Website. email_reject_invalid_post_specified: + title: "E-Mail abgelehnt weil ungültiger Beitrag" subject_template: "[%{site_name}] E-Mail-Problem -- Ungültiger Beitrag" text_body_template: | Es tut uns leid, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) hat nicht funktioniert. @@ -1819,42 +1859,49 @@ de: Bitte versuch es erneut, wenn du das Problem beheben kannst. email_reject_invalid_post_action: + title: "E-Mail abgelehnt weil fehlerhafte Beitragsaktion" subject_template: "[%{site_name}] E-Mail-Problem -- Fehlerhafte Beitragsaktion" text_body_template: | Es tut uns leid, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) hat nicht funktioniert. Die Beitragsaktion wurde nicht erkannt. Bitte versuche es erneut oder erstelle deinen Beitrag auf der Website, wenn der Fehler weiterhin auftritt. email_reject_reply_key: + title: "E-Mail abgelehnt weil unbekannter Antwort-Schlüssel" subject_template: "[%{site_name}] E-Mail-Problem -- Unbekannter Antwort-Schlüssel" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Der angegebene Antwort-Schlüssel ist ungültig oder unbekannt. Wir wissen daher nicht auf welchen Beitrag diese E-Mail antwortet. Bitte kontaktiere ein Team-Mitglied. email_reject_bad_destination_address: + title: "E-Mail abgelehnt weil unbekannte Empfänger-Adresse" subject_template: "[%{site_name}] E-Mail Problem -- Unbekannte An:-Adresse" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Keine der Ziel-E-Mail-Adressen wurde erkannt. Bitte stelle sicher, dass du die E-Mail an die richtige Adresse schickst, die dir von unserem Team genannt wurde. email_reject_topic_not_found: + title: "E-Mail abgelehnt weil Thema nicht gefunden" subject_template: "[%{site_name}] E-Mail-Problem -- Thema nicht gefunden" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Das Thema, auf das du geantwortet hast, existiert nicht mehr -- vielleicht wurde es gelöscht? Wenn du glaubst, dass dies ein Irrtum ist, nimm Bitte Kontakt mit einem Team-Mitglied auf. email_reject_topic_closed: + title: "E-Mail abgelehnt weil Thema geschlossen" subject_template: "[%{site_name}] E-Mail-Problem -- Thema geschlossen" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Das Thema, auf das du geantwortet hast, ist derzeit geschlossen und akzeptiert keine Antworten mehr. Wenn du glaubst, dass dies ein Irrtum ist, nimm bitte Kontakt mit einem Team-Mitglied auf. email_reject_auto_generated: + title: "E-Mail abgelehnt weil automatisch generierte Antwort" subject_template: "[%{site_name}] E-Mail-Problem -- Automatisch erzeugte Antwort" text_body_template: | Entschuldige, aber deine E-Mail-Nachricht an %{destination} (betitelt mit %{former_title}) konnte nicht zugestellt werden. Deine E-Mail wurde als „automatisch generiert“ markiert, was bedeutet, dass sie automatisch von einem Computer erstellt wurde statt von einem Menschen getippt; wir können diese Arten von E-Mails nicht akzeptieren. Wenn du glaubst, dass dies ein Irrtum ist, nimm bitte Kontakt mit einem Team-Mitglied auf. email_error_notification: + title: "Benachrichtigung zu E-Mail-POP-Authentifizierungsfehler" subject_template: "[%{site_name}] E-Mail-Problem -- POP-Authentifizierungsfehler" text_body_template: | Leider gab es einen Authentifizierungsfehler beim Abrufen von E-Mails vom POP-Server. @@ -1863,6 +1910,7 @@ de: Wenn es eine Weboberfläche für das POP-E-Mail-Postfach gibt, möchtest du dich eventuell dort anmelden und die Einstellungen überprüfen. too_many_spam_flags: + title: "Neues Konto gesperrt wegen zu viel Spam" subject_template: "Neues Konto gesperrt" text_body_template: | Hallo, @@ -1873,6 +1921,7 @@ de: Weitere Hinweise findest du in unseren [Community-Richtlinien](%{base_url}/guidelines). too_many_tl3_flags: + title: "E-Mail abgelehnt wegen Meldungen durch Vertrauensstufe 3" subject_template: "Neues Konto gesperrt" text_body_template: | Hallo, @@ -1883,6 +1932,7 @@ de: Weitere Hinweise findest du in unseren [Community-Richtlinien](%{base_url}/guidelines). blocked_by_staff: + title: "Gesperrt vom Team" subject_template: "Konto vorübergehend gesperrt" text_body_template: | Hallo, @@ -1893,6 +1943,7 @@ de: Weitere Hinweise findest du in unseren [Community-Richtlinien](%{base_url}/guidelines). user_automatically_blocked: + title: "Benutzer automatisch gesperrt" subject_template: "Neuer Benutzer %{username} gesperrt wegen Community-Meldungen" text_body_template: | Dies ist eine automatisierte Nachricht. @@ -1903,6 +1954,7 @@ de: Der Schwellenwert kann über die Einstellung `block_new_user` geändert werden. spam_post_blocked: + title: "Spam-Beitrag gesperrt" subject_template: "Beiträge des neuen Benutzers ${username} wegen mehrfacher Verlinkung blockiert" text_body_template: | Dies ist eine automatisierte Nachricht. @@ -1913,6 +1965,7 @@ de: Dies kann über die Einstellungen `newuser_spam_host_threshold` und `white_listed_spam_host_domains` geändert werden. unblocked: + title: "Entsperrt" subject_template: "Konto nicht mehr gesperrt" text_body_template: | Hallo, @@ -1921,6 +1974,7 @@ de: Du kannst nun wieder neue Antworten und Themen erstellen. Vielen Dank für deine Geduld. pending_users_reminder: + title: "Benachrichtigung: Benutzer warten auf Freigabe" subject_template: one: "Es gibt einen nicht freigegebenen Benutzer" other: "Es gibt %{count} nicht freigegebene Benutzer" @@ -1929,9 +1983,11 @@ de: [Bitte bewerte diese im Administrationsbereich](/admin/users/list/pending). download_remote_images_disabled: + title: "Download von externen Bildern deaktiviert" subject_template: "Download von externen Bildern deaktiviert" text_body_template: "Die `download_remote_images_to_local` Einstellung wurde deaktiviert, da das Speicherplatz Limit von `download_remote_images_threshold` erreicht wurde." dashboard_problems: + title: "Dashboard-Probleme" subject_template: "Probleme wurden festgestellt" text_body_template: | Es wurden Probleme in deinem Admin-Dashboard gemeldet. @@ -1983,6 +2039,7 @@ de: > %{site_title} -- %{site_description} user_invited_to_private_message_pm: + title: "Benutzer zu Nachricht eingeladen" subject_template: "[%{site_name}] %{username} hat dich zur Unterhaltung '%{topic_title}' eingeladen" text_body_template: | %{header_instructions} @@ -1991,6 +2048,7 @@ de: %{respond_instructions} user_invited_to_private_message_pm_staged: + title: "Benutzer zu Nachricht eingeladen (automatisch)" subject_template: "[%{site_name}] %{username} hat dich zur Unterhaltung '%{topic_title}' eingeladen" text_body_template: | %{header_instructions} @@ -1999,6 +2057,7 @@ de: %{respond_instructions} user_invited_to_topic: + title: "Benutzer zu Thema eingeladen" subject_template: "[%{site_name}] %{username} hat dich zum Thema '%{topic_title}' eingeladen" text_body_template: | %{header_instructions} @@ -2007,6 +2066,7 @@ de: %{respond_instructions} user_replied: + title: "Benutzer hat auf Beitrag geantwortet" subject_template: "[%{site_name}] %{username} hat auf deinen Beitrag '%{topic_title}' geantwortet" text_body_template: | %{header_instructions} @@ -2017,6 +2077,7 @@ de: %{respond_instructions} user_replied_pm: + title: "Benutzer hat auf Nachricht geantwortet" subject_template: "[%{site_name}] [PN] %{topic_title}" text_body_template: | %{header_instructions} @@ -2027,6 +2088,7 @@ de: %{respond_instructions} user_quoted: + title: "Benutzer wurde zitiert" subject_template: "[%{site_name}] %{username} hat Dich in '%{topic_title}' zitiert" text_body_template: | %{header_instructions} @@ -2037,6 +2099,7 @@ de: %{respond_instructions} user_linked: + title: "Benutzer wurde verlinkt" subject_template: "[%{site_name}] %{topic_title}" text_body_template: | %{header_instructions} @@ -2047,6 +2110,7 @@ de: %{respond_instructions} user_mentioned: + title: "Benutzer wurde erwähnt" subject_template: "[%{site_name}] %{username} hat Dich in '%{topic_title}' erwähnt" text_body_template: | %{header_instructions} @@ -2057,6 +2121,7 @@ de: %{respond_instructions} user_group_mentioned: + title: "Gruppe wurde erwähnt" subject_template: "[%{site_name}] %{topic_title}" text_body_template: | %{header_instructions} @@ -2067,6 +2132,7 @@ de: %{respond_instructions} user_posted: + title: "Benutzer hat in Thema geantwortet" subject_template: "[%{site_name}] %{subject_prefix}%{username} hat auf '%{topic_title}' geantwortet" text_body_template: | %{header_instructions} @@ -2077,6 +2143,7 @@ de: %{respond_instructions} user_watching_first_post: + title: "Benutzer folgt erstem Beitrag" subject_template: "[%{site_name}] %{topic_title}" text_body_template: | %{header_instructions} @@ -2087,6 +2154,7 @@ de: %{respond_instructions} user_posted_pm: + title: "Benutzer hat Nachricht geschrieben" subject_template: "[%{site_name}] [PN] %{topic_title}" text_body_template: | %{header_instructions} @@ -2097,6 +2165,7 @@ de: %{respond_instructions} user_posted_pm_staged: + title: "Benutzer hat Nachricht geschrieben (automatisch)" subject_template: "%{optional_re}%{topic_title}" text_body_template: |2 @@ -2131,6 +2200,7 @@ de: view_this_topic: "Thema anzeigen" back_to_top: "Zurück nach oben" forgot_password: + title: "Passwort vergessen" subject_template: "[%{site_name}] Passwort zurückgesetzt" text_body_template: | Jemand hat darum gebeten, dein Passwort auf [%{site_name}](%{base_url}) zurückzusetzen. @@ -2140,6 +2210,7 @@ de: Andernfalls besuche den folgenden Link, um ein neues Passwort zu wählen: %{base_url}/users/password-reset/%{email_token} set_password: + title: "Passwort setzen" subject_template: "[%{site_name}] Setze Passwort" text_body_template: | Jemand hat ein Passwort für dein Konto auf [%{site_name}](%{base_url}) beantragt. Alternativ kannst du dich mit einem unterstützen Online-Service (Google, Facebook, etc), der mit dieser validierten E-Mail-Adresse verknüpft ist, anmelden. @@ -2149,6 +2220,7 @@ de: Klicke auf den folgenden Link, um ein Passwort auszuwählen: %{base_url}/users/password-reset/%{email_token} admin_login: + title: "Administrator-Anmeldung" subject_template: "[%{site_name}] Anmeldung" text_body_template: | Jemand hat versucht sich in dein Konto auf [%{site_name}](%{base_url}) anzumelden. @@ -2158,6 +2230,7 @@ de: Klicke den folgenden Link, um dich anzumelden: %{base_url}/users/admin-login/%{email_token} account_created: + title: "Konto erstellt" subject_template: "[%{site_name}] Dein neues Konto" text_body_template: | Ein neues Konto wurde für dich auf %{site_name} erstellt. @@ -2165,12 +2238,14 @@ de: Klicke auf den folgenden Link, um ein Passwort für dein neues Konto festzulegen: %{base_url}/users/password-reset/%{email_token} confirm_new_email: + title: "E-Mail-Adresse bestätigen (an neue)" subject_template: "[%{site_name}] Bestätige deine neue E-Mail-Adresse" text_body_template: | Um deine E-Mail-Adresse für %{site_name} zu bestätigen, klicke auf den folgenden Link: %{base_url}/users/authorize-email/%{email_token} confirm_old_email: + title: "E-Mail-Adresse bestätigen (an alte)" subject_template: "[%{site_name}] Bestätige deine aktuelle E-Mail-Adresse" text_body_template: | Bevor wir deine E-Mail-Adresse ändern können, müssen wir dich bitten zu bestätigen, dass du das E-Mail-Konto kontrollierst. Nach diesem Schritt, werden wir dich bitten die neue E-Mail-Adresse zu bestätigen. @@ -2179,6 +2254,7 @@ de: %{base_url}/users/authorize-email/%{email_token} notify_old_email: + title: "Benachrichtigung an alte E-Mail-Adresse" subject_template: "[%{site_name}] Deine E-Mail-Adresse wurde geändert" text_body_template: | Dies ist eine automatisierte Nachricht, um eine Änderung deiner E-Mail-Adresse für %{site_name} mitzuteilen. Bitte kontaktiere ein Team-Mitglied, wenn du von einem Fehler ausgehst. @@ -2187,6 +2263,7 @@ de: %{new_email} signup_after_approval: + title: "Konto bestätigen nach Genehmigung" subject_template: "You've been approved on %{site_name}!" text_body_template: | Willkommen bei %{site_name}! @@ -2206,6 +2283,7 @@ de: (Wenn du als neuer Benutzer unter vier Augen mit einem unserer [Team-Mitglieder](%{base_url}/about) reden möchtest, antworte einfach auf diese Nachricht.) signup: + title: "Konto bestätigen nach Anmeldung" subject_template: "[%{site_name}] Bestätige deinen neuen Account" text_body_template: | Willkommen bei %{site_name}! @@ -2239,6 +2317,7 @@ de: too_large: "Entschuldigung, die Datei die du hochladen möchtest, ist zu groß (maximale Dateigröße ist %{max_size_kb}KB)." images: too_large: "Entschuldigung, das Bild das du hochladen möchtest, ist zu groß (maximale Dateigröße ist %{max_size_kb}KB). Bitte verkleinere es und versuche es erneut." + larger_than_x_megapixels: "Entschuldige, das Bild, das du versucht hast hochzuladen, ist zu groß (maximale Auflösung beträgt %{max_image_megapixels} Megapixel), bitte verkleinere es und versuche es erneut." size_not_found: "Entschuldige, aber wir konnten die Größe des Bildes nicht bestimmen. Vielleicht ist das Bild defekt?" avatar: missing: "Hoppla, wir können kein Profilbild für diese E-Mail-Adresse finden. Kannst du versuchen es erneut hochzuladen?" @@ -2872,11 +2951,11 @@ de: fields: welcome: label: "Willkommen-Thema" - description: "

    Wie würdest du deine Community einem Fremden im Fahrstuhl in ungefähr 1 Minute beschreiben?

    Dein Willkommensthema ist die erste Sache, die neue Besucher sehen werden. Betrachte es als dein 'Fahrstuhl-Vorstellungsgespräch' oder als 'Leitbild'.

    " + description: "

    Wie würdest du deine Community einem Fremden im Fahrstuhl in etwa 1 Minute beschreiben?

    Dein Willkommen-Thema ist die erste Sache, die neue Besucher sehen werden. Betrachte es als dein 'Fahrstuhl-Vorstellungsgespräch' oder als 'Leitbild'.

    " one_paragraph: "Bitte begrenze deine Willkommensnachricht auf einen Absatz." privacy: title: "Zugriff" - description: "

    Ist deine Community offen für alle oder beschränkt durch Mitgliedschaft, Einladung oder Genehmigung? Wenn du dies bevorzugst, kannst du alles zunächst privat einrichten und dann später auf öffentlich umschalten.

    Bitte denke daran, dass du Einladungen auch immer aus Themen oder von deiner Benutzerprofilseite aus schicken kannst.

    " + description: "

    Ist deine Community offen für alle oder beschränkt durch Mitgliedschaft, Einladung oder Genehmigung? Wenn du dies bevorzugst, kannst du alles zunächst privat einrichten und dann später auf öffentlich umschalten.

    Bitte denke daran, dass du Einladungen auch immer aus Themen oder von deiner Benutzerprofil-Seite aus schicken kannst.

    " fields: privacy: choices: diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 6468a337a0..eb2e54eed1 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -57,7 +57,7 @@ en: emails: incoming: - default_subject: "Incoming email from %{email}" + default_subject: "This topic needs a title" show_trimmed_content: "Show trimmed content" maximum_staged_user_per_email_reached: "Reached maximum number of staged users created per email." errors: @@ -96,8 +96,8 @@ en: inclusion: is not included in the list invalid: is invalid is_invalid: "seems unclear, is it a complete sentence?" - contains_censored_words: "includes one or more of the censored words: %{censored_words}" - matches_censored_pattern: "matches the following censored Regex: %{censored_pattern}" + contains_censored_words: "contains the following censored words: %{censored_words}" + matches_censored_pattern: "contains the following words that matches the site's censored regexp: %{censored_words}" less_than: must be less than %{count} less_than_or_equal_to: must be less than or equal to %{count} not_a_number: is not a number @@ -136,10 +136,17 @@ en: errors: <<: *errors + invite: + accept_invite: "Accept Invitation" + not_found: "Your invite token is invalid. Please contact the site's administrator." + bulk_invite: file_should_be_csv: "The uploaded file should be of csv format." error: "There was an error uploading that file. Please try again later." + topic_invite: + user_exists: "Sorry, that user has already been invited. You may only invite a user to a topic once." + backup: operation_already_running: "An operation is currently running. Can't start a new job right now." backup_file_should_be_tar_gz: "The backup file should be a .tar.gz archive." @@ -566,8 +573,8 @@ en: password_reset: no_token: "Sorry, that password change link is too old. Select the Log In button and use 'I forgot my password' to get a new link." - choose_new: "Please choose a new password" - choose: "Please choose a password" + choose_new: "Choose a new password" + choose: "Choose a password" update: 'Update Password' save: 'Set Password' title: 'Reset Password' @@ -1694,9 +1701,9 @@ en: > %{site_title} -- %{site_description} - Message from %{invitee_name}: + With this note - %{user_custom_message} + > %{user_custom_message} If you're interested, click the link below: @@ -1730,9 +1737,9 @@ en: > > %{site_description} - Message from %{invitee_name}: + With this note - %{user_custom_message} + > %{user_custom_message} If you're interested, click the link below: @@ -1991,6 +1998,8 @@ en: The above download link will be valid for 48 hours. + The data is compressed as a gzip archive. If the archive does not extract itself when you open it, use the tools recommended here: http://www.gzip.org/#faq4 + csv_export_failed: title: "CSV Export Failed" subject_template: "Data export failed" @@ -3241,9 +3250,6 @@ en: initial_post_raw: This topic includes daily performance reports for your site. initial_topic_title: Website performance reports - topic_invite: - user_exists: "Sorry, that user has already been invited. You may only invite a user to a topic once." - tags: title: "Tags" staff_tag_disallowed: "The tag \"%{tag}\" may only be applied by staff." diff --git a/config/locales/server.es.yml b/config/locales/server.es.yml index 8494bd92fb..e3cef5ecd7 100644 --- a/config/locales/server.es.yml +++ b/config/locales/server.es.yml @@ -32,6 +32,7 @@ es: purge_reason: "Cuenta eliminada automáticamente al detectarse como abandonada, desactivada" disable_remote_images_download_reason: "La descarga de imágenes remotas se desactivó porque no había suficiente espacio disponible en disco." anonymous: "Anónimos" + remove_posts_deleted_by_author: "Eliminado por su autor" emails: incoming: default_subject: "Email entrante desde %{email}" @@ -72,6 +73,8 @@ es: inclusion: no está incluido en la lista invalid: no es válido is_invalid: "parece poco claro, es una oración completa?" + contains_censored_words: "incluye una o más palabras censuradas: %{censored_words}" + matches_censored_pattern: "coincide con la siguiente expresión regular censurada: %{censored_pattern}" less_than: debe ser menor que %{count} less_than_or_equal_to: debe ser menor o igual que %{count} not_a_number: no es un número @@ -1072,6 +1075,7 @@ es: max_attachment_size_kb: "El tamaño máximo, en kB, para adjuntar archivos. Debe ser configurado también en nginx (client_max_body_size) / apache o proxy." authorized_extensions: "Una lista de las extensiones de archivo permitidas para subir (usa \"*\" para habilitar todos los tipos de archivo)" max_similar_results: "Cuántos temas similares se mostrarán encima del editor cuando estés creando un nuevo tema. La comparación se basa en el título y el cuerpo del tema." + max_image_megapixels: "Máximo de megapíxeles permitidos por una imagen." title_prettify: "Prevenir errores comunes en el título, incluyendo \"todo mayúsculas\", primera letra minúscula, multiples signos ! o ?, . extra al final, etc." topic_views_heat_low: "Después de este número de vistas, el campo vistas será ligeramente resaltado." topic_views_heat_medium: "Después de este número de visitas, el campo visitas será moderadamente resaltado." @@ -1479,36 +1483,8 @@ es: Esta invitación viene de un usuario en el que confiamos, por lo que podrás responder inmediatamente. invite_forum_mailer: subject_template: "%{invitee_name} te invitó a unirte a %{site_domain_name}" - text_body_template: | - %{invitee_name} te ha invitado a unirte a - - > **%{site_title}** - > - > %{site_description} - - Si estás interesado, haz clic en el botón debajo: - - %{invite_link} - - Esta invitación viene de un usuario en el que confiamos, por lo que se te creará una cuenta automáticamente. custom_invite_forum_mailer: subject_template: "%{invitee_name} te ha invitado a %{site_domain_name}" - text_body_template: | - %{invitee_name} te ha invitado a - - > **%{site_title}** - > - > %{site_description} - - Mensaje de %{invitee_name}: - - %{user_custom_message} - - Si estás interesado en unirte, haz clic en el enlace debajo: - - %{invite_link} - - Esta invitación viene de un usuario en el que confiamos, por lo que se te creará una cuenta automáticamente. invite_password_instructions: subject_template: "Asigna una contraseña para tu cuenta en %{site_name}" text_body_template: | @@ -1602,26 +1578,6 @@ es: (Si necesitas comunicarte con [algún miembro del staff](%{base_url}/about) como nuevo usuario, puedes responder a este mensaje.) welcome_invite: subject_template: "¡Bienvenido a %{site_name}!" - text_body_template: | - Gracias por aceptar tu invitación a %{site_name} -- ¡Te damos la bienvenida! - - Hemos creado automáticamente una nueva cuenta para ti: **%{username}**. Puedes cambiar tu nombre de usuario en cualquier momento visitando [tu perfil][prefs]. - - Para iniciar sesión en adelante: - - 1. Usa siempre la **misma dirección de correo** en la que recibiste tu invitación original. ¡De otra manera no seremos capaces de reconocer que eres tú! - - 2. Crea una contraseña unica para [tu perfil de usuario][prefs], y úsala para iniciar sesión. - - %{new_user_tips} - - Creemos en una comunidad con un [comportamiento civilizado](%{base_url}/guidelines). - - ¡Disfruta de tu estancia! - - (Si necesitas comunicarte por privado con [algún miembro del staff](%{base_url}/about) como nuevo usuario, puedes responder a este mensaje.) - - [prefs]: %{user_preferences_url} backup_succeeded: subject_template: "La copia de seguridad se completo exitosamente" text_body_template: |+ @@ -1869,6 +1825,7 @@ es: > %{site_title} -- %{site_description} user_invited_to_private_message_pm: + title: "Usuario invitado a MP" subject_template: "[%{site_name}] %{username} te ha invitado a un hilo de mensajes '%{topic_title}'" text_body_template: | %{header_instructions} @@ -1877,6 +1834,7 @@ es: %{respond_instructions} user_invited_to_private_message_pm_staged: + title: "Usuario invitado a MP provisional" subject_template: "[%{site_name}] %{username} te ha invitado a un mensaje '%{topic_title}'" text_body_template: | %{header_instructions} @@ -1885,6 +1843,7 @@ es: %{respond_instructions} user_invited_to_topic: + title: "Usuario invitado a tema" subject_template: "[%{site_name}] %{username} te invitó a '%{topic_title}'" text_body_template: | %{header_instructions} @@ -1893,6 +1852,7 @@ es: %{respond_instructions} user_replied: + title: "Usuario respondió" subject_template: "[%{site_name}] %{topic_title}" text_body_template: | %{header_instructions} @@ -1903,6 +1863,7 @@ es: %{respond_instructions} user_replied_pm: + title: "Usuario respondió por MP" subject_template: "[%{site_name}] [MP] %{topic_title}" text_body_template: | %{header_instructions} @@ -1913,6 +1874,7 @@ es: %{respond_instructions} user_quoted: + title: "Usuario citado" subject_template: "[%{site_name}] %{topic_title}" text_body_template: | %{header_instructions} @@ -1923,6 +1885,7 @@ es: %{respond_instructions} user_linked: + title: "Usuario enlazado" subject_template: "[%{site_name}] %{topic_title}" text_body_template: | %{header_instructions} @@ -1933,6 +1896,7 @@ es: %{respond_instructions} user_mentioned: + title: "Usuario mencionado" subject_template: "[%{site_name}] %{topic_title}" text_body_template: | %{header_instructions} @@ -1943,6 +1907,7 @@ es: %{respond_instructions} user_group_mentioned: + title: "Grupo del usuario mencionado" subject_template: "[%{site_name}] %{topic_title}" text_body_template: | %{header_instructions} @@ -1953,6 +1918,7 @@ es: %{respond_instructions} user_posted: + title: "Usuario publicó" subject_template: "[%{site_name}] %{subject_prefix}%{username} publicó en '%{topic_title}'" text_body_template: | %{header_instructions} @@ -2757,11 +2723,9 @@ es: fields: welcome: label: "Tema de bienvenida" - description: "

    ¿Cómo le describirías tu comunidad a un desconocido en alrededor de 1 minuto?