From c3aaeedc625f89bcef5024e71448f9704e657c92 Mon Sep 17 00:00:00 2001 From: Kane York Date: Mon, 21 Sep 2015 11:47:23 -0700 Subject: [PATCH 001/185] FEATURE: Make it easy to override the home logo --- .../javascripts/discourse/components/home-logo.js.es6 | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/discourse/components/home-logo.js.es6 b/app/assets/javascripts/discourse/components/home-logo.js.es6 index d2deabb8a..1cd706d09 100644 --- a/app/assets/javascripts/discourse/components/home-logo.js.es6 +++ b/app/assets/javascripts/discourse/components/home-logo.js.es6 @@ -4,10 +4,15 @@ import { setting } from 'discourse/lib/computed'; export default Ember.Component.extend({ classNames: ["title"], - linkUrl: function() { - return Discourse.getURL('/'); + targetUrl: function() { + // For overriding by customizations + return '/'; }.property(), + linkUrl: function() { + return Discourse.getURL(this.get('targetUrl')); + }.property('targetUrl'), + showSmallLogo: function() { return !Discourse.Mobile.mobileView && this.get("minimized"); }.property("minimized"), @@ -27,7 +32,7 @@ export default Ember.Component.extend({ e.preventDefault(); - DiscourseURL.routeTo('/'); + DiscourseURL.routeTo(this.get('targetUrl')); return false; } }); From e56f8fa4713a2076855b007baf99e4f1a0cc741f Mon Sep 17 00:00:00 2001 From: Gerhard Schlager Date: Tue, 8 Dec 2015 18:51:31 +0100 Subject: [PATCH 002/185] Add Slovak locale --- .tx/config | 2 +- app/assets/javascripts/locales/sk.js.erb | 9 + config/locales/client.sk.yml | 2729 +++++++++++++++++ config/locales/server.sk.yml | 1128 +++++++ plugins/poll/config/locales/client.sk.yml | 53 + plugins/poll/config/locales/server.sk.yml | 41 + public/403.sk.html | 26 + public/422.sk.html | 25 + public/500.sk.html | 12 + public/503.sk.html | 11 + .../lib/discourse_imgur/locale/server.sk.yml | 12 + 11 files changed, 4047 insertions(+), 1 deletion(-) create mode 100644 app/assets/javascripts/locales/sk.js.erb create mode 100644 config/locales/client.sk.yml create mode 100644 config/locales/server.sk.yml create mode 100644 plugins/poll/config/locales/client.sk.yml create mode 100644 plugins/poll/config/locales/server.sk.yml create mode 100644 public/403.sk.html create mode 100644 public/422.sk.html create mode 100644 public/500.sk.html create mode 100644 public/503.sk.html create mode 100644 vendor/gems/discourse_imgur/lib/discourse_imgur/locale/server.sk.yml diff --git a/.tx/config b/.tx/config index bba3633be..9dfdf375f 100644 --- a/.tx/config +++ b/.tx/config @@ -1,6 +1,6 @@ [main] host = https://www.transifex.com -lang_map = es_ES: es, fr_FR: fr, ko_KR: ko, pt_PT: pt +lang_map = es_ES: es, fr_FR: fr, ko_KR: ko, pt_PT: pt, sk_SK: sk [discourse-org.clientenyml] file_filter = config/locales/client..yml diff --git a/app/assets/javascripts/locales/sk.js.erb b/app/assets/javascripts/locales/sk.js.erb new file mode 100644 index 000000000..42603f0b4 --- /dev/null +++ b/app/assets/javascripts/locales/sk.js.erb @@ -0,0 +1,9 @@ +//= depend_on 'client.sk.yml' +//= require locales/i18n +<%= JsLocaleHelper.output_locale(:sk) %> + +I18n.pluralizationRules['sk'] = function (n) { + if (n == 1) return "one"; + if (n >= 2 && n <= 4) return "few"; + return "other"; +}; diff --git a/config/locales/client.sk.yml b/config/locales/client.sk.yml new file mode 100644 index 000000000..97251a682 --- /dev/null +++ b/config/locales/client.sk.yml @@ -0,0 +1,2729 @@ +# encoding: utf-8 +# +# Never edit this file. It will be overwritten when translations are pulled from Transifex. +# +# To work with us on translations, join this project: +# https://www.transifex.com/projects/p/discourse-org/ + +sk: + js: + number: + format: + separator: "," + delimiter: "," + human: + storage_units: + format: '%n %u' + units: + byte: + one: bajt + few: bajtov + other: bajtov + gb: GB + kb: KB + mb: MB + tb: TB + short: + thousands: "{{number}}tis" + millions: "{{number}}mil" + dates: + time: "h:mm a" + long_no_year: "MMM D h:mm a" + long_no_year_no_time: "MMM D" + full_no_year_no_time: "MMMM Do" + long_with_year: "MMM D, YYYY h:mm a" + long_with_year_no_time: "MMM D, YYYY" + full_with_year_no_time: "MMMM Do, YYYY" + long_date_with_year: "MMM D, 'YY LT" + long_date_without_year: "MMM D, LT" + 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" + tiny: + half_a_minute: "< 1m" + less_than_x_seconds: + one: "< 1s" + few: "< %{count}s" + other: "< %{count}s" + x_seconds: + one: "1s" + few: "1s" + other: "%{count}s" + less_than_x_minutes: + one: "< 1m" + few: "< 1m" + other: "< %{count}m" + x_minutes: + one: "1m" + few: "%{count}m" + other: "%{count}m" + about_x_hours: + one: "1h" + few: "%{count}h" + other: "%{count}h" + x_days: + one: "1d" + few: "%{count}d" + other: "%{count}d" + about_x_years: + one: "1r" + few: "%{count}r" + other: "%{count}r" + over_x_years: + one: "> 1r" + few: "> %{count}r" + other: "> %{count}r" + almost_x_years: + one: "1r" + few: "%{count}r" + other: "%{count}r" + date_month: "MMM D" + date_year: "MMM 'YY" + medium: + x_minutes: + one: "1 minúta" + few: "%{count} minúty" + other: "%{count} minút" + x_hours: + one: "1 hodina" + few: "%{count} hodiny" + other: "%{count} hodín" + x_days: + one: "1 deň" + few: "%{count} dni" + other: "%{count} dní" + date_year: "MMM D, 'YY" + medium_with_ago: + x_minutes: + one: "pred 1 minútou" + few: "pred %{count} minútami" + other: "pred %{count} minútami" + x_hours: + one: "pred 1 hodinou" + few: "pred %{count} hodinami" + other: "pred %{count} hodinami" + x_days: + one: "pred 1 dňom" + few: "pred %{count} dňami" + other: "pred %{count} dňami" + later: + x_days: + one: "1 deň neskôr" + few: "%{count} dni neskôr" + other: "%{count} dní neskôr" + x_months: + one: "1 mesiac neskôr" + few: "%{count} mesiace neskôr" + other: "%{count} mesiacov neskôr" + x_years: + one: "1 rok neskôr" + few: "%{count} roky neskôr" + other: "%{count} rokov neskôr" + share: + topic: 'zdieľaj odkaz na túto tému' + post: 'príspevok #%{postNumber}' + close: 'zatvoriť' + twitter: 'zdieľaj odkaz na Twitteri' + facebook: 'zdieľaj odkaz na Facebooku' + google+: 'zdieľaj odkaz na Google+' + email: 'pošli odkaz emailom' + action_codes: + split_topic: "rozdeľ tému %{when}" + autoclosed: + enabled: 'uzavreté %{when}' + disabled: 'otvorené %{when}' + closed: + enabled: 'uzavreté %{when}' + disabled: 'otvorené %{when}' + archived: + enabled: 'archivované %{when}' + disabled: 'odarchivované %{when}' + pinned: + enabled: 'pripnuné %{when}' + disabled: 'odopnuté %{when}' + pinned_globally: + enabled: 'globálne pripnuté %{when}' + disabled: 'odopnuté %{when}' + visible: + enabled: 'zverejnené %{when}' + disabled: 'stiahnuté %{when}' + topic_admin_menu: "akcie administrátora témy" + emails_are_disabled: "Odosielanie emailov bolo globálne vypnuté administrátorom. Žiadne emailové notifikácie nebudú odoslané." + edit: 'upraviť názov a kategóriu témy' + not_implemented: "Táto funkcia ešte bohužiaľ nie je implementovaná." + no_value: "Nie" + yes_value: "Áno" + generic_error: "Bohužiaľ nastala chyba." + generic_error_with_reason: "Nastala chyba: %{error}" + sign_up: "Registrácia" + log_in: "Prihlásenie" + age: "Vek" + joined: "Registovaný" + admin_title: "Administrácia" + flags_title: "Nahlásenie" + show_more: "zobraz viac" + show_help: "možnosti" + links: "Odkazy" + links_lowercase: + one: "odkaz" + few: "odkazy" + other: "odkazy" + faq: "FAQ" + guidelines: "Pokyny" + privacy_policy: "Ochrana súkromia" + privacy: "Súkromie" + terms_of_service: "Podmienky používania" + mobile_view: "Mobilná verzia" + desktop_view: "Desktop verzia" + you: "Vy" + or: "alebo" + now: "práve teraz" + read_more: 'čítaj ďalej' + more: "Viac" + less: "Menej" + never: "nikdy" + daily: "denne" + weekly: "týždenne" + every_two_weeks: "každé dva týždne" + every_three_days: "každé tri dni" + max_of_count: "najviac {{count}}" + alternation: "alebo" + character_count: + one: "1 znak" + few: "{{count}} znakov" + other: "{{count}} znakov" + suggested_topics: + title: "Odporúčané témy" + about: + simple_title: "O fóre" + title: "O %{title}" + stats: "Štatistiky stránky" + our_admins: "Naši admini" + our_moderators: "Naši moderátori" + stat: + all_time: "Za celú dobu" + last_7_days: "Posledných 7 dní" + last_30_days: "Posledných 30 dní" + like_count: "Páči sa mi" + topic_count: "Témy" + post_count: "Príspevky" + user_count: "Noví používatelia" + active_user_count: "Aktívni používatelia" + contact: "Kontaktujte nás" + contact_info: "V prípade kritickej chyby alebo naliehavej záležitosti nás prosím konaktujte na %{contact_info}." + bookmarked: + title: "Záložka" + clear_bookmarks: "Odstrániť záložku" + help: + bookmark: "Kliknutím vložíte záložku na prvý príspevok tejto témy" + unbookmark: "Kliknutím odstánite všetky záložky v tejto téme" + bookmarks: + not_logged_in: "pre pridanie záložky sa musíte prihlásiť" + created: "záložka bola pridaná" + not_bookmarked: "príspevok je prečítaný, kliknite pre pridanie záložky" + last_read: "toto je posledný prečítaný príspevok, kliknite pre pridanie záložky" + remove: "Odstrániť záložku" + confirm_clear: "Ste si istý že chcete odstrániť všetky záložky z tejto témy?" + topic_count_latest: + one: "1 nová alebo upravená téma." + few: "{{count}} nové alebo upravené témy." + other: "{{count}} nových alebo upravených tém." + topic_count_unread: + one: "1 neprečítaná téma." + few: "{{count}} neprečítané témy." + other: "{{count}} neprečítaných tém." + topic_count_new: + one: "1 nová téma." + few: "{{count}} nové témy." + other: "{{count}} nových tém." + click_to_show: "Kliknite pre zobrazenie." + preview: "náhľad" + cancel: "zrušiť" + save: "Uložiť zmeny" + saving: "Ukladám zmeny..." + saved: "Zmeny uložené." + upload: "Upload" + uploading: "Upload prebieha..." + uploading_filename: "Nahrávám {{filename}}..." + uploaded: "Upload úspešne dokončený." + enable: "Zapnúť" + disable: "Vypnúť" + undo: "Späť" + revert: "Vrátiť zmeny" + failed: "Nepodarilo sa" + switch_to_anon: "Anonymný mód" + switch_from_anon: "Opustiť anonymný mód" + banner: + close: "Zamietnuť tento banner." + edit: "Upraviť tento banner >>" + choose_topic: + none_found: "Nenašli sa žiadne témy." + title: + search: "Hľadaj tému podľa názvu, url alebo id:" + placeholder: "sem napíšte názov témy" + queue: + topic: "Téma:" + approve: 'Schváliť' + reject: 'Zamietnuť' + delete_user: 'Odstrániť používateľa' + title: "Vyžaduje schválenie" + none: "Žiadne príspevky na kontrolu." + edit: "Upraviť" + cancel: "Zrušiť" + view_pending: "zobraziť príspevky čakajúce na schválenie" + has_pending_posts: + one: "Téma má {{count}} príspevkov čakajúci na schválenie" + few: "Téma má {{count}} príspevky čakajúce na schválenie" + other: "Téma má {{count}} príspevkov čakajúcich na schválenie" + confirm: "Uložiť zmeny" + delete_prompt: "Ste si istý, že chcete vymazať %{username}? To odstráni všetky ich príspevky a zablokuje ich emailové a IP adresy." + approval: + title: "Príspevok vyžaduje schválenie" + description: "Váš príspevok sme obdžali, ale skôr než bude zverejnený musí byť schválený moderátorom. Prosíme o trpezlivosť." + pending_posts: + one: "Máte 1 neprečítaný príspevok." + few: "Máte {{count}} neprečítané príspevky." + other: "Máte {{count}} neprečítaných príspevkov." + ok: "OK" + user_action: + user_posted_topic: "{{user}} založil tému" + you_posted_topic: "Vy ste založili tému" + user_replied_to_post: "{{user}} odpovedal na {{post_number}}" + you_replied_to_post: "Vy ste odpovedali na {{post_number}}" + user_replied_to_topic: "{{user}} odpovedal na tému" + you_replied_to_topic: "Vy ste odpovedali natému" + user_mentioned_user: "{{user}} spomenul {{another_user}}" + user_mentioned_you: "{{user}} spomenul Vás" + you_mentioned_user: "Vy ste spomenuli {{another_user}}" + posted_by_user: "Príspevok od {{user}}" + posted_by_you: "Príspevok od Vás" + sent_by_user: "Poslané od {{user}}" + sent_by_you: "Poslané Vami" + directory: + filter_name: "filtrovať podľa používateľského mena" + title: "Používatelia" + likes_given: "Rozdané" + likes_received: "Prijaté" + topics_entered: "Navštívené" + topics_entered_long: "Navšívených tém" + time_read: "Čas strávený čítaním" + topic_count: "Témy" + topic_count_long: "Vytvorených tém" + post_count: "Odpovede" + post_count_long: "Odpovedí" + no_results: "Žiadne výsledky" + days_visited: "Návštev" + days_visited_long: "Navštívených dní" + posts_read: "Prečítané" + posts_read_long: "Prečítaných príspevkov" + total_rows: + one: "1 užívateľ" + few: "%{count} užívatelia" + other: "%{count} užívateľov" + groups: + add: "Pridať" + selector_placeholder: "Pridať členov" + owner: "vlastník" + visible: "Skupina je viditeľná všetkým používateľom" + title: + one: "skupina" + few: "skupiny" + other: "skupiny" + members: "Členovia" + posts: "Príspevky" + alias_levels: + title: "Kto môže poslať správu a @uváadzať túto skupinu?" + nobody: "Nikto" + only_admins: "Iba administrátori" + mods_and_admins: "Iba moderátori a administrátori" + members_mods_and_admins: "Iba členovia skupiny, moderátori a administrátori" + everyone: "Každý" + trust_levels: + title: "Stupeň dôvery automaticky pridelený členom po ich pridaní:" + none: "Žiadny" + user_action_groups: + '1': "Rozdaných 'páči sa mi'" + '2': "Obdržaných 'páči sa mi'" + '3': "Záložky" + '4': "Témy" + '5': "Odpovede" + '6': "Odozvy" + '7': "Zmienky" + '9': "Citácie" + '10': "Obľúbené" + '11': "Úpravy" + '12': "Odoslané správy" + '13': "Prijaté správy" + '14': "Čakajúce správy" + categories: + all: "všetky kategórie" + all_subcategories: "všetky" + no_subcategory: "žiadne" + category: "Kategória" + reorder: + title: "Usporiadať Kategórie" + title_long: "Usporiadať zoznam kategórií" + fix_order: "Pevné pozície" + fix_order_tooltip: "Nie všetky kategórie majú unikátne číslo pozície, čo môže zpôsobovať neočakávané výsledky." + save: "Ulož poradie" + apply_all: "Použi" + position: "Pozícia" + posts: "Príspevky" + topics: "Témy" + latest: "Najnovšie" + latest_by: "najnovšie podľa" + toggle_ordering: "zmeniť radenie" + subcategories: "Podkategórie" + topic_stats: "Počet nových tém." + topic_stat_sentence: + one: "%{count} nová téma za posledných %{unit}." + few: "%{count} nové témy za posledných %{unit}." + other: "%{count} nových tém za posledných %{unit}." + post_stats: "Počet nových príspevkov." + post_stat_sentence: + one: "%{count} nový príspevok za posledných %{unit}." + few: "%{count} nové príspevky za posledných %{unit}." + other: "%{count} nových príspevkov za posledných %{unit}." + ip_lookup: + title: Vyhľadávanie podľa IP adresy + hostname: Hostname + location: Lokácia + location_not_found: (neznáma) + organisation: Organizácia + phone: Telefón + other_accounts: "Ostatné účty s touto IP adresou:" + delete_other_accounts: "Zmazaných %{count}" + username: "používateľské meno" + trust_level: "Dôvera" + read_time: "čas strávený čítaním" + topics_entered: "založených tém" + post_count: "# príspevkov" + confirm_delete_other_accounts: "Ste si istý že chcete zmazať tieto účty?" + user_fields: + none: "(vyberte možnosť)" + user: + said: "{{username}}:" + profile: "Profil" + mute: "Ignorovať" + edit: "Upraviť nastavenia" + download_archive: "Stiahnutie mojich prípevkov" + new_private_message: "Nová správa" + private_message: "Správa" + private_messages: "Správy" + activity_stream: "Aktivita" + preferences: "Nastavenia" + expand_profile: "Rozbaľ" + bookmarks: "Záložky" + bio: "O mne" + invited_by: "Pozvaný od" + trust_level: "Stupeň dôvery" + notifications: "Upozornenia" + desktop_notifications: + label: "Upozornenia na pracovnej ploche" + not_supported: "Tento prehliadač nepodporuje upozornenia. Prepáčte." + perm_default: "Zapnúť upozornenia" + perm_denied_btn: "Prístup zamietnutý" + perm_denied_expl: "Notifikácie nie sú povolené. Povoľte notifikácie vo vašom prehliadači a potom kliknite na tlačidlo. (Desktop: ľavá krajná ikona v adresnom riadku. Mobil: 'Site info')" + disable: "Zakázať upozornenia" + currently_enabled: "(momentálne povolené)" + enable: "Povoliť upozornenia" + currently_disabled: "(momentálne nepovolené)" + each_browser_note: "Poznámka: Toto nastavenie musíte zmeniť v každom používanom prehliadači." + dismiss_notifications: "Označiť všetky ako prečítané" + dismiss_notifications_tooltip: "Označiť všetky neprečítané upozornenia ako prečítané" + disable_jump_reply: "Neskočiť na môj príspevok po odpovedi" + dynamic_favicon: "Zobraziť počet nových/upravených tém na ikone prehliadača" + edit_history_public: "Povoliť ostatným užívateľom zobrazenie všetkých verzií môjho príspevku" + external_links_in_new_tab: "Otvoriť všekty externé odkazy v novej záložke" + enable_quoting: "Umožniť odpoveď s citáciou z označeného textu" + change: "zmeniť" + moderator: "{{user}} je moderátor" + admin: "{{user}} je administrátor" + moderator_tooltip: "Tento používateľ je moderátor" + admin_tooltip: "Tento používateľ je administrátor" + blocked_tooltip: "Tento používateľ je zablokovaný" + suspended_notice: "Tento používateľ je suspendovaný do {{date}}" + suspended_reason: "Dôvod:" + github_profile: "Github" + mailing_list_mode: "Pošli mi email pri každom novom príspevku (pokiaľ neignorujem tému alebo kategóriu)" + watched_categories: "Sledované" + watched_categories_instructions: "Budete automaticky sledovať všetky nové témy v týchto kategóriách. Budete upozornený na všetky nové príspevky a témy, a zároveň bude vedľa témy zobrazený počet nových príspevkov." + tracked_categories: "Sledované" + tracked_categories_instructions: "Budete automaticky sledovať všetky nové témy v týchto kategóriách. Počet nových príspevkov sa bude zobraziť vedľa témy." + muted_categories: "Ignorovaný" + muted_categories_instructions: "Nebudete informovaní o udalostiach v nových témach týchto kategórií. Tieto témy sa zároveň nebudú zobrazovať v zozname posledných udalostí." + delete_account: "Vymazať môj účet" + delete_account_confirm: "Ste si istý, že chcete permanentne vymazať váš účet? Táto akcia je nenávratná." + deleted_yourself: "Váš účet bol úspešne vymazaný." + delete_yourself_not_allowed: "Momentálne nie je možné vymazať váš učet. Kontaktujte administrátora a ten vám ho vymaže." + unread_message_count: "Správy" + admin_delete: "Vymazať" + users: "Používatelia" + muted_users: "Ignorovaný" + muted_users_instructions: "Pozastaviť všetky notifikácie od týchto užívateľov." + muted_topics_link: "Zobraziť umlčané témy" + automatically_unpin_topics: "Automaticky zrušiť pripnutie témy ak sa dočítate na koniec." + staff_counters: + flags_given: "nápomocné značky" + flagged_posts: "označkované príspevky" + deleted_posts: "vymazané príspevky" + suspensions: "pozastavenia" + warnings_received: "upozornenia" + messages: + all: "Všetky" + mine: "Moje" + unread: "Neprečítané" + groups: "Moje skupiny" + change_password: + success: "(email odoslaný)" + in_progress: "(email sa odosiela)" + error: "(chyba)" + action: "Odoslať email na reset hesla" + set_password: "Nastaviť heslo" + change_about: + title: "Upraviť O mne" + error: "Pri úprave hodnoty nastala chyba" + change_username: + title: "Zmeniť užívateľské meno" + confirm: "Ak si zmeníte vaše užívateľské meno, všetky predchádajúce cítacie vašich príspevkov a @zmienok prestanú platiť. Ste si určite istý, že to chcete?" + taken: "Sorry, toto užívateľské meno je obsadené." + error: "Pri zmene užívateľského mena prišlo k chybe." + invalid: "Toto užívateľské meno nie je platné. Musí obsahovať iba znaky a čísla." + change_email: + title: "Zmeniť email" + taken: "Prepáčte, tento email je už obsadený." + error: "Pri zmene emailu nastala chyba. Je možné, že je email už použitý?" + success: "Na email sme odoslali správu. Nasledujte prosím inštrukcie pre potvrdenie." + change_avatar: + title: "Zmeniť váš profilový obrázok" + gravatar: "Gravatar, podľa" + gravatar_title: "Zmeňte váš avatar na webe Gravatar " + refresh_gravatar_title: "Obnoviť váš Gravatar" + letter_based: "Systém pridelil profilový obrázok" + uploaded_avatar: "Vlastný obrázok" + uploaded_avatar_empty: "Pridať vlastný obrázok" + upload_title: "Nahrať váš obrázok" + upload_picture: "Nahrať obrázok" + image_is_not_a_square: "Upozornenie: váš obrázok sme orezali; mal rozdielnu šírku a výšku" + cache_notice: "Váš profilový obrázok bol úspešne zmenený, ale jeho zobrazenie môže chvíľu trvať kvôli vyrovnávacej pamäti prehliadača." + change_profile_background: + title: "Pozadie profilu" + instructions: "Pozadie profilu bude vystredené a s predvolenou šírkou 850px." + change_card_background: + title: "Pozadie karty používateľa" + instructions: "Obrázky pozadia budú vystredené a s predvolenou šírkou 590px." + email: + title: "Email" + instructions: "Nikdy verejne nezobrazené" + ok: "Pošleme vám email pre potvrdenie" + invalid: "Zadajte prosím platný email" + authenticated: "Váš email bude autentifikovaný pomocou {{provider}}" + frequency_immediately: "Odošleme vám email ak ste neprečítali to, čo vám posielame emailom." + frequency: + one: "Odošleme vám email iba ak sme vás nevideli poslednú minútu" + few: "Odošleme vám email iba ak sme vás nevideli posledné {{count}} minúty." + other: "Odošleme vám email iba ak sme vás nevideli posledných {{count}} minút" + name: + title: "Meno" + instructions: "Vaše celé meno (nepovinné)" + instructions_required: "Vaše celé meno" + too_short: "Vaše meno je prikrátke" + ok: "Vaše meno je v poriadku" + username: + title: "Užívateľské meno" + instructions: "Unikátne, bez medzier, krátke" + short_instructions: "Ostatní vás môžu označiť ako @{{username}}" + available: "Vaše užívateľské meno je voľné" + global_match: "Email zodpovedá registrovanému užívateľskému menu" + global_mismatch: "Už zaregistrované. Skúste {{suggestion}}?" + not_available: "Nie je k dispozícii. Skúste {{suggestion}}?" + too_short: "Vaše užívateľské meno je prikrátke" + too_long: "Vaše užívateľské meno je pridlhé" + checking: "Kontrolujeme dostupnosť užívateľského meno" + enter_email: 'Užívateľské meno nájdené, zadajte zodpovedajúci email' + prefilled: "Email zodpovedá tomuto registrovanému užívateľskému menu" + locale: + title: "Jazyk rozhrania" + instructions: "Jazyk úžívateľského rozhrania. Zmení sa po obnovení stránky." + default: "(predvolené)" + password_confirmation: + title: "Heslo znova" + last_posted: "Posledný príspevok" + last_emailed: "Posledný odemailovaný" + last_seen: "Videný" + created: "Spojený" + log_out: "Odhlásiť sa" + location: "Poloha" + card_badge: + title: "Odznak karty užívateľa" + website: "Webová stránka" + email_settings: "Email" + email_digests: + title: "Ak to tu nenavštívim, pošlite mi emailový súhrn s novinkami:" + daily: "denne" + every_three_days: "každé tri dni" + weekly: "týždenne" + every_two_weeks: "každé dva týždne" + email_direct: "Pošlite mi email ak ma niekto cituje, odpovie na môj príspevok, spomenie moje @užívateľské meno alebo ma pozve do témy." + email_private_messages: "Pošlite mi email keď mi niekto pošle správu" + email_always: "Pošlite mi emailovú notifikáciu aj keď som aktívny na stránke" + other_settings: "Ostatné" + categories_settings: "Kategórie" + new_topic_duration: + label: "Považuj témy za nové keď" + not_viewed: "Ešte som ich nevidel" + last_here: "vytvorené odkedy som tu bol naposledy" + after_1_day: "vytvorené za posledný deň" + after_2_days: "vytvorené posledné 2 dni" + after_1_week: "vytvorené za posledný týždeň" + after_2_weeks: "vytvorené za posledné 2 týždne" + auto_track_topics: "Automaticky sleduj témy, do ktorých vstúpim" + auto_track_options: + never: "nikdy" + immediately: "ihneď" + after_30_seconds: "po 30 sekundách" + after_1_minute: "po 1 minúte" + after_2_minutes: "po 2 minútach" + after_3_minutes: "po 3 minútach" + after_4_minutes: "po 4 minútach" + after_5_minutes: "po 5 minútach" + after_10_minutes: "po 10 minútach" + invited: + search: "začni písať pre hľadanie pozvánok" + title: "Pozvánky" + user: "Pozvaný užívateľ" + sent: "Odoslané" + none: "Nemáte žiadne čakajúce pozvánky." + truncated: + one: "Zobrazuje sa prvá pozvánka." + few: "Zobrazujú sa prvé {{count}} pozvánky." + other: "Zobrazuje sa prvých {{count}} pozvánok." + redeemed: "Použité pozvánky" + redeemed_tab: "Použitá" + redeemed_tab_with_count: "Použité ({{count}})" + redeemed_at: "Použitá" + pending: "Čakajúce pozvánky" + pending_tab: "Čakajúca" + pending_tab_with_count: "Čakajúce ({{count}})" + topics_entered: "Zobrazených tém" + posts_read_count: "Prečítaných príspevkov" + expired: "Táto pozvánka vypršala." + rescind: "Odstrániť" + rescinded: "Pozvánka odstránená" + reinvite: "Poslať pozvánku znovu" + reinvited: "Poslať pozvánku znovu" + time_read: "Doba čítania" + days_visited: "Dní na stránke" + account_age_days: "Vek účtu v dňoch" + create: "Poslať Pozvánku" + generate_link: "Kopírovať Odkaz Pozvánky" + generated_link_message: '

Odkaz pre pozvánku bol úspešne vytvorený!

Odkaz je platný iba pre túto adresu: %{invitedEmail}

' + bulk_invite: + none: "Zatiaľ ste tu nikoho nepozvali. Môžete odosielať pozvánky individuálne alebo pozvať skupinu ľudí naraz pomocou nahratia súboru." + text: "Hromadná pozvánka zo súboru" + uploading: "Prebieha nahrávanie..." + success: "Súbor bol úspešne odoslaný. Keď sa nahrávanie dokončí, budete na to upozornený cez správu." + error: "Pri nahrávaní '{{filename}}' sa vyskytla chyba: {{message}}" + password: + title: "Heslo" + too_short: "Vaše heslo je príliš krátke." + common: "Toto heslo je príliš časté." + same_as_username: "Vaše heslo je rovnaké ako používateľské meno." + same_as_email: "Vaše heslo je rovnaké ako e-mail." + ok: "Vaše heslo je v poriadku." + instructions: "Minimálne %{count} znakov." + associated_accounts: "Prihlásenia" + ip_address: + title: "Posledná IP adresa" + registration_ip_address: + title: "IP adresa pri registrácii" + avatar: + title: "Profilový obrázok" + header_title: "profil, správy, záložky a nastavenia" + title: + title: "Názov" + filters: + all: "Všetky" + stream: + posted_by: "Autor príspevku" + sent_by: "Odoslané používateľom" + private_message: "správa" + the_topic: "téma" + loading: "Prebieha načítavanie..." + errors: + prev_page: "pri pokuse o načítanie" + reasons: + network: "Chyba siete" + server: "Chyba na serveri" + forbidden: "Prístup zamietnutý" + unknown: "Chyba" + not_found: "Stránka nenájdená" + desc: + network: "Skontrolujte, prosím, svoje pripojenie." + network_fixed: "Zdá sa, že sme späť." + server: "Kód chyby: {{status}}" + forbidden: "Nemáte oprávnenie na zobrazenie." + not_found: "Hopla, aplikácia sa pokúsila načítať adresu, ktorá neexistuje." + unknown: "Niečo sa pokazilo." + buttons: + back: "Späť" + again: "Skúsiť znova" + fixed: "Načítať stránku" + close: "Zatvoriť" + assets_changed_confirm: "Táto stránka bola práve aktualizovaná. Obnoviť na najnovšiu verziu?" + logout: "Boli ste odhlásený." + refresh: "Obnoviť" + read_only_mode: + enabled: "Je zapnuté mód na čítanie. Môžete prezerať stránku, ale akákoľvek interakcia nemusí fungovať." + login_disabled: "Keď je zapnutý mód iba na čítanie, prihlásenie nie je možné." + too_few_topics_and_posts_notice: "Začnime diskusiu! Je tu %{currentTopics} / %{requiredTopics} tém a %{currentPosts} / %{requiredPosts} príspevkov. Noví návštevníci potrebujú mať témy, ktoré môžu čítať a na ktoré budú reagovať." + too_few_topics_notice: "Začnime diskusiu! Je tu %{currentTopics} / %{requiredTopics} tém. Noví návštevníci potrebujú mať témy, ktoré môžu čítať a na ktoré budú reagovať." + too_few_posts_notice: "Začnime diskusiu! Je tu %{currentPosts} / %{requiredPosts} príspevkov. Noví návštevníci potrebujú mať témy, ktoré môžu čítať a na ktoré budú reagovať." + learn_more: "zistiť viac..." + year: 'rok' + year_desc: 'témy vytvorené za posledných 365 dní' + month: 'mesiac' + month_desc: 'témy vytvorené za posledných 30 dní' + week: 'týždeň' + week_desc: 'témy vytvorené za posledných 7 dní' + day: 'deň' + first_post: Prvý príspevok + mute: Ignorovať + unmute: Prestať ignorovať + last_post: Posledný príspevok + last_reply_lowercase: posledná odpoveď + replies_lowercase: + one: odpoveď + few: odpovede + other: odpovedí + signup_cta: + sign_up: "Registrovať sa" + hide_session: "Pripomenúť zajtra" + hide_forever: "nie, ďakujem" + hidden_for_session: "Fajn, opýtam sa vás to zajtra. Stále môžete na vytvorenie účtu použiť aj možnosť 'Prihlásenie'." + intro: "Zdravím! :heart_eyes: Vyzerá, že sa vám diskusia páči, ale stále nie ste prihlásený na svojom účte." + value_prop: "Keď si vytvoríte účet, zapamätáme si čo ste čítali, takže sa môžete vrátiť presne tam, kde ste prestali. Okrem toho dostanete upozornenie tu, aj na váš e-mail, vždy keď pribudnú nové príspevky. A môžete označiť príspevky ktoré sa vám páčia. :heartbeat:" + summary: + enabled_description: "Pozeráte sa na zhrnutie tejto témy: najzaujímavejšie príspevky podľa výberu komunity." + description: "Je tu {{count}} odpovedí." + description_time: "Je tu {{count}} odpovedí s priemerným časom čítania {{readingTime}} minút." + enable: 'Zhrnutie tejto témy' + disable: 'Zobraziť všetky príspevky' + deleted_filter: + enabled_description: "Táto téma obsahuje zmazané príspevky, ktoré boli skryté." + disabled_description: "Zmazané príspevky sa v téme zobrazujú." + enable: "Skryť zmazané príspevky" + disable: "Zobraziť zmazané príspevky" + private_message_info: + title: "Správa" + invite: "Pozvať ostatných..." + remove_allowed_user: "Skutočne chcete odstrániť {{name}} z tejto správy?" + email: 'Email' + username: 'Používateľské meno' + last_seen: 'Videné' + created: 'Vytvorené' + created_lowercase: 'vytvorené' + trust_level: 'Stupeň dôvery' + search_hint: 'používateľské meno, email alebo IP adresa' + create_account: + title: "Vytvoriť nový účet" + failed: "Niečo sa pokazilo, možno je tento e-mail už registrovaný, vyskúšajte odkaz pre zabudnuté heslo" + forgot_password: + title: "Obnovenie hesla" + action: "Zabudol som svoje heslo" + invite: "Napíšte vaše používateľské meno alebo e-mailovú adresu a pošleme vám e-mail pre obnovu hesla." + reset: "Obnoviť heslo" + complete_username: "Ak je účet priradený k používateľskému menu %{username}, čoskoro dostanete e-mail s pokynmi, ako si obnoviť svoje heslo." + complete_email: "Ak je účet priradený k %{email}, čoskoro dostanete e-mail s pokynmi, ako si obnoviť svoje heslo." + complete_username_found: "Našli sme účet priradený k používateľskému menu %{username}, čoskoro dostanete e-mail s pokynmi, ako si obnoviť svoje heslo." + complete_email_found: "Našli sme účet priradený k %{email}, čoskoro dostanete e-mail s pokynmi, ako si obnoviť svoje heslo." + complete_username_not_found: "Žiadny účet nemá priradené používateľské meno %{username}" + complete_email_not_found: "Žiadny účet nie je s e-mailom %{email}" + login: + title: "Prihlásenie" + username: "Používateľ" + password: "Heslo" + email_placeholder: "e-mail alebo používateľské meno" + caps_lock_warning: "Caps Lock je zapnutý" + error: "Neznáma chyba" + rate_limit: "Pred opätovným prihlásením chvíľku počkajte." + blank_username_or_password: "Zadajte prosím svoj e-mail alebo používateľské meno a heslo." + reset_password: 'Obnoviť heslo' + logging_in: "Prebieha prihlásenie..." + or: "Alebo" + authenticating: "Prebieha overovanie..." + awaiting_confirmation: "Váš účet čaká na aktiváciu. Ak chcete zaslať aktivačný e-mail znova, použite odkaz pre zabudnuté heslo." + awaiting_approval: "Váš účet zatiaľ nebol schválený členom tímu. Keď bude schválený, dostanete e-mail." + requires_invite: "Prepáčte, ale prístup k tomuto fóru majú iba pozvaní používatelia." + not_activated: "Systém vás nemôže prihlásiť. Na emailovú adresu {{sentTo}} sme vám poslali aktivačný email. Prosím, postupujte podľa inštrukcií na aktiváciu účtu, ktoré sú uvedené v tomto emaile." + not_allowed_from_ip_address: "Nie je možné prihlásenie z tejto IP adresy." + admin_not_allowed_from_ip_address: "Nie je možné prihlásenie ako admin z tejto IP adresy." + resend_activation_email: "Kliknite sem pre opätovné odoslanie aktivačného emailu." + sent_activation_email_again: "Odoslali sme vám ďalší aktivačný email na {{currentEmail}}. Môže trvať niekoľko minút kým príde; pre istotu si skontrolujte spamový priečinok." + to_continue: "Prosím, prihláste sa" + preferences: "Na zmenu používateľských nastavení musíte byť prihlásený." + forgot: "Nepamätám si detaily môjho účtu" + google: + title: "pomocou Google" + message: "Prihlásenie pomocou Google účtu (prosím uistite sa, že vyskakovacie okná sú povolené)" + google_oauth2: + title: "pomocou Google" + message: "Prihlásenie pomocou Google účtu (prosím uistite sa, že vyskakovacie okná sú povolené)" + twitter: + title: "pomocou Twitter účtu" + message: "Prihlásenie pomocou Twitter účtu (prosím uistite sa, že vyskakovacie okná sú povolené)" + facebook: + title: "pomocou stránky Facebook" + message: "Prihlásenie pomocou Facebook účtu (prosím uistite sa, že vyskakovacie okná sú povolené)" + yahoo: + title: "pomocou Yahoo" + message: "Prihlásenie pomocou Yahoo účtu (prosím uistite sa, že vyskakovacie okná sú povolené)" + github: + title: "pomocou GitHub" + message: "Prihlásenie pomocou GitHub účtu (prosím uistite sa, že vyskakovacie okná sú povolené)" + apple_international: "Apple/Medzinárodné" + google: "Google" + twitter: "Twitter" + emoji_one: "Emoji One" + shortcut_modifier_key: + shift: 'Shift' + ctrl: 'Ctrl' + alt: 'Alt' + composer: + emoji: "Emoji :smile:" + more_emoji: "viac ..." + options: "Možnosti" + whisper: "šepot" + add_warning: "Toto je oficiálne varovanie." + toggle_whisper: "Prepnúť šepot" + posting_not_on_topic: "Na akú tému chcete odpovedať?" + saving_draft_tip: "ukladám..." + saved_draft_tip: "uložené" + saved_local_draft_tip: "uložené lokálne" + similar_topics: "Vaša téma je podobná..." + drafts_offline: "offline koncepty" + group_mentioned: "Použitím tejto {{group}} , upozorníte {{count}} ľudí." + error: + title_missing: "Názov je povinný" + title_too_short: "Názov musí mať minimálne {{min}} znakov" + title_too_long: "Názov nesmie byť dlhší než {{max}} znakov" + post_missing: "Príspevok nesmie byť prázdny" + post_length: "Príspevok musí mať minimálne {{min}} znakov" + try_like: 'Skúsili ste tlačítko?' + category_missing: "Musíte vybrať kategóriu" + save_edit: "Uložiť úpravy" + reply_original: "Odpovedať na pôvodnú tému" + reply_here: "Odpovedať tu" + reply: "Odpovedať" + cancel: "Zrušiť" + create_topic: "Vytvoriť tému" + create_pm: "Správa" + title: "Alebo stlačte Ctrl+Enter" + users_placeholder: "Pridať používateľa" + title_placeholder: "O čom je této diskusia v jednej stručnej vete?" + edit_reason_placeholder: "prečo upravujete?" + show_edit_reason: "(pridajte dôvod úpravy)" + reply_placeholder: "Píšte sem. Formátujte pomocou Markdown, BBCode alebo HTML. Pretiahnite alebo vložte obrázky." + view_new_post: "Zobraziť nový príspevok." + saving: "Ukladanie" + saved: "Uložené!" + saved_draft: "Návrh príspevku rozpracovaný. Vyberte na obnovenie." + uploading: "Upload prebieha..." + show_preview: 'zobraziť náhľad »' + hide_preview: '» skryť náhľad' + quote_post_title: "Citovať celý príspevok" + bold_title: "Výrazne" + bold_text: "výrazný text" + italic_title: "Zdôraznene" + italic_text: "zdôraznený text" + link_title: "Hyperlink" + link_description: "tu zadaj popis odkazu" + link_dialog_title: "Vložte hyperlink" + link_optional_text: "nepovinný názov" + link_placeholder: "http://example.com \"voliteľný text\"" + quote_title: "Úvodzovky" + quote_text: "Úvodzovky" + code_title: "Preformátovaný text" + code_text: "Odsaďte preformátovaný text 4 medzerami" + upload_title: "Upload" + upload_description: "tu zadajte popis uploadu" + olist_title: "Číslované odrážky" + ulist_title: "Odrážky" + list_item: "Položka zoznamu" + heading_title: "Nadpis" + heading_text: "Nadpis" + hr_title: "Horizonálny oddeľovač" + help: "Nápoveda úprav pre Markdown" + toggler: "skryť alebo zobraziť panel úprav" + modal_ok: "OK" + modal_cancel: "Zrušiť" + cant_send_pm: "Ľutujeme, nemôžete poslať správu pre %{username}." + admin_options_title: "Nepovinné zamestnanecké nastavenia pre túto tému" + auto_close: + label: "Čas na automatické uzavretie témy:" + error: "Prosím zadajte platnú hodnotu." + based_on_last_post: "Nezatvárať pokým posledný príspevok v téme nie je takto starý." + all: + examples: 'Zadajte číslo v hodinách (24), absolútny čas (17:30) alebo časovú značku (2013-11-22 14:00).' + limited: + units: "(# hodín)" + examples: 'Zadajte počet hodín (24).' + notifications: + title: "oznámenia o zmienkach pomocou @name, odpovede na vaše príspevky a témy, správy atď." + none: "Notifikácie sa nepodarilo načítať" + more: "zobraziť staršie upozornenia" + total_flagged: "označených príspevkov celkom" + mentioned: "

{{username}} {{description}}

" + group_mentioned: "

{{username}} {{description}}

" + quoted: "

{{username}} {{description}}

" + replied: "

{{username}} {{description}}

" + posted: "

{{username}} {{description}}

" + edited: "

{{username}} {{description}}

" + liked: "

{{username}} {{description}}

" + private_message: "

{{username}} {{description}}

" + invited_to_private_message: "

{{username}} {{description}}

" + invited_to_topic: "

{{username}} {{description}}

" + invitee_accepted: "

{{username}} prijal Vaše pozvanie

" + moved_post: "

{{username}} presunul {{description}}

" + linked: "

{{username}} {{description}}

" + granted_badge: "

Získal '{{description}}'

" + alt: + mentioned: "Spomenutý od" + quoted: "Citovaný od" + replied: "Odpovedané" + posted: "Príspevok od" + edited: "Upravte Váš príspevok do" + liked: "Váš príspevok sa páčil" + private_message: "Súkromná správa od" + invited_to_private_message: "Pozvaný na súkromné správy od" + invited_to_topic: "Pozvaný k téme od" + invitee_accepted: "Pozvánka akceptovaná " + moved_post: "Váš príspevok bol presunutý " + linked: "Odkaz na váš príspevok" + granted_badge: "Priznaný odznak" + popup: + mentioned: '{{username}} vás spomenul v "{{topic}}" - {{site_title}}' + quoted: '{{username}} vás citoval v "{{topic}}" - {{site_title}}' + replied: '{{username}} vám odpovedal v "{{topic}}" - {{site_title}}' + posted: '{{username}} prispel v "{{topic}}" - {{site_title}}' + private_message: '{{username}} vám poslal súkromnú správu v "{{topic}}" - {{site_title}}' + linked: '{{username}} odkázal na váš príspevok z "{{topic}}" - {{site_title}}' + upload_selector: + title: "Pridať obrázok" + title_with_attachments: "Pridať obrázok alebo súbor" + from_my_computer: "Z počítača" + from_the_web: "Z webu" + remote_tip: "odkaz na obrázok" + remote_tip_with_attachments: "odkaz na obrázok alebo súbor {{authorized_extensions}}" + local_tip: "zvoľte obrázok z vášho počítača" + local_tip_with_attachments: "zvoľte obrázok alebo súbor z vášho počítača {{authorized_extensions}}" + hint: "(môžete taktiež potiahnuť a pustiť do editora pre nahratie)" + hint_for_supported_browsers: "môžete taktiež potiahnuť a pustiť alebo priložiť obrázky do editora" + uploading: "Nahrávanie" + select_file: "Zvoľte súbor" + image_link: "adresa na ktorú bude odkazovať váš obrázok" + search: + sort_by: "Zoradiť podľa" + relevance: "Relevancia" + latest_post: "Najnovší príspevok" + most_viewed: "Najviac prezerané" + most_liked: "Najviac sa páčia" + select_all: "Označ všetky" + clear_all: "Odznač všetky" + result_count: + one: "1 výsledok pre \"{{term}}\"" + few: "{{count}} výsledky pre \"{{term}}\"" + other: "{{count}} výsledkov pre \"{{term}}\"" + title: "hľadaj témy, príspevky, užívateľov, alebo kategórie" + no_results: "Žiadne výsledky" + no_more_results: "Nenašlo sa viac výsledkov" + search_help: Pomoc pri vyhľadávaní + searching: "Vyhľadávam....." + post_format: "#{{post_number}} podľa {{username}}" + context: + user: "Vyhľadávanie podľa @{{username}}" + category: "Vyhľadávanie podľa \"{{category}}\" kategórie" + topic: "Hľadaj v tejto téme" + private_messages: "Hľadaj správy" + hamburger_menu: "prejsť na iné témy, alebo kategórie" + new_item: "nový" + go_back: 'späť' + not_logged_in_user: 'užívateľská stránka so súhrnom aktivít a nastavení' + current_user: 'prejsť na Vašu uťívateľskú stránku' + topics: + bulk: + unlist_topics: "Dôverné témy" + reset_read: "Obnoviť prečítané" + delete: "Zmazať témy" + dismiss: "Zahodiť" + dismiss_read: "Zahodiť všetký neprečítané" + dismiss_button: "Zahadzujem....." + dismiss_tooltip: "Zahoď nové príspevky, alebo prestaň sledovať témy" + also_dismiss_topics: "Prestať sledovať tieto témy. Už sa nikdy nebudu ukazovať medzi neprečítanými" + dismiss_new: "Zahodiť. Nová" + toggle: "prepnuť hromadne vybrané témy" + actions: "Hromadné akcie" + change_category: "Zmeň kategóriu" + close_topics: "Uzavrieť tému" + archive_topics: "Archivuj témy" + notification_level: "Zmeň úroveň upozorňovania" + choose_new_category: "Vyberte pre tému novú kategóriu:" + selected: + one: "Označíli ste 1 tému." + few: "Označíli ste {{count}} tém.y" + other: "Označíli ste {{count}} tém." + none: + unread: "Nemáte neprečítanú tému" + new: "Nemáte žiadnu novú tému" + read: "Neprečítali ste ešte žiadnu tému." + posted: "Nanapísali ste ešte žiadnu tému." + latest: "Nie sú žiadne nové témy. To je smutné." + hot: "Nie sú žiadne horúce témy." + bookmarks: "Nemáte žiadne témy v záložke" + category: "V kategórii {{category}} nie je žiadna téma" + top: "Nie sú žiadne populárne témy." + search: "Nenašli sa žiadne výsledky" + educate: + new: '

Tu sa zobrazí Vaša nová téma.

V predvolenom nastavení sú témy považované za nové a zobrazia sa s príznakom nová pokiaľ boli vytvorené za posledné 2 dni.

Môžte to zmeniť vo Vašich nastaveniach.

' + unread: '

Tu sa zobrazia Vaše neprečítané témy.

V predvolenom nastavení sú témy považované za nové a zobrazí sa počet neprečítaných1 Ak ste:

  • Vytvorili tému
  • Odpovedali na tému
  • Čítali tému viac ako 4 minúty

Alebo ste nastavili na tému Sledovať alebo Pozorovať prostredníctvom ovládania upozornení na konci každej témy.

Môžte to zmeniť vo Vašich nastaveniach.

' + bottom: + latest: "Nie je už viac najnovšich tém." + hot: "Nie je už viac horúcich tém" + posted: "Žiadne ďalšie témy na čítanie." + read: "Žiadne ďalšie prečítané témy." + new: "Žiadne nové témy." + unread: "Žiadne ďalšie neprečítané témy." + category: "Žiadne ďalšie témy v {{category}}." + top: "Nie je už viac poulárnych tém" + bookmarks: "Žiadne ďalšie témy v záložkách." + search: "Nenašlo sa viac výsledkov." + topic: + unsubscribe: + stop_notifications: "Teraz budete dostávať menej upozornení na {{title}}" + change_notification_state: "Váš súčasný stav upozornení je" + filter_to: "{{post_count}} príspevkov k téme" + create: 'Nová téma' + create_long: 'Vytvoriť novú tému' + private_message: 'Vytvoríť správu' + list: 'Témy' + new: 'nová téma' + unread: 'neprečítané' + new_topics: + one: '1 nová téma' + few: '{{count}} nové témy' + other: '{{count}} nových tém' + unread_topics: + one: '1 neprečítaná téma' + few: '{{count}} neprečítané témy' + other: '{{count}} neprečítaných tém' + title: 'Témy' + invalid_access: + title: "Téma je súkromná" + description: "Prepáčte, nemáte prístup k tejto téme!" + login_required: "Musíte sa prihlásiť, aby ste videli túto tému." + server_error: + title: "Tému sa nepodarilo načítať" + description: "Prepáčte, nepodarllo sa nám načítať túto tému, možno je problém s Vaším pripojením. Prosim skúste znova. Ak problém pretrváva, dajte nám vedieť" + not_found: + title: "Téma sa nenašla" + description: "Prepáčte, hľadaná téma nebola nájdená. Nebola odstránená moderátorom?" + total_unread_posts: + one: "máte 1 neprečítaný príspevok k tejto téme" + few: "máte {{count}} neprečítanépríspevky k tejto téme" + other: "máte {{count}} neprečítaných príspevkov k tejto téme" + unread_posts: + one: "máte 1 starší neprečítaný príspevok k tejto téme" + few: "máte {{count}} staršie neprečítané príspevky k tejto téme" + other: "máte {{count}} starších neprečítaných príspevkov k tejto téme" + new_posts: + one: "pribudol 1 nový príspevok odkedy ste čítali túto tému naposledy " + few: "pribudlo {{count}} nové príspevky odkedy ste čítali túto tému naposledy " + other: "pribudlo {{count}} nových príspevkov odkedy ste čítali túto tému naposledy " + likes: + one: "v tejto téme je jedo \"Páči sa\"" + few: "v tejto téme je {{count}} \"Páči sa\"" + other: "v tejto téme je {{count}} \"Páči sa\"" + back_to_list: "Naspäť na zoznam tém" + options: "Možnosti tém" + show_links: "zobrazovať odkazy v tejto téme" + toggle_information: "zmeniť detaily témy" + read_more_in_category: "Chcete si prečítať viac? Prezrite si témy v {{catLink}} alebo v {{latestLink}}." + read_more: "Chcete si prečítať viac? {{catLink}} alebo v {{latestLink}}." + read_more_MF: "Máte { UNREAD, plural, =0 {} one { 1 neprečítanú } other { # neprečítané } } { NEW, plural, =0 {} one { {BOTH, select, true{a} false { } other{}} 1 novú tému} other { {BOTH, select, true{a } false {} other{}} # nových tém} } na prečítanie, prípadne {CATEGORY, select, true {si pozrite iné témy v {catLink}} false {{latestLink}} other {}}" + browse_all_categories: Prezrieť všetky kategórie + view_latest_topics: zobraziť najnošie témy + suggest_create_topic: Čo tak vytvoriť novú tému? + jump_reply_up: prejsť na predchádzajúcu odpoveď + jump_reply_down: prejsť na nasledujúcu odpoveď + deleted: "Téma bola vymazaná" + auto_close_notice: "Táto téma bude automaticky uzavretá o %{timeLeft}." + auto_close_notice_based_on_last_post: "Táto téma bude uzavretá %{duration} po poslednej odpovedi." + auto_close_title: 'Nastavenia automatického zatvárania' + auto_close_save: "Uložiť" + auto_close_remove: "Neuzatvárať túto tému automaticky" + progress: + title: pozícia v téme + go_top: "na začiatok" + go_bottom: "na spodok" + go: "Choď" + jump_bottom: "choď na posledný príspevok" + jump_bottom_with_number: "choď na príspevok číslo %{post_number}" + total: Všetkých príspevkov + current: tento príspevok + position: "%{current} príspevok z %{total}" + notifications: + reasons: + '3_6': 'Budete dostávať upozornenia, pretože sa pozeráte na túto kategóriu.' + '3_5': 'Budete automaticky dostávať upozornenie pretože ste začali pozorovať túto tému.' + '3_2': 'Budete dostávať upozornenia, pretože sa pozeráte na túto tému.' + '3_1': 'Budete dostávať upozornenia, pretože ste vytvorili túto tému.' + '3': 'Budete dostávať upozornenia, pretože sa pozeráte na túto tému.' + '2_8': 'Budete dostávať upozornenia, pretože sledujete túto kategóriu.' + '2_4': 'Budete dostávať upozornenia, pretože ste zaslali odpoveď na túto tému.' + '2_2': 'Budete dostávať upozornenia, pretože sledujete túto tému.' + '2': 'Budete dostávať upozornenia, pretože ste čítali túto tému.' + '1_2': 'Budete upozornený ak niekto spomenie Vaše @meno alebo Vám odpovie.' + '1': 'Budete upozornený ak niekto spomenie Vaše @meno alebo Vám odpovie.' + '0_7': 'Ignorujete všetky upozornenia v tejto kategórii.' + '0_2': 'Ignorujete všetky upozornenia k tejto téme.' + '0': 'Ignorujete všetky upozornenia k tejto téme.' + watching_pm: + title: "Pozerať" + description: "Budete upozornený na každú novu dopoveť na túto správu, a zobrazí sa počet nových odpovedí" + watching: + title: "Pozerať" + description: "Budete upozornený na každú novu dopoveť na túto tému, a zobrazí sa počet nových odpovedí" + tracking_pm: + title: "Sledovať" + description: "Zobrazí počet nových odpovedí na túto správu. Budete upozornený ak niekto spomenie Vaše @meno alebo Vám odpovie." + tracking: + title: "Sledovať" + description: "Zobrazí počet nových odpovedí na túto tému. Budete upozornený ak niekto spomenie Vaše @meno alebo Vám odpovie." + regular: + title: "Bežný" + description: "Budete upozornený ak niekto spomenie Vaše @meno alebo Vám odpovie." + regular_pm: + title: "Bežný" + description: "Budete upozornený ak niekto spomenie Vaše @meno alebo Vám odpovie." + muted_pm: + title: "Stíšené" + description: "Nikdy nebudete upozornení na nič ohľadom tejto správy" + muted: + title: "Stíšené" + description: "Nikdy nebudete upozornení na nič ohľadom tejto témy, a nebude sa zobrazovať medzi najnovšími." + actions: + recover: "Obnoviť zmazanú tému" + delete: "Zmazať tému" + open: "Otvoriť tému" + close: "Uzavrieť tému" + multi_select: "Označ príspevky...." + auto_close: "Automaticky zatvor...." + pin: "Pripni tému...." + unpin: "Odopni tému...." + unarchive: "Zruš archiváciu témy" + archive: "Archívuj tému" + invisible: "Skyť" + visible: "Zobraziť" + reset_read: "Zrušiť načítané údaje" + feature: + pin: "Pripni tému" + unpin: "Odopni tému" + pin_globally: "Pripni tému globálne" + make_banner: "Banerová téma" + remove_banner: "Odstrániť banerovú tému" + reply: + 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" + share: + title: 'Zdielaj' + help: 'zdieľaj odkaz na túto tému' + flag_topic: + title: 'Označ' + help: 'súkromne označiť túto tému do pozornosti, alebo na ňu poslať súkromne upozornenie' + success_message: 'Úspešne ste označili tému.' + feature_topic: + title: "Vyzdvihni túto tému" + pin: "Zobrazuj túto tému na vrchu {{categoryLink}} kategórie do" + confirm_pin: "Máte už {{count}} pripnutých tém. Príliš veľa pripnutých tém môže byť na príťaž pre nových a anonymných užívateľov. Ste si istý že chcete pripnúť ďalšiu tému v tejto kategórii?" + unpin: "Zruš túto tému z vrcholu kategórie {{categoryLink}} . " + unpin_until: "Zruš túto tému z vrcholu kategórie {{categoryLink}} , alebo počkaj do %{until}." + pin_note: "Užívatelia si môžu sami odopnúť tému " + pin_validation: "Dátum je vyžadovaný k pripnutiu tejto témy." + not_pinned: "V {{categoryLink}} nie sú pripnuté žiadne témy." + already_pinned: + one: "Téma pripnutá k {{categoryLink}}: 1" + few: "Témy pripnuté ku {{categoryLink}}: {{count}}" + other: "Tém pripnutých k {{categoryLink}}: {{count}}" + pin_globally: "Zobrazuj túto tému na vrchu všetkých zoznamov tém do" + confirm_pin_globally: "Máte už {{count}} globálne pripnutých tém. Príliš veľa pripnutých tém môže byť na príťaž pre nových a anonymných užívateľov. Ste si istý že chcete pripnúť ďalšiu globálnu tému?" + unpin_globally: "Zruš túto tému z vrcholu všetkých zoznamov tém. " + unpin_globally_until: "Zruš túto tému z vrcholu všetkých zoznamov tém, alebo počkaj do %{until}." + global_pin_note: "Užívatelia si môžu sami odopnúť tému." + not_pinned_globally: "Nie sú pripnuté žiadne globálne témy." + already_pinned_globally: + one: "Globálne pripnutá téma : 1" + few: "Globálne pripnuté témy : {{count}}" + other: "Globálne pripnutých tém : {{count}}" + make_banner: "Spraviť z tejto témy baner, ktorý sa zobrazí navrchu každej stránky." + remove_banner: "Odstrániť baner, ktorý sa zobrazuje navrchu každej stránky." + banner_note: "Užívatelia môžu banner kedykoľvek zrušiť. Bannerom môže byť v jednom momente len jedna téma." + no_banner_exists: "Neexistuje žiadna banerová téma." + banner_exists: "Banerová téma je aktuálne nastavená." + inviting: "Pozývam..." + automatically_add_to_groups_optional: "Táto pozvánka obsahuje taktiež prístup do týchto skupín: ( nepovinné, iba správca) " + automatically_add_to_groups_required: "Táto pozvánka obsahuje taktiež prístup do týchto skupín: ( Povinné, iba správca) " + invite_private: + title: 'Pozvať do konverzácie' + email_or_username: "Email, alebo užívateľské meno pozvaného" + email_or_username_placeholder: "emailova adresa alebo uťívateľské meno" + action: "Pozvi" + success: "Pozvali sme tohoto uťívateľa aby sa podieľal na tejto správe" + error: "Prepáčte, pri pozývaní tohto užívateľa nastala chyba." + group_name: "názov skupiny" + invite_reply: + title: 'Pozvi' + username_placeholder: "používateľské meno" + action: 'Pošli pozvánku' + help: 'pozvite ostatných k tejto téme prostredníctvom emailu, alebo upozornení' + to_forum: "Pošleme krátký email dovoľujúci Vášmu priateľovi okamžité pripojenie kliknutím na odkaz bez potreby prihlasovania" + sso_enabled: "Zadajte uťívateľské meno osoby, ktorú by ste radi pozvali k tejto téme" + to_topic_blank: "Zadajte uťívateľské meno alebo email osoby, ktorú by ste radi pozvali k tejto téme" + to_topic_email: "Zadali ste emailovú adresu. Pošleme pozvánku ktorá umožní Vášmu priateľovi okamžitú odpoveď k tejto téme." + to_topic_username: "Zadali ste užívateľské meno. Pošleme mu pozvánku s odkazom na túto tému." + to_username: "Zadajte užívateľské meno osoby, ktorú chcete pozvať. Pošleme mu pozvánku s odkazom na túto tému." + email_placeholder: 'name@example.com' + success_email: "Poslali sme email s pozvánkou na {{emailOrUsername}}. Upozorníme vas keď bude pozvánka použítá. Svoje pozvánky môžte sledovať v tabuľke pozvánok vo svojom užívateľskom profile." + success_username: "Pozvali sme tohoto uťívateľa aby sa podieľal na tejto téme." + error: "Prepáčte, Nepodarilo sa nám pozvať túto osobu. Nebola už náhodou pozvaná ? (Počet opakovaných pozvánok je obmedzený)" + login_reply: 'Príhláste sa ak chcete odpovedať' + filters: + n_posts: + one: "1 príspevok" + few: "{{count}} príspevky" + other: "{{count}} príspevkov" + cancel: "Zruš filter" + split_topic: + title: "Presuň na novú tému" + action: "presuň na novú tému" + topic_name: "Názov novej témy" + error: "Nastala chyba pri presune príspevku na novú tému." + instructions: + one: "Vytvárate novú tému do ktorej bude vložený príspevok, ktorý ste označili. " + few: "Vytvárate novú tému do ktorej bude vložených {{count}} príspevkov, ktoré ste označili. " + other: "Vytvárate novú tému do ktorej budú vložené {{count}} príspevky, ktoré ste označili. " + merge_topic: + title: "Presuň do existujúcej témy." + action: "presuň do existujúcej témy" + error: "Nastala chyba pri presune príspevku do tejto témy." + instructions: + one: "Prosím vyberte tému do ktorej chcete presunúť tento príspevok." + few: "Prosím vyberte tému do ktorej chcete presunúť tieto {{count}} príspevky." + other: "Prosím vyberte tému do ktorej chcete presunúť týchto {{count}} príspevkov." + change_owner: + title: "Zmeň vlástníka príspevkov" + action: "zmeň vlastníka" + error: "Nastala chyba pri zmene vlastníka príspevkov." + label: "Príspevky nového vlastníka" + placeholder: "užívateľske meno nového vlastnika" + instructions: + one: "Prosím vyberte nového vlastníka príspevku vytvoreného {{old_user}}." + few: "Prosím vyberte nového vlastníka {{count}} príspevkov vytvorených {{old_user}}." + other: "Prosím vyberte nového vlastníka {{count}} príspevkov vytvorených {{old_user}}." + instructions_warn: "Poznámka: Žiadne upozornenie o tomto príspevku nebude spätne zaslané novým užívateľom
Upozornenie: Momentálne nie sú prenášané žiadne dáta vťahujúce sa k príspevku na nových užívateľov. Používajte opatrne." + change_timestamp: + title: "Nastavte časovú značku" + action: "nastavte časovú značku" + invalid_timestamp: "Časová značka nemôže byť v budúcnosti. " + error: "Nastala chyba pri zmene časovej značky témy." + instructions: "Prosím vyberte novú časovú značku témy. Príspevky k téme budu aktualizované so zachovaním časoveho rozdielu." + multi_select: + select: 'označ' + selected: 'označených ({{count}})' + select_replies: 'označ +odpovede' + delete: zmaž označené + cancel: zrušiť výber + select_all: označ všetko + deselect_all: odznač všetko + description: + one: Označili ste 1 príspevok + few: Označili ste {{count}} príspevky + other: Označili ste {{count}} príspevkov + post: + reply: " {{replyAvatar}} {{usernameLink}}" + reply_topic: " {{link}}" + quote_reply: "citovať odpoveď" + edit: "Upravujete {{link}} {{replyAvatar}} {{username}}" + edit_reason: "Dôvod:" + post_number: "príspevok {{number}}" + last_edited_on: "príspevok naposledy upravený" + reply_as_new_topic: "Odpoveď ako súvisiaca téma" + continue_discussion: "Pokračovanie diskusie z {{postLink}}:" + follow_quote: "prejsť na citovaný príspevok" + show_full: "Zobraziť celý príspevok" + show_hidden: 'Zobraziť skrytý obsah.' + deleted_by_author: + one: "(príspevky stiahnuté autorom budú automaticky zmazané za jednu hodinu pokiaľ nie sú označené)" + few: "(príspevky stiahnuté autorom budú automaticky zmazané za %{count} hodiny pokiaľ nie sú označené)" + other: "(príspevky stiahnuté autorom budú automaticky zmazané za %{count} hodín pokiaľ nie sú označené)" + expand_collapse: "rozbaliť/zbaliť" + gap: + one: "zobraziť skrytú odpoveď" + few: "zobraziť {{count}} skryté odpovede" + other: "zobraziť {{count}} skrytých odpovedí" + more_links: "ešte {{count}} " + unread: "Príspevok je neprečítaný." + has_replies: + one: "{{count}} Odpoveď" + few: "{{count}} Odpovede" + other: "{{count}} Odpovedí" + has_likes: + one: "{{count}} \"Páči sa\"" + few: "{{count}} \"Páči sa\"" + other: "{{count}} \"Páči sa\"" + has_likes_title: + one: "Tento príspevok sa páčil jedej osobe" + few: "Tento príspevok sa páčil {{count}} ľuďom" + other: "Tento príspevok sa páčil {{count}} ľuďom" + has_likes_title_only_you: "tento príspevok sa Vám páči" + has_likes_title_you: + one: "Tento príspevok sa páčil Vám a jednej ďalšej osobe" + few: "Tento príspevok sa páčil Vám a ďalším {{count}} ľuďom" + other: "Tento príspevok sa páčil Vám a ďalším {{count}} ľuďom" + errors: + create: "Ľutujeme, pri vytváraní príspevku nastala chyba. Prosím, skúste znovu." + edit: "Ľutujeme, pri úprave príspevku nastala chyba. Prosím, skúste znovu." + upload: "Ľutujeme, pri nahrávaní súboru nastala chyba. Prosím, skúste znovu." + attachment_too_large: "Ľutujeme, súbor, ktorý sa pokúšate nahrať, je príliš veľký (maximálna veľkosť je {{max_size_kb}}kb)." + file_too_large: "Ľutujeme, súbor, ktorý sa pokúšate nahrať je príliš veľký (maximálna veľkosť je {{max_size_kb}}kb)" + too_many_uploads: "Ľutujeme, ale naraz je možné nahrať len jeden súbor." + too_many_dragged_and_dropped_files: "Prepáčte, naraz môžte presunúť maximálne 10 súborov." + upload_not_authorized: "Ľutujeme, súbor, ktorý sa pokúšate nahrať nemá povolenú príponu (povolené prípony sú: {{authorized_extensions}})." + image_upload_not_allowed_for_new_user: "Ľutujeme, noví použivatelia nemôžu nahrávať obrázky." + attachment_upload_not_allowed_for_new_user: "Ľutujeme, noví používatelia nemôžu nahrávať prílohy." + attachment_download_requires_login: "Ľutujeme, pre stiahnutie príloh musíte byť prihlásený." + abandon: + confirm: "Ste si istý, že chcete zahodiť tento príspevok?" + no_value: "Nie, ponechať." + yes_value: "Áno, zahodiť." + via_email: "tento príspevok prišiel emailom" + whisper: "tento príspevok je súkromným šepotom pre moderátorov" + wiki: + about: "toto je wiki príspevok; základní používatelia ho môžu upravovať" + archetypes: + save: 'Uložiť možnosti' + controls: + reply: "vytvorte odpoveď na tento príspevok" + like: "páči sa mi tento príspevok" + has_liked: "tento príspevok sa Vám páči" + undo_like: "zruš \"Páči sa\"" + edit: "Editovať tento príspevok." + edit_anonymous: "Ľutujeme, ale pre úpravu príspevku je potrebné sa prihlásiť." + flag: "súkromne označiť tento príspevok do pozornosti, alebo naň poslať súkromne upozornenie" + delete: "odstrániť tento príspevok" + undelete: "vrátiť späť odstránenie príspevku" + share: "zdieľať odkaz na tento príspevok" + more: "Viac" + delete_replies: + confirm: + one: "Chcete tiež odstrániť {{count}} priamu reakciu na tento príspevok?" + few: "Chcete tiež odstrániť {{count}} priame reakcie na tento príspevok?" + other: "Chcete tiež odstrániť {{count}} priamych reakcií na tento príspevok?" + yes_value: "Áno, odstrániť aj reakcie." + no_value: "Nie, len tento príspevok." + admin: "akcie administrátora príspevku" + wiki: "Spraviť Wiki" + unwiki: "Odstrániť Wiki" + convert_to_moderator: "Pridať farbu personálu" + revert_to_regular: "Odobrať farbu personálu" + rebake: "Pregenerovať HTML" + unhide: "Odokryť" + change_owner: "Zmeniť vlastníctvo" + actions: + flag: 'Označ' + defer_flags: + one: "Zrušiť označenie" + few: "Zrušiť označenia" + other: "Zrušiť označenia" + it_too: + off_topic: "Tiež označ" + spam: "Tiež označ" + inappropriate: "Tiež označ" + custom_flag: "Tiež označ" + bookmark: "Tiež vytvoriť záložku" + like: "Tiež sa mi páči" + vote: "Tiež hlasujem za" + undo: + off_topic: "Zruš označenie" + spam: "Zruš označenie" + inappropriate: "Zruš označenie" + bookmark: "Vrátiť záložku späť" + like: "Zruš \"Páči sa\"" + vote: "Zruš hlasovanie" + people: + off_topic: "{{icons}} to označíl ako mimo tému" + spam: "{{icons}} to označíl ako spam" + spam_with_url: "{{icons}} to označíl ako spam" + inappropriate: "{{icons}} to označíl ako nevhodné" + notify_moderators: "{{icons}} upozornil moderátorov" + notify_moderators_with_url: "{{icons}} upozornil moderátorov" + notify_user: "{{icons}} poslal správu" + notify_user_with_url: "{{icons}} poslal správu " + bookmark: "{{icons}} si na to vytvoril záložku" + like: "Páčilo sa to {{icons}}" + vote: "{{icons}} hlasoval za" + by_you: + off_topic: "Označíli ste to ako mimo tému" + spam: "Označíli ste to ako spam" + inappropriate: "Označíli ste to ako nevhodné" + notify_moderators: "Označíli ste to pre moderátora" + notify_user: "Poslali ste správu užívateľovi " + bookmark: "Vytvorili ste si záložku na tento príspevok" + like: "Páči sa Vám to" + vote: "Hlasoval ste za tento príspevok" + by_you_and_others: + off_topic: + one: "Vy a 1 ďalšia osoba to označílo ako mimo tému" + few: "Vy a ďalšie {{count}} osoby to označíli ako mimo tému" + other: "Vy a ďalších {{count}} osôb to označílo ako mimo tému" + spam: + one: "Vy a 1 ďalšia osoba to označíla ako spam" + few: "Vy a ďalšie {{count}} osoby to označíli ako spam" + other: "Vy a ďalších {{count}} osôb to označílo ako spam" + inappropriate: + one: "Vy a jedna ďalšia osoba to označila ako nevhodné" + few: "Vy a ďalšie {{count}} osoby to označili ako nevhodné" + other: "Vy a ďalších {{count}} osôb to označilo ako nevhodné" + notify_moderators: + one: "Vy a jedna ďalšia osoba to označila na moderovanie" + few: "Vy a ďalšie {{count}} osoby to označili na moderovanie" + other: "Vy a ďalších {{count}} osôb to označilo na moderovanie" + notify_user: + one: "Vy a jedna ďalšia osoba poslala správu tomuto užívateľovi" + few: "Vy a ďalšie {{count}} osoby poslali správu tomuto užívateľovi" + other: "Vy a ďalších {{count}} osôb poslalo správu tomuto užívateľovi" + bookmark: + one: "Vy a jedna ďalšia osoba si vytvorilo záložku na tento príspevok" + few: "Vy a ďalšie {{count}} osoby si vytvorili záložku na tento príspevok" + other: "Vy a ďalších {{count}} osôb si vytvorilo záložku na tento príspevok" + like: + one: "Páči sa to Vám a jendej ďalšej osobe" + few: "Páči sa to Vám a ďalším {{count}} osobám" + other: "Páči sa to Vám a ďalším {{count}} osobám" + vote: + one: "Vy a jenda ďalšia osoba hlasovala za tento príspevok" + few: "Vy a ďalšie {{count}} osoby hlasovalo za tento príspevok" + other: "Vy a ďalších {{count}} osôb hlasovalo za tento príspevok" + by_others: + off_topic: + one: "1 osoba to označíla ako mimo tému" + few: "{{count}} osoby to označíli ako mimo tému" + other: "{{count}} osôb to označílo ako mimo tému" + spam: + one: "1 osoba to označíla ako spam" + few: "{{count}} osoby to označíli ako spam" + other: "{{count}} osôb to označílo ako spam" + inappropriate: + one: "1 osoba to označila ako nevhodné" + few: "{{count}} osoby to označili ako nevhodné" + other: "{{count}} osôb to označilo ako nevhodné" + notify_moderators: + one: "1 osoba to označila na moderovanie" + few: "{{count}} osoby to označili na moderovanie" + other: "{{count}} osôb to označilo na moderovanie" + notify_user: + one: "1 osoba poslala správu tomuto užívateľovi" + few: "{{count}} osoby poslali správu tomuto užívateľovi" + other: "{{count}} osôb poslalo správu tomuto užívateľovi" + bookmark: + one: "1 osoba si vytvorila záložku na tento príspevok" + few: "{{count}} osoby si vytvorili záložku na tento príspevok" + other: "{{count}} osôb si vytvorilo záložku na tento príspevok" + like: + one: " {{count}} osobe sa to páčilo" + few: " {{count}} osobám sa to páčilo" + other: " {{count}} osobám sa to páčilo" + vote: + one: "1 osoba hlasovala za tento príspevok" + few: "{{count}} osoby hlasovali za tento príspevok" + other: "{{count}} osôb hlasovalo za tento príspevok" + delete: + confirm: + one: "Ste si istý že chcete zmazať tento príspevok?" + few: "Ste si istý že chcete zmazať všetky tieto príspevky?" + other: "Ste si istý že chcete zmazať všetky tieto príspevky?" + revisions: + controls: + first: "Prvá revízia" + previous: "Predchádzajúca revízia" + next: "Ďalšia revízia" + last: "Posledná revízia" + hide: "Skriť revíziu" + show: "Ukáza revíziu" + comparing_previous_to_current_out_of_total: "{{previous}} {{current}} / {{total}}" + displays: + inline: + title: "Zobraz výstup vrátane pridaného a zmazaného v riadku" + button: ' HTML' + side_by_side: + title: "Zobraziť rozdiely v generovanom výstupe vedľa seba" + button: ' HTML' + side_by_side_markdown: + title: "Zobraziť rozdiely v pôvodnom zdroji vedľa seba" + button: ' Neupravený' + category: + can: 'môže … ' + none: '(Bez kategórie)' + all: 'Všetky kategórie' + choose: 'Vyber kategóriu…' + edit: 'uprav' + edit_long: "Upraviť" + view: 'Prezerať témy v kategórii' + general: 'Všeobecné' + settings: 'Nastavenia' + topic_template: "Formulár témy" + delete: 'Odstrániť kategóriu' + create: 'Nová kategória' + create_long: 'Vytvoriť novú kategóriu' + save: 'Uložiť kategóriu' + slug: 'URL kategórie' + slug_placeholder: '(Voliteľné) pomlčkou-prerušované-slová pre url' + creation_error: Nastala chyba počas vytvárania kategórie. + save_error: Nastala chyba počas ukladania kategórie + name: "Názov kategórie" + description: "Popis" + topic: "kategória témy" + logo: "Logo kategórie" + background_image: "Pozadie kategórie" + badge_colors: "Farby odznakov" + background_color: "Farba pozadia" + foreground_color: "Farba popredia" + name_placeholder: "Maximálne jedno dve slová" + color_placeholder: "Ľubovoľná farba stránky" + delete_confirm: "Ste si istý že chcete zmazať túto kategóriu?" + delete_error: "Nastala chyba počas mazania kategórie" + list: "Zoznam kategórií" + no_description: "Prosím, pridajte popis k tejto kategórii." + change_in_category_topic: "Uprav popis" + already_used: 'Táto farba je už použitá inou kategóriou' + security: "Bezpečnosť" + special_warning: "Upozornenie: Toto je preddefinovaná kategória a jej bezpečnostné nastavenia sa nedajú upraviť. Pokiaľ si neželáte použiť túto kategóriu, neupravujte ju, ale zmažte." + images: "Obrázky" + auto_close_label: "Automaticky uzavrieť tému po:" + auto_close_units: "hodinách" + email_in: "Vlastná e-mailová adresa pre príchodziu poštu:" + email_in_allow_strangers: "Prijímať emaily od anonymných užívateľov bez účtu" + email_in_disabled: "Vkladanie nových tém cez email je zablokované v Nastaveniach stránky. Ak chcete povoliť vkladanie nových téme cez email," + email_in_disabled_click: 'povoľte nastavenie "email in"' + contains_messages: "Zmeň túto kategóriu tak, aby obsahovala len správy." + suppress_from_homepage: "Pozastaviť kategóriu z domovskej stránky." + allow_badges_label: "Povoliť získavanie odznakov v tejto kategórii" + edit_permissions: "Upraviť práva" + add_permission: "Pridať práva" + this_year: "tento rok" + position: "pozícia" + default_position: "Predvolená pozícia" + position_disabled: "Kategórie budú zobrazené podľa aktivity. Pre možnosť ovládania poradia kategórií v zozname," + position_disabled_click: 'povoľte možnosť "pevné poradie kategórií"' + parent: "Nadradená kategória" + notifications: + watching: + title: "Pozerať" + description: "Budete automaticky pozerať všetky nové témy v týchto kategóriách. Budete upozornený na všetky nové príspevky vo všetkých témach. Zároveň bude zobrazený počet nových odpovedí." + tracking: + title: "Sledovať" + description: "Budete automaticky sledovať všetky nové témy v týchto kategóriách. Budete upozornený ak niekto uvedie vaše @meno alebo Vám odpovie. Zároveň bude zobrazený počet nových odpovedí." + regular: + title: "Bežný" + description: "Budete upozornený ak niekto spomenie Vaše @meno alebo Vám odpovie." + muted: + title: "Stíšené" + description: "Nikdy nebudete informovaní o udalostiach v nových témach týchto kategórií. Tieto témy sa zároveň nebudú zobrazovať v zozname posledných udalostí." + flagging: + title: 'Ďakujeme, že pomáhate udržiavať slušnosť v našej komunite!' + private_reminder: 'Označenia sú súkromné viditeľné iba pre personál' + action: 'Označ príspevok' + take_action: "Vykonať akciu" + notify_action: 'Správa' + delete_spammer: "Zmazať spammera" + delete_confirm: "Idete vymazať %{posts} príspevky a %{topics} témy tohto užívateľa, zmazať jeho účet, zakázať prihlásenia z jeho IP adresy %{ip_address}, a pridať jeho email %{email} na zoznam trvalo zakázaných. Ste si istý, že tento užívateľ je skutočne spamer?" + yes_delete_spammer: "Áno, zmazať spammera" + ip_address_missing: "(nedostupné)" + hidden_email_address: "(skryté)" + submit_tooltip: "Odoslať súkromné označenie" + take_action_tooltip: "Dosiahnuť okamžite limit označení, namiesto čakania na ďalšie označenia od komunity" + cant: "Ľutujeme, ale tento príspevok sa teraz nedá označiť ." + notify_staff: 'Notifikovať redakciu' + formatted_name: + off_topic: "Je to mimo témy" + inappropriate: "Je to nevhodné" + spam: "Je to spam" + custom_placeholder_notify_user: "Buďte konkrétny, buďte konštruktívny a buďte vždy milý." + custom_placeholder_notify_moderators: "Dajte nám vedieť, z čoho konkrétne máte obavy, a priložte príslušné odkazy a príklady, ak je to možné." + custom_message: + at_least: "zadajte aspoň {{n}} znakov" + more: "zostáva ešte {{n}} ..." + left: "{{n}} zostáva" + flagging_topic: + title: "Ďakujeme, že pomáhate udržiavať slušnosť v našej komunite!" + action: "Označ príspevok" + notify_action: "Správa" + topic_map: + title: "Zhrnutie článku" + participants_title: "Častí prispievatelia" + links_title: "Populárne odkazy" + links_shown: "ukázať všetkých {{totalLinks}} odkazov..." + clicks: + one: "%{count} kilk" + few: "%{count} kliky" + other: "%{count} klikov" + topic_statuses: + warning: + help: "Toto je oficiálne varovanie." + bookmarked: + help: "Vytvorili ste si záložku na túto tému" + locked: + help: "Táto téma je už uzavretá. Nové odpovede už nebudú akceptované" + archived: + help: "Táto téma je archivovaná. Už sa nedá meniť. " + locked_and_archived: + help: "Táto téma je už uzavretá a archivovaná. Nové odpovede ani zmeny už nebudú akceptované " + unpinned: + title: "Odopnuté" + help: "Túto tému ste odopli. Bude zobrazená v bežnom poradí." + pinned_globally: + title: "Globálne pripnuté" + help: "Tento príspevok je globálne uprednostnený. Zobrazí sa na začiatku v: zozname posledných článkov a vo svojej kategórii." + pinned: + title: "Pripnutý" + help: "Túto tému ste pripli. Bude zobrazená na vrchole svojej kategórie" + invisible: + help: "Táto téma je skrytá. Nebude zobrazená v zozname tém a prístup k nej bude možný len prostrednictvom priameho odkazu na ňu" + posts: "Príspevky" + posts_lowercase: "príspevky" + posts_long: "v tejto téme je {{number}} príspevkov" + posts_likes_MF: | + Táto téma obsahuje {count, plural, one {1 odpoveď} other {# odpovedí}} {ratio, select, + low {s vysokým pomerom "Páči sa" na príspevok} + med {s veľmi vysokým pomerom "Páči sa" na príspevok} + high {s extrémne vysokým pomerom "Páči sa" na príspevok} + other {}} + original_post: "Pôvodný príspevok" + views: "Zobrazenia" + views_lowercase: + one: "zobrazenie" + 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: + one: "\"Páči sa\"" + few: "\"Páči sa\"" + other: "\"Páči sa\"" + likes_long: "v tejto téme je {{number}} \"Páči sa\"" + users: "Používatelia" + users_lowercase: + one: "užívateľ" + few: "užívatelia" + other: "užívatelia" + category_title: "Kategória" + history: "História" + changed_by: "od {{author}}" + raw_email: + title: "Neupravený email" + not_available: "Nedostupné!" + categories_list: "Zoznam kategórií" + filters: + with_topics: "%{filter} témy" + with_category: "%{filter} %{category} témy" + latest: + title: "Najnovšie" + title_with_count: + one: "Posledný (1)" + few: "Posledné ({{count}})" + other: "Posledných ({{count}})" + help: "témy s nedávnymi príspevkami" + hot: + title: "Horúca" + help: "výber najhorúcejších tém" + read: + title: "Prečítaná" + help: "prečítané témy, zoradené podľa času ich prečítania" + search: + title: "Hľadať" + help: "hľadaj vo všetkych témach" + categories: + title: "Kategórie" + title_in: "Kategória - {{categoryName}}" + help: "všetky témy zoskupené podľa kategórie" + unread: + title: "Neprečítané" + title_with_count: + one: "Neprečítaná (1)" + few: "Neprečítané ({{count}})" + other: "Neprečítaných ({{count}})" + help: "témy ktorých neprečítané príspevky v súčastnosti pozeráte alebo sledujete " + lower_title_with_count: + one: "1 neprečítaná" + few: "{{count}} neprečítané" + other: "{{count}} neprečítaných" + new: + lower_title_with_count: + one: "1 nová" + few: "{{count}} nové" + other: "{{count}} nových" + lower_title: "nový" + title: "Nový" + title_with_count: + one: "Nová (1)" + few: "Nové ({{count}})" + other: "Nových ({{count}})" + help: "témy vytvorené za posledných pár dní" + posted: + title: "Moje príspevky" + help: "témy s vašimi príspevkami" + bookmarks: + title: "Záložky" + help: "témy, ktoré máte v záložkách" + category: + title: "{{categoryName}}" + title_with_count: + one: "{{categoryName}} ({{count}})" + few: "{{categoryName}} ({{count}})" + other: "{{categoryName}} ({{count}})" + help: "najnovšie témy v kategórii {{categoryName}}" + top: + title: "Vrch" + help: "najaktívnejšie témy za posledný rok, mesiac, týždeň, alebo deň" + all: + title: "Za celú dobu" + yearly: + title: "Ročne" + quarterly: + title: "Štvrťročne" + monthly: + title: "Mesačne" + weekly: + title: "Týždenne" + daily: + title: "Denne" + all_time: "Za celú dobu" + this_year: "Rok" + this_quarter: "Štvrťrok" + this_month: "Mesiac" + this_week: "Týždeň" + today: "Dnes" + other_periods: "pozri hore" + browser_update: 'Ľutujeme, Váš prehliadač je príliš starý na prácu na tejto stránke. Prosím aktualizujte Váš prehliedač.' + permission_types: + full: "Vytvor / Odpovedz / Zobraz" + create_post: "Odpovedz / Zobraz" + readonly: "Zobraz" + admin_js: + type_to_filter: "zadajte, čo chcete filtrovať ..." + admin: + title: 'Administrátor Discourse' + moderator: 'Moderátor' + dashboard: + title: "Ovládací panel" + last_updated: "Dashboard naposledy aktualizovaný:" + version: "Verzia" + up_to_date: "Máte nainštalovanú najnovšiu verziu!" + critical_available: "Je dostupná kritická aktualizácia." + updates_available: "Aktualizácie sú k dispozícii." + please_upgrade: "Prosím aktualizujte!" + no_check_performed: "Neprebehlo zisťovanie aktualizácií. Uistite sa že je spustený sidekiq." + stale_data: "V poslednej dobe neprebehlo zisťovanie aktualizácií. Uistite sa že je spustený sidekiq." + version_check_pending: "Zdá sa že ste nedávno aktualizovali. Fantastické!" + installed_version: "Nainštalované" + latest_version: "Najnovšie" + problems_found: "Boli zistené nejaké problémy s Vašou inštaláciou Discourse." + last_checked: "Naposledy overené" + refresh_problems: "Obnoviť" + no_problems: "Nenašli sa žiadne problémy." + moderators: 'Moderátori:' + admins: 'Administrátori:' + blocked: 'Zablokované:' + suspended: 'Odobraté:' + private_messages_short: "Správy" + private_messages_title: "Správy" + mobile_title: "Mobil" + space_free: "{{size}} voľné" + uploads: "nahraté" + 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" + yesterday: "Včera" + last_7_days: "Posledných 7 dní" + last_30_days: "Posledných 30 dní" + all_time: "Za celú dobu" + 7_days_ago: "Pred 7 dňami" + 30_days_ago: "Pred 30 dňami" + all: "Všetky" + view_table: "tabuľka" + view_chart: "stĺpcový graf" + refresh_report: "Obnoviť report" + start_date: "Od" + end_date: "Do" + commits: + latest_changes: "Najnov3ie zmeny. Prosime aktualizujte čo najčastejšie!" + by: "podľa" + flags: + title: "Označenia" + old: "Staré" + active: "Aktívny" + agree: "Súhlasiť" + agree_title: "Akceptovať toto označenie ako platné a správne" + agree_flag_modal_title: "Súhlasiť a ...." + agree_flag_hide_post: "Súhlasiť (skryť príspevok a poslať súkromnú správu)" + agree_flag_hide_post_title: "Skryť tento príspevok a automaticky poslať súkromnú správu s výzvou na úpravu príspevku." + agree_flag_restore_post: "Súhlasiť (obnoviť príspevok)" + agree_flag_restore_post_title: "Obnoviť tento príspevok" + agree_flag: "Súhlasiť s označením" + agree_flag_title: "Súhlasiť s označením, ale nemeníť príspevok" + defer_flag: "Odložiť" + defer_flag_title: "Zrušíť označenie. Žiadna akcia nie je nateraz potrebná." + delete: "Odstrániť" + delete_title: "Zmazať príspevok na ktorý označenie odkazuje ." + delete_post_defer_flag: "Zmazať príspevok a zrušiť označenie" + delete_post_defer_flag_title: "Zmazať prípspevok; ak ide o prvý príspevok, zmazať aj tému" + delete_post_agree_flag: "Zmazať príspevok a súhlasiť s označením" + delete_post_agree_flag_title: "Zmazať prípspevok; ak ide o prvý príspevok, zmazať aj tému" + delete_flag_modal_title: "Zmazať a..." + delete_spammer: "Zmazať spammera" + delete_spammer_title: "Zmazať užívateľa aj všetky príspevky a témy ktoré vytvoril." + disagree_flag_unhide_post: "Nesúhlasiť (odkryť príspevok)" + disagree_flag_unhide_post_title: "Zrušíť všetky označenia z príspevku a znova odkryť príspevok" + disagree_flag: "Nesúhlasiť" + disagree_flag_title: "Zamietnuť toto označenie ako neplatné, alebo nesprávne" + clear_topic_flags: "Hotovo" + clear_topic_flags_title: "Téma bola preskúmaná a problémy boli vyriešené. Kliknite Hotovo pre zrušenie označení." + more: "(viac odpovedí...)" + dispositions: + agreed: "odsúhlasené" + disagreed: "neodsúhlasené" + deferred: "odložené" + flagged_by: "Označené " + resolved_by: "Vyriešené" + took_action: "Prijal opatrenia" + system: "Systém" + error: "Niečo sa pokazilo" + reply_message: "Odpovedať" + no_results: "Žiadne označenia." + topic_flagged: "Táto téma bola označená. " + visit_topic: "Navšťívte tému pre prijatie opatrení" + was_edited: "Príspevok bol upravený po prvom označení" + previous_flags_count: "Tento príspevok bol už označený {{count}} krát." + summary: + action_type_3: + one: "mimo tému" + few: "mimo tému x{{count}}" + other: "mimo tému x{{count}}" + action_type_4: + one: "nevhodný" + few: "nevhodné x{{count}}" + other: "nevhodných x{{count}}" + action_type_6: + one: "vlastná" + few: "vlastné x{{count}}" + other: "vlastných x{{count}}" + action_type_7: + one: "vlastný" + few: "vlastné x{{count}}" + other: "vlastných x{{count}}" + action_type_8: + one: "spam" + few: "spam x{{count}}" + other: "spam x{{count}}" + groups: + primary: "Hlavná skupina" + no_primary: "(bez hlavnej skupiny)" + title: "Skupiny" + edit: "Upraviť skupiny" + refresh: "Obnoviť" + new: "Nový" + selector_placeholder: "zadať používateľské meno" + name_placeholder: "Názov skupiny, bez medzier, rovnaké pravidlá ako pre uťívateľa" + about: "Tu upravíte Vaše členstvo v skupinách a mená" + group_members: "Členovia skupiny" + delete: "Odstrániť" + delete_confirm: "Zmazať túto skupinu?" + delete_failed: "Nepodarilo sa zmazať skupinu. Pokiaľ je skupina automatická, nemôže byť zrušená." + delete_member_confirm: "Odstrániť '%{username}' zo skupiny '%{group}'?" + delete_owner_confirm: "Odobrať vlastnícke práva %{username}'?" + name: "Meno" + add: "Pridať" + add_members: "Pridať členov" + custom: "Vlastné" + bulk_complete: "Užívatelia boli pridaní do skupiny." + bulk: "Hromadné pridanie do skupiny" + bulk_paste: "Vlož zoznam používateľov alebo emailov, jeden na riadok:" + bulk_select: "(vyberte skupinu)" + automatic: "Automaticky" + automatic_membership_email_domains: "Užívatelia, ktorí sa zaregistrovali s emailovou doménou uvedenou v zozname budú automaticky pridaní do tejto skupiny. " + automatic_membership_retroactive: "Použi pravidlo rovnakej emailovej domény pre pridanie registrovaných užívateľov" + default_title: "Štandardné označenie pre všetkých používateľov v tejto skupine" + primary_group: "Automaticky nastav ako hlavnú skupinu" + group_owners: Vlastníci + add_owners: Pridať vlastníkov + incoming_email: "Vlastná e-mailová adresa pre príchodziu poštu" + incoming_email_placeholder: "zadajte emailovú adresu" + api: + generate_master: "Vygenerovať Master API kľúč" + none: "V súčasnosti neexistujú žiadne aktívne API kľúče." + user: "Používateľ" + title: "API" + key: "API kľúč" + generate: "Generovať" + regenerate: "Obnov" + revoke: "Zrušiť" + confirm_regen: "Ste si istý, že chcete nahradiť tento API kľúč novým?" + confirm_revoke: "Ste si istý, že chcete obnoviť tento kľúč?" + info_html: "Váš API kľúč Vám umožní vytváranie a aktualizovanie tém prostredníctvom volaní JSON." + all_users: "Všetci používatelia" + note_html: "Držte tento kľúč v tajnosti, všetci užívatelia ktorí ho vlastnia môžu vytvárať ľubovoľné príspevky pod ľubovoľným užívateľským menom. " + plugins: + title: "Pluginy" + installed: "Nainštalované pluginy" + name: "Meno" + none_installed: "Nemáte nainštalované žiadne pluginy." + version: "Verzia" + enabled: "Povolené?" + is_enabled: "A" + not_enabled: "N" + change_settings: "Zmeniť nastavenia" + change_settings_short: "Nastavenia" + howto: "Ako nainštalujem pluginy?" + backups: + title: "Zálohy" + menu: + backups: "Zálohy" + logs: "Logy" + none: "Nie je dostupná žiadna záloha." + read_only: + enable: + title: "Povoliť mód len na čítanie." + label: "Povoliť mód len na čítanie." + confirm: "Ste si istý, že chcete povoliť mód len na čítanie?" + disable: + title: "Zakázať mód len na čítanie" + label: "Zakázať mód len na čítanie" + logs: + none: "Zatiaľ žiadne logy..." + columns: + filename: "Názov súboru" + size: "Veľkosť" + upload: + label: "Upload" + title: "Nahrať zálohu do tejto inštancie" + uploading: "Upload prebieha..." + success: "'{{filename}}' bol úspešne nahratý." + error: "Počas nahrávania '{{filename}}' nastala chyba: {{message}}" + operations: + is_running: "Operácia práve prebieha..." + failed: " Zlyhalo vykonanie {{operation}} . Prosím skontrolujte logy. " + cancel: + label: "Zrušiť" + title: "Zrušiť prebiehajúcu operáciu" + confirm: "Ste si istý, že chcete zrušiť prebiehajúcu operáciu?" + backup: + label: "Záloha" + title: "Vytvoriť zálohu" + confirm: "Prajete si spustiť novú zálohu?" + without_uploads: "Áno (nezahŕňať súbory)" + download: + label: "Stiahnuť" + title: "Stiahnuť zálohu" + destroy: + title: "Odstrániť zálohu" + confirm: "Ste si istý, že chcete odstrániť túto zálohu?" + restore: + is_disabled: "Obnovenie je vypnuté na Nastaveniach stránky." + label: "Obnoviť" + title: "Obnoviť zálohu" + confirm: "Ste si istý, že chcete obnoviť túto zálohu?" + rollback: + label: "Vrátiť späť" + title: "Vrátiť databázu do predchádzajúceho funkčného stavu" + confirm: "Ste si istý, že chcete vrátiť databázu do predchádzajúceho funkčńeho stavu?" + export_csv: + user_archive_confirm: "Ste si istý, že si chcete stiahnut svoje príspevky?" + success: "Export bol spustený, o jeho skončení budete informovaný správou." + failed: "Export zlyhal. Skontrolujte prosím logy." + rate_limit_error: "Príspevky možu byť stiahnuté len raz za deň. Skúste opäť zajtra." + button_text: "Export" + button_title: + user: "Exportovať celý zoznam používateľov v CSV formáte." + staff_action: "Exportovať celý log akcií redakcie v CSV formáte." + screened_email: "Exportovať celý zobrazený zoznam emailov v CSV formáte." + screened_ip: "Exportovať celý zobrazený zoznam IP adries v CSV formáte." + screened_url: "Exportovať celý zobrazený zoznam URL adries v CSV formáte." + export_json: + button_text: "Export" + invite: + button_text: "Poslať pozvánky" + button_title: "Poslať pozvánky" + customize: + title: "Upraviť" + long_title: "Úpravy webu" + css: "CSS" + header: "Hlavička" + top: "Vrch" + footer: "Päta" + embedded_css: "Vnorené CSS" + head_tag: + text: "" + title: "HTML, ktoré bude vložené pred tag" + body_tag: + text: "" + title: "HTML, ktoré bude vložené pred tag" + override_default: "Nevkladať štandardné štýly" + enabled: "Povolené?" + preview: "náhľad" + undo_preview: "zmazať náhľad" + rescue_preview: "predvolený štýl" + explain_preview: "Nastaviť na stránke vlastné štýly" + explain_undo_preview: "Vrátiť sa k akruálnym vlastným štýlom" + explain_rescue_preview: "Nastavit na stránke štandardné štýly" + save: "Uložiť" + new: "Nový" + new_style: "Nový štýl" + import: "Import" + import_title: "Vyberte súbor alebo vložte text" + delete: "Odstrániť" + delete_confirm: "Zmazať túto úpravu?" + about: "Upraviť CSS štýly a HTML hlavičky na stránke. Začnite pridaním úpravy." + color: "Farba" + opacity: "Nepriesvitnosť" + copy: "Kopírovať" + email_templates: + title: "Emailové šablóny" + subject: "Predmet" + multiple_subjects: "Táto emailova šablóna obsahuje viac predmetov" + body: "Telo" + none_selected: "Vyberte šablénu emailu pre začatie úpravy." + revert: "Vrátiť zmeny" + revert_confirm: "Ste si istý, že chcete vrátiť vykonané zmeny späť?" + css_html: + title: "CSS/HTML" + long_title: "Úpravy CSS a HTML" + colors: + title: "Farby" + long_title: "Farebné schémy" + about: "Upravte farby použité na stránke bez použitia CSS. Začnite pridaním schémy." + new_name: "Nová farebná schéma" + copy_name_prefix: "Kópia" + delete_confirm: "Zmazať túto farebnú schému?" + undo: "späť" + undo_title: "Zrušiť zmeny farby a vrátiť sa k predchádzajucej uloženej verzii. " + revert: "vrátiť zmeny" + revert_title: "Nastaviť východziu farebnú schému Discourse. " + primary: + name: 'primárny' + description: 'Väčšina textov, ikony, a okraje.' + secondary: + name: 'sekundárny' + description: 'Hlavná farba pozadia a farba textu niektorých ovládacích prvkov.' + tertiary: + name: 'terciárny' + description: 'Odkazy, nejaké tlačidlá, upozornenia a zvýrazňovacie farby.' + quaternary: + name: "štvrťročne" + description: "Navigačné odkazy." + header_background: + name: "pozadie hlavičky" + description: "Farba pozadia hlavičky stránky." + header_primary: + name: "hlavné záhlavie" + description: "Texty a ikony v záhlaví stránky." + highlight: + name: 'zvýraznenie' + description: 'Farba pozadia zvýrazneného prvku na stránke, napríklad príspevku alebo témy.' + danger: + name: 'nebezpečenstvo' + description: 'Zvýrazňovacia farba pre akcie ako napríklad mazanie príspevkov a tém.' + success: + name: 'úspech' + description: 'Použitá pre úspešne vykonané akcie.' + love: + name: 'obľúbené' + description: "Farba tlačidla \"Páči sa\"" + wiki: + name: 'wiki' + description: "Základná farba pozadia wiki príspevkov." + email: + title: "Email" + settings: "Nastavenia" + all: "Všetky" + sending_test: "Odosielam testovací email..." + error: "CHYBA - %{server_error}" + test_error: "Pri posielaní testovacieho emailu nastala chyba. Prosím preverte Vaše emailové nastavenia, overte si, že váš hostiteľ neblokuje emailové spojenia a skúste znova." + sent: "Odoslané" + skipped: "Preskočené" + sent_at: "Odoslané" + time: "Čas" + user: "Používateľ" + email_type: "Typ emailu" + to_address: "Adresát" + test_email_address: "testovacia emailová adresa" + send_test: "Odoslať testovací email" + sent_test: "odoslané!" + delivery_method: "Spôsob doručenia" + preview_digest: "Súhrn" + preview_digest_desc: "Náhľad obsahu súhrnných emailov zaslaných neaktívnym užívateľom." + refresh: "Obnoviť" + format: "Formát" + html: "html" + text: "text" + last_seen_user: "Posledný videný užívateľ" + reply_key: "Tlačidlo odpovedať" + skipped_reason: "Preskočiť zdôvodnenie" + logs: + none: "Nenašli sa žiadne logy." + filters: + title: "Filter" + user_placeholder: "používateľské meno" + address_placeholder: "meno@príklad.com" + type_placeholder: "súhrn, registácia..." + reply_key_placeholder: "tlačidlo odpovedať" + skipped_reason_placeholder: "dôvod" + logs: + title: "Logy" + action: "Akcia" + created_at: "Vytvorené" + last_match_at: "Posledný zodpovedajúci" + match_count: "Zodpovedá" + ip_address: "IP" + topic_id: "ID témy" + post_id: "ID príspevku" + category_id: "ID kategórie" + delete: 'Odstrániť' + edit: 'Upraviť' + save: 'Uložiť' + screened_actions: + block: "blokovať" + do_nothing: "nerob nič" + staff_actions: + title: "Akcie personálu" + instructions: "Vyberte uťívateľské meno a akcie na filtrovanie zoznamu. Kliknite na profilovú fotku pre navigáciu na užívateľské stránky." + clear_filters: "Ukázať všetko" + staff_user: "Člen redakcie" + target_user: "Cieľový používateľ" + subject: "Predmet" + when: "Kedy" + context: "Kontext" + details: "Detaily" + previous_value: "Predchádzajúci" + new_value: "Nový" + diff: "Rozdiel" + show: "Zobraziť" + modal_title: "Detaily" + no_previous: "Neexistuje predchádzajúca hodnota" + deleted: "Žiadna nová hodnota. Záznam bol vymazaný." + actions: + delete_user: "odstrániť používateľa" + change_trust_level: "zmeniť stupeň dôvery" + change_username: "zmeniť používateľské meno" + change_site_setting: "zmeniť nastavenia webu" + change_site_customization: "zmeniť úpravy webu" + delete_site_customization: "zmazať úpravy webu" + suspend_user: "zruš práva užívateľovi" + unsuspend_user: "obnov práva užívateľovi" + grant_badge: "udeliť odznak" + revoke_badge: "odobrať odznak" + check_email: "skontrolovať email" + delete_topic: "odstrániť tému" + delete_post: "odstrániť príspevok" + impersonate: "privlastniť" + anonymize_user: "anonymizovať používateľa" + roll_up: "zbaliť IP bloky" + change_category_settings: "zmeniť nastavenia kategórie" + delete_category: "odstrániť kategóriu" + create_category: "vytvoriť kategóriu" + screened_emails: + title: "Kontrolované emaily" + description: "Keď niekto skúsi vytvoriť nový účet, nasledujúce emailove adresy budú preverené a registrácia bude zablokovaná, alebo bude vykonaná nejaka iná akcia. " + email: "Emailové adresy" + actions: + allow: "Povoliť" + screened_urls: + title: "Kontrolované URL adresy" + description: "URL adresy v tomto zozname boli použité v príspevkoch užívateľov, ktorí boli identifikovaní ako spameri." + url: "URL" + domain: "Doména" + screened_ips: + title: "Kontrolované IP adresy" + description: 'IP adresy pod dohľadom. Použi "Povoľ" pre povolenie IP adries.' + delete_confirm: "Ste si istý, že chcete zrušiť pravidlo pre %{ip_address}?" + roll_up_confirm: "Ste si istý, že chcete zosumarizovať bežne kontrolované IP do podsietí?" + rolled_up_some_subnets: "Zakázané IP adresy boli úspešne zosumarizované do podsietí: %{subnets}." + rolled_up_no_subnet: "Nebolo čo zbaliť." + actions: + block: "Blokovať" + do_nothing: "Povoliť" + allow_admin: "Povoliť admin" + form: + label: "Nový:" + ip_address: "IP adresy" + add: "Pridať" + filter: "Hľadať" + roll_up: + text: "Zbaliť" + title: "Vytvorí novú podsieť zakázaných záznamov pokiaľ existuje aspoň 'min_ban_entries_for_roll_up' záznamov" + logster: + title: "Chybové Logy" + impersonate: + title: "Privlastniť" + help: "Použite tento nástroj na privlastnenie si užívateľského účtu na účely debugovania. Po skončení sa budete musieť odhlásiť." + not_found: "Tento používateľ sa nenašiel." + invalid: "Ľutujeme, nesmiete si privlatniť tohto užívateľa." + users: + title: 'Používatelia' + create: 'Pridať admin používateľa' + last_emailed: "Posledný odemailovaný" + not_found: "Prepáčte, toto užívateľské meno sa nenachádza v našom systéme." + id_not_found: "Prepáčte, toto užívateľské id sa nenachádza v našom systéme." + active: "Aktívny" + show_emails: "Ukázať Emaily" + nav: + new: "Nový" + active: "Aktívny" + pending: "Čakajúca" + staff: 'Zamestnanci' + suspended: 'Odobrate práva' + blocked: 'Zablokovaný' + suspect: 'Podozrivý' + approved: "Schválený?" + approved_selected: + one: "schváliť užívateľa" + few: "schváliť ({{count}}) užívateľov " + other: "schváliť ({{count}}) užívateľov " + reject_selected: + one: "zamietnuť užívateľa" + few: "zamietnuť ({{count}}) užívateľov " + other: "zamietnuť ({{count}}) užívateľov " + titles: + active: 'Aktívni používatelia' + new: 'Noví používatelia' + pending: 'Užívatelia čakajúci na kontrolu' + newuser: 'Užívatelia na Stupni dôvery 0 (Noví užívatelia)' + basic: 'Užívatelia na Stupni dôvery 1 (Bežný užívateľ)' + member: 'Užívatelia na Stupni dôvery 2 (Člen)' + regular: 'Užívatelia na Stupni dôvery 3 (Stály člen)' + leader: 'Užívatelia na Stupni dôvery 4 (Vodca)' + staff: "Zamestnanci" + admins: 'Admin používatelia' + moderators: 'Moderátori' + blocked: 'Zablokovaní užívatelia' + suspended: 'Užívatelia s odobratými právami' + suspect: 'Podozriví užívatelia' + reject_successful: + one: "Úspešne zamietnutý užívateľ" + few: "Úspešne zamietnutí %{count} užívatelia" + other: "Úspešne zamietnutých %{count} užívateľov" + reject_failures: + one: "Nepodarilo sa zamietnuť 1 užívateľa" + few: "Nepodarilo sa zamietnuť %{count} užívateľov" + other: "Nepodarilo sa zamietnuť %{count} užívateľov" + not_verified: "Neoverený" + check_email: + title: "Odhaliť emailovú adresu tohto používateľa" + text: "Zobraziť" + user: + suspend_failed: "Niečo sa pokazilo pri odoberaní práv tomuto užívateľovi {{error}}" + unsuspend_failed: "Niečo sa pokazilo pri obnovovaní práv tomuto užívateľovi {{error}}" + suspend_duration: "Ako dlho budú užívateľovi odobrate práva?" + suspend_duration_units: "(dni)" + suspend_reason_label: "Prečo mu odoberáte práva? Tento text sa zobrazí každému na stránke profilu užívateľa a bude zobrazený užívateľovi pri pokuse o prihlásenie. Buďte strucný." + suspend_reason: "Dôvod" + suspended_by: "Práva odobraté" + delete_all_posts: "Zmazať všetky príspevky" + delete_all_posts_confirm: "Chystáte sa zmazať %{posts} príspevkov a %{topics} tém. Ste si istý?" + suspend: "Odobrať" + unsuspend: "Obnoviť" + suspended: "Odobrate práva?" + moderator: "Moderátor?" + admin: "Admin?" + blocked: "Blokovaný?" + show_admin_profile: "Admin" + edit_title: "Upraviť názov" + save_title: "Uložiť názov" + refresh_browsers: "Vynútiť refresh browsera." + refresh_browsers_message: "Správa odoslaná všetkým klientom!" + show_public_profile: "Ukázať verejný profil" + impersonate: 'Privlastniť' + ip_lookup: "Vyhľadávanie IP" + log_out: "Odhlásiť sa" + logged_out: "Užívateľ bol odhlásený na všetkých zariadeniach" + revoke_admin: 'Odobrať admin' + grant_admin: 'Udeliť admin' + revoke_moderation: 'Odobrať moderovanie' + grant_moderation: 'Udeliť moderovanie' + unblock: 'Odblokovať' + block: 'Blokovať' + reputation: Reputácia + permissions: Práva + activity: Aktivita + like_count: '"Páči sa" Rozdané / Prijaté' + last_100_days: 'za posledných 100 dní' + private_topics_count: Súkromné témy + posts_read_count: Prečítané príspevky + post_count: Vytvorené príspevky + topics_entered: Zobrazených tém + flags_given_count: Rozdané označenia + flags_received_count: Prijaté označenia + warnings_received_count: Prijaté varovania + flags_given_received_count: 'Rozdané a prijaté označenia' + approve: 'Schváliť' + approved_by: "schválený" + approve_success: "Uťívateľ schválený a bol zaslaný email s aktivačnými inštrukciami" + approve_bulk_success: "Úspech! Všetci vybraní uťívateľia boli schválení a oboznáamení." + time_read: "Doba Čítania" + anonymize: "Anonymizovať používateľa" + anonymize_confirm: "Ste si istý že chcete zmeniť tento účet na anonymný? Zmeni to užívateľské meno, email a zmažú sa všetky informácie z profilu. " + anonymize_yes: "Áno, zmeň tento účet na anonymný" + anonymize_failed: "Nastala chyba pri anonymizovaní účtu." + delete: "Odstrániť používateľa" + delete_forbidden_because_staff: "Správcovia a moderátori nemôžu byť vymazaní." + delete_posts_forbidden_because_staff: "Nedá sa zmazať príspevky správcov a moderátorov." + delete_forbidden: + one: "Užívatelia nemôžu byť vymazaní ak majú príspevky. Najprv zmažte príspevky až potom užívateľa. (Príspevky staršie ako %{count} deň nemožno zmazať)" + few: "Užívatelia nemôžu byť vymazaní ak majú príspevky. Najprv zmažte príspevky až potom užívateľa. (Príspevky staršie ako %{count} dni nemožno zmazať)" + other: "Užívatelia nemôžu byť vymazaní ak majú príspevky. Najprv zmažte príspevky až potom užívateľa. (Príspevky staršie ako %{count} dní nemožno zmazať)" + cant_delete_all_posts: + one: "Nepodarilo sa zmazať všetky príspevky. Niektoré príspevky sú staršie ako %{count} deň. (Nastavenie delete_user_max_post_age )" + few: "Nepodarilo sa zmazať všetky príspevky. Niektoré príspevky sú staršie ako %{count} dni. (Nastavenie delete_user_max_post_age )" + other: "Nepodarilo sa zmazať všetky príspevky. Niektoré príspevky sú staršie ako %{count} dní. (Nastavenie delete_user_max_post_age )" + cant_delete_all_too_many_posts: + one: "Nedá sa zmazať všetky píspevky, pretože užívateľ má viac ako 1 príspevok. (delete_all_posts_max)" + few: "Nedá sa zmazať všetky píspevky, pretože užívateľ má viac ako %{count} príspevky. (delete_all_posts_max)" + other: "Nedá sa zmazať všetky píspevky, pretože užívateľ má viac ako %{count} príspevkov. (delete_all_posts_max)" + delete_confirm: "Ste si ISTÝ, že chcete zmazať tohoto užívateľa? Už sa to nedá obnoviť!" + delete_and_block: "Zazať a zablokovať tento email a IP adresu" + delete_dont_block: "Iba vymazať" + deleted: "Používateľ bol vymazaný." + delete_failed: "Počas vymazávania používateľa nastala chyba. Pred vymazaním používateľa sa uistite, že všetky jeho príspevky sú zmazané." + send_activation_email: "Poslať aktivačný email." + activation_email_sent: "Aktivačný emial bol odoslaný." + send_activation_email_failed: "Počas odosielania ďalšieho aktivačného emailu nastala chyba. %{error}" + activate: "Aktivovať účet" + activate_failed: "Počas aktivácie používateľa nastala chyba." + deactivate_account: "Deaktivovať účet" + deactivate_failed: "Počas deaktivácie používateľa nastala chyba." + unblock_failed: 'Nastala chyba pri odblokovaní užívateľa.' + block_failed: 'Nastala chyba pri zablokovaní užívateľa.' + deactivate_explanation: "Deaktivovaý užívateľ musí znovu overiť svoj email" + suspended_explanation: "Suspendovaní užívatelia sa nemôžu prihlasovať." + block_explanation: "Zablokovaní uťívatelia nemôžu zakladať témy ani pridávať príspevky." + trust_level_change_failed: "Nastala chyba pri zmene úrovne dôveryhodnosti užívateľa." + suspend_modal_title: "Zruš práva užívateľovi" + trust_level_2_users: "Užívatelia na 2 Stupni dôvery" + trust_level_3_requirements: "Požiadavky pre 3 stupeň" + trust_level_locked_tip: "stupeň dôvery je zamknutý, systém užívateľovi stupeň nezvýši ani nezníži " + trust_level_unlocked_tip: "stupeň dôvery je odomknutý, systém môže užívateľovi stupeň zvýšiť alebo znížiť" + lock_trust_level: "Zamknúť stupeň dôvery" + unlock_trust_level: "Odomknúť stupeň dôvery" + tl3_requirements: + title: "Požiadavky pre stupeň dôvery 3" + table_title: "Za posledných 100 dní:" + value_heading: "Hodnota" + requirement_heading: "Požiadavka" + visits: "Návštev" + days: "dní" + topics_replied_to: "Témy na ktoré odpovedal" + topics_viewed: "Zobrazených tém" + topics_viewed_all_time: "Videné témy (za celú dobu)" + posts_read: "Prečítané príspevky" + posts_read_all_time: "Prečítaných príspevkov (za celú dobu)" + flagged_posts: "Označené príspevky" + flagged_by_users: "Užívatelia, ktorí označili" + likes_given: "Rozdaných 'páči sa mi'" + likes_received: "Obdržaných 'páči sa mi'" + likes_received_days: "Obdržaných 'páči sa mi' na jednotlivé dni" + likes_received_users: "Obdržaných 'páči sa mi' na jednotlivých užívateľov" + qualifies: "Spĺňa požiadavky pre stupeň dôvery 3" + does_not_qualify: "Nespĺňa požiadavky pre stupeň dôvery 3" + will_be_promoted: "Bude čoskoro povýšený" + will_be_demoted: "Čoskoro bude degradovaný" + on_grace_period: "V súčastnosti je v povyšovacej skúšobnej dobe, nebude degradovaný." + locked_will_not_be_promoted: "Stupeň dôvery je zamknutý. Nikdy nebude povýšený." + locked_will_not_be_demoted: "Stupeň dôvery je zamknutý. Nikdy nebude degradovaný" + sso: + title: "Jednotné prihlásenie" + external_id: "Externé ID" + external_username: "Používateľské meno" + external_name: "Meno" + external_email: "Email" + external_avatar_url: "URL profilovej fotky" + user_fields: + title: "Užívateľské polia" + help: "Pridaj polia, ktoré môžu užívatelia vyplniť" + create: "Vytvor užívateľske pole" + untitled: "Bez názvu" + name: "Názov poľa" + type: "Typ poľa" + description: "Popis poľa" + save: "Uložiť" + edit: "Upraviť" + delete: "Odstrániť" + cancel: "Zrušiť" + delete_confirm: "Ste si istý, že chcete zmazať toto užívateľské pole?" + options: "Možnosti" + required: + title: "Požadované pri registrácii?" + enabled: "povinné" + disabled: "nepovinné" + editable: + title: "Upravovateľné po registrácii?" + enabled: "upravovateľné " + disabled: "neupravovateľné " + show_on_profile: + title: "Ukázať na verejnom profile?" + enabled: "zobrazené na profile" + disabled: "nezobrazené na profile" + field_types: + text: 'Textové pole' + confirm: 'Potvrdenie' + dropdown: "Zoznam" + site_text: + description: "Môžete prispôsobiť hociktorý text na Vašom fóre. Prosím začnite hľadaním nižšie:" + search: "Hľadajte text, ktorý chcete upraviť" + title: 'Textový obsah' + edit: 'uprav' + revert: "Vrátiť zmeny" + revert_confirm: "Ste si istý, že chcete vrátiť vykonané zmeny späť?" + go_back: "Návrat na vyhľadávanie" + recommended: "Odporúčame prispôsobenie nasledujúceho textu podľa vašich potrieb:" + show_overriden: 'Ukázať iba zmenené' + site_settings: + show_overriden: 'Ukázať iba zmenené' + title: 'Nastavenia' + reset: 'zrušiť' + none: 'žiadne' + no_results: "Žiadne výsledky" + clear_filter: "Vyčistiť" + add_url: "pridaj URL" + add_host: "pridať hostiteľa" + categories: + all_results: 'Všetky' + required: 'Povinné' + basic: 'Základné nastavenia' + users: 'Používatelia' + posting: 'Prispievam' + email: 'Email' + files: 'Súbory' + trust: 'Stupne dôvery' + security: 'Bezpečnosť' + onebox: "Onebox" + seo: 'SEO' + spam: 'Spam' + rate_limits: 'Limity a obmedzenia' + developer: 'Vývojár' + embedding: "Vkladám" + legal: "Právne záležitosti" + uncategorized: 'Ostatné' + backups: "Zálohy" + login: "Prihlásenie" + plugins: "Pluginy" + user_preferences: "Užívateľské Nastavenia" + badges: + title: Odznaky + new_badge: Nový odznak + new: Nový + name: Meno + badge: Odznak + display_name: Zobrazované meno + description: Popis + badge_type: Typ odznaku + badge_grouping: Skupina + badge_groupings: + modal_title: Zoskupovanie odznakov + granted_by: Pridelené užívateľom + granted_at: Pridelené na + reason_help: (Odkaze na príspevok, alebo tému) + save: Uložiť + delete: Odstrániť + delete_confirm: Ste si istý, že chcete zmazať tento odznak? + revoke: Zrušiť + reason: Dôvod + expand: Rozbaliť … + revoke_confirm: Ste si istý, že chcete obnoviť tento odznak? + edit_badges: Upraviť odznaky + grant_badge: Prideliť odznaky + granted_badges: Pridelené odznaky + grant: Prideliť + no_user_badges: "%{name} nebol pridelený žiaden odznak." + no_badges: Nie sú žiadne odznaky, ktoré môžu byť pridelené. + none_selected: "Vyberte odznak, aby ste mohli začať" + allow_title: Povoliť použitie odznaku namiesto názvu + multiple_grant: Môže byť pridelené viacnásobne + listable: Zobraziť odznak na stránke verejných odznakov + enabled: Povoliť odznak + icon: Ikona + image: Obrázok + icon_help: "Použi buď font z triedy Awesome, alebo URL na obrázok" + query: Požiadavka na Odznak (SQL) + show_posts: Zobraziť príspevok o pridelení odznaku na stránke odznakov + trigger: Spúšťač + trigger_type: + none: "Obnovovať denne" + post_action: "Keď užívateľ zareaguje na príspevok" + post_revision: "Keď užívateľ vytvorí príspevok" + trust_level_change: "Keď užívateľ zmení stupeň dôvery" + user_change: "Keď je užívateľ vytvorený, alebo upravený" + preview: + link_text: "Prezerať pridelené odznaky" + plan_text: "Náhľad na plán požiadaviek" + modal_title: "Požiadavka na Odznak Prezeranie" + sql_error_header: "Nastala chyba s požiadavkou." + error_help: "Pozrite si nasledujäce odkazy pre pomoc s dopytovacími odznakmi." + bad_count_warning: + header: "UPOZORNENIE!" + text: "Chýbajú ukážky práv. Toto sa stane, ak dotaz na odznak vráti ID používateľa alebo príspevku, ktorý neexistuje. Toto môže zapríčiniť neskoršie neočakávané výsledky - prosíme znovu overte Váš dotaz." + no_grant_count: "Žiadne odznaky na pridelenie." + grant_count: + one: "1 odznak na pridelenie" + few: "%{count} odznaky na pridelenie" + other: "%{count} odznakov na pridelenie" + sample: "Vzor:" + grant: + with: %{username} + with_post: %{username} za príspevok v %{link} + with_post_time: %{username} za príspevok v %{link} v čase %{time} + with_time: %{username} v čase %{time} + emoji: + title: "Emoji" + help: "Pridaj nové emoji, ktoré bude dostupné pre všetkých (TIP: môžete pretiahnuť viac súborov naraz)" + add: "Pridaj nové Emoji" + name: "Meno" + image: "Obrázok" + delete_confirm: "Ste si istý, že chcete zmazať: %{name}: emoji?" + embedding: + get_started: "Pokiaľ chcete vložiť Discourse na inú stránku, začnite pridaním jej hostiteľa." + confirm_delete: "Ste si istý, že chcete zmazať tohoto hostiteľa?" + sample: "Použite nasledovný HTML kód vo Vašej stránke pre vytvorenie vloženej témy Discourse. Nahraďte REPLACE_ME kanonickou URL adresou stránky, do ktorej to vkladáte." + title: "Vkladám" + host: "Povolení hostitelia" + edit: "uprav" + category: "Prispievať do kategórií" + add_host: "Pridať hostiteľa" + settings: "Nastavenia vkladania" + feed_settings: "Nastavenie zdrojov" + feed_description: "Zadaním RSS/ATOM kanálu Vašich stránok zlepší schopnosť Discourse vladať Váš obsah." + crawling_settings: "Nastavenia vyhľadávača" + crawling_description: "Ak Discourse vytvorí tému pre Váš príspevok a neexistuje žiadny RSS/ATOM kanál tak sa pokúsime získať Váš obsah z HTML. Získanie obsahu môže byt niekedy výzva a preto poskytujeme možnosť špecifikovať CSS pravidlá na uľahčenie získania obsahu." + embed_by_username: "Užívateľské meno pre vytváranie tém" + embed_post_limit: "Maximálny počet vložených príspevkov" + embed_username_key_from_feed: "Kľúč na získanie užívateľského mena discourse zo zdroja" + embed_truncate: "Skrátiť vložené príspevky" + embed_whitelist_selector: "CSS selector pre elementy ktoré je možné vkladať" + embed_blacklist_selector: "CSS selector pre elementy ktoré nie je možné vkladať" + feed_polling_enabled: "importovať príspevky cez RSS/ATOM" + feed_polling_url: "URL adresa zdroja RSS/ATOM na preskúmanie" + save: "Uložiť Nastavenia vkladania" + permalink: + title: "Trvalé odkazy" + url: "URL" + topic_id: "IT témy" + topic_title: "Témy" + post_id: "ID príspevku" + post_title: "Príspevok" + category_id: "ID kategórie" + category_title: "Kategória" + external_url: "Externá URL" + delete_confirm: Ste si istý, že chcete zmazať tento trvalý odkaz? + form: + label: "Nový:" + add: "Pridať" + filter: "Hľadať (URL alebo externá URL)" + lightbox: + download: "stiahnuť" + search_help: + title: 'Pomoc pri vyhľadávaní' + keyboard_shortcuts_help: + title: 'Klávesové skratky' + jump_to: + title: 'Preskočiť na' + home: 'g, h Domov' + latest: 'g, l Najnovšie' + new: 'g, n Nové' + unread: 'g, u Neprečítané' + categories: 'g, c Kategórie' + top: 'g, t Hore' + bookmarks: 'g, b Záložky' + profile: 'g, p Profil' + messages: 'g, m Správy' + navigation: + title: 'Navigácia' + jump: '# Choď na príspevok #' + back: 'u Späť' + up_down: 'k/j Presuň označené ↑ ↓' + open: 'o or EnterOtvoriť zvolenú tému' + next_prev: 'shift+j/shift+k Nasledujúca/predchádzajúca sekcia' + application: + title: 'Aplikácia' + create: 'c Vytvoriť novú tému' + notifications: 'n Otvor upozornenia' + hamburger_menu: '= Otvoriť hamburger menu' + user_profile_menu: 'p Otvor užívateľské menu' + show_incoming_updated_topics: '. Zobraz aktualizované témy' + search: '/ Hľadať' + help: '? Pomoc s klávesovými skratkami' + dismiss_new_posts: 'x, r Zahodiť Nové/Príspevky' + dismiss_topics: 'x, t Zahodiť témy' + log_out: 'shift+z shift+z Odhlásiť sa' + actions: + title: 'Akcie' + bookmark_topic: 'f Zmeniť tému záložky' + pin_unpin_topic: 'shift+p Pripnúť/Odopnúť tému' + share_topic: 'shift+s Zdielať tému' + share_post: 's Zdielať príspevok' + reply_as_new_topic: 't Odpoveď ako súvisiaca téma' + reply_topic: 'shift+r Odpovedať na tému' + reply_post: 'r Odpovedať na príspevok' + quote_post: 'q Citovať príspevok' + like: 'l Označiť príspevok "Páči sa"' + flag: '! Označiť príspevok ' + bookmark: 'b Pridať príspevok do záložiek' + edit: 'e Editovat príspevok' + delete: 'd Zmazať príspevok' + mark_muted: 'm, m Umlčať tému' + mark_regular: 'm, r Obyčajná (preddefinovaná) téma' + mark_tracking: 'm, w Sledovať tému' + mark_watching: 'm, w Sledovať tému' + badges: + title: Odznaky + allow_title: "môže byť použitý ako názov" + multiple_grant: "Môže byť ocenené viacnásobne" + badge_count: + one: "1 Odznak" + few: "%{count} Odznaky" + other: "%{count} Odznakov" + more_badges: + one: "+1 Viac" + few: "+%{count} Viac" + other: "+%{count} Viac" + granted: + one: "1 povolené" + few: "%{count} povolené" + other: "%{count} povolených" + select_badge_for_title: Vyberte odznak, ktorý chcete použiť ako Váš titul + none: "" + badge_grouping: + getting_started: + name: Začíname + community: + name: Komunita + trust_level: + name: Stupeň dôvery + other: + name: Ostatné + posting: + name: Prispievam + badge: + editor: + name: Editor + description: Úprava prvého príspevku + basic_user: + name: Základné + description: Povolené všetky základné funkcie komunity + member: + name: Člen + description: Povolené pozývanie + regular: + name: Bežný + description: Povolené zmeny kategóriií, premenovávanie, odkazy a lóža + leader: + name: Vodca + description: Pridelené globálna editácia, pripnutia, uzatváranie, archivovanie, rozdeľovanie a spájanie + welcome: + name: Vitajte + description: Prijal "Páči sa" + autobiographer: + description: Vyplnený užívateľský profil + anniversary: + name: Výročie + description: Aktívny člen, napísal aspoň jeden príspevok za rok + nice_post: + name: Pekný príspevok + description: Príspevok získal 10 "Páči sa". Tento odznak môže byť pridelený viac krát + good_post: + name: Dobrý príspevok + description: Príspevok získal 25 "Páči sa". Tento odznak môže byť pridelený viac krát + great_post: + name: Vynikajúci príspevok + description: Príspevok získal 50 "Páči sa". Tento odznak môže byť pridelený viac krát + nice_topic: + name: Pekná téma + description: Téma získala 10 "Páči sa". Tento odznak môže byť pridelený viac krát + good_topic: + name: Dobrá téma + description: Téma získala 25 "Páči sa". Tento odznak môže byť pridelený viac krát + great_topic: + name: Vynikajúca téma + description: Téma získala 50 "Páči sa". Tento odznak môže byť pridelený viac krát + nice_share: + name: Pekné zdieľanie + description: Zdieľaný príspevok s 25 jedinečnými návštevami + good_share: + name: Dobré zdieľanie + description: Zdieľaný príspevok s 300 jedinečnými návštevami + great_share: + name: Výborné zdieľanie + description: Zdieľaný príspevok s 1000 jedinečnými návštevami + first_like: + name: Prvé "Páči sa mi" + description: Príspevok, ktorý sa páčil + first_flag: + name: Prvé označenie + description: Označený príspevok + promoter: + name: Propagátor + description: pozval užívateľa + campaigner: + description: Pozval 3 základných užívateľov (stupeň dôvery 1) + champion: + name: Šampión + description: Pozval 5 členov (stupeň dôvery 2) + first_share: + name: Prvé zdieľanie + description: Zdieľal príspevok + first_link: + name: Prvý odkaz + description: Pridaný vnútorný odkaz na ďalšiu tému + first_quote: + name: Prvý citát + description: Citoval užívateľa + read_guidelines: + name: 'Prečítať pravidlá ' + description: Prečítať pravidlá komunity + reader: + name: Čitateľ + description: Prečítať každý príspevok v téme, ktorá má viac ako 100 príspevkov + popular_link: + name: Populárny odkaz + description: Príspevok s externým odkazom s najmenej 50 kliknutiami + hot_link: + name: Horúci odkaz + description: Príspevok s externým odkazom s najmenej 300 kliknutiami + famous_link: + name: Skvelý odkaz + description: Príspevok s externým odkazom s najmenej 1000 kliknutiami + google_search: | +

Vyhľadávať pomocou Google

+

+

+

diff --git a/config/locales/server.sk.yml b/config/locales/server.sk.yml new file mode 100644 index 000000000..4e982d938 --- /dev/null +++ b/config/locales/server.sk.yml @@ -0,0 +1,1128 @@ +# encoding: utf-8 +# +# Never edit this file. It will be overwritten when translations are pulled from Transifex. +# +# To work with us on translations, join this project: +# https://www.transifex.com/projects/p/discourse-org/ + +sk: + dates: + short_date_no_year: "MMM D" + short_date: "YYYY MMM D" + long_date: "YYYY MMM D h:mma" + datetime_formats: &datetime_formats + formats: + short: "%Y-%m-%d" + short_no_year: "%B %-d" + date_only: "%Y, %B %-d" + date: + month_names: [null, Január, Február, Marec, Apríl, Máj, Jún, Júl, August, September, Október, November, December] + <<: *datetime_formats + title: "DIscourse" + topics: "Témy" + posts: "príspevky" + loading: "Načítava sa" + powered_by_html: 'Systém beží na Discourse, najlepšie funguje so zapnutým JavaScriptom' + log_in: "Prihlásenie" + purge_reason: "Automaticky vymazaný ako opustený, neaktivovaný účet" + disable_remote_images_download_reason: "Sťahovanie vzdialených obrázkov je vypnuté kvôli nedostatku diskového priestoru." + anonymous: "Anonymný" + errors: &errors + format: '%{attribute} %{message}' + messages: + too_long_validation: "je obmedzený na %{max} znakov, zadali ste %{length}." + invalid_boolean: "Neplatná logická hodnota." + taken: "je už použité" + accepted: sa musí akceptovať + blank: nesmie byť prázdne + present: musí byť prázdne + confirmation: "sa nerovná %{attribute}" + empty: nesmie byť prázdne + equal_to: sa musí rovnať %{count} + even: musí byť párne + exclusion: je rezervované + greater_than: musí byť viac ako %{count} + greater_than_or_equal_to: musí byť väčšie alebo rovné %{count} + has_already_been_used: "je už použité" + inclusion: nie je v zozname + invalid: je nesprávne + is_invalid: "je nesprávne; skúste opísať lepšie" + less_than: musí byť menej ako %{count} + less_than_or_equal_to: musí byť menej alebo rovné %{count} + not_a_number: nie je číslo + not_an_integer: musí byť číslo + odd: musí byť nepárne + record_invalid: 'Validácia zlyhala s chybami: %{errors}' + restrict_dependent_destroy: + one: "Nedá sa zmazať záznam pretože existuje %{record} závislých záznamov" + many: "Záznam nemôže byť zmazaný z dôvodu zavislosti na zázname: %{record} " + too_long: + one: príliš dlhé (maximálne 1 znak) + few: príliiš dlhé (maximum je %{count} znaky) + other: príliiš dlhé (maximum je %{count} znakov) + too_short: + one: príliiš krátke (minimum je 1 znak) + few: príliiš krátke (minimum je %{count} znaky) + other: príliiš krátke (minimum je %{count} znakov) + wrong_length: + one: nesprávna dĺžka (musí byť 1 znak) + few: nesprávna dĺžka (musí byť %{count} znaky) + other: nesprávna dĺžka (musí byť %{count} znakov) + other_than: "musí byť iný než %{count}" + template: + body: 'Nastal problém s nasledujúcimi položkami:' + header: + one: Uloženie %{model} zlyhalo kôli chybe + few: Uloženie %{model} zlyhalo kôli %{count} chybám + other: 'Uloženie %{model} zlyhalo kôli %{count} chybám ' + embed: + load_from_remote: "Nastala chyba pri načítaní príspevku" + site_settings: + min_username_length_exists: "Nemôžete nastaviť minimálnu dĺžku používateľského mena viac ako najkratšie používateľské meno." + min_username_length_range: "Nemôžete nastaviť minimum viac ako maximum." + max_username_length_exists: "Nemôžete nastaviť maximálnu dĺžku používateľského mena kratšiu ako najdlhšie používateľské meno." + max_username_length_range: "Nemôžete nastaviť maximum menšie ako minimum." + default_categories_already_selected: "Nemôžete vybrať kategóriu použitú v inom zozname." + s3_upload_bucket_is_required: "Nemôžete nahrávať na S3 pokiaľ ste nezadali 's3_upload_bucket'." + bulk_invite: + file_should_be_csv: "Nahrávaný súbor by mal byť vo formáte csv alebo txt." + backup: + operation_already_running: "Prebieha spracovanie inej operácie. Momentálne sa nová úloha nedá spustiť. " + backup_file_should_be_tar_gz: "Záložný súbor musí byť archív .tar.gz" + not_enough_space_on_disk: "Na disku nie je dosť miesta na uloženie zálohy" + not_logged_in: "K tejto akcii musíte byť prihlásený." + not_found: "Požadovaná URL alebo zdroj sa nenašiel" + invalid_access: "Nemáte oprávnenie na zobrazenie požadovaných údajov!" + read_only_mode_enabled: "Táto stránka je v móde na čítanie. Zapisovanie je vypnuté" + too_many_replies: + one: "Lutujeme, noví užívatelia majú dočasne obmedzený počet príspevkov na jeden v rámci jednej témy." + few: "Lutujeme, noví užívatelia majú dočasne obmedzený počet príspevkov na %{count} v rámci jednej témy." + other: "Lutujeme, noví užívatelia majú dočasne obmedzený počet príspevkov na %{count} v rámci jednej témy." + embed: + start_discussion: "Začať diskusiu" + continue: "Pokračovať v diskusii" + more_replies: + one: "1 ďalšia odpoveď" + few: "%{count} ďalšie odpovede" + other: "%{count} ďalších odpovedí" + loading: "Nahrávanie Diskusie ..." + permalink: "Trvalý odkaz" + imported_from: "Toto je sprievodná diskusia k pôvodnej téme na %{link}" + in_reply_to: "▶ %{username}" + replies: + one: "1 odpoveď" + few: "%{count} odpovede" + other: "%{count} odpovedí" + no_mentions_allowed: "Ľutujeme, nesmiete menovať iných užívateľov" + too_many_mentions: + one: "Ľutujeme, v príspevku môžte menovat maximálne jedného užívateľa." + few: "Ľutujeme, v príspevku môžte menovat maximálne %{count} užívatelov." + other: "Ľutujeme, v príspevku môžte menovat maximálne %{count} užívatelov." + no_mentions_allowed_newuser: "Ľutujeme, noví užívatelia nesmú zmieňovať iných uživateľov" + too_many_mentions_newuser: + one: "Ľutujeme, noví užívatelia môžu menovat v príspevku maximálne jedného užívateľa." + few: "Ľutujeme, noví užívatelia môžu menovat v príspevku maximálne %{count} užívatelov." + other: "Ľutujeme, noví užívatelia môžu menovat v príspevku maximálne %{count} užívatelov." + no_images_allowed: "Ľutujeme, noví užívatelia nemôžu vkladať obrázky do príspevkov." + too_many_images: + one: "Ľutujeme, noví užívatelia môžu vložiť maximálne jeden obrázok do príspevku." + few: "Ľutujeme, noví užívatelia môžu vložiť maximálne %{count} obrázky do príspevku." + other: "Ľutujeme, noví užívatelia môžu vložiť maximálne %{count} obrázkov do príspevku." + no_attachments_allowed: "Ľutujeme, noví užívatelia nemôžu vkladať prílohy do príspevkov." + too_many_attachments: + one: "Ľutujeme, noví užívatelia môžu vložiť maximálne jednu prílohu do príspevku." + few: "Ľutujeme, noví užívatelia môžu vložiť maximálne %{count} prílohy do príspevku." + other: "Ľutujeme, noví užívatelia môžu vložiť maximálne %{count} príloh do príspevku." + no_links_allowed: "Ľutujeme, noví užívatelia nemôžu vkladať odkazy do príspevkov." + too_many_links: + one: "Ľutujeme, noví užívatelia môžu vložiť maximálne jeden odkaz do príspevku." + few: "Ľutujeme, noví užívatelia môžu vložiť maximálne %{count} odkazy do príspevku." + other: "Ľutujeme, noví užívatelia môžu vložiť maximálne %{count} odkazov do príspevku." + spamming_host: "Prepáčte, nemôžte publikovať odkazy na tento zdroj" + user_is_suspended: "Suspendovaní užívatelia nemôžu vkladať príspevky" + topic_not_found: "Niečo sa pokazilo. Téma mohla byť napríklad uzavretá, alebo zmazaná kým ste ju prezerali." + just_posted_that: "je to príliš podobné Vášmu predchádzajúcemu príspevku" + has_already_been_used: "je už použité" + invalid_characters: "obsahuje neplatné znaky" + is_invalid: "je nesprávne; skúste opísať lepšie" + next_page: "nasledujúca stránka →" + prev_page: "← predchádzajúca stránka" + page_num: "Stránka %{num}" + home_title: "Domov" + topics_in_category: " '%{category}' tém v tejto kategórii" + rss_posts_in_topic: "RSS čítačka na %{topic}'" + rss_topics_in_category: "RSS čítačka na tému v kategórii: '%{category}'" + author_wrote: "%{author} napísal:" + num_posts: "Príspevky:" + num_participants: "Prispievatelia:" + read_full_topic: "Čítať celý príspevok" + private_message_abbrev: "Správa" + rss_description: + latest: "Najnovšie témy" + hot: "Horúce témy" + posts: "Najnovšie príspevky" + too_late_to_edit: "Tento príspevok bol vytvorený príliš dávno. Už nemôže byť upravovaný či zmazaný" + excerpt_image: "Obrázok" + queue: + delete_reason: "Zmazané moderátorom" + groups: + errors: + can_not_modify_automatic: "Nemôžte upravovať automatickú skupinu" + member_already_exist: "'%{username}' už je členom tejto skupiny." + invalid_domain: "'%{domain}' nie je platnou doménou." + invalid_incoming_email: "'%{incoming_email}' je neplatná emailová addresa." + default_names: + everyone: "všetci" + admins: "administrátori" + moderators: "moderátori" + staff: "zamestnanci" + trust_level_0: "stupen_dovery_0" + trust_level_1: "stupen_dovery_1" + trust_level_2: "stupen_dovery_2" + trust_level_3: "stupen_dovery_3" + trust_level_4: "stupen_dovery_4" + education: + until_posts: + one: "jeden príspevok" + few: "%{count} príspevky" + other: "%{count} príspevkov" + new-topic: | + Víitajte na %{site_name} — **Ďakujeme za založenie novej konverzácie!** + + - Znie titulok zaujímavo ak ho čítate nahlas ? Zodpovedá obsahu ? + + - Koho by to mohlo zaujímať ? Prečo je to dôležité ? Akú reakciu očakávate ? + + - Vložte často používane slová vo vašej téme aby ju ostatní vedeli "nájsť". Pre zlúčenie vašej témy so súvisiacimi témami vyberte kategóriu . + + Pre viac informácií, [pozri návody](/guidelines). Tento panel sa zobrazí iba raz %{education_posts_text}. + new-reply: | + Vitajte na %{site_name} — **Ďakujeme za príspevok!** + + - Vylepší vaša odpoveď nejakým spôsobom diskusiu ? + + - Buďte ohľaduplní k ostatným členom komunity. + + - Konštruktívna kritika je vítana, avšak kritizujte "nápady", nie ľudí. + + Pre viac informácií, [pozri návody](/guidelines). Tento panel sa zobrazí iba raz %{education_posts_text}. + avatar: | + ### Čo tak pridať fotku k svojmu účtu? + + Už ste pridali zopár tém a odpovedi, ale Váš profil nie je taký jedinečný ako Vy -- Je to len písmeno. + + Zvážili ste **[pozrieť váš profil](%{profile_path})** a pridať obrázok , ktorý Vás vystihuje? + + Je jednoduchšie sledovať diskusie a nájsť zaujímave osoby v konverzácii pokiaľ ma každý z nich v profile jedinečný obrázok ! + sequential_replies: | + ### Zvážte možnosť odpovedať na viacero príspevkov naraz + + Namiesto množstva postupných odpovedí na tému prosím zvážte použitie jednej odpovede, ktorá bude obsahovať citácie z predchádzajúcich príspevkov, alebo odkazy na @meno + + Ak chcete dať časť svojho vloženého príspevku do úvodzoviek, stačí označiť text a stlačiť tlačidlo quote reply , ktoré sa následne objaví. + + Pre všetkých je jednoduchšie čítať témy, ktoré majú menšiu hĺbku vnorených odpovedi v porovnaní s množstvom malých individuálnych odpovedí. + dominating_topic: | + ### Umožnite ostatným nech sa zapoja do debaty + + Táto téma je pre Vás zjavne dôležitá – prispeli ste do nej viac než %{percent}% odpovedí. + + Ste si istí, že posktujete dostatok času aj ostatným aby prezentovali svoj názor ? + too_many_replies: | + ### Dosiahli ste limit počtu odpovedí na túto tému + + Ľutujeme, noví užívatelia môžu dočasne vložiť len %{newuser_max_replies_per_topic} odpovedí na jednu tému. + + Namiesto nového príspevku zvážte možnosť úpravy predchádzajúcich odpovedí, alebo skúste inú tému. + reviving_old_topic: | + ### Oživiť túto tému ? + + Posledná odpoveď k tejto téme je staršia ako %{days} dní. Vaša odpoveď posunie tému na vrchol tém a upozorní všetkých, ktorí sa zapojili do diskusie. + + Ste si istí, že chcete pokračovať v tejto starej diskusii? + activerecord: + attributes: + category: + name: "Názov kategórie" + post: + raw: "Telo" + user_profile: + bio_raw: "O mne" + errors: + models: + topic: + attributes: + base: + warning_requires_pm: "Výstraha môže byť pripojená len k súkromným spravam" + too_many_users: "Výstraha môže byť zaslaná len jednej osobe" + cant_send_pm: "Ľutujeme, nemôžte zaslať súkromnú správu tomuto užívateľovi" + no_user_selected: "Musíte zadať existujúceho užívateľa" + user: + attributes: + password: + common: "Toto je jedno z 10000 najbežnejších hesiel. Prosím použite bezpečnejšie heslo" + same_as_username: "je také isté ako vaše užívateľské meno. Prosím použite bezpečnejšie heslo" + same_as_email: "je také isté ako Váš email. Prosím použite bezpečnejšie heslo" + ip_address: + signup_not_allowed: "Registrácia z tohto účtu nie je povolená-" + color_scheme_color: + attributes: + hex: + invalid: "nesprávna farba" + <<: *errors + user_profile: + no_info_me: "
Položka \"O mne\" vo Vašom profile je prázdna, želáte si ju doplníť?
" + no_info_other: "
%{name} nevložil zatiaľ nič do profilu \"O mne\"
" + vip_category_name: "Salón" + vip_category_description: "Kategória výhradne pre členov s dôveryhodnosťou 3 a vyššou" + meta_category_name: "Podnety pre tvorcov stránky" + meta_category_description: "Diskusia o stránke, organizácii, ako funguje a ako ju môžme vylepšit" + staff_category_name: "Zamestnanci" + staff_category_description: "Súkromna kategória pre zamestnaneckú diskusiu. Témy su viditeľné len pre správcov a moderátorov diskusie" + assets_topic_body: "Toto je permanentná téma, viditeľná len pre redaktorov, na uchovávanie obrázkov a súborov použitých v dizajne tohto webu. Nezmazávajte ju!\n\n\nTu je návod:\n\n\n1. Odpovedzte na túto tému.\n2. Nahrajte sem všetky obrázky, ktoré si prajete použit pre logá, favikony a pod. (Použite ikonku „nahrať“ v paneli nástrojov editora, alebo obrázky potiahnite alebo „vložte“)\n3. Odošlite svoju odpoveď.\n4. Pre získanie adresy k nahratým obrázkom kliknite pravým tlačítkom na obrázky vo svojom novom príspevku, alebo kliknite na ikonku úpravy príspevku a následne si adresu skopírujte. \n5. Cesty k obrázkom vložte do [základného nastavenia](/admin/site_settings/category/required).\n\n\nAk potrebujete povoliť nahratie pre iné typy súborov, upravte `authorized_extensions` v [nastavení súborov](/admin/site_settings/category/files)." + lounge_welcome: + title: "Vítajte v Salóne" + category: + topic_prefix: "O kategórii: %{category} " + errors: + uncategorized_parent: "Nekategorizovaná nemôže mať nadradenú kategóriu" + self_parent: "Podkategória si nemôže byť zároveň kategóriou " + depth: "Nemôžte umiestniť podkategóriu pod inú podkategóriu" + email_in_already_exist: "Prichádzajúca emailová adresa '%{email_in}' sa už používa pre kategóriu '%{category_name}'." + cannot_delete: + uncategorized: "Nemôžte vymazať nekategorizované" + has_subcategories: "Nemôžte vymazať kategóriu pretože obsahuje podkategórie" + topic_exists: + one: "Nemôžte vymazať kategóriu pretože obsahuje tému %{topic_link}." + few: "Nemôžte vymazať kategóriu pretože obsahuje %{count} témy. Najstaršia téma je %{topic_link}." + other: "Nemôžte vymazať kategóriu pretože obsahuje %{count} tém. Najstaršia téma je %{topic_link}." + topic_exists_no_oldest: "Nemôžte vymazať túto kategóriu pretože obsahuje %{count} tém." + trust_levels: + newuser: + title: "nový používateľ" + basic: + title: "základný používateľ" + member: + title: "člen" + regular: + title: "bežný" + leader: + title: "vodca" + change_failed_explanation: "Pokúsili ste sa znížiť úroveň %{user_name} na '%{new_trust_level}'. Ale jeho/jej aktuálna úroveň už je '%{current_trust_level}'. %{user_name} zostane na úrovni '%{current_trust_level}' - Ak chcete znížiť úroveň používateľa, najskôr uzamknite úroveň" + rate_limiter: + slow_down: "Vykonali ste túto akciu príliš veľa krát, skúste neskôr" + too_many_requests: "Na vykonávanie tejto akcie máme nastavený denný limit. Prosím počkajte %{time_left} než skúsite znovu." + by_type: + first_day_replies_per_day: "Dosiahli ste maximálny počet odpovedí stanovený pre nového používateľa v jeho prvý deň. Prosím čakajte %{time_left} , než skúsite znova" + first_day_topics_per_day: "Dosiahli ste maximálny počet tém stanovený pre nového používateľa v jeho prvý deň. Prosím čakajte %{time_left} , než skúsite znova" + create_topic: "Výtvárate témy príliš rýchlo. Prosím čakajte %{time_left} , než skúsite znova" + create_post: "Odpovedáte príliš rýchlo. Prosím čakajte %{time_left} , než skúsite znova" + topics_per_day: "Dosiahli ste maximálny počet nových tém na tento deň. Prosím čakajte %{time_left} , než skúsite znova" + pms_per_day: "Dosiahli ste maximálny počet správ na tento deň. Prosím čakajte %{time_left} , než skúsite znova" + create_like: "Dosiahli ste maximálny počet \"Páči sa\" na tento deň. Prosím čakajte %{time_left} , než skúsite znova" + create_bookmark: "Dosiahli ste maximálny počet záložiek na tento deň. Prosím čakajte %{time_left} , než skúsite znova" + edit_post: "Dosiahli ste maximálny počet úprav na tento deň. Prosím čakajte %{time_left} , než skúsite znova" + hours: + one: "1 hodina" + few: "%{count} hodiny" + other: "%{count} hodín" + minutes: + one: "1 minútu" + few: "%{count} minúty" + other: "%{count} minút" + seconds: + one: " 1 sekundu" + few: "%{count} sekundy" + other: "%{count} sekúnd" + datetime: + distance_in_words: + half_a_minute: "< 1m" + less_than_x_seconds: + one: "< 1s" + few: "< %{count}s" + other: "< %{count}s" + x_seconds: + one: "1s" + few: "%{count}s" + other: "%{count}s" + less_than_x_minutes: + one: "< 1m" + few: "< %{count}m" + other: "< %{count}m" + x_minutes: + one: "1m" + few: "%{count}m" + other: "%{count}m" + about_x_hours: + one: "1h" + few: "%{count}h" + other: "%{count}h" + x_days: + one: "1d" + few: "%{count}d" + other: "%{count}d" + about_x_months: + one: " 1mes" + few: "%{count}mes" + other: "%{count}mes" + x_months: + one: "1mes" + few: "%{count}mes" + other: "%{count}mes" + about_x_years: + one: "1r" + few: "%{count}r" + other: "%{count}r" + over_x_years: + one: "> 1r" + few: "> %{count}r" + other: "> %{count}r" + almost_x_years: + one: "1r" + few: "%{count}r" + other: "%{count}r" + distance_in_words_verbose: + half_a_minute: "práve teraz" + less_than_x_seconds: + one: "práve teraz" + few: "práve teraz" + other: "práve teraz" + x_seconds: + one: "pred sekundou" + few: "pred %{count} sekundami" + other: "pred %{count} sekundami" + less_than_x_minutes: + one: "menej ako pred minútou" + few: "menej ako pred %{count} minútami" + other: "menej ako pred %{count} minútami" + x_minutes: + one: "pred minútou" + few: "pred %{count} minútami" + other: "pred %{count} minútami" + about_x_hours: + one: "pred hodinou" + few: "pred %{count} hodinami" + other: "pred %{count} hodinami" + x_days: + one: "včera" + few: "pred %{count} dňami" + other: "pred %{count} dňami" + about_x_months: + one: "približne pred mesiacom" + few: "približne pred %{count} mesiacmi" + other: "približne pred %{count} mesiacmi" + x_months: + one: "pred mesiacom" + few: "pred %{count} mesiacmi" + other: "pred %{count} mesiacmi" + about_x_years: + one: "približne pred rokom" + few: "približne pred %{count} rokmi" + other: "približne pred %{count} rokmi" + over_x_years: + one: "pred vyše rokom" + few: "pred vyše %{count} rokmi" + other: "pred vyše %{count} rokmi" + almost_x_years: + one: "pred takmer rokom" + few: "pred takmer %{count} rokmi" + other: "pred takmer %{count} rokmi" + password_reset: + no_token: "Prepáčte, táto linka na zmenu hesla je už príliš stará. Stlačte tlačitlo Prihlásiť a použite \"Zabudol som heslo\" pre vytvorenie novej linky" + choose_new: "Prosim zadajte nové heslo" + choose: "Prosím zadajte heslo" + update: 'Aktualizujte heslo' + save: 'Nastavte heslo' + title: 'Obnoviť heslo' + success: "Heslo bolo úspešne zmenené a ste prihlasený do systému. " + success_unapproved: "Heslo bolo úspešne zmenené." + continue: "Pokračujte na %{site_name}" + change_email: + confirmed: "Vaša emailova adresa bola aktualizovaná" + please_continue: "Pokračujte na %{site_name}" + error: "Nastala chyba pri aktualizácii emailu. Nieje už náhodou použitý?" + activation: + action: "Pre aktiváciu účtu kliknite sem" + already_done: "Prepáčte, táto potvrdzovacia linka je už neplatná. Nie je už účet aktivny ?" + please_continue: "Váš nový účet je potvrdený. Budete presmerovaní na domovskú stránku." + continue_button: "Pokračujte na %{site_name}" + welcome_to: "Vitajte na %{site_name}!" + approval_required: "Moderátor musí manuálne povoliť Váš prístup na toto fórum. O schválení prístupu budete upovedomení emailom." + missing_session: "Nevieme zistiť či Váš účet bol vytvorený, prosím uistite sa že máte v prehliadači povolené cookies." + post_action_types: + off_topic: + title: 'Mimo témy' + description: 'Tento príspevok nesúvisí s danou témou popísanou v názve a prvom príspevku a pravdepodobne by mal byť presunutý niekam inam' + long_form: 'toto je označené ako "Mimo témy"' + spam: + title: 'Spam' + description: 'Tento príspevok je reklama. Nijako nesúvisí s danou témou, má propagačný charakter.' + long_form: 'označiť toto ako spam' + email_title: '"%{title}" bol označený ako spam' + email_body: "%{link}\n\n%{message}" + inappropriate: + title: 'Nevhodné' + description: 'Obsah tohto príspevku môže byť nektorými osobami považovaný za urážlivý, hanlivý, alebo porušujúci pravidlá slušného správania.' + long_form: 'toto označ ako nevhodné' + notify_user: + title: 'Poslať @{{username}} správu' + description: 'Chcem sa s touto osobou rozprávať o jeho príspevku priamo a súkromne.' + long_form: 'úživateľovi bola zaslaná správa' + email_title: 'Váš príspevok v "%{title}"' + email_body: "%{link}\n\n%{message}" + notify_moderators: + title: "Niečo iné" + description: 'Tento príspevok vyžaduje pozornosť obsluhy z iného dôvodu ako je uvedené vyššie.' + long_form: 'označené do pozornosti obsluhy' + email_title: 'Príspevok "%{title}" vyžaduje pozornosť obsluhy' + email_body: "%{link}\n\n%{message}" + bookmark: + title: 'Záložka' + description: 'Vytvor záložku na tento príspevok' + long_form: 'záložka na tento príspevok bola vytvorená ' + like: + title: 'Páči sa mi' + description: 'Páči sa mi tento príspevok' + long_form: 'páčilo sa' + vote: + title: 'Hlasovať' + description: 'Hlasovať pre tento príspevok' + long_form: 'hlasoval pre tento príspevok' + topic_flag_types: + spam: + title: 'Spam' + description: 'Tento príspevok je reklama. Nijako nesúvisí s danou stránkou, má propagačný charakter.' + long_form: 'označiť toto ako spam' + inappropriate: + title: 'Nevhodné' + description: 'Táto téma môže byť nektorými osobami považovaná za urážlivú, hanlivú, alebo porušujúcu pravidlá slušného správania.' + long_form: 'toto označ ako nevhodné' + notify_moderators: + title: "Niečo iné" + description: 'Táto téma vyžaduje pozornosť obsluhy na základe pravidiel, TOS, alebo z iného dôvodu ako je uvedené vyššie.' + long_form: 'označené do pozornosti moderátora' + email_title: 'Téma "%{title}" vyžaduje pozornosť moderátora' + email_body: "%{link}\n\n%{message}" + flagging: + you_must_edit: '

Váš príspevok bol označený komunitou. Prosim pozrite si Vaše správy.

' + user_must_edit: '

Tento príspevok bol označený komunitou a je dočasne skrytý

' + archetypes: + regular: + title: "Bežná téma" + banner: + title: "Banerová téma" + message: + make: "Téma je odteraz baner. Bude sa zobrazovať navrchu každej stránky, pokiaľ ju používateľ nezavrie." + remove: "Téma odteraz nie je baner. Už sa nebude viac zobrazovat navrchu každej stránky." + unsubscribed: + title: 'Odhlásiť' + description: "Boli ste odhlásený. Už vás znovu nebudeme kontaktovať." + oops: "V prípade že ste to tak nemysleli, kliknite nižšie" + error: "Chyba pri odhlasovaní" + preferences_link: "Zo súhrnných emailov sa môžete odhlásiť na stránke nastavení" + different_user_description: "Aktuálne ste prihlásený ako iný používateľ než ten, komu bol zaslaný súhrnný email. Prosíme odhláste sa a skúste znovu." + not_found_description: "Prepáčte, nedokázali sme Vás odhlásiť. Je možné, že platnosť odkazu vo Vašom emaile vypršala." + resubscribe: + action: "Znovu-prihlásiť" + title: "Znovu-prihlásený!" + description: "Boli ste znovu prihlásený." + reports: + visits: + title: "Používateľské návštevy" + xaxis: "Deň" + yaxis: "Počet návštev" + signups: + title: "Noví používatelia" + xaxis: "Deň" + yaxis: "Počet nových používateľov" + profile_views: + title: "Prezreté používateľské profily" + xaxis: "Deň" + yaxis: "Počet prezretých používateľských profilov" + topics: + title: "Témy" + xaxis: "Deň" + yaxis: "Počet nových tém" + posts: + title: "Príspevky" + xaxis: "Deň" + yaxis: "Počet nových príspevkov" + likes: + title: "Páči sa mi" + xaxis: "Deň" + yaxis: "Počet nových páči sa mi" + flags: + title: "Označenia" + xaxis: "Deň" + yaxis: "Počet označení" + bookmarks: + title: "Záložky" + xaxis: "Deň" + yaxis: "Počet nových záložiek" + starred: + title: "Obľúbené" + xaxis: "Deň" + yaxis: "Počet nových ohviezdičkovaných tém" + users_by_trust_level: + title: "Užívatelia podľa stupňa dôvery" + xaxis: "Stupeň dôvery" + yaxis: "Počet použivateľov" + emails: + title: "Emaily odoslané" + xaxis: "Deň" + yaxis: "Počet emailov" + user_to_user_private_messages: + title: "Užívateľ užívateľovi" + xaxis: "Deň" + yaxis: "Počet správ" + system_private_messages: + title: "Systém" + xaxis: "Deň" + yaxis: "Počet správ" + moderator_warning_private_messages: + title: "Upozornenie od moderátora" + xaxis: "Deň" + yaxis: "Počet správ" + notify_moderators_private_messages: + title: "Upozorniť moderátora" + xaxis: "Deň" + yaxis: "Počet správ" + notify_user_private_messages: + title: "Upozorniť užívateľa" + xaxis: "Deň" + yaxis: "Počet správ" + top_referrers: + title: "Najlepší referenti" + xaxis: "Používateľ" + num_clicks: "Klinutia" + num_topics: "Témy" + top_traffic_sources: + title: "Najlepšie zdroje" + xaxis: "Doména" + num_clicks: "Klinutia" + num_topics: "Témy" + num_users: "Používatelia" + top_referred_topics: + title: "Najlepšie témy" + xaxis: "Témy" + num_clicks: "Klinutia" + page_view_anon_reqs: + title: "Anonymný" + xaxis: "Deň" + yaxis: "Anonymné požiadavky API" + page_view_logged_in_reqs: + title: "Prihlásený" + xaxis: "Deň" + yaxis: "Zaznamenané API požiadavky" + page_view_crawler_reqs: + title: "Webové prehľadávače" + xaxis: "Deň" + yaxis: "API dotazy web robota" + page_view_total_reqs: + title: "Celkovo" + xaxis: "Deň" + yaxis: "Všetky API požiadavky" + page_view_logged_in_mobile_reqs: + title: "Zaznamenané API požiadavky" + xaxis: "Deň" + yaxis: "Zaznamenané API požiadavky cez mobil" + page_view_anon_mobile_reqs: + title: "Anonymné požiadavky API" + xaxis: "Deň" + yaxis: "Zaznamenané API požiadavky cez mobil" + http_background_reqs: + title: "Pozadie" + xaxis: "Deň" + yaxis: "Požiadavky použité na aktívne aktualizácie a sledovanie" + http_2xx_reqs: + title: "Status 2xx (OK)" + xaxis: "Deň" + yaxis: "Úspešné požiadavky (Status 2xx)" + http_3xx_reqs: + title: "HTTP 3xx (Presmerovanie)" + xaxis: "Deň" + yaxis: "Presmerované požiadavky (Status 3xx)" + http_4xx_reqs: + title: "HTTP 4xx (Chyba na strane klienta)" + xaxis: "Deň" + yaxis: "Chyby na strane klienta (Status 4xx)" + http_5xx_reqs: + title: "HTTP 5xx (Chyba na strane servera)" + xaxis: "Deň" + yaxis: "Chyby na strane servera (Status 5xx)" + http_total_reqs: + title: "Celkovo" + xaxis: "Deň" + yaxis: "celkový počet žiadostí" + time_to_first_response: + title: "Čas do prvej odpovede" + xaxis: "Deň" + yaxis: "Priemerný čas (hodiny)" + topics_with_no_response: + title: "Témy bez odozvy" + xaxis: "Deň" + yaxis: "Celkovo" + mobile_visits: + title: "Používateľské návštevy" + xaxis: "Deň" + yaxis: "Počet návštev" + dashboard: + rails_env_warning: "Váš server beží v %{env} móde" + ruby_version_warning: "Používate Ruby 2.0.0, ktorá má známe problémy. Aktualizujte prosím na záplatu 247, alebo novšiu." + host_names_warning: "Váš súbor config/database.yml používa lokálne meno hostiteľa. Aktualizujte ho menom Vašej stránky." + gc_warning: 'Váš server používa východzie nastavenia ruby garbage collectora, ktorý neposktytuje najlepší výkon. Prečítajte si tento príspevok ohľadom ladenia výkonu Ladenie Ruby and Rails pre Discourse.' + sidekiq_warning: 'Sidekiq neni spustený. Množstvo úloh, ako napríklad posielanie emailov, je vykonávaných asynchrónne prostrednictvom sidekiq. Prosim zabezpečte aby bol spustený aspoň jeden proces sidekiq Viac o Sidekiq.' + queue_size_warning: 'Počet úloh v zásobníku je %{queue_size}, čo je dosť veľa. To môže byť príznakom problému s procesom (procesmi) Sidekiq, alebo by ste mali spustiť viac Sidekiq procesov.' + memory_warning: 'Váš server beží s menej než 1 GB pamäte. Odporúča sa minimálne 1GB. ' + google_oauth2_config_warning: 'Server má nakonfigurovanú podporu registrácie a prihlásenia pomocou Google OAuth2 (enable_google_oauth2_logins), ale identifikačné údaje klienta a jeho tajné hodnoty nie sú nastavené. Navštívte Nastavenia stránky a aktualizujte nastavenia. Chcete vedieť viac? Pozrite si tento návod.' + facebook_config_warning: 'Server má nakonfigurovanú podporu registrácie a prihlásenia pomocou Facebooku (enable_facebook_logins), ale údaje "app Id" a tajné hodnoty nie sú nastavené. Navštívte Nastavenia stránky a aktualizujte nastavenia. Chcete vedieť viac? Pozrite si tento návod.' + twitter_config_warning: 'Server má nakonfigurovanú podporu registrácie a prihlásenia pomocou Twitteru (enable_twitter_logins), ale kľúč a tajné hodnoty nie sú nastavené. Navštívte Nastavenia stránky a aktualizujte nastavenia. Chcete vedieť viac? Pozrite si tento návod.' + github_config_warning: 'Server má nakonfigurovanú podporu registrácie a prihlásenia pomocou GitHub (enable_github_logins), ale identifikačné údaje klienta a jeho tajné hodnoty nie sú nastavené.. Navštívte Nastavenia stránky a aktualizujte nastavenia.Chcete vedieť viac? Pozrite si tento návod.' + s3_config_warning: 'Server má nakonfigurované nahrávanie súborov na S3, ale minimálne jedna z nasledujúcich hodnôt nie je nastavená: s3_access_key_id, s3_secret_access_key, alebo s3_upload_bucket. Navštívte Nastavenia stránky a aktualizujte nastavenia. Chcete vedieť viac? Pozrite si návod ako nastaviť nahrávanie súborov na S3.' + s3_backup_config_warning: 'Server má nakonfigurované nahrávanie záloh na S3, ale minimálne jedna z nasledujúcich hodnôt nie je nastavená: s3_access_key_id, s3_secret_access_key, alebo s3_backup_bucket. Navštívte Nastavenia stránky a aktualizujte nastavenia. Chcete vedieť viac? Pozrite si návod ako nastaviť nahrávanie súborov na S3.' + image_magick_warning: 'Server je nakonfigurovaný na vytváranie náhľadov z veľkých obrázkov, ale ImageMagick nie je nainštalovaný. Nainštalujte ImageMagick pomocou Vášho správcu balíčkov, alebo Stiahnite najnovšiu verziu.' + failing_emails_warning: 'Existuje %{num_failed_jobs} neuspešných emailých pokusov. Skontrolujte Váš app.yml a uistite sa, že nastavenia email serveru máte správne. Pozrieť neúspešné pokusy v Sidekiq.' + default_logo_warning: "Nastavte grafické logo Vašej stránky. Aktualizujte logo_url, logo_small_url, a favicon_url na Ňastaveniach stránky." + contact_email_missing: "Vložte kontaktnú email adresu aby ste mohli byť kontaktovaný v urgentných prípadov týkajúcich sa stránok. Vložte na Stránke nastavení." + contact_email_invalid: "Kontaktný email na stránke je neplatný. Aktualizujte ho v Nastavenia stránky." + title_nag: "Zadajte meno stránky. Aktualizujte ho v Nastavenia stránky." + site_description_missing: "Vložte jednovetný popis Vašej stránky, ktorý sa zobrazí vo výsledkoch vyhľadávania. Aktualizujte ho v Nastavenia stránky." + consumer_email_warning: "Vaše stránky sú nastavené tak aby na posielanie emailov používali Gmail (alebo iné služby pre spotrebiteľov). Gmail obmedzuje počet odoslaných emailov. Na zaistenie doručiteľonosti emailov zvážte použitie emailového poskytovateľa ako napríklad mandrill.com." + site_contact_username_warning: "Vložte názov účtu kolegu z personálu pre zasielanie dôležitých automatických správ. Aktualizujte kontakt v Nastavenia stránky." + notification_email_warning: "Notifikačné emaily sú posielané z neplatnej emailovej adresy vo Vašej doméne. Doručovanie emailov môže byť chybné a nespoľahlivé. Prosím nastavte platnú lokálnu emailovú adresu \"notification_email\" v Nastavenia stránky." + subfolder_ends_in_slash: "Vaše nastavenie podadresára je chybné, DISCOURSE_RELATIVE_URL_ROOT je ukončené lomítkom." + site_settings: + censored_words: "Slová, ktoré budu automatický nahradené znakmi ■■■■" + delete_old_hidden_posts: "Automatické zmazanie príspevkov, ktoré ostali skryté viac ako 30 dní" + default_locale: "Predvolený jazyk tejto inštancie Discourse je (ISO 639-1 Code)" + allow_user_locale: "Povoliť užívateľom zvoliť si vlastný jazyk" + min_post_length: "Minimálny povolený počet znakov v príspevkoch" + min_first_post_length: "Minimálny povolený počet znakov pre prvý príspevok (obsah témy)" + min_private_message_post_length: "Minimálny povolený počet znakov v správe" + max_post_length: "Maximálny povolený počet znakov v príspevkoch" + min_topic_title_length: "Minimálny povolený počet znakov v názve témy" + max_topic_title_length: "Maximálny povolený počet znakov v názve témy" + min_private_message_title_length: "Minimálny povolený počet znakov v správe" + min_search_term_length: "Minimálny povolený počet znakov vo vyhľadávaní" + allow_uncategorized_topics: "Pvoliť vytváranie tém bez kategórií. UPOZORNENIE: Pokiaľ existujú nekategorizované témy, musíte ich zaradiť do kategórii skôr než túto možnosť vypnete." + uncategorized_description: "Popis nekategorizovanej kategórie. Nechajte prázdne pre žiadny popis.." + allow_duplicate_topic_titles: "Povoliť témy s rovnakými, duplikovanými názvami" + unique_posts_mins: "Koľko minút musí byť medzi dvomi rovnakými príspevkami od jedného užívateľa." + educate_until_posts: "Ked užívateľ začne písať svojich prvých (n) príspevkov, zobraz sprievodcu vzdelávania pre nového užívateľa. " + title: "Meno stránok, tak ako je použité v značke title." + site_description: "Popíšte stránky v jednej vete, tak ako sa popisujú v tagu meta." + contact_email: "Emailová adresa kľúčovej kontaktnej osoby zodpovednej za túto stránku. Používa sa pri kritických situáciach, ako napríklad neošetrené návestia a tiež pri kontaktnom formulári pre dôležité prípady." + contact_url: "Kontaktná URL adresa pre túto stránku. Použitá tiež pri kontaktnom formulári pre dôležité prípady." + queue_jobs: "IBA VÝVOJÁRI VAROVANIE! Štandardne, požiadavky fronty v sidekiq. Ak je vypnuté, vaše stránky budú rozbité." + crawl_images: "Načítať obrázky z URL pre vloženie správnej výšky a šírky." + download_remote_images_to_local: "Stiahnuť obrázky zo vzdialených zdrojov na lokálne. Zabráni poškodeniu obrázkov. " + download_remote_images_threshold: "Minimálne miesto na lokálnom disku potrebné na stiahnutie obrázkov zo vzdialených zdrojov (v percentách)" + disabled_image_download_domains: "Nikdy nesťahovať obrázky z týchto domén. Zoznam oddeleny pipou \"|\"." + editing_grace_period: "Nevytvárať nové verzie editovaných príspevkov do (n) sekúnd po odoslaní príspevku." + post_edit_time_limit: "Autor môže upravovať alebo mazať svoje príspevky do (n) minút po ich odoslaní. Nastavte 0 pre nekonečno" + edit_history_visible_to_public: "Povoliť všetkým zobrazenie predchádzajúcich verzií upraveného príspevku. Pokiaľ je to vypnuté, verzie vidí iba obslužný personál" + delete_removed_posts_after: "Príspevky zmazané autorom budú automaticky zmazané po (n) hodinách. Pokiaľ je nastavená 0, príspevky budú zmazané okamžite." + max_image_width: "Maximálna šírka náhľadu obrázkov v príspevku" + max_image_height: "Maximálna výška náhľadu obrázkov v príspevku" + category_featured_topics: "Počet zobrazených tém na jednu kategóriu na stránke /katgórie. Zmena hodnoty sa na stránkach prejaví do 15 minút." + show_subcategory_list: "Zobraz zoznam podkategórií namiesto zoznamu tém po vstupe do menu kategórií" + fixed_category_positions: "Ak je to označené, budete môcť zoraďovať kategórie v pevnom poradí. Ak je neoznačené, kategórie budu zoradené podlľa aktivity." + fixed_category_positions_on_create: "Ak je označené, triedenie kategórií bude spravované v dialógu na vytváranie témy (vyžaduje fixed_category_positions)." + add_rel_nofollow_to_user_content: "Pridať rel nofollow ku všetkému zaslanému používateľskému kontextu s výnimkou interných odkazov (zahrňuje rodičovskú doménu). Ak to zmeníte, musíte vykonať prípaz rebake na všetky príspevky pomocou: \"rake posts:rebake\"" + exclude_rel_nofollow_domains: "Zoznam domén, na ktorých odkazy nebude pridávaný nofollow . tld.com automaticky umožní sub.tld.com. Aby ste umožnili internetovým vyhľadávačom nájsť kompletný obsah mali by ste pridať minimálne doménu najvyššej úrovne týchto stránok. Ak je nejaká časť stránok na iných doménach, pridajte ich tiež." + post_excerpt_maxlength: "Maximálna dĺžka príspevku okrem zhrnutia." + post_onebox_maxlength: "Maximálna dĺžka vloženého Discourse príspevku v znakoch." + onebox_domains_whitelist: "Zoznam domén, pre ktoré je umožnené vkladanie. Tieto domény by mali podporovať OpenGraph alebo oEmbed. Overte ich pomocou http://iframely.com/debug" + logo_url: "Obrázok loga na ľavej hornej časti stránky, mal by byť tvaru širokého obdĺžnika. Ak nebude uvedený, zobrazí sa nadpis stránok." + digest_logo_url: "Obrázok loga na začiatku sumarizačného emailu stránok. Mal by byť tvaru širokého obdĺžnika. Ak nebude uvedený, použije sa logo_url." + logo_small_url: "Malý obrázok loga na ľavej hornej strane stránok, mal by mať tvar štvorca a bude zobrazený pri skrolovaní nadol. Ak nebude uvedený, zobrazí sa piktogram domu." + favicon_url: "Favicon pre Vaše stránky, pozrite http://en.wikipedia.org/wiki/Favicon. Aby fungoval správne s CDN, musí byť vo formáte png" + mobile_logo_url: "Obrázok loga zobrazený na fixnej pozícií v ľavom hornom rohu mobilnej verzie. Mal byť mať tvar štvorca. Ak nie je uvedené, použije sa `logo_url`. Napríklad: http://example.com/uploads/default/logo.png" + apple_touch_icon_url: "Ikona použitá na zariadeniach Apple touch. Doporučovaná veľkosť je 144px na 144px." + notification_email: "Odosieľateľ: email adresa použitá na zasielanie všetkých systémových emailov. Uvedená doména musí mať správne nastavené záznamy SPF, DKIM a opačný PTR aby email dorazil." + email_custom_headers: "Zoznam voliteľných emailových hlavičiek oddelených |" + email_subject: "Voliteľný formát predmetu emailu pre štandardné emaily. Pozrite https://meta.discourse.org/t/customize-subject-format-for-standard-emails/20801" + use_https: "Má byť url stránok (Discourse.base_url) http alebo https? NEZAPÍNAJTE MOŽNOSŤ AK HTTPS NIE JE NASTAVENÉ A FUNKČNÉ!" + summary_score_threshold: "Minimálne požadované skóre príspevku na to aby bol zahrnutý do 'Sumarizuj túto tému'" + summary_posts_required: "Minimálny počet príspevkou predtým ako je zapnuté 'Sumarizuj túto tému'" + summary_likes_required: "Minimálny počet páči sa mi predtým ako je zapnuté 'Sumarizuj túto tému'" + summary_percent_filter: "Ak používateľ klikne na 'Sumarizuj túto tému', zobraz najlepších % príspevkov" + summary_max_results: "Maximálny počet príspevkov vrátených pomocou 'Sumarizuj túto tému'" + enable_private_messages: "Umožni používateľom s úrovňou dôvery 1 (nastaviteľné pomocou min úroveň dôvery na posielanie správ) vytvárať správy a odpovedať na ne" + enable_long_polling: "Zbernica správ pre upozornenia môže používať techniku long-polling" + long_polling_base_url: "Base URL used for long polling (when a CDN is serving dynamic content, be sure to set this to origin pull) eg: http://origin.site.com" + long_polling_interval: "Ako dlho má server čakať pred odpovedaním klientom ak nie sú na zaslanie žiadne dáta (iba pre prihlásených používateľov)" + polling_interval: "Ak sa nepoužíva technika long-polling, ako často majú byť klienti dotazovaný v milisekundách" + anon_polling_interval: "Ako často majú byť dotazovaný anonymný klienti v milisekundách" + background_polling_interval: "Ako často majú byť dotazovaný klienti v milisekundách (ak je okno v pozadí)" + flags_required_to_hide_post: "Počet značiek ktoré automaticky príspevok skryjú a používateľovi bude zaslaná správa (0 pre nikdy)" + cooldown_minutes_after_hiding_posts: "Počet minút koľko musí používateľ počkať pred tým než môže upraviť príspevok skytý pomocou komunitných značiek" + max_topics_in_first_day: "Maximálny počet tém, ktoré používateľ môže vytvoriť v jeho prvý deň ." + max_replies_in_first_day: "Maximálny povolený počet odpovedí, ktoré môže používateľa vytvoriť v jeho prvý deň." + tl2_additional_likes_per_day_multiplier: "Zvýšiť počet páči sa mi na deň pre úroveň dôvery 2 (člen) vynásobením týmto číslom" + tl3_additional_likes_per_day_multiplier: "Zvýšiť počet páči sa mi na deň pre úroveň dôvery 3 (bežný) vynásobením týmto číslom" + tl4_additional_likes_per_day_multiplier: "Zvýšiť počet páči sa mi na deň pre úroveň dôvery 4 (vedúci) vynásobením týmto číslom" + num_flags_to_block_new_user: "Ak príspevky nového používateľa dostanú takéto množstvo spamových vlajok od num_users_to_block_new_user rôznych používateľov, skry všetky jeho príspevky a zabráň vytváraniu príspevkov v budúcnosti. 0 na vypnutie." + num_users_to_block_new_user: "Ak príspevky nového používateľa dostanú num_flags_to_block_new_user spamových vlajok od takéhoto množstva rôznych používateľov, skry všetky jeho príspevky a zabráň vytváraniu príspevkov v budúcnosti. 0 na vypnutie." + notify_mods_when_user_blocked: "Ak je používateľ automaticky zablokovaný, pošli správu všetkým moderátorom." + flag_sockpuppets: "Ak nový používateľ odpovedá na tému z rovnakej IP adresy, ako nový používateľ, ktorý danú tému vytvoril, označ oba ich príspevky ako potencionálny spam." + post_undo_action_window_mins: "Počet minút počas ktorých môžu užívatelia zrušiť poslednú akciu na príspevku (\"Páči sa\", označenie, atď..)." + must_approve_users: "Obsluha musí povoliť účty všetkým novým užívateľom skôr než im bude povolený prístup na stránku. UPOZORNENIE: zapnutie na živej stránke spôsobí zrušenie prístupu pre existujúcich používateľov, okrem obsluhy!" + pending_users_reminder_delay: "Upozorni moderátora ak nový užívateľ čaká na schválenie dlhšie ako tento počet hodín. Nastavte -1 pre vypnutie upozornenia." + allow_moderators_to_create_categories: "Povoliť moderátorom vytváranie nových kategórií" + use_admin_ip_whitelist: "Správcovia sa môťu prihlásiť iba pokiaľ pristupujú z adresy uvedenej v zozname kontrolovaných IP adries (Admin > Logs > Screened Ips)" + post_menu_hidden_items: "Položky vo východzích nastaveniach menu schované pri príspevkovom menu, dokiaľ neni kliknuté na rozbaľovaciu elipsu." + share_links: "Uveďte, ktoré položky sa maju zobraziť v zdieľacom dialógu a v akom poradí." + track_external_right_clicks: "Sledovať externé odkazy na ktore sa klkne pravým tlačidlom (npar. otvorenie v novej záložke) Vypnuté vo východzích nastaveniach, pretože to prepisuje URL adresy" + site_contact_username: "Platné uťívateľské meno obsluhy, ktorá bude posielať automatizované správy. Pokiaľ je vynechané, použije sa východzí systémový účet. " + send_welcome_message: "Poslač všetkým novým užívateľom uvítaciu správu s príručkou ako začať. " + suppress_reply_directly_below: "Nezobrazovať rozbaľovacie tlačidlo s počtom odpovedí ak je k príspevku len jedna odpoveď priamo pod ním." + suppress_reply_directly_above: "Nezobrazovať rozbaľovacie tlačidlo v-odpovedi-na ak je len jedna odpoveď priamo nad príspevkom." + suppress_reply_when_quoting: "Nezobrazovať rozbaľovacie tlačidlo v-odpovedi-na ak príspevok cituje odpoveď." + max_reply_history: "Maximálny počet odpovedí ktoré sa zobrazia po rozbalení v-odpovedi-na" + topics_per_period_in_top_summary: "Zobrazovaný počet najlepších tém vo východzom zozname najlepších tém." + topics_per_period_in_top_page: "Zobrazovaný počet najlepších tém vzozname po rozbalení 'Ukáž viac' najlepších tém." + redirect_users_to_top_page: "Automaticky presmeruj nových a dlho neprihlásených užívateľov na hlavnú stránku. " + top_page_default_timeframe: "Východzí interval pre presmerovanie na hlavnú stránku." + show_email_on_profile: "Zobraziť užívateľov email na ich profile (viditeľné len nimi samotnými a obsluhou)" + email_token_valid_hours: "Platnosť tokenov pre Zabudnuté heslo a aktiváciu účtu v (n) hodinách." + email_token_grace_period_hours: "Platnosť tokenov pre Zabudnuté heslo a aktiváciu účtu v (n) hodinách po ich uplatnení." + enable_badges: "Povoliť systém odznakov" + enable_whispers: "Povoliť súkromnú konverzáciu pre redakciu vrámci témy. (experimantálne)" + log_out_strict: "Pri odhlasovaní odhlásiť VŠETKY sessiony používateľa, na všetkých zariadeniach." + port: "POZOR! LEN PRE VÝVOJÁROV! Použiť tento HTTP port namiesto predvoleného portu 80. Nechajte prázdne pre port 80." + force_hostname: "POZOR! LEN PRE VÝVOJÁROV! V URL zadajte hostname. Ak chcete použiť predvolené, nechajte políčko prázdne." + min_username_length: "Minimálna dĺžka používateľského mena v znakoch." + max_username_length: "Maximálna dĺžka používateľského mena v znakoch." + reserved_usernames: "Používateľské mená, ktorých registrácia nie je povolená." + min_password_length: "Minimálna dĺžka hesla." + block_common_passwords: "Nepovoliť heslá, ktoré sú v zozname 10 000 najbežnejších hesiel." + sso_url: "URL pre single sign on." + enable_local_logins: "Povoliť pouťívanie lokálnych účtov a hesiel. (Poznámka: musí to byť zapnuté pre fungovanie pozvánok)" + allow_new_registrations: "Povoliť registráciu nových užívateľov. Odznačte to ak chcete zabrániť vytváraniu nových účtov. " + enable_signup_cta: "Zobraz oznámenie pre navrátilých anonymných užívateľov s výzvou na registráciu účtu. " + enable_yahoo_logins: "Povoliť autentifikáciu pomocou Yahoo." + enable_google_oauth2_logins: "Povoliť Google Oauth2 autentifikáciu. Táto métoda je podporovaná Googlom. Vyžaduje kľúč a šifru." + google_oauth2_client_id: "Client ID Vašej Google aplikácie." + google_oauth2_client_secret: "Client secret Vašej Google aplikácie." + enable_twitter_logins: "Povoliť autentifikáciu cez Twitter, vyžaduje twitter_consmer_key a twiiter_consumer_secret" + twitter_consumer_key: "Consumer key pre Twitter autentifikáciu, registrovaný na http://dev.twitter.com" + twitter_consumer_secret: "Consumer secret pre Twitter autentifikáciu, registrované na http://dev.twitter.com" + enable_facebook_logins: "Povoliť autentifikáciu pomocou Facebook, vyžaduje facebook_app_id a facebook_app_secret." + facebook_app_id: "App id pre Facebook autentifikáciu, registrované na https://developers.facebook.com/apps" + facebook_app_secret: "App secret pre Facebook autentifikáciu, registrované na https://developers.facebook.com/apps" + enable_github_logins: "Povoliť autentifikáciu cez Github, vyžaduje github_client_id a github_client_secret" + github_client_id: "Client id pre Github autentifikáciu, registrované na https://github.com/settings/applications" + github_client_secret: "Client secret pre Github autentifikáciu, registrované na https://github.com/settings/applications" + allow_restore: "Umožniť obnovu, ktorá nahradí VŠETKY data na stránkach! Ponechajte prázdne okrem prípadu ak chcete obnoviť zo zálohy." + maximum_backups: "Maximálny počet záloh udržiavaných na disku. Staršie zálohy budu automaticky vymazané" + automatic_backups_enabled: "Spustiť automatické zálohy podľa nastavenia intervalu záloh" + backup_frequency: "Ako často máme vytvárať zálohu stránok, v dňoch." + enable_s3_backups: "Po dokončení nahrať zálohy na S3. DÔLEŽITÉ: požaduje správne nastavenie prístupových údajov na S3 v menu Súbory." + s3_backup_bucket: "Vzdialený S3 bucket na uloženie záloh. VAROVANIE: Uistite sa, že ide o súkromný S3 bucket." + backup_time_of_day: "Čas v UTC, kedy sa má spustiť záloha." + backup_with_uploads: "Do pravidelných záloh ulož i nahrané súbory. Pri vypnutej voľbe sa uloží iba záloha databázy." + active_user_rate_limit_secs: "Ako často máme aktualizovať pole 'naposledy videný o', v sekundách" + verbose_localization: "Zobraziť rozšírené lokalizačné tipy v rozhraní" + previous_visit_timeout_hours: "Ako dlho trvá návšteva predtým, ako ju pokladáme za 'predchádzajúcu' návštevu, v hodinách" + rate_limit_create_topic: "Po vytvorení témy musí používateľ počkať (n) sekúnd pred vytvorením ďalšej témy." + rate_limit_create_post: "Po odoslaní prísprevku používateľ počkať (n) sekúnd pred vytvorením ďalšieho príspevku." + rate_limit_new_user_create_topic: "Po vytvorení témy musí používateľ počkať (n) sekúnd pred vytvorením ďalšej témy." + rate_limit_new_user_create_post: "Po odoslaní príspevku používateľ počkať (n) sekúnd pred vytvorením ďalšieho príspevku." + max_likes_per_day: "Maximálny počet páči sa mi používateľa denne." + max_flags_per_day: "Maximálny počet príznakov používateľa denne." + max_bookmarks_per_day: "Maximálny počet záložiek na jedného používateľa denne." + max_edits_per_day: "Maximálny počet úprav používateľa denne." + max_topics_per_day: "Maximálny počet tém používateľa denne." + max_private_messages_per_day: "Maximálny počet správ ktoré môže používateľ denne vytvoriť." + max_invites_per_day: "Maximálny počet pozvánok ktoré môže používateľ denne zaslať." + max_topic_invitations_per_day: "Maximálny počet pozvánok do tém ktoré môže používateľ denne zaslať." + suggested_topics: "Zobrazovaný počet navrhovaných tém na konci témy." + limit_suggested_to_category: "V navrhovaných témach zobraziť iba témy z aktuálnej kategórie." + clean_up_uploads: "Na zamedzenie nezákonného uloženia odstrániť opustené nahrané súbory na ktoré nevedie žiadny odkaz. VAROVANIE: pred zapnutím tohoto nastavenie možno chcete zálohovať Váš adresár s nahranými súbormi." + clean_orphan_uploads_grace_period_hours: "Doba (v hodinách) pred odstránením opustených nahraných súborov." + purge_deleted_uploads_grace_period_days: "Doba (v dňoch) pred úplným vymazaním odstráneného nahraného súboru." + purge_unactivated_users_grace_period_days: "Doba (v dňoch) pred tým, než je užívateľ, ktorý si neaktivoval svoj účet vymazaný." + enable_s3_uploads: "Ukladať nahrávané súbory na úložište S3. DÔLEŽITÉ: vyžaduje platné prístupové údaje S3 (id prístupového kľúča (access key id) a tajný prístupový kľúč (secret access key))." + s3_use_iam_profile: 'Použiť rolu AWS EC2 IAM na načítanie kľúčov. POZNÁMKA: zapnutie prepíše nastavený "s3 prístupový kľúč id (s3 access key id)" a "s3 tajný prístupový kľúč (s3 secret access key)".' + s3_upload_bucket: "Amazon S3 bucket name, do ktorého budú nahraté súbory. POZOR: musí byť malými písmenami, žiadne bodky a žiadne podtržítka." + s3_access_key_id: "Amazon S3 access key id, ktoré bude použité pre nahrávanie obrázkov." + s3_secret_access_key: "Amazon S3 secret access key, ktorý bude použitý pre nahrávanie obrázkov." + s3_region: "Amazon S3 region name, ktorý bude použitý pre nahrávanie súborov." + s3_cdn_url: "CDN URL ktoré sa použije na všetky dáta v s3 (napríklad https://cdn.niekde.com). VAROVANIE: po zmene tohoto nastavenia musíte použiť príkaz rebake na všetky staré príspevky." + avatar_sizes: "Zoznam automaticky generovaných veľkostí avatarov." + external_system_avatars_enabled: "Použiť externú avatar službu." + external_system_avatars_url: "URL externej avatar služby. Dostupné náhrady sú {username} {first_letter} {color} {size}" + default_opengraph_image_url: "URL štandardného opengraph obrázku." + enable_flash_video_onebox: "Povolenia vkladania odkazov na swf a flv (Adobe Flash) v onebox. VAROVANIE: môže vniesť bezpečnostné riziká." + default_invitee_trust_level: "Predvolená úroveň dôvery (0-4) pre pozvaných používateľov." + default_trust_level: "Východzí stupeň dôvery (0-4) pre všekých nových užívateľov. UPOZORNENIE: Zmena nastavenia Vás môže vystaviť riziku spamovania. " + tl1_requires_topics_entered: "Koľko tém musí nový užívateľ zadať pred povýšením na stupeň dôvery 1." + tl1_requires_read_posts: "Koľko príspevkov musí nový užívateľ prečítať pred povýšením na stupeň dôvery 1." + tl1_requires_time_spent_mins: "Koľko minút musí nový užívateľ čítať príspevky pred povýšením na stupeň dôvery 1." + tl2_requires_topics_entered: "Koľko tém musí nový užívateľ zadať pred povýšením na stupeň dôvery 2." + tl2_requires_read_posts: "Koľko príspevkov musí nový užívateľ prečítať pred povýšením na stupeň dôvery 2." + tl2_requires_time_spent_mins: "Koľko minút musí nový užívateľ čítať príspevky pred povýšením na stupeň dôvery 2." + tl2_requires_days_visited: "Koľko dní musí nový užívateľ navštevovať stránku pred povýšením na stupeň dôvery 2." + tl2_requires_likes_received: "Koľko \"Páči sa\" musí nový užívateľ dostať pred povýšením na stupeň dôvery 2." + tl2_requires_likes_given: "Koľko \"Páči sa\" musí nový užívateľ rozdať pred povýšením na stupeň dôvery 2." + tl2_requires_topic_reply_count: "Na koľko tém musí nový užívateľ odpovedať pred povýšením na stupeň dôvery 2." + tl3_requires_days_visited: "Minimálny počet navštevných dní, ktoré musí mať užívateľ za posledných 100 dní potrebných pre kvalifikáciu na dosiahnute 3 levelu dôvery. (0 až 100)" + tl3_requires_topics_replied_to: "Minimálny počet tém, na ktoré musí mať užívateľ odpovedať za posledných 100 dní potrebných pre kvalifikáciu na dosiahnute 3 levelu dôvery. (0 a viac)" + tl3_requires_topics_viewed: "Percento tém ktoré musí mať užívateľ pozreté, za posledných 100 dní pre kvalifikáciu na dosiahnute 3 levelu dôvery. (0 až 100)" + tl3_requires_posts_read: "Percento príspevkov, ktoré musí mať užívateľ pozreté za posledných 100 dní pre kvalifikáciu na dosiahnute 3 levelu dôvery. (0 až 100)" + tl3_requires_topics_viewed_all_time: "Minimálny počet všetkých tém, ktoré musí mať užívateľ pozreté pre kvalifikáciu na dosiahnute 3 levelu dôvery. " + tl3_requires_posts_read_all_time: "Minimálny počet všetkých príspevkov, ktoré musí mať užívateľ prečítané pre kvalifikáciu na 3 level dôvery. " + tl3_promotion_min_duration: "MInimálny počet dní po pridelení 3 levelu dôvery než môže byť užívateľ degradovaný späť na 3 level dôvery." + tl3_requires_likes_given: "Minimálny počet \"Páči sa\", ktoré musia byť udelené za posledných 100 dní pre kvalifikáciu na dosiahnutie 3 levelu dôvery. " + tl3_requires_likes_received: "Minimálny počet \"Páči sa\", ktoré musia byť prijaté za posledných 100 dní pre kvalifikáciu na dosiahnutie 3 levelu dôvery. " + tl3_links_no_follow: "Neodstraňujte rel = nofollow z odkazov pridaných užívateľmi s úrovňou dôveryhodnosti 3 ." + min_trust_to_create_topic: "MInimálna úroveň dôvery na vytvorenie novej témy." + min_trust_to_edit_wiki_post: "MInimálna úroveň dôvery na úpravu wiki príspevku." + min_trust_to_send_messages: "MInimálna úroveň dôvery na vytvorenie novej osobnej správy." + newuser_max_links: "Koľko odkazov môže nový používateľ pridať do príspevku." + newuser_max_images: "Koľko obrázkov môže nový používateľ pridať do príspevku." + newuser_max_attachments: "Koľko príloh môže nový používateľ pridať do príspevku." + newuser_max_mentions_per_post: "Maximálny počet notifikácií typu @meno môže nový užívateľ použiť v príspevku." + newuser_max_replies_per_topic: "Maximálny počet odpovedí ktoré môže nový používateľ pridať do jednej témy pokiaľ na ne niekto neodpovie." + max_mentions_per_post: "Maximálný počet notifikácií typu @meno, ktoré môže ktokoľvek použiť v rámci jedného príspevku." + max_users_notified_per_group_mention: "Maximálny počet používateľov, ktorý môžu dostať notifikácie, v prípade notifikovania celej skupiny (ak sa dosiahne maximum, žiadne ďalšie notifikácie nebudú zaslané)" + create_thumbnails: "Vytvor náhľad a okraje pre obrázoky, ktoré sú príliš veľké aby sa zmestili do príspevku." + title_max_word_length: "Maximálna povolená dĺžka slov v názve témy, v znakoch." + allow_uppercase_posts: "Povoliť kapitálky v názve témy, alebo tele príspevku." + search: + types: + category: 'Kategórie' + user: 'Používatelia' + login: + admin_not_allowed_from_ip_address: "Nie je možné prihlásenie ako admin z tejto IP adresy." + system_messages: + welcome_user: + subject_template: "Vitajte na %{site_name}!" + welcome_invite: + subject_template: "Vitajte na %{site_name}!" + subject_re: "Re:" + subject_pm: "[PM]" + user_notifications: + previous_discussion: "Prechádzajúce odpovede" + unsubscribe: + title: "Odhlásiť" + user_replied: + subject_template: "[%{site_name}] %{topic_title}" + text_body_template: | + %{message} + + %{context} + + --- + %{respond_instructions} + user_quoted: + subject_template: "[%{site_name}] %{topic_title}" + text_body_template: | + %{message} + + %{context} + + --- + %{respond_instructions} + user_mentioned: + subject_template: "[%{site_name}] %{topic_title}" + text_body_template: | + %{message} + + %{context} + + --- + %{respond_instructions} + user_group_mentioned: + subject_template: "[%{site_name}] %{topic_title}" + text_body_template: | + %{message} + + %{context} + + --- + %{respond_instructions} + user_posted: + subject_template: "[%{site_name}] %{topic_title}" + text_body_template: | + %{message} + + %{context} + + --- + %{respond_instructions} + user_posted_pm: + subject_template: "[%{site_name}] [PM] %{topic_title}" + text_body_template: | + %{message} + + %{context} + + --- + %{respond_instructions} + digest: + top_topics: "Populárne príspevky" + other_new_topics: "Populárne témy" + click_here: "kliknite tu" + set_password: + subject_template: "[%{site_name}] Nastaviť heslo" + admin_login: + subject_template: "[%{site_name}] Prihlásenie" + account_created: + subject_template: "[%{site_name}] Váš nový účet" + authorize_email: + subject_template: "[%{site_name}] Potvrďte Vašu novú email adresu" + signup_after_approval: + subject_template: "Váš účet bol schválený na %{site_name}!" + signup: + subject_template: "[%{site_name}] Potvrďte Váš nový účet" + page_not_found: + title: "Stránka ktorú požadujete neexistuje alebo je súkromná." + popular_topics: "Populárne" + recent_topics: "Nedávne" + see_more: "Viac" + search_title: "Prehľadať tieto stránky" + search_google: "Google" + terms_of_service: + title: "Podmienky používania" + signup_form_message: 'Prečítal som si Podmienky používania a súhlasím s nimi.' + upload: + pasted_image_filename: "Vložený obrázok" + file_missing: "Ľutujeme, ale musíte poskytnúť súbor na nahranie." + email_log: + anonymous_user: "Používateľ je anonymný" + seen_recently: "Používateľ bol nedávno online" + already_read: "používateľ si už prečítal tento príspevok" + message_blank: "správa je prázdna" + body_blank: "telo je prázdne" + color_schemes: + base_theme_name: "Základ" + about: "O stránke" + guidelines: "Pravidlá" + privacy: "Súkromie" + edit_this_page: "Upraviť túto stránku" + csv_export: + boolean_yes: "Áno" + boolean_no: "Nie" + guidelines_topic: + title: "FAQ/Pravidlá" + body: | + + + ## [Toto je miesto pre civilizovanú diskusiu](#civilized) + + Prosíme majte k tejto diskusii rešpekt podobný ako k verejnému parku. My, sme tiež zdieľaný zdroj — miesto na zdieľanie znalostí, vedomostí a záujmov pomocou nepretržitej diskusie. + + Toto nie sú jednoznačné pravidlá, skôr návod ľudskému úsudku naše komunity. Použite tieto pravidlá na udržanie prehľadnú a svetlého miesta pre civilizovanú verejnú diskusiu. + + + + ## [Vylepšujte diskusiu](#improve) + + Pomôžte nám tvoriť toto skvelé miesto akýmkoľvek snahou o zlepšenie diskuzie, stačí drobnosť. Ak nie ste si istý že Váš príspevok posúva diskuziu, premyslite si čo chcete povedať a skúste neskôr. + + Diskutované témy sú nám blízke a chceme, aby ste sa správali tak, akoby Vám boli blízke tiež. Rešpektujte témy a diskutujúcich dokonca i v prípade, ak nesúhlasíte s tým, čo bolo povedané. + + Jedným zo spôsobov ako vylepšiť diskusiu je objavenie tej ktoré už prebieha. Prosíme, venujte trochu času zoznámeniu sa s témami predtým, ako začnete odpovedať alebo začínať svoje vlastné a budete mať vačšiu šancu stretnúť tých, ktorý s Vami zdieľajú záujmy. + + + + ## [Buďte príjemný i keď nesúhlasíte](#agreeable) + + Môžete mať túžbu odpovedať na niečo s čím nesúhlasíte. To je v poriadku. Ale pamätajte _kritizujte myšienky a nie ľudí_. Prosíme, vyvarujte sa: + + * Posmeškom. + * Útokom na konkrétnu osobu. + * Odpovediam na tón príspevku miesto skutočného obsahu. + * Impulzívnym reakciám. + + Namiesto toho poskytnite logické proti argumenty, ktoré zlepšia konverzáciu. + + + + ## [Vaša účasť sa počíta](#participate) + + Konverzácie, ktoré tu máme nastavujú tón pre všetkých. Pomôžte nám ovplyvniť budúcnosť tejto komunity zapojením sa do diskusií ktoré z tohoto fóra robia zaujímavé miesto a vyhýbaním sa tým ktoré to nerobia. + + Discourse poskytuje nástroje, ktoré komunite spoločne umožňujú identifikovať najlepšie (a najhoršie) príspevky, záložky, páči sa mi, značky, odpovede, úpravy a podobne. Použite ich na vylepšenie Vašej skúsenosti i skúsenosti kohokoľvek iného. + + Poďme náš park zanechať v lepšom stave než v akom sme ho našli. + + + + ## [Ak vidíte problém označte ho](#flag-problems) + + Moderátori majú špeciálnu autoritu, sú zodpovedný za fórum. Ale Vy tiež. S Vašou pomocou sa moderátori môžu stať sprostredkovateľmi a nie iba školníkmi alebo políciou. + + Ak vidíte nevhodné chovanie, neodpovedajte. Reakciou naň ho posiľujete, míňate svoju energiu a strácate čas nás všetkých. _Oba ho označte_. Ak sa zíde viačej značiek, budú prijaté opatrenia, či už automatické alebo zásahom moderátora. + + Na správu komunity majú moderátori vyhradené práva na odstránenie akéhokoľvek obsahu a používateľského účtu kedukoľvek z akéhokoľvek dôvodu. Moderátori žiadnym spôsobom nekontrolujú príspevky, moderátori a vlastníci stránky nepreberajú žiadku zodpovednosť za obsah publikovaný komunitou. + + + + ## [Buďte civilizovaný](#be-civil) + + Nič nesabotuje zdravú diskusiu tak ako hrubosť: + + * Buďte zdvorilí, Neuverejňujte nič, čo by múdra osoba považovala za urážlivé, znevažujúce alebo nenávistné. + * Udržujte poriadok. Neuverejnujte nič nemravné alebo explicitne sexuálne. + * Rešpektujte iných. Neprenasledujte alebo nezarmucujte ostatných, nenapodobnujte ľudí, alebo nezverejňujte ich súkromné informácie. + * Rešpektujte naše fórum. Neuverejňujte spam alebo iným spôsobom nevandalizujte fórum. + + Toto nie sú jednoznačné pravidlá s presnými definiciami — vyhnite sa čo i len _náznaku_ akejkoľvek z týchto vecí. Ak nie ste si istý, spýtajte sa, či by Váš príspevok bol zverejnený na hlavnej strane New York Times. + + Toto je verejné fórum a diskusie sú indexované vyhľadávačmi. Udržujte jazyk, odkazy a obrázky bezpečné pre rodinu a priateĺov. + + + + ## [Udržujte poriadok](#keep-tidy) + + Vynaložte snahu dať veci na správne miesto, tak môžeme stráviť viac času diskusiou a menej udržiavaním poriadku. Takže: + + * Nezačínajte tému v nesprávnej kategórií. + * Neuverejňujte rovnaké veci vo viacetých témach. + * Nepublikujte príspevky bez obsahu. + * Nepresmerujte tému zmenou uprostred. + * Nepodpisujte sa — každý príspevok má pripojený odkaz na Váš profil. + + Namiesto poslania “+1” or “Súhlasím”, radšej použite tlačítko Páči sa mi. Namiesto radikálnej zmeny témy v priebehu diskusie radšej odpovedzte spojenou témou. + + + + ## [Uverejňujte iba svoj obsah](#stealing) + + Bez dovolenia nemôžete publikovať nič digitálne, čo patrí niekomu inému. Nemôžete publikovať popis, odkazy alebo metódy na kradnutie niekoho intelektuálneho vlastníctva (softvéru, videa, audia, obrázkov), alebo porušovať akýkoľvek iný zákon. + + + + ## [Založené na Vás](#power) + + Táto stránka je prevádzkovaná [miestnym priateľským personálom](/about) a *Vami*, komunitou. Ak máte akékoľvek ďalšie otázky ako by tu veci mali fungovať, založte novú tému v [kategórií spätná väzba](/c/site-feedback) a poďme diskutovať! Ak ste narazili na kritický alebo urgentný problém ktorý nemôže byť riešený pomocou tém v meta alebo príznakom, kontaktujte nás pomocou [stránky personálu](/about). + + + + ## [Podmienky](#tos) + + Áno, právnický žargón je nudný, ale musíme chrániť seba – tým následne i Vás a vaše dáta – voči nepriateľským ľuďom. Máme [Podmienky](/tos) popisujúce Vaše (a naše ) správanie a práva súvisiace s obsahom, súkromým a legislatívou. K používaniu tejto služby musíte dodžiavať naše [Pravidlá](/tos). + tos_topic: + title: "Podmienky používania" + badges: + long_descriptions: + basic: | + Tento odznak je udelený ak dosiahnete stupeň dóvery 1. Ďakujeme za Váš čas , prečítanie niekoľkých tém a zoznámenie sa s tým o čom je naša komunita. Odstránili sme obmedzenia pre nového používateľa a odteraz máte všetky základné práva, ako je zasielanie osobných správ, značkovanie, wiki úpravy a možnosť publikovať obrázky a viaceré odkazy. + admin_login: + success: "Email odoslaný" + error: "Chyba !" + email_input: "Email administrátora" + submit_button: "Poslať email" + discourse_hub: + access_token_problem: "Povedzte administrátorovi: Prosím aktualizujte nastavenia stránky, aby obsahovali správny discourse_org_access_key." + performance_report: + initial_post_raw: Táto téma obsahuje denné reporty rýchlosti Vašich stránok. + initial_topic_title: Reporty rýchlosti stránok + time: + <<: *datetime_formats + activemodel: + errors: + <<: *errors diff --git a/plugins/poll/config/locales/client.sk.yml b/plugins/poll/config/locales/client.sk.yml new file mode 100644 index 000000000..2ae88650f --- /dev/null +++ b/plugins/poll/config/locales/client.sk.yml @@ -0,0 +1,53 @@ +# encoding: utf-8 +# +# Never edit this file. It will be overwritten when translations are pulled from Transifex. +# +# To work with us on translations, join this project: +# https://www.transifex.com/projects/p/discourse-org/ + +sk: + js: + poll: + voters: + one: "volič" + few: "voliči" + other: "voliči" + total_votes: + one: "hlas celkom" + few: "hlasy celkom" + other: "hlasov celkom" + average_rating: "Priemerné hodnotenie: %{average}." + multiple: + help: + at_least_min_options: + one: "Musíte si vybrať minimálne %{count} možnosť." + few: "Musíte si vybrať minimálne %{count} možnosti." + other: "Musíte si vybrať minimálne %{count} možností." + up_to_max_options: + one: "Môžete si vybrať maximálne %{count} možnosť." + few: "Môžete si vybrať maximálne %{count} možnosti." + other: "Môžete si vybrať maximálne %{count} možností." + x_options: + one: "Musíte si vybrať %{count} možnosť." + few: "Musíte si vybrať %{count} možnosti." + other: "Musíte si vybrať %{count} možností." + between_min_and_max_options: "Môžete si vybrať medzi možnosťami %{min}%{max}." + cast-votes: + title: "Hlasovať" + label: "Hlasuj teraz!" + show-results: + title: "Zobraz výsledky hlasovania" + label: "Zobraz výsledky" + hide-results: + title: "Návrat na odovzdané hlasy" + label: "Skyť výsledky" + open: + title: "Zahájiť hlasovanie" + label: "Zahájiť" + confirm: "Ste si istý, že chcete zahájiť toto hlasovanie?" + close: + title: "Zatvoriť hlasovanie" + label: "Zatvoriť" + confirm: "Ste si istý, že chcete zatvoriť toto hlasovanie?" + error_while_toggling_status: "Pri zmene stavu hlasovania sa vyskytla chyba." + error_while_casting_votes: "Pri hlasovaní sa vyskytla chyba." diff --git a/plugins/poll/config/locales/server.sk.yml b/plugins/poll/config/locales/server.sk.yml new file mode 100644 index 000000000..665bc70c7 --- /dev/null +++ b/plugins/poll/config/locales/server.sk.yml @@ -0,0 +1,41 @@ +# encoding: utf-8 +# +# Never edit this file. It will be overwritten when translations are pulled from Transifex. +# +# To work with us on translations, join this project: +# https://www.transifex.com/projects/p/discourse-org/ + +sk: + site_settings: + poll_enabled: "Umožnit používaťeľom vytvárať hlasovania?" + poll_maximum_options: "Maximálny počet povolených možností v hlasovaní." + poll: + multiple_polls_without_name: "Existujú viaceré hlasovania bez mena. Použite atribút 'meno', aby ste hlasovanie jednoznačne rozlíšili." + multiple_polls_with_same_name: "Existujú viaceré hlasovania s rovnakým menom: %{name}. Použite atribút 'meno', aby ste hlasovanie jednoznačne rozlíšili." + default_poll_must_have_at_least_2_options: "Hlasovanie musí mať minimálne 2 možnosti." + named_poll_must_have_at_least_2_options: "Hlasovanie s názvom %{name} musí mať minimálne 2 možnosti." + default_poll_must_have_less_options: + one: "Hlasovanie musí mať menej ako jednu možnosť." + few: "Hlasovanie musí mať menej ako %{count} možnosti." + other: "Hlasovanie musí mať menej ako %{count} možnosti." + named_poll_must_have_less_options: + one: "Hlasovanie s názvom %{name} musí mať menej ako 1 možnost." + few: "Hlasovanie s názvom %{name} musí mať menej ako %{count} možnosti." + other: "Hlasovanie s názvom %{name} musí mať menej ako %{count} možností." + default_poll_must_have_different_options: "Hlasovanie musí mať rôzne možnosti." + named_poll_must_have_different_options: "Hlasovanie s názvom %{name} musí mať rôzne možnosti." + default_poll_with_multiple_choices_has_invalid_parameters: "Hlasovanie s viac možnosťami má nesprávne parametre." + named_poll_with_multiple_choices_has_invalid_parameters: "Hlasovanie s názvom %{name} s viac možnosťami má nesprávne parametre." + requires_at_least_1_valid_option: "Musite vybrať aspoň 1 platnú možnosť." + cannot_change_polls_after_5_minutes: "Po prvých 5 minútach už nemôžete pridať, odstrániť alebo premenovať hlasovanie." + op_cannot_edit_options_after_5_minutes: "Po prvých 5 minútach už nemôžete pridať alebo odstrániť možnosti hlasovania. Ak potrebujete upraviť možnosti hlasovania prosím kontaktujte moderátora." + staff_cannot_add_or_remove_options_after_5_minutes: "Po prvých 5 minútach už nemôžete pridať alebo odstrániť možnosti hlasovania. Miesto toho by ste mali uzavrieť túto tému a miesto nej vytvoriť inú." + no_polls_associated_with_this_post: "S týmto príspevkom nie sú spojené žiadne hlasovania." + no_poll_with_this_name: "S týmto príspevkom nie je spojené žiadne hlasovanie s názvom %{name}." + post_is_deleted: "Na vymazanom príspevku nie je možné vykonať." + topic_must_be_open_to_vote: "Na odovzdanie hlasu téma otvorená." + poll_must_be_open_to_vote: "Na odovzdanie hlasu musí byť hlasovanie otvorené." + topic_must_be_open_to_toggle_status: "Na zmenu stavu musí byť téma otvorená." + only_staff_or_op_can_toggle_status: "Zmeniť stav hlasovania môže iba zamestnanec alebo pôvodný prispievateľ." + email: + link_to_poll: "Kliknite na zobrazenie hlasovania." diff --git a/public/403.sk.html b/public/403.sk.html new file mode 100644 index 000000000..eca597310 --- /dev/null +++ b/public/403.sk.html @@ -0,0 +1,26 @@ + + +Na toto nemáte oprávnenie (403) + + + + +
+

403

+

Nemáte oprávnenie na zobrazenie týchto údajov!

+ +

Toto bude nahradené vlastnou Discourse 403 stránkou.

+
+ + diff --git a/public/422.sk.html b/public/422.sk.html new file mode 100644 index 000000000..36e3684c1 --- /dev/null +++ b/public/422.sk.html @@ -0,0 +1,25 @@ + + +Požadovaná zmena bola zamietnutá (422) + + + + + +
+

Požadovaná zmena bola zamietnutá.

+

Možno ste skúšali zmeniť niečo k čomu nemáte prístup.

+
+ + diff --git a/public/500.sk.html b/public/500.sk.html new file mode 100644 index 000000000..625a96497 --- /dev/null +++ b/public/500.sk.html @@ -0,0 +1,12 @@ + + +Oops - Chyba 500 + + + +

Oops

+

V softvéri poháňajúcom toto diskusné fórum došlo k neočakávanej chybe. Ospravedlňujeme sa za spôsobené nepríjemnosti.

+

Podrobnosti o chybe boli zaznamenané a vygenerovalo sa automatické upozornenie. Pozrieme sa na to.

+

Nie je potrebná žiadna ďalšia akcia. Ak však chyba pretrváva, môžete poskytnúť dodatočné informácie, vrátane krokov vedúcich k navodeniu chyby založením diskusnej témy v meta kategórií.

+ + diff --git a/public/503.sk.html b/public/503.sk.html new file mode 100644 index 000000000..eae9f0922 --- /dev/null +++ b/public/503.sk.html @@ -0,0 +1,11 @@ + + +Na stránke sa práve vykonáva údržba. + + + +

Stránka je momentálne nedostupná z dôvodu plánovanej údržby

+

Skúste prosím znova o niekoľko minút.

+

Ospravedlňujeme sa za spôsobené nepríjemnosti.

+ + diff --git a/vendor/gems/discourse_imgur/lib/discourse_imgur/locale/server.sk.yml b/vendor/gems/discourse_imgur/lib/discourse_imgur/locale/server.sk.yml new file mode 100644 index 000000000..60f6f6db4 --- /dev/null +++ b/vendor/gems/discourse_imgur/lib/discourse_imgur/locale/server.sk.yml @@ -0,0 +1,12 @@ +# encoding: utf-8 +# +# Never edit this file. It will be overwritten when translations are pulled from Transifex. +# +# To work with us on translations, join this project: +# https://www.transifex.com/projects/p/discourse-org/ + +sk: + site_settings: + enable_imgur: "Zapnúť imgur api pre upload, nehostujte súbory lokálne" + imgur_client_id: "Vaše imgur.com klientské ID potrebné pre funkčnosť uploadu obrázku" + imgur_client_secret: "Váš imgur.com klientský kľúč. Nie je aktuálne potrebný pre funkčnosť uploadu obrázkov, ale je možné že v budúcnosti bude." From 460def739be5a46e1d970973e019fa3859244d70 Mon Sep 17 00:00:00 2001 From: Mikhail Vink Date: Tue, 15 Dec 2015 22:39:08 +0100 Subject: [PATCH 003/185] Updating Jive import script with images/attachments uploader --- script/import_scripts/jive.rb | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/script/import_scripts/jive.rb b/script/import_scripts/jive.rb index bb5cedd85..16e7a4d86 100644 --- a/script/import_scripts/jive.rb +++ b/script/import_scripts/jive.rb @@ -288,6 +288,37 @@ class ImportScripts::Jive < ImportScripts::Base thread_map[thread.threadid] = thread.messageid + #IMAGE UPLOADER + if thread.imagecount + Dir.foreach("/var/www/discourse/script/import_scripts/jive/img/#{thread.messageid}") do |item| + next if item == '.' or item == '..' or item == '.DS_Store' + photo_path = "/var/www/discourse/script/import_scripts/jive/img/#{thread.messageid}/#{item}" + upload = create_upload(thread.userid, photo_path, File.basename(photo_path)) + if upload.persisted? + puts "Image upload is successful for #{photo_path}, new path is #{upload.url}!" + thread.body.gsub!(item,upload.url) + else + puts "Error: Image upload is not successful for #{photo_path}!" + end + end + end + + #ATTACHMENT UPLOADER + if thread.attachmentcount + Dir.foreach("/var/www/discourse/script/import_scripts/jive/attach/#{thread.messageid}") do |item| + next if item == '.' or item == '..' or item == '.DS_Store' + attach_path = "/var/www/discourse/script/import_scripts/jive/attach/#{thread.messageid}/#{item}" + upload = create_upload(thread.userid, attach_path, File.basename(attach_path)) + if upload.persisted? + puts "Attachment upload is successful for #{attach_path}, new path is #{upload.url}!" + thread.body.gsub!(item,upload.url) + thread.body << "

#{attachment_html(upload,item)}" + else + puts "Error: Attachment upload is not successful for #{attach_path}!" + end + end + end + topic_map[thread.messageid] = { id: thread.messageid, topic_id: thread.messageid, @@ -316,6 +347,38 @@ class ImportScripts::Jive < ImportScripts::Base next unless CATEGORY_IDS.include?(thread.containerid.to_i) if thread.parentmessageid + + #IMAGE UPLOADER + if thread.imagecount + Dir.foreach("/var/www/discourse/script/import_scripts/jive/img/#{thread.messageid}") do |item| + next if item == '.' or item == '..' or item == '.DS_Store' + photo_path = "/var/www/discourse/script/import_scripts/jive/img/#{thread.messageid}/#{item}" + upload = create_upload(thread.userid, photo_path, File.basename(photo_path)) + if upload.persisted? + puts "Image upload is successful for #{photo_path}, new path is #{upload.url}!" + thread.body.gsub!(item,upload.url) + else + puts "Error: Image upload is not successful for #{photo_path}!" + end + end + end + + #ATTACHMENT UPLOADER + if thread.attachmentcount + Dir.foreach("/var/www/discourse/script/import_scripts/jive/attach/#{thread.messageid}") do |item| + next if item == '.' or item == '..' or item == '.DS_Store' + attach_path = "/var/www/discourse/script/import_scripts/jive/attach/#{thread.messageid}/#{item}" + upload = create_upload(thread.userid, attach_path, File.basename(attach_path)) + if upload.persisted? + puts "Attachment upload is successful for #{attach_path}, new path is #{upload.url}!" + thread.body.gsub!(item,upload.url) + thread.body << "

#{attachment_html(upload,item)}" + else + puts "Error: Attachment upload is not successful for #{attach_path}!" + end + end + end + row = { id: thread.messageid, topic_id: thread_map["#{thread.threadid}"], From 8517674a326864984c7befd9fdbf7df58cc089c6 Mon Sep 17 00:00:00 2001 From: Gerhard Schlager Date: Sat, 26 Dec 2015 23:58:54 +0100 Subject: [PATCH 004/185] UX: Show translated badge names and badge groupings FIX: Disallow renaming of system badges FIX: Disallow renaming/deleting of system badge groupings UX: Use "modern" button style in badge groupings dialog --- .../modals/admin-edit-badge-groupings.js.es6 | 27 +++++++++---------- .../admin/routes/admin-badges.js.es6 | 10 +++++-- .../admin/templates/badges-show.hbs | 23 +++++++--------- .../modal/admin_edit_badge_groupings.hbs | 12 ++++----- .../discourse/models/badge-grouping.js.es6 | 2 +- .../stylesheets/common/admin/admin_base.scss | 5 ++-- app/models/badge_grouping.rb | 2 +- app/serializers/badge_grouping_serializer.rb | 6 ++++- 8 files changed, 45 insertions(+), 42 deletions(-) diff --git a/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js.es6 index 74c4f79e6..6c0f6b9cc 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js.es6 @@ -2,15 +2,13 @@ export default Ember.Controller.extend({ needs: ['modal'], modelChanged: function(){ - - var grouping = Em.Object.extend({}); - - var model = this.get('model'); - var copy = Em.A(); + const model = this.get('model'); + const copy = Em.A(); + const store = this.store; if(model){ model.forEach(function(o){ - copy.pushObject(grouping.create(o)); + copy.pushObject(store.createRecord('badge-grouping', o)); }); } @@ -18,8 +16,8 @@ export default Ember.Controller.extend({ }.observes('model'), moveItem: function(item, delta){ - var copy = this.get('workingCopy'); - var index = copy.indexOf(item); + const copy = this.get('workingCopy'); + const index = copy.indexOf(item); if (index + delta < 0 || index + delta >= copy.length){ return; } @@ -50,14 +48,14 @@ export default Ember.Controller.extend({ item.set("editing", false); }, add: function(){ - var obj = Em.Object.create({editing: true, name: "Enter Name"}); + const obj = this.store.createRecord('badge-grouping', {editing: true, name: I18n.t('admin.badges.badge_grouping')}); this.get('workingCopy').pushObject(obj); }, saveAll: function(){ - var self = this; + const self = this; var items = this.get('workingCopy'); - var groupIds = items.map(function(i){return i.get("id") || -1;}); - var names = items.map(function(i){return i.get("name");}); + const groupIds = items.map(function(i){return i.get("id") || -1;}); + const names = items.map(function(i){return i.get("name");}); Discourse.ajax('/admin/badges/badge_groupings',{ data: {ids: groupIds, names: names}, @@ -66,14 +64,13 @@ export default Ember.Controller.extend({ items = self.get("model"); items.clear(); data.badge_groupings.forEach(function(g){ - items.pushObject(Em.Object.create(g)); + items.pushObject(self.store.createRecord('badge-grouping', g)); }); self.set('model', null); self.set('workingCopy', null); self.send('closeModal'); },function(){ - // TODO we can do better - bootbox.alert("Something went wrong"); + bootbox.alert(I18n.t('generic_error')); }); } } diff --git a/app/assets/javascripts/admin/routes/admin-badges.js.es6 b/app/assets/javascripts/admin/routes/admin-badges.js.es6 index 592743766..5efa86491 100644 --- a/app/assets/javascripts/admin/routes/admin-badges.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-badges.js.es6 @@ -1,4 +1,5 @@ import Badge from 'discourse/models/badge'; +import BadgeGrouping from 'discourse/models/badge-grouping'; export default Discourse.Route.extend({ _json: null, @@ -13,14 +14,19 @@ export default Discourse.Route.extend({ setupController: function(controller, model) { var json = this._json, - triggers = []; + triggers = [], + badgeGroupings = []; _.each(json.admin_badges.triggers,function(v,k){ triggers.push({id: v, name: I18n.t('admin.badges.trigger_type.'+k)}); }); + json.badge_groupings.forEach(function(badgeGroupingJson) { + badgeGroupings.push(BadgeGrouping.create(badgeGroupingJson)); + }); + controller.setProperties({ - badgeGroupings: json.badge_groupings, + badgeGroupings: badgeGroupings, badgeTypes: json.badge_types, protectedSystemFields: json.admin_badges.protected_system_fields, badgeTriggers: triggers, diff --git a/app/assets/javascripts/admin/templates/badges-show.hbs b/app/assets/javascripts/admin/templates/badges-show.hbs index 2a6b74f16..173b8c60d 100644 --- a/app/assets/javascripts/admin/templates/badges-show.hbs +++ b/app/assets/javascripts/admin/templates/badges-show.hbs @@ -2,25 +2,22 @@
- {{input type="text" name="name" value=buffered.name}} + {{#if readOnly}} + {{input type="text" name="name" value=buffered.displayName disabled=true}} + {{else}} + {{input type="text" name="name" value=buffered.name}} + {{/if}}
- {{#if showDisplayName}} -
- {{i18n 'admin.badges.display_name'}} - {{buffered.displayName}} -
- {{/if}} -
- - {{input type="text" name="name" value=buffered.icon}} + + {{input type="text" name="icon" value=buffered.icon}}

{{i18n 'admin.badges.icon_help'}}

- - {{input type="text" name="name" value=buffered.image}} + + {{input type="text" name="image" value=buffered.image}}

{{i18n 'admin.badges.icon_help'}}

@@ -40,7 +37,7 @@ value=buffered.badge_grouping_id content=badgeGroupings optionValuePath="content.id" - optionLabelPath="content.name"}} + optionLabelPath="content.displayName"}}   diff --git a/app/assets/javascripts/admin/templates/modal/admin_edit_badge_groupings.hbs b/app/assets/javascripts/admin/templates/modal/admin_edit_badge_groupings.hbs index 1dd273e0f..f2a6581bb 100644 --- a/app/assets/javascripts/admin/templates/modal/admin_edit_badge_groupings.hbs +++ b/app/assets/javascripts/admin/templates/modal/admin_edit_badge_groupings.hbs @@ -5,15 +5,15 @@
  • {{#if wc.editing}} {{input value=wc.name}} - + {{else}} - {{wc.name}} + {{wc.displayName}} {{/if}}
    - - - - + + + +
  • {{/each}} diff --git a/app/assets/javascripts/discourse/models/badge-grouping.js.es6 b/app/assets/javascripts/discourse/models/badge-grouping.js.es6 index 605d4d6d2..04574c431 100644 --- a/app/assets/javascripts/discourse/models/badge-grouping.js.es6 +++ b/app/assets/javascripts/discourse/models/badge-grouping.js.es6 @@ -8,7 +8,7 @@ export default RestModel.extend({ return this.get('name').toLowerCase().replace(/\s/g, '_'); }, - @computed + @computed('name') displayName() { const i18nKey = `badges.badge_grouping.${this.get('i18nNameKey')}.name`; return I18n.t(i18nKey, {defaultValue: this.get('name')}); diff --git a/app/assets/stylesheets/common/admin/admin_base.scss b/app/assets/stylesheets/common/admin/admin_base.scss index 7ef592b19..5635b7556 100644 --- a/app/assets/stylesheets/common/admin/admin_base.scss +++ b/app/assets/stylesheets/common/admin/admin_base.scss @@ -1606,10 +1606,9 @@ and (max-width : 500px) { border-bottom: 1px solid #dfdfdf; } .actions { - font-size: 1.214em; float: right; - a { - margin-left: 5px; + .btn { + padding: 3px 6px; } } } diff --git a/app/models/badge_grouping.rb b/app/models/badge_grouping.rb index 3512806d6..f1201e721 100644 --- a/app/models/badge_grouping.rb +++ b/app/models/badge_grouping.rb @@ -9,7 +9,7 @@ class BadgeGrouping < ActiveRecord::Base has_many :badges def system? - id && id < 5 + id && id <= 5 end def default_position=(pos) diff --git a/app/serializers/badge_grouping_serializer.rb b/app/serializers/badge_grouping_serializer.rb index 7331a610c..79abba78c 100644 --- a/app/serializers/badge_grouping_serializer.rb +++ b/app/serializers/badge_grouping_serializer.rb @@ -1,3 +1,7 @@ class BadgeGroupingSerializer < ApplicationSerializer - attributes :id, :name, :description, :position + attributes :id, :name, :description, :position, :system + + def system + object.system? + end end From 455efe9eb2126f142a9110bf01772aa73449c943 Mon Sep 17 00:00:00 2001 From: DiscourseHosting Date: Sun, 3 Jan 2016 15:26:12 -0500 Subject: [PATCH 005/185] Extended Nabble importer functionality --- script/import_scripts/nabble.rb | 148 ++++++++++++++++++++++++++++++-- 1 file changed, 141 insertions(+), 7 deletions(-) diff --git a/script/import_scripts/nabble.rb b/script/import_scripts/nabble.rb index 78e484975..ccf8d495e 100644 --- a/script/import_scripts/nabble.rb +++ b/script/import_scripts/nabble.rb @@ -1,5 +1,38 @@ require File.expand_path(File.dirname(__FILE__) + "/base.rb") require 'pg' +require_relative 'base/uploader' + +=begin + if you want to create mock users for posts made by anonymous participants, + run the following SQL prior to importing. + +-- first attribute any anonymous posts to existing users (if any) + +UPDATE node +SET owner_id = p.user_id, anonymous_name = NULL +FROM ( SELECT lower(name) AS name, user_id FROM user_ ) p +WHERE p.name = lower(node.anonymous_name) + AND owner_id IS NULL; + +-- then create mock users + +INSERT INTO user_ (email, name, joined, registered) + SELECT lower(anonymous_name) || '@dummy.com', MIN(anonymous_name), MIN(when_created), MIN(when_created) + FROM node + WHERE anonymous_name IS NOT NULL + GROUP BY lower(anonymous_name); + +-- then move these posts to the new users +-- (yes, this is the same query as the first one indeed) + +UPDATE node +SET owner_id = p.user_id, anonymous_name = NULL +FROM ( SELECT lower(name) AS name, user_id FROM user_ ) p +WHERE p.name = lower(node.anonymous_name) + AND owner_id IS NULL; + +=end + class ImportScripts::Nabble < ImportScripts::Base # CHANGE THESE BEFORE RUNNING THE IMPORTER @@ -15,6 +48,7 @@ class ImportScripts::Nabble < ImportScripts::Base @tagmap = [] @td = PG::TextDecoder::TimestampWithTimeZone.new @client = PG.connect(dbname: DB_NAME) + @uploader = ImportScripts::Uploader.new end def execute @@ -42,17 +76,45 @@ class ImportScripts::Nabble < ImportScripts::Base next if all_records_exist? :users, users.map {|u| u["user_id"].to_i} - create_users(users, total: total_count, offset: offset) do |user| + create_users(users, total: total_count, offset: offset) do |row| { - id: user["user_id"], - email: user["email"] || (SecureRandom.hex << "@domain.com"), - created_at: Time.zone.at(@td.decode(user["joined"])), - name: user["name"] + id: row["user_id"], + email: row["email"] || (SecureRandom.hex << "@domain.com"), + created_at: Time.zone.at(@td.decode(row["joined"])), + name: row["name"], + post_create_action: proc do |user| + import_avatar(user, row["user_id"]) + end } end end end + def import_avatar(user, org_id) + filename = 'avatar' + org_id.to_s + path = File.join('/tmp/nab', filename) + res = @client.exec("SELECT content FROM file_avatar WHERE name='avatar100.png' AND user_id = #{org_id} LIMIT 1") + return if res.ntuples() < 1 + + binary = res[0]['content'] + File.open(path, 'wb') { |f| + f.write(PG::Connection.unescape_bytea(binary)) + } + + upload = @uploader.create_upload(user.id, path, filename) + + if upload.persisted? + user.import_mode = false + user.create_user_avatar + user.import_mode = true + user.user_avatar.update(custom_upload_id: upload.id) + user.update(uploaded_avatar_id: upload.id) + else + Rails.logger.error("Could not persist avatar for user #{user.username}") + end + + end + def parse_email(msg) receiver = Email::Receiver.new(msg, skip_sanity_check: true) mail = Mail.read_from_string(msg) @@ -87,6 +149,8 @@ class ImportScripts::Nabble < ImportScripts::Base create_posts(topics, total: topic_count, offset: offset) do |t| raw = body_from(t) next unless raw + raw = process_content(raw) + raw = process_attachments(raw, t['node_id']) { id: t['node_id'], title: t['subject'], @@ -94,7 +158,7 @@ class ImportScripts::Nabble < ImportScripts::Base created_at: Time.zone.at(@td.decode(t["when_created"])), category: CATEGORY_ID, raw: raw, - cook_method: Post.cook_methods[:email] } + cook_method: Post.cook_methods[:regular] } end end end @@ -105,6 +169,60 @@ class ImportScripts::Nabble < ImportScripts::Base puts "Skipped #{p['node_id']}" end + def process_content(txt) + txt.gsub! /\/, '[quote="\1"]' + txt.gsub! /\<\/quote\>/, '[/quote]' + txt.gsub!(/\(.*?)\<\/raw\>/m) do |match| + c = Regexp.last_match[1].indent(4); + "\n#{c}\n" + end + + # lines starting with # are comments, not headings, insert a space to prevent markdown + txt.gsub! /\n#/m, ' #' + + # in the languagetool forum, quite a lot of XML was not marked as raw + # so we treat ... and ... as raw + + # uncomment below if you want to use this + + #txt.gsub!(/(.*?<\/rule>)/m) do |match| + # c = Regexp.last_match[2].indent(4); + # "\n #{c}\n" + #end + #txt.gsub!(/(.*?<\/category>)/m) do |match| + # c = Regexp.last_match[2].indent(4); + # "\n #{c}\n" + #end + txt + end + + def process_attachments(txt, postid) + txt.gsub!(//m) do |match| + basename = Regexp.last_match[1] + fn = File.join('/tmp/nab', basename) + + binary = @client.exec("SELECT content FROM file_node WHERE name='#{basename}' AND node_id = #{postid}")[0]['content'] + File.open(fn, 'wb') { |f| + f.write(PG::Connection.unescape_bytea(binary)) + } + upload = @uploader.create_upload(0, fn, basename) + @uploader.embedded_image_html(upload) + end + + txt.gsub!(/(.*?)<\/nabble_a>/m) do |match| + basename = Regexp.last_match[1] + fn = File.join('/tmp/nab', basename) + + binary = @client.exec("SELECT content FROM file_node WHERE name='#{basename}' AND node_id = #{postid}")[0]['content'] + File.open(fn, 'wb') { |f| + f.write(PG::Connection.unescape_bytea(binary)) + } + upload = @uploader.create_upload(0, fn, basename) + @uploader.attachment_html(upload, basename) + end + txt + end + def import_replies puts "", "creating topic replies" @@ -143,15 +261,31 @@ class ImportScripts::Nabble < ImportScripts::Base raw = body_from(p) next unless raw + raw = process_content(raw) + raw = process_attachments(raw, id) { id: id, topic_id: topic_id, user_id: user_id_from_imported_user_id(p['owner_id']) || Discourse::SYSTEM_USER_ID, created_at: Time.zone.at(@td.decode(p["when_created"])), raw: raw, - cook_method: Post.cook_methods[:email] } + cook_method: Post.cook_methods[:regular] } end end end end +class String + def indent(count, char = ' ') + gsub(/([^\n]*)(\n|$)/) do |match| + last_iteration = ($1 == "" && $2 == "") + line = "" + line << (char * count) unless last_iteration + line << $1 + line << $2 + line + end + end +end + + ImportScripts::Nabble.new.perform From ab5cd3ad3b4c4029709cf22e2bf796d92fd92ee0 Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Mon, 4 Jan 2016 09:52:11 +1100 Subject: [PATCH 006/185] allow http 1.1 via proxy --- config/nginx.sample.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index 930b2c161..6ddd580ee 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -214,6 +214,8 @@ server { proxy_cache_key $uri; proxy_cache_valid 200 7d; proxy_cache_valid 404 1m; + proxy_http_version 1.1; + proxy_set_header Connection ""; proxy_pass https://avatars.discourse.org/; } @@ -232,6 +234,8 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $thescheme; + proxy_set_header Connection ""; + proxy_http_version 1.1; proxy_pass http://discourse; } From 0e2ded278db74c7446af83cc39bb5cd66ee50fda Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Mon, 4 Jan 2016 09:56:30 +1100 Subject: [PATCH 007/185] Don't buffer message bus, this allows us to stream --- config/nginx.sample.conf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index 6ddd580ee..1d16b0b32 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -220,6 +220,12 @@ server { proxy_pass https://avatars.discourse.org/; } + location /message-bus/ { + proxy_buffering off; + proxy_pass http://discourse; + break; + } + # this means every file in public is tried first try_files $uri @discourse; } From b8471177dc1434df7b28d58e4acd67339694931b Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 4 Jan 2016 16:13:44 +1100 Subject: [PATCH 008/185] clean up config file --- config/nginx.sample.conf | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index 1d16b0b32..90aec737c 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -100,6 +100,7 @@ server { location = /srv/status { access_log off; log_not_found off; + proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -135,7 +136,7 @@ server { # # proxy_set_header DOES NOT inherit, by design, we must repeat it, # otherwise headers are not set correctly -# + proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -167,6 +168,7 @@ server { } location ~ ^/admin/backups/ { + proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -181,6 +183,7 @@ server { # acceleration for backups and avatars # see note about repetition above location ~ ^/(letter_avatar/|user_avatar|highlight-js|stylesheets|favicon/proxied) { + proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -218,9 +221,16 @@ server { proxy_set_header Connection ""; proxy_pass https://avatars.discourse.org/; + break; } + # we need buffering off for message bus location /message-bus/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $thescheme; + proxy_http_version 1.1; proxy_buffering off; proxy_pass http://discourse; break; @@ -240,7 +250,6 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $thescheme; - proxy_set_header Connection ""; proxy_http_version 1.1; proxy_pass http://discourse; } From 593c22eda126f7d009f452a2dc6f8131612a0205 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Mon, 4 Jan 2016 21:01:49 +0530 Subject: [PATCH 009/185] Update Translations --- config/locales/client.ar.yml | 17 +++- config/locales/client.bs_BA.yml | 6 -- config/locales/client.cs.yml | 4 - config/locales/client.da.yml | 4 - config/locales/client.de.yml | 4 - config/locales/client.es.yml | 37 ++++++++- config/locales/client.fa_IR.yml | 4 - config/locales/client.fi.yml | 47 ++++++++---- config/locales/client.fr.yml | 32 +++++++- config/locales/client.he.yml | 6 -- config/locales/client.id.yml | 3 - config/locales/client.it.yml | 4 - config/locales/client.ja.yml | 6 -- config/locales/client.ko.yml | 6 -- config/locales/client.nb_NO.yml | 7 +- config/locales/client.nl.yml | 7 -- config/locales/client.pl_PL.yml | 4 - config/locales/client.pt.yml | 37 ++++++++- config/locales/client.pt_BR.yml | 4 - config/locales/client.ro.yml | 6 -- config/locales/client.ru.yml | 4 - config/locales/client.sq.yml | 39 ++++++++-- config/locales/client.sv.yml | 20 ++++- config/locales/client.te.yml | 6 -- config/locales/client.tr_TR.yml | 4 - config/locales/client.uk.yml | 5 -- config/locales/client.zh_CN.yml | 4 - config/locales/client.zh_TW.yml | 41 ++++++++-- config/locales/server.ar.yml | 64 ++------------- config/locales/server.bs_BA.yml | 93 ---------------------- config/locales/server.cs.yml | 40 ---------- config/locales/server.da.yml | 35 --------- config/locales/server.de.yml | 66 ++-------------- config/locales/server.es.yml | 94 +++++++++++++++++------ config/locales/server.fa_IR.yml | 47 ------------ config/locales/server.fi.yml | 94 ++++++++++------------- config/locales/server.fr.yml | 52 ------------- config/locales/server.he.yml | 89 --------------------- config/locales/server.it.yml | 52 ------------- config/locales/server.ja.yml | 94 ----------------------- config/locales/server.ko.yml | 93 ---------------------- config/locales/server.nb_NO.yml | 37 +-------- config/locales/server.nl.yml | 94 ----------------------- config/locales/server.pl_PL.yml | 75 ------------------ config/locales/server.pt.yml | 69 +++++++++++++---- config/locales/server.pt_BR.yml | 57 -------------- config/locales/server.ro.yml | 91 ---------------------- config/locales/server.ru.yml | 52 ------------- config/locales/server.sq.yml | 93 ---------------------- config/locales/server.sv.yml | 72 +---------------- config/locales/server.te.yml | 36 --------- config/locales/server.tr_TR.yml | 72 ----------------- config/locales/server.uk.yml | 65 ---------------- config/locales/server.zh_CN.yml | 60 --------------- config/locales/server.zh_TW.yml | 56 -------------- plugins/poll/config/locales/server.ro.yml | 35 ++++++++- 56 files changed, 441 insertions(+), 1804 deletions(-) diff --git a/config/locales/client.ar.yml b/config/locales/client.ar.yml index e3571d8ff..1ef6b2766 100644 --- a/config/locales/client.ar.yml +++ b/config/locales/client.ar.yml @@ -402,6 +402,10 @@ ar: many: "%{count} عضوًا" other: "%{count} عضو" groups: + empty: + posts: "لا يوجد أي منشور لأي عضو من هذه المجموعة ." + members: "لا يوجد أعضاء في هذه المجموعة ." + messages: "لا توجد رسائل لهذه المجموعة." add: "اضافة" selector_placeholder: "اضافة عضو" owner: "المالك" @@ -425,6 +429,9 @@ ar: trust_levels: title: "مستوى الثقة يمنح تلقائيا للأعضاء عندما يضيفون:" none: "لا شيء" + notifications: + regular: + title: "معتدل" user_action_groups: '1': "الإعجابات المعطاة" '2': "الإعجابات المستلمة" @@ -434,7 +441,6 @@ ar: '6': "ردود" '7': "إشارات" '9': "إقتباسات" - '10': "تألقت" '11': "التعديلات" '12': "العناصر المرسلة" '13': "البريد الوارد" @@ -561,9 +567,12 @@ ar: warnings_received: "تحذيرات" messages: all: "الكل" - mine: "لي" - unread: "غير مقروء" + sent: "مرسلة" groups: "مجموعاتي" + bulk_select: "إختيار رسائل" + move_to_inbox: "الذهاب إلى الرسائل الواردة" + failed_to_move: "فشل في نقل الرسائل المحددة (ربما يكون اتصالك ضعيفاً)" + select_all: "إختيار الكل" change_password: success: "(تم ارسال الرسالة)" in_progress: "(يتم ارسال رسالة)" @@ -1001,6 +1010,7 @@ ar: granted_badge: "تم منح الوسام" popup: mentioned: '{{username}} أشار لك في "{{topic}}" - {{site_title}}' + group_mentioned: '{{username}} ذكرك في "{{topic}}" - {{site_title}}' quoted: '{{username}} نقل لك في "{{topic}}" - {{site_title}}' replied: '{{username}} رد لك في "{{topic}}" - {{site_title}}' posted: '{{username}} شارك في "{{topic}}" - {{site_title}}' @@ -2616,7 +2626,6 @@ ar: unlock_trust_level: "فتح مستوى الثقة " tl3_requirements: title: "المتطلبات لمستوى الثقة 3." - table_title: "في آخر 100 يوم" value_heading: "تصويت" requirement_heading: "متطلبات" visits: "الزيارات" diff --git a/config/locales/client.bs_BA.yml b/config/locales/client.bs_BA.yml index c3f9d1c22..26cecdeee 100644 --- a/config/locales/client.bs_BA.yml +++ b/config/locales/client.bs_BA.yml @@ -267,7 +267,6 @@ bs_BA: members: "Članovi" posts: "Postovi" alias_levels: - title: "Who can use this group as an alias?" nobody: "Niko" only_admins: "Samo admini" mods_and_admins: "Samo moderatori i Admini" @@ -282,7 +281,6 @@ bs_BA: '6': "Odgovori" '7': "Spemenute" '9': "Citirane" - '10': "Označene" '11': "Izmjenjene" '12': "Poslato" '13': "Inbox" @@ -351,8 +349,6 @@ bs_BA: warnings_received: "warnings" messages: all: "Sve" - mine: "Moje" - unread: "Nepročitane" change_password: success: "(email poslat)" in_progress: "(šaljem email)" @@ -1603,7 +1599,6 @@ bs_BA: unlock_trust_level: "Unlock Trust Level" tl3_requirements: title: "Requirements for Trust Level 3" - table_title: "In the last 100 days:" value_heading: "Value" requirement_heading: "Requirement" visits: "Visits" @@ -1658,7 +1653,6 @@ bs_BA: text: 'Text Field' confirm: 'Confirmation' site_text: - none: "Choose a type of content to begin editing." title: 'Text Content' site_settings: show_overriden: 'Only show overridden' diff --git a/config/locales/client.cs.yml b/config/locales/client.cs.yml index ceeaa3490..55de3e400 100644 --- a/config/locales/client.cs.yml +++ b/config/locales/client.cs.yml @@ -350,7 +350,6 @@ cs: '6': "Odezva" '7': "Zmínění" '9': "Citace" - '10': "Oblíbené" '11': "Editace" '12': "Odeslané zprávy" '13': "Přijaté zprávy" @@ -470,8 +469,6 @@ cs: warnings_received: "varování" messages: all: "Všechny" - mine: "Moje" - unread: "Nepřečtené" groups: "Moje skupiny" change_password: success: "(email odeslán)" @@ -2315,7 +2312,6 @@ cs: unlock_trust_level: "Odemknout úroveň důvěryhodnosti" tl3_requirements: title: "Požadavky pro důvěryhodnost 3" - table_title: "Za posledních 100 dní:" value_heading: "Hodnota" requirement_heading: "Požadavek" visits: "Návštěv" diff --git a/config/locales/client.da.yml b/config/locales/client.da.yml index d56f8a2f6..12e4de9c2 100644 --- a/config/locales/client.da.yml +++ b/config/locales/client.da.yml @@ -322,7 +322,6 @@ da: '6': "Svar" '7': "Referencer" '9': "Citater" - '10': "Favoritter" '11': "Ændringer" '12': "Sendte indlæg" '13': "Indbakke" @@ -441,8 +440,6 @@ da: warnings_received: "advarsler" messages: all: "Alle" - mine: "Mine" - unread: "Ulæste" groups: "Mine grupper" change_password: success: "(e-mail sendt)" @@ -2239,7 +2236,6 @@ da: unlock_trust_level: "Lås tillidsniveau op" tl3_requirements: title: "Krav for fortrolighedsniveau 3" - table_title: "For de sidste 100 dage:" value_heading: "værdi" requirement_heading: "Obligatoriske" visits: "Besøg" diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml index 51f1c4195..d9af838f5 100644 --- a/config/locales/client.de.yml +++ b/config/locales/client.de.yml @@ -322,7 +322,6 @@ de: '6': "Antworten" '7': "Erwähnungen" '9': "Zitate" - '10': "Favoriten" '11': "Änderungen" '12': "Gesendete Objekte" '13': "Posteingang" @@ -441,8 +440,6 @@ de: warnings_received: "Warnungen" messages: all: "Alle" - mine: "Meine" - unread: "Ungelesen" groups: "Meine Gruppen" change_password: success: "(E-Mail gesendet)" @@ -2233,7 +2230,6 @@ de: unlock_trust_level: "Vertrauensstufe entsperren" tl3_requirements: title: "Anforderungen für Vertrauensstufe 3" - table_title: "In den letzten 100 Tagen:" value_heading: "Wert" requirement_heading: "Anforderung" visits: "Aufrufe" diff --git a/config/locales/client.es.yml b/config/locales/client.es.yml index 8f11ce4d1..af06b69d4 100644 --- a/config/locales/client.es.yml +++ b/config/locales/client.es.yml @@ -294,6 +294,12 @@ es: one: "1 usuario" other: "%{count} usuarios" groups: + empty: + posts: "No hay mensajes publicados por los miembros de este grupo." + members: "Este grupo no tiene miembros." + mentions: "No hay menciones de este grupo." + messages: "No hay mensajes para este grupo." + topics: "No hay temas de miembros de este grupo." add: "Añadir" selector_placeholder: "Añadir miembros" owner: "propietario" @@ -313,6 +319,19 @@ es: trust_levels: title: "Nivel de confianza entregado automáticamente a miembros cuando son añadidos:" none: "Ninguno" + notifications: + watching: + title: "Vigilando" + description: "e te notificará de cada nuevo post en este mensaje y se mostrará un contador de nuevos posts." + tracking: + title: "Siguiendo" + description: "Se te notificará si alguien menciona tu @nombre o te responde, y un contador de nuevos mensajes será mostrado." + regular: + title: "Normal" + description: "Se te notificará si alguien menciona tu @nombre o te responde." + muted: + title: "Silenciado" + description: "Nunca se te notificará de nada sobre temas en este grupo." user_action_groups: '1': "'Me gusta' Dados" '2': "'Me gusta' Recibidos" @@ -322,7 +341,6 @@ es: '6': "Respuestas" '7': "Menciones" '9': "Citas" - '10': "Favoritos" '11': "Ediciones" '12': "Elementos Enviados" '13': "Bandeja de entrada" @@ -332,6 +350,7 @@ es: all_subcategories: "todas" no_subcategory: "ninguna" category: "Categoría" + category_list: "Mostrar lista de categorías" reorder: title: "Reorganizar Categorías" title_long: "Reorganizar la lista de categorías" @@ -388,6 +407,7 @@ es: invited_by: "Invitado Por" trust_level: "Nivel de Confianza" notifications: "Notificaciones" + statistics: "Estadísticas" desktop_notifications: label: "Notificaciones de escritorio" not_supported: "Las notificaciones no están disponibles en este navegador. Lo sentimos." @@ -441,9 +461,14 @@ es: warnings_received: "avisos" messages: all: "Todos" - mine: "Míos" - unread: "No leídos" + inbox: "Bandeja de entrada" + sent: "Enviados" + archive: "Archivo" groups: "Mis grupos" + bulk_select: "Mensajes seleccionados" + move_to_inbox: "Mover a la bandeja de entrada" + failed_to_move: "No se han podido mover los mensajes seleccionados (puede haber problemas de conexión)" + select_all: "Seleccionar todo" change_password: success: "(e-mail enviado)" in_progress: "(enviando e-mail)" @@ -870,6 +895,7 @@ es: granted_badge: "Distintivo concedido" popup: mentioned: '{{username}} te mencionó en "{{topic}}" - {{site_title}}' + group_mentioned: '{{username}} te ha mencionado en "{{topic}}" - {{site_title}}' quoted: '{{username}} te citó en "{{topic}}" - {{site_title}}' replied: '{{username}} te respondió en "{{topic}}" - {{site_title}}' posted: '{{username}} publicó en "{{topic}}" - {{site_title}}' @@ -1020,6 +1046,7 @@ es: auto_close_title: 'Configuración de auto-cerrado' auto_close_save: "Guardar" auto_close_remove: "No Auto-Cerrar Este Tema" + auto_close_immediate: "El último mensaje tiene %{hours} horas de antigüedad, por lo que será cerrado inmediatamente." progress: title: avances go_top: "arriba" @@ -1140,6 +1167,7 @@ es: success: "Hemos invitado a ese usuario a participar en este hilo de mensajes." error: "Lo sentimos, hubo un error al invitar a ese usuario." group_name: "nombre del grupo" + controls: "Controles del tema" invite_reply: title: 'Invitar' username_placeholder: "nombre de usuario" @@ -2048,6 +2076,7 @@ es: change_site_setting: "cambiar configuración del sitio" change_site_customization: "cambiar customización del sitio" delete_site_customization: "borrar customización del sitio" + change_site_text: "cambiar textos" suspend_user: "suspender usuario" unsuspend_user: "desbloquear usuario" grant_badge: "conceder distintivo" @@ -2239,7 +2268,7 @@ es: unlock_trust_level: "Desbloquear Nivel de Confianza" tl3_requirements: title: "Requerimientos para el nivel de confianza 3" - table_title: "En los últimos 100 días:" + table_title: "En los últimos %{time_period} días:" value_heading: "Valor" requirement_heading: "Requerimiento" visits: "Visitas" diff --git a/config/locales/client.fa_IR.yml b/config/locales/client.fa_IR.yml index 7e4e8efe7..f171c994e 100644 --- a/config/locales/client.fa_IR.yml +++ b/config/locales/client.fa_IR.yml @@ -294,7 +294,6 @@ fa_IR: '6': "واکنش" '7': "اشاره‌ها" '9': "نقل‌قول‌ها" - '10': "ستاره‌دار" '11': "ویرایش‌ها" '12': "ارسال موارد" '13': "صندوق دریافت" @@ -411,8 +410,6 @@ fa_IR: warnings_received: "هشدارها" messages: all: "همه" - mine: "خودم" - unread: "خوانده‌ نشده‌" groups: "گروه های من" change_password: success: "(ایمیل ارسال شد)" @@ -2144,7 +2141,6 @@ fa_IR: unlock_trust_level: "باز کردن سطح اعتماد" tl3_requirements: title: "شرایط لازم برای سطح اعتماد 3." - table_title: "در ۱۰۰ روز اخیر:" value_heading: "مقدار" requirement_heading: "نیازمندی‌ها" visits: "بازدیدها" diff --git a/config/locales/client.fi.yml b/config/locales/client.fi.yml index b88438aed..4f2aabc25 100644 --- a/config/locales/client.fi.yml +++ b/config/locales/client.fi.yml @@ -313,6 +313,18 @@ fi: trust_levels: title: "Luottamustaso, joka annetaan automaattisesti lisättäessä tähän ryhmään:" none: "Ei mitään" + notifications: + watching: + title: "Tarkkaillut" + description: "Saat ilmoituksen uusista viesteistä jokaisessa viestiketjussa, ja uusien vastausten lukumäärä näytetään." + tracking: + title: "Seurannassa" + description: "Saat ilmoituksen, jos joku mainitsee @nimesi tai vastaa sinulle, ja uusien vastausten lukumäärä näytetään." + regular: + title: "Tavallinen" + description: "Saat ilmoituksen, jos joku mainitsee @nimesi tai vastaa sinulle." + muted: + title: "Vaimennetut" user_action_groups: '1': "Annetut tykkäykset" '2': "Saadut tykkäykset" @@ -322,7 +334,6 @@ fi: '6': "Vastaukset" '7': "Viittaukset" '9': "Lainaukset" - '10': "Tähdelliset" '11': "Muokkaukset" '12': "Lähetetyt" '13': "Postilaatikko" @@ -330,8 +341,9 @@ fi: categories: all: "kaikki alueet" all_subcategories: "kaikki" - no_subcategory: "alueettomat" + no_subcategory: "vain pääalue" category: "Alue" + category_list: "Näytä alueet" reorder: title: "Järjestä alueet uudelleen" title_long: "Järjestä alueiden lista uudelleen" @@ -388,6 +400,7 @@ fi: invited_by: "Kutsuja" trust_level: "Luottamustaso" notifications: "Ilmoitukset" + statistics: "Tilastot" desktop_notifications: label: "Työpöytäilmoitukset" not_supported: "Tämä selainen ei tue ilmoituksia, pahoittelut." @@ -434,16 +447,21 @@ fi: muted_topics_link: "Näytä vaimennetut ketjut" automatically_unpin_topics: "Poista ketjun kiinnitys automaattisesti, jos selaan keskustelun loppuun" staff_counters: - flags_given: "hyödyllisiä lippuja" + flags_given: "hyödyllistä liputusta" flagged_posts: "liputettuja viestejä" - deleted_posts: "poistettuja viestejä" + deleted_posts: "poistettua viestiä" suspensions: "hyllytyksiä" warnings_received: "varoituksia" messages: all: "Kaikki" - mine: "Omat" - unread: "Lukemattomat" + inbox: "Saapuneet" + sent: "Lähetetyt" + archive: "Arkisto" groups: "Omat ryhmäni" + bulk_select: "Valitse viestejä" + move_to_inbox: "Siirrä saapuneisiin" + failed_to_move: "Viestien siirto epäonnistui (vika saattaa olla internetyhteydessäsi)" + select_all: "Valitse kaikki" change_password: success: "(sähköposti lähetetty)" in_progress: "(lähettää sähköpostia)" @@ -672,7 +690,7 @@ fi: value_prop: "Kun luot tilin, muistamme mitä olet lukenut, jotta voit aina palata keskusteluissa takaisin oikeaan kohtaan. Saat myös ilmoituksia, täällä tai sähköpostilla, kun uusia viestejä kirjoitetaan. Voit myös tykätä viesteistä. :heartbeat:" summary: enabled_description: "Tarkastelet tiivistelmää tästä ketjusta, sen mielenkiintoisimpia viestejä käyttäjien toiminnan perusteella." - description: "Tässä kejussa on {{count}} viestiä." + description: "Tässä ketjussa on {{count}} viestiä." description_time: "Ketjussa on {{count}} viestiä, joiden arvioitu lukemisaika on {{readingTime}} minuuttia." enable: 'Näytä ketjun tiivistelmä' disable: 'Näytä kaikki viestit' @@ -870,11 +888,12 @@ fi: granted_badge: "Arvomerkki myönnetty" popup: mentioned: '{{username}} mainitsi sinut ketjussa "{{topic}}" - {{site_title}}' + group_mentioned: '{{username}} mainitsi sinut ketjussa "{{topic}}" - {{site_title}}' quoted: '{{username}} lainasi sinua ketjussa "{{topic}}" - {{site_title}}' replied: '{{username}} vastasi sinulle ketjussa "{{topic}}" - {{site_title}}' posted: '{{username}} vastasi ketjuun "{{topic}}" - {{site_title}}' private_message: '{{username}} lähetti sinulle yksityisviestin ketjussa "{{topic}}" - {{site_title}}' - linked: '{{username}} linkitti viestiisi aiheesta "{{topic}}" - {{site_title}}' + linked: '{{username}} linkitti viestiisi ketjusta "{{topic}}" - {{site_title}}' upload_selector: title: "Lisää kuva" title_with_attachments: "Lisää kuva tai tiedosto" @@ -1008,7 +1027,7 @@ fi: toggle_information: "näytä/kätke ketjun tiedot" read_more_in_category: "Haluatko lukea lisää? Selaa muita ketjuja alueella {{catLink}} tai {{latestLink}}." read_more: "Haluatko lukea lisää? {{catLink}} tai {{latestLink}}." - read_more_MF: "Sinulla on { UNREAD, plural, =0 {} one { 1 lukematon } other { # lukematonta } } { NEW, plural, =0 {} one { {BOTH, select, true{ja } false { } other{}} 1 uusi ketju} other { {BOTH, select, true{ja } false { } other{}} # uutta kejua} } jäljellä, voit myös {CATEGORY, select, true {selata muita ketjuja alueella {catLink}} false {{latestLink}} other {}}" + read_more_MF: "Sinulla on { UNREAD, plural, =0 {} one { 1 lukematon } other { # lukematonta } } { NEW, plural, =0 {} one { {BOTH, select, true{ja } false { } other{}} 1 uusi ketju} other { {BOTH, select, true{ja } false { } other{}} # uutta ketjua} } jäljellä, voit myös {CATEGORY, select, true {selata muita ketjuja alueella {catLink}} false {{latestLink}} other {}}" browse_all_categories: Selaa keskustelualueita view_latest_topics: katsele tuoreimpia ketjuja suggest_create_topic: Jospa aloittaisit uuden ketjun? @@ -1140,6 +1159,7 @@ fi: success: "Käyttäjä on kutsuttu osallistumaan tähän yksityiseen keskusteluun." error: "Pahoittelut, kutsuttaessa tapahtui virhe." group_name: "ryhmän nimi" + controls: "Ketjun hallinta" invite_reply: title: 'Kutsu' username_placeholder: "käyttäjätunnus" @@ -1786,6 +1806,7 @@ fi: primary_group: "Aseta automaattisesti ensisijaiseksi ryhmäksi" group_owners: Omistajat add_owners: Lisää omistajia + incoming_email: "Saapuvan sähköpostin osoite" incoming_email_placeholder: "aseta sähköpostiosoite" api: generate_master: "Luo rajapinnan pääavain" @@ -2127,6 +2148,7 @@ fi: basic: 'Luottamustason 1 käyttäjät (Haastaja)' member: 'Luottamustason 2 käyttäjät (Konkari)' regular: 'Luottamustason 3 käyttäjät (Mestari)' + leader: 'Luottamustason 4 käyttäjät (Johtaja)' staff: "Henkilökunta" admins: 'Ylläpitäjät' moderators: 'Valvojat' @@ -2236,7 +2258,6 @@ fi: unlock_trust_level: "Avaa luottamustason lukitus" tl3_requirements: title: "Vaatimukset luottamustasolle 3." - table_title: "Edellisen 100 päivän aikana:" value_heading: "Arvo" requirement_heading: "Vaatimus" visits: "Vierailua" @@ -2612,13 +2633,13 @@ fi: description: Luki kaikki viestit ketjusta, jossa on yli 100 viestiä popular_link: name: Suosittu linkki - description: Postasi linkin ulkoiselle sivustolle, joka sai vähintään 50 klikkausta. + description: Laittoi linkin ulkoiselle sivustolle, joka sai vähintään 50 klikkausta. hot_link: name: Kuuma linkki - description: Postasi linkin ulkoiselle sivustolle, joka sai vähintään 300 klikkausta. + description: Laittoi linkin ulkoiselle sivustolle, joka sai vähintään 300 klikkausta. famous_link: name: Kuuluisa linkki - description: Postasi linkin ulkoiselle sivustolle, joka sai vähintään 1000 klikkausta. + description: Laittoi linkin ulkoiselle sivustolle, joka sai vähintään 1000 klikkausta. google_search: |

    Etsi Googlella

    diff --git a/config/locales/client.fr.yml b/config/locales/client.fr.yml index b0e29c50b..67ed9b954 100644 --- a/config/locales/client.fr.yml +++ b/config/locales/client.fr.yml @@ -294,6 +294,12 @@ fr: one: "1 utilisateur" other: "%{count} utilisateurs" groups: + empty: + posts: "Il n'y a aucun message de la part des membres de ce groupe." + members: "Il n'y a aucun membre dans ce groupe." + mentions: "Il n'y a aucune mention de ce groupe." + messages: "Il n'y a aucun message pour ce groupe." + topics: "Il n'y a aucun sujet de la part des membres de ce groupe." add: "Ajouter" selector_placeholder: "Ajouter des membres" owner: "propriétaire" @@ -313,6 +319,19 @@ fr: trust_levels: title: "Niveau de confiance automatiquement attribué lorsque les membres sont ajoutés à :" none: "Aucun" + notifications: + watching: + title: "S'abonner" + description: "Vous serez notifié de chaque nouvelle réponse dans chaque message, et le nombre de nouvelles réponses sera affiché." + tracking: + title: "Suivre" + description: "Vous serez notifié si quelqu'un mentionne votre @pseudo ou vous répond, et le nombre de nouvelles réponses sera affiché." + regular: + title: "Normal" + description: "Vous serez notifié si quelqu'un mentionne votre @pseudo ou vous répond." + muted: + title: "Silencieux" + description: "Nous ne serez jamais notifié de quoi que ce soit à propos des nouveaux sujets dans ce groupe." user_action_groups: '1': "J'aime donnés" '2': "J'aime reçus" @@ -322,7 +341,6 @@ fr: '6': "Réponses" '7': "Mentions" '9': "Citations" - '10': "Favoris" '11': "Editions" '12': "Eléments envoyés" '13': "Boîte de réception" @@ -332,6 +350,7 @@ fr: all_subcategories: "toutes" no_subcategory: "aucune" category: "Catégorie" + category_list: "Afficher la liste des catégories" reorder: title: "Réordonner les catégories" title_long: "Réorganiser la liste des catégories" @@ -388,6 +407,7 @@ fr: invited_by: "Invité par" trust_level: "Niveau de confiance" notifications: "Notifications" + statistics: "Stats" desktop_notifications: label: "Notifications de bureau" not_supported: "Les notifications ne sont pas supportées avec ce navigateur. Désolé." @@ -441,9 +461,14 @@ fr: warnings_received: "avertissements" messages: all: "Tous" - mine: "Envoyés" - unread: "Non lus" + inbox: "Boîte de réception" + sent: "Envoyé" + archive: "Archiver" groups: "Mes groupes" + bulk_select: "Sélection des messages" + move_to_inbox: "Déplacer dans la boîte de réception" + failed_to_move: "Impossible de déplacer les messages sélectionnés (peut-être que votre connexion est coupée)" + select_all: "Sélectionner tout" change_password: success: "(courriel envoyé)" in_progress: "(courriel en cours d'envoi)" @@ -2243,7 +2268,6 @@ fr: unlock_trust_level: "Déverrouiller le niveau de confiance" tl3_requirements: title: "Pré-requis pour le niveau de confiance 3" - table_title: "Les 100 derniers jours :" value_heading: "Valeur" requirement_heading: "Pré-requis" visits: "Visites" diff --git a/config/locales/client.he.yml b/config/locales/client.he.yml index 6473380b6..50960d12c 100644 --- a/config/locales/client.he.yml +++ b/config/locales/client.he.yml @@ -304,7 +304,6 @@ he: members: "חברים" posts: "הודעות" alias_levels: - title: "מי יכול להשתמש בקבוצה זו ככינוי?" nobody: "אף אחד" only_admins: "רק מנהלים" mods_and_admins: "רק מנחים ומנהלים" @@ -322,7 +321,6 @@ he: '6': "תגובות" '7': "אזכורים" '9': "ציטוטים" - '10': "כוכבים" '11': "עריכות" '12': "פריטים שנשלחו" '13': "דואר נכנס" @@ -439,8 +437,6 @@ he: warnings_received: "אזהרות" messages: all: "הכל" - mine: "שלי" - unread: "לא נקראו" change_password: success: "(דואר אלקטרוני נשלח)" in_progress: "(שולח דואר אלקטרוני)" @@ -2194,7 +2190,6 @@ he: unlock_trust_level: "שחרור רמת אמון מנעילה" tl3_requirements: title: "דרישות עבור רמת אמון 3" - table_title: "במאה הימים האחרונים:" value_heading: "ערך" requirement_heading: "דרישה" visits: "ביקורים" @@ -2255,7 +2250,6 @@ he: confirm: 'אישור' dropdown: "נגלל" site_text: - none: "בחרו את סוג התוכן לתחילת עריכה." title: 'תוכן טקסטואלי' site_settings: show_overriden: 'הצג רק הגדרות ששונו' diff --git a/config/locales/client.id.yml b/config/locales/client.id.yml index 9d64819f1..6809b9a58 100644 --- a/config/locales/client.id.yml +++ b/config/locales/client.id.yml @@ -243,7 +243,6 @@ id: members: "Anggota" posts: "Post" alias_levels: - title: "Siapa yang dapat menggunakan grup ini sebagai alias?" nobody: "Tak seorangpun" only_admins: "Hanya admin" mods_and_admins: "Hanya moderator dan Admin" @@ -256,7 +255,6 @@ id: '4': "Topik" '7': "Disebutkan" '9': "Kutipan" - '10': "Bertanda Bintang" '11': "Edit" '12': "Item Terkirim" '13': "Kotak masuk" @@ -321,7 +319,6 @@ id: warnings_received: "peringatan" messages: all: "Semua" - unread: "Belum dibaca" change_password: success: "(surel terkirim)" in_progress: "(mengirimkan surel)" diff --git a/config/locales/client.it.yml b/config/locales/client.it.yml index 25a8b0cea..6d265f1eb 100644 --- a/config/locales/client.it.yml +++ b/config/locales/client.it.yml @@ -322,7 +322,6 @@ it: '6': "Risposte" '7': "Menzioni" '9': "Citazioni" - '10': "Preferiti" '11': "Modifiche" '12': "Inviati" '13': "Posta in arrivo" @@ -441,8 +440,6 @@ it: warnings_received: "avvisi" messages: all: "Tutti" - mine: "Miei" - unread: "Non letti" groups: "I Miei Gruppi" change_password: success: "(email inviata)" @@ -2230,7 +2227,6 @@ it: unlock_trust_level: "Sblocca Livello Esperienza" tl3_requirements: title: "Requisiti per Livello Esperienza 3" - table_title: "Negli ultimi 100 giorni:" value_heading: "Valore" requirement_heading: "Requisito" visits: "Visite" diff --git a/config/locales/client.ja.yml b/config/locales/client.ja.yml index b70fbbfbf..6da4af20f 100644 --- a/config/locales/client.ja.yml +++ b/config/locales/client.ja.yml @@ -250,7 +250,6 @@ ja: members: "メンバー" posts: "ポスト" alias_levels: - title: "このグループを仮名として使えるユーザ" nobody: "無し" only_admins: "管理者のみ" mods_and_admins: "管理者とモデレータのみ" @@ -265,7 +264,6 @@ ja: '6': "レスポンス数" '7': "タグ付け" '9': "引用" - '10': "お気に入り" '11': "編集" '12': "アイテム送信" '13': "インボックス" @@ -370,8 +368,6 @@ ja: warnings_received: "注意" messages: all: "すべて" - mine: "受信トレイ" - unread: "未読" change_password: success: "(メールを送信しました)" in_progress: "(メールを送信中)" @@ -1935,7 +1931,6 @@ ja: unlock_trust_level: "トラストレベルをアンロック" tl3_requirements: title: "トラストレベル3の条件" - table_title: "過去100日に:" value_heading: "値" requirement_heading: "条件" visits: "訪問" @@ -1996,7 +1991,6 @@ ja: confirm: '確認' dropdown: "ドロップダウン" site_text: - none: "コンテンツの種類を選択してください" title: 'テキストコンテンツ' site_settings: show_overriden: '上書き部分のみ表示' diff --git a/config/locales/client.ko.yml b/config/locales/client.ko.yml index f28bfc99e..c66a68947 100644 --- a/config/locales/client.ko.yml +++ b/config/locales/client.ko.yml @@ -276,7 +276,6 @@ ko: members: "멤버" posts: "게시글" alias_levels: - title: "누가 이 그룹을 별칭으로 사용할 수 있는가?" nobody: "0명" only_admins: "관리자 전용" mods_and_admins: "운영자 및 관리자만" @@ -293,7 +292,6 @@ ko: '6': "응답" '7': "멘션" '9': "인용" - '10': "즐겨찾기" '11': "편집" '12': "보낸 편지함" '13': "받은 편지함" @@ -407,8 +405,6 @@ ko: warnings_received: "경고" messages: all: "전체" - mine: "내가 보낸 메세지" - unread: "읽지 않음" change_password: success: "(이메일 전송)" in_progress: "(이메일 전송 중)" @@ -2017,7 +2013,6 @@ ko: unlock_trust_level: "신뢰도 시스템 잠금 해제" tl3_requirements: title: "레벨 3 권한이 필요합니다." - table_title: "최근 100일 간:" value_heading: "값" requirement_heading: "필수" visits: "방문수" @@ -2078,7 +2073,6 @@ ko: confirm: '확인' dropdown: "드롭다운" site_text: - none: "편집할 콘텐츠 유형을 선택하세요." title: '텍스트 콘텐츠' site_settings: show_overriden: '수정된 것만 표시' diff --git a/config/locales/client.nb_NO.yml b/config/locales/client.nb_NO.yml index 227652f23..4e4d75bd4 100644 --- a/config/locales/client.nb_NO.yml +++ b/config/locales/client.nb_NO.yml @@ -298,7 +298,6 @@ nb_NO: members: "Medlemmer" posts: "Innlegg" alias_levels: - title: "Hvem kan benytte denne gruppen som alias?" nobody: "Ingen" only_admins: "Kun administratorer" mods_and_admins: "Kun moderatorer og administratorer" @@ -315,7 +314,6 @@ nb_NO: '6': "Svar" '7': "Omtalelser" '9': "Sitater" - '10': "Favoritter" '11': "Redigeringer" '12': "Sendte elementer" '13': "Innboks" @@ -419,8 +417,7 @@ nb_NO: warnings_received: "advarsler" messages: all: "Alle" - mine: "Mine" - unread: "Uleste" + groups: "Mine grupper" change_password: success: "(e-post sendt)" in_progress: "(sender e-post)" @@ -2075,7 +2072,6 @@ nb_NO: unlock_trust_level: "Lås opp tillitsnivå" tl3_requirements: title: "Krav til tillitsnivå 3" - table_title: "De siste 100 dagene:" value_heading: "Verdi" requirement_heading: "Krav" visits: "Besøk" @@ -2136,7 +2132,6 @@ nb_NO: confirm: 'Bekreftelse' dropdown: "Nedtrekk" site_text: - none: "Velg en innholdstype for å starte redigering." title: 'Tekstinnhold' site_settings: show_overriden: 'Bare vis overstyrte' diff --git a/config/locales/client.nl.yml b/config/locales/client.nl.yml index 4bbe2c72a..69982a54c 100644 --- a/config/locales/client.nl.yml +++ b/config/locales/client.nl.yml @@ -304,7 +304,6 @@ nl: members: "Leden" posts: "Berichten" alias_levels: - title: "Wie kan deze groep als alias gebruiken?" nobody: "Niemand" only_admins: "Alleen admins" mods_and_admins: "Alleen moderatoren and admins" @@ -322,7 +321,6 @@ nl: '6': "Reacties" '7': "Genoemd" '9': "Citaten" - '10': "Met ster" '11': "Wijzigingen" '12': "Verzonden items" '13': "Inbox" @@ -440,8 +438,6 @@ nl: warnings_received: "waarschuwingen" messages: all: "Alle" - mine: "Mijn" - unread: "Ongelezen" change_password: success: "(e-mail verzonden)" in_progress: "(e-mail wordt verzonden)" @@ -916,7 +912,6 @@ nl: dismiss_read: "Alle ongelezen afwijzen" dismiss_button: "Afwijzen..." dismiss_tooltip: "Alleen nieuwe posts afwijzen of stop het volgen van topics" - also_dismiss_topics: "Deze topics niet meer volgens? (Topics zullen niet meer verschijnen in het tabblad Ongelezen)" dismiss_new: "markeer nieuwe berichten als gelezen" toggle: "toggle bulkselectie van topics" actions: "Bulk Acties" @@ -2179,7 +2174,6 @@ nl: unlock_trust_level: "Deblokkeer Trust Level" tl3_requirements: title: "Vereisten voor Trust Level 3" - table_title: "In de afgelopen 100 dagen:" value_heading: "Waarde" requirement_heading: "Vereiste" visits: "Bezoeken" @@ -2240,7 +2234,6 @@ nl: confirm: 'Bevestiging' dropdown: "Uitklapbaar" site_text: - none: "Kies een type van inhoud om te beginnen met bewerken." title: 'Tekst Inhoud' site_settings: show_overriden: 'Bekijk alleen bewerkte instellingen' diff --git a/config/locales/client.pl_PL.yml b/config/locales/client.pl_PL.yml index f4c59e70c..a2fe392fd 100644 --- a/config/locales/client.pl_PL.yml +++ b/config/locales/client.pl_PL.yml @@ -350,7 +350,6 @@ pl_PL: '6': "Odpowiedzi" '7': "Wzmianki" '9': "Cytaty" - '10': "Oznaczone" '11': "Edycje" '12': "Wysłane" '13': "Skrzynka odbiorcza" @@ -471,8 +470,6 @@ pl_PL: warnings_received: "otrzymanych ostrzeżeń" messages: all: "Wszystkie" - mine: "Moje" - unread: "Nieprzeczytane" groups: "Moje grupy" change_password: success: "(email wysłany)" @@ -2329,7 +2326,6 @@ pl_PL: unlock_trust_level: "Odblokuj poziom zaufania" tl3_requirements: title: "Wymagania dla osiągnięcia 3. poziomu zaufania" - table_title: "W ciągu ostatnich 100 dni:" value_heading: "Wartość" requirement_heading: "Wymaganie" visits: "Odwiedziny" diff --git a/config/locales/client.pt.yml b/config/locales/client.pt.yml index bdd38ec83..445ea3f3d 100644 --- a/config/locales/client.pt.yml +++ b/config/locales/client.pt.yml @@ -294,6 +294,12 @@ pt: one: "1 utilizador" other: "%{count} utilizadores" groups: + empty: + posts: "Não há nenhuma publicação feita por membros deste grupo." + members: "Não há nenhum membro neste grupo." + mentions: "Não há nenhuma menção deste grupo." + messages: "Não há nenhuma mensagem para este grupo." + topics: "Não há nenhum tópico feito por membros deste grupo." add: "Adicionar" selector_placeholder: "Adicionar membros" owner: "proprietário" @@ -313,6 +319,19 @@ pt: trust_levels: title: "Nível de confiança concedido automaticamente a membros quando são adicionados:" none: "Nenhum" + notifications: + watching: + title: "A vigiar" + description: "Será notificado de cada nova publicação em todas as mensagens, e uma contagem de novas respostas será exibida." + tracking: + title: "A Acompanhar" + description: "Será notificado se alguém mencionar o seu @nome ou lhe responder, e uma contagem de novas respostas será exibida." + regular: + title: "Habitual" + description: "Será notificado se alguém mencionar o seu @nome ou responder-lhe." + muted: + title: "Mudo" + description: "Não será notificado de nada relacionado com novos tópicos neste grupo." user_action_groups: '1': "Gostos Dados" '2': "Gostos Recebidos" @@ -322,7 +341,6 @@ pt: '6': "Respostas" '7': "Menções" '9': "Citações" - '10': "Favoritos" '11': "Edições" '12': "Itens Enviados" '13': "Caixa de Entrada" @@ -332,6 +350,7 @@ pt: all_subcategories: "todas" no_subcategory: "nenhuma" category: "Categoria" + category_list: "Exibir lista de categorias" reorder: title: "Re-organizar Categorias" title_long: "Re-organizar a lista de categorias" @@ -388,6 +407,7 @@ pt: invited_by: "Convidado Por" trust_level: "Nível de Confiança" notifications: "Notificações" + statistics: "Estatísticas" desktop_notifications: label: "Notificações de Desktop" not_supported: "Não são suportadas notificações neste navegador. Desculpe." @@ -441,9 +461,14 @@ pt: warnings_received: "avisos" messages: all: "Todas" - mine: "Minha" - unread: "Não lidas" + inbox: "Caixa de Entrada" + sent: "Enviado" + archive: "Arquivo" groups: "Os Meus Grupos" + bulk_select: "Selecionar mensagens" + move_to_inbox: "Mover para Caixa de Entrada" + failed_to_move: "Falha ao mover as mensagens selecionadas (talvez a sua rede esteja em baixo)" + select_all: "Selecionar Tudo" change_password: success: "(email enviado)" in_progress: "(a enviar email)" @@ -870,6 +895,7 @@ pt: granted_badge: "Distintivo concedido" popup: mentioned: '{{username}} mencionou-o em "{{topic}}" - {{site_title}}' + group_mentioned: '{{username}} mencionou-o em "{{topic}}" - {{site_title}}' quoted: '{{username}} citou-o em "{{topic}}" - {{site_title}}' replied: '{{username}} respondeu-lhe em "{{topic}}" - {{site_title}}' posted: '{{username}} publicou em "{{topic}}" - {{site_title}}' @@ -1020,6 +1046,7 @@ pt: auto_close_title: 'Configurações para Fechar Automaticamente' auto_close_save: "Guardar" auto_close_remove: "Não Fechar Este Tópico Automaticamente" + auto_close_immediate: "A última mensagem neste tópico já tem %{hours} horas, por isso o tópico será fechado imediatamente." progress: title: progresso do tópico go_top: "topo" @@ -1140,6 +1167,7 @@ pt: success: "Convidámos esse utilizador para participar nesta mensagem." error: "Pedimos desculpa, ocorreu um erro ao convidar esse utilizador." group_name: "nome do grupo" + controls: "Controlos de Tópico" invite_reply: title: 'Convidar' username_placeholder: "nome de utilizador" @@ -2048,6 +2076,7 @@ pt: change_site_setting: "alterar configurações do sítio" change_site_customization: "alterar personalização do sítio" delete_site_customization: "remover personalização do sítio" + change_site_text: "alterar texto do sítio" suspend_user: "utilizador suspenso" unsuspend_user: "utilizador não suspenso" grant_badge: "conceder distintivo" @@ -2239,7 +2268,7 @@ pt: unlock_trust_level: "Desbloquear Nível de Confiança" tl3_requirements: title: "Requisitos para o Nível de Confiança 3" - table_title: "Nos últimos 100 dias:" + table_title: "Nos últimos %{time_period} dias:" value_heading: "Valor" requirement_heading: "Requisito" visits: "Visitas" diff --git a/config/locales/client.pt_BR.yml b/config/locales/client.pt_BR.yml index be81b9d88..83ebeb56a 100644 --- a/config/locales/client.pt_BR.yml +++ b/config/locales/client.pt_BR.yml @@ -321,7 +321,6 @@ pt_BR: '6': "Respostas" '7': "Menções" '9': "Citações" - '10': "Favoritos" '11': "Edições" '12': "Itens enviados" '13': "Caixa de Entrada" @@ -439,8 +438,6 @@ pt_BR: warnings_received: "avisos" messages: all: "Todas" - mine: "Minha" - unread: "Não lidas" groups: "Meus Grupos" change_password: success: "(email enviado)" @@ -2211,7 +2208,6 @@ pt_BR: unlock_trust_level: "Destravar Nível de Confiança" tl3_requirements: title: "Requisitos para o Nível de Confiança 3" - table_title: "Nos últimos 100 dias:" value_heading: "Valor" requirement_heading: "Requisito" visits: "Visitas" diff --git a/config/locales/client.ro.yml b/config/locales/client.ro.yml index ef9c18d97..7594d81a4 100644 --- a/config/locales/client.ro.yml +++ b/config/locales/client.ro.yml @@ -293,7 +293,6 @@ ro: members: "Membri" posts: "Postări" alias_levels: - title: "Cine poate folosii acest grup ca pseudonim?" nobody: "Nimeni" only_admins: "Doar Adminii" mods_and_admins: "Doar moderatorii și adminii" @@ -308,7 +307,6 @@ ro: '6': "Răspunsuri" '7': "Mențiuni" '9': "Citate" - '10': "Participări" '11': "Editări" '12': "Obiecte Trimise" '13': "Primite" @@ -425,8 +423,6 @@ ro: warnings_received: "avertizări" messages: all: "Toate" - mine: "Ale mele" - unread: "Necitite" change_password: success: "(email trimis)" in_progress: "(se trimite email)" @@ -2069,7 +2065,6 @@ ro: unlock_trust_level: "Deblochează Nivelul de Încredere" tl3_requirements: title: "Cerințe pentru nivelul 3 de încredere" - table_title: "În ultimele 100 de zile:" value_heading: "Valoarea" requirement_heading: "Cerințe" visits: "Vizite" @@ -2128,7 +2123,6 @@ ro: text: 'Câmp Text' confirm: 'Confirmare' site_text: - none: "Alege un tip de conținut pentru editare." title: 'Conținut' site_settings: show_overriden: 'Arată doar rescrierile' diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml index 1d32d173e..6932de305 100644 --- a/config/locales/client.ru.yml +++ b/config/locales/client.ru.yml @@ -376,7 +376,6 @@ ru: '6': "Ответы" '7': "Упоминания" '9': "Цитаты" - '10': "Избранное" '11': "Изменения" '12': "Отправленные" '13': "Входящие" @@ -499,8 +498,6 @@ ru: warnings_received: "предупреждения" messages: all: "Все" - mine: "Мои" - unread: "Непрочитанные" change_password: success: "(письмо отправлено)" in_progress: "(отправка письма)" @@ -2350,7 +2347,6 @@ ru: unlock_trust_level: "Разморозить уровень доверия" tl3_requirements: title: "Требования для 3 уровня доверия" - table_title: "За последние 100 дней:" value_heading: "Значение" requirement_heading: "Требование" visits: "Посещений" diff --git a/config/locales/client.sq.yml b/config/locales/client.sq.yml index a66e2fe87..50bd3fe12 100644 --- a/config/locales/client.sq.yml +++ b/config/locales/client.sq.yml @@ -271,6 +271,8 @@ sq: one: "1 user" other: "%{count} users" groups: + add: "Shto" + selector_placeholder: "Shto anëtarë" visible: "Grupi është i dukshëm për të gjithë përdoruesit" title: one: "grupë" @@ -278,7 +280,6 @@ sq: members: "Anëtarë" posts: "Postime" alias_levels: - title: "Kush mund ta përdori këtë grup si një nofkë?" nobody: "Asnjëri" only_admins: "Vetëm adminët" mods_and_admins: "Vetëm moderatorët dhe Adminët" @@ -293,7 +294,6 @@ sq: '6': "Responses" '7': "Përmendje" '9': "Citim" - '10': "Shënuar" '11': "Redaktuar" '12': "Sent Items" '13': "Inbox" @@ -303,6 +303,8 @@ sq: all_subcategories: "të gjitha" no_subcategory: "asnjë" category: "Kategori" + reorder: + apply_all: "Apliko" posts: "Postime" topics: "Tema" latest: "Të fundit" @@ -345,6 +347,7 @@ sq: private_messages: "Mesazhet" activity_stream: "Aktiviteti" preferences: "Preferencat" + expand_profile: "Shpalos" bookmarks: "Të Preferuarat" bio: "Rreth meje" invited_by: "Të ftuar nga unë" @@ -400,8 +403,6 @@ sq: warnings_received: "paralajmërimet" messages: all: "Të gjithë" - mine: "Mine" - unread: "Palexuar" change_password: success: "(email u dërgua)" in_progress: "(duke dërguar emailin)" @@ -500,6 +501,8 @@ sq: auto_track_options: never: "asnjëherë" immediately: "menjëherë" + after_30_seconds: "pas 30 sekonda" + after_1_minute: "pas 1 minute" invited: search: "shkruaj për të kërkuar ftesat..." title: "Ftesa" @@ -559,6 +562,7 @@ sq: server: "Gabim në Server" forbidden: "Ndalohet Hyrja" unknown: "Gabim" + not_found: "Faqja nuk u gjet" desc: network: "Ju lutemi, kontrolloni lidhjen me Internetin." network_fixed: "Duket sikur u ktheve." @@ -592,6 +596,8 @@ sq: replies_lowercase: one: përgjigje other: përgjigje + signup_cta: + hide_forever: "jo faleminderit" summary: enabled_description: "You're viewing a summary of this topic: the most interesting posts as determined by the community." description: "Janë {{count}} përgjigje." @@ -649,6 +655,7 @@ sq: admin_not_allowed_from_ip_address: "You can't log in as admin from that IP address." resend_activation_email: "Click here to send the activation email again." sent_activation_email_again: "We sent another activation email to you at {{currentEmail}}. It might take a few minutes for it to arrive; be sure to check your spam folder." + to_continue: "Ju lutem, Identifikohuni" google: title: "me Google" message: "Authenticating with Google (make sure pop up blockers are not enabled)" @@ -671,8 +678,14 @@ sq: google: "Google" twitter: "Twitter" emoji_one: "Emoji One" + shortcut_modifier_key: + shift: 'Shift' + ctrl: 'Ctrl' + alt: 'Alt' composer: emoji: "Emoji :smile:" + more_emoji: "më shumë..." + options: "Opsione" add_warning: "This is an official warning." posting_not_on_topic: "Which topic do you want to reply to?" saving_draft_tip: "duke e ruajtur..." @@ -701,6 +714,7 @@ sq: edit_reason_placeholder: "pse jeni duke e redaktuar?" show_edit_reason: "(arsye redaktimit)" view_new_post: "Shikoni postimin tuaj te ri." + saving: "Duke e ruajtur" saved: "U Ruajt!" saved_draft: "Post draft in progress. Select to resume." uploading: "Duke nga ngarkuar..." @@ -729,6 +743,8 @@ sq: hr_title: "Horizontal Rule" help: "Markdown Editing Help" toggler: "hide or show the composer panel" + modal_ok: "OK" + modal_cancel: "Anulo" admin_options_title: "Optional staff settings for this topic" auto_close: label: "Auto-close topic time:" @@ -757,6 +773,9 @@ sq: moved_post: "

    {{username}} moved {{description}}

    " linked: "

    {{username}} {{description}}

    " granted_badge: "

    Earned '{{description}}'

    " + alt: + quoted: "Cituar nga" + posted: "Postim nga" popup: mentioned: '{{username}} mentioned you in "{{topic}}" - {{site_title}}' quoted: '{{username}} quoted you in "{{topic}}" - {{site_title}}' @@ -776,6 +795,7 @@ sq: select_file: "Select File" image_link: "link your image will point to" search: + sort_by: "Rendit sipas" title: "search topics, posts, users, or categories" no_results: "Nuk i gjet asnjë rezultat." no_more_results: "No more results found." @@ -787,6 +807,7 @@ sq: category: "Kërko tek kategoria \"{{category}}\"" topic: "Kërko tek kjo temë" private_messages: "Search messages" + new_item: "e re" go_back: 'kthehu mbrapa' not_logged_in_user: 'user page with summary of current activity and preferences' current_user: 'go to your user page' @@ -924,8 +945,10 @@ sq: title: "Tracking" description: "A count of new replies will be shown for this topic. You will be notified if someone mentions your @name or replies to you. " regular: + title: "Normal" description: "You will be notified if someone mentions your @name or replies to you." regular_pm: + title: "Normal" description: "You will be notified if someone mentions your @name or replies to you." muted_pm: title: "Muted" @@ -1296,6 +1319,7 @@ sq: tracking: title: "Tracking" regular: + title: "Normal" description: "You will be notified if someone mentions your @name or replies to you." muted: title: "Muted" @@ -1406,9 +1430,11 @@ sq: title_in: "Category - {{categoryName}}" help: "all topics grouped by category" unread: + title: "Palexuar " help: "topics you are currently watching or tracking with unread posts" new: lower_title: "e re" + title: "I Ri" help: "topics created in the last few days" posted: title: "Postimet e Mia" @@ -2018,7 +2044,6 @@ sq: unlock_trust_level: "Unlock Trust Level" tl3_requirements: title: "Requirements for Trust Level 3" - table_title: "Në 100 ditët e fundit:" value_heading: "Vlera" requirement_heading: "Requirement" visits: "Vizita" @@ -2079,8 +2104,8 @@ sq: confirm: 'Confirmation' dropdown: "Dropdown" site_text: - none: "Choose a type of content to begin editing." title: 'Text Content' + edit: 'redakto' site_settings: show_overriden: 'Only show overridden' title: 'Rregullimet' @@ -2180,6 +2205,8 @@ sq: name: "Name" image: "Imazh" delete_confirm: "Are you sure you want to delete the :%{name}: emoji?" + embedding: + edit: "redakto" permalink: title: "Permalinks" url: "URL" diff --git a/config/locales/client.sv.yml b/config/locales/client.sv.yml index e409e6baa..0476af986 100644 --- a/config/locales/client.sv.yml +++ b/config/locales/client.sv.yml @@ -136,6 +136,7 @@ sv: admin_title: "Admin" flags_title: "Flaggningar" show_more: "visa mer" + show_help: "alternativ" links: "Länkar" links_lowercase: one: "länk" @@ -302,6 +303,11 @@ sv: everyone: "Alla" trust_levels: none: "Inga" + notifications: + regular: + title: "Normal" + muted: + title: "Tystad" user_action_groups: '1': "Gillningar givna" '2': "Gillningar mottagna" @@ -311,7 +317,6 @@ sv: '6': "Svar" '7': "Omnämnanden" '9': "Citat" - '10': "Stjärnmärkt" '11': "Redigeringar" '12': "Skickade föremål" '13': "Inkorg" @@ -321,6 +326,7 @@ sv: all_subcategories: "alla" no_subcategory: "ingen" category: "Kategori" + category_list: "Visa kategori-lista" reorder: title: "Sortera kategorier" title_long: "Sortera litan av katergorier" @@ -415,9 +421,13 @@ sv: warnings_received: "varningar" messages: all: "Alla" - mine: "Mina" - unread: "Olästa" + inbox: "Inkorg" + sent: "Skickat" + archive: "Arkiv" groups: "Mina Grupper" + bulk_select: "Välj meddelanden" + move_to_inbox: "Flytta till inkorg" + select_all: "Markera alla" change_password: success: "(e-brev skickat)" in_progress: "(skickar e-brev)" @@ -975,8 +985,10 @@ sv: title: "Följer" description: "En räknare över antal nya svar visas för detta ämne. Du notifieras om någon nämner ditt @namn eller svarar dig." regular: + title: "Normal" description: "Du kommer att få en notifiering om någon nämner ditt @namn eller svarar dig." regular_pm: + title: "Normal" description: "Du kommer att notifieras om någon nämner ditt @namn eller svarar dig." muted_pm: title: "tystade" @@ -1338,6 +1350,7 @@ sv: tracking: title: "Följer" regular: + title: "Normal" description: "Du notifieras om någon nämner ditt @namn eller svarar på ditt inlägg." muted: title: "Tystad" @@ -2049,7 +2062,6 @@ sv: unlock_trust_level: "Lås upp förtroendenivå" tl3_requirements: title: "Krav för Förtroendenivå 3" - table_title: "Under de senaste 100 dagarna:" value_heading: "värde" requirement_heading: "krav" visits: "besök" diff --git a/config/locales/client.te.yml b/config/locales/client.te.yml index 0ccd1919f..a8a122f57 100644 --- a/config/locales/client.te.yml +++ b/config/locales/client.te.yml @@ -220,7 +220,6 @@ te: members: "సభ్యులు" posts: "టపాలు" alias_levels: - title: "ఈ గుంపును మారుపేరుతో ఎవరు వాడవచ్చు?" nobody: "ఎవరూకాదు" only_admins: "కేవలం అధికారులే" mods_and_admins: "కేవలం అధికారులు మరియు నిర్వాహకులు మాత్రమే" @@ -233,7 +232,6 @@ te: '4': "విషయాలు" '7': "ప్రస్తావనలు" '9': "కోట్ లు" - '10': "నక్షత్రపు" '11': "సవరణలు" '12': "పంపిన అంశాలు" '13': "ఇన్ బాక్స్" @@ -318,8 +316,6 @@ te: warnings_received: "హెచ్చరికలు" messages: all: "అన్నీ" - mine: "నావి" - unread: "చదవని" change_password: success: "(ఈమెయిల్ పంపిన)" in_progress: "(ఈమెయిల్ పంపుతోన్నాం)" @@ -1726,7 +1722,6 @@ te: unlock_trust_level: "నమ్మకపు స్థాయిని వదిలేయి" tl3_requirements: title: "నమ్మకపు స్థాయి 3 అవసరాలు" - table_title: "గత 100 రోజుల్లో:" value_heading: "విలువ" requirement_heading: "అవసరం" visits: "సందర్శనాలు" @@ -1785,7 +1780,6 @@ te: text: 'పాఠ్య క్షేత్రం' confirm: 'ఖాయము' site_text: - none: "సవరణను ప్రారంభించడానికి విషయం రకాన్ని ఎంచుకోండి." title: 'పాఠ్య కాంటెంటు' site_settings: show_overriden: 'ప్రాబల్యం ఉన్న వాటిని మాత్రమే చూపించు' diff --git a/config/locales/client.tr_TR.yml b/config/locales/client.tr_TR.yml index 097ea23c9..74c2e0c08 100644 --- a/config/locales/client.tr_TR.yml +++ b/config/locales/client.tr_TR.yml @@ -294,7 +294,6 @@ tr_TR: '6': "Yanıtlar" '7': "Bahsedenler" '9': "Alıntılar" - '10': "Yıldızlılar" '11': "Düzenlemeler" '12': "Yollanmış ögeler" '13': "Gelen Kutusu" @@ -411,8 +410,6 @@ tr_TR: warnings_received: "uyarılar" messages: all: "Hepsi" - mine: "Benimkiler" - unread: "Okunmamışlar" groups: "Gruplarım" change_password: success: "(e-posta gönderildi)" @@ -2144,7 +2141,6 @@ tr_TR: unlock_trust_level: "Güvenlik Seviyesi Kilidini Aç" tl3_requirements: title: "Güven Seviyesi 3 için Gerekenler" - table_title: "Son 100 günde:" value_heading: "Değer" requirement_heading: "Gereksinim" visits: "Ziyaretler" diff --git a/config/locales/client.uk.yml b/config/locales/client.uk.yml index 1a1f7383f..b404fb923 100644 --- a/config/locales/client.uk.yml +++ b/config/locales/client.uk.yml @@ -212,7 +212,6 @@ uk: members: "Учасники" posts: "Дописи" alias_levels: - title: "Хто може використовувати цю групу як аліас?" nobody: "Ніхто" only_admins: "Лише адміністратори" mods_and_admins: "Лише модератори та адміністратори" @@ -226,7 +225,6 @@ uk: '5': "Відповіді" '7': "Згадки" '9': "Цитати" - '10': "Позначені зірочкою" '11': "Редагування" '12': "Надіслані" '13': "Вхідні" @@ -313,8 +311,6 @@ uk: warnings_received: "попередження" messages: all: "Всі" - mine: "Мої" - unread: "Непрочитані" change_password: success: "(лист надіслано)" in_progress: "(надсилання листа)" @@ -1309,7 +1305,6 @@ uk: trust_level_3_requirements: "Вимоги для Рівня довіри 3" tl3_requirements: title: "Вимоги для Рівня довіри 3" - table_title: "Протягом останніх 100 днів:" value_heading: "Значення" requirement_heading: "Вимога" visits: "Відвідини" diff --git a/config/locales/client.zh_CN.yml b/config/locales/client.zh_CN.yml index df7235496..db81dfa01 100644 --- a/config/locales/client.zh_CN.yml +++ b/config/locales/client.zh_CN.yml @@ -294,7 +294,6 @@ zh_CN: '6': "回应" '7': "提到" '9': "引用" - '10': "星标" '11': "编辑" '12': "发送条目" '13': "收件箱" @@ -411,8 +410,6 @@ zh_CN: warnings_received: "警告" messages: all: "所有" - mine: "我的" - unread: "未读" groups: "我的小组" change_password: success: "(电子邮件已发送)" @@ -2144,7 +2141,6 @@ zh_CN: unlock_trust_level: "解锁信任等级" tl3_requirements: title: "3 级信任等级的需求" - table_title: "在过去的 100 天中:" value_heading: "价值" requirement_heading: "需求" visits: "访问" diff --git a/config/locales/client.zh_TW.yml b/config/locales/client.zh_TW.yml index 946575eb5..72807fe6c 100644 --- a/config/locales/client.zh_TW.yml +++ b/config/locales/client.zh_TW.yml @@ -90,11 +90,22 @@ zh_TW: google+: '在 Google+ 分享此連結' email: '以電子郵件分享此連結' action_codes: - split_topic: "切分此討論話題 %{when}" + split_topic: "於 %{when} 切分此討論話題" autoclosed: - enabled: '關閉 %{when}' + enabled: '於 %{when} 關閉' + disabled: '於 %{when} 開啟' closed: - enabled: '關閉 %{when}' + enabled: '於 %{when} 關閉' + disabled: '於 %{when} 開啟' + archived: + enabled: '於 %{when} 封存' + disabled: '於 %{when} 解除封存' + pinned: + enabled: '於 %{when} 置頂' + disabled: '於 %{when} 解除置頂' + pinned_globally: + enabled: '於 %{when} 全局置頂' + disabled: '於 %{when} 解除置頂' topic_admin_menu: "討論話題管理員操作" emails_are_disabled: "管理員已經停用了所有外寄郵件功能。通知信件都不會寄出。" edit: '編輯此討論話題的標題與分類' @@ -110,6 +121,7 @@ zh_TW: admin_title: "管理員" flags_title: "投訴" show_more: "顯示更多" + show_help: "選項" links: "連結" links_lowercase: other: "鏈結" @@ -181,6 +193,7 @@ zh_TW: saved: "儲存完畢!" upload: "上傳" uploading: "正在上傳..." + uploading_filename: "{{filename}} 上傳中..." uploaded: "上傳完畢!" enable: "啟用" disable: "停用" @@ -188,8 +201,10 @@ zh_TW: revert: "回復" failed: "失敗" switch_to_anon: "匿名模式" + switch_from_anon: "登出匿名模式" banner: close: "關閉此橫幅" + edit: "編輯此橫幅 >>" choose_topic: none_found: "未找到任何討論話題。" title: @@ -205,6 +220,8 @@ zh_TW: edit: "編輯" cancel: "取消" view_pending: "觀看等待審核的貼文" + has_pending_posts: + other: "本主題仍有 {{count}}篇貼文等待審核" confirm: "儲存變更" delete_prompt: "您確定要刪除 %{username} 這個帳號嗎?這會同時將該帳號的所有貼文一併刪除,並封鎖他的電子郵件與 IP。" approval: @@ -256,12 +273,14 @@ zh_TW: members: "成員" posts: "文章" alias_levels: + title: "誰可以在這個群組發送訊息和使用@提到" nobody: "沒有" only_admins: "只有管理員" mods_and_admins: "只有板主以及管理員" members_mods_and_admins: "只有群組成員、板主以及管理員" everyone: "所有人" trust_levels: + title: "當這些成員加入時自動提升信任等級:" none: "無" user_action_groups: '1': "已按讚" @@ -272,7 +291,6 @@ zh_TW: '6': "回應" '7': "提到" '9': "引用" - '10': "收藏" '11': "編輯" '12': "送出的項目" '13': "收件匣" @@ -283,7 +301,12 @@ zh_TW: no_subcategory: "無" category: "分類" reorder: + title: "重新排序分類" + title_long: "重新排序分類列表" + fix_order: "固定位置" + fix_order_tooltip: "並非所有的分類皆有唯一的位置參數, 可能會有出乎意料之外的結果." save: "儲存順序" + position: "位置" posts: "貼文" topics: "標題" latest: "最近" @@ -311,6 +334,8 @@ zh_TW: topics_entered: "已閱讀的討論話題" post_count: "# 文章" confirm_delete_other_accounts: "你確定要刪除這些帳號?" + user_fields: + none: "(選擇一個選項)" user: said: "{{username}}:" profile: "基本資料" @@ -374,8 +399,6 @@ zh_TW: warnings_received: "警告" messages: all: "全部" - mine: "我的" - unread: "未讀" groups: "我的群組" change_password: success: "( 寄出的郵件 )" @@ -1955,7 +1978,6 @@ zh_TW: unlock_trust_level: "解鎖信任等級" tl3_requirements: title: "信任等級 3 之條件" - table_title: "在過去100天內:" value_heading: "價值" requirement_heading: "要求" visits: "訪問" @@ -2021,6 +2043,7 @@ zh_TW: revert: "恢復變更" revert_confirm: "你確定要撤回這個改動?" go_back: "回到搜尋" + show_overriden: '只顯示修改過的項目' site_settings: show_overriden: '只顯示修改過的項目' title: '設定' @@ -2131,6 +2154,7 @@ zh_TW: settings: "嵌入設定" crawling_settings: "爬蟲設定" feed_polling_enabled: "匯入帖子藉由 RSS/ATOM" + save: "儲存崁入設定" permalink: title: "固定連結" url: "網址" @@ -2161,6 +2185,7 @@ zh_TW: categories: 'g, c 分類' top: 'g, t 頂端' bookmarks: 'g, b 書籤' + profile: 'g, p 個人檔案' messages: 'g, m 私人訊息' navigation: title: '導航' @@ -2288,6 +2313,7 @@ zh_TW: name: 說客 champion: name: 鬥士 + description: 已邀請 5 位成員 ( 信任等級 2 ) first_share: name: 首個分享 description: 分享文章 @@ -2310,4 +2336,5 @@ zh_TW: name: 熱門連結 description: 張貼的外部連結有最少 300 次的點擊 famous_link: + name: 出色連結 description: 張貼的外部連結有最少 1000 次的點擊 diff --git a/config/locales/server.ar.yml b/config/locales/server.ar.yml index b25d143d8..af74ce2cb 100644 --- a/config/locales/server.ar.yml +++ b/config/locales/server.ar.yml @@ -106,6 +106,7 @@ ar: not_found: "تعذر العثور على رابط العنوان المطلوب" invalid_access: "لا تمتلك صلاحيات لعرض المطلوب " read_only_mode_enabled: "الموقع في وضع القراءة فقط. عُطّلت التفاعلات." + likes: "الإعجابات" too_many_replies: zero: "يمكن للأعضاء الجدد الرد كما يحلو لهم في كل موضوع." one: "آسفون، فلا يمكن للأعضاء الجدد سوى الرد مرة واحدة في نفس الموضوع." @@ -607,6 +608,9 @@ ar: email_body: "%{link}\n\n%{message}" notify_moderators: title: "شيء آخر " + description: 'يحتاج هذا المنشور إجراء من الطاقم لسبب آخر لم يُذكر أعلاه.' + long_form: ' بَلِّغ عن هذا لتنبيه الطاقم ' + email_title: 'المنشور في "%{title}" يتطلب تنبيه الطاقم.' email_body: "%{link}\n\n%{message}" bookmark: title: 'المفضلة' @@ -631,6 +635,7 @@ ar: long_form: 'ترفع علم هذا عن صورة غير ملائمة' notify_moderators: title: "شيء آخر " + description: 'هذا الموضوع يتطلب اهتمام الطاقم العام معتمداً على التوجيهات, شروط الخدمة, أو لسبب آخر لم يذكر أعلاه.' long_form: 'علم هذا لتنبيه المراقب' email_title: 'الموضوع "%{title}" يتطلب موافقة المشرف' email_body: "%{link}\n\n%{message}" @@ -1141,7 +1146,6 @@ ar: anonymous_account_duration_minutes: "للحمايه الهويه اصنع حساب مجهول كل n دقائق لكل مستخدم.\nمثال:اذا ضبط 600 , بعد انقضي 600 دقيقه من اخر منشور و غير المستخدم للمجهول.تم انشاء حساب مجهول." hide_user_profiles_from_public: "قم بإلغاء الصفحة الشخصية و حقيبة المستخدم و بطاقة المستخدم للمستخدمين المجهولين" allow_profile_backgrounds: "اسمح للأعضاء برفع خلفيات ملف التعريف." - sequential_replies_threshold: "عدد مشاركات عضو في صف واحد في موضوع قبل يجري تذكير حول الردود متسلسلة كثيرة جداً." enable_mobile_theme: "اجهزه الموبايل تستخدم ثيم مناسب للجوال,امكانيه التحويل للموقع الكامل .الغي هذا اذا اردت استخدام انماط سريعه الاستجابه" dominating_topic_minimum_percent: "ما هي النسبه المئويه للمشاركات التي يجب علي المستخدم عملها في الموضوع قبل تلقيه لتنبيه عن خروجه لنطاق الموضوع" daily_performance_report: "تحليل سجلات NGINX يومي ونشر موضوع \"قاقم فقط\" مع التفاصيل" @@ -1772,24 +1776,8 @@ ar: لمزيد من الإرشادات، يرجى الرجوع إلى موقعنا على [community guidelines](%{base_url}/guidelines). user_automatically_blocked: subject_template: "العضو الجديد %{username} تم حجبه بسبب تبليغات عليه في المجتمع" - text_body_template: | - هذه رسالة تلقائية. - - المستخدم الجديد [%{username}](%{base_url}%{user_url})تم حظره تلقائيا بسبب عدة بالغات من عدة مستخدمين %{username}'s post(s). - - رجاءًا [استعراض البلاغات](%{base_url}/admin/flags).إذا تم حظر %{username} بشكل خاطئ من المشاركة، أنقر فوق رفع الحظر [صفحة الإدارة](%{base_url}%{user_url}). - - يمكن تغيير هذا الحد من اعدادات الموقع `block_new_user` . spam_post_blocked: subject_template: "العضو الجديد %{username} تم حجب مشاركاته بسبب تكرار الروابط " - text_body_template: | - هذه رسالة تلقائية. - - عضو جديد [%{username}](%{base_url}%{user_url}) حاول إنشاء المشاركات متعددة مع روابط إلى %{domains},ولكن هذه المشاركات تم حظرها لتجنب البريد المزعج. المستخدم لا يزال قادراً على أنشاء مشاركات جديدة التي لم تصل إلى %{domains}. - - من فضلك [review the user](%{base_url}%{user_url}). - - هذا يمكن تعديلها عن طريق `` newuser_spam_host_threshold` وإعدادات موقع white_listed_spam_host_domains`. unblocked: subject_template: "الحساب مُفعل " text_body_template: |+ @@ -1853,58 +1841,16 @@ ar: الرجاء زيارة هذا الرابط لعرض الرسالة: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [مساءً] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "ملخص المؤجز من %{site_link} منذ زيارتك الاخيره في %{last_seen_at}" subject_template: "[%{site_name}] الخلاصة" diff --git a/config/locales/server.bs_BA.yml b/config/locales/server.bs_BA.yml index dab1427b5..51bfc944b 100644 --- a/config/locales/server.bs_BA.yml +++ b/config/locales/server.bs_BA.yml @@ -16,8 +16,6 @@ bs_BA: loading: "Loading" powered_by_html: 'Powered by Discourse, best viewed with JavaScript enabled' log_in: "Log In" - via: "%{username} via %{site_name}" - is_reserved: "is reserved" purge_reason: "Automatically deleted due to being old and unverified" disable_remote_images_download_reason: "Remote images download was disabled because there wasn't enough disk space available." errors: &errors @@ -235,15 +233,11 @@ bs_BA: description: 'Ovaj post sadrži tekst koji je uvredljiv i pogrdan. I kao takav kosi se sa našim pravilima korišćenja.' long_form: 'opomeni kao neprikladno' notify_user: - description: 'Ovaj post sadrži materijal o kojem želim da raspravljam sa osobom direktno, privatno i bez opomene.' long_form: 'korisnik obavješten' email_title: 'Tvoj post u temi "%{title}"' email_body: "%{link}\n\n%{message}" notify_moderators: title: "Obavijesti Moderatore" - description: 'Ovaj post treba prijaviti moderatoru jer se kosi sa pravilima korišćenja, ili drugim razlogom ne navedenim gore.' - long_form: 'obavješten moderator' - email_title: 'Postu u temi "%{title}" treba pažnju moderatora' email_body: "%{link}\n\n%{message}" bookmark: title: 'Sačuvaj' @@ -268,7 +262,6 @@ bs_BA: long_form: 'opomenuto kao neprikladno' notify_moderators: title: "Obavijesti Moderatore" - description: 'Ovu temu treba prijaviti moderatoru jer se kosi sa pravilima korišćenja, ili drugim razlogom ne navedenim gore.' long_form: 'moderator obaviješten' email_title: 'Ova tema "%{title}" treba pažnju moderatora' email_body: "%{link}\n\n%{message}" @@ -392,37 +385,6 @@ bs_BA: consumer_email_warning: "Your site is configured to use Gmail (or another consumer email service) to send email. Gmail limits how many emails you can send. Consider using an email service provider like mandrill.com to ensure email deliverability." site_contact_username_warning: "The site_contact_username setting is blank. Please update it in the Site Settings. Set it to the username of an admin user who should be the sender of system messages." notification_email_warning: "The notification_email setting is blank. Please update it in the Site Settings." - content_types: - education_new_reply: - title: "New User Education: First Replies" - description: "Pop up just-in-time guidance automatically displayed above the composer when new users begin typing their first two new replies." - education_new_topic: - title: "New User Education: First Topics" - description: "Pop up just-in-time guidance automatically displayed above the composer when new users begin typing their first two new topics." - usage_tips: - title: "New User Guidance" - description: "Guidance and essential information for new users." - welcome_user: - title: "Welcome: New User" - description: "A private message automatically sent to all new users when they sign up." - welcome_invite: - title: "Welcome: Invited User" - description: "A private message automatically sent to all new invited users when they accept the invitation from another user to participate." - login_required_welcome_message: - title: "Login Required: Welcome Message" - description: "Welcome message that is displayed to logged out users when the 'login required' setting is enabled." - login_required: - title: "Login Required: Homepage" - description: "The text displayed for unauthorized users when login is required on the site." - head: - title: "HTML head" - description: "HTML that will be inserted inside the tags." - top: - title: "Top of the pages" - description: "HTML that will be added at the top of every page (after the header, before the navigation or the topic title)." - bottom: - title: "Bottom of the pages" - description: "HTML that will be added at the bottom of every page." site_settings: censored_words: "Words that will be automatically replaced with ■■■■" delete_old_hidden_posts: "Auto-delete any hidden posts that stay hidden for more than 30 days." @@ -661,7 +623,6 @@ bs_BA: max_daily_gravatar_crawls: "Maximum number of times Discourse will check Gravatar for custom avatars in a day" public_user_custom_fields: "A whitelist of custom fields for a user that can be shown publically." allow_profile_backgrounds: "Allow users to upload profile backgrounds." - sequential_replies_threshold: "Number posts a user has to make in a row in a topic before being reminded about too many sequential replies. " enable_mobile_theme: "Mobile devices use a mobile-friendly theme, with the ability to switch to the full site. Disable this if you want to use a custom stylesheet that is fully responsive." dominating_topic_minimum_percent: "What percentage of posts a user has to make in a topic before being reminded about overly dominating a topic." suppress_uncategorized_badge: "Don't show the badge for uncategorized topics in topic lists." @@ -685,7 +646,6 @@ bs_BA: notify_about_flags_after: "If there are flags that haven't been handled after this many hours, send an email to the contact_email. Set to 0 to disable." enable_cdn_js_debugging: "Allow /logs to display proper errors by adding crossorigin permissions on all js includes." show_create_topics_notice: "If the site has fewer than 5 public topics, show a notice asking admins to create some topics." - vacuum_db_days: "Run VACUUM FULL ANALYZE to reclaim DB space after migrations (set to 0 to disable)" prevent_anons_from_downloading_files: "Prevent anonymous users from downloading files. WARNING: this will prevent any site assets posted as attachments from working." errors: invalid_email: "Invalid email address." @@ -1033,24 +993,8 @@ bs_BA: For additional guidance, please refer to our [community guidelines](%{base_url}/guidelines). user_automatically_blocked: subject_template: "New user %{username} blocked due to community flags" - text_body_template: | - This is an automated message. - - The new user [%{username}](%{base_url}%{user_url}) was automatically blocked because multiple users flagged %{username}'s post(s). - - Please [review the flags](%{base_url}/admin/flags). If %{username} was incorrectly blocked from posting, click the unblock button on [the admin page for this user](%{base_url}%{user_url}). - - This threshold can be changed via the `block_new_user` site settings. spam_post_blocked: subject_template: "New user %{username} posts blocked due to repeated links" - text_body_template: | - This is an automated message. - - The new user [%{username}](%{base_url}%{user_url}) tried to create multiple posts with links to %{domains}, but those posts were blocked to avoid spam. The user is still able to create new posts that do not link to %{domains}. - - Please [review the user](%{base_url}%{user_url}). - - This can be modified via the `newuser_spam_host_threshold` and `white_listed_spam_host_domains` site settings. unblocked: subject_template: "Account unblocked" text_body_template: | @@ -1074,8 +1018,6 @@ bs_BA: unsubscribe: title: "Odjavi se" description: "Niste zainteresovani za ove email-e? Nema problema! Kliknite ovdje da se odjavite:" - reply_by_email: "Da odgovorite, reply to this email or visit %{base_url}%{url} in your browser." - visit_link_to_respond: "Da odgovorite, posjetite %{base_url}%{url} u vašem browseru." posted_by: "Odgovoreno %{username} dana %{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} invited you to a private message '%{topic_title}'" @@ -1085,49 +1027,14 @@ bs_BA: Please visit this link to view the topic: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Ukratko šta se dešavalo na %{site_link} od vaše zadnje posjete %{last_seen_at}." subject_template: "[%{site_name}] Pregled za %{date}" diff --git a/config/locales/server.cs.yml b/config/locales/server.cs.yml index 4ef52c16e..2269a88b9 100644 --- a/config/locales/server.cs.yml +++ b/config/locales/server.cs.yml @@ -769,54 +769,14 @@ cs: Prosíme klikněte na tento odkaz pro zobrazení konverzace: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{username} vás citoval v '%{topic_title}'" - text_body_template: | - %{username} vás citoval v '%{topic_title}' na %{site_name}: - - --- - %{message} - - --- - Prosím navšivte tento odkaz, chcete-li odpovědět: %{base_url}%{url} user_quoted: subject_template: "[%{site_name}] %{username} vás citoval v '%{topic_title}'" - text_body_template: | - %{username} vás citoval v '%{topic_title}' na %{site_name}: - - --- - %{message} - - --- - Prosím navšivte tento odkaz, chcete-li odpovědět: %{base_url}%{url} user_mentioned: subject_template: "[%{site_name}] %{username} vás citoval v '%{topic_title}'" - text_body_template: | - %{username} vás citoval v '%{topic_title}' na %{site_name}: - - --- - %{message} - - --- - Prosím navšivte tento odkaz, chcete-li odpovědět: %{base_url}%{url} user_posted: subject_template: "[%{site_name}] %{username} vás citoval v '%{topic_title}'" - text_body_template: | - %{username} vás citoval v '%{topic_title}' na %{site_name}: - - --- - %{message} - - --- - Prosím navšivte tento odkaz, chcete-li odpovědět: %{base_url}%{url} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{username} vás citoval v '%{topic_title}' na %{site_name}: - - --- - %{message} - - --- - Prosím navšivte tento odkaz, chcete-li odpovědět: %{base_url}%{url} digest: new_activity: "Nová aktivita ve vašich tématech a příspěvcích:" top_topics: "Populární příspěvky" diff --git a/config/locales/server.da.yml b/config/locales/server.da.yml index 7f78c3ef7..dd05eed3c 100644 --- a/config/locales/server.da.yml +++ b/config/locales/server.da.yml @@ -740,49 +740,14 @@ da: posted_by: "Oprettet af %{username} den %{post_date}" user_replied: subject_template: "[%{site_name}] %{username} svarede på dit indlæg i emnet '%{topic_title}'" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{username} citerede dig i emnet '%{topic_title}'" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{subject_prefix}%{username} skrev et indlæg i emnet '%{topic_title}'" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Et kort resume af %{site_link} siden dit sidste besøg %{last_seen_at}" subject_template: "Sammenfatning af [%{site_name}]" diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml index 80c92ec0b..2b73288a4 100644 --- a/config/locales/server.de.yml +++ b/config/locales/server.de.yml @@ -157,6 +157,8 @@ de: errors: can_not_modify_automatic: "Du kannst eine automatisch verwaltete Gruppe nicht verändern." member_already_exist: "'%{username}' ist bereits Mitglied dieser Gruppe." + invalid_domain: "'%{domain}' ist keine gültige Domain." + invalid_incoming_email: "'%{incoming_email}' ist keine gültige E-Mail-Adresse." default_names: everyone: "jeder" admins: "admins" @@ -427,11 +429,16 @@ de: description: 'Dieser Beitrag enthält Inhalte, die eine vernünftige Person als anstößig, beleidigend oder unsere Richtlinien verletzend auffassen würde.' long_form: 'dies als unangemessen gemeldet' notify_user: + title: 'Schreibe @{{username}} eine Nachricht' + description: 'Ich möchte mit dieser Person direkt und persönlich über ihren Beitrag reden.' long_form: 'angeschriebener Benutzer' email_title: 'Dein Beitrag in „%{title}“' email_body: "%{link}\n\n%{message}" notify_moderators: title: "Irgendetwas anderes" + description: 'Auf diesen Beitrag sollte aus einem oben nicht aufgeführten Grund ein Moderator aufmerksam gemacht werden.' + long_form: 'hat dies den Moderatoren gemeldet' + email_title: 'Ein Beitrag in "%{title}" sollte von einem Moderator begutachtet werden' email_body: "%{link}\n\n%{message}" bookmark: title: 'Lesezeichen' @@ -966,7 +973,6 @@ de: anonymous_account_duration_minutes: "Um die Anonymität der virtuellen anonymen Nutzer zu erhalten, erzeuge ein neues anonymes Konto alle N Minuten je Benutzer. Beispiel: wenn dies auf 600 gesetzt ist wird ein neues anonymes Konto erzeugt, wenn ein Benutzer in den anonymen Modus wechselt UND mindestens 600 Minuten seit der letzten anonymen Nachricht dieses Nutzers vergangen sind." hide_user_profiles_from_public: "Deaktiviert Benutzerkarten, Nutzerprofile und das Benutzerverzeichnis für anonyme Nutzer." allow_profile_backgrounds: "Erlaube Benutzern Profilhintergründe hochzuladen." - sequential_replies_threshold: "Anzahl von Beiträgen, die ein Benutzer in einem Thema am Stück schreiben darf, bevor er eine Erinnerung bezüglich zu vieler aufeinanderfolgender Antworten erhält." enable_mobile_theme: "Mobilgeräte verwenden eine mobile Darstellung mit der Möglichkeit zur vollständigen Seite zu wechseln. Deaktiviere diese Option, wenn du ein eigenes Full-Responsive-Stylesheet verwenden möchtest." dominating_topic_minimum_percent: "Anteil der Nachrichten eines Themas in Prozent, die ein einzelner Nutzer verfassen darf, bevor dieser Nutzer darauf hingewiesen wird, dass er dieses Thema dominiert." daily_performance_report: "Analysiere die NGINX-Logs täglich. Poste anschließend eine Zusammenfassung als Beitrag, welcher nur für Moderatoren oder Administratoren zugänglich ist." @@ -1585,24 +1591,8 @@ de: Weitere Informationen hierzu findest du in unseren [Richtlinien](%{base_url}/guidelines). user_automatically_blocked: subject_template: "Neuer Benutzer %{username} wegen Gemeinschaftsrichtlinien blockiert." - text_body_template: | - Dies ist eine automatische Nachricht. - - Der neue Benutzer [%{username}](%{base_url}%{user_url}) wurde automatisch gesperrt, da mehrere Benutzer die Beiträge von %{username} gemeldet haben. - - Bitte [überprüfe die Meldungen](%{base_url}/admin/flags). Falls %{username} fälschlicherweise gesperrt wurde, drücke den 'Entsperren'-Knopf auf der [Administrationsseite für den Benutzer](%{base_url}%{user_url}). - - Der Schwellwert kann über die Seiteneinstellung `block_new_user` angepasst werden. spam_post_blocked: subject_template: "Beiträge des neuen Benutzers ${username} wegen mehrfacher Verlinkung blockiert" - text_body_template: | - Dies ist eine automatische Nachricht. - - Der neue Benutzer [%{username}](%{base_url}%{user_url}) hat versucht mehrere Beiträge mit Links zu %{domains} zu erstellen. Diese Beiträge wurden aber blockiert, um Spam zu vermeiden. Der Benutzer kann immer noch neue Beiträge erstellen, die nicht auf %{domains} verlinken. - - Bitte [überprüfe den Benutzer](%{base_url}%{user_url}). - - Dieses Verhalten kann durch die Seiteneinstellungen `newuser_spam_host_threshold` und `white_listed_spam_host_domains` geändert werden. unblocked: subject_template: "Blockierung des Kontos aufgehoben" text_body_template: | @@ -1662,58 +1652,16 @@ de: eingeladen. Bitte besuche diesen Link um das Thema zu lesen: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{username} hat auf deinen Beitrag '%{topic_title}' geantwortet" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{username} hat Dich in '%{topic_title}' zitiert" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{username} hat Dich in '%{topic_title}' erwähnt" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{subject_prefix}%{username} hat auf '%{topic_title}' geantwortet" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Eine kurze Zusammenfassung von %{site_link} seit deinem letzten Besuch am %{last_seen_at}" subject_template: "[%{site_name}] Übersicht" diff --git a/config/locales/server.es.yml b/config/locales/server.es.yml index b7adb5b53..8cd8b4e74 100644 --- a/config/locales/server.es.yml +++ b/config/locales/server.es.yml @@ -90,6 +90,8 @@ es: not_found: "No se ha podido encontrar la URL o recurso solicitado." invalid_access: "No tienes permiso para ver el recurso solicitado." read_only_mode_enabled: "El sitio está en modo sólo lectura. Las interacciones están deshabilitadas." + reading_time: "Tiempo de lectura" + likes: "Me gusta" too_many_replies: one: "Lo sentimos, pero los usuarios nuevos están limitados a 1 respuesta en el mismo tema." other: "Lo sentimos, pero los usuarios nuevos están limitados a %{count} respuestas en el mismo tema." @@ -872,6 +874,7 @@ es: tl2_requires_likes_received: "¿Cuántos 'me gusta' un usuario debe de recibir antes de promoverlo a nivel de confianza 2?" tl2_requires_likes_given: "¿Cuántos 'me gusta' un usuario debe de dar antes de promoverlo a nivel de confianza 2?" tl2_requires_topic_reply_count: "¿Cuántos temas un usuario debe de contestar antes de promoverlo a nivel de confianza 2?" + tl3_time_period: "Tiempo para requisitos del nivel de confianza 3" tl3_requires_days_visited: "El número mínimo de días que un usuario necesito haber visitado el sitio en los últimos 100 días para calificar a promoción de nivel de confianza 3. (0 a 100)" tl3_requires_topics_replied_to: "El número mínimo de temas que un usuario necesito haber respondido en los últimos 100 días para calificar a promoción de nivel de confianza 3. (0 o superior)." tl3_requires_topics_viewed: "El porcentaje de temas creados en los últimos 100 días que un usuario necesito haber visto para calificar a promoción de nivel de confianza 3. (0 a 100)" @@ -948,6 +951,7 @@ es: disable_emails: "Impedir que Discourse envié cualquier tipo de e-mail." strip_images_from_short_emails: "Remover imágenes de e-mails que tengan un tamaño menor a 2800 Bytes" short_email_length: "e-mail corto longitud en Bytes" + display_name_on_email_from: "Mostrar nombres completos en los campos de remitente de emails" pop3_polling_enabled: "Poll vía POP3 para respuestas de e-mail." pop3_polling_ssl: "Usar SSL mientras se conecta al servidor POP3. (Recomendado)" pop3_polling_period_mins: "El período en minutos entre revisiones de correo de la cuenta POP3. NOTA: requiere reiniciar." @@ -986,9 +990,10 @@ es: anonymous_account_duration_minutes: "Para proteger el anonimato, crear una nueva cuenta anónima cada N minutos para cada usuario. Ejemplo: si se establece en 600, tan pronto como pasen 600 minutos desde el último post Y el usuario cambie a anónimo, se creará una nueva cuenta anónima." hide_user_profiles_from_public: "Desactiva las tarjetas de usuario, los perfiles y el directorio de usuarios para usuarios anónimos." allow_profile_backgrounds: "Permitir a los usuarios subir sus propios fondos de perfil personalizados." - sequential_replies_threshold: "Número de posts consecutivos que un usuario publicará en un mismo tema hasta mostrarle un recordatorio sobre demasiadas repuestas seguidas." + sequential_replies_threshold: "Número de mensajes que un usuario tiene que publicar seguidos antes de que se le recuerde sobre demasiadas respuestas consecutivas." enable_mobile_theme: "Los dispositivos móviles utilizan un tema adaptado, con la habilidad de cambiar al estilo de sitio completo. Deshabilita esta opción si quieres utilizar una plantilla personalizada que sea completamente adaptable." dominating_topic_minimum_percent: "Qué porcentaje de posts tiene que publicar un usuario en un mismo tema hasta mostrarle un recordatorio acerca de dominar en demasía un tema." + disable_avatar_education_message: "Desactivar mensaje incentivador para que los usuarios se cambien su foto de perfil." daily_performance_report: "Analizar registros de NGINX diariamente y publicar un tema para Administradores con los detalles" suppress_uncategorized_badge: "No mostrar la etiqueta de los temas sin categoría en la lista de temas." permalink_normalizations: "Aplicar la siguiente expresion regular antes de los enlaces, por ejemplo: /(\\/topic.*)\\?.*/\\1 despojará las cadenas de consulta de las rutas de los temas. El formato es regex+string use \\1 etc. para acceder a capturas" @@ -1018,6 +1023,7 @@ es: enable_cdn_js_debugging: "Permitir /logs mostrar los errores correctamente, añadiendo permisos crossorigin en todas las inclusiones de js" show_create_topics_notice: "Si el sitio tiene menos de 5 temas abiertos al público, mostrar un aviso pidiendo a los administradores crear más temas." delete_drafts_older_than_n_days: Eliminar borradores de más de (n) días de antigüedad. + vacuum_db_days: "Ejecutar VACUUM ANALYZE para reclamar espacio en la base de datos después de las migraciones. (Poner en 0 para inhabilitar)" prevent_anons_from_downloading_files: "Impedir que los usuarios anónimos descarguen archivos. ADVERTENCIA: Esto impedirá que funcione cualquier recurso del sitio publicado como adjunto." slug_generation_method: "Elegir un método de generación de slug. 'encoded' generará cadenas con código porciento. 'none' hara que no se genere slug." enable_emoji: "Habilitar emoji" @@ -1503,7 +1509,7 @@ es: Como medida precautoria, tu nueva cuenta ha sido bloqueada para crear nuevas respuestas o temas hasta que un miembro del staff pueda revisar tu cuenta. - Para orientación adicional, por favor revise nuestras [reglas de comunidad](%{base_url}/guidelines). + Para orientación adicional, por favor revisa nuestras [reglas de comunidad](%{base_url}/guidelines). blocked_by_staff: subject_template: "Cuenta bloqueada" text_body_template: | @@ -1511,20 +1517,27 @@ es: Esto es un mensaje automatizado de %{site_name} para informatarte que tu cuenta ha sido bloqueada por un miembro del staff. - Para orientación adicional, por favor revise nuestras [reglas de comunidad](%{base_url}/guidelines). + Para orientación adicional, por favor revisa nuestras [reglas de comunidad](%{base_url}/guidelines). user_automatically_blocked: subject_template: "El nuevo usuario %{username} ha sido bloqueado tras ser reportado por la comunidad" text_body_template: | - Éste es un mensaje automático. + Este es un mensaje automático. - El nuevo usuario [%{username}](%{base_url}%{user_url}) ha sido bloqueado automáticamente porque múltiples usuarios han reportado el/los post(s) de %{username}. + El usuario nuevo [%{username}](%{user_url}) ha sido automáticamente bloqueado porque varios usuarios han reportado los mensajes de %{username}. - Por favor, [revisa los informes](%{base_url}/admin/flags). Si %{username} ha sido bloqueado incorrectamente, clica el botón de desbloquear en [la página de administración para este usuario](%{base_url}%{user_url}). + Por favor, [mira los reportes](%{base_url}/admin/flags). Si %{username} hubiera sido bloqueado incorrectamente, click haz clic en el botón de desbloquear en la [página de administración del usuario](%{user_url}). - El umbral puede ser cambiado vía configuración del sitio en `block_new_user`. + Esto puede ser cambiado con el ajuste `block_new_user`. spam_post_blocked: subject_template: "El nuevo usuario %{username} tiene posts bloqueados debido a repetición de enlaces." - text_body_template: "Este es un mensaje automático. \n\nEl usuario [%{username}](%{base_url}%{user_url}) intento crear multiples posts con links hacia %{domains}, pero dichos posts fueron bloqueados para evitar el spam. El usuario aun esta habilitado para crear nuevos posts que no contengan links hacia %{domains}.\n\nPor favor [revise el usuario] (%{base_url}%{user_url}).\n\nEsto puede ser modificado por medio de las opciones de configuración `newuser_spam_host_threshold` y `white_listed_spam_host_domains`.\n" + text_body_template: | + Este es un mensaje automático. + + El usuario nuevo [%{username}](%{user_url}) ha intentado crear múltiples temas con enlaces a %{domains}, pero han sido bloqueados para evitar spam. El usuario todavía puede crear temas, siempre y cuando no contengan enlaces a %{domains}. + + Por favor, [echa un vistazo al usuario](%{user_url}). + + Esto puede ser modificado con los ajustes`newuser_spam_host_threshold` y`white_listed_spam_host_domains`. unblocked: subject_template: "Cuenta desbloqueada" text_body_template: | @@ -1544,11 +1557,8 @@ es: download_remote_images_disabled: subject_template: "Inhabilitar la descarga de imágenes remotas" text_body_template: "La opción `download_remote_images_to_local` ha sido inhabilitada porque se ha llegado al límite de espacio en disco configurado en `download_remote_images_threshold`." - unsubscribe_link: |+ - Para parar de recibir notificaciones para este tema en particular, [haz clic aquí](%{unsubscribe_url}). - - Para darte de baja de estos emails, cambia tus [preferencias de usuario](%{user_preferences_url}). - + unsubscribe_link: | + Para no recibir más notificaciones de este tema en particular, [haz clic aquí](%{unsubscribe_url}). Para desuscribirte , cambia tus [preferencias de usuario](%{user_preferences_url}). subject_re: "Re:" subject_pm: "[MP]" user_notifications: @@ -1556,8 +1566,8 @@ es: unsubscribe: title: "Darse de baja" description: "¿No estás interesado en recibir estos emails? ¡No hay problema! Haz clic abajo para darte de baja de forma instantánea:" - reply_by_email: "Para contestar, responde a este email o [visita el tema](%{base_url}%{url}) en tu navegador." - visit_link_to_respond: "Para contestar, [visita el tema](%{base_url}%{url}) en tu navegador." + reply_by_email: "Para responder, responde a este mensaje o [visita el tema](%{base_url}%{url})." + visit_link_to_respond: "Para responder, [visita el tema](%{base_url}%{url})." posted_by: "Publicado por %{username} el %{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} te ha invitado a un hilo de mensajes '%{topic_title}'" @@ -1574,6 +1584,21 @@ es: > %{site_title} -- %{site_description} Por favor visita este enlace para verlo: %{base_url}%{url} + user_invited_to_private_message_pm_staged: + subject_template: "[%{site_name}] %{username} te ha invitado a un mensaje '%{topic_title}'" + text_body_template: |2 + + %{username} te ha invitado a un mensaje + + > **%{topic_title}** + > + > %{topic_excerpt} + + at + + > %{site_title} -- %{site_description} + + Por favor, visita este enlace para ver el mensaje: %{base_url}%{url} user_invited_to_topic: subject_template: "[%{site_name}] %{username} te ha invitado a un tema '%{topic_title}'" text_body_template: |2 @@ -1592,6 +1617,8 @@ es: user_replied: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1601,6 +1628,8 @@ es: user_quoted: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1610,6 +1639,8 @@ es: user_mentioned: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1619,6 +1650,8 @@ es: user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1628,20 +1661,31 @@ es: user_posted: subject_template: "[%{site_name}] %{subject_prefix}%{username} publicó en '%{topic_title}'" text_body_template: | - %{username} publicó en '%{topic_title}' en %{site_name}: + %{header_instructions} - --- - %{message} - - --- - Por favor visita este enlace para contestar: %{base_url}%{url} - user_posted_pm: - subject_template: "[%{site_name}] [MP] %{topic_title}" - text_body_template: | %{message} %{context} + --- + %{respond_instructions} + user_posted_pm: + subject_template: "[%{site_name}] [MP] %{topic_title}" + text_body_template: | + %{header_instructions} + + %{message} + + %{context} + + --- + %{respond_instructions} + user_posted_pm_staged: + subject_template: "%{optional_re}%{topic_title}" + text_body_template: |2 + + %{message} + --- %{respond_instructions} digest: @@ -1688,7 +1732,7 @@ es: text_body_template: | Una nueva cuenta ha sido creada por ti en %{site_name} - Da clic en el siguiente enlace para escoger una contraseña para tu nueva cuenta: + Pulsa en el siguiente enlace para escoger una contraseña para tu nueva cuenta: %{base_url}/users/password-reset/%{email_token} authorize_email: subject_template: "[%{site_name}] Confirma tu nueva dirección de email" diff --git a/config/locales/server.fa_IR.yml b/config/locales/server.fa_IR.yml index 5822bee95..60f0a87fa 100644 --- a/config/locales/server.fa_IR.yml +++ b/config/locales/server.fa_IR.yml @@ -894,7 +894,6 @@ fa_IR: anonymous_posting_min_trust_level: "حداقل سطح اعتماد برای فعال سازی نوشته گذاشتن در حالت ناشناس" anonymous_account_duration_minutes: "برای محافظت از ناشناس ماندن یک حساب کاربری نانشناس بساز هر N دقیقه. برای مثال: اگر به 600 تنظیم شد٬‌ به محض اینکه 600 دقیقه از نوشته گذشت و کاربر سوئیچ شد به چند لحظه بعد٬‌ حساب کاربری جدید ناشناس ساخته می شود. " allow_profile_backgrounds: "به کاربر اجازه بده تا پس زمینه نمایه خود را آپلود کنند." - sequential_replies_threshold: "تعداد پست هایی که کاربر باید بسازد در یک ردیف در یک جستار قبل از یاآوری درباره پاسخ های پی در پی. " enable_mobile_theme: "دستگاه های موبایلی که از تم دوستانه موبایل استفاده می کنن٬‌ با قابلیت جابجایی به حالت تمام سایت. این را از کار بیانداز اگر می خواهی از شیوه سفارشی استفاده کنی که بطور کامل پاسخگو است." dominating_topic_minimum_percent: " پست های یک کاربر چند درصد باید درست کنند در یک جستار قبل از اینکه یادآوری بشن درباره بیش از اندازه بودن آن در یک جستار. " daily_performance_report: "تحلیل لاگ‌های NGINX و ارسال یک پست شامل جزئیات ویژه مدیران" @@ -1241,19 +1240,8 @@ fa_IR: text_body_template: "سلام٬ \n\n\nاین یک پیام خودکار است از طرف %{site_name} برای اطلاع در جهت اینکه حساب کاربری شما توسط یکی از مدیران مدیران مسدود شده است.\n\nبرای راهنمایی بیشتر٬ لطفا مراجعه کنید به [دستورالعمل انجمن](%{base_url}/guidelines).\n" user_automatically_blocked: subject_template: "کاربر جدید%{username} مسدود شد بخاطر پرچم های انجمن" - text_body_template: "این یک پیام خودکار است. \n\n\nکاربر جدید [%{username}](%{base_url}%{user_url}) بطور خودکار مسدود شد زیرا چند کاربر متفاوت %{username}'s این نوشته(ها) را پرچم گزاری کرده اند.\n\n\nلطفا [پرچم ها را بررسی کن](%{base_url}/admin/flags). اگر %{username} به اشتباه مسدود شده بود لطفا به روی کلید رفع مسدود کلیک کنید[مدیرصفحه برای این کاربر](%{base_url}%{user_url}). \n\n\nاین آستانه می تواند تغییر کند از طریق `block_new_user` تنظیمات سایت.\n" spam_post_blocked: subject_template: "کاربر جدید%{username} نوشته مسدود شده است بدلیل پیوند های تکراری" - text_body_template: | - این یک پیام خودکار است. - - کاربرجدید [%{username}](%{base_url}%{user_url}) تلاش کرد برای ساخت چند نوشته با پیوندهایی به %{domains}, ولی آن نوشته ها مسدود شده اند برای جلوگیری از هرزنامه. کاربر هنوز قادر به ساخت نوشته های جدید است که به پیوندی به این %{domains} ندارد. - - - لطفا [کاربر را بررسی کنید](%{base_url}%{user_url}). - - - این می تواند تغییر کند با `newuser_spam_host_threshold` و `white_listed_spam_host_domains` site settings. unblocked: subject_template: "حساب کاربری رفع انسداد شد " text_body_template: "سلام \n\nاین یک پیام خودکار هست از طرف %{site_name} برای تایید باز شدن حساب کاربری شما بعد از بررسی مدیران. \n\n\nشما می توانید دوباره پاسخ ها و جستارهای جدید را بوجود بیاورید.\n" @@ -1283,49 +1271,14 @@ fa_IR: text_body_template: "\n%{username} به گفتگو دعوت شده است\n\n\n> **%{topic_title}**\n\n>\n\n> %{topic_excerpt}\n\nat \n\n\n> %{site_title} -- %{site_description}\n\n\nلطفا از این پیوند بازدید کنید تا پیام را ببینید: %{base_url}%{url}\n" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - {message}% - - {context}% - - --- - {respond_instructions}% user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "یک گزارش کوتاه از %{site_link} از آخرین باری که بازدید کردید در %{last_seen_at}" subject_template: "[%{site_name}] خلاصه" diff --git a/config/locales/server.fi.yml b/config/locales/server.fi.yml index d8940eff0..4f08e349e 100644 --- a/config/locales/server.fi.yml +++ b/config/locales/server.fi.yml @@ -90,6 +90,8 @@ fi: not_found: "Pyydettyä osoitetta tai resurssia ei löytynyt." invalid_access: "Sinulla ei ole oikeutta nähdä pyydettyä resurssia." read_only_mode_enabled: "Sivusto on vain luku-tilassa. Vuorovaikutteiset toiminnot ovat poissa käytöstä." + reading_time: "Lukuaika" + likes: "Tykkäykset" too_many_replies: one: "Pahoittelut, uudet käyttäjät voivat kirjoittaa yhden vastauksen samaan ketjuun." other: "Pahoittelut, uudet käyttäjät voivat kirjoittaa %{count} vastausta samaan ketjuun." @@ -449,6 +451,8 @@ fi: notify_moderators: title: "Jotain muuta" description: 'Valvojan tulee huomioida tämä viesti muusta kuin yllä listatusta syystä.' + long_form: 'liputti tämän valvojien nähtäväksi' + email_title: 'Valvojien tulisi huomioida viesti ketjussa "%{title}" ' email_body: "%{link}\n\n%{message}" bookmark: title: 'Kirjanmerkki' @@ -765,8 +769,8 @@ fi: suppress_reply_when_quoting: "Älä näytä vastauksena-painiketta viestin yläreunassa, kun viestissä on lainaus." max_reply_history: "Maksimimäärä vastauksia, jotka avataan klikattaessa 'vastauksena' painiketta" experimental_reply_expansion: "Piilota välilliset vastaukset, kun 'vastauksena' avataan (kokeellinen)" - topics_per_period_in_top_summary: "Kejujen lukumäärä, joka näytetään oletuksena Huiput-listauksissa." - topics_per_period_in_top_page: "Kejujen lukumäärä, joka näytetään laajennetussa Huiput-listauksessa." + topics_per_period_in_top_summary: "Ketjujen lukumäärä, joka näytetään oletuksena Huiput-listauksissa." + topics_per_period_in_top_page: "Ketjujen lukumäärä, joka näytetään laajennetussa Huiput-listauksessa." redirect_users_to_top_page: "Ohjaa uudet ja kauan poissa olleet käyttäjät automaattisesti huiput-sivulle." top_page_default_timeframe: "Huiput-sivun oletusaikajakso." show_email_on_profile: "Näytä käyttäjän sähköpostiosoite profiilissa (näkyy vain käyttäjälle itselleen ja henkilökunnalle)" @@ -870,6 +874,7 @@ fi: tl2_requires_likes_received: "Kuinka monta tykkäystä käyttäjän täytyy saada ennen ylentämistä luottamustasolle 2." tl2_requires_likes_given: "Kuinka monta tykkäystä käyttäjän täytyy antaa ennen ylentämistä luottamustasolle 2." tl2_requires_topic_reply_count: "Kuinka moneen ketjuun käyttäjän täytyy vastata ennen ylentämistä luottamustasolle 2." + tl3_time_period: "Luottamustason 3 vaatimuksiin liittyvän ajanjakson pituus" tl3_requires_days_visited: "Monenako päivänä vähintään käyttäjän täytyy olla vieraillut sivustolla viimeisen 100 päivän aikana voidakseen saavuttaa luottamustason 3. (asteikko 0-100)" tl3_requires_topics_replied_to: "Moneenko ketjuun vähintään käyttäjän täytyy olla vastannut viimeisen 100 päivän aikana voidakseen saavuttaa luottamustason 3. (0 tai korkeampi)" tl3_requires_topics_viewed: "Montako prosenttia viimeisen 100 päivän aikana luoduista ketjuista käyttäjän täytyy olla katsellut voidakseen saavuttaa luottamustason 3. (asteikko 0-100)" @@ -987,6 +992,7 @@ fi: sequential_replies_threshold: "Kuinka monen peräkkäisen viestin jälkeen yhdessä ketjussa käyttäjää muistutetaan peräkkäisistä vastauksista." enable_mobile_theme: "Mobiililaitteet käyttävät erillistä teemaa ja kahden välillä on mahdollista vaihtaa. Poista asetus käytöstä, jos haluat käyttää omaa tyylitiedostoa, joka on mukautuva eri laitteille." dominating_topic_minimum_percent: "Kuinka monta prosenttia ketjun viesteistä käyttäjän täytyy kirjoittaa, ennen kuin tulee muistutetuksi ketjun dominoinnista." + disable_avatar_education_message: "Piilota opastusviesti, joka näytetään kun profiilikuvaa vaihdetaan." daily_performance_report: "Analysoi NGINX lokit päivittäin ja julkaise vain henkilökunnalle näkyvä ketju yksityiskohdista" suppress_uncategorized_badge: "Älä näytä alueettomille ketjuille tunnusta ketjujen listauksissa." global_notice: "Näytä KIIREELLISESTÄ HÄTÄTAPAUKSESTA kertova banneri kaikilla sivuilla kaikille käyttäjille, vaihda tyhjäksi piilottaaksesi sen (HTML sallittu)." @@ -1605,21 +1611,13 @@ fi: text_body_template: | Tämä on automaattinen viesti. - Uusi käyttäjätili [%{username}](%{base_url}%{user_url}) on automaattisesti estetty, koska usea käyttäjä liputti käyttäjän %{username} viestin tai viestejä. + Uusi käyttäjätili [%{username}](%{user_url}) estettiin, koska monet liputtivat käyttäjän %{username} viestin tai viestejä. - Ole hyvä ja [tarkasta liput](%{base_url}/admin/flags). Jos %{username} on estetty virheellisesti, klikkaa poista esto -painiketta [käyttäjän hallinnointisivulta](%{base_url}%{user_url}). + [Tarkastele liputettuja viestejä](%{base_url}/admin/flags). Jos käyttäjä %{username} estettiin aiheettomasti, klikkaa poista esto -painiketta [tähän käyttäjään liittyvällä ylläpitäjän sivulla](%{user_url}). - Tätä kynnysarvoa voi muuttaa vaihtamalla asetuksen `block_new_user` arvoa. + Kynnysarvoa voi muuttaa säätämällä asetuksen `block_new_user` arvoa sivuston asetuksissa. spam_post_blocked: subject_template: "Uuden käyttäjän %{username} viestit on estetty toistuvien linkkien vuoksi" - text_body_template: | - Tämä on automaattinen viesti - - Uusi käyttäjä [%{username}](%{base_url}%{user_url}) yritti luoda useita viestejä, jotka sisälsivät linkkejä osoitteeseen %{domains}, mutta nämä viestit estettiin roskapostin välttämiseksi. Käyttäjä voi edelleen luoda uusia viestejä, joissa ei ole linkkejä osoitteeseen %{domains}. - - Ole hyvä ja [tarkasta käyttäjä](%{base_url}%{user_url}). - - Tätä toimintoa voi muokata vaihtamalla asetuksia `newuser_spam_host_threshold` ja `white_listed_spam_host_domains` sivuston asetuksissa. unblocked: subject_template: "Tili avattu" text_body_template: | @@ -1639,10 +1637,6 @@ fi: download_remote_images_disabled: subject_template: "Linkattujen kuvien lataaminen on otettu pois käytöstä" text_body_template: "Asetus `download_remote_images_to_local` on otettu pois käytöstä, koska vapaan tilan rajoitus `download_remote_images_threshold` saavutettiin." - unsubscribe_link: | - Jos et enää halua ilmoituksia tästä ketjusta, [klikkaa tätä](%{unsubscribe_url}). - - Jos et halua näitä viestejä, muuta [tilisi asetuksia](%{user_preferences_url}). subject_re: "VS:" subject_pm: "[YV]" user_notifications: @@ -1685,52 +1679,16 @@ fi: Seuraa tätä linkkiä nähdäksesi keskustelun: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: |+ - %{message} - - %{context} - - --- - %{respond_instructions} - user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [YV] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Lyhyt tiivistelmä siitä mitä on tapahtunut sivustolla %{site_link} viimeisimmän vierailusi jälkeen %{last_seen_at}." subject_template: "[%{site_name}] Tiivistelmä" @@ -1972,6 +1930,34 @@ fi: title: "Käyttöehdot" privacy_topic: title: "Rekisteriseloste" + static: + search_help: | +

    Vinkkejä

    +

    +

      +
    • Otsikon vastaavuudet ovat etusijalla – jos olet epävarma, etsi otsikkoa
    • +
    • Parhaat tulokset saa uniikeilla ja epätavallisilla sanoilla
    • +
    • Voit kokeilla etsiä tietyn alueen, ketjun tai käyttäjän viesteistä
    • +
    +

    +

    Options

    +

    + + + + + + + +
    order:viewsorder:latestorder:likes
    status:openstatus:closedstatus:archivedstatus:norepliesstatus:single_user
    category:foouser:foogroup:foobadge:foo
    in:likesin:postedin:watchingin:trackingin:private
    in:bookmarksin:first
    posts_count:nummin_age:daysmax_age:days
    +

    +

    Esimerkkejä

    +

    +

      +
    • rainbows category:parks status:open order:latest etsii alueelta "parks" ketjuja, joissa esiintyy sana "rainbows" ja joita ei suljettu tai arkistoitu, ja esittää ylimmäisinä ne ketjut, joihin on viimeksi kirjoitettu.
    • +
    • rainbows category:"parks and gardens" in:bookmarks etsii alueelta "parks and gardens" kirjanmerkkeihin lisäämiäsi ketjuja, joissa esiintyy sana "rainbows".
    • +
    +

    badges: long_descriptions: autobiographer: | @@ -2016,7 +2002,7 @@ fi: great_topic: | Tämä arvomerkki myönnetään, kun avaamasi ketju saa 50 tykkäystä. Vau! basic: | - Tämä arvomerkki myönnetään, kun saavutat luottamustason 1. Kiitos kun olet ollut täällä hetken ja lukenut muutamaa ketjua oppiaksesi yhteisöstämme. Uuden käyttäjän rajoituksia on löysätty ja sinulla on käytössäsi kaikki perustoiminnot kuten yksityisviestit, liputtaminen, wiki-viestien muokkaaminen, kuvien liittäminen ja useamman linkin asettaminen. + Tämä arvomerkki myönnetään, kun saavutat luottamustason 1. Kiitos kun olet ollut täällä hetken ja lukenut muutamaa ketjua oppiaksesi yhteisöstämme. Uuden käyttäjän rajoituksia on löysätty ja sinulla on käytössäsi kaikki perustoiminnot kuten yksityisviestit, liputtaminen, wiki-viestien muokkaaminen, kuvien liittäminen ja useamman linkin laittaminen. member: | Tämä arvomerkki myönnetään, kun saavutat luottamustason 2. Kiitos, kun olet ollut täällä useamman viikon ajan ja kasvanut yhteisömme jäseneksi. Voit nyt lähettää henkilökohtaisia kutsuja käyttäjäsivultasi ja yksittäisistä ketjuista, lähettää ryhmäviestejä ja tykätä muutaman kerran enemmän päivää kohden. regular: | diff --git a/config/locales/server.fr.yml b/config/locales/server.fr.yml index 261694543..07cf42d58 100644 --- a/config/locales/server.fr.yml +++ b/config/locales/server.fr.yml @@ -970,7 +970,6 @@ fr: anonymous_posting_min_trust_level: "Le niveau de confiance minimum pour passer en mode anonyme." anonymous_account_duration_minutes: "Pour protéger l'anonymat, créer un nouveau compte anonyme tous les N minutes pour chaque utilisateur. Exemple: si 600 est choisi, dès 600 minutes après le dernier message ET que l'utilisateur passe en mode anonyme, un nouveau compte anonyme lui sera crée." allow_profile_backgrounds: "Autoriser les utilisateurs à envoyer des arrières-plans de profil." - sequential_replies_threshold: "Nombre de messages qu'un utilisateur doit poster d'affilé dans un sujet avant d'être rappelé à l'ordre pour multiple réponses." enable_mobile_theme: "Les appareils mobiles utilisent un thème adapté aux mobiles, avec la possibilité de passer à la totalité du site. Désactivez cette option si vous voulez utiliser une feuille de style personnalisée qui répond à tous les types de client." dominating_topic_minimum_percent: "Quel est le pourcentage de messages un utilisateur doit poster dans un sujet avant d'être rappelé à l'ordre pour laissé la communauté répondre." daily_performance_report: "Analyser les logs de NGINX quotidiennement et poster un sujet Responsables Uniquement avec les détails" @@ -1566,24 +1565,8 @@ fr: Pour plus d'informations, merci de vous en référer au [règlement de la communauté](%{base_url}/guidelines). user_automatically_blocked: subject_template: "Nouvel utilisateur %{username} bloqué à cause de signalements de la communauté" - text_body_template: | - Ceci est un message automatique. - - Le nouvel utilisateur [%{username}](%{base_url}%{user_url}) a été bloqué automatiquement par plusieurs utilisateurs ayant signalés ses messages. - - Merci de [vérifier les signalements](%{base_url}/admin/flags). Si %{username} a été bloqué injustement, cliquez sur le bouton débloquer sur la [page d'administration de cet utilisateur](%{base_url}%{user_url}). - - Cette limite peut être changée par le paramètre du site `block_new_user`. spam_post_blocked: subject_template: "Les messages du nouvel utilisateur %{username} sont bloqués pour des liens répétés" - text_body_template: | - Ceci est un message automatique. - - Le nouvel utilisateur [%{username}](%{base_url}%{user_url}) tente de créer de multiples messages avec des liens vers %{domains}, mais que ces messages ont été bloqués pour éviter le spam. Cet utilisateur est toujours capable de créer des messages qui ne contiennent pas de liens vers %{domains}. - - Merci de [vérifier cet utilisateur](%{base_url}%{user_url}). - - Ceci peut être modifier via les options `newuser_spam_host_threshold` et white_listed_spam_host_domains`. unblocked: subject_template: "Compte débloqué" text_body_template: | @@ -1619,51 +1602,16 @@ fr: text_body_template: "\n%{username} vous a invité à une conversation\n\n> **%{topic_title}**\n>\n> %{topic_excerpt}\n\nsur \n\n> %{site_title} -- %{site_description}\n\nVeuillez suivre ce lien pour voir le message: %{base_url}%{url}\n" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [MP] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Voici un bref résumé de ce qu'il s'est passé sur %{site_link} depuis votre dernière visite le %{last_seen_at}" subject_template: "[%{site_name}] Résumé" diff --git a/config/locales/server.he.yml b/config/locales/server.he.yml index 7883b8579..f6a7fe506 100644 --- a/config/locales/server.he.yml +++ b/config/locales/server.he.yml @@ -24,8 +24,6 @@ he: loading: "טוען" powered_by_html: 'מונע ע"י Discourse, פועל מיטבית עם Javascript' log_in: "התחברות" - via: "%{username} עם %{site_name}" - is_reserved: "שמור" purge_reason: "נמחק באופן אוטומטי כחשבון נטוש ולא פעיל" disable_remote_images_download_reason: "הורדת תמונות מרחוק נחסמה בשל היעדר מספיק שטח אכסון פנוי." anonymous: "אנונימי" @@ -415,15 +413,11 @@ he: description: 'פרסום זה מכיל תוכן שאדם סביר היה רואה כפוגעני, מתעלל או הפרה של כללי הקהילה .' long_form: 'דוגלל כלא ראוי' notify_user: - description: 'פרסום זה מכיל משהו שארצה לשוחח עליו עם האדם הזה באופן ישיר ופרטי. אין צורך בסימון.' long_form: 'הודעה נשלחה למשתמש/ת' email_title: 'הפרסום שלךב"%{title}"' email_body: "%{link}\n\n%{message}" notify_moderators: title: "משהו אחר" - description: 'פרסום זה דורש את תשומת ליבו של מנחה מסיבה שאינה מצויינת למעלה.' - long_form: 'זה סומן לתשומת הלב של מנחה' - email_title: 'הודעה ב-"%{title}" דורשת תשומת לב של מנהל' email_body: "%{link}\n\n%{message}" bookmark: title: 'מועדפים' @@ -448,7 +442,6 @@ he: long_form: 'דוגלל כלא ראוי' notify_moderators: title: "משהו אחר" - description: 'נושא זה דורש התייחסות של מנחה (moderator) כללי, על פי הכללים המנחים , TOS, או סיבה אחרת שאינה מופיעה כאן.' long_form: 'זה סומן לתשומת הלב של מנחה' email_title: 'הנושא "%{title}" דורש תשומת לב של מנהל' email_body: "%{link}\n\n%{message}" @@ -639,37 +632,6 @@ he: consumer_email_warning: "Your site is configured to use Gmail (or another consumer email service) to send email. Gmail limits how many emails you can send. Consider using an email service provider like mandrill.com to ensure email deliverability." site_contact_username_warning: "הזינו שם חשבון ידידותי של אי/אשת צות ממנו ישלחו הודעות אוטומטיות חשובות. עדכנו את site_contact_username בהגדרות האתר." notification_email_warning: "מיילים ליידוע אינם נשלחים מכתובת תקינה בדומיין שלכם; משלוח דוא\"ל יהיה בעייתי ולא אמין. אנא כוונו את כתובת המייל למשלוח התראות לכתובת מקומית תקינה בהגדרות האתר." - content_types: - education_new_reply: - title: "הדרכת משתמש חדש: תגובות ראשונות" - description: "Pop up just-in-time guidance automatically displayed above the composer when new users begin typing their first two new replies." - education_new_topic: - title: "הדרכת משתמש חדש: נושאים ראשונים" - description: "Pop up just-in-time guidance automatically displayed above the composer when new users begin typing their first two new topics." - usage_tips: - title: "הדרכה למשתמש/ת חדשים" - description: "הדרכה ומידע חשוב למשתמשים חדשים." - welcome_user: - title: "Welcome: New User" - description: "הודעה שנשלחת באופן אוטומטי לכל המשתמשים החדשים כאשר הם נרשמים." - welcome_invite: - title: "Welcome: Invited User" - description: "הודעה שנשלחת באופן אוטומטי לכל המשתמשים המוזמנים כאשר הם מקבלים את ההזמנה ממשתמש אחר." - login_required_welcome_message: - title: "Login Required: Welcome Message" - description: "Welcome message that is displayed to logged out users when the 'login required' setting is enabled." - login_required: - title: "Login Required: Homepage" - description: "The text displayed for unauthorized users when login is required on the site." - head: - title: "HTML head" - description: "HTML that will be inserted inside the tags." - top: - title: "Top of the pages" - description: "HTML that will be added at the top of every page (after the header, before the navigation or the topic title)." - bottom: - title: "Bottom of the pages" - description: "קוד HTML שיתווסף לפני התגית ." site_settings: censored_words: "מלים שיוחלפו באופן אוטומטי ב- ■■■■" delete_old_hidden_posts: "מחיקת אוטומטית של פרסומים מוסתרים שנותרים מוסתרים במשך יותר מ-30 יום." @@ -977,7 +939,6 @@ he: anonymous_posting_min_trust_level: "רמת האמון המינמלית הנדרשת כדי לאפשר פרסום אנונימי" anonymous_account_duration_minutes: "בכדי להגן על האנונימות צרו חשבון אנונימי כל N דקות לכ משתמש. לדוגמה: אם מכוון ל-600, כאשר יעברו 600 דקות מהפרסום האחרון והמשתמש/ת יחליפו לזהות אנונימית, חשבון אנונימי חדש יווצר." allow_profile_backgrounds: "אפשרו למשתמשים להעלות רקעים לפרופיל." - sequential_replies_threshold: "מספר הפרסומים שעל משתמש להכין ברצף בפרסום לפני שיקבל תזכורת בנוגע ליותר מידי תגובות עוקבות." enable_mobile_theme: "Mobile devices use a mobile-friendly theme, with the ability to switch to the full site. Disable this if you want to use a custom stylesheet that is fully responsive." dominating_topic_minimum_percent: "איזה אחוז מהפרסומים משתמש צריך לייצר בנושא לפני שיקבל תזכורת לגבי שליטת/שתלטנות יתר על הנושא." daily_performance_report: "Analyze NGINX logs daily and post a Staff Only topic with details" @@ -1008,7 +969,6 @@ he: enable_cdn_js_debugging: "אפשרו ל-/logs להציג שגיאות בצורה נכונה באמצעות הוספת הרשאות לגישה בין אתרים (crossorigin permissions) בכל ה-js הכלולים." show_create_topics_notice: "אם לאתר פחות מ-5 נושאים פומביים, הציגו הודעה המבקשת מן המנהלים/מנהלות ליצור עוד נושאים." delete_drafts_older_than_n_days: Delete drafts older than (n) days. - vacuum_db_days: "הריצו VACUUM FULL ANALYZE כדי להשיב שטח בסיס הנתונים אחרי העברות (כוונו ל-0 כדי לנטרל)" prevent_anons_from_downloading_files: "מונע ממשתמשים אנונימיים להוריד צרופות (attachments). אזהרה: דבר זה ימנע מכל משאב שאינו תמונה ופורסם כצרופה לעבוד." slug_generation_method: "Choose a slug generation method. 'encoded' will generate percent encoding string. 'none' will disable slug at all." enable_emoji: "אפשרו emoji" @@ -1468,16 +1428,8 @@ he: להדרכה נוספת, אנא פנו ל[כללי ההתנהגות הקהיליתיים](%{base_url}/guidelines) שלנו. user_automatically_blocked: subject_template: "המשתמש/ת החדשים %{username} נחסמו בשל התראות מהקהילה." - text_body_template: | - זהו מסר שנשלח בצורה אוטמטית. - המשתמש/ת החדש/ה [%{username}](%{base_url}%{user_url}) נחסמו באופן אוטומטי בשל כמה התראות בנוגע להודעה/הודעות שפרסמ/ה. - - אנא [סרקו את ההתראות] (%{base_url}/admin/flags). אם %{username נחסם בטעות מפרסום הודעות, הקישו על הכפתור "ביטול חסימה" ש[בעמוד האדמין עבור משתמש/ת אלה](%{base_url}%{user_url}). - - ניתן לשנות את המנגנון הזה דרך הגדרות 'חסימת_משתמש_חדש' שבאתר. spam_post_blocked: subject_template: "הודעות של המשתמש/ת החדש/ה %{username} נחסמו בשל קישורים חוזרים." - text_body_template: "זוהי הודעה שנשלחה באופן אוטומטי.\nהמשתמש/ת החדש/ה [%{username}](%{base_url}%{user_url}) ניסו ליצור כמה הודעות עם קישור ל-%{domains}, אבל הודעות אלו נחסמו כדי למנוע דואר זבל (spam). המשתמש/ת עדיין יכול/ה ליצור הודעות חדשות שלא מקשרות ל-%{domains}.\n\nאנא [סקרו את המשתמש/ת] (%{base_url}%{user_url}). \nהגדרות אלו ניתנו שינוי דרך ההגדרות 'משתמשיםחדשים_ספאם_סף'.\n" unblocked: subject_template: "Account unblocked" text_body_template: | @@ -1497,10 +1449,6 @@ he: download_remote_images_disabled: subject_template: "הורדת תמונות מרחוק מנוטרלת" text_body_template: "האפשרות \"הורדת תמונות מרוחקות\" נוטרלה בגלל שכל שטח האכסון שמוקצה ל\"תמונות שהורדו מרחוק\" נוצל." - unsubscribe_link: | - להסרה מרשימת התפוצה, בקר ב [הגדרות משתמש/ת](%{user_preferences_url}). - - בשביל להפסיק לקבל התראות בנוגע לשיחה הזאת [לחץ כאן](%{unsubscribe_url}). subject_re: "תגובה: " subject_pm: "[PM] " user_notifications: @@ -1508,8 +1456,6 @@ he: unsubscribe: title: "Unsubscribe" description: "Not interested in getting these emails? No problem! Click below to unsubscribe instantly:" - reply_by_email: "To respond, reply to this email or visit %{base_url}%{url} in your browser." - visit_link_to_respond: "To respond, visit %{base_url}%{url} in your browser." posted_by: "Posted by %{username} on %{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} הזמין אותך להודעה '%{topic_title}'" @@ -1519,49 +1465,14 @@ he: text_body_template: "\n%{username} הזמינ/ה אותך לשיחה. \n\n> **%{topic_title}**\n>\n> %{topic_excerpt}\n\nב\n\n> %{site_title} -- %{site_description}\n\nתלחץ על הלינק בשביל לראות את ההודעה %{base_url}%{url}\n" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "סיכום קצר של %{site_link} מאז ביקורך האחרון ב-%{last_seen_at}" subject_template: "[%{site_name}] תקציר" diff --git a/config/locales/server.it.yml b/config/locales/server.it.yml index 8d049f6d7..0fdf5d971 100644 --- a/config/locales/server.it.yml +++ b/config/locales/server.it.yml @@ -1136,25 +1136,8 @@ it: Per maggiori dettagli, fai riferimento alle nostre [linee guida della community](%{base_url}/guidelines). user_automatically_blocked: subject_template: "Nuovo utente %{username} bloccato a causa delle segnalazioni" - text_body_template: | - Questo è un messaggio automatico. - - Il nuovo utente [%{username}](%{base_url}%{user_url}) è stato automaticamente bloccato perché più utenti hanno contrassegnato i messaggi di %{username}. - - Per favore [controlla le segnalazioni](%{base_url}/admin/flags). Se %{username} è stato bloccato per errore, clicca sul tasto di sblocco nella [pagina di amministrazione di questo utente](%{base_url}%{user_url}). - - La soglia può essere modificata tramite l'impostazione del sito `block_new_user`. spam_post_blocked: subject_template: "Il messaggi del nuovo utente %{username} sono stati bloccati a causa dell'invio di ripetuti collegamenti." - text_body_template: |+ - Questo è un messaggio automatico. - - Il nuovo utente [%{username}](%{base_url}%{user_url}) ha creato diversi messaggi con collegamenti a %{domains}, ma tali messaggi sono stati bloccati per evitare spam. L'utente è ancora abilitato alla creazione di messaggi ma senza collegamenti verso %{domains}. - - Per favore [controlla questo utente](%{base_url}%{user_url}). - - Questa soglia può essere modificata tramite l'impostazione `newuser_spam_host_threshold` e `white_listed_spam_host_domains` del sito. - unblocked: subject_template: "Account sbloccato" text_body_template: | @@ -1185,49 +1168,14 @@ it: subject_template: "[%{site_name}] %{username} ti invita a partecipare all'argomento '%{topic_title}'" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Un breve sommario di %{site_link} dalla tua ultima visita il %{last_seen_at}" subject_template: "[%{site_name}] Riepilogo" diff --git a/config/locales/server.ja.yml b/config/locales/server.ja.yml index 8d0745d03..739b3988c 100644 --- a/config/locales/server.ja.yml +++ b/config/locales/server.ja.yml @@ -16,8 +16,6 @@ ja: loading: "読み込み中" powered_by_html: 'Powered by Discourse, best viewed with JavaScript enabled' log_in: "ログイン" - via: "%{username} via %{site_name}" - is_reserved: "は予約されています" purge_reason: "アクティブでないアカウントは放棄されたとして削除されました" disable_remote_images_download_reason: "ディスク容量が不足しているため、リモートでの画像ダウンロードは無効になっています。" anonymous: "匿名" @@ -318,15 +316,11 @@ ja: description: 'この投稿は、誹謗中傷、恫喝、名誉毀損、わいせつ、犯罪行為など他人を不快にさせる内容を含んでいる。' long_form: '不適切フラグをたてる' notify_user: - description: 'この投稿やトピックを書いた人に、直接メッセージを送る。(フラグを付けません)' long_form: 'メッセージが送られたユーザ' email_title: '「%{title}」にの投稿' email_body: "%{link}\n\n%{message}" notify_moderators: title: "その他" - description: 'このポストは、記載されていない別の理由でモデレータの注意が必要です' - long_form: 'モデレータへの注意としてフラグを立てる' - email_title: '"%{title}" のポストに関する管理人の確認が必要とする' email_body: "%{link}\n\n%{message}" bookmark: title: 'ブックマーク' @@ -351,7 +345,6 @@ ja: long_form: '不適切フラグをたてる' notify_moderators: title: "その他" - description: 'この投稿やトピックは不適切な可能性があるため、管理人による確認を必要とする。' long_form: 'モデレータへの注意としてフラグを立てる' email_title: 'トピック"%{title}" は不適切な可能性があるため、管理人による確認を必要とする。' email_body: "%{link}\n\n%{message}" @@ -537,37 +530,6 @@ ja: consumer_email_warning: "サイトはメール送信に Gmail (または他のカスタムメールサービス) を利用するように設定されています。Gmail で送信可能なメール数には制限があります。メールを確実に送信するために mandrill.com などのメールサービスプロバイダーの利用を検討してください。" site_contact_username_warning: "重要な自動メッセージを送信するフレンドリースタッフユーザーアカウントの名前を入力してください。サイト設定 のsite_contact_username を更新してください。" notification_email_warning: "通知用メールがあなたのドメインで有効なメールアドレスから送信されていません。メール配信が不安定になり、信頼性が低くなります。\nサイトの設定で更新してください" - content_types: - education_new_reply: - title: "新規ユーザ支援: 初めての回答" - description: "新規ユーザが回答の入力を開始した際に自動的にポップアップするガイダンスの内容 (最初の2回のみ表示)。" - education_new_topic: - title: "新規ユーザ支援: 初めてのポスト" - description: "新規ユーザが新規トピックの作成を行った際に自動的にポップアップするガイダンスに内容 (最初の2回のみ表示)。" - usage_tips: - title: "新規ユーザガイダンス" - description: "新規ユーザのための重要な情報とガイダンス" - welcome_user: - title: "ウェルカムメッセージ: 新規ユーザ" - description: "サインアップ時にすべての新規ユーザに自動送信されるメッセージ。" - welcome_invite: - title: "ウェルカムメッセージ: 招待ユーザ" - description: "他のユーザからの招待を受け入れたときにすべての新しい招待ユーザに自動送信されるメッセージ" - login_required_welcome_message: - title: "ウェルカムメッセージ: 要ログイン" - description: "'login required' 設定有効時に、ユーザに対してログインを促すメッセージの内容。" - login_required: - title: "ホームページ: 要ログイン" - description: "要ログイン設定の際に、未ログインユーザに対して表示されるメッセージの内容。" - head: - title: "HTML head" - description: " タグの中に挿入されるHTML" - top: - title: "ページトップ" - description: "全ページのトップに追加される HTML (ヘッダとナビゲーション/トピックタイトルの間に表示されます)" - bottom: - title: "ページボトム" - description: "タグの前に挿入されるHTML" site_settings: censored_words: "自動的に ■■■■ で置換されます" delete_old_hidden_posts: "30日以上非表示になっているポストを自動で削除します" @@ -866,7 +828,6 @@ ja: anonymous_posting_min_trust_level: "匿名の投稿を行うための最小のトラストレベル" anonymous_account_duration_minutes: "匿名性を守るため、N 分毎に匿名ユーザーを作成しなおします。 例 : 600を設定すると匿名ユーザへの変更と最後の投稿から600分経過していた場合、匿名アカウントが作成されます" allow_profile_backgrounds: "プロフィール背景のアップロードを許可" - sequential_replies_threshold: "ユーザに連続回答が多すぎることをリマインドする、連続ポスト投稿のしきい値" enable_mobile_theme: "モバイル端末にモバイル向けテーマ (通常サイト用テーマにスイッチ可能) を利用する。レスポンシブなスタイルシートを使用する場合はこの設定を無効にしてください。" dominating_topic_minimum_percent: "ユーザがトピックを占拠しているとリマインドを行う、ポスト投稿支配率 " daily_performance_report: "日別のNGINXのログを解析し、Staff Onlyトピックへ詳細を投稿する" @@ -896,7 +857,6 @@ ja: enable_cdn_js_debugging: "全てのJSにcrossorigin権限を追加することで、/logsに適切なエラーを表示することを許可する" show_create_topics_notice: "サイトにpublicなトピックが5よりも少ない場合、トピックを作成するための通知が管理者に表示される" delete_drafts_older_than_n_days: (n) 日間経過したドラフトを削除 - vacuum_db_days: "DB領域を再利用するため、migration後にVACUUM FULL ANALYZEを実行する(0を設定すると無効化)" prevent_anons_from_downloading_files: "匿名ユーザーが添付ファイルをダウンロードするのを防止。警告: 画像ではなく、添付ファイルとして投稿された全てのファイルが対象です" slug_generation_method: "slugを生成するメソッドを選択。 'encode'はパーセントエンコードされた文字列を生成します。 'none'は、slugを無効にします" enable_emoji: "絵文字を有効にする" @@ -1381,25 +1341,8 @@ ja: 詳細については[コミュニティガイドライン](%{base_url}/guidelines)を参照してください。 user_automatically_blocked: subject_template: "コミュニティフラッグによって新たにブロックされたユーザ%{username}" - text_body_template: |+ - これは自動送信メッセージです。 - - 複数のユーザが%{username}'のポストにフラグを立てているため、新規ユーザ[%{username}](%{base_url}%{user_url})は自動的にブロックされました。 - - フラグを確認してください(%{base_url}/admin/flags)。もし%{username}が間違ってブロックされた場合は、 このユーザの管理ページ(%{base_url}%{user_url})でブロック解除ボタンをクリックしてください。 - - この閾値はサイト設定の`block_new_user`で変更できます。 - spam_post_blocked: subject_template: "同一リンクの連続投稿による新規ユーザ %{username} のブロック" - text_body_template: | - これは自動送信メッセージです。 - - 新規ユーザ[%{username}](%{base_url}%{user_url})は、%{domains}へのリンクを複数投稿しようとしましたが、スパムを避けるために投稿をブロックしました。ユーザは%{domains}のリンクを含まない投稿であれば引き続き作成可能です。 - - ユーザを確認してください。(%{base_url}%{user_url}) - - この設定はサイト設定の `newuser_spam_host_threshold` と `white_listed_spam_host_domains` で変更できます。 unblocked: subject_template: "アカウントのブロック解除" text_body_template: | @@ -1425,8 +1368,6 @@ ja: unsubscribe: title: "解除" description: "メールに興味がありませんか? 下のリンクをクリックすると、即座にメール解除ができます:" - reply_by_email: "回答するにはこのメールに返信するか、ブラウザで %{base_url}%{url} にアクセスしてください。" - visit_link_to_respond: "回答するにはブラウザで %{base_url}%{url} にアクセスしてください。" posted_by: "%{post_date} に %{username} が投稿" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} がメッセージにあなたを招待しました '%{topic_title}'" @@ -1435,49 +1376,14 @@ ja: subject_template: "[%{site_name}] %{username} がトピックにあなたを招待しました '%{topic_title}'" user_replied: subject_template: "[%{site_name}] '%{topic_title}' 内のあなたのポストに新たな回答が投稿されました" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] '%{topic_title}' で %{username} があなたを引用しました" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] '%{topic_title}' で %{username} があなたをタグ付けしました" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] '%{topic_title}' に %{subject_prefix}個の新しいポストが投稿されました" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [プライベートメッセージ] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "あなたが最後にアクセスした %{last_seen_at} 以降の %{site_link} のまとめです" subject_template: "[%{site_name}] ダイジェスト" diff --git a/config/locales/server.ko.yml b/config/locales/server.ko.yml index 51ef2e975..b19908133 100644 --- a/config/locales/server.ko.yml +++ b/config/locales/server.ko.yml @@ -16,8 +16,6 @@ ko: loading: "로딩중" powered_by_html: 'Powered by Discourse, best viewed with JavaScript enabled' log_in: "로그인" - via: "%{site_name}의 %{username}" - is_reserved: "예약됨" purge_reason: "비활성화된 계정은 자동적으로 삭제됩니다." disable_remote_images_download_reason: "디스크저장공간이 부족하여 원격 이미지 다운로드 기능이 비활성화 되었습니다." anonymous: "익명" @@ -330,15 +328,11 @@ ko: description: '이 글은 다른 사용자들에게 공격적이나 모욕적 또는 침해적인 글을 담고 있습니다.' long_form: '부적절함으로 신고하기' notify_user: - description: '이 글에 내가 작성자와 직접 대화하고 싶은 내용이 있습니다. 신고에서 제외해주세요.' long_form: '메세지한 유저' email_title: '"%{title}" 내의 당신의 글' email_body: "%{link}\n\n%{message}" notify_moderators: title: "뭔가 다른것" - description: '이 글은 리스트에 없는 이유로 관리자의 주의가 필요합니다.' - long_form: '관리자의 주의를 위해 신고' - email_title: '"%{title}" 글에 대한 운영자의 확인이 필요합니다' email_body: "%{link}\n\n%{message}" bookmark: title: '북마크' @@ -365,7 +359,6 @@ ko: long_form: '부적절함으로 신고하였습니다.' notify_moderators: title: "뭔가 다른것" - description: '이 글은 가이드라인, 이용약관, 또는 다른 이유와 관련해서 운영자의 주의가 필요합니다.' long_form: '관리자의 주의를 위해 신고' email_title: '글타래 "%{title}" 은 운영자의 확인이 필요합니다' email_body: "%{link}\n\n%{message}" @@ -538,37 +531,6 @@ ko: consumer_email_warning: "이메일 전송을 위해 Gmail(또는 다른 커스텀 이메일 서비스)을 사용하고 있습니다. Gmail의 이메일 전송 제한 을 읽어보세요. mandrill.com을 이메일 서비스로 설정하는 것을 고려해보세요." site_contact_username_warning: "중요 자동 메세지를 보낼 스태프 사용자 계정의 이름을 적으세요. 사이트 설정에서 site_contact_username을 업데이트하세요." notification_email_warning: "알람 메일이 올바른 이 사이트의 도메인 내 이메일 주소로 전송되지 않고 있습니다; 이메일 전송이 안정적이지 않을 것입니다. 사이트 설정에서 올바른 도메인의 이메일 주소로 정해주세요." - content_types: - education_new_reply: - title: "새로운 사용자 교육: 첫번째 답글들" - description: "새로운 사용자가 첫 두개의 답글을 작성하면 자동 팝업됩니다." - education_new_topic: - title: "새로운 사용자 교육: 첫번째 글타래들" - description: "새로운 사용자가 첫 두개의 글타래를 작성하면 자동 팝업됩니다." - usage_tips: - title: "새로운 사용자 가이드" - description: "새로운 사용자를 위한 가이드와 팁." - welcome_user: - title: "환영: 새로운 사용자" - description: "새 가입자에게 전달할 자동 메세지" - welcome_invite: - title: "환영: 초대된 사용자" - description: "사용자가 다른 사람이 보낸 초대장에 승인했을 때 에게 전달 될 자동 메세지" - login_required_welcome_message: - title: "로그인 필요: Welcome Message" - description: "'login required' 설정이 활성화 되어있으면 웰컴 메시지가 로그인 되지 않은 사용자들에게 보여집니다." - login_required: - title: "로그인 필요: 홈페이지" - description: "이 텍스트는 로그인이 필요하지만 인증되지 않은 사용자들에게 보여집니다." - head: - title: "HTML head" - description: " 태그 사이에 추가할 HTML" - top: - title: "페이지 상단" - description: "모든 페이지 상단에 추가할 HTML(헤더 아래, 네비게이션이나 글타래 제목 위)." - bottom: - title: "페이지 하단" - description: "모든 페이지 하단에 추가할 HTML" site_settings: censored_words: "단어는 자동적으로 `■■■■` 로 대체 됩니다." delete_old_hidden_posts: "30일이 지난 숨겨진 글은 자동으로 삭제됩니다." @@ -853,7 +815,6 @@ ko: anonymous_posting_min_trust_level: "익명 게시 할 수 있는 최소 회원등급" anonymous_account_duration_minutes: "한 익명이 익명계정을 만들 때 빨리 만드는 걸 막을 분 단위 시간 예: 600으로 정해놓으면 마지막 게시하고 익명 전환 후로 600분이 지나는 즉시 새 계정이 만들어 집니다." allow_profile_backgrounds: "사용자에게 프로필 배경 이미지 업로드를 허용합니다." - sequential_replies_threshold: "한 유저가 한 글타래에 너무 연속으로 답글 달았다고 알리게 될 연속 글 수" enable_mobile_theme: "모바일 디바이스는 모바일 환경에 친화적인 테마를 사용합니다, 그리고 PC용 화면으로 전환할 수 있습니다. 만약 커스텀 스타일 시트를 사용한다면 이것을 비활성화 시키세요." dominating_topic_minimum_percent: "한 글타래에서 한 사용자의 영향력을 결정하는 글 수의 퍼센트" daily_performance_report: "NGINX 일별 로그를 분석하고 상세정보를 스태프들에게 글타래 게시" @@ -882,7 +843,6 @@ ko: enable_cdn_js_debugging: "/logs에서 적절한 모든 js를 포함해 crossorigin 권한 오류가 뜨도록 합니다." show_create_topics_notice: "이 사이트에 5개 이하의 공개 글타래가 있으면, 관리자에게 글타래 좀 만들라고 알려줍니다." delete_drafts_older_than_n_days: (n) 일지난 임시 보관글 삭제하기 - vacuum_db_days: "VACUUM FULL ANALYZE를 실행해서 통합 후 DB 공간 재확인 (0으로 설정하면 비활성화)" prevent_anons_from_downloading_files: "익명 사용자가 다운로드를 받지 못하게 합니다. 경고: 이미지 파일 외 모든 첨부파일이 다운로드 받지 못하게 됩니다." slug_generation_method: "slug 생성 방식. 'encoded'는 퍼센트 기호로 인코딩해서 생성합니다. 'none'은 slug 자체를 비활성화합니다.." enable_emoji: "emoji 활성화" @@ -1320,24 +1280,8 @@ ko: 추가적인 조언은 [community guidelines](%{base_url}/guidelines)에서 확인하실 수 있습니다. user_automatically_blocked: subject_template: "%{username} 신규가입자가 커뮤니티 신고로 블락됨" - text_body_template: | - 자동 생성 메세지입니다. - - 새 사용자 [%{username}](%{base_url}%{user_url})님이 여러 사용자가 %{username}님의 글(들)을 신고하여 자동으로 블락되었습니다. - - [신고 접수](%{base_url}/admin/flags) 확인 바랍니다. %{username}님이 잘못 블락 되었으면, [사용자 관리 페이지](%{base_url}%{user_url})에서 블락해제해 주세요. - - `block_new_user` 사이트 설정을 변경해 쓰레솔드를 바꿀 수 있습니다. spam_post_blocked: subject_template: "%{username} 신규가입자가 연속 링크로 블락됨" - text_body_template: | - 자동 생성 메세지입니다. - - 새 사용자 [%{username}](%{base_url}%{user_url})님이 %{domains} 링크로 여러 글을 올려서 스팸이 의심되어 블락되었습니다. 다만, 이 사용자는 %{domains} 링크가 없는 글은 계속 올릴 수 있습니다. - - [사용자 관리 페이지](%{base_url}%{user_url})에서 확인 바랍니다. - - 이는 `newuser_spam_host_threshold`와 `white_listed_spam_host_domains` 사이트 설정으로 변경할 수 있습니다. unblocked: subject_template: "계정 블락 해제" text_body_template: | @@ -1363,8 +1307,6 @@ ko: unsubscribe: title: "구독해지" description: "이메일들에 관심이 없나요? 아래 구독해지를 눌러서 바로 구독을 해지할 수 있습니다:" - reply_by_email: "응답하시려면 %{base_url}%{url} 를 방문하시거나 이메일에 답장하세요." - visit_link_to_respond: "응답하시려면 %{base_url}%{url} 를 방문하세요." posted_by: "%{username} 사용자가 %{post_date}에 게시하였습니다." user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} 회원님이 '%{topic_title}' 글타래에 초대했습니다" @@ -1398,49 +1340,14 @@ ko: 메세지 링크: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] '%{topic_title}'에 답글이 달렸습니다" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{username}님께서 '%{topic_title}' 글타래에 당신을 인용하였습니다" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{username}님께서 '%{topic_title}'에서 당신을 언급하였습니다" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{subject_prefix} '%{topic_title}'에 새로운 글이 등록되었습니다" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "%{last_seen_at}부터 지금까지 %{site_link} 사이트 근황" subject_template: "[%{site_name}] 근황" diff --git a/config/locales/server.nb_NO.yml b/config/locales/server.nb_NO.yml index e0dda1606..a3bdb502f 100644 --- a/config/locales/server.nb_NO.yml +++ b/config/locales/server.nb_NO.yml @@ -16,8 +16,6 @@ nb_NO: loading: "Laster" powered_by_html: 'Drevet av Discourse, best nyttet med JavaScript på' log_in: "Logg inn" - via: "%{username} via %{site_name}" - is_reserved: "er reservert" purge_reason: "Automatisk slettet som som forlatt, uaktivert konto" disable_remote_images_download_reason: "Nedlasting av bilder ble deaktivert grunnet mangel på tilgjengelig diskplass." anonymous: "Anonym" @@ -253,6 +251,8 @@ nb_NO: title: "ny bruker" basic: title: " bruker" + member: + title: "medlem" rate_limiter: too_many_requests: "Vi har en daglig begrensning for hvor mange ganger den handlingen kan utføres. Venligst vent %{time_left} før du prøver igjen." hours: @@ -371,15 +371,11 @@ nb_NO: description: 'Dette innlegget har innhold som for en fornuftig person vil kunne være fornærmende, nedverdigende eller brudd på retningslinjene til dette nettsamfunnet.' long_form: 'markerte dette som upassende' notify_user: - description: 'Dette innlegget inneholder noe jeg ønsker å ta opp med vedkommende direkte på privaten. Oppretter ikke en markering.' long_form: 'sendt melding til bruker' email_title: 'Ditt innlegg i "%{title}"' email_body: "%{link}\n\n%{message}" notify_moderators: title: "Noe annet" - description: 'Dette innlegget trenger moderator oppmerksomhet for en annen grunn enn listet over.' - long_form: 'merket for moderators oppmerksomhet' - email_title: 'Et innlegg i "%{title}" krever moderator oppmerksomhet' email_body: "%{link}\n\n%{message}" bookmark: title: 'Bokmerke' @@ -404,7 +400,6 @@ nb_NO: long_form: 'markerte dette som upassende' notify_moderators: title: "Noe annet" - description: 'Dette emnet krever moderators oppmerksomhet basert på retningslinjene, TOS, eller en annen grunn ikke listet over. ' long_form: 'Markert for mederering' email_title: 'Emne "%{title}" krever moderator oppmerksomhet' email_body: "%{link}\n\n%{message}" @@ -440,6 +435,8 @@ nb_NO: title: "nye brukere" xaxis: "Dag" yaxis: "Antall nye brukere" + profile_views: + xaxis: "Dag" topics: title: "Emner" xaxis: "Dag" @@ -571,32 +568,6 @@ nb_NO: host_names_warning: "Din config/database.yml fil bruker standard localhost hostnavn. Venligst legg inn ditt ønskede hostnavn" memory_warning: 'Serveren din kjører med mindre enn 1 GB med minne. Minst 1 GB RAM er anbefalt.' title_nag: "Oppgi navnet på nettstedet. Oppdater tittelen under Nettstedinstillinger." - content_types: - education_new_reply: - title: "Ny bruker utdanning: Første svar" - education_new_topic: - title: "Ny bruker utdanning: Første Emne" - usage_tips: - title: "Ny Bruker Guide" - description: "Brukerveiledning og nyttig informasjon for nye brukere" - welcome_user: - title: "Velkommen: Ny Bruker" - description: "En melding som automatisk sendes til alle nye brukere når de oppretter konto." - welcome_invite: - title: "Velkommen: Invitert Bruker" - login_required_welcome_message: - title: "Pålogging påkrevd: Velkommen Melding" - login_required: - title: "Pålogging påkrevd: Hjemmeside" - description: "Tekst som vil bli vist uautoriserte brukere når logg inn er påkrevd." - head: - title: "HTML head" - description: "HTML som vil bli satt inn i klammene. " - top: - title: "Toppen av siden" - bottom: - title: "Bunnen av siden" - description: "HTML som vil bli lagt til før tag. " site_settings: censored_words: "Ord som automatisk vil bli erstattet med ■■■■" delete_old_hidden_posts: "Auto-slett skjulte innlegg som er skjult i mer enn 30 dager." diff --git a/config/locales/server.nl.yml b/config/locales/server.nl.yml index 65e7b9233..72024c882 100644 --- a/config/locales/server.nl.yml +++ b/config/locales/server.nl.yml @@ -18,8 +18,6 @@ nl: loading: "Laden" powered_by_html: 'Powered by Discourse, werkt het beste met JavaScript ingeschakeld' log_in: "Inloggen" - via: "%{username} via %{site_name}" - is_reserved: "is gereserveerd" purge_reason: "Automatisch verwijderd, account is nooit geactiveerd" disable_remote_images_download_reason: "Het downloaden van plaatjes is uitgeschakeld omdat er niet genoeg schijfruimte beschikbaar is." anonymous: "Anoniem" @@ -430,16 +428,11 @@ nl: description: 'Dit bericht bevat inhoud dat iemand als beledigend, discriminerend of kwetsend kan ervaren. Ook kan het een overtreding van de regels zijn.' long_form: 'heeft dit als ongepast gemeld' notify_user: - title: 'Neem contact op met @{{username}} via privébericht' - description: 'Dit bericht bevat iets waarover ik je graag persoonlijk en privé wil spreken. Dit zet geen vlag.' long_form: 'bericht verstuurd aan gebruiker' email_title: 'Je bericht in ''%{title}''' email_body: "%{link}\n\n%{message}" notify_moderators: title: "Iets anders" - description: 'Dit bericht heeft de aandacht van een moderator nodig om een andere reden dan hier boven gespecificeerd.' - long_form: 'heeft dit gemarkeerd voor moderatie' - email_title: 'Graag aandacht van een moderator voor een bericht in ''%{title}''' email_body: "%{link}\n\n%{message}" bookmark: title: 'Favoriet' @@ -464,7 +457,6 @@ nl: long_form: 'markeerde dit als ongepast' notify_moderators: title: "Iets anders" - description: 'Dit topic moet door een moderator bekeken worden. Dit vanwege de regels, voorwaarden of vanwege een andere reden.' long_form: 'heeft dit gemarkeerd voor moderatie' email_title: 'De topic "%{title}" moet door een moderator worden bekeken' email_body: "%{link}\n\n%{message}" @@ -656,37 +648,6 @@ nl: site_contact_username_warning: "Vul de naam in van een vriendelijke staf gebruikersaccount om belangrijke geautomatiseerde berichten vandaan te verzenden. Verander site_contact_username in Site Instellingen." notification_email_warning: "Notificatie e-mails worden niet verzonden van een geldig email-adres op je domein; email bezorging zal onberekenbaar en onbetrouwbaar zijn. Verander a.u.b. notification_email naar een geldig lokaal email adres in Site Instellingen." subfolder_ends_in_slash: "Je submap setup is onjuist; de DISCOURSE_RELATIVE_URL_ROOT eindigt in een schuine streep." - content_types: - education_new_reply: - title: "Uitleg voor nieuw lid: Eerste reacties" - description: "Popup verschijnt automatisch als een nieuw lid zijn eerste twee reacties schrijft." - education_new_topic: - title: "Uitleg voor nieuwe leden: Eerste topics" - description: "Popup verschijnt automatisch als een nieuw lid zijn eerste twee topics schrijft." - usage_tips: - title: "Hulp voor nieuwe leden" - description: "Hulp en essentiële informatie voor nieuwe leden." - welcome_user: - title: "Welkom: Nieuw lid" - description: "Een boodschap welke automatisch naar alle nieuwe gebruikers verzonden wordt als ze zich inschrijven." - welcome_invite: - title: "Welkom: Uitgenodigd lid" - description: "Een boodschap welke automatisch naar alle nieuw uitgenodigde gebruikers wordt verzonden als ze ingaan op een uitnodiging van een andere gebruiker om deel te nemen." - login_required_welcome_message: - title: "Inloggen vereist: Welkomstbericht" - description: "Welcomstbericht dat getoond wordt aan uitgelogde gebruikers als 'login required' is ingesteld." - login_required: - title: "Inloggen nodig: Homepage" - description: "De tekst die getoond wordt als men moet inloggen om naar het forum te kunnen gaan." - head: - title: "HTML head" - description: "HTML wordt ingevoegd in de tags." - top: - title: "Bovenkant van de pagina's" - description: "HTML dat aan de bovenkant van alle pagina's wordt toegevoegd (na de header, voor de navigatie of topictitel)." - bottom: - title: "Onderkant van de pagina's" - description: "HTML welke toegevoegd wordt voor de tag." site_settings: censored_words: "Woorden welke automatisch vervangen zullen worden met ■■■■" delete_old_hidden_posts: "Auto-delete alle verborgen berichten die meer dan 30 dagen verborgen zijn." @@ -1005,7 +966,6 @@ nl: anonymous_account_duration_minutes: "Ter bescherming van anonimiteit, maak een nieuw anonieme account aan elke N minuten voor elke gebruiker. Bijvoorbeeld: als ingesteld op 600 dan zal een nieuwe anonieme account worden aangemaakt als er 600 minuten zijn verstreken na het laatste bericht EN de gebruiker schakelt om naar anon." hide_user_profiles_from_public: "Uitschakelen gebruikerskaarten, gebruikersprofielen en het gebruikersoverzicht voor anonieme gebruikers." allow_profile_backgrounds: "Gebruikers mogen een profielachtergrond instellen." - sequential_replies_threshold: "Aantal reacties dat een gebruiker achter elkaar moet maken in een topic voordat ze worden herinnerd aan te veel opeenvolgende reacties." enable_mobile_theme: "Mobiele apparaten gebruiken een mobiel-vriendelijke theme met de mogelijkheid te schakelen naar de volledige site. Schakel deze optie uit als je een eigen stylesheet wil gebruiken die volledig responsive is." dominating_topic_minimum_percent: "Welk percentage van de berichten een gebruiker moet maken in een onderwerp voordat ze worden herinnerd aan het te veel domineren van een topic." daily_performance_report: "Analyseer elke dag NGINX logs en post een Alleen Voor Medewerkers topic met de details" @@ -1037,7 +997,6 @@ nl: enable_cdn_js_debugging: "Laat /logs juiste errors weergeven door crossorigin toestemmingen toe te voegen op alle js includes." show_create_topics_notice: "Als de site minder dan 5 publieke topics heeft, toon dan een melding waarin admins gevraagd wordt om een aantal topics te creëren." delete_drafts_older_than_n_days: Verwijder concepten ouder dan (n) dagen. - vacuum_db_days: "Draai VACUUM FULL ANALYZE om DB ruimte terug te winnen na migraties (stel op 0 in om uit te schakelen)" prevent_anons_from_downloading_files: "Voorkom dat anonieme gebruikers bijlagen mogen downloaden. WAARSCHUWING: hierdoor zullen website onderdelen, anders dan afbeeldingen, die zijn gepost als bijlage niet langer werken." slug_generation_method: "Kies een slug generate methode. 'encoded' zal een percentage encoderen string genereren. 'none' zal slug helemaal uitschakelen." enable_emoji: "Inschakelen emoji" @@ -1405,24 +1364,8 @@ nl: Kijk voor verdere uitleg in de [regels](%{base_url}/guidelines). user_automatically_blocked: subject_template: "Nieuwe gebruiker %{username} geblokkeerd wegens meldingen van andere gebruikers" - text_body_template: | - Dit is een automatisch gegenereerd bericht. - - De nieuwe gebruiker [%{username}](%{base_url}%{user_url}) is automatisch geblokkeerd, omdat meerdere gebruikers de bericht(en) van %{username} gemarkeerd hebben. - - Kijk hier voor [de markeringen](%{base_url}/admin/flags). Als %{username} ten onrechte geblokkeerd is, klik dan op de deblokkeerdknop op [de beheerpagina van deze gebruiker](%{base_url}%{user_url}). - - De gevoeligheid kan worden gewijzigd via de `block_new_user` site instellingen. spam_post_blocked: subject_template: "Berichten van nieuwe gebruiker %{username} geblokkeerd vanwege herhaalde links" - text_body_template: | - Dit is een automatisch gegenereerd bericht. - - Nieuwe gebruiker [%{username}](%{base_url}%{user_url}) probeerde meerdere berichten te plaatsen met links naar %{domains}, maar deze berichten zijn geblokkeerd om spam tegen te gaan. De gebruiker kan nog steeds nieuwe berichten plaatsen die niet linken naar %{domains}. - - Bekijk de gebruiker [hier](%{base_url}%{user_url}). - - De drempel hiervoor kan ingesteld worden met de `newuser_spam_host_threshold` en de `white_listed_spam_host_domains` site instellingen. unblocked: subject_template: "Account gedeblokkeerd" text_body_template: | @@ -1448,8 +1391,6 @@ nl: unsubscribe: title: "Uitschrijven" description: "Niet geïnteresseerd in deze e-mails? Geen probleem! Klik hieronder om direct uitgeschreven te worden:" - reply_by_email: "Beantwoord deze mail om te reageren op dit forumbericht, of ga naar %{base_url}%{url} in je browser." - visit_link_to_respond: "Ga naar %{base_url}%{url} in je browser om te reageren." posted_by: "Geplaatst door %{username} op %{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} nodigt je uit voor een bericht '%{topic_title}'" @@ -1457,49 +1398,14 @@ nl: subject_template: "[%{site_name}] %{username} nodigt je uit voor een topic '%{topic_title}'" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Een korte samenvatting van %{site_link} sinds we je voor het laatst zagen op %{last_seen_at}." subject_template: "[%{site_name}] Digest" diff --git a/config/locales/server.pl_PL.yml b/config/locales/server.pl_PL.yml index 538cd3d75..b4d014a44 100644 --- a/config/locales/server.pl_PL.yml +++ b/config/locales/server.pl_PL.yml @@ -24,8 +24,6 @@ pl_PL: loading: "Ładowanie" powered_by_html: 'Zasilane przez Discourse, najlepiej oglądać z włączonym JavaScriptem' log_in: "Logowanie" - via: "%{username} z %{site_name}" - is_reserved: "jest zarezerwowana" purge_reason: "Automatycznie usunięto jako porzucone, nieaktywne konto" disable_remote_images_download_reason: "Pobieranie zewnętrznych grafik zostało wyłączone z uwagi na niską ilość wolnego miejsca na dysku." anonymous: "Anonim" @@ -435,15 +433,11 @@ pl_PL: description: 'Ten wpis zawiera treści które umiarkowana osoba może uznać za wulgarne, obraźliwe lub naruszające wytyczne społeczności.' long_form: 'oflagowano jako niewłaściwe' notify_user: - description: 'Ten wpis zawiera coś o czym chciałbym porozmawiać z tą osobą bezpośrednio i prywatnie. Bez oflagowania.' long_form: 'użytkownik został powiadomiony' email_title: 'Twój wpis w "%{title}"' email_body: "%{link}\n\n%{message}" notify_moderators: title: "Coś innego" - description: 'Ten post wymaga uwagi moderatora z powodu nie uwzględnionego na liście powyżej.' - long_form: 'oznaczył to dla uwagi moderatora' - email_title: 'Wpis w "%{title}" wymaga uwagi moderatorów' email_body: "%{link}\n\n%{message}" bookmark: title: 'Zakładka' @@ -468,7 +462,6 @@ pl_PL: long_form: 'oflagowano jako niewłaściwe' notify_moderators: title: "Coś innego" - description: 'Ten temat wymaga interwencji moderatora z uwagi na niezgodność z wytycznymi społeczności, warunkami użytkowania lub z innego, niewymienionego tu powodu.' long_form: 'oznaczył to dla uwagi moderatora' email_title: 'Temat "%{title}" wymaga uwagi moderatora' email_body: "%{link}\n\n%{message}" @@ -658,37 +651,6 @@ pl_PL: consumer_email_warning: "Twój serwis jest skonfigurowany by używać Gmaila (lub innego konsumenckiego serwisu poczty) do wysyłania emaili. Gmail ogranicza jak dużo wiadomości możesz wysłać. Rozważ wykorzystanie dostawcy serwisu pocztowego jak mandrill.com by zagwarantować dostarczanie poczty." site_contact_username_warning: "Wprowadź nazwę użytkownika zespołu, aby wysłać ważny szablon automatycznej wiadomości. Zaktualizuj site_contact_username w Ustawieniach Strony " notification_email_warning: "Emaile z powiadomieniami nie zostały wysłane z prawidłowego adresu email na twojej domenie; dostawca usługi email może być niekonsekwentny i nierzetelny. Ustaw prawidłowy email w notification_email w Ustawieniach Strony." - content_types: - education_new_reply: - title: "Edukacja nowych użytkowników: Pierwsze odpowiedzi" - description: "Okienko z wskazówkami automatycznie wyświetlane nad panelem pisania gdy nowi użytkownicy zaczynają pisać swoje pierwsze 2 odpowiedzi." - education_new_topic: - title: "Edukacja nowych użytkowników: Pierwsze tematy" - description: "Okienko z wskazówkami automatycznie wyświetlane nad panelem pisania gdy nowi użytkownicy rozpoczynają swoje pierwsze 2 tematy." - usage_tips: - title: "Wiadomość powitalna" - description: "Przewodnik i inne informacje dla nowych użytkowników." - welcome_user: - title: "Przywitanie: Nowy użytkownik" - description: "Wiadomość wysyłana automatycznie do wszystkich nowych użytkowników zaraz po ich rejestracji." - welcome_invite: - title: "Przywitanie: Zaproszony użytkownik" - description: "Wiadomość wysyłana automatycznie do nowych użytkowników po zaakceptowaniu zaproszenia od innego użytkownika." - login_required_welcome_message: - title: "Wymagane logowanie: wiadomość powitalna" - description: "Wiadomość powitalna wyświetlana niezalogowanym użytkownikom, gdy ustawienie 'login required' jest włączone." - login_required: - title: "Login Required: Homepage" - description: "The text displayed for unauthorized users when login is required on the site." - head: - title: "Nagłówki HTML" - description: "Kod HTML jaki zostanie umieszczony między tagami ." - top: - title: "Nagłówek każdej strony" - description: "Kod HTML jaki zostanie dołączony na górze każdej strony (po nagłówku, przed nawigacją lub tytułem tematu)." - bottom: - title: "Stopka każdej strony" - description: "Kod HTML, który zostanie załączony przed tagiem ." site_settings: censored_words: "Wskazane słowa będą automatycznie zamieniane na ■■■■" delete_old_hidden_posts: "Automatycznie kasuj wpisy ukryte dłużej niż 30 dni." @@ -1177,54 +1139,17 @@ pl_PL: unsubscribe: title: "Wypisz" description: "Nie chcesz otrzymywać tych emaili? Nie ma problemu! Kliknij poniżej by wypisać się natychmiast:" - reply_by_email: "Aby odpowiedzieć odpisz na ten email lub otwórz %{base_url}%{url} w swojej przeglądarce." - visit_link_to_respond: "To respond, visit %{base_url}%{url} in your browser." posted_by: "Dodany przez %{username} w dniu %{post_date}" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PW] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: subject_template: "[%{site_name}] Podsumowanie" new_activity: "Nowa aktywność w twoich tematach i wpisach:" diff --git a/config/locales/server.pt.yml b/config/locales/server.pt.yml index 1abf5a5d0..a1d614894 100644 --- a/config/locales/server.pt.yml +++ b/config/locales/server.pt.yml @@ -90,6 +90,8 @@ pt: not_found: "O URL ou recurso pedido não foi encontrado." invalid_access: "Não tem permissões para visualizar o recurso pedido." read_only_mode_enabled: "Este sítio encontra-se no modo só de leitura. As interações estão desativadas." + reading_time: "Tempo de leitura" + likes: "Gostos" too_many_replies: one: "Pedimos desculpa mas novos utilizadores estão temporariamente limitados a 1 resposta no mesmo tópico." other: "Pedimos desculpa mas novos utilizadores estão temporariamente limitados a %{count} respostas no mesmo tópico." @@ -843,6 +845,7 @@ pt: active_user_rate_limit_secs: "Qual a frequência de atualização do campo 'última vez visto em', em segundos." verbose_localization: "Mostrar extensas dicas de localização na IU" previous_visit_timeout_hours: "Quanto tempo dura uma visita antes de a considerarmos como 'visita anterior', em horas." + allow_staged_accounts: "[BETA] Criar automaticamente contas encenadas para emails recebidos." rate_limit_create_topic: "Após a criação de um tópico, os utilizadores devem esperar (n) segundos antes de criarem um novo tópico." rate_limit_create_post: "Após a publicação, os utilizadores devem esperar (n) segundos antes de criarem outra mensagem." rate_limit_new_user_create_topic: "Após a criação de um tópico, os novos utilizadores devem esperar (n) segundos antes de criarem um novo tópico." @@ -885,6 +888,7 @@ pt: tl2_requires_likes_received: "Quantos gostos um utilizador deve receber antes de ser promovido para o Nível de Confiança 2." tl2_requires_likes_given: "Quantos gostos um utilizador deve atribuir antes de ser promovido para o Nível de Confiança 2." tl2_requires_topic_reply_count: "Quantos tópicos um utilizador deve responder antes de ser promovido para o Nível de Confiança 2." + tl3_time_period: "Período de tempo de requisitos do Nível de Confiança 3" tl3_requires_days_visited: "Número mínimo de dias que o utilizador necessita de ter visitado o sítio nos últimos 100 dias para se qualificar à promoção para o Nível de Confiança 3. (0 a 100)" tl3_requires_topics_replied_to: "Número mínimo de tópicos que o utilizador necessita de ter respondido nos últimos 100 dias para se qualificar à promoção para o Nível de Confiança 3. (0 ou mais)" tl3_requires_topics_viewed: "Percentagem de tópicos criados nos últimos 100 dias que o utilizador precisa de ter visto para se qualificar à promoção para o Nível de Confiança 3. (0 a 100)" @@ -961,6 +965,7 @@ pt: disable_emails: "Impedir que Discourse envie qualquer tipo de emails" strip_images_from_short_emails: "Remover imagens de emails cujo tamanho seja inferior a 2800 Bytes" short_email_length: "Comprimento de email curto, em Bytes" + display_name_on_email_from: "Exibir nomes completos em campos do formulário de email" pop3_polling_enabled: "Solicitação através de POP3 para respostas de emails" pop3_polling_ssl: "Utilize SSL ao ligar a um servidor POP3. (Recomendado)" pop3_polling_period_mins: "Período em minutos entre a verificação da conta POP3 para o email. NOTA: requer reinicialização." @@ -999,9 +1004,10 @@ pt: anonymous_account_duration_minutes: "Para proteger o anonimato crie uma nova conta anónima a cada N minutos para cada utilizador. Exemplo: se configurado para 600, assim que passarem 600 minutos desde a última mensagem E o utilizador altere para anónimo, uma nova conta anónima é criada." hide_user_profiles_from_public: "Desativar cartões de utilizador, perfis de utilizador e diretoria de utilizadores para utilizadores anónimos." allow_profile_backgrounds: "Permitir que os utilizadores carreguem fundos de perfil." - sequential_replies_threshold: "Número de mensagens que um utilizador tem que fazer em linha num tópico antes de ser relembrado acerca de demasiadas respostas sequenciais." + sequential_replies_threshold: "Número de mensagens que um utilizador tem que fazer em linha num tópico antes de ser lembrado acerca de demasiadas respostas sequenciais." enable_mobile_theme: "Os dispositivos móveis usam um tema mobile-friendly, com a possibilidade de mudar para o sítio completo. Desative isto se quer usar um estilo personalizado que é totalmente responsivo." dominating_topic_minimum_percent: "Que percentagem de mensagens um utilizador tem que fazer num tópico antes de ser relembrado sobre dominar demasiado um tópico." + disable_avatar_education_message: "Desativar mensagem educativa para alteração de avatar." daily_performance_report: "Analise os logs diários NGINX e publique um tópico visível apenas para o pessoal com detalhes" suppress_uncategorized_badge: "Não mostrar distintivos para tópicos sem categoria nas listagens de tópicos." permalink_normalizations: "Utilize a seguinte expressão regular antes de combinar hiperligações permanentes, por exemplo: /(\\/topic.*)\\?.*/\\1 irá retirar sequências de consulta de rotas de tópicos. O formato é regex+sequência utilize \\1 etc. para aceder a capturas." @@ -1070,6 +1076,10 @@ pt: invalid_string_min: "Deve ser pelo menos %{min} caracteres." invalid_string_max: "Não deve ser mais que %{max} caracteres." invalid_reply_by_email_address: "O valor deve conter '%{reply_key}' e ser diferente do email de notificação." + pop3_polling_host_is_empty: "Deve configurar um 'pop3 polling host' antes de ativar o polling POP3." + pop3_polling_username_is_empty: "Deve configurar um 'nome de utilizador de polling pop3' antes de ativar o polling POP3." + pop3_polling_password_is_empty: "Deve configurar uma 'palavra-passe de polling pop3' antes de ativar o polling POP3." + pop3_polling_authentication_failed: "Autenticação POP3 falhada. Por favor verifique as suas credenciais pop3." notification_types: group_mentioned: "%{group_name} foi mencionado em %{link}" mentioned: "%{display_username} mencionou-o em %{link}" @@ -1465,21 +1475,14 @@ pt: text_body_template: | Esta é uma mensagem automática. - O novo utilizador [%{username}](%{base_url}%{user_url}) foi automaticamente bloqueado devido a múltiplos utilizadores terem sinalizado a(s) mensagen(s) de %{username}. + O novo utilizador [%{username}](%{user_url}) foi automaticamente bloqueado porque múltiplos utilizadores marcaram mensagem(ns) de %{username}. - Por favor [reveja as sinalizações](%{base_url}/admin/flags). Se %{username} foi incorretamente bloqueado de publicar, carregue no botão de desbloqueio em [a página de administração para este utilizador](%{base_url}%{user_url}). + Por favor [reveja as sinalizações](%{base_url}/admin/flags). Se %{username} foi incorretamente bloqueado de publicar, carregue no botão de desbloqueio em [a página de administração para este utilizador](%{user_url}) Este limite pode ser alterado através de `block_new_user` nas configurações do sítio. spam_post_blocked: subject_template: "Novas mensagens do novo utilizador %{username} foram bloqueadas devido a hiperligações repetidas" - text_body_template: | - Esta é uma mensagem automática. - - O novo utilizador [%{username}](%{base_url}%{user_url}) tentou criar múltiplas mensagens com hiperligações para %{domains}, mas estas foram bloqueadas para evitar spam. O utilizador ainda pode criar novas mensagens sem hiperligação a %{domains}. - - Por favor [reveja o utilizador](%{base_url}%{user_url}). - - Isto pode ser modificado através de `newuser_spam_host_threshold` e `white_listed_spam_host_domains`nas configurações do sítio. + text_body_template: "Esta é uma mensagem automática.\n\nO novo utilizador [%{username}](%{user_url}) tentou criar múltiplas mensagens com hiperligações para %{domains}, mas estas foram bloqueadas para evitar spam. O utilizador ainda pode criar novas mensagens sem hiperligação a %{domains}. \n\nPor favor [reveja o utilizador](%{user_url}).\n\nIsto pode ser modificado através de `newuser_spam_host_threshold` e `white_listed_spam_host_domains` nas configurações do sítio.\n" unblocked: subject_template: "Conta desbloqueada" text_body_template: | @@ -1500,9 +1503,7 @@ pt: subject_template: "Descarregamento de imagens remotas desativado" text_body_template: "A configuração `download_remote_images_to_local` foi desativada porque o limite de espaço em disco em `download_remote_images_threshold` foi alcançado." unsubscribe_link: | - Para parar de receber notificações para este tópico em particular, [clique aqui](%{unsubscribe_url}). - - Para cancelar a subscrição destes emails, altere as suas [preferências de utilizador](%{user_preferences_url}). + Para parar de receber notificações para este tópico em particular, [clique aqui](%{unsubscribe_url}). Para cancelar a subscrição destes emails, altere as suas [preferências de utilizador](%{user_preferences_url}). subject_re: "Re:" subject_pm: "[MP]" user_notifications: @@ -1510,8 +1511,8 @@ pt: unsubscribe: title: "Cancelar a Subscrição" description: "Não está interessado em receber estes emails? Não há problema! Clique em baixo para cancelar a subscrição instantaneamente:" - reply_by_email: "Para reagir, responda a este email ou [visite o tópico](%{base_url}%{url}) no seu navegador de internet." - visit_link_to_respond: "Para reagir, [visite o tópico](%{base_url}%{url}) no seu navegador de internet." + reply_by_email: "Para reagir, responda a este email ou [visite o tópico](%{base_url}%{url})." + visit_link_to_respond: "Para reagir, [visite o tópico](%{base_url}%{url})." posted_by: "Publicado por %{username} em %{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} convidou-o para uma mensagem '%{topic_title}'" @@ -1528,6 +1529,22 @@ pt: > %{site_title} -- %{site_description} Por favor visite esta hiperligação para visualizar a mensagem: %{base_url}%{url} + user_invited_to_private_message_pm_staged: + subject_template: "[%{site_name}] %{username} convidou-o para uma mensagem '%{topic_title}'" + text_body_template: |2+ + + %{username} convidou-o para uma mensagem + + > **%{topic_title}** + > + > %{topic_excerpt} + + em + + > %{site_title} -- %{site_description} + + Por favor visite esta hiperligação para ver a mensagem: %{base_url}%{url} + user_invited_to_topic: subject_template: "[%{site_name}] %{username} convidou-o para um tópico '%{topic_title}'" text_body_template: |2 @@ -1546,6 +1563,8 @@ pt: user_replied: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1555,6 +1574,8 @@ pt: user_quoted: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1564,6 +1585,8 @@ pt: user_mentioned: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1573,6 +1596,8 @@ pt: user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1582,6 +1607,8 @@ pt: user_posted: subject_template: "[%{site_name}] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} @@ -1591,10 +1618,20 @@ pt: user_posted_pm: subject_template: "[%{site_name}] [MP] %{topic_title}" text_body_template: | + %{header_instructions} + %{message} %{context} + --- + %{respond_instructions} + user_posted_pm_staged: + subject_template: "%{optional_re}%{topic_title}" + text_body_template: |2 + + %{message} + --- %{respond_instructions} digest: diff --git a/config/locales/server.pt_BR.yml b/config/locales/server.pt_BR.yml index e17d51fef..bc3323572 100644 --- a/config/locales/server.pt_BR.yml +++ b/config/locales/server.pt_BR.yml @@ -946,7 +946,6 @@ pt_BR: anonymous_account_duration_minutes: "Para proteger anonimidade cria uma conta anônima a cada N minutos para cada usuário. Exemplo: se configurado para 600, assim que passar 600 minutos da última mensagem E o usuário trocar para anônimo, uma nova conta anônima será criada." hide_user_profiles_from_public: "Desativar cartões de usuários, perfis de usuário e diretório de usuário para usuários anônimos." allow_profile_backgrounds: "Permitir usuários de fazerem upload de backgrounds para o perfil" - sequential_replies_threshold: "Número de posts que um usuário precisa fazer em seguida num tópico antes de ser relembrado sobre muitas respostas sequenciais." enable_mobile_theme: "Os dispositivos móveis usam um tema mobile-friendly, com a possibilidade de mudar para o site completo. Desative isso se você quiser usar um estilo personalizado que é totalmente responsivo." dominating_topic_minimum_percent: "Qual o percentual de postagens que um usuário precisa fazer em um tópico antes de ser relembrado sobre ser excessivamente dominante em um tópico." daily_performance_report: "Analiza logs do NGINX diariamente e cria um tópico na categoria Somente Equipe com os detalhes." @@ -1412,24 +1411,8 @@ pt_BR: text_body_template: "Olá, \n\nEsta é uma mensagem automática do %{site_name} para informá-lo de que a sua conta foi bloqueada por um membro da administração. \n\nPara informações adicionais, por favor consulte as nossas [diretrizes da comunidade](%{base_url}/guidelines).\n" user_automatically_blocked: subject_template: "Novo usuário %{username} foi bloqueado devido a denúncias da comunidade" - text_body_template: | - Essa é uma mensagem automática. - - O novo usuário [%{username}](%{base_url}%{user_url}) foi automaticamente bloqueado por ter recebido múltiplas sinalizações %{username}'s postagem(ns). - - Por favor [reveja as sinalzações](%{base_url}/admin/flags). Se %{username} foi bloqueado injustamente, clique no botão de desbloquear na [página de administração desse usuário](%{base_url}%{user_url}). - - Este limite pode ser alterado através da configuração `block_new_user` do site. spam_post_blocked: subject_template: "Novo usuário %{username} teve postagem bloqueada por repetidos links" - text_body_template: | - Essa é uma mensagem automática. - - O novo usuário [%{username}](%{base_url}%{user_url}) tentou criar múltiplas postagens com link para %{domains}, mas essas postagens foram bloqueadas para evitar spam. O usuário ainda está apto a criar novas postagens que não tenham links para %{domains}. - - Por favor, [reveja esse usuário](%{base_url}%{user_url}). - - Isso pode ser modificado na configuração `newuser_spam_host_threshold` e `white_listed_spam_host_domains` do site. unblocked: subject_template: "Conta desbloqueada" text_body_template: | @@ -1453,7 +1436,6 @@ pt_BR: unsubscribe: title: "Desinscrever" description: "Não está interessado em receber estes emails? Não tem problema! Clique em baixo para se desinscrever instantaneamente:" - visit_link_to_respond: "Para responder, [visite o tópico](%{base_url}%{url}) em seu navegador." posted_by: "Postado por %{username} em %{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} convidou você para uma mensagem '%{topic_title}'" @@ -1487,55 +1469,16 @@ pt_BR: Por favor visitar o link para visualizar a mensagem: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{username} respondeu à sua postagem no tópico '%{topic_title}' de %{site_name}: - - --- - %{message} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{username} citou você no tópico '%{topic_title}' de %{site_name}: - - --- - %{message} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{username} mencionou você no tópico '%{topic_title}' de %{site_name}: - - --- - %{message} - - --- - %{respond_instructions} user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{username} postou no tópico '%{topic_title}' de %{site_name}: - - --- - %{message} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Um breve resumo de %{site_link} desde que viu pela última vez em %{last_seen_at}." subject_template: "Resumo [%{site_name}]" diff --git a/config/locales/server.ro.yml b/config/locales/server.ro.yml index 55987cec2..3e4c62cbe 100644 --- a/config/locales/server.ro.yml +++ b/config/locales/server.ro.yml @@ -16,8 +16,6 @@ ro: loading: "Încarcă" powered_by_html: 'Prin intermediul Discourse, Vizualizare optimă cu JavaScript activat' log_in: "Autentificare" - via: "%{username} prin %{site_name}" - is_reserved: "este rezervat" purge_reason: "Cont automat şters ca abandonat, neactivat" disable_remote_images_download_reason: "Descărcarea de imagini la distanţă a fost dezactivată deoarece nu mai era spaţiu pe disc suficient." anonymous: "Anonim" @@ -358,14 +356,10 @@ ro: description: 'Această postare are conținut pe care o persoană normală l-ar numii ofesator, abuziv, sau o violare a regulilor comune.' long_form: 'marcat ca necorespunzător' notify_user: - description: 'Această postare conține ceva despre care aș vrea să discut direct și privat cu acestă persoană.' email_title: 'Despre postarea dvs din "%{title}"' email_body: "%{link}\n\n%{message}" notify_moderators: title: "Notifică moderatorii" - description: 'Această postare necesită atenția generală a moderatorilor bazat pe guidelines, TOS, sau pentru un alt motiv ne-listat mai sus.' - long_form: 'moderatori notificați' - email_title: 'O postare din "%{title}" necesită atenția moderatorilor' email_body: "%{link}\n\n%{message}" bookmark: title: 'Semn de carte' @@ -390,7 +384,6 @@ ro: long_form: 'marcat ca necorespunzător' notify_moderators: title: "Notifică moderatori" - description: 'Această discuție necesită atenția generală a moderatorilor bazat pe guidelines, TOS, sau pentru un alt motiv ne-listat mai sus.' long_form: 'moderatori notificați' email_title: 'discuția "%{title}" necesită atenția moderatorilor' email_body: "%{link}\n\n%{message}" @@ -537,35 +530,6 @@ ro: site_description_missing: "Opțiunea descriere_site nu este completată. Scrieți o scurtă descriere a forum-ului în setările site-ului." consumer_email_warning: "Site-ul dvs e configurat să folosească Gmail(sau alt serviciu de email) pentru a trimite emailuri. Gmail limitează numărul de email-uri trimise. Folosiți un provider de mailuri ca mandrill.com pentru a asigura trimiterea mail-urilor." notification_email_warning: "Opțiunea notificare_email este goală. Vă rugăm modificați-o în Setările site-ului." - content_types: - education_new_reply: - title: "Insturirea noului utilizator: Primele răspunsuri" - description: "Apar ghidările automat deasupra spațiului de compus când noul utilizator începe să scrie primele două răspunsuri." - education_new_topic: - title: "Insturirea noului utilizator: Primele Discuții" - description: "Apar ghidările automat deasupra spațiului de compus când noul utilizator începe să scrie primele două discuții." - usage_tips: - title: "Sfaturile noului utilizator" - description: "Sfaturile comune, informațiile esențiale forumului și intruirile cheie pentru utilizatorii noi." - welcome_user: - title: "Bine ai venit: Utilizator nou" - welcome_invite: - title: "Bine ai venit: Utilizator invitat" - login_required_welcome_message: - title: "Autentificare necesară: Mesaj de întâmpinare" - description: "Mesaj de întâmpinare afișat tuturor utilizatorilor delogați când setarea 'Autentificare necesară' este activată." - login_required: - title: "Autentificare necesară: Pagina principală" - description: "Textul afișat pentru utilizatorii neautorizați când autentificarea e necesară în site." - head: - title: "Cap HTML" - description: "HTML inserat între tagurile ." - top: - title: "Capătul paginilor" - description: "HTML ce va fi adăugat în capătul fiecărei pagini (după header, îainte de navigarea către titlul discuției)." - bottom: - title: "Sfârșitul paginilor" - description: "HTML ce va fi adăugat la sfârșitul fiecărei pagini." site_settings: default_locale: "Limba oficială a acestei instanțe de discurs (ISO 639-1 Code)" allow_user_locale: "Permite utilizatorilor să aleagă preferința de limbă pentru interfață" @@ -735,7 +699,6 @@ ro: digest_min_excerpt_length: "Numărul minimum de extrase din postări din email-ul rezumat, în caractere." max_daily_gravatar_crawls: "Numărul maxim de verificări făcute de Discourse pentru existența unui gravatar preferențial într-o zi" allow_profile_backgrounds: "Permite utilizatorilor să încarce fundaluri de profil." - sequential_replies_threshold: "Numărul de postări la rând într-o discuție până să-i fie amintit utilizatorului că sunt prea multe răspunsuri secvențiale. " enable_mobile_theme: "Dispozitivele mobile folosesc o temă cu abilitatea de a schimba la întregul site. Dezactivați pentru a folosii un foiae de stil preferențiala ce este total compatibilă." dominating_topic_minimum_percent: "Ce procent din postări într-o discuție trebuie să facă un utilizator înainte de ai fi amintit că domină discuția." suppress_uncategorized_badge: "Nu arăta insigna pentru discuțiile fără categorie în lista de discuții." @@ -758,7 +721,6 @@ ro: notify_about_flags_after: "Dacă sunt marcaje ce nu au fost aranjate după atâtea ore, Trimite un email la email-ul de contact . Setați 0 pentru a dezactiva." enable_cdn_js_debugging: "Permite /rapoarte să afișeze erori adăugând permisiune crossorigin tuturor js-urilor incluse." show_create_topics_notice: "Dacă site-ul are mai puțin de 5 discuții publice, afișează o notificare ce cere adminilor să creeze discuții." - vacuum_db_days: "Pornește ANALIZĂ COMPLETĂ VACUUM pentru a re-obține spațiul DB după migrări (setează 0 pt dezactivare)" enable_emoji: "Activează emoji" errors: invalid_email: "Adresa de email invalidă." @@ -956,24 +918,8 @@ ro: Pentru ajutor adițional, faceți referie la [regulile de comunitate](%{base_url}).. user_automatically_blocked: subject_template: "Noul utilizator %{username} a fost blocat datorită marcajelor date de comunitate" - text_body_template: | - Acesta este un mesaj automat. - - Noul utilizator [%{username}](%{base_url}%{user_url}) a fost automat blocat fiindcă mai mulți utilizatori au marcat postările lui %{username}. - - Vă rugăm [revizuiți marcajele](%{base_url}/admin/flags). Dacă %{username} a fost incorect blocat în a posta, faceți click pe butonul de deblocare pe [pagina de admin a acestui utilizator](%{base_url}%{user_url}). - - Acest prag poate fi schimbat prin setarea `block_new_user` a site-ului . spam_post_blocked: subject_template: "Utilizatorul nou %{username} are postările blocate datorită adreselor repetate" - text_body_template: | - Acesta este un mesaj automat. - - Noul utilizator [%{username}](%{base_url}%{user_url}) a încercat să creeze postări multiple cu adrese către %{domains}, dar aceste postări au fost blocate pentru a evita spamul. Acest utilizator este capabil încă să creeze postări ce nu conțin adrese către %{domains}. - - Vă rugăm [revizionati utilizatorul](%{base_url}%{user_url}). - - Aceasta poate fi modificat prin setările `newuser_spam_host_threshold` și `white_listed_spam_host_domains` din site. unblocked: subject_template: "Cont deblocat" text_body_template: | @@ -997,54 +943,17 @@ ro: unsubscribe: title: "Dezabonare" description: "Nu sunteți interesat în a primii aceste email-uri? Nicio problemă! Faceți clic dedesubt pentru a vă dezabona imediat:" - reply_by_email: "Pentru a răspunde, răspundeți la acest email sau vizitați %{base_url}%{url} în browser-ul dvs." - visit_link_to_respond: "Pentru a răspunde, vizitați %{base_url}%{url} în browserul dvs." posted_by: "Postat de %{username} pe data %{post_date}" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [MP] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Un sumar scurt al %{site_link} de ultima oară când ați fost prezent %{last_seen_at}." subject_template: "Rezumatul [%{site_name}]" diff --git a/config/locales/server.ru.yml b/config/locales/server.ru.yml index 928d435f3..9d41d5821 100644 --- a/config/locales/server.ru.yml +++ b/config/locales/server.ru.yml @@ -945,7 +945,6 @@ ru: anonymous_posting_min_trust_level: "Минимальный уровень доверия для возможности создавать темы от имени анонимного пользователя." anonymous_account_duration_minutes: "Защита от создания анонимных аккаунтов каждые N минут для каждого пользователя. Пример: Если установлено 600, означает что должно пройти 600 минут с момента последнего поста юзера И юзер вышел из системы, для того чтобы он смог создать новоый аккаунт." allow_profile_backgrounds: "Разрешить пользователям загружать фоновые картинки для своих страниц профиля." - sequential_replies_threshold: "Количество сообщений, отправленных пользователем подряд в одной теме, прежде чем ему будет показано предупреждение о слишком частых ответах." enable_mobile_theme: "Мобильные устройства используют адаптированную тему с возможностью переключения в обычный вид. Отключите данную настройку если вы хотите использовать собственный стиль для мобильных устройств." dominating_topic_minimum_percent: "Количество сообщений, отправленных пользователем подряд в одной теме, прежде чем ему будет показано предупреждение о слишком частых ответах." daily_performance_report: "Ежедневно анализировать логи сервера NGINX и отправлять сообщение с результатами анализа в тему, видимую только персоналу." @@ -1471,24 +1470,8 @@ ru: Получить дополнительную информацию вы можете в нашей [инструкции пользователя](%{base_url}/guidelines). user_automatically_blocked: subject_template: "Пользователь %{username} заблокирован участниками сообщества" - text_body_template: | - This is an automated message. - - The new user [%{username}](%{base_url}%{user_url}) was automatically blocked because multiple users flagged %{username}'s post(s). - - Please [review the flags](%{base_url}/admin/flags). If %{username} was incorrectly blocked from posting, click the unblock button on [the admin page for this user](%{base_url}%{user_url}). - - This threshold can be changed via the `block_new_user` site settings. spam_post_blocked: subject_template: "Сообщения нового пользователя %{username} заблокированы из-за повторяющихся ссылок" - text_body_template: | - Это автоматическое уведомление. - - Новый пользователь [%{username}](%{base_url}%{user_url}) пытается создать множество постов с ссылками на %{domains}, но система заблокировала эти посты как спам. Пользователь все еще может создавать посты не содержащие ссылки на %{domains}. - - Пожайлуйста [проверьте пользователя](%{base_url}%{user_url}). - - Решить данный вопрос можно также добавив домен в настройки `newuser_spam_host_threshold` и `white_listed_spam_host_domains` . unblocked: subject_template: "Учетная запись разблокирована" text_body_template: | @@ -1548,49 +1531,14 @@ ru: Просмотреть сообщение вы можете по ссылке: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [Личное сообщение] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "Сводка обсуждений на сайте %{site_link} с момента вашего последнего визита %{last_seen_at}" subject_template: "Cводка новостей сайта [%{site_name}]" diff --git a/config/locales/server.sq.yml b/config/locales/server.sq.yml index 42e086a9e..168a87347 100644 --- a/config/locales/server.sq.yml +++ b/config/locales/server.sq.yml @@ -16,8 +16,6 @@ sq: loading: "Loading" powered_by_html: 'Mundësuar nga Discourse, për një eksperience më të mirë aktivizoni JavaScript' log_in: "Identifikohu" - via: "%{username} \tnëpër %{site_name}" - is_reserved: "është i rezervuar" purge_reason: "Automatically deleted as abandoned, unactivated account" disable_remote_images_download_reason: "Remote images download was disabled because there wasn't enough disk space available." anonymous: "Anonim" @@ -392,15 +390,11 @@ sq: description: 'This post contains content that a reasonable person would consider offensive, abusive, or a violation of our community guidelines.' long_form: 'flagged this as inappropriate' notify_user: - description: 'This post contains something I want to talk to this person directly and privately about. Does not cast a flag.' long_form: 'messaged user' email_title: 'Postimi juaj në "%{title}"' email_body: "%{link}\n\n%{message}" notify_moderators: title: "Diçka tjetër" - description: 'This post requires moderator attention for another reason not listed above.' - long_form: 'shënoje për vëmendjen e moderatorëve' - email_title: 'A post in "%{title}" requires moderator attention' email_body: "%{link}\n\n%{message}" bookmark: title: 'Bookmark' @@ -425,7 +419,6 @@ sq: long_form: 'flagged this as inappropriate' notify_moderators: title: "Diçka Tjetër" - description: 'This topic requires general moderator attention based on the guidelines, TOS, or for another reason not listed above.' long_form: 'shënoje për vëmendjen e moderatorëve' email_title: 'The topic "%{title}" requires moderator attention' email_body: "%{link}\n\n%{message}" @@ -611,37 +604,6 @@ sq: consumer_email_warning: "Your site is configured to use Gmail (or another consumer email service) to send email. Gmail limits how many emails you can send. Consider using an email service provider like mandrill.com to ensure email deliverability." site_contact_username_warning: "Enter the name of a friendly staff user account to send important automated messages from. Update site_contact_username in Site Settings." notification_email_warning: "Notification emails are not being sent from a valid email address on your domain; email delivery will be erratic and unreliable. Please set notification_email to a valid local email address in Site Settings." - content_types: - education_new_reply: - title: "New User Education: First Replies" - description: "Pop up just-in-time guidance automatically displayed above the composer when new users begin typing their first two new replies." - education_new_topic: - title: "New User Education: First Topics" - description: "Pop up just-in-time guidance automatically displayed above the composer when new users begin typing their first two new topics." - usage_tips: - title: "New User Guidance" - description: "Guidance and essential information for new users." - welcome_user: - title: "Welcome: New User" - description: "A message automatically sent to all new users when they sign up." - welcome_invite: - title: "Welcome: Invited User" - description: "A message automatically sent to all new invited users when they accept the invitation from another user to participate." - login_required_welcome_message: - title: "Login Required: Welcome Message" - description: "Welcome message that is displayed to logged out users when the 'login required' setting is enabled." - login_required: - title: "Login Required: Homepage" - description: "The text displayed for unauthorized users when login is required on the site." - head: - title: "HTML head" - description: "HTML that will be inserted inside the tags." - top: - title: "Top of the pages" - description: "HTML that will be added at the top of every page (after the header, before the navigation or the topic title)." - bottom: - title: "Bottom of the pages" - description: "HTML that will be added before the tag." site_settings: censored_words: "Fjalët do të zhvendosen automatikisht me ■■■■" delete_old_hidden_posts: "Auto-delete any hidden posts that stay hidden for more than 30 days." @@ -940,7 +902,6 @@ sq: anonymous_posting_min_trust_level: "Minimum trust level required to enable anonymous posting" anonymous_account_duration_minutes: "To protect anonymity create a new anonymous account every N minutes for each user. Example: if set to 600, as soon as 600 minutes elapse from last post AND user switches to anon, a new anonymous account is created." allow_profile_backgrounds: "Allow users to upload profile backgrounds." - sequential_replies_threshold: "Number posts a user has to make in a row in a topic before being reminded about too many sequential replies. " enable_mobile_theme: "Mobile devices use a mobile-friendly theme, with the ability to switch to the full site. Disable this if you want to use a custom stylesheet that is fully responsive." dominating_topic_minimum_percent: "What percentage of posts a user has to make in a topic before being reminded about overly dominating a topic." daily_performance_report: "Analyze NGINX logs daily and post a Staff Only topic with details" @@ -970,7 +931,6 @@ sq: enable_cdn_js_debugging: "Allow /logs to display proper errors by adding crossorigin permissions on all js includes." show_create_topics_notice: "If the site has fewer than 5 public topics, show a notice asking admins to create some topics." delete_drafts_older_than_n_days: Delete drafts older than (n) days. - vacuum_db_days: "Run VACUUM FULL ANALYZE to reclaim DB space after migrations (set to 0 to disable)" prevent_anons_from_downloading_files: "Prevent anonymous users from downloading attachments. WARNING: this will prevent any non-image site assets posted as attachments from working." slug_generation_method: "Choose a slug generation method. 'encoded' will generate percent encoding string. 'none' will disable slug at all." enable_emoji: "Enable emoji" @@ -1534,24 +1494,8 @@ sq: For additional guidance, please refer to our [community guidelines](%{base_url}/guidelines). user_automatically_blocked: subject_template: "New user %{username} blocked due to community flags" - text_body_template: | - This is an automated message. - - The new user [%{username}](%{base_url}%{user_url}) was automatically blocked because multiple users flagged %{username}'s post(s). - - Please [review the flags](%{base_url}/admin/flags). If %{username} was incorrectly blocked from posting, click the unblock button on [the admin page for this user](%{base_url}%{user_url}). - - This threshold can be changed via the `block_new_user` site settings. spam_post_blocked: subject_template: "New user %{username} posts blocked due to repeated links" - text_body_template: | - This is an automated message. - - The new user [%{username}](%{base_url}%{user_url}) tried to create multiple posts with links to %{domains}, but those posts were blocked to avoid spam. The user is still able to create new posts that do not link to %{domains}. - - Please [review the user](%{base_url}%{user_url}). - - This can be modified via the `newuser_spam_host_threshold` and `white_listed_spam_host_domains` site settings. unblocked: subject_template: "Account unblocked" text_body_template: | @@ -1578,8 +1522,6 @@ sq: unsubscribe: title: "Unsubscribe" description: "Not interested in getting these emails? No problem! Click below to unsubscribe instantly:" - reply_by_email: "To respond, reply to this email or visit %{base_url}%{url} in your browser." - visit_link_to_respond: "To respond, visit %{base_url}%{url} in your browser." posted_by: "Posted by %{username} on %{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} invited you to a message '%{topic_title}'" @@ -1613,49 +1555,14 @@ sq: Please visit this link to view the message: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "A brief summary of %{site_link} since your last visit on %{last_seen_at}" subject_template: "[%{site_name}] Digest" diff --git a/config/locales/server.sv.yml b/config/locales/server.sv.yml index c9c0d693c..460620ab1 100644 --- a/config/locales/server.sv.yml +++ b/config/locales/server.sv.yml @@ -24,8 +24,6 @@ sv: loading: "Laddar" powered_by_html: 'Drivs av Discourse, visas bäst med JavaScript påslaget' log_in: "Logga in" - via: "%{username} via %{site_name}" - is_reserved: "är reserverat" purge_reason: "Automatiskt raderat i och med att kontot var övergivet och icke-aktiverat" disable_remote_images_download_reason: "Fjärrbilds nedladdning är inaktiverad eftersom det inte fanns tillräckligt mycket lagringsutrymme tillgängligt." anonymous: "Anonym" @@ -85,6 +83,7 @@ sv: not_found: "Den efterfrågade URL:en eller resursen kan inte hittas." invalid_access: "Du har inte behörighet att visa den efterfrågade resursen." read_only_mode_enabled: "Webbplatsen är i read only läge. Interaktioner är inaktiverade." + reading_time: "Lästid" too_many_replies: one: "Vi är ledsna men nya användare är tillfälligt begränsade till 1 svar i samma diskussion." other: "Vi är ledsna men nya användare är tillfälligt begränsade till &{count} svar i samma ämne." @@ -386,15 +385,10 @@ sv: description: 'Detta inläggs innehåll är inkluderar saker som som en förnuftig person skulle betrakta som stötande, kränkande eller överträdelse av våra community riktlinjerr.' long_form: 'flagga detta som olämpligt' notify_user: - title: 'Kontakta @{{username}} via privat meddelande' - description: 'Detta inlägg innehåller något som jag, direkt och privat, vill tala med denna person om. Detta ger ingen flagga.' email_title: 'Du postade i "%{title}"' email_body: "%{link}\n\n%{message}" notify_moderators: title: "Övrigt" - description: 'Detta inlägg kräver en moderators uppmärksamhet av ett annat skäl än de som nämns ovan.' - long_form: 'flaggade det här för granskning av moderator' - email_title: 'Ett inlägg i "%{title}" kräver uppmärksamhet från en moderator' email_body: "%{link}\n\n%{message}" bookmark: title: 'Bokmärk' @@ -419,7 +413,6 @@ sv: long_form: 'flaggad som olämplig' notify_moderators: title: "Annat" - description: 'Detta ämne kräver en moderators uppmärksamhet baserat på riktlinjerna, användarvillkoren, eller an annat skäl som inte nämns ovan.' long_form: 'flaggade det här för granskning av moderator' email_title: 'Ämnet "%{title}" kräver moderators uppmärksamhet' email_body: "%{link}\n\n%{message}" @@ -454,6 +447,7 @@ sv: xaxis: "Dag" yaxis: "Antalet nya användare" profile_views: + title: "Användarprofilvisningar" xaxis: "Dag" topics: title: "Ämnen" @@ -566,7 +560,9 @@ sv: xaxis: "Dag" yaxis: "Totalt" mobile_visits: + title: "Användarbesök" xaxis: "Dag" + yaxis: "Antal besök" dashboard: rails_env_warning: "Your server is running in %{env} mode." ruby_version_warning: "Du använder en version av Ruby 2.0.0 som är känd för att ha problem. Uppgradera till patch-nivå 247 eller senare." @@ -581,36 +577,6 @@ sv: title_nag: "Ange namnet på webbplatsen. Uppdatera titel i Inställningar." site_description_missing: "Ange en beskrivning om din webbplats i en mening, som dyker upp i sökresultat. Uppdatera site_description i Inställningar." consumer_email_warning: "Din sida är konfigurerad till att använda Gmail (eller någon annan konsumenttjänst) för att skicka email. Gmail limits how many emails you can send. Consider using an email service provider like mandrill.com to ensure email deliverability." - content_types: - education_new_reply: - title: "New User Education: First Replies" - description: "Pop up just-in-time guidance automatically displayed above the composer when new users begin typing their first two new replies." - education_new_topic: - title: "New User Education: First Topics" - description: "Pop up just-in-time guidance automatically displayed above the composer when new users begin typing their first two new topics." - usage_tips: - description: "Guidning och viktig information för nya användare." - welcome_user: - title: "Välkommen: Ny användare" - description: "Ett meddelande som skickas automatiskt till alla nya användare vid registrering." - welcome_invite: - title: "Välkommen: Inbjuden användare" - description: "Ett meddelande som skickas automatiskt till alla nya inbjudna användare när de accepterar inbjudan från en annan användare." - login_required_welcome_message: - title: "Inloggning krävs: Välkomstmeddelande" - description: "Välkomstmeddelande som visas för utloggade användare när inställningen för 'inloggning krävs' är aktiv. " - login_required: - title: "Inloggning krävs: Huvudsida" - description: "Texten som visas för obehöriga användare när inloggning krävs på webbplatsen." - head: - title: "HTML-sidhuvud" - description: "HTML som kommer infogas mellan taggarna och ." - top: - title: "Längst upp på sidorna" - description: "HTML som läggs till i toppen på varje sida (efter sidhuvudet, före navigeringen av ämnets titel)." - bottom: - title: "Botten av sidorna" - description: "HTML som läggs till före taggen ." site_settings: censored_words: "Ord som automatiskt ersätts med ■■■■" delete_old_hidden_posts: "Auto-radera alla dolda inlägg som varit dolda i mer än 30 dagar." @@ -983,8 +949,6 @@ sv: unsubscribe: title: "Unsubscribe" description: "Inte intresserad av att få dessa mejl? Inga problem! Klicka nedan för att avprenumerera." - reply_by_email: "För att svara, svara på detta mejl eller besök %{base_url}%{url} i din webbläsare." - visit_link_to_respond: "För att svara, besök %{base_url}%{url} i din webbläsare." posted_by: "Postat av %{username} den %{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} har bjudit in dig till en privat konversation '%{topic_title}'" @@ -992,40 +956,12 @@ sv: subject_template: "[%{site_name}] %{username} har bjudit in dig till ett ämne '%{topic_title}'" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: new_activity: "Ny aktivitet i dina ämnen och inlägg:" top_topics: "Populära inlägg" diff --git a/config/locales/server.te.yml b/config/locales/server.te.yml index e56c83489..a7198c203 100644 --- a/config/locales/server.te.yml +++ b/config/locales/server.te.yml @@ -16,8 +16,6 @@ te: loading: "లోడవుతోంది" powered_by_html: ' డిస్కౌర్స్ చేత శక్తివంతం చేయబడింది, జావాస్క్రిప్ట్ చేతనం చేస్తే బాగా కనిపిస్తుంది. ' log_in: "లాగిన్" - via: "%{site_name} నుండి %{username}" - is_reserved: "రక్షితము" purge_reason: "వదిలేసినదిగా స్వీయంగా కనుగొను, చేతనం చేయని ఖాతా" disable_remote_images_download_reason: "సుదూర బొమ్మల దిగుమతి అచేతనమైంది ఎందుకంటే డిస్క్ జాగా తక్కువగా ఉంది." errors: &errors @@ -313,14 +311,10 @@ te: description: 'ఈ టపాలో విషయం కొంతమందికి అభ్యంతరకరమైనది, అగౌరవపరిచేది లేదా మా కమ్యునిటీ మార్గదర్శకాలకు లోబడినది కాదు.' long_form: 'దీన్ని అసమంజసమైనదిగా కేతనించాము' notify_user: - description: 'ఈ టపా నేను సభ్యునితో వ్యక్తిగతంగా మాట్లాడాలనుకున్న విషయం కలిగి ఉంది. కేతనం అవ్వసరంలేదు.' email_title: '"%{title}" లో మీ టపా' email_body: "%{link}\n\n%{message}" notify_moderators: title: "వేరే ఏదో" - description: 'ఇక్కడ ప్రదర్శిచని వేరే కారణంగా ఈ టపా నిర్వాహకుని దృష్టికి తీసుకెళ్లాలి' - long_form: 'దీన్ని నిర్వాహకుని దృష్టికి కేతనించాము' - email_title: '"%{title}" లోని ఒక టపా నిర్వాహకుని చర్య కోసం వేచిఉంది. ' email_body: "%{link}\n\n%{message}" bookmark: title: 'పేజీక' @@ -345,7 +339,6 @@ te: long_form: 'దీన్ని అసమంజసమైనదిగా కేతనించారు' notify_moderators: title: "వేరే ఏదో" - description: 'మార్గదర్శకాల ఆధారంగా ఈ అంశానికి సాధారణ పరిశీలకుల శ్రధ్ధ అవసరం, TOS, లేదా పైన జాబితాలో పేర్కొనబడని మరొక కారణం కావచ్చు.' long_form: 'దీన్ని నిర్వాహకుల దృష్టికి తెచ్చారు' email_title: '"%{title}" విషయం నిర్వాహకుల దృష్టిలో ఉంది.' email_body: "%{link}\n\n%{message}" @@ -489,35 +482,6 @@ te: title_nag: "సైట్ పేరు నమోదు చేయండి.శీర్షికను సైట్ సెట్టింగ్స్‌ లో అప్‌డేట్ చేయండి" site_description_missing: "శోధన ఫలితాల్లో కనిపించడానికి మీ సైట్ యొక్క ఏకవాక్య వివరణ నమోదు చేయండి.సైట్ వివరణను సైట్ సెట్టింగ్స్‌ లో అప్‌డేట్ చేయండి." notification_email_warning: "ఈ-మెయిల్ ప్రకటనలు మీ డొమైన్ లో ఒక చెల్లుబాటు అయ్యే ఈ-మెయిల్ చిరునామా నుండి పంపలేదు :ఈ-మెయిల్ బట్వాడా అనిశ్చిత మరియు నమ్మలేనిదిగా ఉంటుంది.దయచేసి ప్రకటనను ఉంచండి_ఒక చెల్లుబాటు అయ్యే స్థానిక ఈమెయిల్ చిరునామాకు ఈ-మెయిల్ చేయండిసైట్ సెట్టింగ్స్ లో." - content_types: - education_new_reply: - title: "కొత్త వాడుకరి విద్య: మొదటి ప్రత్యుత్తరాలు" - description: "వినియోగదారులు వారి మొదటి రెండు కొత్త ప్రత్యుత్తరాలు టైప్ చేయడం ప్రారంభించిన సమయంలో పాప్‌అప్ మార్గదర్శకత్వం స్వయంచాలకంగా కంపోజర్ పైన కనిపిస్తుంది. " - education_new_topic: - title: "కొత్త వాడుకరి విద్య: మొదటి విషయాలు" - description: "వినియోగదారులు వారి మొదటి రెండు కొత్త విషయాలు టైప్ చేయడం ప్రారంభించిన సమయంలో పాప్‌అప్ మార్గదర్శకత్వం స్వయంచాలకంగా కంపోజర్ పైన కనిపిస్తుంది. " - usage_tips: - title: "కొత్త వాడుకరి మార్గదర్శకత్వం" - description: "కొత్త వాడుకరుల కోసం మార్గదర్శకత్వం మరియు అవసరమైన సమాచారం" - welcome_user: - title: "సుస్వాగతం: కొత్త సభ్యుడు" - welcome_invite: - title: "స్వాగతం : ఆహ్వానించబడిన వాడుకరి" - login_required_welcome_message: - title: "లాగిన్ అవసరం: స్వాగత సందేశం" - description: "'లాగిన్ అవసరం' సెట్టింగ్ ప్రారంభించబడి ఉన్నప్పుడు లాగ్ అవుట్ వినియోగదారులకు స్వాగతసందేశం ప్రదర్శించబడుతుంది." - login_required: - title: "లాగిన్ అవసరం: హోమ్‌పేజ్" - description: "లాగిన్ సైట్లో అవసరం ఉన్నప్పుడు టెక్స్ట్ అనధికార వినియోగదారులకు ప్రదర్శించబడుతుంది." - head: - title: "HTML హెడ్" - description: "ట్యాగ్‌ల లోపల HTML ప్రవేశపెట్టబడింది." - top: - title: "పుటల యొక్క పై భాగంలో" - description: "HTML ప్రతి పేజీ ఎగువన చేర్చబడుతుంది(హెడర్ తర్వాత , దిశా నిర్దేశనానికి ముందు లేదా శీర్షికలో)" - bottom: - title: "పుటల అడుగు భాగం" - description: "ట్యాగ్ చెయ్యక ముందే HTML ను కలుపుతారు." site_settings: censored_words: "వీటితో పదాలు స్వయంచాలకంగా భర్తీ చేయబడతాయి ■■■■" delete_old_hidden_posts: "30 రోజుల కంటే ఎక్కువ దాగివున్న టపాలు స్వయంసిధ్ధంగా తొలగింపబడతాయి." diff --git a/config/locales/server.tr_TR.yml b/config/locales/server.tr_TR.yml index 6d023e345..ade4f9f73 100644 --- a/config/locales/server.tr_TR.yml +++ b/config/locales/server.tr_TR.yml @@ -931,7 +931,6 @@ tr_TR: anonymous_account_duration_minutes: "Anonimliği koruyabilmek için, her kulanıcı için her N dakikada bir yeni bir anonim hesap oluştur. Örnek: 600'e ayarlanırsa, son gönderi üzerinden 600 dakika geçer geçmez VE kullanıcı anonim moddaysa, yeni bir anonim hesap oluşturulur." hide_user_profiles_from_public: "Anonim kullanıcılar için kullanıcı kartlarını, kullanıcı profillerini ve kullanıcı dizinini devre dışı bırak" allow_profile_backgrounds: "Kullanıcıların profillerine arkaplan eklemesine izin ver." - sequential_replies_threshold: "Kullanıcının ardarda çok fazla cevap gönderdiğine dair uyarı alması için, bir konuda üstüste yapması gereken gönderi sayısı. " enable_mobile_theme: "Mobil cihazlar mobil uyumlu temayı kullanır, dilerse masaüstü görünüme geçebilirler. Eğer özel, duyarlı bir stil kullanıyorsanız bunu devredışı bırakın." dominating_topic_minimum_percent: "Konuyu domine ettiğine dair uyarı almadan önce konudaki gönderilerin yüzde kaçının kullanıcıya ait olması gerekir." daily_performance_report: "NGINX kayıtlarını analiz edip detaylı bir şekilde günlük Yetkili kategorisinde bir konu içerisinde paylaş." @@ -1340,17 +1339,8 @@ tr_TR: Daha fazla bilgi için lütfen [topluluk yönergelerine](%{base_url}/guidelines) bakın. user_automatically_blocked: subject_template: "Topluluk bayrakları nedeniyle yeni kullanıcı %{username} engellendi" - text_body_template: | - Bu bir otomatik mesajdır. - - Yeni kullanıcı [%{username}](%{base_url}%{user_url}), gönderisi(leri) farklı kullanıcılar tarafından bayrakladığı için otomatik olarak engellendi. - - Lütfen [bayrakları inceleyin](%{base_url}/admin/flags). %{username} adlı kullancının haksız yere gönderi oluşturabilmesi engellendiyse, [bu kullanıcıya ait admin sayfasında](%{base_url}%{user_url}) engeli kaldır butonuna tıklayın. - - Bu tür engellemeleri tetikleyen eşik, site ayarları sayfasında `block_new_user` bölümünden değiştirilebilir. spam_post_blocked: subject_template: "Üst üste aynı bağlantıların paylaşılmasından ötürü %{username} adlı yeni kullanıcının gönderileri engelledi" - text_body_template: "Bu bir otomatik mesajdır.\n\n[%{username}](%{base_url}%{user_url}) adlı yeni kullanıcı %{domains} sitelerine bağlantı içeren birçok farklı gönderi oluşturmaya çalıştı, ancak bu gönderiler spam yaratmamaları için engellendi. Kullanıcı hala %{domains} sitelerine bağlantılı içermeyen yeni gönderiler oluşturabiliyor. \n\nLütfen [kullanıcıyı inceleyin](%{base_url}%{user_url}).\n\nBu tür engellemeleri tetikleyen `newuser_spam_host_threshold` ve `white_listed_spam_host_domains` değerleri site ayarları sayfasından değiştirilebilir.\n" unblocked: subject_template: "Hesabın engeli kaldırıldı" text_body_template: | @@ -1366,13 +1356,6 @@ tr_TR: download_remote_images_disabled: subject_template: "Uzaktaki resimlerin indirilmesi devre dışı bırakıldı" text_body_template: "`download_remote_images_to_local` ayarı harddisk alanı limiti `download_remote_images_threshold` aşıldığı için devre dışı bırakıldı." - unsubscribe_link: |+ - Bu konu hakkında bildirim almak istemiyorsanız, [buraya tıklayın](%{unsubscribe_url}). - - - Bu e-postaları almak istemiyorsanız [kullanıcı tercihlerinizden](%{user_preferences_url}) değiştirin. - - subject_re: "Cvp:" subject_pm: "[ÖM]" user_notifications: @@ -1380,8 +1363,6 @@ tr_TR: unsubscribe: title: "Aboneliği İptal Et" description: "Bu e-postalarla ilgilenmiyor musunuz? Sorun değil! Aşağıya tıklayarak aboneliğinizi hemen iptal edebilirsiniz:" - reply_by_email: "Karşılık vermek için, bu e-postayı cevaplayın ya da [visit the topic](%{base_url}%{url}) sayfasını internet tarayıcınızda ziyaret edin." - visit_link_to_respond: "Karşılık vermek için, [visit the topic](%{base_url}%{url}) adresini tarayıcınızda ziyaret edin." posted_by: "%{post_date} tarihinde %{username} tarafından gönderildi" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} sizi bir mesaja davet etti '%{topic_title}'" @@ -1415,69 +1396,16 @@ tr_TR: Mesajı görüntülemek için lütfen bu bağlantıyı ziyaret edin: %{base_url}%{url} user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - - %{context} - - - --- - - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - - %{context} - - --- - - %{respond_instructions} user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - - %{context} - - - --- - - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [ÖM] %{topic_title}" - text_body_template: | - %{message} - - - %{context} - - - --- - - %{respond_instructions} digest: why: "%{last_seen_at} tarihindeki son girişinizden beri %{site_link} sitesine olanların kısa bir özeti" subject_template: "[%{site_name}] Özet" diff --git a/config/locales/server.uk.yml b/config/locales/server.uk.yml index 93e45e59e..c8a331265 100644 --- a/config/locales/server.uk.yml +++ b/config/locales/server.uk.yml @@ -15,8 +15,6 @@ uk: posts: "дописи" loading: "Завантаження" powered_by_html: 'Створено за допомогою технології Discourse, бажано переглядати з увімкненим JavaScript' - via: "%{username} через %{site_name}" - is_reserved: "is reserved" 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." @@ -140,7 +138,6 @@ uk: notify_user: email_body: "%{link}\n\n%{message}" notify_moderators: - email_title: 'Допис у темі "%{title}" потребує уваги модератора' email_body: "%{link}\n\n%{message}" bookmark: title: 'Лишити закладку' @@ -261,31 +258,6 @@ uk: s3_config_warning: 'The server is configured to upload files to s3, but at least one the following setting is not set: s3_access_key_id, s3_secret_access_key or s3_upload_bucket. Go to the Site Settings and update the settings. See "How to set up image uploads to S3?" to learn more.' image_magick_warning: 'The server is configured to create thumbnails of large images, but ImageMagick is not installed. Install ImageMagick using your favorite package manager or download the latest release.' consumer_email_warning: "Your site is configured to use Gmail (or another consumer email service) to send email. Gmail limits how many emails you can send. Consider using an email service provider like mandrill.com to ensure email deliverability." - content_types: - education_new_reply: - title: "Навчання новачка: Перші відповіді" - description: "Спливні настанови, що одразу автоматично відображаються над редактором, коли новий користувач починає вводити свої перші дві нові відповіді." - education_new_topic: - title: "Навчання новачка: Перші теми" - description: "Спливні настанови, що одразу автоматично відображаються над редактором, коли новий користувач починає вводити свої перші дві нові теми." - welcome_user: - title: "Вітання: Новий користувач" - welcome_invite: - title: "Вітання: Запрошений користувач" - login_required_welcome_message: - title: "Потрібно увійти: Вітальне повідомлення" - description: "Вітальне повідомлення, що відображається для користувачів, що вийшли, коли налаштування 'потрібен вхід' увімкнено." - login_required: - title: "Потрібно увійти: Головна сторінка" - description: "Текст, що відображається для неавторизованих користувачів, коли потрібен вхід на сайт." - head: - title: "HTML head" - description: "HTML-код, що буде вставлятися всередину теґів ." - top: - title: "Верхній колонтитул сторінок" - description: "HTML-код, що буде додаватися на початку кожної сторінки (після заголовка, перед навігацією або назвою теми)." - bottom: - title: "Нижній колонтитул сторінок" site_settings: default_locale: "Мова за замовчуванням для цього екземпляра Discourse (Код ISO 639-1)" allow_user_locale: "Allow users to choose their own language interface preference" @@ -449,54 +421,17 @@ uk: unsubscribe: title: "Відпісатися" description: "Не зацікавлені в отриманні цих листів? Немає проблем! Натисніть нижче, щоб відписатися назавжди:" - reply_by_email: "Щоб відповісти, надішліть відповідь на цей лист або відвідайте %{base_url}%{url} у своєму веб-оглядачі." - visit_link_to_respond: "Щоб відповісти, відвідайте %{base_url}%{url} у своєму веб-оглядачі." posted_by: "Опубліковано %{username} %{post_date}" user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [ПП] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: new_activity: "Нова активність у ваших темах та дописах:" top_topics: "Популярні дописи" diff --git a/config/locales/server.zh_CN.yml b/config/locales/server.zh_CN.yml index bf7b1c7c4..2bb1aedd1 100644 --- a/config/locales/server.zh_CN.yml +++ b/config/locales/server.zh_CN.yml @@ -953,7 +953,6 @@ zh_CN: anonymous_account_duration_minutes: "为了匿名性,为每个用户每 N 分钟创建一个匿名账户。例如:如果设置为 600,只要发帖后 600 分钟到了,并且用户切换至了匿名模式,就会创建一个新的匿名账户。" hide_user_profiles_from_public: "对来访用户关闭关闭用户信息卡,用户资料和用户目录。" allow_profile_backgrounds: "允许用户上传个人资料背景图片。" - sequential_replies_threshold: "用户可以在一个主题内多次回复而不被提醒连续发送多个回复的通知。" enable_mobile_theme: "为移动设备启用移动友好的主题,但也能切换回完整站点。如果你想要使用自定义的响应式主题请禁用它。" dominating_topic_minimum_percent: "用户在主题中的帖子占到多少百分比时使得用户主导话题。" daily_performance_report: "每日分析 NGINX 日志并且发布详情主题到职员才能看到的主题" @@ -1547,24 +1546,8 @@ zh_CN: 欲查看额外的指导,请查看我们的[社群指引](%{base_url}/guidelines)。 user_automatically_blocked: subject_template: "因标记而被封禁的新用户 %{username}" - text_body_template: | - 这是一封自动发出的邮件。 - - 新用户 [%{username}](%{base_url}%{user_url}) 已因多位用户标记 %{username} 的帖子而被自动封禁。 - - 请[审核这些标记](%{base_url}/admin/flags)。如果 %{username} 被不正确地封禁了编辑功能,点击[该用户的管理页面](%{base_url}%{user_url})上的解封按钮。 - - 该阈值可以通过站点设置中的 `block_new_user` 更改。 spam_post_blocked: subject_template: "新用户 %{username} 因重复发布链接而被禁止发表相关帖子" - text_body_template: | - 这是一封自动发出的邮件。 - - 新用户 [%{username}](%{base_url}%{user_url}) 已因创建多个链接至 %{domains} 的帖子而被封禁以防止垃圾信息。但是用户仍能够发表不包含到 %{domains} 的帖子。 - - 请[审核这些用户](%{base_url}%{user_url})。 - - 该阈值可以通过站点设置中的 `newuser_spam_host_threshold` 和 `white_listed_spam_host_domains` 更改。 unblocked: subject_template: "账户解封 unblocked" text_body_template: | @@ -1590,7 +1573,6 @@ zh_CN: unsubscribe: title: "取消订阅" description: "不再对这些邮件感兴趣?没问题!点击下面按钮来立即取消订阅:" - visit_link_to_respond: "在浏览器中访问[visit the topic](%{base_url}%{url}),以回复。" posted_by: "%{username}发表于%{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} 邀请你加入消息交流:'%{topic_title}'" @@ -1624,58 +1606,16 @@ zh_CN: 请访问 %{base_url}%{url} 来查看该主题。 user_replied: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_group_mentioned: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "在你上一次于 %{last_seen_at} 访问后,%{site_link}的简洁摘要。" subject_template: "[%{site_name}] 摘要" diff --git a/config/locales/server.zh_TW.yml b/config/locales/server.zh_TW.yml index 5b7e7cc7a..93a50b5e7 100644 --- a/config/locales/server.zh_TW.yml +++ b/config/locales/server.zh_TW.yml @@ -746,7 +746,6 @@ zh_TW: public_user_custom_fields: "用戶可設定公開顯示的自定欄位白名單。" staff_user_custom_fields: "用戶可設定只給管理員顯示的自定欄位白名單。" allow_profile_backgrounds: "允許使用者上傳個人檔案背景圖片" - sequential_replies_threshold: "用戶可以在一個主題內多次回覆而不被提醒連續發送多個回覆的通知。" suppress_uncategorized_badge: "不在\"無分類\"的話題列表內顯示徽章。" invites_per_page: "默認在用戶頁顯示的邀請。" autohighlight_all_code: "即使未顯示特定語言,仍為所有預編排程式套用程式碼顏色提示" @@ -894,24 +893,8 @@ zh_TW: subject_template: "帳號已被封鎖" user_automatically_blocked: subject_template: "新用戶 %{username} 由於社群的投訴已被封鎖" - text_body_template: | - 這是一則自動產生的訊息。 - - 由於文章受到多位用戶的投訴,新用戶 [%{username}](%{base_url}%{user_url}) 已被自動封鎖。 - - 請[審查那些投訴](%{base_url}/admin/flags)。如果 %{username} 是被錯誤地封鎖,請在[該用戶的管理頁面](%{base_url}%{user_url})中點擊解鎖按鈕。 - - 此門檻可在 `block_new_user` 網站設定中更改。 spam_post_blocked: subject_template: "新用戶 %{username} 由於重複貼連結,文章已被封鎖" - text_body_template: | - 這是一則自動產生的訊息。 - - 新用戶 [%{username}](%{base_url}%{user_url}) 曾嘗試發表多篇內含連結至 %{domains} 的文章。為避免垃圾內容,那些文章已被封鎖。該用戶仍然可以發表不含連結至 %{domains} 的新文章。 - - 請[審查該用戶](%{base_url}%{user_url})。 - - 相關設定可在 `newuser_spam_host_threshold` 和 `white_listed_spam_host_domains` 網站設定中更改。 unblocked: subject_template: "帳號解除封鎖" pending_users_reminder: @@ -931,53 +914,14 @@ zh_TW: subject_template: "[%{site_name}] %{username} 邀請你參與討論 '%{topic_title}'" user_replied: subject_template: "[%{site_name}] %{username} 在 '%{topic_title}' 討論話題回覆了你的文章" - text_body_template: | - %{username} 在 %{site_name} 的 '%{topic_title}' 討論話題中回覆了你的文章: - - --- - %{message} - - --- - 請瀏覽 %{base_url}%{url} 來回覆。 user_quoted: subject_template: "[%{site_name}] %{username} 在 '%{topic_title}' 討論話題引用了你的內容" - text_body_template: | - %{username} 在 %{site_name} 的 '%{topic_title}' 討論話題中引用了你的內容: - - --- - %{message} - - --- - 請瀏覽 %{base_url}%{url} 來回覆。 user_mentioned: subject_template: "[%{site_name}] %{username} 在 '%{topic_title}' 討論話題提及了你" - text_body_template: | - %{username} 在 %{site_name} 的 '%{topic_title}' 討論話題中提及到了你: - - --- - %{message} - - --- - 請瀏覽 %{base_url}%{url} 來回覆。 user_posted: subject_template: "[%{site_name}] %{subject_prefix}%{username} 在 '%{topic_title}' 討論話題發表了文章" - text_body_template: | - %{username} 在 %{site_name} 的 '%{topic_title}' 討論話題中發表了文章: - - --- - %{message} - - --- - 請瀏覽 %{base_url}%{url} 來回覆。 user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" - text_body_template: | - %{message} - - %{context} - - --- - %{respond_instructions} digest: why: "在你上一次於 %{last_seen_at} 訪問後,在 %{site_link} 上的摘要。" new_activity: "在你的討論話題和文章裡的動態:" diff --git a/plugins/poll/config/locales/server.ro.yml b/plugins/poll/config/locales/server.ro.yml index 31d1c4401..e0ca3634c 100644 --- a/plugins/poll/config/locales/server.ro.yml +++ b/plugins/poll/config/locales/server.ro.yml @@ -5,4 +5,37 @@ # To work with us on translations, join this project: # https://www.transifex.com/projects/p/discourse-org/ -ro: {} +ro: + site_settings: + poll_enabled: "Permiți utilizatorilor să creeze sondaje?" + poll_maximum_options: "Numărul maxim admis de opțiuni într-un sondaj" + poll: + multiple_polls_without_name: "Există mai multe sondaje fără nume. Folosește atributul 'name' pentru a identifica sondajele proprii" + multiple_polls_with_same_name: "Există mai multe sondaje cu același nume: %{name}. Folosește atributul 'name' pentru a identifica sondajele proprii." + default_poll_must_have_at_least_2_options: "Sondajul trebuie să aibă cel puțin 2 opțiuni." + named_poll_must_have_at_least_2_options: "Sondajul numit %{name} trebuie să aibă cel puțin 2 opțiuni." + default_poll_must_have_less_options: + one: "Sondajul trebuie să aibă mai puțin de 1 opțiune." + few: "Sondajul trebuie să conțină cel mult %{count} opțiuni." + other: "Sondajul trebuie să aibă mai puțin de %{count} opțiuni." + named_poll_must_have_less_options: + one: "Sondajul numit %{name} trebuie să aibă cel mult 1 opțiune." + few: "Sondajul numit %{name} trebuie să aibă mai puțin de %{count} opțiuni." + other: "Sondajul numit %{name} trebuie să aibă cel mult %{count} opțiuni." + default_poll_must_have_different_options: "Sondajul trebuie să aibă opțiuni diferite." + named_poll_must_have_different_options: "Sondajul numit %{name} trebuie să aibă opțiuni diferite." + default_poll_with_multiple_choices_has_invalid_parameters: "Sondajul cu opțiuni multiple are parametri invalizi." + named_poll_with_multiple_choices_has_invalid_parameters: "Sondajul numit %{name} cu opțiuni multiple are parametri invalizi." + requires_at_least_1_valid_option: "Trebuie să selectezi cel puțin 1 valoare validă." + cannot_change_polls_after_5_minutes: "Nu poți adăuga, elimina sau redenumi sondaje după primele 5 minute." + op_cannot_edit_options_after_5_minutes: "Nu poți adăuga sau elimina opțiuni ale unui sondaj după primele 5 minute. Te rugăm contactează un moderator pentru a edita o opțiune din sondaj." + staff_cannot_add_or_remove_options_after_5_minutes: "Nu poți adăuga sau elimina opțiuni ale unui sondaj după primele 5 minute. Ar trebui să închizi discuția și să creezi alta în loc." + no_polls_associated_with_this_post: "Nu există sondaje asociate acestei postări." + no_poll_with_this_name: "Nu există nici un sondaj cu numele %{name} asociat acestei postări." + post_is_deleted: "Postările șterse nu se pot modifica." + topic_must_be_open_to_vote: "Discuția trebuie să fie activă pentru a se putea vota." + poll_must_be_open_to_vote: "Sondajul trebuie să fie deschis pentru a se putea vota." + topic_must_be_open_to_toggle_status: "Discuția trebuie să fie activă pentru a se schimba statutul." + only_staff_or_op_can_toggle_status: "Doar un administrator sau autorul postării inițiale pot schimba statusul unui sondaj." + email: + link_to_poll: "Click pentru afișarea sondajului." From c1dbf5c1c421f6e485c0552df0d280739e061270 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Mon, 28 Dec 2015 14:28:16 +0800 Subject: [PATCH 010/185] FEATURE: Autolinking to category using hashtags. --- .../components/category-group.js.es6 | 7 +-- .../components/composer-editor.js.es6 | 19 +++++-- .../discourse/components/d-editor.js.es6 | 51 ++++++++++++++++-- .../dialects/category_hashtag_dialect.js | 23 ++++++++ .../discourse/lib/autocomplete.js.es6 | 12 ++++- .../lib/link-category-hashtags.js.es6 | 53 +++++++++++++++++++ .../javascripts/discourse/lib/markdown.js | 2 + .../javascripts/discourse/lib/utilities.js | 13 +++++ .../discourse/routes/app-route-map.js.es6 | 1 + .../routes/discovery-category-with-id.js.es6 | 11 ++++ .../category_hashtags_controller.rb | 14 +++++ app/controllers/list_controller.rb | 10 +++- app/models/category.rb | 4 ++ config/routes.rb | 3 +- lib/pretty_text.rb | 10 ++++ .../category_hashtags_controller_spec.rb | 46 ++++++++++++++++ spec/controllers/list_controller_spec.rb | 20 +++++++ spec/models/category_spec.rb | 16 ++++++ test/javascripts/lib/markdown-test.js.es6 | 40 ++++++++++++++ test/javascripts/lib/utilities-test.js.es6 | 24 +++++++++ 20 files changed, 365 insertions(+), 14 deletions(-) create mode 100644 app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js create mode 100644 app/assets/javascripts/discourse/lib/link-category-hashtags.js.es6 create mode 100644 app/assets/javascripts/discourse/routes/discovery-category-with-id.js.es6 create mode 100644 app/controllers/category_hashtags_controller.rb create mode 100644 spec/controllers/category_hashtags_controller_spec.rb diff --git a/app/assets/javascripts/discourse/components/category-group.js.es6 b/app/assets/javascripts/discourse/components/category-group.js.es6 index 887e4ad7b..4daca78a6 100644 --- a/app/assets/javascripts/discourse/components/category-group.js.es6 +++ b/app/assets/javascripts/discourse/components/category-group.js.es6 @@ -1,18 +1,19 @@ import { categoryBadgeHTML } from 'discourse/helpers/category-link'; +import Category from 'discourse/models/category'; export default Ember.Component.extend({ _initializeAutocomplete: function() { const self = this, template = this.container.lookup('template:category-group-autocomplete.raw'), - regexp = new RegExp("href=['\"]" + Discourse.getURL('/c/') + "([^'\"]+)"); + regexp = new RegExp(`href=['\"]${Discourse.getURL('/c/')}([^'\"]+)`); this.$('input').autocomplete({ items: this.get('categories'), single: false, allowAny: false, dataSource(term){ - return Discourse.Category.list().filter(function(category){ + return Category.list().filter(function(category){ const regex = new RegExp(term, "i"); return category.get("name").match(regex) && !_.contains(self.get('blacklist') || [], category) && @@ -22,7 +23,7 @@ export default Ember.Component.extend({ onChangeItems(items) { const categories = _.map(items, function(link) { const slug = link.match(regexp)[1]; - return Discourse.Category.findSingleBySlug(slug); + return Category.findSingleBySlug(slug); }); Em.run.next(() => self.set("categories", categories)); }, diff --git a/app/assets/javascripts/discourse/components/composer-editor.js.es6 b/app/assets/javascripts/discourse/components/composer-editor.js.es6 index 51a7a8fe1..9dbd7f25d 100644 --- a/app/assets/javascripts/discourse/components/composer-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-editor.js.es6 @@ -1,6 +1,7 @@ import userSearch from 'discourse/lib/user-search'; import { default as computed, on } from 'ember-addons/ember-computed-decorators'; import { linkSeenMentions, fetchUnseenMentions } from 'discourse/lib/link-mentions'; +import { linkSeenCategoryHashtags, fetchUnseenCategoryHashtags } from 'discourse/lib/link-category-hashtags'; export default Ember.Component.extend({ classNames: ['wmd-controls'], @@ -111,13 +112,19 @@ export default Ember.Component.extend({ $preview.scrollTop(desired + 50); }, - _renderUnseen: function($preview, unseen) { - fetchUnseenMentions($preview, unseen, this.siteSettings).then(() => { + _renderUnseenMentions: function($preview, unseen) { + fetchUnseenMentions($preview, unseen).then(() => { linkSeenMentions($preview, this.siteSettings); this._warnMentionedGroups($preview); }); }, + _renderUnseenCategoryHashtags: function($preview, unseen) { + fetchUnseenCategoryHashtags(unseen).then(() => { + linkSeenCategoryHashtags($preview); + }); + }, + _warnMentionedGroups($preview) { Ember.run.scheduleOnce('afterRender', () => { this._warnedMentions = this._warnedMentions || []; @@ -386,11 +393,17 @@ export default Ember.Component.extend({ // Paint mentions const unseen = linkSeenMentions($preview, this.siteSettings); if (unseen.length) { - Ember.run.debounce(this, this._renderUnseen, $preview, unseen, 500); + Ember.run.debounce(this, this._renderUnseenMentions, $preview, unseen, 500); } this._warnMentionedGroups($preview); + // Paint category hashtags + const unseenHashtags = linkSeenCategoryHashtags($preview); + if (unseenHashtags.length) { + Ember.run.debounce(this, this._renderUnseenCategoryHashtags, $preview, unseenHashtags, 500); + } + const post = this.get('composer.post'); let refresh = false; diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index ceaad81bb..a67b4b8cc 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -2,6 +2,7 @@ import loadScript from 'discourse/lib/load-script'; import { default as computed, on, observes } from 'ember-addons/ember-computed-decorators'; import { showSelector } from "discourse/lib/emoji/emoji-toolbar"; +import Category from 'discourse/models/category'; // Our head can be a static string or a function that returns a string // based on input (like for numbered lists). @@ -175,7 +176,11 @@ export default Ember.Component.extend({ @on('didInsertElement') _startUp() { - this._applyEmojiAutocomplete(); + const container = this.get('container'), + $editorInput = this.$('.d-editor-input'); + + this._applyEmojiAutocomplete(container, $editorInput); + this._applyCategoryHashtagAutocomplete(container, $editorInput); loadScript('defer/html-sanitizer-bundle').then(() => this.set('ready', true)); @@ -243,14 +248,52 @@ export default Ember.Component.extend({ Ember.run.debounce(this, this._updatePreview, 30); }, - _applyEmojiAutocomplete() { + _applyCategoryHashtagAutocomplete(container, $editorInput) { + const template = container.lookup('template:category-group-autocomplete.raw'); + + $editorInput.autocomplete({ + template: template, + key: '#', + transformComplete(category) { + return category.get('slug'); + }, + dataSource(term) { + return Category.list().filter(category => { + const regexp = new RegExp(term, 'i'); + return category.get('name').match(regexp); + }); + }, + triggerRule(textarea, opts) { + const result = Discourse.Utilities.caretRowCol(textarea); + const row = result.rowNum; + var col = result.colNum; + var line = textarea.value.split("\n")[row - 1]; + + if (opts && opts.backSpace) { + col = col - 1; + line = line.slice(0, line.length - 1); + + // Don't trigger autocomplete when backspacing into a `#category |` => `#category|` + if (/^#{1}\w+/.test(line)) return false; + } + + if (col < 6) { + // Don't trigger autocomplete when ATX-style headers are used + return (line.slice(0, col) !== "#".repeat(col)); + } else { + return true; + } + } + }); + }, + + _applyEmojiAutocomplete(container, $editorInput) { if (!this.siteSettings.enable_emoji) { return; } - const container = this.container; const template = container.lookup('template:emoji-selector-autocomplete.raw'); const self = this; - this.$('.d-editor-input').autocomplete({ + $editorInput.autocomplete({ template: template, key: ":", diff --git a/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js b/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js new file mode 100644 index 000000000..e428b7ed5 --- /dev/null +++ b/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js @@ -0,0 +1,23 @@ +/** + Supports Discourse's category hashtags (#category-slug) for automatically + generating a link to the category. +**/ +Discourse.Dialect.inlineRegexp({ + start: '#', + matcher: /^#([A-Za-z0-9][A-Za-z0-9\-]{0,40}[A-Za-z0-9])/, + spaceOrTagBoundary: true, + + emitter: function(matches) { + var slug = matches[1], + hashtag = matches[0], + attributeClass = 'hashtag', + categoryHashtagLookup = this.dialect.options.categoryHashtagLookup, + result = categoryHashtagLookup && categoryHashtagLookup(slug); + + if (result && result[0] === "category") { + return ['a', { class: attributeClass, href: result[1] }, hashtag]; + } else { + return ['span', { class: attributeClass }, hashtag]; + } + } +}); diff --git a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 index 78690f624..f1b24853a 100644 --- a/app/assets/javascripts/discourse/lib/autocomplete.js.es6 +++ b/app/assets/javascripts/discourse/lib/autocomplete.js.es6 @@ -282,6 +282,14 @@ export default function(options) { }, 50); }); + const checkTriggerRule = (opts) => { + if (options.triggerRule) { + return options.triggerRule(me[0], opts); + } else { + return true; + } + }; + $(this).on('keypress.autocomplete', function(e) { var caretPosition, term; @@ -289,7 +297,7 @@ export default function(options) { if (options.key && e.which === options.key.charCodeAt(0)) { caretPosition = Discourse.Utilities.caretPosition(me[0]); var prevChar = me.val().charAt(caretPosition - 1); - if (!prevChar || allowedLettersRegex.test(prevChar)) { + if (checkTriggerRule() && (!prevChar || allowedLettersRegex.test(prevChar))) { completeStart = completeEnd = caretPosition; updateAutoComplete(options.dataSource("")); } @@ -343,7 +351,7 @@ export default function(options) { stopFound = prev === options.key; if (stopFound) { prev = me[0].value[c - 1]; - if (!prev || allowedLettersRegex.test(prev)) { + if (checkTriggerRule({ backSpace: true }) && (!prev || allowedLettersRegex.test(prev))) { completeStart = c; caretPosition = completeEnd = initial; term = me[0].value.substring(c + 1, initial); diff --git a/app/assets/javascripts/discourse/lib/link-category-hashtags.js.es6 b/app/assets/javascripts/discourse/lib/link-category-hashtags.js.es6 new file mode 100644 index 000000000..446e1aa53 --- /dev/null +++ b/app/assets/javascripts/discourse/lib/link-category-hashtags.js.es6 @@ -0,0 +1,53 @@ +const validCategoryHashtags = {}; +const checkedCategoryHashtags = []; +const testedKey = 'tested'; +const testedClass = `hashtag-${testedKey}`; + +function replaceSpan($elem, categorySlug, categoryLink) { + $elem.replaceWith(`#${categorySlug}`); +} + +function updateFound($hashtags, categorySlugs) { + Ember.run.schedule('afterRender', () => { + $hashtags.each((index, hashtag) => { + const categorySlug = categorySlugs[index]; + const link = validCategoryHashtags[categorySlug]; + const $hashtag = $(hashtag); + + if (link) { + replaceSpan($hashtag, categorySlug, link); + } else if (checkedCategoryHashtags.indexOf(categorySlug) !== -1) { + $hashtag.addClass(testedClass); + } + }); + }); +}; + +export function linkSeenCategoryHashtags($elem) { + const $hashtags = $(`span.hashtag:not(.${testedClass})`, $elem); + const unseen = []; + + if ($hashtags.length) { + const categorySlugs = $hashtags.map((_, hashtag) => $(hashtag).text().substr(1)); + if (categorySlugs.length) { + _.uniq(categorySlugs).forEach((categorySlug) => { + if (checkedCategoryHashtags.indexOf(categorySlug) === -1) { + unseen.push(categorySlug); + } + }); + } + updateFound($hashtags, categorySlugs); + } + + return unseen; +}; + +export function fetchUnseenCategoryHashtags(categorySlugs) { + return Discourse.ajax("/category_hashtags/check", { data: { category_slugs: categorySlugs } }) + .then((response) => { + response.valid.forEach((category) => { + validCategoryHashtags[category.slug] = category.url; + }); + checkedCategoryHashtags.push.apply(checkedCategoryHashtags, categorySlugs); + }); +} diff --git a/app/assets/javascripts/discourse/lib/markdown.js b/app/assets/javascripts/discourse/lib/markdown.js index 4b9e3ce1e..29616a7e2 100644 --- a/app/assets/javascripts/discourse/lib/markdown.js +++ b/app/assets/javascripts/discourse/lib/markdown.js @@ -239,6 +239,7 @@ Discourse.Markdown.whiteListTag('a', 'class', 'attachment'); Discourse.Markdown.whiteListTag('a', 'class', 'onebox'); Discourse.Markdown.whiteListTag('a', 'class', 'mention'); Discourse.Markdown.whiteListTag('a', 'class', 'mention-group'); +Discourse.Markdown.whiteListTag('a', 'class', 'hashtag'); Discourse.Markdown.whiteListTag('a', 'target', '_blank'); Discourse.Markdown.whiteListTag('a', 'rel', 'nofollow'); @@ -251,6 +252,7 @@ Discourse.Markdown.whiteListTag('div', 'class', 'title'); Discourse.Markdown.whiteListTag('div', 'class', 'quote-controls'); Discourse.Markdown.whiteListTag('span', 'class', 'mention'); +Discourse.Markdown.whiteListTag('span', 'class', 'hashtag'); Discourse.Markdown.whiteListTag('aside', 'class', 'quote'); Discourse.Markdown.whiteListTag('aside', 'data-*'); diff --git a/app/assets/javascripts/discourse/lib/utilities.js b/app/assets/javascripts/discourse/lib/utilities.js index 72cd08816..d3da0bcb0 100644 --- a/app/assets/javascripts/discourse/lib/utilities.js +++ b/app/assets/javascripts/discourse/lib/utilities.js @@ -143,6 +143,19 @@ Discourse.Utilities = { return String(text).trim(); }, + // Determine the row and col of the caret in an element + caretRowCol: function(el) { + var caretPosition = Discourse.Utilities.caretPosition(el); + var rows = el.value.slice(0, caretPosition).split("\n"); + var rowNum = rows.length; + + var colNum = caretPosition - rows.splice(0, rowNum - 1).reduce(function(sum, row) { + return sum + row.length + 1; + }, 0); + + return { rowNum: rowNum, colNum: colNum}; + }, + // Determine the position of the caret in an element caretPosition: function(el) { var r, rc, re; diff --git a/app/assets/javascripts/discourse/routes/app-route-map.js.es6 b/app/assets/javascripts/discourse/routes/app-route-map.js.es6 index 6aa420a88..f24ee0ef3 100644 --- a/app/assets/javascripts/discourse/routes/app-route-map.js.es6 +++ b/app/assets/javascripts/discourse/routes/app-route-map.js.es6 @@ -42,6 +42,7 @@ export default function() { this.route('parentCategory', { path: '/c/:slug' }); this.route('categoryNone', { path: '/c/:slug/none' }); this.route('category', { path: '/c/:parentSlug/:slug' }); + this.route('categoryWithID', { path: '/c/:parentSlug/:slug/:id' }); // homepage this.route(Discourse.Utilities.defaultHomepage(), { path: '/' }); diff --git a/app/assets/javascripts/discourse/routes/discovery-category-with-id.js.es6 b/app/assets/javascripts/discourse/routes/discovery-category-with-id.js.es6 new file mode 100644 index 000000000..c36b4bae7 --- /dev/null +++ b/app/assets/javascripts/discourse/routes/discovery-category-with-id.js.es6 @@ -0,0 +1,11 @@ +import Category from 'discourse/models/category'; + +export default Discourse.Route.extend({ + model: function(params) { + return Category.findById(params.id); + }, + + redirect: function(model) { + this.transitionTo(`/c/${Category.slugFor(model)}`); + } +}); diff --git a/app/controllers/category_hashtags_controller.rb b/app/controllers/category_hashtags_controller.rb new file mode 100644 index 000000000..6e78a92ec --- /dev/null +++ b/app/controllers/category_hashtags_controller.rb @@ -0,0 +1,14 @@ +class CategoryHashtagsController < ApplicationController + before_filter :ensure_logged_in + + def check + category_slugs = params[:category_slugs] + category_slugs.each(&:downcase!) + + valid_categories = Category.secured(guardian).where(slug: category_slugs).map do |category| + { slug: category.slug, url: category.url_with_id } + end.compact + + render json: { valid: valid_categories } + end +end diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb index 07fec8d6a..cd59e3098 100644 --- a/app/controllers/list_controller.rb +++ b/app/controllers/list_controller.rb @@ -224,14 +224,22 @@ class ListController < ApplicationController def set_category slug_or_id = params.fetch(:category) parent_slug_or_id = params[:parent_category] + id = params[:id].to_i parent_category_id = nil if parent_slug_or_id.present? parent_category_id = Category.query_parent_category(parent_slug_or_id) - redirect_or_not_found and return if parent_category_id.blank? + redirect_or_not_found and return if parent_category_id.blank? && !id end @category = Category.query_category(slug_or_id, parent_category_id) + + # Redirect if we have `/c/:parent_category/:category/:id` + if id + category = Category.find_by_id(id) + (redirect_to category.url, status: 301) && return if category + end + redirect_or_not_found and return if !@category @description_meta = @category.description_text diff --git a/app/models/category.rb b/app/models/category.rb index bd5e85914..80b2a1a5c 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -416,6 +416,10 @@ SQL url end + def url_with_id + self.parent_category ? "#{url}/#{self.id}" : "#{Discourse.base_uri}/c/#{self.id}-#{self.slug}" + end + # If the name changes, try and update the category definition topic too if it's # an exact match def rename_category_definition diff --git a/config/routes.rb b/config/routes.rb index 638396dd3..2859b5bff 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -425,11 +425,12 @@ Discourse::Application.routes.draw do get "c/:parent_category/:category.rss" => "list#category_feed", format: :rss get "c/:category" => "list#category_latest" get "c/:category/none" => "list#category_none_latest" - get "c/:parent_category/:category" => "list#parent_category_category_latest" + get "c/:parent_category/:category/(:id)" => "list#parent_category_category_latest", constraints: { id: /\d+/ } get "c/:category/l/top" => "list#category_top", as: "category_top" get "c/:category/none/l/top" => "list#category_none_top", as: "category_none_top" get "c/:parent_category/:category/l/top" => "list#parent_category_category_top", as: "parent_category_category_top" + get "category_hashtags/check" => "category_hashtags#check" TopTopic.periods.each do |period| get "top/#{period}" => "list#top_#{period}" diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index aefd4bed0..126f3358c 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -48,6 +48,15 @@ module PrettyText end end + def category_hashtag_lookup(category_slug) + if category_slug + category = Category.find_by_slug(category_slug) + return ['category', category.url_with_id] if category + else + nil + end + end + def get_topic_info(topic_id) return unless Fixnum === topic_id # TODO this only handles public topics, secured one do not get this @@ -207,6 +216,7 @@ module PrettyText context.eval("Discourse.Emoji.applyCustomEmojis();") context.eval('opts["mentionLookup"] = function(u){return helpers.mention_lookup(u);}') + context.eval('opts["categoryHashtagLookup"] = function(c){return helpers.category_hashtag_lookup(c);}') context.eval('opts["lookupAvatar"] = function(p){return Discourse.Utilities.avatarImg({size: "tiny", avatarTemplate: helpers.avatar_template(p)});}') context.eval('opts["getTopicInfo"] = function(i){return helpers.get_topic_info(i)};') baked = context.eval('Discourse.Markdown.markdownConverter(opts).makeHtml(raw)') diff --git a/spec/controllers/category_hashtags_controller_spec.rb b/spec/controllers/category_hashtags_controller_spec.rb new file mode 100644 index 000000000..01d5eeb74 --- /dev/null +++ b/spec/controllers/category_hashtags_controller_spec.rb @@ -0,0 +1,46 @@ +require 'rails_helper' + +describe CategoryHashtagsController do + describe "check" do + describe "logged in" do + before do + log_in(:user) + end + + it 'only returns the categories that are valid' do + category = Fabricate(:category) + xhr :get, :check, category_slugs: [category.slug, 'none'] + + expect(JSON.parse(response.body)).to eq( + { "valid" => [{ "slug" => category.slug, "url" => category.url_with_id }] } + ) + end + + it 'does not return restricted categories for a normal user' do + group = Fabricate(:group) + private_category = Fabricate(:private_category, group: group) + xhr :get, :check, category_slugs: [private_category.slug] + + expect(JSON.parse(response.body)).to eq({ "valid" => [] }) + end + + it 'returns restricted categories for an admin' do + admin = log_in(:admin) + group = Fabricate(:group) + group.add(admin) + private_category = Fabricate(:private_category, group: group) + xhr :get, :check, category_slugs: [private_category.slug] + + expect(JSON.parse(response.body)).to eq( + { "valid" => [{ "slug" => private_category.slug, "url" => private_category.url_with_id }] } + ) + end + end + + describe "not logged in" do + it 'raises an exception' do + expect { xhr :get, :check, category_slugs: [] }.to raise_error(Discourse::NotLoggedIn) + end + end + end +end diff --git a/spec/controllers/list_controller_spec.rb b/spec/controllers/list_controller_spec.rb index 0415074b9..59c20da02 100644 --- a/spec/controllers/list_controller_spec.rb +++ b/spec/controllers/list_controller_spec.rb @@ -83,6 +83,26 @@ describe ListController do it { is_expected.to respond_with(:success) } end + context 'with a link that has a parent slug, slug and id in its path' do + let(:child_category) { Fabricate(:category, parent_category: category) } + + context "with valid slug" do + before do + xhr :get, :category_latest, parent_category: category.slug, category: child_category.slug, id: child_category.id + end + + it { is_expected.to redirect_to(child_category.url) } + end + + context "with invalid slug" do + before do + xhr :get, :category_latest, parent_category: 'random slug', category: 'random slug', id: child_category.id + end + + it { is_expected.to redirect_to(child_category.url) } + end + end + context 'another category exists with a number at the beginning of its name' do # One category has another category's id at the beginning of its name let!(:other_category) { Fabricate(:category, name: "#{category.id} name") } diff --git a/spec/models/category_spec.rb b/spec/models/category_spec.rb index f466be73c..ff253badb 100644 --- a/spec/models/category_spec.rb +++ b/spec/models/category_spec.rb @@ -503,6 +503,22 @@ describe Category do end end + describe "#url_with_id" do + let(:category) { Fabricate(:category, name: 'cats') } + + it "includes the id in the URL" do + expect(category.url_with_id).to eq("/c/#{category.id}-cats") + end + + context "child category" do + let(:child_category) { Fabricate(:category, parent_category_id: category.id, name: 'dogs') } + + it "includes the id in the URL" do + expect(child_category.url_with_id).to eq("/c/cats/dogs/#{child_category.id}") + end + end + end + describe "uncategorized" do let(:cat) { Category.where(id: SiteSetting.uncategorized_category_id).first } diff --git a/test/javascripts/lib/markdown-test.js.es6 b/test/javascripts/lib/markdown-test.js.es6 index 818b75514..fde64778b 100644 --- a/test/javascripts/lib/markdown-test.js.es6 +++ b/test/javascripts/lib/markdown-test.js.es6 @@ -289,6 +289,46 @@ test("Mentions", function() { "it allows mentions within HTML tags"); }); +test("Category hashtags", () => { + var alwaysTrue = { categoryHashtagLookup: (function() { return ["category", "http://test.discourse.org/category-hashtag"]; }) }; + + cookedOptions("Check out #category-hashtag", alwaysTrue, + "

    Check out #category-hashtag

    ", + "it translates category hashtag into links"); + + cooked("Check out #category-hashtag", + "

    Check out #category-hashtag

    ", + "it does not translate category hashtag into links if it is not a valid category hashtag"); + + cookedOptions("[#category-hashtag](http://www.test.com)", alwaysTrue, + "

    #category-hashtag

    ", + "it does not translate category hashtag within links"); + + cooked("```\n# #category-hashtag\n```", + "

    # #category-hashtag

    ", + "it does not translate category hashtags to links in code blocks"); + + cooked("># #category-hashtag\n", + "

    #category-hashtag

    ", + "it handles category hashtags in simple quotes"); + + cooked("# #category-hashtag", + "

    #category-hashtag

    ", + "it works within ATX-style headers"); + + cooked("don't `#category-hashtag`", + "

    don't #category-hashtag

    ", + "it does not mention in an inline code block"); + + cooked("test #hashtag1/#hashtag2", + "

    test #hashtag1/#hashtag2

    ", + "it does not convert category hashtag not bounded by spaces"); + + cooked("#category-hashtag", + "

    #category-hashtag

    ", + "it works between HTML tags"); +}); + test("Heading", function() { cooked("**Bold**\n----------", "

    Bold

    ", "It will bold the heading"); diff --git a/test/javascripts/lib/utilities-test.js.es6 b/test/javascripts/lib/utilities-test.js.es6 index 0a8ebd636..e5e6eba1e 100644 --- a/test/javascripts/lib/utilities-test.js.es6 +++ b/test/javascripts/lib/utilities-test.js.es6 @@ -158,3 +158,27 @@ test("defaultHomepage", function() { Discourse.SiteSettings.top_menu = "latest|top|hot"; equal(utils.defaultHomepage(), "latest", "default homepage is the first item in the top_menu site setting"); }); + +test("caretRowCol", () => { + var textarea = document.createElement('textarea'); + const content = document.createTextNode("01234\n56789\n012345"); + textarea.appendChild(content); + textarea.setAttribute('id', 'test'); + document.body.appendChild(textarea); + + const assertResult = (setCaretPos, expectedRowNum, expectedColNum) => { + Discourse.Utilities.setCaretPosition(textarea, setCaretPos); + + const result = Discourse.Utilities.caretRowCol(textarea); + equal(result.rowNum, expectedRowNum, "returns the right row of the caret"); + equal(result.colNum, expectedColNum, "returns the right col of the caret"); + }; + + assertResult(0, 1, 0); + assertResult(5, 1, 5); + assertResult(6, 2, 0); + assertResult(11, 2, 5); + assertResult(14, 3, 2); + + document.body.removeChild(textarea); +}); From c7df6783a9a0f46c4ac35d393ef207e48b53c6d7 Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Mon, 4 Jan 2016 11:48:54 -0500 Subject: [PATCH 011/185] FIX: only invalidate password reset links using javascript --- app/controllers/users_controller.rb | 14 +++++++++++- app/models/email_token.rb | 7 +++++- app/views/users/password_reset.html.erb | 6 +++++ config/routes.rb | 1 + spec/controllers/users_controller_spec.rb | 28 +++++++++++++++++++++++ 5 files changed, 54 insertions(+), 2 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 3e510bb25..fb537e6a5 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -23,6 +23,7 @@ class UsersController < ApplicationController :send_activation_email, :authorize_email, :password_reset, + :confirm_email_token, :admin_login] def index @@ -355,7 +356,12 @@ class UsersController < ApplicationController expires_now if EmailToken.valid_token_format?(params[:token]) - @user = EmailToken.confirm(params[:token]) + if request.put? + @user = EmailToken.confirm(params[:token]) + else + email_token = EmailToken.confirmable(params[:token]) + @user = email_token.try(:user) + end if @user session["password-#{params[:token]}"] = @user.id @@ -387,6 +393,12 @@ class UsersController < ApplicationController render layout: 'no_ember' end + def confirm_email_token + expires_now + EmailToken.confirm(params[:token]) + render json: success_json + end + def logon_after_password_reset message = if Guardian.new(@user).can_access_forum? # Log in the user diff --git a/app/models/email_token.rb b/app/models/email_token.rb index a7eb036f9..d08c09161 100644 --- a/app/models/email_token.rb +++ b/app/models/email_token.rb @@ -44,7 +44,7 @@ class EmailToken < ActiveRecord::Base def self.confirm(token) return unless valid_token_format?(token) - email_token = EmailToken.where("token = ? and expired = FALSE AND ((NOT confirmed AND created_at >= ?) OR (confirmed AND created_at >= ?))", token, EmailToken.valid_after, EmailToken.confirm_valid_after).includes(:user).first + email_token = confirmable(token) return if email_token.blank? user = email_token.user @@ -59,12 +59,17 @@ class EmailToken < ActiveRecord::Base user.save! end end + # redeem invite, if available return User.find_by(email: Email.downcase(user.email)) if Invite.redeem_from_email(user.email).present? user rescue ActiveRecord::RecordInvalid # If the user's email is already taken, just return nil (failure) end + + def self.confirmable(token) + EmailToken.where("token = ? and expired = FALSE AND ((NOT confirmed AND created_at >= ?) OR (confirmed AND created_at >= ?))", token, EmailToken.valid_after, EmailToken.confirm_valid_after).includes(:user).first + end end # == Schema Information diff --git a/app/views/users/password_reset.html.erb b/app/views/users/password_reset.html.erb index c1597a541..93a5fd40c 100644 --- a/app/views/users/password_reset.html.erb +++ b/app/views/users/password_reset.html.erb @@ -48,6 +48,10 @@ <%end%> +<%- content_for(:no_ember_head) do %> + <%= script "ember_jquery" %> +<%- end %> + diff --git a/config/routes.rb b/config/routes.rb index 2859b5bff..518fab5ca 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -266,6 +266,7 @@ Discourse::Application.routes.draw do get "users/search/users" => "users#search_users" get "users/account-created/" => "users#account_created" get "users/password-reset/:token" => "users#password_reset" + get "users/confirm-email-token/:token" => "users#confirm_email_token", constraints: { format: 'json' } put "users/password-reset/:token" => "users#password_reset" get "users/activate-account/:token" => "users#activate_account" put "users/activate-account/:token" => "users#perform_account_activation", as: 'perform_activate_account' diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index 54f221b0f..435f4fd2e 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -326,6 +326,16 @@ describe UsersController do expect(user.auth_token).to_not eq old_token expect(user.auth_token.length).to eq 32 end + + it "doesn't invalidate the token when loading the page" do + user = Fabricate(:user, auth_token: SecureRandom.hex(16)) + email_token = user.email_tokens.create(email: user.email) + + get :password_reset, token: email_token.token + + email_token.reload + expect(email_token.confirmed).to eq(false) + end end context 'submit change' do @@ -361,6 +371,24 @@ describe UsersController do end end + describe '.confirm_email_token' do + let(:user) { Fabricate(:user) } + + it "token doesn't match any records" do + email_token = user.email_tokens.create(email: user.email) + get :confirm_email_token, token: SecureRandom.hex, format: :json + expect(response).to be_success + expect(email_token.reload.confirmed).to eq(false) + end + + it "token matches" do + email_token = user.email_tokens.create(email: user.email) + get :confirm_email_token, token: email_token.token, format: :json + expect(response).to be_success + expect(email_token.reload.confirmed).to eq(true) + end + end + describe '.admin_login' do let(:admin) { Fabricate(:admin) } let(:user) { Fabricate(:user) } From c8f90a39733aba0d03742cab311bdb728a3d127b Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Mon, 4 Jan 2016 15:24:36 -0500 Subject: [PATCH 012/185] FIX: On mobile forgot password was broken --- .../javascripts/discourse/controllers/forgot-password.js.es6 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/controllers/forgot-password.js.es6 b/app/assets/javascripts/discourse/controllers/forgot-password.js.es6 index 00d551bd8..64aac27c9 100644 --- a/app/assets/javascripts/discourse/controllers/forgot-password.js.es6 +++ b/app/assets/javascripts/discourse/controllers/forgot-password.js.es6 @@ -4,7 +4,7 @@ export default Ember.Controller.extend(ModalFunctionality, { // You need a value in the field to submit it. submitDisabled: function() { - return Ember.isEmpty(this.get('accountEmailOrUsername').trim()) || this.get('disabled'); + return Ember.isEmpty((this.get('accountEmailOrUsername') || '').trim()) || this.get('disabled'); }.property('accountEmailOrUsername', 'disabled'), actions: { From 29e5ab012143eb7613797fd4e0edf18cec765ea9 Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Mon, 4 Jan 2016 15:43:30 -0500 Subject: [PATCH 013/185] Revert "remove blue from "similar to" topic excerpts" This reverts commit 33669f97e4ab78c2d53d26bed80e15b9fd14ec95. --- app/assets/stylesheets/desktop/header.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/desktop/header.scss b/app/assets/stylesheets/desktop/header.scss index 0ce668056..ff74c6714 100644 --- a/app/assets/stylesheets/desktop/header.scss +++ b/app/assets/stylesheets/desktop/header.scss @@ -27,6 +27,7 @@ and (max-width : 570px) { } .search-link .blurb { + color: dark-light-choose(scale-color($primary, $lightness: 45%), scale-color($secondary, $lightness: 55%)); display: block; word-wrap: break-word; font-size: 11px; From 268e0f3b2bc36674bc995063f1a36d63dbe8543a Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 5 Jan 2016 07:54:12 +1100 Subject: [PATCH 014/185] remove http 1.1 in case it has side effects --- config/nginx.sample.conf | 6 ------ 1 file changed, 6 deletions(-) diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index 90aec737c..0113c3f4e 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -100,7 +100,6 @@ server { location = /srv/status { access_log off; log_not_found off; - proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -136,7 +135,6 @@ server { # # proxy_set_header DOES NOT inherit, by design, we must repeat it, # otherwise headers are not set correctly - proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -168,7 +166,6 @@ server { } location ~ ^/admin/backups/ { - proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -183,7 +180,6 @@ server { # acceleration for backups and avatars # see note about repetition above location ~ ^/(letter_avatar/|user_avatar|highlight-js|stylesheets|favicon/proxied) { - proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -217,7 +213,6 @@ server { proxy_cache_key $uri; proxy_cache_valid 200 7d; proxy_cache_valid 404 1m; - proxy_http_version 1.1; proxy_set_header Connection ""; proxy_pass https://avatars.discourse.org/; @@ -250,7 +245,6 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $thescheme; - proxy_http_version 1.1; proxy_pass http://discourse; } From 73336db311c3889c1ad28059e5b7fb5f186e5b4d Mon Sep 17 00:00:00 2001 From: Jeff Atwood Date: Mon, 4 Jan 2016 15:25:30 -0800 Subject: [PATCH 015/185] use grey for similar topic blurbs --- app/assets/stylesheets/desktop/compose.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/desktop/compose.scss b/app/assets/stylesheets/desktop/compose.scss index 6edf84153..6e7666916 100644 --- a/app/assets/stylesheets/desktop/compose.scss +++ b/app/assets/stylesheets/desktop/compose.scss @@ -96,7 +96,7 @@ } .search-link { .fa, .blurb { - color: dark-light-choose(scale-color($tertiary, $lightness: -40%), scale-color($tertiary, $lightness: 40%)); + color: dark-light-choose(scale-color($primary, $lightness: 45%), scale-color($secondary, $lightness: 55%)); } } .badge-wrapper { From 3af7509945e2d803393349db0b1c005d0df3abc4 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 Jan 2016 09:27:57 +0800 Subject: [PATCH 016/185] FIX: Limit number of items for category hashtag autocomplete. --- .../discourse/components/d-editor.js.es6 | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index a67b4b8cc..fe7a44279 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -258,10 +258,23 @@ export default Ember.Component.extend({ return category.get('slug'); }, dataSource(term) { - return Category.list().filter(category => { - const regexp = new RegExp(term, 'i'); - return category.get('name').match(regexp); + const limit = 5; + const regexp = new RegExp(term, 'i'); + var count = 0; + var data = []; + + Category.listByActivity().some(category => { + console.log(category); + + if (category.get('name').match(regexp)) { + count++; + data.push(category); + } + + return count === limit; }); + + return data; }, triggerRule(textarea, opts) { const result = Discourse.Utilities.caretRowCol(textarea); From a549229a0d8a861bbdc76fe60d1d685d83ebe35b Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 Jan 2016 09:37:46 +0800 Subject: [PATCH 017/185] Remove unused code. --- test/javascripts/lib/utilities-test.js.es6 | 1 - 1 file changed, 1 deletion(-) diff --git a/test/javascripts/lib/utilities-test.js.es6 b/test/javascripts/lib/utilities-test.js.es6 index e5e6eba1e..003c40bb1 100644 --- a/test/javascripts/lib/utilities-test.js.es6 +++ b/test/javascripts/lib/utilities-test.js.es6 @@ -163,7 +163,6 @@ test("caretRowCol", () => { var textarea = document.createElement('textarea'); const content = document.createTextNode("01234\n56789\n012345"); textarea.appendChild(content); - textarea.setAttribute('id', 'test'); document.body.appendChild(textarea); const assertResult = (setCaretPos, expectedRowNum, expectedColNum) => { From 0096efadc8ad079c6399897fc87e932916ae3b3b Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 Jan 2016 09:52:53 +0800 Subject: [PATCH 018/185] :bomb: --- app/assets/javascripts/discourse/components/d-editor.js.es6 | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index fe7a44279..6b02fad5e 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -264,8 +264,6 @@ export default Ember.Component.extend({ var data = []; Category.listByActivity().some(category => { - console.log(category); - if (category.get('name').match(regexp)) { count++; data.push(category); From 294f0e6491a20f4131e8950c521af250ae612667 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Tue, 5 Jan 2016 08:40:27 +0530 Subject: [PATCH 019/185] FIX: new users were not able to self delete --- .../javascripts/discourse/controllers/preferences.js.es6 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/preferences.js.es6 b/app/assets/javascripts/discourse/controllers/preferences.js.es6 index f23f342e0..1efdaff99 100644 --- a/app/assets/javascripts/discourse/controllers/preferences.js.es6 +++ b/app/assets/javascripts/discourse/controllers/preferences.js.es6 @@ -32,8 +32,8 @@ export default Ember.Controller.extend(CanCheckEmails, { } }, - cannotDeleteAccount: Em.computed.not('can_delete_account'), - deleteDisabled: Em.computed.or('saving', 'deleting', 'cannotDeleteAccount'), + cannotDeleteAccount: Em.computed.not('currentUser.can_delete_account'), + deleteDisabled: Em.computed.or('model.isSaving', 'deleting', 'cannotDeleteAccount'), canEditName: setting('enable_names'), From d6b5b9436ca9f8a5fb905cc6c8282593cb29f0a0 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 Jan 2016 12:50:26 +0800 Subject: [PATCH 020/185] UX: Prioritize categories autocomplete with new rules. --- .../discourse/components/d-editor.js.es6 | 16 +------ .../discourse/models/category.js.es6 | 45 ++++++++++++++++++ test/javascripts/models/category-test.js.es6 | 47 +++++++++++++++++++ 3 files changed, 93 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index 6b02fad5e..631429f37 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -258,21 +258,7 @@ export default Ember.Component.extend({ return category.get('slug'); }, dataSource(term) { - const limit = 5; - const regexp = new RegExp(term, 'i'); - var count = 0; - var data = []; - - Category.listByActivity().some(category => { - if (category.get('name').match(regexp)) { - count++; - data.push(category); - } - - return count === limit; - }); - - return data; + return Category.search(term); }, triggerRule(textarea, opts) { const result = Discourse.Utilities.caretRowCol(textarea); diff --git a/app/assets/javascripts/discourse/models/category.js.es6 b/app/assets/javascripts/discourse/models/category.js.es6 index ed82eb978..7ad63c5a9 100644 --- a/app/assets/javascripts/discourse/models/category.js.es6 +++ b/app/assets/javascripts/discourse/models/category.js.es6 @@ -285,6 +285,51 @@ Category.reopenClass({ reloadById(id) { return Discourse.ajax(`/c/${id}/show.json`); + }, + + search(term, opts) { + var limit = 5; + + if (opts) { + if (opts.limit === 0) { + return []; + } else if (opts.limit) { + limit = opts.limit; + } + } + + const emptyTerm = (term === ""); + const categories = Category.listByActivity(); + const length = categories.length; + var i; + var count = 0; + var data = []; + + const done = () => { + return data.length === limit; + } + + for (i = 0; i < length && !done(); i++) { + const category = categories[i]; + if ((emptyTerm) || + (!emptyTerm && category.get('name').indexOf(term) === 0)) { + data.push(category); + } + } + + if (!done()) { + for (i = 0; i < length && !done(); i++) { + const category = categories[i]; + + if ((!emptyTerm && category.get('name').indexOf(term) > 0)) { + if (data.indexOf(category) === -1) data.push(category); + } + } + } + + return _.sortBy(data, (category) => { + return category.get('read_restricted'); + }); } }); diff --git a/test/javascripts/models/category-test.js.es6 b/test/javascripts/models/category-test.js.es6 index 48735f88e..68e56da40 100644 --- a/test/javascripts/models/category-test.js.es6 +++ b/test/javascripts/models/category-test.js.es6 @@ -1,4 +1,5 @@ import createStore from 'helpers/create-store'; +import Category from 'discourse/models/category'; module("model:category"); @@ -50,6 +51,8 @@ test('findBySlug', function() { deepEqual(Discourse.Category.findBySlug('뉴스피드', '熱帶風暴畫眉'), newsFeed, 'we can find a category with CJK slug whose parent slug is also CJK'); deepEqual(Discourse.Category.findBySlug('时间', 'darth'), time, 'we can find a category with CJK slug whose parent slug is english'); deepEqual(Discourse.Category.findBySlug('bah', '熱帶風暴畫眉'), bah, 'we can find a category with english slug whose parent slug is CJK'); + + sandbox.restore(); }); test('findSingleBySlug', function() { @@ -122,3 +125,47 @@ test('postCountStats', function() { result = category5.get('postCountStats'); equal(result.length, 0, "should show nothing"); }); + +test('search', () => { + const result = (term, opts) => { + return Category.search(term, opts).map((category) => category.get('id')); + } + + const store = createStore(), + category1 = store.createRecord('category', { id: 1, name: 'middle term' }), + category2 = store.createRecord('category', { id: 2, name: 'middle term' }); + + sandbox.stub(Category, "listByActivity").returns([category1, category2]); + + deepEqual(result('term', { limit: 0 }), [], "returns an empty array when limit is 0"); + deepEqual(result(''), [category1.get('id'), category2.get('id')], "orders by activity if no term is matched"); + deepEqual(result('term'), [category1.get('id'), category2.get('id')], "orders by activity"); + + category2.set('name', 'term start'); + deepEqual(result('term'), [category2.get('id'), category1.get('id')], "orders matching begin with and then contains"); + + sandbox.restore(); + + const category3 = store.createRecord('category', { id: 3, name: 'term start', parent_category_id: category1.get('id') }), + category4 = store.createRecord('category', { id: 4, name: 'some term', read_restricted: true }); + + sandbox.stub(Category, "listByActivity").returns([category4, category1, category3, category2]); + + deepEqual(result(''), + [category1.get('id'), category3.get('id'), category2.get('id'), category4.get('id')], + "prioritize non read_restricted categories when term is blank"); + + deepEqual(result('', { limit: 3 }), + [category1.get('id'), category3.get('id'), category4.get('id')], + "prioritize non read_restricted categories when term is blank with limit"); + + deepEqual(result('term'), + [category3.get('id'), category2.get('id'), category1.get('id'), category4.get('id')], + "prioritize non read_restricted"); + + deepEqual(result('term', { limit: 3 }), + [category3.get('id'), category2.get('id'), category4.get('id')], + "prioritize non read_restricted with limit"); + + sandbox.restore(); +}); From 0fa9a50378ac30d11f374a24082e6934dab3e5db Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 Jan 2016 15:15:04 +0800 Subject: [PATCH 021/185] FIX: Ignore case when comparing category name and search term. --- app/assets/javascripts/discourse/models/category.js.es6 | 8 ++++---- test/javascripts/models/category-test.js.es6 | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/discourse/models/category.js.es6 b/app/assets/javascripts/discourse/models/category.js.es6 index 7ad63c5a9..45fb9bb0b 100644 --- a/app/assets/javascripts/discourse/models/category.js.es6 +++ b/app/assets/javascripts/discourse/models/category.js.es6 @@ -302,17 +302,17 @@ Category.reopenClass({ const categories = Category.listByActivity(); const length = categories.length; var i; - var count = 0; var data = []; + term = term.toLowerCase(); const done = () => { return data.length === limit; - } + }; for (i = 0; i < length && !done(); i++) { const category = categories[i]; if ((emptyTerm) || - (!emptyTerm && category.get('name').indexOf(term) === 0)) { + (!emptyTerm && category.get('name').toLowerCase().indexOf(term) === 0)) { data.push(category); } } @@ -321,7 +321,7 @@ Category.reopenClass({ for (i = 0; i < length && !done(); i++) { const category = categories[i]; - if ((!emptyTerm && category.get('name').indexOf(term) > 0)) { + if ((!emptyTerm && category.get('name').toLowerCase().indexOf(term) > 0)) { if (data.indexOf(category) === -1) data.push(category); } } diff --git a/test/javascripts/models/category-test.js.es6 b/test/javascripts/models/category-test.js.es6 index 68e56da40..dc179e7e2 100644 --- a/test/javascripts/models/category-test.js.es6 +++ b/test/javascripts/models/category-test.js.es6 @@ -141,6 +141,9 @@ test('search', () => { deepEqual(result(''), [category1.get('id'), category2.get('id')], "orders by activity if no term is matched"); deepEqual(result('term'), [category1.get('id'), category2.get('id')], "orders by activity"); + category2.set('name', 'TeRm start'); + deepEqual(result('tErM'), [category2.get('id'), category1.get('id')], "ignores case of category name and search term"); + category2.set('name', 'term start'); deepEqual(result('term'), [category2.get('id'), category1.get('id')], "orders matching begin with and then contains"); From c947c75de35f05e57a43fe4765ef064712a83d26 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 Jan 2016 15:22:29 +0800 Subject: [PATCH 022/185] FIX: Make eslint happy. --- test/javascripts/models/category-test.js.es6 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/javascripts/models/category-test.js.es6 b/test/javascripts/models/category-test.js.es6 index dc179e7e2..7b6a8c370 100644 --- a/test/javascripts/models/category-test.js.es6 +++ b/test/javascripts/models/category-test.js.es6 @@ -129,7 +129,7 @@ test('postCountStats', function() { test('search', () => { const result = (term, opts) => { return Category.search(term, opts).map((category) => category.get('id')); - } + }; const store = createStore(), category1 = store.createRecord('category', { id: 1, name: 'middle term' }), From 499599c2a2594be2e06778fed6ef3620ae2ba348 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Tue, 5 Jan 2016 13:32:35 +0530 Subject: [PATCH 023/185] UX: add CSS class to user mailing list mode preference --- app/assets/javascripts/discourse/templates/user/preferences.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/templates/user/preferences.hbs b/app/assets/javascripts/discourse/templates/user/preferences.hbs index c18a9afe5..37966945a 100644 --- a/app/assets/javascripts/discourse/templates/user/preferences.hbs +++ b/app/assets/javascripts/discourse/templates/user/preferences.hbs @@ -178,7 +178,7 @@ {{/if}} {{preference-checkbox labelKey="user.email_private_messages" checked=model.email_private_messages}} {{preference-checkbox labelKey="user.email_direct" checked=model.email_direct}} - {{preference-checkbox labelKey="user.mailing_list_mode" checked=model.mailing_list_mode}} + {{preference-checkbox labelKey="user.mailing_list_mode" checked=model.mailing_list_mode}} {{preference-checkbox labelKey="user.email_always" checked=model.email_always}}
    From 19cd80f504d6b2752337e1cbc4f9555a685972c3 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 Jan 2016 17:14:35 +0800 Subject: [PATCH 024/185] FIX: Typo in site settings. --- config/site_settings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/site_settings.yml b/config/site_settings.yml index ff7f6173c..945ce1c0e 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -850,7 +850,7 @@ backups: client: true default: 7 shadowed_by_global: true - automatic_backups_enabled: + automatic_backups_enabled?: default: true shadowed_by_global: true backup_frequency: From 16d15a79383bd6bb802a10794dd3aff665dd90a9 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 Jan 2016 17:31:46 +0800 Subject: [PATCH 025/185] Revert "FIX: Typo in site settings." This reverts commit 19cd80f504d6b2752337e1cbc4f9555a685972c3. --- config/site_settings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/site_settings.yml b/config/site_settings.yml index 945ce1c0e..ff7f6173c 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -850,7 +850,7 @@ backups: client: true default: 7 shadowed_by_global: true - automatic_backups_enabled?: + automatic_backups_enabled: default: true shadowed_by_global: true backup_frequency: From 93855db158695ed1b491ad2561a03c90d4e75d6d Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Tue, 5 Jan 2016 21:39:25 +1100 Subject: [PATCH 026/185] FEATURE: upgrade message_bus New version has support for chunked encoding, this cuts down significantly on network usage when lots of messages are sent We no longer have to re-establish a connection after we get a message, we simply reuse. --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 0b130eb94..c54444532 100644 --- a/Gemfile +++ b/Gemfile @@ -50,7 +50,7 @@ gem 'ember-source', '1.12.1' gem 'barber' gem 'babel-transpiler' -gem 'message_bus' +gem 'message_bus', '2.0.0.beta.1' gem 'rails_multisite' diff --git a/Gemfile.lock b/Gemfile.lock index 201cc46b3..1f3a21d06 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -156,7 +156,7 @@ GEM mail (2.6.3) mime-types (>= 1.16, < 3) memory_profiler (0.9.4) - message_bus (1.1.1) + message_bus (2.0.0.beta.1) rack (>= 1.1.3) redis metaclass (0.0.4) @@ -433,7 +433,7 @@ DEPENDENCIES lru_redux mail memory_profiler - message_bus + message_bus (= 2.0.0.beta.1) mime-types minitest mocha From 53fb84baa3bbb03ca2de7b126b77016960860c90 Mon Sep 17 00:00:00 2001 From: bgr11n Date: Tue, 5 Jan 2016 22:43:11 +0200 Subject: [PATCH 027/185] fixed password validator on equality with email --- lib/validators/password_validator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/validators/password_validator.rb b/lib/validators/password_validator.rb index cb7cb457e..015f08f12 100644 --- a/lib/validators/password_validator.rb +++ b/lib/validators/password_validator.rb @@ -10,7 +10,7 @@ class PasswordValidator < ActiveModel::EachValidator record.errors.add(attribute, :too_short, count: SiteSetting.min_password_length) elsif record.username.present? && value == record.username record.errors.add(attribute, :same_as_username) - elsif record.username.present? && value == record.email + elsif record.email.present? && value == record.email record.errors.add(attribute, :same_as_email) elsif SiteSetting.block_common_passwords && CommonPasswords.common_password?(value) record.errors.add(attribute, :common) From eaab27325dfdfd26ca56f42acd329874597344d6 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 6 Jan 2016 20:20:23 +1100 Subject: [PATCH 028/185] upgrade message_bus, had stray console.log :( --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index c54444532..5443439ff 100644 --- a/Gemfile +++ b/Gemfile @@ -50,7 +50,7 @@ gem 'ember-source', '1.12.1' gem 'barber' gem 'babel-transpiler' -gem 'message_bus', '2.0.0.beta.1' +gem 'message_bus', '2.0.0.beta.2' gem 'rails_multisite' diff --git a/Gemfile.lock b/Gemfile.lock index 1f3a21d06..120c0a64d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -156,7 +156,7 @@ GEM mail (2.6.3) mime-types (>= 1.16, < 3) memory_profiler (0.9.4) - message_bus (2.0.0.beta.1) + message_bus (2.0.0.beta.2) rack (>= 1.1.3) redis metaclass (0.0.4) @@ -433,7 +433,7 @@ DEPENDENCIES lru_redux mail memory_profiler - message_bus (= 2.0.0.beta.1) + message_bus (= 2.0.0.beta.2) mime-types minitest mocha From 9f4efed03aadce60a7d7ddd3dcde74603aa73630 Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Wed, 6 Jan 2016 10:22:03 +1100 Subject: [PATCH 029/185] PERF: don't publish notification state unless it changed --- app/models/notification.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/models/notification.rb b/app/models/notification.rb index f9611d2a6..303025b2d 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -35,8 +35,14 @@ class Notification < ActiveRecord::Base end def self.mark_posts_read(user, topic_id, post_numbers) - Notification.where(user_id: user.id, topic_id: topic_id, post_number: post_numbers, read: false).update_all "read = 't'" - user.publish_notifications_state + count = Notification + .where(user_id: user.id, + topic_id: topic_id, + post_number: post_numbers, + read: false) + .update_all("read = 't'") + + user.publish_notifications_state if count > 0 end def self.interesting_after(min_date) From bfcb0a52bbe1dffb9f1e262674e9a1fbb34dc6a6 Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Wed, 6 Jan 2016 20:33:55 +1100 Subject: [PATCH 030/185] correct previous commit --- app/models/notification.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/notification.rb b/app/models/notification.rb index 303025b2d..9a68e2f92 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -43,6 +43,8 @@ class Notification < ActiveRecord::Base .update_all("read = 't'") user.publish_notifications_state if count > 0 + + count end def self.interesting_after(min_date) From 57944a06948360607db8279b945b9a42059ff512 Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Wed, 6 Jan 2016 20:35:27 +1100 Subject: [PATCH 031/185] PERF: only subscribe to a topic once for polls in the past as views were created and destroyed poll subscriptions would change this caused a lot of load on messaging bus and uneeded traffic --- .../javascripts/controllers/poll.js.es6 | 2 +- .../initializers/extend-for-poll.js.es6 | 61 +++++++++++++------ plugins/poll/plugin.rb | 12 ++-- 3 files changed, 49 insertions(+), 26 deletions(-) diff --git a/plugins/poll/assets/javascripts/controllers/poll.js.es6 b/plugins/poll/assets/javascripts/controllers/poll.js.es6 index 1a9c3943d..576bf7433 100644 --- a/plugins/poll/assets/javascripts/controllers/poll.js.es6 +++ b/plugins/poll/assets/javascripts/controllers/poll.js.es6 @@ -15,7 +15,7 @@ export default Ember.Controller.extend({ showResultsDisabled: Em.computed.equal("poll.voters", 0), hideResultsDisabled: Em.computed.or("isClosed", "post.topic.closed", "post.topic.archived"), - @computed("model", "vote") + @computed("model", "vote", "model.voters", "model.options", "model.status") poll(poll, vote) { if (poll) { const options = _.map(poll.get("options"), o => Em.Object.create(o)); diff --git a/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 b/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 index 2e086fbc5..f96da54dd 100644 --- a/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 +++ b/plugins/poll/assets/javascripts/initializers/extend-for-poll.js.es6 @@ -1,4 +1,7 @@ import PostView from "discourse/views/post"; +import TopicController from "discourse/controllers/topic"; +import Post from "discourse/models/post"; + import { on } from "ember-addons/ember-computed-decorators"; function createPollView(container, post, poll, vote) { @@ -6,7 +9,7 @@ function createPollView(container, post, poll, vote) { view = container.lookup("view:poll"); controller.set("vote", vote); - controller.setProperties({ model: Em.Object.create(poll), post }); + controller.setProperties({ model: poll, post }); view.set("controller", controller); return view; @@ -17,13 +20,39 @@ export default { initialize(container) { - const messageBus = container.lookup("message-bus:main"); + Post.reopen({ + // we need a proper ember object so it is bindable + pollsChanged: function(){ + const polls = this.get("polls"); + if (polls) { + this._polls = this._polls || {}; + _.map(polls, (v,k) => { + const existing = this._polls[k]; + if (existing) { + this._polls[k].setProperties(v); + } else { + this._polls[k] = Em.Object.create(v); + } + }); + this.set("pollsObject", this._polls); + } + }.observes("polls") + }); - // listen for back-end to tell us when a post has a poll - messageBus.subscribe("/polls", data => { - const post = container.lookup("controller:topic").get('model.postStream').findLoadedPost(data.post_id); - // HACK to trigger the "postViewUpdated" event - Em.run.next(() => post.set("cooked", post.get("cooked") + " ")); + TopicController.reopen({ + subscribe(){ + this._super(); + this.messageBus.subscribe("/polls/" + this.get("model.id"), msg => { + const post = this.get('model.postStream').findLoadedPost(msg.post_id); + if (post) { + post.set('polls', msg.polls); + } + }); + }, + unsubscribe(){ + this.messageBus.unsubscribe('/polls/*'); + this._super(); + } }); // overwrite polls @@ -32,12 +61,16 @@ export default { @on("postViewInserted", "postViewUpdated") _createPollViews($post) { const post = this.get("post"), - polls = post.get("polls"), votes = post.get("polls_votes") || {}; + post.pollsChanged(); + const polls = post.get("pollsObject"); + // don't even bother when there's no poll if (!polls) { return; } + // TODO inject cleanly into + // clean-up if needed this._cleanUpPollViews(); @@ -55,23 +88,11 @@ export default { pollViews[pollName] = pollView; }); - messageBus.subscribe(`/polls/${this.get("post.id")}`, results => { - if (results && results.polls) { - _.forEach(results.polls, poll => { - if (pollViews[poll.name]) { - pollViews[poll.name].get("controller").set("model", Em.Object.create(poll)); - } - }); - } - }); - this.set("pollViews", pollViews); }, @on("willClearRender") _cleanUpPollViews() { - messageBus.unsubscribe(`/polls/${this.get("post.id")}`); - if (this.get("pollViews")) { _.forEach(this.get("pollViews"), v => v.destroy()); } diff --git a/plugins/poll/plugin.rb b/plugins/poll/plugin.rb index 18306e86c..45fb14e63 100644 --- a/plugins/poll/plugin.rb +++ b/plugins/poll/plugin.rb @@ -81,7 +81,7 @@ after_initialize do post.custom_fields[VOTES_CUSTOM_FIELD]["#{user_id}"] ||= {} post.custom_fields[VOTES_CUSTOM_FIELD]["#{user_id}"][poll_name] = options - post.custom_fields[VOTES_CUSTOM_FIELD].each do |user_id, user_votes| + post.custom_fields[VOTES_CUSTOM_FIELD].each do |_, user_votes| next unless votes = user_votes[poll_name] votes.each { |option| all_options[option] += 1 } poll["voters"] += 1 if (available_options & votes.to_set).size > 0 @@ -92,7 +92,7 @@ after_initialize do post.custom_fields[POLLS_CUSTOM_FIELD] = polls post.save_custom_fields(true) - MessageBus.publish("/polls/#{post_id}", { polls: polls }) + MessageBus.publish("/polls/#{post.topic_id}", { post_id: post_id, polls: polls }) return [poll, options] end @@ -128,7 +128,7 @@ after_initialize do post.save_custom_fields(true) - MessageBus.publish("/polls/#{post_id}", { polls: polls }) + MessageBus.publish("/polls/#{post.topic_id}", {post_id: post.id, polls: polls }) polls[poll_name] end @@ -350,7 +350,7 @@ after_initialize do post.save_custom_fields(true) # publish the changes - MessageBus.publish("/polls/#{post.id}", { polls: polls }) + MessageBus.publish("/polls/#{post.topic_id}", { post_id: post.id, polls: polls }) end end else @@ -370,7 +370,9 @@ after_initialize do # tells the front-end we have a poll for that post on(:post_created) do |post| next if post.is_first_post? || post.custom_fields[POLLS_CUSTOM_FIELD].blank? - MessageBus.publish("/polls", { post_id: post.id }) + MessageBus.publish("/polls/#{post.topic_id}", { + post_id: post.id, + polls: post.custom_fields[POLLS_CUSTOM_FIELD]}) end add_to_serializer(:post, :polls, false) { post_custom_fields[POLLS_CUSTOM_FIELD] } From f654528aa464af268af6051e7699ba1eeee65cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Wed, 6 Jan 2016 18:47:21 +0100 Subject: [PATCH 032/185] FIX: user/group/category mention dialects with less strict matchers --- .../dialects/category_hashtag_dialect.js | 2 +- .../discourse/dialects/mention_dialect.js | 21 ++++++++++--------- app/models/post_analyzer.rb | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js b/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js index e428b7ed5..1ea3052b8 100644 --- a/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js +++ b/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js @@ -4,7 +4,7 @@ **/ Discourse.Dialect.inlineRegexp({ start: '#', - matcher: /^#([A-Za-z0-9][A-Za-z0-9\-]{0,40}[A-Za-z0-9])/, + matcher: /^#([\w-]{1,50})/, spaceOrTagBoundary: true, emitter: function(matches) { diff --git a/app/assets/javascripts/discourse/dialects/mention_dialect.js b/app/assets/javascripts/discourse/dialects/mention_dialect.js index 20af912c6..1641c3094 100644 --- a/app/assets/javascripts/discourse/dialects/mention_dialect.js +++ b/app/assets/javascripts/discourse/dialects/mention_dialect.js @@ -5,22 +5,23 @@ **/ Discourse.Dialect.inlineRegexp({ start: '@', - // NOTE: we really should be using SiteSettings here, but it loads later in process - // also, if we do, we must ensure serverside version works as well - matcher: /^(@[A-Za-z0-9][A-Za-z0-9_\.\-]{0,40}[A-Za-z0-9\_])/, + // NOTE: since we can't use SiteSettings here (they loads later in process) + // we are being less strict to account for more cases than allowed + matcher: /^@([\w.-]+)/, wordBoundary: true, emitter: function(matches) { - var username = matches[1], + var mention = matches[0], + name = matches[1], mentionLookup = this.dialect.options.mentionLookup; - var type = mentionLookup && mentionLookup(username.substr(1)); + var type = mentionLookup && mentionLookup(name); if (type === "user") { - return ['a', {'class': 'mention', href: Discourse.getURL("/users/") + username.substr(1).toLowerCase()}, username]; + return ['a', {'class': 'mention', href: Discourse.getURL("/users/") + name.toLowerCase()}, mention]; } else if (type === "group") { - return ['a', {'class': 'mention-group', href: Discourse.getURL("/groups/") + username.substr(1)}, username]; + return ['a', {'class': 'mention-group', href: Discourse.getURL("/groups/") + name}, mention]; } else { - return ['span', {'class': 'mention'}, username]; + return ['span', {'class': 'mention'}, mention]; } } }); @@ -34,10 +35,10 @@ Discourse.Dialect.on("parseNode", function(event) { var parent = path[path.length - 1]; // If the parent is an 'a', remove it if (parent && parent[0] === 'a') { - var username = node[2]; + var name = node[2]; node.length = 0; node[0] = "__RAW"; - node[1] = username; + node[1] = name; } } diff --git a/app/models/post_analyzer.rb b/app/models/post_analyzer.rb index 70f1bf012..dce65b4e8 100644 --- a/app/models/post_analyzer.rb +++ b/app/models/post_analyzer.rb @@ -53,7 +53,7 @@ class PostAnalyzer cooked_stripped.css(".onebox").remove results = cooked_stripped.to_html.scan(PrettyText.mention_matcher) - @raw_mentions = results.uniq.map { |un| un.first.downcase.gsub!(/^@/, '') } + @raw_mentions = results.uniq.map { |un| un.first.downcase.sub!(/^@/, '') } end # from rack ... compat with ruby 2.2 From dcd0270d5211de2134dd3cc08b3f686f73b7e158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Wed, 6 Jan 2016 21:54:01 +0100 Subject: [PATCH 033/185] FIX: don't use the CDN for attachments when login is required --- lib/cooked_post_processor.rb | 8 ++++++++ spec/components/cooked_post_processor_spec.rb | 13 ++++++++++--- spec/fabricators/post_fabricator.rb | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb index 8b984b78f..147824d82 100644 --- a/lib/cooked_post_processor.rb +++ b/lib/cooked_post_processor.rb @@ -276,6 +276,14 @@ class CookedPostProcessor end def optimize_urls + # when login is required, attachments can't be on the CDN + if SiteSetting.login_required + @doc.css("a.attachment[href]").each do |a| + href = a["href"].to_s + a["href"] = UrlHelper.schemaless UrlHelper.absolute(href, nil) if UrlHelper.is_local(href) + end + end + %w{href data-download-href}.each do |selector| @doc.css("a[#{selector}]").each do |a| href = a["#{selector}"].to_s diff --git a/spec/components/cooked_post_processor_spec.rb b/spec/components/cooked_post_processor_spec.rb index 2511927c3..89d0c51e0 100644 --- a/spec/components/cooked_post_processor_spec.rb +++ b/spec/components/cooked_post_processor_spec.rb @@ -344,7 +344,7 @@ describe CookedPostProcessor do it "uses schemaless url for uploads" do cpp.optimize_urls - expect(cpp.html).to match_html '

    Link

    Google

    ' + expect(cpp.html).to match_html '

    Link

    Google

    text.txt (20 Bytes)

    ' end context "when CDN is enabled" do @@ -352,13 +352,20 @@ describe CookedPostProcessor do it "does use schemaless CDN url for http uploads" do Rails.configuration.action_controller.stubs(:asset_host).returns("http://my.cdn.com") cpp.optimize_urls - expect(cpp.html).to match_html '

    Link

    Google

    ' + expect(cpp.html).to match_html '

    Link

    Google

    text.txt (20 Bytes)

    ' end it "does not use schemaless CDN url for https uploads" do Rails.configuration.action_controller.stubs(:asset_host).returns("https://my.cdn.com") cpp.optimize_urls - expect(cpp.html).to match_html '

    Link

    Google

    ' + expect(cpp.html).to match_html '

    Link

    Google

    text.txt (20 Bytes)

    ' + end + + it "does not use CDN when login is required" do + SiteSetting.login_required = true + Rails.configuration.action_controller.stubs(:asset_host).returns("http://my.cdn.com") + cpp.optimize_urls + expect(cpp.html).to match_html '

    Link

    Google

    text.txt (20 Bytes)

    ' end end diff --git a/spec/fabricators/post_fabricator.rb b/spec/fabricators/post_fabricator.rb index fcd53d92d..43c479fab 100644 --- a/spec/fabricators/post_fabricator.rb +++ b/spec/fabricators/post_fabricator.rb @@ -96,6 +96,7 @@ Fabricator(:post_with_uploads_and_links, from: :post) do Google +text.txt (20 Bytes) ' end From bfd21461dfd5881c6e9cad087bca7de1e30de94b Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Thu, 7 Jan 2016 12:06:45 +0530 Subject: [PATCH 034/185] FIX: proper regex for category slug validation --- app/models/category.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/category.rb b/app/models/category.rb index 80b2a1a5c..0ee810e64 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -230,7 +230,7 @@ SQL end # only allow to use category itself id. new_record doesn't have a id. unless new_record? - match_id = /(\d+)-category/.match(self.slug) + match_id = /^(\d+)-category/.match(self.slug) errors.add(:slug, :invalid) if match_id && match_id[1] && match_id[1] != self.id.to_s end end From 2a819546ae47c0dbe8ae3019add09e1a263600b2 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Thu, 7 Jan 2016 14:30:13 +0530 Subject: [PATCH 035/185] add Twitter label meta tags only if value is present --- app/helpers/application_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2c60a6251..59d83fe23 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -146,12 +146,12 @@ module ApplicationHelper end end - if opts[:read_time] + if opts[:read_time] && opts[:read_time] > 0 result << tag(:meta, name: 'twitter:label1', value: I18n.t("reading_time")) result << tag(:meta, name: 'twitter:data1', value: "#{opts[:read_time]} mins 🕑") end - if opts[:like_count] + if opts[:like_count] && opts[:like_count] > 0 result << tag(:meta, name: 'twitter:label2', value: I18n.t("likes")) result << tag(:meta, name: 'twitter:data2', value: "#{opts[:like_count]} ❤") end From ea0e238ae1884e9f2891deafb0d9634a528270cc Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Thu, 7 Jan 2016 21:15:26 +1100 Subject: [PATCH 036/185] PERF: send Content-Length from Rails on all requests --- config/initializers/300-content_length.rb | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 config/initializers/300-content_length.rb diff --git a/config/initializers/300-content_length.rb b/config/initializers/300-content_length.rb new file mode 100644 index 000000000..0938baf6c --- /dev/null +++ b/config/initializers/300-content_length.rb @@ -0,0 +1,37 @@ +# Just like Rack except we dont do a to_ary check so we can calculate length +# on body proxy objects +# Sets the Content-Length header on responses with fixed-length bodies. +class ContentLength + TRANSFER_ENCODING = "Transfer-Encoding".freeze + CONTENT_LENGTH = "Content-Length".freeze + + include Rack::Utils + + def initialize(app) + @app = app + end + + def call(env) + status, headers, body = @app.call(env) + + if !STATUS_WITH_NO_ENTITY_BODY.include?(status.to_i) && + !headers[CONTENT_LENGTH] && + !headers[TRANSFER_ENCODING] + + obody = body + body, length = [], 0 + obody.each { |part| body << part; length += part.bytesize } + + body = Rack::BodyProxy.new(body) do + obody.close if obody.respond_to?(:close) + end + + headers[CONTENT_LENGTH] = length.to_s + end + + [status, headers, body] + end +end + +# content length helps us instruct NGINX on how to deal with this +Rails.configuration.middleware.unshift ContentLength From 850838147a89722666f9d6ee96173b991af88ea7 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Thu, 7 Jan 2016 16:48:05 +0530 Subject: [PATCH 037/185] add Twitter labels only if both properties are present --- app/helpers/application_helper.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 59d83fe23..d8b9634dc 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -146,12 +146,9 @@ module ApplicationHelper end end - if opts[:read_time] && opts[:read_time] > 0 + if opts[:read_time] && opts[:read_time] > 0 && opts[:like_count] && opts[:like_count] > 0 result << tag(:meta, name: 'twitter:label1', value: I18n.t("reading_time")) result << tag(:meta, name: 'twitter:data1', value: "#{opts[:read_time]} mins 🕑") - end - - if opts[:like_count] && opts[:like_count] > 0 result << tag(:meta, name: 'twitter:label2', value: I18n.t("likes")) result << tag(:meta, name: 'twitter:data2', value: "#{opts[:like_count]} ❤") end From c5f9ae0de1a7c871f3ccfac69886cc7cf8d375aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Thu, 7 Jan 2016 22:23:01 +0100 Subject: [PATCH 038/185] FIX: username mentions weren't working when immediately followed by a dot --- .../discourse/dialects/category_hashtag_dialect.js | 2 +- .../javascripts/discourse/dialects/mention_dialect.js | 4 ++-- app/models/username_validator.rb | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js b/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js index 1ea3052b8..4beb7ab53 100644 --- a/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js +++ b/app/assets/javascripts/discourse/dialects/category_hashtag_dialect.js @@ -4,7 +4,7 @@ **/ Discourse.Dialect.inlineRegexp({ start: '#', - matcher: /^#([\w-]{1,50})/, + matcher: /^#([\w-]{1,50})/i, spaceOrTagBoundary: true, emitter: function(matches) { diff --git a/app/assets/javascripts/discourse/dialects/mention_dialect.js b/app/assets/javascripts/discourse/dialects/mention_dialect.js index 1641c3094..3848ae150 100644 --- a/app/assets/javascripts/discourse/dialects/mention_dialect.js +++ b/app/assets/javascripts/discourse/dialects/mention_dialect.js @@ -7,11 +7,11 @@ Discourse.Dialect.inlineRegexp({ start: '@', // NOTE: since we can't use SiteSettings here (they loads later in process) // we are being less strict to account for more cases than allowed - matcher: /^@([\w.-]+)/, + matcher: /^@(\w[\w.-]{0,59})\b/i, wordBoundary: true, emitter: function(matches) { - var mention = matches[0], + var mention = matches[0].trim(), name = matches[1], mentionLookup = this.dialect.options.mentionLookup; diff --git a/app/models/username_validator.rb b/app/models/username_validator.rb index 891958b16..e0ba6cfac 100644 --- a/app/models/username_validator.rb +++ b/app/models/username_validator.rb @@ -61,21 +61,21 @@ class UsernameValidator def username_char_valid? return unless errors.empty? - if username =~ /[^A-Za-z0-9_\.\-]/ + if username =~ /[^\w.-]/ self.errors << I18n.t(:'user.username.characters') end end def username_first_char_valid? return unless errors.empty? - if username[0] =~ /[^A-Za-z0-9_]/ + if username[0] =~ /[^\w]/ self.errors << I18n.t(:'user.username.must_begin_with_alphanumeric') end end def username_last_char_valid? return unless errors.empty? - if username[-1] =~ /[^A-Za-z0-9_]/ + if username[-1] =~ /[^\w]/ self.errors << I18n.t(:'user.username.must_end_with_alphanumeric') end end From e451d47e84f5f15f6bbe63cc079e350ae84287f4 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 8 Jan 2016 11:36:32 +1100 Subject: [PATCH 039/185] Revert "PERF: send Content-Length from Rails on all requests" This reverts commit ea0e238ae1884e9f2891deafb0d9634a528270cc. Does not seem needed reverting --- config/initializers/300-content_length.rb | 37 ----------------------- 1 file changed, 37 deletions(-) delete mode 100644 config/initializers/300-content_length.rb diff --git a/config/initializers/300-content_length.rb b/config/initializers/300-content_length.rb deleted file mode 100644 index 0938baf6c..000000000 --- a/config/initializers/300-content_length.rb +++ /dev/null @@ -1,37 +0,0 @@ -# Just like Rack except we dont do a to_ary check so we can calculate length -# on body proxy objects -# Sets the Content-Length header on responses with fixed-length bodies. -class ContentLength - TRANSFER_ENCODING = "Transfer-Encoding".freeze - CONTENT_LENGTH = "Content-Length".freeze - - include Rack::Utils - - def initialize(app) - @app = app - end - - def call(env) - status, headers, body = @app.call(env) - - if !STATUS_WITH_NO_ENTITY_BODY.include?(status.to_i) && - !headers[CONTENT_LENGTH] && - !headers[TRANSFER_ENCODING] - - obody = body - body, length = [], 0 - obody.each { |part| body << part; length += part.bytesize } - - body = Rack::BodyProxy.new(body) do - obody.close if obody.respond_to?(:close) - end - - headers[CONTENT_LENGTH] = length.to_s - end - - [status, headers, body] - end -end - -# content length helps us instruct NGINX on how to deal with this -Rails.configuration.middleware.unshift ContentLength From f519834824641e6147075594398944bf79abc3bb Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Fri, 8 Jan 2016 11:26:06 +0800 Subject: [PATCH 040/185] FIX: Don't include child categories when term is black. --- .../discourse/models/category.js.es6 | 2 +- test/javascripts/models/category-test.js.es6 | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/discourse/models/category.js.es6 b/app/assets/javascripts/discourse/models/category.js.es6 index 45fb9bb0b..e507419c0 100644 --- a/app/assets/javascripts/discourse/models/category.js.es6 +++ b/app/assets/javascripts/discourse/models/category.js.es6 @@ -311,7 +311,7 @@ Category.reopenClass({ for (i = 0; i < length && !done(); i++) { const category = categories[i]; - if ((emptyTerm) || + if ((emptyTerm && !category.get('parent_category_id')) || (!emptyTerm && category.get('name').toLowerCase().indexOf(term) === 0)) { data.push(category); } diff --git a/test/javascripts/models/category-test.js.es6 b/test/javascripts/models/category-test.js.es6 index 7b6a8c370..157e31918 100644 --- a/test/javascripts/models/category-test.js.es6 +++ b/test/javascripts/models/category-test.js.es6 @@ -149,25 +149,25 @@ test('search', () => { sandbox.restore(); - const category3 = store.createRecord('category', { id: 3, name: 'term start', parent_category_id: category1.get('id') }), - category4 = store.createRecord('category', { id: 4, name: 'some term', read_restricted: true }); + const child_category1 = store.createRecord('category', { id: 3, name: 'term start', parent_category_id: category1.get('id') }), + read_restricted_category = store.createRecord('category', { id: 4, name: 'some term', read_restricted: true }); - sandbox.stub(Category, "listByActivity").returns([category4, category1, category3, category2]); + sandbox.stub(Category, "listByActivity").returns([read_restricted_category, category1, child_category1, category2]); deepEqual(result(''), - [category1.get('id'), category3.get('id'), category2.get('id'), category4.get('id')], - "prioritize non read_restricted categories when term is blank"); + [category1.get('id'), category2.get('id'), read_restricted_category.get('id')], + "prioritize non read_restricted and does not include child categories when term is blank"); deepEqual(result('', { limit: 3 }), - [category1.get('id'), category3.get('id'), category4.get('id')], - "prioritize non read_restricted categories when term is blank with limit"); + [category1.get('id'), category2.get('id'), read_restricted_category.get('id')], + "prioritize non read_restricted and does not include child categories categories when term is blank with limit"); deepEqual(result('term'), - [category3.get('id'), category2.get('id'), category1.get('id'), category4.get('id')], + [child_category1.get('id'), category2.get('id'), category1.get('id'), read_restricted_category.get('id')], "prioritize non read_restricted"); deepEqual(result('term', { limit: 3 }), - [category3.get('id'), category2.get('id'), category4.get('id')], + [child_category1.get('id'), category2.get('id'), read_restricted_category.get('id')], "prioritize non read_restricted with limit"); sandbox.restore(); From 3b45cd0fcb4d48f3166e05e3501cbbcb5805d59f Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 8 Jan 2016 14:56:48 +1100 Subject: [PATCH 041/185] FIX: missing suspension reasons (and many other messages) --- app/models/user_history.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/user_history.rb b/app/models/user_history.rb index 978ca6ee3..b4cba6c54 100644 --- a/app/models/user_history.rb +++ b/app/models/user_history.rb @@ -21,7 +21,6 @@ class UserHistory < ActiveRecord::Base :change_site_setting, :change_site_customization, :delete_site_customization, - :change_site_text, :checked_for_custom_avatar, # not used anymore :notified_about_avatar, :notified_about_sequential_replies, @@ -44,7 +43,8 @@ class UserHistory < ActiveRecord::Base :reviewed_post, :change_category_settings, :delete_category, - :create_category) + :create_category, + :change_site_text) end # Staff actions is a subset of all actions, used to audit actions taken by staff users. From 9f05361f14569d4c7a38d2fa24674f1c37a33eea Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Fri, 8 Jan 2016 12:46:52 +0800 Subject: [PATCH 042/185] Allow sites to set HTTP basic authentication through nginx. --- config/nginx.sample.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index 0113c3f4e..86e05d98e 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -91,6 +91,9 @@ server { root $public; add_header ETag ""; + # auth_basic on; + # auth_basic_user_file /etc/nginx/htpasswd; + location ~* assets/.*\.(eot|ttf|woff|woff2|ico)$ { expires 1y; add_header Cache-Control public; From 956e3ad2088a9ebe09338b94689f91d5975753e9 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 8 Jan 2016 16:52:29 +1100 Subject: [PATCH 043/185] FIX: correct user_history that was off by one --- ...160108051129_fix_incorrect_user_history.rb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 db/migrate/20160108051129_fix_incorrect_user_history.rb diff --git a/db/migrate/20160108051129_fix_incorrect_user_history.rb b/db/migrate/20160108051129_fix_incorrect_user_history.rb new file mode 100644 index 000000000..2a9cbdf0f --- /dev/null +++ b/db/migrate/20160108051129_fix_incorrect_user_history.rb @@ -0,0 +1,34 @@ +class FixIncorrectUserHistory < ActiveRecord::Migration + def up + # see https://meta.discourse.org/t/old-user-suspension-reasons-have-gone-missing/3730 + # we had a window of 21 days where all user history records with action > 5 were off by one + # + # to correct we are doing this https://meta.discourse.org/t/enums-that-are-used-in-tables-need-to-be-stable/37622 + # + # This migration hunts for date stuff started going wrong and date it started being good and corrects the data + + + # this is a :auto_trust_level_change mislabled as :check_email + # impersonate that was actually delete topic + condition = < 5 AND id >= #{first_wrong_id} AND id <= #{last_wrong_id}") + + execute("INSERT INTO user_histories(action, acting_user_id, details, created_at, updated_at) + VALUES (22, -1, '#{msg}', current_timestamp, current_timestamp)") + end + end + + def down + end +end From 006bb063717f7bf9439db1d12e5e3b78d3e02f47 Mon Sep 17 00:00:00 2001 From: Jeff Atwood Date: Fri, 8 Jan 2016 02:14:58 -0800 Subject: [PATCH 044/185] make first email footer link specially highlighted --- lib/email/styles.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/email/styles.rb b/lib/email/styles.rb index 6f0dd6c2b..cfd3f674d 100644 --- a/lib/email/styles.rb +++ b/lib/email/styles.rb @@ -206,11 +206,20 @@ module Email end def correct_footer_style + footernum = 0 @fragment.css('.footer').each do |element| element['style'] = "color:#666;" + linknum = 0 element.css('a').each do |inner| - inner['style'] = "color:#666;" + # we want the first footer link to be specially highlighted as IMPORTANT + if footernum == 0 and linknum == 0 + inner['style'] = "background-color:#006699;color:#fff;padding:4px 6px;" + else + inner['style'] = "color:#666;" + end + linknum += 1 end + footernum += 1 end end From 97e4f7f6d37d3bed74b2548b834f6f5406b51577 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Fri, 8 Jan 2016 16:23:52 +0530 Subject: [PATCH 045/185] Enums that are used in tables need to be stable --- app/models/notification.rb | 20 +++++-- app/models/post.rb | 19 +++--- app/models/post_action_type.rb | 16 ++--- app/models/top_topic.rb | 7 ++- app/models/topic_user.rb | 25 ++++---- app/models/user_history.rb | 58 +++++++++---------- lib/enum.rb | 23 +++++--- lib/site_setting_extension.rb | 24 ++++---- spec/components/enum_spec.rb | 28 ++++++--- .../components/site_setting_extension_spec.rb | 17 ++++++ spec/components/trust_level_spec.rb | 19 ++++++ spec/models/category_group_spec.rb | 20 +++++++ spec/models/directory_item_spec.rb | 17 ++++++ spec/models/group_spec.rb | 16 +++++ spec/models/notification_spec.rb | 16 +++++ spec/models/post_action_type_spec.rb | 20 +++++++ spec/models/post_mover_spec.rb | 16 +++++ spec/models/post_spec.rb | 48 +++++++++++++++ spec/models/queued_post_spec.rb | 16 +++++ spec/models/top_topic_spec.rb | 16 +++++ spec/models/topic_user_spec.rb | 32 ++++++++++ spec/models/user_history_spec.rb | 16 +++++ 22 files changed, 400 insertions(+), 89 deletions(-) create mode 100644 spec/components/trust_level_spec.rb create mode 100644 spec/models/category_group_spec.rb create mode 100644 spec/models/post_action_type_spec.rb diff --git a/app/models/notification.rb b/app/models/notification.rb index 9a68e2f92..eababfdc8 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -27,11 +27,21 @@ class Notification < ActiveRecord::Base end def self.types - @types ||= Enum.new( - :mentioned, :replied, :quoted, :edited, :liked, :private_message, - :invited_to_private_message, :invitee_accepted, :posted, :moved_post, - :linked, :granted_badge, :invited_to_topic, :custom, :group_mentioned - ) + @types ||= Enum.new(mentioned: 1, + replied: 2, + quoted: 3, + edited: 4, + liked: 5, + private_message: 6, + invited_to_private_message: 7, + invitee_accepted: 8, + posted: 9, + moved_post: 10, + linked: 11, + granted_badge: 12, + invited_to_topic: 13, + custom: 14, + group_mentioned: 15) end def self.mark_posts_read(user, topic_id, post_numbers) diff --git a/app/models/post.rb b/app/models/post.rb index ade5e6525..85320e133 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -67,20 +67,23 @@ class Post < ActiveRecord::Base delegate :username, to: :user def self.hidden_reasons - @hidden_reasons ||= Enum.new( - :flag_threshold_reached, - :flag_threshold_reached_again, - :new_user_spam_threshold_reached, - :flagged_by_tl3_user - ) + @hidden_reasons ||= Enum.new(flag_threshold_reached: 1, + flag_threshold_reached_again: 2, + new_user_spam_threshold_reached: 3, + flagged_by_tl3_user: 4) end def self.types - @types ||= Enum.new(:regular, :moderator_action, :small_action, :whisper) + @types ||= Enum.new(regular: 1, + moderator_action: 2, + small_action: 3, + whisper: 4) end def self.cook_methods - @cook_methods ||= Enum.new(:regular, :raw_html, :email) + @cook_methods ||= Enum.new(regular: 1, + raw_html: 2, + email: 3) end def self.find_by_detail(key, value) diff --git a/app/models/post_action_type.rb b/app/models/post_action_type.rb index 2f4829c34..48935123b 100644 --- a/app/models/post_action_type.rb +++ b/app/models/post_action_type.rb @@ -17,14 +17,14 @@ class PostActionType < ActiveRecord::Base end def types - @types ||= Enum.new(:bookmark, - :like, - :off_topic, - :inappropriate, - :vote, - :notify_user, - :notify_moderators, - :spam) + @types ||= Enum.new(bookmark: 1, + like: 2, + off_topic: 3, + inappropriate: 4, + vote: 5, + notify_user: 6, + notify_moderators: 7, + spam: 8) end def auto_action_flag_types diff --git a/app/models/top_topic.rb b/app/models/top_topic.rb index 4181c39bc..908e97797 100644 --- a/app/models/top_topic.rb +++ b/app/models/top_topic.rb @@ -44,7 +44,12 @@ class TopTopic < ActiveRecord::Base end def self.sorted_periods - ascending_periods ||= Enum.new(:daily, :weekly, :monthly, :quarterly, :yearly, :all) + ascending_periods ||= Enum.new(daily: 1, + weekly: 2, + monthly: 3, + quarterly: 4, + yearly: 5, + all: 6) end def self.sort_orders diff --git a/app/models/topic_user.rb b/app/models/topic_user.rb index c49f13a43..25298af1f 100644 --- a/app/models/topic_user.rb +++ b/app/models/topic_user.rb @@ -17,21 +17,22 @@ class TopicUser < ActiveRecord::Base # Enums def notification_levels - @notification_levels ||= Enum.new(:muted, :regular, :tracking, :watching, start: 0) + @notification_levels ||= Enum.new(muted: 0, + regular: 1, + tracking: 2, + watching: 3) end def notification_reasons - @notification_reasons ||= Enum.new( - :created_topic, - :user_changed, - :user_interacted, - :created_post, - :auto_watch, - :auto_watch_category, - :auto_mute_category, - :auto_track_category, - :plugin_changed - ) + @notification_reasons ||= Enum.new(created_topic: 1, + user_changed: 2, + user_interacted: 3, + created_post: 4, + auto_watch: 5, + auto_watch_category: 6, + auto_mute_category: 7, + auto_track_category: 8, + plugin_changed: 9) end def auto_track(user_id, topic_id, reason) diff --git a/app/models/user_history.rb b/app/models/user_history.rb index b4cba6c54..8382c9a6c 100644 --- a/app/models/user_history.rb +++ b/app/models/user_history.rb @@ -16,35 +16,35 @@ class UserHistory < ActiveRecord::Base before_save :set_admin_only def self.actions - @actions ||= Enum.new(:delete_user, - :change_trust_level, - :change_site_setting, - :change_site_customization, - :delete_site_customization, - :checked_for_custom_avatar, # not used anymore - :notified_about_avatar, - :notified_about_sequential_replies, - :notified_about_dominating_topic, - :suspend_user, - :unsuspend_user, - :facebook_no_email, - :grant_badge, - :revoke_badge, - :auto_trust_level_change, - :check_email, - :delete_post, - :delete_topic, - :impersonate, - :roll_up, - :change_username, - :custom, - :custom_staff, - :anonymize_user, - :reviewed_post, - :change_category_settings, - :delete_category, - :create_category, - :change_site_text) + @actions ||= Enum.new(delete_user: 1, + change_trust_level: 2, + change_site_setting: 3, + change_site_customization: 4, + delete_site_customization: 5, + checked_for_custom_avatar: 6, # not used anymore + notified_about_avatar: 7, + notified_about_sequential_replies: 8, + notified_about_dominating_topic: 9, + suspend_user: 10, + unsuspend_user: 11, + facebook_no_email: 12, + grant_badge: 13, + revoke_badge: 14, + auto_trust_level_change: 15, + check_email: 16, + delete_post: 17, + delete_topic: 18, + impersonate: 19, + roll_up: 20, + change_username: 21, + custom: 22, + custom_staff: 23, + anonymize_user: 24, + reviewed_post: 25, + change_category_settings: 26, + delete_category: 27, + create_category: 28, + change_site_text: 29) end # Staff actions is a subset of all actions, used to audit actions taken by staff users. diff --git a/lib/enum.rb b/lib/enum.rb index bbdc3fe82..7db1845dc 100644 --- a/lib/enum.rb +++ b/lib/enum.rb @@ -1,19 +1,28 @@ class Enum < Hash # Public: Initialize an enum. # - # members - the array of enum members. May contain a hash of options: - # :start - the number of first enum member. Defaults to 1. + # members - Array of enum members or Hash of enum members. + # Array of enum members may also contain a hash of options: + # :start - the number of first enum member. Defaults to 1. # # Examples # - # FRUITS = Enum.new(:apple, :orange, :kiwi) + # FRUITS = Enum.new(:apple, :orange, :kiwi) # array + # FRUITS = Enum.new(:apple, :orange, :kiwi, start: 0) # array + # FRUITS = Enum.new(apple: 1, orange: 2, kiwi: 3) # hash + def initialize(*members) super({}) - options = members.extract_options! - start = options.fetch(:start) { 1 } - - update Hash[members.zip(start..members.count + start)] + if members[0].is_a?(Hash) + # hash + update Hash[members[0]] + else + # array + options = members.extract_options! + start = options.fetch(:start) { 1 } + update Hash[members.zip(start..members.count + start)] + end end # Public: Access the number/value of member. diff --git a/lib/site_setting_extension.rb b/lib/site_setting_extension.rb index 7b85f9c6e..13392a22a 100644 --- a/lib/site_setting_extension.rb +++ b/lib/site_setting_extension.rb @@ -21,18 +21,18 @@ module SiteSettingExtension end def types - @types ||= Enum.new(:string, - :time, - :fixnum, - :float, - :bool, - :null, - :enum, - :list, - :url_list, - :host_list, - :category_list, - :value_list) + @types ||= Enum.new(string: 1, + time: 2, + fixnum: 3, + float: 4, + bool: 5, + null: 6, + enum: 7, + list: 8, + url_list: 9, + host_list: 10, + category_list: 11, + value_list: 12) end def mutex diff --git a/spec/components/enum_spec.rb b/spec/components/enum_spec.rb index 12033ae00..d7977e1ee 100644 --- a/spec/components/enum_spec.rb +++ b/spec/components/enum_spec.rb @@ -2,37 +2,51 @@ require 'rails_helper' require 'email' describe Enum do - let(:enum) { Enum.new(:jake, :finn, :princess_bubblegum, :peppermint_butler) } + let(:array_enum) { Enum.new(:jake, :finn, :princess_bubblegum, :peppermint_butler) } + let(:hash_enum) { Enum.new(jake: 1, finn: 2, princess_bubblegum: 3, peppermint_butler: 4) } describe ".[]" do it "looks up a number by symbol" do - expect(enum[:princess_bubblegum]).to eq(3) + expect(array_enum[:princess_bubblegum]).to eq(3) + expect(hash_enum[:princess_bubblegum]).to eq(3) end it "looks up a symbol by number" do - expect(enum[2]).to eq(:finn) + expect(array_enum[2]).to eq(:finn) + expect(hash_enum[2]).to eq(:finn) end end describe ".valid?" do it "returns true if a key exists" do - expect(enum.valid?(:finn)).to eq(true) + expect(array_enum.valid?(:finn)).to eq(true) + expect(hash_enum.valid?(:finn)).to eq(true) end it "returns false if a key does not exist" do - expect(enum.valid?(:obama)).to eq(false) + expect(array_enum.valid?(:obama)).to eq(false) + expect(hash_enum.valid?(:obama)).to eq(false) end end describe ".only" do it "returns only the values we ask for" do - expect(enum.only(:jake, :princess_bubblegum)).to eq({ jake: 1, princess_bubblegum: 3 }) + expect(array_enum.only(:jake, :princess_bubblegum)).to eq({ jake: 1, princess_bubblegum: 3 }) + expect(hash_enum.only(:jake, :princess_bubblegum)).to eq({ jake: 1, princess_bubblegum: 3 }) end end describe ".except" do it "returns everything but the values we ask to delete" do - expect(enum.except(:jake, :princess_bubblegum)).to eq({ finn: 2, peppermint_butler: 4 }) + expect(array_enum.except(:jake, :princess_bubblegum)).to eq({ finn: 2, peppermint_butler: 4 }) + expect(hash_enum.except(:jake, :princess_bubblegum)).to eq({ finn: 2, peppermint_butler: 4 }) + end + end + + context "allows to specify number of first enum member" do + it "number of first enum member should be 0 " do + start_enum = Enum.new(:jake, :finn, :princess_bubblegum, :peppermint_butler, start: 0) + expect(start_enum[:princess_bubblegum]).to eq(2) end end end diff --git a/spec/components/site_setting_extension_spec.rb b/spec/components/site_setting_extension_spec.rb index fad837036..04f362270 100644 --- a/spec/components/site_setting_extension_spec.rb +++ b/spec/components/site_setting_extension_spec.rb @@ -3,6 +3,23 @@ require_dependency 'site_setting_extension' require_dependency 'site_settings/local_process_provider' describe SiteSettingExtension do + + describe '#types' do + context "verify enum sequence" do + before do + @types = SiteSetting.types + end + + it "'string' should be at 1st position" do + expect(@types[:string]).to eq(1) + end + + it "'value_list' should be at 12th position" do + expect(@types[:value_list]).to eq(12) + end + end + end + let :provider_local do SiteSettings::LocalProcessProvider.new end diff --git a/spec/components/trust_level_spec.rb b/spec/components/trust_level_spec.rb new file mode 100644 index 000000000..87f0b08cd --- /dev/null +++ b/spec/components/trust_level_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +describe TrustLevel do + describe 'levels' do + context "verify enum sequence" do + before do + @levels = TrustLevel.levels + end + + it "'newuser' should be at 0 position" do + expect(@levels[:newuser]).to eq(0) + end + + it "'leader' should be at 4th position" do + expect(@levels[:leader]).to eq(4) + end + end + end +end diff --git a/spec/models/category_group_spec.rb b/spec/models/category_group_spec.rb new file mode 100644 index 000000000..d884f7f91 --- /dev/null +++ b/spec/models/category_group_spec.rb @@ -0,0 +1,20 @@ +require 'rails_helper' + +describe CategoryGroup do + + describe '#permission_types' do + context "verify enum sequence" do + before do + @permission_types = CategoryGroup.permission_types + end + + it "'full' should be at 1st position" do + expect(@permission_types[:full]).to eq(1) + end + + it "'readonly' should be at 3rd position" do + expect(@permission_types[:readonly]).to eq(3) + end + end + end +end diff --git a/spec/models/directory_item_spec.rb b/spec/models/directory_item_spec.rb index ad3b23b0f..d19be0af8 100644 --- a/spec/models/directory_item_spec.rb +++ b/spec/models/directory_item_spec.rb @@ -1,6 +1,23 @@ require 'rails_helper' describe DirectoryItem do + + describe '#period_types' do + context "verify enum sequence" do + before do + @period_types = DirectoryItem.period_types + end + + it "'all' should be at 1st position" do + expect(@period_types[:all]).to eq(1) + end + + it "'quarterly' should be at 6th position" do + expect(@period_types[:quarterly]).to eq(6) + end + end + end + context 'refresh' do let!(:post) { Fabricate(:post) } diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 87bd3898b..36ad2b32c 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -2,6 +2,22 @@ require 'rails_helper' describe Group do + describe '#builtin' do + context "verify enum sequence" do + before do + @builtin = Group.builtin + end + + it "'moderators' should be at 1st position" do + expect(@builtin[:moderators]).to eq(1) + end + + it "'trust_level_2' should be at 4th position" do + expect(@builtin[:trust_level_2]).to eq(4) + end + end + end + # UGLY but perf is horrible with this callback before do User.set_callback(:create, :after, :ensure_in_trust_level_group) diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index eef253c2c..1fa789f65 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -11,6 +11,22 @@ describe Notification do it { is_expected.to belong_to :user } it { is_expected.to belong_to :topic } + describe '#types' do + context "verify enum sequence" do + before do + @types = Notification.types + end + + it "'mentioned' should be at 1st position" do + expect(@types[:mentioned]).to eq(1) + end + + it "'group_mentioned' should be at 15th position" do + expect(@types[:group_mentioned]).to eq(15) + end + end + end + describe 'post' do let(:topic) { Fabricate(:topic) } let(:post_args) do diff --git a/spec/models/post_action_type_spec.rb b/spec/models/post_action_type_spec.rb new file mode 100644 index 000000000..7408ed669 --- /dev/null +++ b/spec/models/post_action_type_spec.rb @@ -0,0 +1,20 @@ +require 'rails_helper' + +describe PostActionType do + + describe '#types' do + context "verify enum sequence" do + before do + @types = PostActionType.types + end + + it "'bookmark' should be at 1st position" do + expect(@types[:bookmark]).to eq(1) + end + + it "'spam' should be at 8th position" do + expect(@types[:spam]).to eq(8) + end + end + end +end diff --git a/spec/models/post_mover_spec.rb b/spec/models/post_mover_spec.rb index 7cf0f900e..c90dcae0c 100644 --- a/spec/models/post_mover_spec.rb +++ b/spec/models/post_mover_spec.rb @@ -2,6 +2,22 @@ require 'rails_helper' describe PostMover do + describe '#move_types' do + context "verify enum sequence" do + before do + @move_types = PostMover.move_types + end + + it "'new_topic' should be at 1st position" do + expect(@move_types[:new_topic]).to eq(1) + end + + it "'existing_topic' should be at 2nd position" do + expect(@move_types[:existing_topic]).to eq(2) + end + end + end + context 'move_posts' do let(:user) { Fabricate(:user) } let(:another_user) { Fabricate(:evil_trout) } diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 1baf1caf5..c7a6ead93 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -4,6 +4,54 @@ require_dependency 'post_destroyer' describe Post do before { Oneboxer.stubs :onebox } + describe '#hidden_reasons' do + context "verify enum sequence" do + before do + @hidden_reasons = Post.hidden_reasons + end + + it "'flag_threshold_reached' should be at 1st position" do + expect(@hidden_reasons[:flag_threshold_reached]).to eq(1) + end + + it "'flagged_by_tl3_user' should be at 4th position" do + expect(@hidden_reasons[:flagged_by_tl3_user]).to eq(4) + end + end + end + + describe '#types' do + context "verify enum sequence" do + before do + @types = Post.types + end + + it "'regular' should be at 1st position" do + expect(@types[:regular]).to eq(1) + end + + it "'whisper' should be at 4th position" do + expect(@types[:whisper]).to eq(4) + end + end + end + + describe '#cook_methods' do + context "verify enum sequence" do + before do + @cook_methods = Post.cook_methods + end + + it "'regular' should be at 1st position" do + expect(@cook_methods[:regular]).to eq(1) + end + + it "'email' should be at 3rd position" do + expect(@cook_methods[:email]).to eq(3) + end + end + end + # Help us build a post with a raw body def post_with_body(body, user=nil) args = post_args.merge(raw: body) diff --git a/spec/models/queued_post_spec.rb b/spec/models/queued_post_spec.rb index 5a8b974be..8a16ca3a9 100644 --- a/spec/models/queued_post_spec.rb +++ b/spec/models/queued_post_spec.rb @@ -3,6 +3,22 @@ require_dependency 'queued_post' describe QueuedPost do + describe '#states' do + context "verify enum sequence" do + before do + @states = QueuedPost.states + end + + it "'new' should be at 1st position" do + expect(@states[:new]).to eq(1) + end + + it "'rejected' should be at 3rd position" do + expect(@states[:rejected]).to eq(3) + end + end + end + context "creating a post" do let(:topic) { Fabricate(:topic) } let(:user) { Fabricate(:user) } diff --git a/spec/models/top_topic_spec.rb b/spec/models/top_topic_spec.rb index 0e3a473b5..3b90232f1 100644 --- a/spec/models/top_topic_spec.rb +++ b/spec/models/top_topic_spec.rb @@ -2,6 +2,22 @@ require 'rails_helper' describe TopTopic do + describe '#sorted_periods' do + context "verify enum sequence" do + before do + @sorted_periods = TopTopic.sorted_periods + end + + it "'daily' should be at 1st position" do + expect(@sorted_periods[:daily]).to eq(1) + end + + it "'all' should be at 6th position" do + expect(@sorted_periods[:all]).to eq(6) + end + end + end + it { is_expected.to belong_to :topic } context "refresh!" do diff --git a/spec/models/topic_user_spec.rb b/spec/models/topic_user_spec.rb index c5b4d331a..9f9f5651a 100644 --- a/spec/models/topic_user_spec.rb +++ b/spec/models/topic_user_spec.rb @@ -2,6 +2,38 @@ require 'rails_helper' describe TopicUser do + describe '#notification_levels' do + context "verify enum sequence" do + before do + @notification_levels = TopicUser.notification_levels + end + + it "'muted' should be at 0 position" do + expect(@notification_levels[:muted]).to eq(0) + end + + it "'watching' should be at 3rd position" do + expect(@notification_levels[:watching]).to eq(3) + end + end + end + + describe '#notification_reasons' do + context "verify enum sequence" do + before do + @notification_reasons = TopicUser.notification_reasons + end + + it "'created_topic' should be at 1st position" do + expect(@notification_reasons[:created_topic]).to eq(1) + end + + it "'plugin_changed' should be at 9th position" do + expect(@notification_reasons[:plugin_changed]).to eq(9) + end + end + end + it { is_expected.to belong_to :user } it { is_expected.to belong_to :topic } diff --git a/spec/models/user_history_spec.rb b/spec/models/user_history_spec.rb index f19db854d..659432d95 100644 --- a/spec/models/user_history_spec.rb +++ b/spec/models/user_history_spec.rb @@ -2,6 +2,22 @@ require 'rails_helper' describe UserHistory do + describe '#actions' do + context "verify enum sequence" do + before do + @actions = UserHistory.actions + end + + it "'delete_user' should be at 1st position" do + expect(@actions[:delete_user]).to eq(1) + end + + it "'change_site_text' should be at 29th position" do + expect(@actions[:change_site_text]).to eq(29) + end + end + end + describe '#staff_action_records' do context "with some records" do before do From d732c0876ae5b68c31977ee6738bcf043395ed26 Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Fri, 8 Jan 2016 15:50:00 -0500 Subject: [PATCH 046/185] Update translations --- config/locales/client.ar.yml | 12 +++++++++ config/locales/client.de.yml | 25 +++++++++++++++++ config/locales/client.fa_IR.yml | 33 +++++++++++++++++++++++ config/locales/client.fi.yml | 10 ++++--- config/locales/client.it.yml | 29 ++++++++++++++++++++ config/locales/client.ja.yml | 11 +++++++- config/locales/client.ko.yml | 33 +++++++++++++++++++++++ config/locales/client.ru.yml | 5 ++++ config/locales/client.zh_CN.yml | 27 +++++++++++++++++++ config/locales/server.ar.yml | 1 + config/locales/server.de.yml | 8 ++++++ config/locales/server.es.yml | 12 ++++++--- config/locales/server.fi.yml | 13 +++++++-- config/locales/server.it.yml | 9 +++++++ config/locales/server.ru.yml | 6 ++++- config/locales/server.zh_CN.yml | 11 ++++++++ plugins/poll/config/locales/client.fi.yml | 2 +- public/403.ko.html | 2 +- 18 files changed, 236 insertions(+), 13 deletions(-) diff --git a/config/locales/client.ar.yml b/config/locales/client.ar.yml index 1ef6b2766..c8bfe022e 100644 --- a/config/locales/client.ar.yml +++ b/config/locales/client.ar.yml @@ -405,7 +405,9 @@ ar: empty: posts: "لا يوجد أي منشور لأي عضو من هذه المجموعة ." members: "لا يوجد أعضاء في هذه المجموعة ." + mentions: "لا يوجد أعضاء في هذه المجموعة ." messages: "لا توجد رسائل لهذه المجموعة." + topics: "لا يوجد أي منشور لأي عضو من هذه المجموعة ." add: "اضافة" selector_placeholder: "اضافة عضو" owner: "المالك" @@ -430,8 +432,18 @@ ar: title: "مستوى الثقة يمنح تلقائيا للأعضاء عندما يضيفون:" none: "لا شيء" notifications: + watching: + title: "تحت المتابعة" + description: "سيتم إشعارك بأية رد على هذه الرسالة، وبعدد الردود الجديدة التي ستظهر ." + tracking: + title: "تتبع" + description: "سيتم إشعارك بأية رد على هذا الموضوع، وبعدد الردود الجديدة التي ستظهر." regular: title: "معتدل" + description: ".سيتم إشعارك إذا ذكر أحد ما @name أو رد على مشاركاتك" + muted: + title: "مكتوم" + description: "لن يتم إشعارك بأي جديد يخص هذا الموضوع ولن يظهرهذا الموضوع في قائمة المواضيع المنشورة مؤخراً." user_action_groups: '1': "الإعجابات المعطاة" '2': "الإعجابات المستلمة" diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml index d9af838f5..388bbbc73 100644 --- a/config/locales/client.de.yml +++ b/config/locales/client.de.yml @@ -294,6 +294,12 @@ de: one: "1 Benutzer" other: "%{count} Benutzer" groups: + empty: + posts: "Es gibt keinen Beitrag von Mitgliedern dieser Gruppe." + members: "Diese Gruppe hat keine Mitglieder." + mentions: "Diese Gruppe wurde nicht erwähnt." + messages: "Es gibt keine Nachrichten für diese Gruppe." + topics: "Es gibt kein Thema von Mitgliedern dieser Gruppe." add: "Hinzufügen" selector_placeholder: "Mitglieder hinzufügen" owner: "Eigentümer" @@ -313,6 +319,16 @@ de: trust_levels: title: "Vertrauensstufe, die neuen Mitgliedern automatisch verliehen wird:" none: "keine" + notifications: + watching: + description: "Du wirst über jeden neuen Beitrag in jeder Nachricht benachrichtigt und die Anzahl der neuen Antworten wird angezeigt." + tracking: + description: "Du wirst benachrichtigt, wenn jemand deinen @Namen erwähnt oder auf deinen Beitrag antwortet, und die Anzahl der neuen Antworten wird angezeigt." + regular: + description: "Du wirst benachrichtigt, wenn jemand deinen @Namen erwähnt oder dir antwortet." + muted: + title: "Stummgeschaltet" + description: "Du erhältst keine Benachrichtigungen im Zusammenhang mit Nachrichten in dieser Gruppe." user_action_groups: '1': "Abgegebene Likes" '2': "Erhaltene Likes" @@ -387,6 +403,7 @@ de: invited_by: "Eingeladen von" trust_level: "Vertrauensstufe" notifications: "Benachrichtigungen" + statistics: "Statistiken" desktop_notifications: label: "Desktop-Benachrichtigungen" not_supported: "Dieser Browser unterstützt leider keine Benachrichtigungen." @@ -440,7 +457,14 @@ de: warnings_received: "Warnungen" messages: all: "Alle" + inbox: "Posteingang" + sent: "Gesendet" + archive: "Archiv" groups: "Meine Gruppen" + bulk_select: "Nachrichten auswählen" + move_to_inbox: "Zum Posteingang verschieben" + failed_to_move: "Die ausgewählten Nachrichten konnten nicht bewegt werden (vielleicht gibt es ein Netzwerkproblem)." + select_all: "Alle auswählen" change_password: success: "(E-Mail gesendet)" in_progress: "(E-Mail wird gesendet)" @@ -867,6 +891,7 @@ de: granted_badge: "Abzeichen erhalten" popup: mentioned: '{{username}} hat dich in "{{topic}}" - {{site_title}} erwähnt' + group_mentioned: '{{username}} hat dich in "{{topic}}" - {{site_title}} erwähnt' quoted: '{{username}} hat dich in "{{topic}}" - {{site_title}} zitiert' replied: '{{username}} hat dir in "{{topic}}" - {{site_title}} geantwortet' posted: '{{username}} hat in "{{topic}}" - {{site_title}} einen Beitrag verfasst' diff --git a/config/locales/client.fa_IR.yml b/config/locales/client.fa_IR.yml index f171c994e..d6cf6f3dd 100644 --- a/config/locales/client.fa_IR.yml +++ b/config/locales/client.fa_IR.yml @@ -267,6 +267,12 @@ fa_IR: total_rows: other: "%{count} کاربران" groups: + empty: + posts: "در این گروه هیچ پستی توسط کاربران " + members: "هیچ عضوی در این گروه وجود ندارد." + mentions: "هیچ کجا به این گروه اشاره‌ای نشده است." + messages: "پیامی در این گروه وجود ندارد." + topics: "در این گروه هیچ موضوعی توسط کاربران ارسال نشده." add: "افزودن" selector_placeholder: "افزودن عضو" owner: "مالک" @@ -285,6 +291,19 @@ fa_IR: trust_levels: title: "سطح اعتماد به صورت خودکار به اعضاء داده میشود وقتی که آن ها اضافه میشوند:" none: "هیچ کدام" + notifications: + watching: + title: "در حال مشاهده" + description: "در صورت ارسال شدن پست جدید در هر پیام یک اعلان برای شما ارسال می‌شود و تعداد پاسخ‌های جدید نمایش داده می‌شود." + tracking: + title: "ردگیری" + description: "در صورت اشاره شدن به @نام شما توسط اشخاص دیگر و یا دریافت پاسخ، اعلانی برای شما ارسال می‌شود و تعداد پاسخ‌های جدید نمایش داده می‌شود." + regular: + title: "معمولی" + description: "در صورتی که به @نام شما اشاره شود و یا پاسخی دریافت کنید اعلانی برای شما ارسال می‌شود." + muted: + title: "بی صدا شد" + description: "با ارسال شدن موضوعات جدید در این گروه شما اعلانی دریافت نمی‌کنید." user_action_groups: '1': "پسندهای داده شده" '2': "پسندهای دریافت شده" @@ -303,6 +322,7 @@ fa_IR: all_subcategories: "همه" no_subcategory: "هیچی" category: "دسته بندی" + category_list: "نمایش لیست دسته‌بندی" reorder: title: "دوباره مرتب کردن دسته بندی ها" title_long: "سازماندهی مجدد فهرست دسته بندی ها" @@ -357,6 +377,7 @@ fa_IR: invited_by: "فراخوان از سوی" trust_level: "سطح اعتماد" notifications: "آگاه‌سازی‌ها" + statistics: "وضعیت" desktop_notifications: label: "اعلانات دسکتاپ" not_supported: "اعلانات بر روی این مرورگر پشتیبانی نمیشوند. با عرض پوزش." @@ -410,7 +431,14 @@ fa_IR: warnings_received: "هشدارها" messages: all: "همه" + inbox: "صندوق دریافت" + sent: "ارسال شد" + archive: "بایگانی" groups: "گروه های من" + bulk_select: "انتخاب پیام‌ها" + move_to_inbox: "انتقال به صندوق دریافت" + failed_to_move: "انتقال پیام‌های انتخاب شده با اشکال مواجه شد (شاید اتصال شما در دسترس نیست)" + select_all: "انتخاب همه" change_password: success: "(ایمیل ارسال شد)" in_progress: "(فرستادن ایمیل)" @@ -834,6 +862,7 @@ fa_IR: granted_badge: "مدال اعطاء شد" popup: mentioned: '{{username}} mentioned you in "{{topic}}" - {{site_title}}' + group_mentioned: '{{username}} به شما در "{{topic}}" - {{site_title}} اشاره نمود' quoted: '{{username}} quoted you in "{{topic}}" - {{site_title}}' replied: '{{username}} replied to you in "{{topic}}" - {{site_title}}' posted: '{{username}} posted in "{{topic}}" - {{site_title}}' @@ -976,6 +1005,7 @@ fa_IR: auto_close_title: 'تنضیمات قفل خوکار' auto_close_save: "‌ذخیره" auto_close_remove: "این موضوع را خوکار قفل نکن" + auto_close_immediate: "زمان ارسال آخرین پست در موضوع برای %{hours} ساعت پیش است، بنابر این موضوع بلافاصله بسته می‌شود." progress: title: نوشته ی در حال اجرا go_top: "بالا" @@ -1094,6 +1124,7 @@ fa_IR: success: "ما آن کاربر را برای شرکت در این پیام دعوت کردیم." error: "با معذرت٬ یک خطا برای دعوت آن کاربر وجود داشت" group_name: "نام گروه" + controls: "مدیریت مبحث" invite_reply: title: 'دعوتنامه ' username_placeholder: "نام کاربری" @@ -1957,6 +1988,7 @@ fa_IR: change_site_setting: "تغییر تنظیمات سایت" change_site_customization: "تغییر سفارشی‌سازی سایت" delete_site_customization: "پاک‌کردن سفارشی‌سازی سایت" + change_site_text: "تغییر نوشته سایت" suspend_user: "کاربر تعلیق شده" unsuspend_user: "کابر تعلیق نشده" grant_badge: "اعطای مدال" @@ -2141,6 +2173,7 @@ fa_IR: unlock_trust_level: "باز کردن سطح اعتماد" tl3_requirements: title: "شرایط لازم برای سطح اعتماد 3." + table_title: "در %{time_period} روز گذشته:" value_heading: "مقدار" requirement_heading: "نیازمندی‌ها" visits: "بازدیدها" diff --git a/config/locales/client.fi.yml b/config/locales/client.fi.yml index 4f2aabc25..8ee232958 100644 --- a/config/locales/client.fi.yml +++ b/config/locales/client.fi.yml @@ -143,7 +143,7 @@ fi: admin_title: "Ylläpito" flags_title: "Liput" show_more: "näytä lisää" - show_help: "asetukset" + show_help: "ohjeet" links: "Linkit" links_lowercase: one: "linkki" @@ -266,9 +266,9 @@ fi: you_replied_to_post: "Sinä vastasit {{post_number}}" user_replied_to_topic: "{{user}} vastasi ketjuun" you_replied_to_topic: "Sinä vastasit ketjuun" - user_mentioned_user: "{{user}} mainitsi {{another_user}}" + user_mentioned_user: "{{user}} mainitsi käyttäjän {{another_user}}" user_mentioned_you: "{{user}} mainitsi sinut" - you_mentioned_user: "Sinä mainitsit {{another_user}}" + you_mentioned_user: "Sinä mainitsit käyttäjän {{another_user}}" posted_by_user: "Kirjoittaja {{user}}" posted_by_you: "Kirjoittaja sinä" sent_by_user: "Lähettäjä {{user}}" @@ -294,6 +294,8 @@ fi: one: "1 käyttäjä" other: "%{count} käyttäjää" groups: + empty: + members: "Kukaan ei kuulu tähän ryhmään." add: "Lisää" selector_placeholder: "Lisää jäseniä" owner: "omistaja" @@ -403,7 +405,7 @@ fi: statistics: "Tilastot" desktop_notifications: label: "Työpöytäilmoitukset" - not_supported: "Tämä selainen ei tue ilmoituksia, pahoittelut." + not_supported: "Tämä selain ei tue ilmoituksia, pahoittelut." perm_default: "Näytä ilmoituksia" perm_denied_btn: "Ei oikeuksia" perm_denied_expl: "Olet kieltänyt ilmoitusten näyttämisen. Salli ilmoitusten näyttäminen selaimen asetuksista ja klikkaa sen jälkeen painiketta. (Työpöytä: vasemmanpuoleisin kuvake osoiterivillä. Mobiili: 'Sivun tiedot'.)" diff --git a/config/locales/client.it.yml b/config/locales/client.it.yml index 6d265f1eb..3696f0690 100644 --- a/config/locales/client.it.yml +++ b/config/locales/client.it.yml @@ -294,6 +294,12 @@ it: one: "1 utente" other: "%{count} utenti" groups: + empty: + posts: "Non ci sono messaggi dai membri di questo gruppo." + members: "Non ci sono membri in questo gruppo." + mentions: "Non ci sono menzioni a questo gruppo." + messages: "Non ci sono messaggi per questo gruppo." + topics: "Non ci sono argomenti da membri di questo gruppo." add: "Aggiungi" selector_placeholder: "Aggiungi membri" owner: "proprietario" @@ -313,6 +319,19 @@ it: trust_levels: title: "Livello di esperienza automaticamente assegnato ai membri quando vengono aggiunti:" none: "Nessuno" + notifications: + watching: + title: "In osservazione" + description: "Verrai avvertito per ogni nuovo messaggio, e verrà mostrato il conteggio delle nuove risposte." + tracking: + title: "Seguendo" + description: "Verrai avvertito se qualcuno menziona il tuo @nome o ti risponde, e verrà mostrato un conteggio delle nuove risposte." + regular: + title: "Esperto" + description: "Verrai avvertito se qualcuno menziona il tuo @nome o ti risponde." + muted: + title: "Silenziato" + description: "Non verrai mai avvertito per i nuovi argomenti in questo gruppo." user_action_groups: '1': "Mi piace - Assegnati" '2': "Mi piace - Ricevuti" @@ -331,6 +350,7 @@ it: all_subcategories: "tutte" no_subcategory: "nessuno" category: "Categoria" + category_list: "Visualizza l'elenco delle categorie" reorder: title: "Riordina Categorie" title_long: "Riorganizza l'elenco di categorie" @@ -387,6 +407,7 @@ it: invited_by: "Invitato Da" trust_level: "Livello Esperienza" notifications: "Notifiche" + statistics: "Statistiche" desktop_notifications: label: "Notifiche Desktop" not_supported: "Spiacenti, le notifiche non sono supportate su questo browser." @@ -440,7 +461,14 @@ it: warnings_received: "avvisi" messages: all: "Tutti" + inbox: "In arrivo" + sent: "Spediti" + archive: "Archiviati" groups: "I Miei Gruppi" + bulk_select: "Seleziona messaggi" + move_to_inbox: "Sposta in arrivo" + failed_to_move: "Errore nello spostare i messaggi selezionati (forse la tua connessione non è attiva)" + select_all: "Seleziona Tutti" change_password: success: "(email inviata)" in_progress: "(invio email in corso)" @@ -2227,6 +2255,7 @@ it: unlock_trust_level: "Sblocca Livello Esperienza" tl3_requirements: title: "Requisiti per Livello Esperienza 3" + table_title: "Negli ultimi %{time_period} giorni:" value_heading: "Valore" requirement_heading: "Requisito" visits: "Visite" diff --git a/config/locales/client.ja.yml b/config/locales/client.ja.yml index 6da4af20f..cfa124e99 100644 --- a/config/locales/client.ja.yml +++ b/config/locales/client.ja.yml @@ -104,6 +104,7 @@ ja: admin_title: "管理者" flags_title: "フラグ" show_more: "もっと見る" + show_help: "オプション" links: "リンク" links_lowercase: other: "リンク集" @@ -244,6 +245,11 @@ ja: total_rows: other: "%{count} 人のユーザ" groups: + empty: + posts: "このグループのメンバーによる投稿はありません。" + add: "追加" + selector_placeholder: "メンバー追加" + owner: "所有者" visible: "このグループは全てのユーザに表示されています。" title: other: "グループ" @@ -273,6 +279,8 @@ ja: all_subcategories: "全てのサブカテゴリ" no_subcategory: "サブカテゴリなし" category: "カテゴリ" + reorder: + title: "カテゴリを並び替える" posts: "ポスト" topics: "トピック" latest: "最新ポスト" @@ -1316,6 +1324,7 @@ ja: with_topics: "%{filter} トピック" with_category: "%{filter} %{category} トピック" latest: + title: "最新" help: "最新のトピック" hot: title: "ホット" @@ -1387,7 +1396,7 @@ ja: stale_data: "最近アップデートの確認が正しく動作していません。sidekiq が起動していることを確認してください。" version_check_pending: "まるでアップデート直後のようです。素晴らしい!" installed_version: "Installed" - latest_version: "Latest" + latest_version: "最新" problems_found: "Discourse のインストールにいくつか問題が発見されました:" last_checked: "最終チェック" refresh_problems: "更新" diff --git a/config/locales/client.ko.yml b/config/locales/client.ko.yml index c66a68947..991ea4e48 100644 --- a/config/locales/client.ko.yml +++ b/config/locales/client.ko.yml @@ -267,6 +267,12 @@ ko: total_rows: other: "%{count} 사용자" groups: + empty: + posts: "이 그룹의 구성원에 의해 작성된 게시물은 없습니다." + members: "이 그룹에는 구성원이 없습니다." + mentions: "이 그룹에 대한 언급이 없습니다." + messages: "이 그룹에 대한 메시지는 없습니다." + topics: "이 그룹의 구성원에 의해 작성된 주제글이 없습니다." add: "추가" selector_placeholder: "멤버 추가" owner: "소유자" @@ -1713,6 +1719,10 @@ ko: color: "색" opacity: "투명도" copy: "복사" + email_templates: + none_selected: "편집하려는 이메일 템플릿을 선택하세요." + revert: "변경사항 취소" + revert_confirm: "정말로 변경사항을 되돌리시겠습니까?" css_html: title: "CSS/HTML" long_title: "CSS, HTML 사용자 정의" @@ -1805,6 +1815,7 @@ ko: ip_address: "IP" topic_id: "토픽 ID" post_id: "글 ID" + category_id: "카테고리 ID" delete: '삭제' edit: '편집' save: '저장' @@ -1835,6 +1846,7 @@ ko: change_site_setting: "사이트 설정 변경" change_site_customization: "사이트 커스텀화 변경" delete_site_customization: "사이트 커스텀화 삭제" + change_site_text: "site text 변경" suspend_user: "suspend user" unsuspend_user: "unsuspend user" grant_badge: "뱃지 부여" @@ -1845,6 +1857,9 @@ ko: impersonate: "대역" anonymize_user: "anonymize user" roll_up: "roll up IP blocks" + change_category_settings: "카테고리 설정 변경" + delete_category: "카테고리 지우기" + create_category: "카테고리 만들기" screened_emails: title: "블락된 이메일들" description: "누군가가 새로운 계정을 만들면 아래 이메일 주소는 체크되고 등록은 블락됩니다, 또는 다른 조치가 취해집니다." @@ -1909,6 +1924,9 @@ ko: pending: '검토가 필요한 사용자' newuser: '사용자 신뢰도 0 (새로운 사용자)' basic: '사용자 신뢰도 1 (초보 사용자)' + member: '사용자 신뢰도 2 (회원)' + regular: '사용자 신뢰도 3 (정규)' + leader: '사용자 신뢰도 4 (지도자)' staff: "스태프" admins: '관리자 사용자 목록' moderators: '운영자' @@ -2013,6 +2031,7 @@ ko: unlock_trust_level: "신뢰도 시스템 잠금 해제" tl3_requirements: title: "레벨 3 권한이 필요합니다." + table_title: "지난 %{time_period} 일간" value_heading: "값" requirement_heading: "필수" visits: "방문수" @@ -2073,7 +2092,15 @@ ko: confirm: '확인' dropdown: "드롭다운" site_text: + description: "포럼에 있는 그 어떤 텍스트도 수정이 가능합니다. 아래의 검색기능을 통해 시작하세요." + search: "편집하고 싶은 텍스트를 검색하세요." title: '텍스트 콘텐츠' + edit: '편집' + revert: "변경사항 취소" + revert_confirm: "정말로 변경사항을 되돌리시겠습니까?" + go_back: "검색으로 돌아가기" + recommended: "다음의 텍스트를 요구에 맞게 편집하는 것을 권장:" + show_overriden: 'Override 된 설정만 보여주기' site_settings: show_overriden: '수정된 것만 표시' title: '사이트 설정' @@ -2161,6 +2188,9 @@ ko: bad_count_warning: header: "주의!" text: "사라진 뱃지 샘플이 있습니다. 뱃지 query가 존재하지 않는 user ID나 post ID를 반환할 경우 발생합니다. 예상하지 못한 결과를 일으킬 수 있으니 query를 다시 한번 확인하세요." + no_grant_count: "할당된 뱃지가 없습니다." + grant_count: + other: "%{count}개의 뱃지가 할당됨." sample: "샘플:" grant: with: %{username} @@ -2185,8 +2215,11 @@ ko: settings: "Embedding 설정" feed_settings: "Feed 설정" crawling_settings: "클롤러 설정" + embed_post_limit: "글 개수가 최대치입니다" + embed_truncate: "임베드된 글 비우기" feed_polling_enabled: "RSS/ATOM으로 글 가져오기" feed_polling_url: "RSS/ATOM 피드로 긁을 URL" + save: "Embedding 설정 저장하기" permalink: title: "고유링크" url: "URL" diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml index 6932de305..bda7b6b2a 100644 --- a/config/locales/client.ru.yml +++ b/config/locales/client.ru.yml @@ -498,6 +498,10 @@ ru: warnings_received: "предупреждения" messages: all: "Все" + inbox: "Входящие" + sent: "Отправленные" + archive: "Архив" + select_all: "Выбрать все" change_password: success: "(письмо отправлено)" in_progress: "(отправка письма)" @@ -1620,6 +1624,7 @@ ru: help: "Эта тема не закреплена; она будет отображаться в обычном порядке" pinned_globally: title: "Закреплена глобально" + help: "Эта тема закреплена глобально; она будет отображаться на главной и вверху своего раздела" pinned: title: "Закреплена" help: "Тема закреплена; она будет показана вверху соответствующего раздела" diff --git a/config/locales/client.zh_CN.yml b/config/locales/client.zh_CN.yml index db81dfa01..28cc27323 100644 --- a/config/locales/client.zh_CN.yml +++ b/config/locales/client.zh_CN.yml @@ -267,6 +267,12 @@ zh_CN: total_rows: other: "%{count} 位用户" groups: + empty: + posts: "此小组成员没有回复" + members: "此小组没有成员" + mentions: "此小组没有通知" + messages: "此小组没有消息" + topics: "此小组成员没有主题帖" add: "添加" selector_placeholder: "添加成员" owner: "所有者" @@ -285,6 +291,15 @@ zh_CN: trust_levels: title: "当这些用户加入时,信任等级将自动赋予给他们:" none: "无" + notifications: + watching: + title: "关注" + tracking: + title: "追踪" + regular: + title: "普通" + muted: + title: "忽略" user_action_groups: '1': "给赞" '2': "被赞" @@ -303,6 +318,7 @@ zh_CN: all_subcategories: "全部" no_subcategory: "无" category: "分类" + category_list: "显示分类列表" reorder: title: "重排序分类" title_long: "重新排序分类列表" @@ -357,6 +373,7 @@ zh_CN: invited_by: "邀请者为" trust_level: "用户级别" notifications: "通知" + statistics: "统计" desktop_notifications: label: "桌面通知" not_supported: "通知功能暂不支持该浏览器。抱歉。" @@ -410,7 +427,13 @@ zh_CN: warnings_received: "警告" messages: all: "所有" + inbox: "收件箱" + sent: "已发送" + archive: "存档" groups: "我的小组" + bulk_select: "选择消息" + move_to_inbox: "移动到收件箱" + select_all: "全选" change_password: success: "(电子邮件已发送)" in_progress: "(正在发送电子邮件)" @@ -834,6 +857,7 @@ zh_CN: granted_badge: "勋章授予" popup: mentioned: '{{username}}在“{{topic}}”提到了你 - {{site_title}}' + group_mentioned: '{{username}}在“{{topic}}”提到了你 - {{site_title}}' quoted: '{{username}}在“{{topic}}”引用了你的帖子 - {{site_title}}' replied: '{{username}}在“{{topic}}”回复了你 - {{site_title}}' posted: '{{username}}在“{{topic}}”中发布了帖子 - {{site_title}}' @@ -1094,6 +1118,7 @@ zh_CN: success: "我们已经邀请了该用户加入这个消息交流。" error: "抱歉,在邀请该用户时发生了错误。" group_name: "群组名" + controls: "主题控制" invite_reply: title: ' 邀请' username_placeholder: "用户名" @@ -1957,6 +1982,7 @@ zh_CN: change_site_setting: "更改站点设置" change_site_customization: "更改站点自定义" delete_site_customization: "删除站点自定义" + change_site_text: "更改站点文字" suspend_user: "封禁用户" unsuspend_user: "解禁用户" grant_badge: "授予徽章" @@ -2141,6 +2167,7 @@ zh_CN: unlock_trust_level: "解锁信任等级" tl3_requirements: title: "3 级信任等级的需求" + table_title: "在最近%{time_period}天:" value_heading: "价值" requirement_heading: "需求" visits: "访问" diff --git a/config/locales/server.ar.yml b/config/locales/server.ar.yml index af74ce2cb..15031669f 100644 --- a/config/locales/server.ar.yml +++ b/config/locales/server.ar.yml @@ -106,6 +106,7 @@ ar: not_found: "تعذر العثور على رابط العنوان المطلوب" invalid_access: "لا تمتلك صلاحيات لعرض المطلوب " read_only_mode_enabled: "الموقع في وضع القراءة فقط. عُطّلت التفاعلات." + reading_time: "وقت القراءة" likes: "الإعجابات" too_many_replies: zero: "يمكن للأعضاء الجدد الرد كما يحلو لهم في كل موضوع." diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml index 2b73288a4..30ae7ee65 100644 --- a/config/locales/server.de.yml +++ b/config/locales/server.de.yml @@ -90,6 +90,8 @@ de: not_found: "Die angeforderte URL oder Ressource konnte nicht gefunden werden." invalid_access: "Du hast nicht die Erlaubnis, die angeforderte Ressource zu betrachten." read_only_mode_enabled: "Die Seite befindet sich im Nur-Lesen Modus. Änderungen sind deaktiviert." + reading_time: "Lesezeit" + likes: "Likes" too_many_replies: one: "Entschuldigung, aber neue Benutzer sind vorübergehend auf eine Antwort pro Thema beschränkt." other: "Entschuldigung, aber neue Benutzer sind vorübergehend auf %{count} Antworten pro Thema beschränkt." @@ -463,6 +465,7 @@ de: long_form: 'als unangemessen gemeldet' notify_moderators: title: "Irgendetwas anderes" + description: 'Dieser Beitrag muss von einem Mitarbeiter begutachtet werden, da er entweder nicht mit den Richtlinien oder den Nutzungsbedingungen in Einklang zu bringen ist, oder aus sonstigen oben nicht genannten Gründen.' long_form: ' hast dies den Moderatoren gemeldet' email_title: 'Das Thema "%{title}" benötigt die Aufmerksamkeit eines Moderators' email_body: "%{link}\n\n%{message}" @@ -667,6 +670,7 @@ de: max_topic_title_length: "Maximale zulässige Titellänge von Themen in Zeichen." min_private_message_title_length: "Minimale zulässige Titellänge von Nachrichten in Zeichen." min_search_term_length: "Minimale zulässige Länge der Suche in Zeichen." + search_tokenize_chinese_japanese_korean: "Zwinge die Suche, Chinesisch, Japanisch und Koreanisch zu erkennen, auch wenn die Seite keine dieser Sprachen nutzt" allow_uncategorized_topics: "Erlaube Themen ohne Kategorie zu erstellen. ACHTUNG: Falls es unkategorisierte Themen gibt, musst du sie neu kategorisieren, bevor du diese Option abschaltest." uncategorized_description: "Beschreibung der Kategorie für unkategorisierte Themen. Leer lassen, wenn keine Beschreibung erwünscht ist." allow_duplicate_topic_titles: "Erlaube Themen mit identischen und doppelten Titeln." @@ -860,6 +864,7 @@ de: tl2_requires_likes_received: "Die Anzahl der Likes, die ein Benutzer erhalten muss, bevor er in die Vertrauensstufe 2 befördert wird." tl2_requires_likes_given: "Die Anzahl der Likes, die ein Benutzer vergeben muss, bevor er in die Vertrauensstufe 2 befördert wird." tl2_requires_topic_reply_count: "Die Anzahl der Beiträge, auf die ein Benutzer antworten muss, bevor er in die Vertrauensstufe 2 befördert wird." + tl3_time_period: "Zeitraum für die Bedingungen für Vertrauensstufe 3" tl3_requires_days_visited: "Die Mindestanzahl an Tagen, an denen ein Benutzer in den letzten 100 Tagen die Seite besucht haben muss, um die Vertrauensstufe 3 erreichen zu können. (0 bis 100)" tl3_requires_topics_replied_to: "Die Mindestanzahl an Themen, auf die ein Benutzer in den letzten 100 Tagen geantwortet haben muss, um die Vertrauensstufe 3 erreichen zu können. (0 oder mehr)" tl3_requires_topics_viewed: "Prozentualer Anteil aller Themen der letzten 100 Tage, die ein Nutzer mindestens gelesen haben muss, um die Vertrauensstufe Anführer (3) erreichen zu können. (0 bis 100)" @@ -880,6 +885,7 @@ de: newuser_max_mentions_per_post: "Maximale Anzahl der @Namens-Erwähnungen, die neue Benutzer in Beiträgen nutzen dürfen." newuser_max_replies_per_topic: "Maximale Anzahl an Antworten, die ein neuer Benutzer in einem einzigen Thema geben darf, bevor jemand auf diese antwortet." max_mentions_per_post: "Maximale Anzahl der @Namens-Erwähnungen, die jemand in einem Beitrag nutzen kann." + max_users_notified_per_group_mention: "Maximale Anzahl an Nutzern die benachrichtigt werden wenn eine Gruppe erwähnt wird (wird die Grenze erreicht, werden keine Nutzer benachrichtigt)" create_thumbnails: "Erzeuge ein Vorschaubild und eine Lightbox für Bilder, die zu groß sind, um in einem Beitrag angezeigt zu werden." email_time_window_mins: "Warte (n) Minuten, bevor Nutzern eine Hinweis-E-Mail geschickt wird, um ihnen Gelegenheit zu geben, ihre Beiträge abschließend bearbeiten zu können." email_posts_context: "Anzahl der Antworten welche als Konext einer Notifikations-Mail hinzugefügt werden." @@ -935,6 +941,7 @@ de: disable_emails: "Discourse daran hindern, jegliche Art von Emails zu verschicken" strip_images_from_short_emails: "Entferne Bilder aus E-Mails kleiner als 2800 Bytes." short_email_length: "Kurze E-Mail-Länge in Bytes" + display_name_on_email_from: "Zeige vollständige Namen im Absender-Feld von E-Mails" pop3_polling_enabled: "E-Mail-Antworten über POP3 abholen." pop3_polling_ssl: "SSL für die Verbindung zum POP3-Server verwenden. (Empfohlen)" pop3_polling_period_mins: "Intervall in Minuten zum Abholen neuer E-Mails vom POP3-Konto. HINWEIS: benötigt Neustart." @@ -975,6 +982,7 @@ de: allow_profile_backgrounds: "Erlaube Benutzern Profilhintergründe hochzuladen." enable_mobile_theme: "Mobilgeräte verwenden eine mobile Darstellung mit der Möglichkeit zur vollständigen Seite zu wechseln. Deaktiviere diese Option, wenn du ein eigenes Full-Responsive-Stylesheet verwenden möchtest." dominating_topic_minimum_percent: "Anteil der Nachrichten eines Themas in Prozent, die ein einzelner Nutzer verfassen darf, bevor dieser Nutzer darauf hingewiesen wird, dass er dieses Thema dominiert." + disable_avatar_education_message: "Weise Benutzer nicht darauf hin, dass sie ihren Avatar ändern können" daily_performance_report: "Analysiere die NGINX-Logs täglich. Poste anschließend eine Zusammenfassung als Beitrag, welcher nur für Moderatoren oder Administratoren zugänglich ist." suppress_uncategorized_badge: "Zeige kein Abzeichen für unkategorisierte Themen in der Themenliste." permalink_normalizations: "Wende den folgenden regulären Ausdruck an, bevor Permanentlinks überprüft werden, beispielsweise wird /(\\/topic.*)\\?.*/\\1 Query Strings aus Themen-Routen entfernen. Format: RegEx+String, benutze \\1 usw. um auf Gruppierungen zuzugreifen." diff --git a/config/locales/server.es.yml b/config/locales/server.es.yml index 8cd8b4e74..eae1a8564 100644 --- a/config/locales/server.es.yml +++ b/config/locales/server.es.yml @@ -130,7 +130,7 @@ es: other: "Lo sentimos, los nuevos usuarios solo pueden poner %{count} enlaces en un post." spamming_host: "Lo sentimos, no puedes publicar un enlace a esa web." user_is_suspended: "A los usuarios suspendidos no se les permite publicar." - topic_not_found: "Algo ha salido mal. Tal vez este tema fue cerrado o eliminado mientras estabas mirando en él?" + topic_not_found: "Algo ha salido mal. ¿Tal vez este tema ha sido cerrado o eliminado mientras estabas lo estabas mirando?" just_posted_that: "es demasiado parecido a lo que has publicado recientemente" has_already_been_used: "ya ha sido utilizado" invalid_characters: "contiene caracteres no válidos" @@ -681,6 +681,7 @@ es: max_topic_title_length: "Extensión máxima del título de los temas, en número de caracteres" min_private_message_title_length: "Extensión mínima del título de los temas en mensajes, en número de caracteres" min_search_term_length: "Extensión mínima de una búsqueda válida, en número de caracteres" + search_tokenize_chinese_japanese_korean: "Forzar la búsqueda a tokenizar Chino/Japonés/Coreano incluso en sitios que no basados en esos idiomas" allow_uncategorized_topics: "Permitir la creación de temas sin categoría. AVISO: Si ya hay algún tema sin categoría, debes recategorizarlo antes de activar esta opción." uncategorized_description: "La descripción de la categoría Sin categoría. Déjalo en blanco para no añadir descripción." allow_duplicate_topic_titles: "Permitir temas con títulos idénticos, duplicados." @@ -832,6 +833,7 @@ es: active_user_rate_limit_secs: "Con qué frecuencia actualizaremos el campo 'last_seen_at', en segundos" verbose_localization: "Mostrar sugerencias de localización extendida en la interface de usuario " previous_visit_timeout_hours: "Cuanto tiempo debe pasar antes de que una visita sea considerada la 'visita previa', en horas" + allow_staged_accounts: "[BETA] Crear cuentas provisionales para los emails entrantes." rate_limit_create_topic: "Después de crear un tema, los usuarios deben esperar (n) segundos antes de crear otro tema." rate_limit_create_post: "Después de publicar un post, los usuarios deben esperar (n) segundos antes de crear otro post." rate_limit_new_user_create_topic: "Después de crear un tema, los nuevos usuarios deben esperar (n) segundos antes de crear otro tema." @@ -1000,7 +1002,7 @@ es: global_notice: "Mostrar una noticia de URGENCIA o EMERGENCIA para todos los visitantes, deja este campo en blanco para ocultarla (se puede utilizar código HTML)" disable_edit_notifications: "Inhabilitar editar notificaciones por el usuario system cuando 'download_remote_images_to_local' este activo." automatically_unpin_topics: "Quitar destacado automáticamente cuando el usuario llega al final del tema." - full_name_required: "Su nombre completo es un campo obligatorio de un perfil de usuario." + full_name_required: "El nombre completo es un campo obligatorio del perfil de usuario." enable_names: "Mostrar el nombre completo del usuario en su perfil, tarjeta de usuario y emails. Desactiva esta opción para ocultar el nombre completo en todas partes." display_name_on_posts: "Mostrar el nombre completo de un usuario en sus posts, además de su @usuario." show_time_gap_days: "Si entre dos publicaciones han pasado este número de días, mostrar el lapso de tiempo en el tema." @@ -1009,7 +1011,7 @@ es: default_code_lang: "Lenguaje de programación por defecto para aplicar el resaltado de la sintaxis en los bloques de código de GitHub (lang-auto, ruby, python etc.)" warn_reviving_old_topic_age: "Cuando alguien publica en un tema cuya última respuesta fue hace este número de días o más, se le mostrará un aviso para desalentar el hecho de revivir una antigua discusión. Deshabilita esta opción introduciendo el valor 0." autohighlight_all_code: "Forzar el resaltado de código a los bloques de código preformateado cuando no se especifique el lenguaje del código." - highlighted_languages: "Incluye reglas resaltadas de sintaxis. (Advertencia: incluyendo demasiadas lenguages puede afectar al rendimiento) ver: https://highlightjs.org/static/demo/ para una demostración" + highlighted_languages: "Incluye reglas resaltadas de sintaxis. (Advertencia: incluyendo demasiados lenguajes puede afectar al rendimiento) ver: https://highlightjs.org/static/demo/ para una demostración" feed_polling_enabled: "SOLO PARA EMBEBER: embeber feeds RSS/ATOM como posts." feed_polling_url: "SOLO PARA EMBEBER: URL de los feeds RSS/ATOM a embeber." embed_by_username: "Nombre de usuario en Discourse del que crea los temas embebidos." @@ -1062,6 +1064,10 @@ es: invalid_string_min: "Debe contener como mínimo %{min} caracteres. " invalid_string_max: "No debe exceder los %{max} caracteres. " invalid_reply_by_email_address: "El valor debe contener '%{reply_key}' y debe ser diferente del email de notificación." + pop3_polling_host_is_empty: "Debes establecer un host de 'pop3 polling' antes de activar el polling POP3." + pop3_polling_username_is_empty: "Debes establecer un usuario de 'pop3 polling' antes de activar el polling POP3." + pop3_polling_password_is_empty: "Debes establecer una contraseña de 'pop3 polling' antes de activar el polling POP3." + pop3_polling_authentication_failed: "La autenticación POP3 falló. Por favor, verifica tus credenciales pop3." notification_types: group_mentioned: "%{group_name} ha sido mencionado en %{link}" mentioned: "%{display_username} te ha mencionado en %{link}" diff --git a/config/locales/server.fi.yml b/config/locales/server.fi.yml index 4f08e349e..326545f52 100644 --- a/config/locales/server.fi.yml +++ b/config/locales/server.fi.yml @@ -108,6 +108,14 @@ fi: replies: one: "1 kommentti" other: "%{count} kommenttia" + no_mentions_allowed: "Pahoittelut, et voi mainita muita käyttäjiä." + too_many_mentions: + one: "Pahoittelut, voit mainita viestissä vain yhden käyttäjän." + other: "Pahoittelut, voit mainita viestissä vain %{count} käyttäjää." + no_mentions_allowed_newuser: "Pahoittelut, uusi käyttäjä ei voi mainita muita käyttäjiä." + too_many_mentions_newuser: + one: "Pahoittelut, uusi käyttäjä voi mainita viestissä vain yhden käyttäjän." + other: "Pahoittelut, uusi käyttäjä voi mainita viestissä vain %{count} käyttäjää." no_images_allowed: "Pahoittelut, uusi käyttäjä ei voi liittää kuvia viestiin." too_many_images: one: "Pahoittelut, uusi käyttäjä voi liittää vain yhden kuvan viestiin." @@ -291,7 +299,7 @@ fi: errors: uncategorized_parent: "Alueettomia ei voi asettaa toisen alueen alle" self_parent: "Alue ei voi olla itsensä ylempi alue." - depth: "Et voi laittaa alempia alueita sisäkkäin" + depth: "Alue ei voi olla tytäralueen tytäralue" email_in_already_exist: "Sisääntulevan sähköpostin osoite '%{email_in}' on jo käytössä alueella '%{category_name}'." cannot_delete: uncategorized: "Alueettomat-aluetta ei voi poistaa" @@ -477,6 +485,7 @@ fi: long_form: 'liputti tämän asiattomaksi' notify_moderators: title: "Jotain muuta" + description: 'Valvojan tulee huomioida tämä ketju palstan sääntöjen, palveluehtojen tai muun syyn vuoksi.' long_form: 'liputit tämän valvojille tiedoksi' email_title: 'Viestiketju"%{title}" kaipaa valvojan huomiota' email_body: "%{link}\n\n%{message}" @@ -702,7 +711,7 @@ fi: max_image_width: "Esikatselukuvan suurin sallittu leveys viestissä" max_image_height: "Esikatselukuvan suurin sallittu korkeus viestissä" category_featured_topics: "Näytettävien ketjujen lukumäärä alueittan Alueet-sivulla. Arvon muuttamisen jälkeen voi kestää jopa 15 minuuttia sivun päivittymiseen." - show_subcategory_list: "Näytä sisempien alueiden lista ketjulistauksen sijaan alueelle saavuttaessa." + show_subcategory_list: "Näytä lista tytäralueista ketjulistauksen sijaan alueelle saavuttaessa." fixed_category_positions: "Jos tämä on valittuna, voit muokata alueiden järjestystä. Jos tätä ei valita, alueet järjetsetään aktiivisuuden mukaan." fixed_category_positions_on_create: "Jos tämä on valittuna, alueiden järjestys pysyy samana uuden ketjun luomisen dialogissa (edellyttää fixed_category_positions)" add_rel_nofollow_to_user_content: "Lisää rel nofollow kaikkeen käyttäjien lähettämään sisältöön, paitsi sivuston sisäisiin linkkeihin (sisältäen ylemmät verkkotunnukset). Jos muutat asetusta, sinun täytyy rakentaa viestit uudelleen komennolla: \"rake posts:rebake\"" diff --git a/config/locales/server.it.yml b/config/locales/server.it.yml index 0fdf5d971..483057b3c 100644 --- a/config/locales/server.it.yml +++ b/config/locales/server.it.yml @@ -90,6 +90,8 @@ it: not_found: "L'URL o la risorsa richiesta non sono stati trovati." invalid_access: "Non hai il permesso di vedere la risorsa richiesta." read_only_mode_enabled: "Il sito è in modalità di sola lettura. Le interazioni sono disabilitate." + reading_time: "Tempo di lettura" + likes: "Mi piace" too_many_replies: one: "Spiacenti, ma i nuovi utenti possono inserire solo 1 risposta nello stesso argomento." other: "Spiacenti, ma i nuovi utenti possono inserire solo %{count} risposte nello stesso argomento." @@ -564,7 +566,9 @@ it: xaxis: "Giorno" yaxis: "Richieste API Totali" page_view_logged_in_mobile_reqs: + title: "Richieste API registrate" xaxis: "Giorno" + yaxis: "Richieste API da mobile registrate" page_view_anon_mobile_reqs: title: "Richieste anonime API" xaxis: "Giorno" @@ -611,6 +615,7 @@ it: host_names_warning: "Il tuo file config/database.yml usa l'hostname di default: localhost. Aggiornalo con l'hostname del tuo sito." gc_warning: 'Il tuo server usa i parametri di garbage collection di default di ruby, che potrebbero non garantirti le migliori prestazioni. Leggi questo argomento sulla taratura delle prestazioni: Tuning Ruby and Rails for Discourse.' sidekiq_warning: 'Sidekiq non è in esecuzione. Molte attività, come l''invio di email, sono eseguite in maniera asincrona da sidekiq. Assicurati che almeno un processo sidekiq sia in esecuzione. Leggi altro su sidekiq qui.' + queue_size_warning: 'Il numero di job in coda è %{queue_size}, il che è alto. Questo potrebbe indicare un problema con i processi Sidekiq, o potrebbe essere necessario aggiungere altri worker Sidekiq.' memory_warning: 'Il tuo server gira con meno di 1 GB di memoria. Si raccomanda almeno 1 GB di memoria.' google_oauth2_config_warning: 'Il server è configurato per permettere iscrizioni e login con Google Oauth2 (enable_google_oauth2_logins), ma il client id e il client secret non sono impostati. Vai nelle Impostazioni del sito e aggiorna le impostazioni. Leggi questa guida per saperne di più.' facebook_config_warning: 'Il server è configurato per accettare iscrizioni e login con Facebook (enable_facebook_logins), tuttavia i parametri app id e secret non sono stati impostati. Vai alle Impostazioni e aggiorna i campi interessati. Leggi questa guida per saperne di più.' @@ -619,6 +624,7 @@ it: s3_config_warning: 'Il server è configurato per caricare file su s3, ma almeno uno dei seguenti parametri non è impostato: s3_access_key_id, s3_secret_access_key, s3_upload_bucket. Vai nelle Impostazioni Sito e aggiorna i parametri. Leggi anche "How to set up image uploads to S3?" per saperne di più.' s3_backup_config_warning: 'Il server è configurato per caricare i backup su S3, ma almeno una delle seguenti impostazioni non è impostata: s3_access_key_id, s3_secret_access_key, s3_backup_bucket. Vai nelle Impostazioni Sito e aggiorna le impostazioni. Leggi anche "How to set up image uploads to S3?" per saperne di più.' image_magick_warning: 'Il server è configurato per creare miniature di immagini grandi, ma ImageMagick non è installato. Installa ImageMagick usando il tuo package manager preferito o scarica la versione più recente.' + failing_emails_warning: 'Ci sono %{num_failed_jobs} email job falliti. Controlla il tuo app.yml e assicurati che le impostazioni del server mail siano corrette. Vedi i job falliti in Sidekiq.' default_logo_warning: "Non hai personalizzato il logo del tuo sito. Aggiorna logo_url, logo_small_url e favicon_url nelle Impostazioni Sito." contact_email_missing: "Inserisci un indirizzo email di contatto per il sito, in modo da essere raggiungibile per questioni urgenti riguardanti il sito. Aggiornalo nelle Impostazioni Sito." contact_email_invalid: "La email di contatto non è valida. Aggiornala nelle Impostazioni Sito." @@ -627,6 +633,7 @@ it: consumer_email_warning: "Il tuo sito è configurato per usare Gmail (o un altro servizio email consumer) per inviare le email. Gmail limita il numero di email che puoi inviare. Considera l'utilizzo di un fornitore di servizi come mandrill.com per assicurare l'invio delle email." site_contact_username_warning: "Inserisci il nome di un membro dello staff da cui inviare messaggi importanti in maniera automatica. Aggiorna site_contact_username nelle Impostazioni Sito." notification_email_warning: "Le email di notifica non vengono inviate da un indirizzo email valido del tuo dominio; l'invio di email sarà inaffidabile. Definisci notification_email con un indirizzo email valido nelle Impostazioni Sito." + subfolder_ends_in_slash: "L'impostazione della sottocartella è errata; DISCOURSE_RELATIVE_URL_ROOT finisce con uno slash." site_settings: censored_words: "Parole che saranno automaticamente sostituite con ■■■■" delete_old_hidden_posts: "Cancella automaticamente tutti i messaggi nascosti che restano nascosti per più di 30 giorni." @@ -640,6 +647,7 @@ it: max_topic_title_length: "Numero massimo di caratteri per i titoli degli argomenti" min_private_message_title_length: "Numero minimo di caratteri per un messaggio" min_search_term_length: "Numero minimo di caratteri per le parole cercate" + search_tokenize_chinese_japanese_korean: "Attiva la tokenizzazione dei caratteri Cinesi/Giapponesi/Coreani nella ricerca anche sui siti non CJK" allow_uncategorized_topics: "Permetti la creazione di argomenti senza categoria. ATTENZIONE: se ci sono argomenti senza categoria, devi ricategorizzarli prima di disabilitare questa opzione." uncategorized_description: "La descrizione della categoria \"Non classificato\". Lascia vuoto per nessuna descrizione." allow_duplicate_topic_titles: "Permetti più argomenti con lo stesso identico titolo" @@ -669,6 +677,7 @@ it: post_excerpt_maxlength: "Lunghezza massima dell'estratto / riassunto di un messaggio." post_onebox_maxlength: "Lunghezza massima in caratteri di un messaggio Discourse in Onebox." onebox_domains_whitelist: "Lista di domini per i quali consentire la funzione di onebox; questi domini devono supportare OpenGraph o oEmbed. Testali su http://iframely.com/debug" + logo_url: "L'immagine nel logo in alto a sinistra del sito, dovrebbe essere larga e di forma rettangolare. Se non impostata, verrà usato il testo del titolo del sito." apple_touch_icon_url: "Icona usata per dispositivi touch Apple. La dimensione consigliata è 144 x 144 pixel." notification_email: "L'indirizzo presente nel campo from: usato per inviare tutte le email essenziali di sistema. Il dominio indicato deve avere i record SPF, DKIM e reverse PTR impostati correttamente perché l'email arrivi." email_custom_headers: "Una lista di intestazioni email personalizzate delimitata da una barra verticale (pipe |)" diff --git a/config/locales/server.ru.yml b/config/locales/server.ru.yml index 9d41d5821..8989ed87e 100644 --- a/config/locales/server.ru.yml +++ b/config/locales/server.ru.yml @@ -273,6 +273,10 @@ ru: title: "новый пользователь" basic: title: "базовый пользователь" + member: + title: "участник" + leader: + title: "лидер" change_failed_explanation: "Вы пытаетесь понизить пользователя %{user_name} до уровня доверия '%{new_trust_level}'. Однако, его уровень доверия уже '%{current_trust_level}'. %{user_name} останется с уровнем доверия '%{current_trust_level}'. Если вы все же хотите понизить пользователя, заблокируйте вначале уровень доверия." rate_limiter: too_many_requests: "Вы повторяете действие слишком часто. Пожалуйста, подождите %{time_left} до следующей попытки." @@ -725,7 +729,7 @@ ru: max_replies_in_first_day: "Максимальное количество ответов, которое пользователь может сделать в первый день на сайте" tl2_additional_likes_per_day_multiplier: "Увеличить лимит лайков в день для tl2 (member) до" tl3_additional_likes_per_day_multiplier: "Увеличить лимит лайков в день для tl3 (member) до" - tl4_additional_likes_per_day_multiplier: "Увеличить лимит лайков в день для tl4 (member) до" + tl4_additional_likes_per_day_multiplier: "Увеличить лимит лайков в день для tl4 (leader) до" num_flags_to_block_new_user: "Если сообщения нового пользователя получат данное количество жалоб на спам от num_users_to_block_new_user различных пользователей, скрыть все сообщения этого пользователя и отказать ему в публикации новых сообщений. 0 отключает данную функцию." num_users_to_block_new_user: "Если сообщения нового пользователя получат num_flags_to_block_new_user жалоб на спам от такого количества различных пользователей, скрыть все сообщения этого пользователя и отказать ему в публикации новых сообщений. 0 отключает данную функцию." notify_mods_when_user_blocked: "Отправить сообщение всем модераторам, если пользователь заблокирован автоматически." diff --git a/config/locales/server.zh_CN.yml b/config/locales/server.zh_CN.yml index 2bb1aedd1..04e26d6da 100644 --- a/config/locales/server.zh_CN.yml +++ b/config/locales/server.zh_CN.yml @@ -86,6 +86,8 @@ zh_CN: not_found: "请求的 URL 或资源未找到。" invalid_access: "你没有权限查看请求的资源。" read_only_mode_enabled: "这个站点正处于只读模式。交互功能已禁用。" + reading_time: "阅读时间" + likes: "赞" too_many_replies: other: "我们非常抱歉,但是新用户被临时限制为在同一个主题只能回复 %{count} 次" embed: @@ -1573,6 +1575,7 @@ zh_CN: unsubscribe: title: "取消订阅" description: "不再对这些邮件感兴趣?没问题!点击下面按钮来立即取消订阅:" + visit_link_to_respond: "回复,[visit the topic](%{base_url}%{url})。" posted_by: "%{username}发表于%{post_date}" user_invited_to_private_message_pm: subject_template: "[%{site_name}] %{username} 邀请你加入消息交流:'%{topic_title}'" @@ -1616,6 +1619,14 @@ zh_CN: subject_template: "[%{site_name}] %{topic_title}" user_posted_pm: subject_template: "[%{site_name}] [PM] %{topic_title}" + user_posted_pm_staged: + subject_template: "%{optional_re}%{topic_title}" + text_body_template: |2 + + %{message} + + --- + %{respond_instructions} digest: why: "在你上一次于 %{last_seen_at} 访问后,%{site_link}的简洁摘要。" subject_template: "[%{site_name}] 摘要" diff --git a/plugins/poll/config/locales/client.fi.yml b/plugins/poll/config/locales/client.fi.yml index e686f8e6a..0ac4206e5 100644 --- a/plugins/poll/config/locales/client.fi.yml +++ b/plugins/poll/config/locales/client.fi.yml @@ -10,7 +10,7 @@ fi: poll: voters: one: "äänestäjä" - other: "äänestäjät" + other: "äänestäjää" total_votes: one: "ääni" other: "ääntä" diff --git a/public/403.ko.html b/public/403.ko.html index cbf427be1..2e6cb00d5 100644 --- a/public/403.ko.html +++ b/public/403.ko.html @@ -20,7 +20,7 @@

    403

    해당 내용을 보실 수 없습니다.

    -

    Discourse 403 오류 페이지로 대체됩니다.

    +

    Discourse 자체 403 오류 페이지로 대체됩니다.

    From 1a223b9d10cdfd55898c25f9217a54153a373039 Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Fri, 8 Jan 2016 15:56:55 -0500 Subject: [PATCH 047/185] Version bump to v1.5.0.beta8 --- lib/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/version.rb b/lib/version.rb index f5a521ac6..d89abb8fe 100644 --- a/lib/version.rb +++ b/lib/version.rb @@ -5,7 +5,7 @@ module Discourse MAJOR = 1 MINOR = 5 TINY = 0 - PRE = 'beta7' + PRE = 'beta8' STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.') end From 6fabb341f1041a3671727d8aacff3e63a82ff181 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 10 Jan 2016 16:46:11 +1100 Subject: [PATCH 048/185] FEATURE: automatically archive welcome messages for site_contact_user This de-clutters the sent messages box for site_contact_user, making it again usable --- ...archive_system_messages_with_no_replies.rb | 24 +++++++++++++++++++ lib/system_message.rb | 7 +++++- spec/components/system_message_spec.rb | 17 ++++++++----- 3 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 db/migrate/20160110053003_archive_system_messages_with_no_replies.rb diff --git a/db/migrate/20160110053003_archive_system_messages_with_no_replies.rb b/db/migrate/20160110053003_archive_system_messages_with_no_replies.rb new file mode 100644 index 000000000..da9b1d71c --- /dev/null +++ b/db/migrate/20160110053003_archive_system_messages_with_no_replies.rb @@ -0,0 +1,24 @@ +class ArchiveSystemMessagesWithNoReplies < ActiveRecord::Migration + def up + # backdate archival of system messages send on behalf of site_contact_user + execute < Date: Mon, 11 Jan 2016 17:30:56 +1100 Subject: [PATCH 049/185] Update annotate and annotate models --- Gemfile.lock | 4 ++-- app/models/category.rb | 1 + app/models/category_user.rb | 5 +++++ app/models/group.rb | 5 ++++- app/models/group_archived_message.rb | 15 +++++++++++++++ app/models/group_mention.rb | 16 ++++++++++++++++ app/models/group_user.rb | 13 +++++++------ app/models/translation_override.rb | 16 ++++++++++++++++ app/models/user.rb | 1 + app/models/user_archived_message.rb | 15 +++++++++++++++ 10 files changed, 82 insertions(+), 9 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 120c0a64d..edd7ca733 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -38,8 +38,8 @@ GEM minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - annotate (2.6.10) - activerecord (>= 3.2, <= 4.3) + annotate (2.7.0) + activerecord (>= 3.2, < 6.0) rake (~> 10.4) arel (6.0.3) aws-sdk (2.1.29) diff --git a/app/models/category.rb b/app/models/category.rb index 0ee810e64..7ada616b8 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -474,6 +474,7 @@ end # auto_close_based_on_last_post :boolean default(FALSE) # topic_template :text # suppress_from_homepage :boolean default(FALSE) +# contains_messages :boolean default(FALSE), not null # # Indexes # diff --git a/app/models/category_user.rb b/app/models/category_user.rb index cd7b719af..2922b6858 100644 --- a/app/models/category_user.rb +++ b/app/models/category_user.rb @@ -108,3 +108,8 @@ end # user_id :integer not null # notification_level :integer not null # +# Indexes +# +# idx_category_users_u1 (user_id,category_id,notification_level) UNIQUE +# idx_category_users_u2 (category_id,user_id,notification_level) UNIQUE +# diff --git a/app/models/group.rb b/app/models/group.rb index 925c3d709..a508335a7 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -442,8 +442,11 @@ end # primary_group :boolean default(FALSE), not null # title :string(255) # grant_trust_level :integer +# incoming_email :string +# has_messages :boolean default(FALSE), not null # # Indexes # -# index_groups_on_name (name) UNIQUE +# index_groups_on_incoming_email (incoming_email) UNIQUE +# index_groups_on_name (name) UNIQUE # diff --git a/app/models/group_archived_message.rb b/app/models/group_archived_message.rb index 7c346518e..b32092cb3 100644 --- a/app/models/group_archived_message.rb +++ b/app/models/group_archived_message.rb @@ -2,3 +2,18 @@ class GroupArchivedMessage < ActiveRecord::Base belongs_to :user belongs_to :topic end + +# == Schema Information +# +# Table name: group_archived_messages +# +# id :integer not null, primary key +# group_id :integer not null +# topic_id :integer not null +# created_at :datetime +# updated_at :datetime +# +# Indexes +# +# index_group_archived_messages_on_group_id_and_topic_id (group_id,topic_id) UNIQUE +# diff --git a/app/models/group_mention.rb b/app/models/group_mention.rb index 65faeb6f0..30eb647eb 100644 --- a/app/models/group_mention.rb +++ b/app/models/group_mention.rb @@ -2,3 +2,19 @@ class GroupMention < ActiveRecord::Base belongs_to :post belongs_to :group end + +# == Schema Information +# +# Table name: group_mentions +# +# id :integer not null, primary key +# post_id :integer +# group_id :integer +# created_at :datetime +# updated_at :datetime +# +# Indexes +# +# index_group_mentions_on_group_id_and_post_id (group_id,post_id) UNIQUE +# index_group_mentions_on_post_id_and_group_id (post_id,group_id) UNIQUE +# diff --git a/app/models/group_user.rb b/app/models/group_user.rb index e3129ebc4..ddd0de85f 100644 --- a/app/models/group_user.rb +++ b/app/models/group_user.rb @@ -61,12 +61,13 @@ end # # Table name: group_users # -# id :integer not null, primary key -# group_id :integer not null -# user_id :integer not null -# created_at :datetime not null -# updated_at :datetime not null -# owner :boolean default(FALSE), not null +# id :integer not null, primary key +# group_id :integer not null +# user_id :integer not null +# created_at :datetime not null +# updated_at :datetime not null +# owner :boolean default(FALSE), not null +# notification_level :integer default(3), not null # # Indexes # diff --git a/app/models/translation_override.rb b/app/models/translation_override.rb index a433605e8..3046832e6 100644 --- a/app/models/translation_override.rb +++ b/app/models/translation_override.rb @@ -22,3 +22,19 @@ class TranslationOverride < ActiveRecord::Base end end + +# == Schema Information +# +# Table name: translation_overrides +# +# id :integer not null, primary key +# locale :string not null +# translation_key :string not null +# value :string not null +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_translation_overrides_on_locale_and_translation_key (locale,translation_key) UNIQUE +# diff --git a/app/models/user.rb b/app/models/user.rb index 0c2d99896..0d81fa1b9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1091,6 +1091,7 @@ end # edit_history_public :boolean default(FALSE), not null # trust_level_locked :boolean default(FALSE), not null # staged :boolean default(FALSE), not null +# automatically_unpin_topics :boolean default(TRUE) # # Indexes # diff --git a/app/models/user_archived_message.rb b/app/models/user_archived_message.rb index b24c26b54..3f7c94e47 100644 --- a/app/models/user_archived_message.rb +++ b/app/models/user_archived_message.rb @@ -2,3 +2,18 @@ class UserArchivedMessage < ActiveRecord::Base belongs_to :user belongs_to :topic end + +# == Schema Information +# +# Table name: user_archived_messages +# +# id :integer not null, primary key +# user_id :integer not null +# topic_id :integer not null +# created_at :datetime +# updated_at :datetime +# +# Indexes +# +# index_user_archived_messages_on_user_id_and_topic_id (user_id,topic_id) UNIQUE +# From 341714e2701f924b35bec625f76176f87295177d Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Mon, 11 Jan 2016 17:35:09 +1100 Subject: [PATCH 050/185] various gem updates --- Gemfile.lock | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index edd7ca733..b5057c9d2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -42,12 +42,12 @@ GEM activerecord (>= 3.2, < 6.0) rake (~> 10.4) arel (6.0.3) - aws-sdk (2.1.29) - aws-sdk-resources (= 2.1.29) - aws-sdk-core (2.1.29) + aws-sdk (2.2.9) + aws-sdk-resources (= 2.2.9) + aws-sdk-core (2.2.9) jmespath (~> 1.0) - aws-sdk-resources (2.1.29) - aws-sdk-core (= 2.1.29) + aws-sdk-resources (2.2.9) + aws-sdk-core (= 2.2.9) babel-source (5.8.19) babel-transpiler (0.7.0) babel-source (>= 4.0, < 6) @@ -120,7 +120,7 @@ GEM globalid (0.3.6) activesupport (>= 4.1.0) guess_html_encoding (0.0.11) - hashie (3.4.2) + hashie (3.4.3) highline (1.7.7) hike (1.2.3) hiredis (0.6.0) @@ -155,7 +155,7 @@ GEM lru_redux (1.1.0) mail (2.6.3) mime-types (>= 1.16, < 3) - memory_profiler (0.9.4) + memory_profiler (0.9.6) message_bus (2.0.0.beta.2) rack (>= 1.1.3) redis @@ -185,7 +185,7 @@ GEM multi_json (~> 1.3) multi_xml (~> 0.5) rack (~> 1.2) - oj (2.12.14) + oj (2.14.3) omniauth (1.2.2) hashie (>= 1.2, < 4) rack (~> 1.0) @@ -217,9 +217,9 @@ GEM openid-redis-store (0.0.2) redis ruby-openid - pg (0.18.3) + pg (0.18.4) progress (3.1.0) - pry (0.10.1) + pry (0.10.3) coderay (~> 1.1.0) method_source (~> 0.8.1) slop (~> 3.4) @@ -338,10 +338,9 @@ GEM shoulda-context (1.2.1) shoulda-matchers (2.7.0) activesupport (>= 3.0.0) - sidekiq (4.0.1) + sidekiq (4.0.2) concurrent-ruby (~> 1.0) connection_pool (~> 2.2, >= 2.2.0) - json (~> 1.0) redis (~> 3.2, >= 3.2.1) sidekiq-statistic (1.2.0) sidekiq (>= 3.3.4, < 5) From 61650edfd487a2b118afd44517368525cf7f692e Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Mon, 11 Jan 2016 18:17:13 +1100 Subject: [PATCH 051/185] big gem update --- Gemfile | 4 +++- Gemfile.lock | 68 ++++++++++++++++++++++++++-------------------------- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/Gemfile b/Gemfile index 5443439ff..3fba8be65 100644 --- a/Gemfile +++ b/Gemfile @@ -83,7 +83,9 @@ gem 'omniauth-twitter' gem 'omniauth-github-discourse', require: 'omniauth-github' gem 'omniauth-oauth2', require: false -gem 'omniauth-google-oauth2' + +# see: https://github.com/zquestz/omniauth-google-oauth2/pull/193#issuecomment-170447701 +gem 'omniauth-google-oauth2', '0.2.6' gem 'oj' gem 'pg' gem 'pry-rails', require: false diff --git a/Gemfile.lock b/Gemfile.lock index b5057c9d2..4a93fb3ff 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -48,7 +48,7 @@ GEM jmespath (~> 1.0) aws-sdk-resources (2.2.9) aws-sdk-core (= 2.2.9) - babel-source (5.8.19) + babel-source (5.8.34) babel-transpiler (0.7.0) babel-source (>= 4.0, < 6) execjs (~> 2.0) @@ -62,7 +62,7 @@ GEM binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) builder (3.2.2) - byebug (6.0.2) + byebug (8.2.1) certified (1.0.0) coderay (1.1.0) concurrent-ruby (1.0.0) @@ -94,10 +94,10 @@ GEM eventmachine (1.0.8) excon (0.45.4) execjs (2.6.0) - exifr (1.2.3.1) + exifr (1.2.4) fabrication (2.9.8) fakeweb (1.3.0) - faraday (0.9.1) + faraday (0.9.2) multipart-post (>= 1.2, < 3) fast_blank (1.0.0) fast_stack (0.1.0) @@ -115,15 +115,15 @@ GEM thor (~> 0.19.1) fspath (2.1.1) gctools (0.2.3) - given_core (3.5.4) + given_core (3.7.1) sorcerer (>= 0.3.7) globalid (0.3.6) activesupport (>= 4.1.0) guess_html_encoding (0.0.11) hashie (3.4.3) - highline (1.7.7) + highline (1.7.8) hike (1.2.3) - hiredis (0.6.0) + hiredis (0.6.1) htmlentities (4.3.4) http-cookie (1.0.2) domain_name (~> 0.5) @@ -142,12 +142,12 @@ GEM railties (>= 4.2.0) thor (>= 0.14, < 2.0) json (1.8.3) - jwt (1.5.1) + jwt (1.5.2) kgio (2.10.0) librarian (0.1.2) highline thor (~> 0.15) - libv8 (3.16.14.11) + libv8 (3.16.14.13) listen (0.7.3) logster (1.0.1) loofah (2.0.3) @@ -166,9 +166,9 @@ GEM minitest (5.8.3) mocha (1.1.0) metaclass (~> 0.0.1) - mock_redis (0.15.2) + mock_redis (0.15.4) moneta (0.8.0) - msgpack (0.6.2) + msgpack (0.7.4) multi_json (1.11.2) multi_xml (0.5.5) multipart-post (2.0.0) @@ -176,7 +176,7 @@ GEM netrc (0.11.0) nokogiri (1.6.7.1) mini_portile2 (~> 2.0.0.rc2) - nokogumbo (1.4.1) + nokogumbo (1.4.7) nokogiri oauth (0.4.7) oauth2 (1.0.0) @@ -186,21 +186,21 @@ GEM multi_xml (~> 0.5) rack (~> 1.2) oj (2.14.3) - omniauth (1.2.2) + omniauth (1.3.1) hashie (>= 1.2, < 4) - rack (~> 1.0) - omniauth-facebook (2.0.1) + rack (>= 1.0, < 3) + omniauth-facebook (3.0.0) omniauth-oauth2 (~> 1.2) omniauth-github-discourse (1.1.2) omniauth (~> 1.0) omniauth-oauth2 (~> 1.1) - omniauth-google-oauth2 (0.2.5) + omniauth-google-oauth2 (0.2.6) omniauth (> 1.0) omniauth-oauth2 (~> 1.1) omniauth-oauth (1.1.0) oauth omniauth (~> 1.0) - omniauth-oauth2 (1.3.1) + omniauth-oauth2 (1.4.0) oauth2 (~> 1.0) omniauth (~> 1.2) omniauth-openid (1.0.1) @@ -218,7 +218,7 @@ GEM redis ruby-openid pg (0.18.4) - progress (3.1.0) + progress (3.1.1) pry (0.10.3) coderay (~> 1.1.0) method_source (~> 0.8.1) @@ -227,10 +227,10 @@ GEM pry (>= 0.9.10, < 0.11.0) pry-rails (0.3.4) pry (>= 0.9.10) - puma (2.14.0) - r2 (0.2.5) + puma (2.15.3) + r2 (0.2.6) rack (1.6.4) - rack-mini-profiler (0.9.7) + rack-mini-profiler (0.9.8) rack (>= 1.1.3) rack-openid (1.3.1) rack (>= 1.1.0) @@ -270,7 +270,7 @@ GEM rake (10.4.2) rake-compiler (0.9.5) rake - rb-fsevent (0.9.6) + rb-fsevent (0.9.7) rb-inotify (0.9.5) ffi (>= 0.5.0) rbtrace (0.4.7) @@ -296,16 +296,16 @@ GEM rspec-expectations (3.2.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.2.0) - rspec-given (3.5.4) - given_core (= 3.5.4) - rspec (>= 2.12) + rspec-given (3.7.1) + given_core (= 3.7.1) + rspec (>= 2.14.0) rspec-html-matchers (0.7.0) nokogiri (~> 1) rspec (~> 3) rspec-mocks (3.2.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.2.0) - rspec-rails (3.2.1) + rspec-rails (3.2.3) actionpack (>= 3.0, < 4.3) activesupport (>= 3.0, < 4.3) railties (>= 3.0, < 4.3) @@ -319,10 +319,10 @@ GEM ruby-readability (0.7.0) guess_html_encoding (>= 0.0.4) nokogiri (>= 1.6.0) - sanitize (4.0.0) + sanitize (4.0.1) crass (~> 1.0.2) nokogiri (>= 1.4.4) - nokogumbo (= 1.4.1) + nokogumbo (~> 1.4.1) sass (3.2.19) sass-rails (4.0.5) railties (>= 4.0.0, < 5.0) @@ -336,7 +336,7 @@ GEM shoulda-context (~> 1.0, >= 1.0.1) shoulda-matchers (>= 1.4.1, < 3.0) shoulda-context (1.2.1) - shoulda-matchers (2.7.0) + shoulda-matchers (2.8.0) activesupport (>= 3.0.0) sidekiq (4.0.2) concurrent-ruby (~> 1.0) @@ -345,7 +345,7 @@ GEM sidekiq-statistic (1.2.0) sidekiq (>= 3.3.4, < 5) simple-rss (1.3.1) - simplecov (0.10.0) + simplecov (0.11.1) docile (~> 1.1.0) json (~> 1.8) simplecov-html (~> 0.10.0) @@ -381,7 +381,7 @@ GEM thread_safe (0.3.5) tilt (1.4.1) timecop (0.8.0) - trollop (2.1.1) + trollop (2.1.2) tzinfo (1.2.2) thread_safe (~> 0.1) uglifier (2.7.2) @@ -389,8 +389,8 @@ GEM json (>= 1.8.0) unf (0.1.4) unf_ext - unf_ext (0.0.6) - unicorn (4.9.0) + unf_ext (0.0.7.1) + unicorn (5.0.1) kgio (~> 2.6) rack raindrops (~> 0.7) @@ -444,7 +444,7 @@ DEPENDENCIES omniauth omniauth-facebook omniauth-github-discourse - omniauth-google-oauth2 + omniauth-google-oauth2 (= 0.2.6) omniauth-oauth2 omniauth-openid omniauth-twitter From cf4cb2126a026f8240e5d0bc2ea97e8ebb206b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Mon, 11 Jan 2016 11:16:23 +0100 Subject: [PATCH 052/185] FIX: word_count wasn't working with non-latin sentences --- lib/post_creator.rb | 2 +- lib/post_revisor.rb | 2 +- spec/components/post_creator_spec.rb | 6 +++--- spec/components/post_revisor_spec.rb | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/post_creator.rb b/lib/post_creator.rb index 4d2b158b8..2d54204d9 100644 --- a/lib/post_creator.rb +++ b/lib/post_creator.rb @@ -172,7 +172,7 @@ class PostCreator def self.before_create_tasks(post) set_reply_info(post) - post.word_count = post.raw.scan(/\w+/).size + post.word_count = post.raw.scan(/[[:word:]]+/).size post.post_number ||= Topic.next_post_number(post.topic_id, post.reply_to_post_number.present?) cooking_options = post.cooking_options || {} diff --git a/lib/post_revisor.rb b/lib/post_revisor.rb index e08186420..873be66e0 100644 --- a/lib/post_revisor.rb +++ b/lib/post_revisor.rb @@ -229,7 +229,7 @@ class PostRevisor end @post.last_editor_id = @editor.id - @post.word_count = @fields[:raw].scan(/\w+/).size if @fields.has_key?(:raw) + @post.word_count = @fields[:raw].scan(/[[:word:]]+/).size if @fields.has_key?(:raw) @post.self_edits += 1 if self_edit? remove_flags_and_unhide_post diff --git a/spec/components/post_creator_spec.rb b/spec/components/post_creator_spec.rb index 2cdef4aef..958cdbd8e 100644 --- a/spec/components/post_creator_spec.rb +++ b/spec/components/post_creator_spec.rb @@ -595,12 +595,12 @@ describe PostCreator do describe "word_count" do it "has a word count" do - creator = PostCreator.new(user, title: 'some inspired poetry for a rainy day', raw: 'mary had a little lamb, little lamb, little lamb. mary had a little lamb') + creator = PostCreator.new(user, title: 'some inspired poetry for a rainy day', raw: 'mary had a little lamb, little lamb, little lamb. mary had a little lamb. Здравствуйте') post = creator.create - expect(post.word_count).to eq(14) + expect(post.word_count).to eq(15) post.topic.reload - expect(post.topic.word_count).to eq(14) + expect(post.topic.word_count).to eq(15) end end diff --git a/spec/components/post_revisor_spec.rb b/spec/components/post_revisor_spec.rb index 0c035fcea..4667ede9c 100644 --- a/spec/components/post_revisor_spec.rb +++ b/spec/components/post_revisor_spec.rb @@ -278,14 +278,14 @@ describe PostRevisor do describe 'with a new body' do let(:changed_by) { Fabricate(:coding_horror) } - let!(:result) { subject.revise!(changed_by, { raw: "lets update the body" }) } + let!(:result) { subject.revise!(changed_by, { raw: "lets update the body. Здравствуйте" }) } it 'returns true' do expect(result).to eq(true) end it 'updates the body' do - expect(post.raw).to eq("lets update the body") + expect(post.raw).to eq("lets update the body. Здравствуйте") end it 'sets the invalidate oneboxes attribute' do @@ -306,9 +306,9 @@ describe PostRevisor do end it "updates the word count" do - expect(post.word_count).to eq(4) + expect(post.word_count).to eq(5) post.topic.reload - expect(post.topic.word_count).to eq(4) + expect(post.topic.word_count).to eq(5) end context 'second poster posts again quickly' do From 770adbaf7198a90100f17ade5e336ad2301c92c8 Mon Sep 17 00:00:00 2001 From: Jeff Atwood Date: Mon, 11 Jan 2016 02:53:28 -0800 Subject: [PATCH 053/185] gzip 9 takes 2x as long as 7 for +0.1% compression --- lib/tasks/assets.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/assets.rake b/lib/tasks/assets.rake index 030e4db2e..475678efc 100644 --- a/lib/tasks/assets.rake +++ b/lib/tasks/assets.rake @@ -135,7 +135,7 @@ end def gzip(path) STDERR.puts "gzip #{path}" - STDERR.puts `gzip -f -c -9 #{path} > #{path}.gz` + STDERR.puts `gzip -f -c -7 #{path} > #{path}.gz` end def compress(from,to) From 4d8eb2514863c25e237f90d7151598b37ab9a9b7 Mon Sep 17 00:00:00 2001 From: Jeff Atwood Date: Mon, 11 Jan 2016 03:03:14 -0800 Subject: [PATCH 054/185] let's explicitly use gzip level 5 here see http://tukaani.org/lzma/benchmarks.html --- lib/backup_restore/backuper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/backup_restore/backuper.rb b/lib/backup_restore/backuper.rb index 0b3b26656..b55d73590 100644 --- a/lib/backup_restore/backuper.rb +++ b/lib/backup_restore/backuper.rb @@ -258,7 +258,7 @@ module BackupRestore end log "Gzipping archive..." - `gzip #{tar_filename}` + `gzip -5 #{tar_filename}` end def after_create_hook From 1a8487cf7b61ebf64820d26cf8e36d1c3d308fe8 Mon Sep 17 00:00:00 2001 From: Jeff Atwood Date: Mon, 11 Jan 2016 03:13:37 -0800 Subject: [PATCH 055/185] we want screw_ie8 here as we don't support IE9 --- lib/tasks/assets.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/assets.rake b/lib/tasks/assets.rake index 475678efc..040f70e2b 100644 --- a/lib/tasks/assets.rake +++ b/lib/tasks/assets.rake @@ -122,7 +122,7 @@ def compress_ruby(from,to) data = File.read("#{assets_path}/#{from}") uglified, map = Uglifier.new(comments: :none, - screw_ie8: false, + screw_ie8: true, source_filename: File.basename(from), output_filename: File.basename(to) ) From 98c0fac4618d8ce5ed8881c0883d39bc93383f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Mon, 11 Jan 2016 12:42:06 +0100 Subject: [PATCH 056/185] FEATURE: add small action post when adding/removing users in messages --- .../discourse/components/small-action.js.es6 | 28 +++++++++++-------- app/controllers/topics_controller.rb | 2 +- app/models/topic.rb | 21 ++++++++++++-- app/serializers/post_serializer.rb | 11 +++++++- config/locales/client.en.yml | 2 ++ lib/topic_view.rb | 7 ++++- spec/models/topic_spec.rb | 7 ++++- 7 files changed, 61 insertions(+), 17 deletions(-) diff --git a/app/assets/javascripts/discourse/components/small-action.js.es6 b/app/assets/javascripts/discourse/components/small-action.js.es6 index 54ef41b9f..567436348 100644 --- a/app/assets/javascripts/discourse/components/small-action.js.es6 +++ b/app/assets/javascripts/discourse/components/small-action.js.es6 @@ -1,4 +1,5 @@ -import { relativeAge } from 'discourse/lib/formatter'; +import { autoUpdatingRelativeAge } from 'discourse/lib/formatter'; +import computed from 'ember-addons/ember-computed-decorators'; const icons = { 'closed.enabled': 'lock', @@ -13,16 +14,20 @@ const icons = { 'pinned_globally.disabled': 'thumb-tack unpinned', 'visible.enabled': 'eye', 'visible.disabled': 'eye-slash', - 'split_topic': 'sign-out' + 'split_topic': 'sign-out', + 'invited_user': 'plus-circle', + 'removed_user': 'minus-circle' }; -export function actionDescription(actionCode, createdAt) { +export function actionDescription(actionCode, createdAt, username) { return function() { const ac = this.get(actionCode); if (ac) { const dt = new Date(this.get(createdAt)); - const when = relativeAge(dt, {format: 'medium-with-ago'}); - return I18n.t(`action_codes.${ac}`, {when}).htmlSafe(); + const when = autoUpdatingRelativeAge(dt, { format: 'medium-with-ago' }); + const u = this.get(username); + const who = u ? `@${u}` : ""; + return I18n.t(`action_codes.${ac}`, { who, when }).htmlSafe(); } }.property(actionCode, createdAt); } @@ -31,18 +36,19 @@ export default Ember.Component.extend({ layoutName: 'components/small-action', // needed because `time-gap` inherits from this classNames: ['small-action'], - description: actionDescription('actionCode', 'post.created_at'), + description: actionDescription('actionCode', 'post.created_at', 'post.action_code_who'), - icon: function() { - return icons[this.get('actionCode')] || 'exclamation'; - }.property('actionCode'), + @computed("actionCode") + icon(actionCode) { + return icons[actionCode] || 'exclamation'; + }, actions: { - edit: function() { + edit() { this.sendAction('editPost', this.get('post')); }, - delete: function() { + delete() { this.sendAction('deletePost', this.get('post')); } } diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index b049438b6..4a9c0fec3 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -347,7 +347,7 @@ class TopicsController < ApplicationController topic = Topic.find_by(id: params[:topic_id]) guardian.ensure_can_remove_allowed_users!(topic) - if topic.remove_allowed_user(params[:username]) + if topic.remove_allowed_user(current_user, params[:username]) render json: success_json else render json: failed_json, status: 422 diff --git a/app/models/topic.rb b/app/models/topic.rb index 5f470c509..022efc498 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -524,7 +524,8 @@ class Topic < ActiveRecord::Base no_bump: opts[:bump].blank?, skip_notifications: opts[:skip_notifications], topic_id: self.id, - skip_validations: true) + skip_validations: true, + custom_fields: opts[:custom_fields]) new_post = creator.create increment!(:moderator_posts_count) if new_post.persisted? @@ -557,11 +558,19 @@ class Topic < ActiveRecord::Base changed_to_category(cat) end - def remove_allowed_user(username) + def remove_allowed_user(removed_by, username) if user = User.find_by(username: username) topic_user = topic_allowed_users.find_by(user_id: user.id) if topic_user topic_user.destroy + # add small action + self.add_moderator_post( + removed_by, + nil, + post_type: Post.types[:small_action], + action_code: "removed_user", + custom_fields: { action_code_who: user.username } + ) return true end end @@ -575,6 +584,14 @@ class Topic < ActiveRecord::Base # If the user exists, add them to the message. user = User.find_by_username_or_email(username_or_email) if user && topic_allowed_users.create!(user_id: user.id) + # Create a small action message + self.add_moderator_post( + invited_by, + nil, + post_type: Post.types[:small_action], + action_code: "invited_user", + custom_fields: { action_code_who: user.username } + ) # Notify the user they've been invited user.notifications.create(notification_type: Notification.types[:invited_to_private_message], diff --git a/app/serializers/post_serializer.rb b/app/serializers/post_serializer.rb index 259c781d2..2fd245c45 100644 --- a/app/serializers/post_serializer.rb +++ b/app/serializers/post_serializer.rb @@ -62,7 +62,8 @@ class PostSerializer < BasicPostSerializer :user_custom_fields, :static_doc, :via_email, - :action_code + :action_code, + :action_code_who def initialize(object, opts) super(object, opts) @@ -313,6 +314,14 @@ class PostSerializer < BasicPostSerializer object.action_code.present? end + def action_code_who + post_custom_fields["action_code_who"] + end + + def include_action_code_who? + include_action_code? && action_code_who.present? + end + private def post_actions diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 80f7a596f..f8df19ae1 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -121,6 +121,8 @@ en: action_codes: split_topic: "split this topic %{when}" + invited_user: "invited %{who} %{when}" + removed_user: "removed %{who} %{when}" autoclosed: enabled: 'closed %{when}' disabled: 'opened %{when}' diff --git a/lib/topic_view.rb b/lib/topic_view.rb index 7db989d45..9072610f5 100644 --- a/lib/topic_view.rb +++ b/lib/topic_view.rb @@ -16,6 +16,10 @@ class TopicView 20 end + def self.default_post_custom_fields + @default_post_custom_fields ||= ["action_code_who"] + end + def self.post_custom_fields_whitelisters @post_custom_fields_whitelisters ||= Set.new end @@ -25,7 +29,8 @@ class TopicView end def self.whitelisted_post_custom_fields(user) - post_custom_fields_whitelisters.map { |w| w.call(user) }.flatten.uniq + wpcf = default_post_custom_fields + post_custom_fields_whitelisters.map { |w| w.call(user) } + wpcf.flatten.uniq end def initialize(topic_id, user=nil, options={}) diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb index 6a8eb9d76..b5d15f36e 100644 --- a/spec/models/topic_spec.rb +++ b/spec/models/topic_spec.rb @@ -378,7 +378,7 @@ describe Topic do expect(topic.invite(topic.user, walter.username)).to eq(true) expect(topic.allowed_users.include?(walter)).to eq(true) - expect(topic.remove_allowed_user(walter.username)).to eq(true) + expect(topic.remove_allowed_user(topic.user, walter.username)).to eq(true) topic.reload expect(topic.allowed_users.include?(walter)).to eq(false) end @@ -386,6 +386,11 @@ describe Topic do it 'creates a notification' do expect { topic.invite(topic.user, walter.username) }.to change(Notification, :count) end + + it 'creates a small action post' do + expect { topic.invite(topic.user, walter.username) }.to change(Post, :count) + expect { topic.remove_allowed_user(topic.user, walter.username) }.to change(Post, :count) + end end context 'by email' do From 7350b6c6e60ee1e49a2e7c02819354bd2af4a12c Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Mon, 11 Jan 2016 22:40:59 +1100 Subject: [PATCH 057/185] UX: improve user page styling --- .../controllers/user-private-messages.js.es6 | 4 +- .../discourse/templates/user/activity.hbs | 2 +- .../templates/user/notifications.hbs | 2 +- .../discourse/templates/user/user.hbs | 6 ++- .../stylesheets/common/admin/admin_base.scss | 2 +- app/assets/stylesheets/desktop/user.scss | 39 ++++++++++++++----- 6 files changed, 40 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/user-private-messages.js.es6 b/app/assets/javascripts/discourse/controllers/user-private-messages.js.es6 index c51bf4072..09dc372da 100644 --- a/app/assets/javascripts/discourse/controllers/user-private-messages.js.es6 +++ b/app/assets/javascripts/discourse/controllers/user-private-messages.js.es6 @@ -3,9 +3,9 @@ import Topic from 'discourse/models/topic'; export default Ember.Controller.extend({ - needs: ["user-topics-list"], + needs: ["user-topics-list", "user"], pmView: false, - + viewingSelf: Em.computed.alias("controllers.user.viewingSelf"), isGroup: Em.computed.equal('pmView', 'groups'), selected: Em.computed.alias('controllers.user-topics-list.selected'), diff --git a/app/assets/javascripts/discourse/templates/user/activity.hbs b/app/assets/javascripts/discourse/templates/user/activity.hbs index 01bc42ee1..e94b740c9 100644 --- a/app/assets/javascripts/discourse/templates/user/activity.hbs +++ b/app/assets/javascripts/discourse/templates/user/activity.hbs @@ -1,5 +1,5 @@
    -