rainbows category:"parks and gardens" in:bookmarks ブックマークされている"parks and gardens"カテゴリの中で、"rainbows"という言葉を含むトピックを検索します。
+
+
badges:
+ editor:
+ name: 編集者
+ description: 最初の投稿を編集する
+ autobiographer:
+ name: あなたはだれ?
+ description: プロフィールをすべて書く
+ nice_post:
+ name: ナイスな返事
+ good_post:
+ name: イカす返事
+ great_post:
+ name: 素晴らしい返事
+ nice_topic:
+ name: ナイスなトピック
+ good_topic:
+ name: イカすトピック
first_flag:
name: はじめの通報
description: 通報した投稿
+ read_guidelines:
+ description: ガイドラインを読む
+ popular_link:
+ name: 人気のリンク
+ hot_link:
+ name: ウワサのリンク
+ famous_link:
+ name: 伝説のリンク
+ first_emoji:
+ name: はじめての絵文字
admin_login:
success: "メールを送信しました"
error: "エラー!"
diff --git a/config/locales/server.pt.yml b/config/locales/server.pt.yml
index 35f64b1d6..eb4c8272d 100644
--- a/config/locales/server.pt.yml
+++ b/config/locales/server.pt.yml
@@ -24,7 +24,7 @@ pt:
loading: "A carregar"
powered_by_html: 'Desenvolvido por Discourse, e melhor visualizado com o JavaScript ativo'
log_in: "Iniciar Sessão"
- purge_reason: "Automaticamente eliminado devido a abandono, conta inativada"
+ purge_reason: "Conta removida automaticamente como conta abandonada, desactivada."
disable_remote_images_download_reason: "O download remoto de imagens foi desativado por não haver espaço disponível no disco."
anonymous: "Anónimo"
emails:
@@ -35,7 +35,7 @@ pt:
empty_email_error: "Acontece quando, a informação não processada, do email recebido veio em branco."
no_message_id_error: "Acontece quando o email recebido não tem 'Message-Id' no cabeçalho da mensagem."
auto_generated_email_error: "Acontece quando o cabeçalho 'precedence' é definida como: 'list', 'junk' ou 'auto_reply', ou quando algum cabeçalho contém: 'auto-submitted', 'auto-replied' ou 'auto-generated'."
- no_body_detected_error: "Acontece quando não conseguimos extrair o corpo da mensagem e não existem anexos."
+ no_body_detected_error: "Acontece quando não se consegue obter um corpo de mensagem e não existem anexos."
inactive_user_error: "Acontece quando o remetente não está activo."
blocked_user_error: "Acontece quando o remetente está bloqueado."
bad_destination_address: "Acontece quando nenhum dos endereços de email nos campos para/cc/bcc coincide com um endereço de email configurado."
@@ -44,6 +44,9 @@ pt:
reply_user_not_matching_error: "Acontece quando uma resposta veio de um endereço de email diferente do destinatário da notificação."
topic_not_found_error: "Acontece quando a resposta veio de um tópico relacionado mas o tópico relacionado foi apagado."
topic_closed_error: "Acontece quando uma resposta chegou mas o tópico relacionado foi fechado."
+ bounced_email_error: "O email é um relatório devolvido."
+ auto_generated_email_reply: "O email contém uma resposta a um email gerado automaticamente."
+ screened_email_error: "Acontece quando a morada de email da pessoa que enviou já foi confirmada."
errors: &errors
format: '%{attribute} %{message}'
messages:
@@ -174,6 +177,7 @@ pt:
group_mentions: "Últimas menções em %{group_name}"
user_posts: "Mensagens mais recentes criados por @%{username}"
user_topics: "Tópicos mais recentes criados por @%{username}"
+ tag: "Tópicos etiquetados"
too_late_to_edit: "Essa mensagem foi criada há muito tempo. Já não pode ser editada ou apagada."
revert_version_same: "A versão atual é o mesma versão para a qual você está tentando reverter."
excerpt_image: "imagem"
@@ -181,7 +185,7 @@ pt:
delete_reason: "Eliminado através da fila de moderação de mensagens"
groups:
errors:
- can_not_modify_automatic: "Não pode modificar um grupo automático"
+ can_not_modify_automatic: "Não pode modificar um grupo automatico"
member_already_exist: "'%{username}' já é membro deste grupo."
invalid_domain: "'%{domain}' não é um domínio válido."
invalid_incoming_email: "'%{email}' não é um endereço de email válido."
@@ -475,7 +479,7 @@ pt:
continue_button: "Continuar para %{site_name}"
welcome_to: "Bem-vindo a %{site_name}!"
approval_required: "Um moderador tem que aprovar a sua conta antes de poder aceder a este fórum. Irá receber um email quando a sua conta for aprovada!"
- missing_session: "Não conseguimos detetar se a sua conta foi criada, por favor assegure-se que tem os cookies ativos."
+ missing_session: "Não conseguimos detectar se a sua conta foi criada, pelo que pedimos que confirme que tem os cookies possibilitados."
post_action_types:
off_topic:
title: 'Fora de Contexto'
@@ -721,6 +725,9 @@ pt:
email_polling_errored_recently:
one: "A consulta automática de emails gerou um erro nas últimas 24 horas. Consulte em os registos para mais detalhes."
other: "A consulta automática de emails gerou %{count} erros nas últimas 24 horas. Consulte em os registos para mais detalhes."
+ bad_favicon_url: "Não estamos a conseguir carregar o favicon. Pot favor, confirme a sua configuração favicon_url nas Configurações do sítio."
+ poll_pop3_timeout: "A tentativa de ligação ao servidor POP3 está a ultrapassar o tempo máximo. Email de caixa de entrada não pôde ser obtido. Por favor verifique a sua configuração de POP3 e fornecedor de serviço internet."
+ poll_pop3_auth_error: "A tentativa de ligação ao servidor POP3 está a falhar por motivos de erro de autenticação. Por favor verifique a sua configuração de POP3."
site_settings:
censored_words: "Palavras que serão automaticamente substituídas por ■■■■"
delete_old_hidden_posts: "Eliminar automaticamente quaisquer mensagens ocultas que permaneçam escondidas por mais de 30 dias."
@@ -765,6 +772,7 @@ pt:
post_onebox_maxlength: "Tamanho máximo de uma mensagem Discourse de caixa única, em caracteres."
onebox_domains_whitelist: "Lista de domínios que permitem colocar em caixa única; estes domínios devem suportar OpenGraph ou oEmbed. Teste-os em http://iframely.com/debug"
logo_url: "A imagem do logótipo no canto superior esquerdo do seu sítio, deve ter uma forma retangular. Quando deixada em branco, o texto do título do sítio será exibido."
+ digest_logo_url: "O logotipo alternativo usado no topo do email de resumo do seu sítio. Deve ter um formato rectangular amplo. Não pode ser uma imagem em formato SVG. Se deixado em branco, `logo_url` será utilizado."
logo_small_url: "A pequena imagem do logótipo no canto superior esquerdo do seu sítio, deve ter uma forma quadrada, visível quando arrastado para baixo. Quando deixado em branco, um glifo de início será exibido."
favicon_url: "Um favicon para o seu sítio, veja http://en.wikipedia.org/wiki/Favicon, para trabalhar corretamente sobre um CDN deve ser um png"
mobile_logo_url: "A imagem do logótipo com posição fixa utilizada no canto superior esquerdo do seu sítio móvel deve ter uma forma quadrada. Quando deixado em branco, `logo_url` será utilizado. ex: http://exemplo.com/uploads/default/logo.png"
@@ -785,6 +793,7 @@ pt:
polling_interval: "Quando não está a ocorrer uma solicitação ao servidor, com que frequência devem os clientes ligados requerer uma atualização, em milissegundos"
anon_polling_interval: "Com que frequência os clientes não registados podem fazer solicitações ao servidor, em milisegundos"
background_polling_interval: "Com que frequência deverão os clientes solicitar o servidor, em milissegundos (quando a janela está em plano de fundo)"
+ flags_required_to_hide_post: "Número de bandeiras que fazem com que uma mensagem seja automaticamente escondida e uma mensagem enviada ao utilizador (0 se nunca)"
cooldown_minutes_after_hiding_posts: "Número de minutos que o utilizador deve esperar antes de poder editar uma mensagem oculta devido a sinalizações por parte da comunidade"
max_topics_in_first_day: "O número máximo de tópicos que é o utilizador pode criar no seu primeiro dia no Fórum."
max_replies_in_first_day: "Número máximo de mensagens que um utilizador pode criar no seu primeiro dia no Fórum."
diff --git a/config/locales/server.pt_BR.yml b/config/locales/server.pt_BR.yml
index 5c22281a6..e1065c534 100644
--- a/config/locales/server.pt_BR.yml
+++ b/config/locales/server.pt_BR.yml
@@ -24,7 +24,7 @@ pt_BR:
loading: "Carregando"
powered_by_html: 'Desenvolvido por Discourse, melhor visualizado com JavaScript ativado'
log_in: "Entrar"
- purge_reason: "A conta não verificada, foi excluída."
+ purge_reason: "Automaticamente eliminada por ser uma conta abandonada, não ativada"
disable_remote_images_download_reason: "Download de imagens remotas foi desativado porque não havia espaço suficiente em disco disponível."
anonymous: "Anônimo"
emails:
diff --git a/config/locales/server.ro.yml b/config/locales/server.ro.yml
index d44a17e71..98c03ce65 100644
--- a/config/locales/server.ro.yml
+++ b/config/locales/server.ro.yml
@@ -340,7 +340,7 @@ ro:
please_continue: "Noul dvs cont este confirmat, iar acum sunteți autentificat."
continue_button: "Continuă cu %{site_name}"
welcome_to: "Bine ați venit la %{site_name}!"
- approval_required: "Un moderator trebuie să aprobe manual contul înaine să puteți accesa forumul. Veți primii un email când acesta a fost aprobat!"
+ approval_required: "Un moderator trebuie să aprobe manual contul înaine să puteți accesa forumul. Vei primi un email când acesta a fost aprobat!"
post_action_types:
off_topic:
title: 'În afară discuției'
@@ -352,7 +352,7 @@ ro:
long_form: 'marchează aceasta ca spam'
inappropriate:
title: 'Necorespunzător'
- description: 'Această postare are conținut pe care o persoană normală l-ar numii ofesator, abuziv, sau o violare a regulilor comune.'
+ description: 'Această postare are conținut ce ar putea fi considerat drept ofesator, abuziv, sau o violare a regulilor comune.'
long_form: 'marcat ca necorespunzător'
notify_user:
email_title: 'Despre postarea dvs din "%{title}"'
@@ -379,7 +379,7 @@ ro:
long_form: 'Marchează asta ca spam'
inappropriate:
title: 'Necorespunzător'
- description: 'Această discuție are conținut pe care o persoană normală l-ar numii ofesantor, abuziv, sau o violare a regulilor comune.'
+ description: 'Această discuție are conținut ce ar putea fi considerat drept ofesantor, abuziv, sau o violare a regulilor comune.'
long_form: 'marcat ca necorespunzător'
notify_moderators:
title: "Notifică moderatori"
@@ -601,7 +601,7 @@ ro:
invite_expiry_days: "Cat timp sun valabile cheile de invitație ale utilizatorilor, în zile"
invite_passthrough_hours: "Cât timp un utilizator poate folosii o cheie de invitație recuperată anterior pentru autentificare, în ore"
invite_only: "Înregistrarea publică este dezactivată, toți utilizatorii noi trebuie să fie exclusiv invitați de un alt membru sau personalul site-ului."
- login_required: "Autentificarea e necesară pentru a citii conținutul site-ului, nu permite accesul anonim."
+ login_required: "Autentificarea este necesară pentru a citi conținutul site-ului, nu permite accesul anonim."
min_password_length: "Lungimea minimă de caractere pentru parolă."
block_common_passwords: "nu permite parole ce sunt în cele 10,000 cele mai cunoscute parole."
enable_local_logins: "Activează numele de utilizator local și a conturilor bazate pe logare cu parola. (Notă: Aceasta trebuie activiată pentru invitații pt a funcționa)"
@@ -874,7 +874,7 @@ ro:
previous_discussion: "Răspunsurile precedente"
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:"
+ description: "Nu ești interesat în a primi aceste email-uri? Nicio problemă! Faceți click dedesubt pentru a vă dezabona imediat:"
posted_by: "Postat de %{username} pe data %{post_date}"
user_replied:
subject_template: "[%{site_name}] %{topic_title}"
diff --git a/config/locales/server.ru.yml b/config/locales/server.ru.yml
index 606eb2182..213450abb 100644
--- a/config/locales/server.ru.yml
+++ b/config/locales/server.ru.yml
@@ -12,7 +12,7 @@ ru:
long_date: "D MMMM YYYY, HH:mm"
datetime_formats: &datetime_formats
formats:
- short: "%m-%d-%Y"
+ short: "%d.%m.%Y"
date:
month_names: [null, Январь, Февраль, Март, Апрель, Май, Июнь, Июль, Август, Сентябрь, Октябрь, Ноябрь, Декабрь]
<<: *datetime_formats
@@ -22,7 +22,7 @@ ru:
loading: "Загрузка..."
powered_by_html: 'При поддержке Discourse, лучше всего использовать с включенным JavaScript'
log_in: "Войти"
- purge_reason: "Автоматически удален, как неактивная, неактивированная учетная запись"
+ purge_reason: "Деактивированная учетная запись будет автоматически удалена как заброшенная"
disable_remote_images_download_reason: "Загрузка картинок была отключена из-за недостаточности места на диске."
anonymous: "Гость"
emails:
diff --git a/config/locales/server.zh_CN.yml b/config/locales/server.zh_CN.yml
index a9d2052a2..00a51dab5 100644
--- a/config/locales/server.zh_CN.yml
+++ b/config/locales/server.zh_CN.yml
@@ -2436,18 +2436,14 @@ zh_CN:
thank_you:
name: 感谢你
description: 有 20 个被赞的帖子,给出过 10 个赞
- long_description: |
- 该徽章授予给收到了 20 个赞,且赞过别人 10 次的你。当别人感谢你的帖子时,你也感谢他们的帖子。
gives_back:
name: 回馈
description: 有 100 个被赞的帖子,给出过 100 个赞
- long_description: |
- 该徽章授予给收到了 100 个赞,且赞过别人 100 次的你。感谢你回馈赞给社群!
empathetic:
name: 感性
description: 有 500 个被赞的帖子,给出过 1000 个赞
- long_description: |
- 该徽章授予给收到了 500 个赞,且赞过别人 1000 次的你。哇!你是一个富有同情心且会换位思考的模范。 :two_hearts:
+ first_emoji:
+ description: 在帖子中使用表情符号
admin_login:
success: "邮件已发送"
error: "错误!"
diff --git a/plugins/poll/config/locales/client.bs_BA.yml b/plugins/poll/config/locales/client.bs_BA.yml
index c03c38e59..da40be0d9 100644
--- a/plugins/poll/config/locales/client.bs_BA.yml
+++ b/plugins/poll/config/locales/client.bs_BA.yml
@@ -17,5 +17,8 @@ bs_BA:
few: "ukupno glasova"
other: "ukupno glasova"
average_rating: "Prosječna ocjena: %{average}."
+ cast-votes:
+ title: "ukupno glasova"
+ label: "Glasaj"
close:
label: "Zatvori"
diff --git a/plugins/poll/config/locales/client.fr.yml b/plugins/poll/config/locales/client.fr.yml
index cb7bcccbd..a674b4e69 100644
--- a/plugins/poll/config/locales/client.fr.yml
+++ b/plugins/poll/config/locales/client.fr.yml
@@ -9,8 +9,8 @@ fr:
js:
poll:
voters:
- one: "voteur"
- other: "voteurs"
+ one: "votant"
+ other: "votants"
total_votes:
one: "vote au total"
other: "votes au total"
diff --git a/plugins/poll/config/locales/client.ja.yml b/plugins/poll/config/locales/client.ja.yml
index a3b3f1bbb..b9be616a8 100644
--- a/plugins/poll/config/locales/client.ja.yml
+++ b/plugins/poll/config/locales/client.ja.yml
@@ -24,7 +24,7 @@ ja:
between_min_and_max_options: "%{min} と %{max} のオプションから選択することができます。"
cast-votes:
title: "投票する"
- label: "すぐ投票!"
+ label: "今すぐ投票!"
show-results:
title: "投票結果を表示"
label: "結果を表示"
diff --git a/plugins/poll/config/locales/server.ja.yml b/plugins/poll/config/locales/server.ja.yml
index 7b42aca44..16434983f 100644
--- a/plugins/poll/config/locales/server.ja.yml
+++ b/plugins/poll/config/locales/server.ja.yml
@@ -26,9 +26,9 @@ ja:
cannot_change_polls_after_5_minutes: "最初の5分を経過すると、投票の追加、削除や名前変更はできません。"
op_cannot_edit_options_after_5_minutes: "最初の5分を経過すると投票オプションの追加や削除はできません。投票オプションの編集が必要であれば、モデレータに連絡してください。"
staff_cannot_add_or_remove_options_after_5_minutes: "最初の5分を経過すると投票オプションの追加や削除はできません。このトピックを閉じて新しいトピックを作成してください。"
- no_polls_associated_with_this_post: "このポストに関連付けられた投票はありません。"
- no_poll_with_this_name: "このポストに関連付けられた投票 %{name} はありません。"
- post_is_deleted: "削除されたポストに作用することはできません。"
+ no_polls_associated_with_this_post: "この投稿に関連付けられた投票はありません。"
+ no_poll_with_this_name: "この投稿に関連付けられた投票 %{name} はありません。"
+ post_is_deleted: "削除された投稿を操作する事はできません。"
topic_must_be_open_to_vote: "投票するトピックはオープンになっている必要があります。"
poll_must_be_open_to_vote: "投票するにはオープンになっている必要があります。"
topic_must_be_open_to_toggle_status: "状態を切り替えるには、トピックがオープンになっている必要があります。"
diff --git a/public/500.ja.html b/public/500.ja.html
index 9e698a3fe..48faa075b 100644
--- a/public/500.ja.html
+++ b/public/500.ja.html
@@ -5,7 +5,7 @@
")
end
+ # TODO does it make sense to generate hashtags for tags that are missing in action?
+
end
end
diff --git a/spec/components/search_spec.rb b/spec/components/search_spec.rb
index 8d14de941..128c77646 100644
--- a/spec/components/search_spec.rb
+++ b/spec/components/search_spec.rb
@@ -553,6 +553,16 @@ describe Search do
expect(Search.execute('testing again #category-24:sub-category').posts.length).to eq(1)
expect(Search.execute('testing again #sub-category').posts.length).to eq(0)
end
+
+ it "can find with tag" do
+ topic1 = Fabricate(:topic, title: 'Could not, would not, on a boat')
+ topic1.tags = [Fabricate(:tag, name: 'eggs'), Fabricate(:tag, name: 'ham')]
+ post1 = Fabricate(:post, topic: topic1)
+ post2 = Fabricate(:post, topic: topic1, raw: "It probably doesn't help that they're green...")
+
+ expect(Search.execute('green tags:eggs').posts.map(&:id)).to eq([post2.id])
+ expect(Search.execute('green tags:plants').posts.size).to eq(0)
+ end
end
it 'can parse complex strings using ts_query helper' do
diff --git a/spec/components/topic_query_spec.rb b/spec/components/topic_query_spec.rb
index fcb0bb1f8..663fdef53 100644
--- a/spec/components/topic_query_spec.rb
+++ b/spec/components/topic_query_spec.rb
@@ -112,8 +112,47 @@ describe TopicQuery do
end
end
+ end
+ context 'tag filter' do
+ let(:tag) { Fabricate(:tag) }
+ let(:other_tag) { Fabricate(:tag) }
+ it "returns topics with the tag when filtered to it" do
+ tagged_topic1 = Fabricate(:topic, {tags: [tag]})
+ tagged_topic2 = Fabricate(:topic, {tags: [other_tag]})
+ tagged_topic3 = Fabricate(:topic, {tags: [tag, other_tag]})
+ no_tags_topic = Fabricate(:topic)
+
+ expect(TopicQuery.new(moderator, tags: [tag.name]).list_latest.topics.map(&:id).sort).to eq([tagged_topic1.id, tagged_topic3.id].sort)
+ expect(TopicQuery.new(moderator, tags: [tag.id]).list_latest.topics.map(&:id).sort).to eq([tagged_topic1.id, tagged_topic3.id].sort)
+
+ two_tag_topic = TopicQuery.new(moderator, tags: [tag.name]).list_latest.topics.find { |t| t.id == tagged_topic3.id }
+ expect(two_tag_topic.tags.size).to eq(2)
+
+ # topics with ANY of the given tags:
+ expect(TopicQuery.new(moderator, tags: [tag.name, other_tag.name]).list_latest.topics.map(&:id).sort).to eq([tagged_topic1.id, tagged_topic2.id, tagged_topic3.id].sort)
+ expect(TopicQuery.new(moderator, tags: [tag.id, other_tag.id]).list_latest.topics.map(&:id).sort).to eq([tagged_topic1.id, tagged_topic2.id, tagged_topic3.id].sort)
+
+ # TODO: topics with ALL of the given tags:
+ # expect(TopicQuery.new(moderator, tags: [tag.name, other_tag.name]).list_latest.topics.map(&:id)).to eq([tagged_topic3.id].sort)
+ # expect(TopicQuery.new(moderator, tags: [tag.id, other_tag.id]).list_latest.topics.map(&:id)).to eq([tagged_topic3.id].sort)
+ end
+
+ context "and categories too" do
+ let(:category1) { Fabricate(:category) }
+ let(:category2) { Fabricate(:category) }
+
+ it "returns topics in the given category with the given tag" do
+ tagged_topic1 = Fabricate(:topic, {category: category1, tags: [tag]})
+ tagged_topic2 = Fabricate(:topic, {category: category2, tags: [tag]})
+ tagged_topic3 = Fabricate(:topic, {category: category1, tags: [tag, other_tag]})
+ no_tags_topic = Fabricate(:topic, {category: category1})
+
+ expect(TopicQuery.new(moderator, category: category1.id, tags: [tag.name]).list_latest.topics.map(&:id).sort).to eq([tagged_topic1.id, tagged_topic3.id].sort)
+ expect(TopicQuery.new(moderator, category: category2.id, tags: [other_tag.name]).list_latest.topics.size).to eq(0)
+ end
+ end
end
context 'muted categories' do
diff --git a/spec/components/topics_bulk_action_spec.rb b/spec/components/topics_bulk_action_spec.rb
index 0003ee2dc..6aa99fcd1 100644
--- a/spec/components/topics_bulk_action_spec.rb
+++ b/spec/components/topics_bulk_action_spec.rb
@@ -180,4 +180,56 @@ describe TopicsBulkAction do
end
end
end
+
+ describe "change_tags" do
+ let(:topic) { Fabricate(:topic) }
+ let(:tag1) { Fabricate(:tag) }
+ let(:tag2) { Fabricate(:tag) }
+
+ before do
+ SiteSetting.tagging_enabled = true
+ SiteSetting.min_trust_level_to_tag_topics = 0
+ topic.tags = [tag1, tag2]
+ end
+
+ it "can change the tags, and can create new tags" do
+ SiteSetting.min_trust_to_create_tag = 0
+ tba = TopicsBulkAction.new(topic.user, [topic.id], type: 'change_tags', tags: ['newtag', tag1.name])
+ topic_ids = tba.perform!
+ expect(topic_ids).to eq([topic.id])
+ topic.reload
+ expect(topic.tags.map(&:name).sort).to eq(['newtag', tag1.name].sort)
+ end
+
+ it "can change the tags but not create new ones" do
+ SiteSetting.min_trust_to_create_tag = 4
+ tba = TopicsBulkAction.new(topic.user, [topic.id], type: 'change_tags', tags: ['newtag', tag1.name])
+ topic_ids = tba.perform!
+ expect(topic_ids).to eq([topic.id])
+ topic.reload
+ expect(topic.tags.map(&:name)).to eq([tag1.name])
+ end
+
+ it "can remove all tags" do
+ tba = TopicsBulkAction.new(topic.user, [topic.id], type: 'change_tags', tags: [])
+ topic_ids = tba.perform!
+ expect(topic_ids).to eq([topic.id])
+ topic.reload
+ expect(topic.tags.size).to eq(0)
+ end
+
+ context "when user can't edit topic" do
+ before do
+ Guardian.any_instance.expects(:can_edit?).returns(false)
+ end
+
+ it "doesn't change the tags" do
+ tba = TopicsBulkAction.new(topic.user, [topic.id], type: 'change_tags', tags: ['newtag', tag1.name])
+ topic_ids = tba.perform!
+ expect(topic_ids).to eq([])
+ topic.reload
+ expect(topic.tags.map(&:name)).to eq([tag1.name, tag2.name])
+ end
+ end
+ end
end
diff --git a/spec/fabricators/tag_fabricator.rb b/spec/fabricators/tag_fabricator.rb
new file mode 100644
index 000000000..45940081a
--- /dev/null
+++ b/spec/fabricators/tag_fabricator.rb
@@ -0,0 +1,3 @@
+Fabricator(:tag) do
+ name { sequence(:name) { |i| "tag#{i}" } }
+end
diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb
new file mode 100644
index 000000000..22cda4a4b
--- /dev/null
+++ b/spec/models/tag_spec.rb
@@ -0,0 +1,32 @@
+require 'rails_helper'
+
+describe Tag do
+ describe '#tags_by_count_query' do
+ it "returns empty hash if nothing is tagged" do
+ expect(described_class.tags_by_count_query.count).to eq({})
+ end
+
+ context "with some tagged topics" do
+ before do
+ @topics = []
+ @tags = []
+ 3.times { @topics << Fabricate(:topic) }
+ 2.times { @tags << Fabricate(:tag) }
+ @topics[0].tags << @tags[0]
+ @topics[0].tags << @tags[1]
+ @topics[1].tags << @tags[0]
+ end
+
+ it "returns tag names with topic counts in a hash" do
+ counts = described_class.tags_by_count_query.count
+ expect(counts[@tags[0].name]).to eq(2)
+ expect(counts[@tags[1].name]).to eq(1)
+ end
+
+ it "can be used to filter before doing the count" do
+ counts = described_class.tags_by_count_query.where("topics.id = ?", @topics[1].id).count
+ expect(counts).to eq({@tags[0].name => 1})
+ end
+ end
+ end
+end
diff --git a/spec/models/tag_user_spec.rb b/spec/models/tag_user_spec.rb
new file mode 100644
index 000000000..5b1753bbf
--- /dev/null
+++ b/spec/models/tag_user_spec.rb
@@ -0,0 +1,87 @@
+# encoding: utf-8
+
+require 'rails_helper'
+require_dependency 'post_creator'
+
+describe TagUser do
+
+ context "integration" do
+ before do
+ ActiveRecord::Base.observers.enable :all
+ SiteSetting.tagging_enabled = true
+ SiteSetting.min_trust_to_create_tag = 0
+ SiteSetting.min_trust_level_to_tag_topics = 0
+ end
+
+ let(:user) { Fabricate(:user) }
+
+ let(:watched_tag) { Fabricate(:tag) }
+ let(:muted_tag) { Fabricate(:tag) }
+ let(:tracked_tag) { Fabricate(:tag) }
+
+ context "with some tag notification settings" do
+ before do
+ TagUser.create!(user: user, tag: watched_tag, notification_level: TagUser.notification_levels[:watching])
+ TagUser.create!(user: user, tag: muted_tag, notification_level: TagUser.notification_levels[:muted])
+ TagUser.create!(user: user, tag: tracked_tag, notification_level: TagUser.notification_levels[:tracking])
+ end
+
+ it "sets notification levels correctly" do
+ watched_post = create_post(tags: [watched_tag.name])
+ muted_post = create_post(tags: [muted_tag.name])
+ tracked_post = create_post(tags: [tracked_tag.name])
+
+ expect(Notification.where(user_id: user.id, topic_id: watched_post.topic_id).count).to eq 1
+ expect(Notification.where(user_id: user.id, topic_id: tracked_post.topic_id).count).to eq 0
+
+ tu = TopicUser.get(tracked_post.topic, user)
+ expect(tu.notification_level).to eq TopicUser.notification_levels[:tracking]
+ expect(tu.notifications_reason_id).to eq TopicUser.notification_reasons[:auto_track_tag]
+ end
+
+ it "sets notification level to the highest one if there are multiple tags" do
+ post = create_post(tags: [muted_tag.name, tracked_tag.name, watched_tag.name])
+ expect(Notification.where(user_id: user.id, topic_id: post.topic_id).count).to eq 1
+ tu = TopicUser.get(post.topic, user)
+ expect(tu.notification_level).to eq TopicUser.notification_levels[:watching]
+ expect(tu.notifications_reason_id).to eq TopicUser.notification_reasons[:auto_watch_tag]
+ end
+
+ it "can start watching after tag has been added" do
+ post = create_post
+ expect(TopicUser.get(post.topic, user)).to be_blank
+ DiscourseTagging.tag_topic_by_names(post.topic, Guardian.new(user), [watched_tag.name])
+ tu = TopicUser.get(post.topic, user)
+ expect(tu.notification_level).to eq(TopicUser.notification_levels[:watching])
+ end
+
+ it "can start watching after tag has changed" do
+ post = create_post(tags: [Fabricate(:tag).name])
+ expect(TopicUser.get(post.topic, user)).to be_blank
+ DiscourseTagging.tag_topic_by_names(post.topic, Guardian.new(user), [watched_tag.name])
+ tu = TopicUser.get(post.topic, user)
+ expect(tu.notification_level).to eq(TopicUser.notification_levels[:watching])
+ end
+
+ it "can stop watching after tag has changed" do
+ post = create_post(tags: [watched_tag.name])
+ expect(TopicUser.get(post.topic, user)).to be_present
+ DiscourseTagging.tag_topic_by_names(post.topic, Guardian.new(user), [Fabricate(:tag).name])
+ expect(TopicUser.get(post.topic, user)).to be_blank
+ end
+
+ it "can stop watching after tags have been removed" do
+ post = create_post(tags: [muted_tag.name, tracked_tag.name, watched_tag.name])
+ expect(TopicUser.get(post.topic, user)).to be_present
+ DiscourseTagging.tag_topic_by_names(post.topic, Guardian.new(user), [])
+ expect(TopicUser.get(post.topic, user)).to be_blank
+ end
+
+ it "is destroyed when a user is deleted" do
+ expect(TagUser.where(user_id: user.id).count).to eq(3)
+ user.destroy!
+ expect(TagUser.where(user_id: user.id).count).to eq(0)
+ end
+ end
+ end
+end
From af1c99494013f38807529176be91383b675facd3 Mon Sep 17 00:00:00 2001
From: Jeff Atwood
Date: Thu, 26 May 2016 14:57:43 -0700
Subject: [PATCH 015/320] FIX: QSG incorrectly referred to meta category
---
docs/ADMIN-QUICK-START-GUIDE.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/ADMIN-QUICK-START-GUIDE.md b/docs/ADMIN-QUICK-START-GUIDE.md
index 5c32d2112..1c1000d6d 100644
--- a/docs/ADMIN-QUICK-START-GUIDE.md
+++ b/docs/ADMIN-QUICK-START-GUIDE.md
@@ -121,7 +121,7 @@ Right now [your FAQ](/faq) is the same Creative Commons [universal rules of civi
However, if you want to set up a more detailed FAQ dealing with the specifics of *your* community, here's how:
-1. Create a new [meta topic](category/meta), titled "Frequently Asked Questions (FAQ)" or similar.
+1. Create a new [site feedback topic](category/site-feedback), titled "Frequently Asked Questions (FAQ)" or similar.
2. Use the admin wrench icon below the post to make it a wiki post. This means the post is now editable to any user with a trust level of 1 or higher.
@@ -135,7 +135,7 @@ Now you have a community FAQ for your site that is collaboratively editable, and
You have three default categories:
-1. [Meta](/category/meta) – general discussion about the site itself. [It's important!](https://meta.discourse.org/t/what-is-meta/5249)
+1. [Site Feedback](/category/site-feedback) – general discussion about the site itself. [It's important!](https://meta.discourse.org/t/5249)
2. [Lounge](/category/lounge) – a perk for users at trust level 3 and higher
3. [Staff](/category/staff) – visible only to staff (admins and moderators)
From 3d5716a2c8949d92394752b31cb7d0aff0b8dd20 Mon Sep 17 00:00:00 2001
From: Neil Lalonde
Date: Thu, 26 May 2016 17:24:03 -0400
Subject: [PATCH 016/320] FIX: tag input doesn't show staff-only tags to
non-staff
---
.../javascripts/discourse/components/tag-chooser.js.es6 | 2 +-
app/controllers/tags_controller.rb | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/assets/javascripts/discourse/components/tag-chooser.js.es6 b/app/assets/javascripts/discourse/components/tag-chooser.js.es6
index c942cf599..88e7577d1 100644
--- a/app/assets/javascripts/discourse/components/tag-chooser.js.es6
+++ b/app/assets/javascripts/discourse/components/tag-chooser.js.es6
@@ -78,7 +78,7 @@ export default Ember.TextField.extend({
url: Discourse.getURL("/tags/filter/search"),
dataType: 'json',
data: function (term) {
- return { q: term, limit: self.siteSettings.max_tag_search_results };
+ return { q: term, limit: self.siteSettings.max_tag_search_results, filterForInput: true };
},
results: function (data) {
if (self.siteSettings.tags_sort_alphabetically) {
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index 23eac8886..c5040d3a2 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -112,6 +112,11 @@ class TagsController < ::ApplicationController
query = query.where('tags.name like ?', "%#{term}%")
end
+ if params[:filterForInput] && !guardian.is_staff?
+ staff_tag_names = SiteSetting.staff_tags.split("|")
+ query = query.where('tags.name NOT IN (?)', staff_tag_names) if staff_tag_names.present?
+ end
+
tags = query.count.map {|t, c| { id: t, text: t, count: c } }
render json: { results: tags }
From 884779b5c18f1b963e532d904198df7e00cf9dda Mon Sep 17 00:00:00 2001
From: Neil Lalonde
Date: Thu, 26 May 2016 18:03:36 -0400
Subject: [PATCH 017/320] FIX: N+1 query when tagging enabled and no tags in
topic list query. Topic query ignored tags input when tagging is disabled.
---
lib/topic_query.rb | 18 +++++++++++-------
spec/components/topic_query_spec.rb | 4 ++++
2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/lib/topic_query.rb b/lib/topic_query.rb
index 65696d64c..d2add0c9b 100644
--- a/lib/topic_query.rb
+++ b/lib/topic_query.rb
@@ -455,14 +455,18 @@ class TopicQuery
# ALL TAGS: something like this?
# Topic.joins(:tags).where('tags.name in (?)', @options[:tags]).group('topic_id').having('count(*)=?', @options[:tags].size).select('topic_id')
- if @options[:tags] && @options[:tags].size > 0
- result = result.joins(:tags).preload(:tags)
+ if SiteSetting.tagging_enabled
+ result = result.preload(:tags)
- # ANY of the given tags:
- if @options[:tags][0].is_a?(Integer)
- result = result.where("tags.id in (?)", @options[:tags])
- else
- result = result.where("tags.name in (?)", @options[:tags])
+ if @options[:tags] && @options[:tags].size > 0
+ result = result.joins(:tags)
+
+ # ANY of the given tags:
+ if @options[:tags][0].is_a?(Integer)
+ result = result.where("tags.id in (?)", @options[:tags])
+ else
+ result = result.where("tags.name in (?)", @options[:tags])
+ end
end
end
diff --git a/spec/components/topic_query_spec.rb b/spec/components/topic_query_spec.rb
index 663fdef53..d3298a9dc 100644
--- a/spec/components/topic_query_spec.rb
+++ b/spec/components/topic_query_spec.rb
@@ -118,6 +118,10 @@ describe TopicQuery do
let(:tag) { Fabricate(:tag) }
let(:other_tag) { Fabricate(:tag) }
+ before do
+ SiteSetting.tagging_enabled = true
+ end
+
it "returns topics with the tag when filtered to it" do
tagged_topic1 = Fabricate(:topic, {tags: [tag]})
tagged_topic2 = Fabricate(:topic, {tags: [other_tag]})
From 17ebcdd413649220449497e1046bf07f68f286f1 Mon Sep 17 00:00:00 2001
From: Jeff Atwood
Date: Thu, 26 May 2016 15:05:41 -0700
Subject: [PATCH 018/320] very minor typo
---
config/locales/server.en.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index db341f15c..6729cbae3 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -928,7 +928,7 @@ en:
allow_index_in_robots_txt: "Specify in robots.txt that this site is allowed to be indexed by web search engines."
email_domains_blacklist: "A pipe-delimited list of email domains that users are not allowed to register accounts with. Example: mailinator.com|trashmail.net"
email_domains_whitelist: "A pipe-delimited list of email domains that users MUST register accounts with. WARNING: Users with email domains other than those listed will not be allowed!"
- forgot_password_strict: "Don't inform users of an account's existance when they use the forgot password dialog."
+ forgot_password_strict: "Don't inform users of an account's existence when they use the forgot password dialog."
log_out_strict: "When logging out, log out ALL sessions for the user on all devices"
version_checks: "Ping the Discourse Hub for version updates and show new version messages on the /admin dashboard"
new_version_emails: "Send an email to the contact_email address when a new version of Discourse is available."
From 89b730600accfaec1f07703369762406e151ead7 Mon Sep 17 00:00:00 2001
From: Jeff Atwood
Date: Thu, 26 May 2016 15:23:15 -0700
Subject: [PATCH 019/320] QSG: improve pin description
---
docs/ADMIN-QUICK-START-GUIDE.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/ADMIN-QUICK-START-GUIDE.md b/docs/ADMIN-QUICK-START-GUIDE.md
index 1c1000d6d..7af407c95 100644
--- a/docs/ADMIN-QUICK-START-GUIDE.md
+++ b/docs/ADMIN-QUICK-START-GUIDE.md
@@ -92,8 +92,8 @@ Your welcome topic is important because it is the first thing you visitors will
Note that pinning topics works a little differently in Discourse:
-- Users can hide pins on topics once they have read them via the controls at the bottom of the topic, so they aren't always pinned forever for everyone.
-- When you pin a topic, you can choose to pin it globally to all topic lists, or pin it only within its category.
+- Once someone reads to the bottom of a pinned topic, it is automatically unpinned for them specifically. They can change this via the personal pin controls at the bottom of the topic.
+- When staff pins a topic, they can pin it globally to all topic lists, or just within its category.
If a pin isn't visible enough, you can also turn one single topic into a **banner**. The banner topic floats on top of all topics and all primary pages. Users can permanently dismiss this floating banner by clicking the × in the upper right corner.
From 8c3a0b44baea3388db4b719766a961d3a2114fc9 Mon Sep 17 00:00:00 2001
From: Sam
Date: Fri, 27 May 2016 12:07:10 +1000
Subject: [PATCH 020/320] FIX: restore "every email" default for old accounts
in mailing list mode
- Change default for mailing list mode frequency to daily
- Remove bootbox warning for mailing list mode (cause default is daily)
---
.../discourse/controllers/preferences.js.es6 | 15 ---------------
.../discourse/templates/user/preferences.hbs | 2 +-
config/locales/client.en.yml | 10 +++-------
config/site_settings.yml | 2 +-
...7015355_correct_mailing_list_mode_frequency.rb | 10 ++++++++++
5 files changed, 15 insertions(+), 24 deletions(-)
create mode 100644 db/migrate/20160527015355_correct_mailing_list_mode_frequency.rb
diff --git a/app/assets/javascripts/discourse/controllers/preferences.js.es6 b/app/assets/javascripts/discourse/controllers/preferences.js.es6
index 729f749af..c9dd265c4 100644
--- a/app/assets/javascripts/discourse/controllers/preferences.js.es6
+++ b/app/assets/javascripts/discourse/controllers/preferences.js.es6
@@ -130,21 +130,6 @@ export default Ember.Controller.extend(CanCheckEmails, {
actions: {
- checkMailingList(){
- Em.run.next(()=>{
- const postsPerDay = this.get('model.mailing_list_posts_per_day');
- if (!postsPerDay || postsPerDay < 2) {
- return true;
- }
-
- bootbox.confirm(I18n.t("user.enable_mailing_list", {count: postsPerDay}), I18n.t("no_value"), I18n.t("yes_value"), (success) => {
- if (!success) {
- this.set('model.user_option.mailing_list_mode', false);
- }
- });
- });
- },
-
save() {
this.set('saved', false);
diff --git a/app/assets/javascripts/discourse/templates/user/preferences.hbs b/app/assets/javascripts/discourse/templates/user/preferences.hbs
index cb9b9e6c1..a69a8b629 100644
--- a/app/assets/javascripts/discourse/templates/user/preferences.hbs
+++ b/app/assets/javascripts/discourse/templates/user/preferences.hbs
@@ -203,7 +203,7 @@
{{#unless siteSettings.disable_mailing_list_mode}}
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 50f7a44d4..a6dcf4e17 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -507,12 +507,12 @@ en:
email_activity_summary: "Activity Summary"
mailing_list_mode:
label: "Mailing list mode"
- enabled: "Enable mailing list mode."
+ enabled: "Enable mailing list mode"
instructions: |
This setting overrides the activity summary.
Muted topics and categories are not included in these emails.
- daily: "Send daily updates."
- individual: "Send an email for every new post."
+ daily: "Send daily updates"
+ individual: "Send an email for every new post"
many_per_day: "Send me an email for every new post (about {{dailyEmailEstimate}} per day)."
few_per_day: "Send me an email for every new post (less than 2 per day)."
watched_categories: "Watched"
@@ -676,10 +676,6 @@ en:
other_settings: "Other"
categories_settings: "Categories"
- enable_mailing_list:
- one: "Are you sure you want to be emailed for every new post?"
- other: "Are you sure you want to be emailed for every new post?
This will result in approximately {{count}} emails per day."
-
new_topic_duration:
label: "Consider topics new when"
not_viewed: "I haven't viewed them yet"
diff --git a/config/site_settings.yml b/config/site_settings.yml
index a6a000ad4..828ddf1dd 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -1139,7 +1139,7 @@ user_preferences:
default_email_mailing_list_mode: false
default_email_mailing_list_mode_frequency:
enum: 'MailingListModeSiteSetting'
- default: 1
+ default: 0
disable_mailing_list_mode:
default: false
client: true
diff --git a/db/migrate/20160527015355_correct_mailing_list_mode_frequency.rb b/db/migrate/20160527015355_correct_mailing_list_mode_frequency.rb
new file mode 100644
index 000000000..bcbdcd036
--- /dev/null
+++ b/db/migrate/20160527015355_correct_mailing_list_mode_frequency.rb
@@ -0,0 +1,10 @@
+class CorrectMailingListModeFrequency < ActiveRecord::Migration
+ def up
+ # historically mailing list mode was for every message
+ # keep working the same way for all old users
+ execute 'UPDATE user_options SET mailing_list_mode_frequency = 1 where mailing_list_mode'
+ end
+
+ def down
+ end
+end
From bd9bc7918ccf29820415a9c1caa809e797fa6bcc Mon Sep 17 00:00:00 2001
From: Sam
Date: Fri, 27 May 2016 12:18:54 +1000
Subject: [PATCH 021/320] FIX: downcase developer emails do it matches internal
email storage
---
config/environments/development.rb | 2 +-
config/environments/production.rb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/environments/development.rb b/config/environments/development.rb
index ee06ba01b..7079245f7 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -49,6 +49,6 @@ Discourse::Application.configure do
require 'rbtrace'
if emails = GlobalSetting.developer_emails
- config.developer_emails = emails.split(",").map(&:strip)
+ config.developer_emails = emails.split(",").map(&:downcase).map(&:strip)
end
end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 35c21bf22..f73b6e2dc 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -60,7 +60,7 @@ Discourse::Application.configure do
# developers have god like rights and may impersonate anyone in the system
# normal admins may only impersonate other moderators (not admins)
if emails = GlobalSetting.developer_emails
- config.developer_emails = emails.split(",").map(&:strip)
+ config.developer_emails = emails.split(",").map(&:downcase).map(&:strip)
end
end
From efc45aa704f15ec71cce65100f8290c5e59efa29 Mon Sep 17 00:00:00 2001
From: Sam
Date: Fri, 27 May 2016 12:35:22 +1000
Subject: [PATCH 022/320] correct specs
---
spec/jobs/notify_mailing_list_subscribers_spec.rb | 5 ++++-
spec/models/topic_user_spec.rb | 3 ++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/spec/jobs/notify_mailing_list_subscribers_spec.rb b/spec/jobs/notify_mailing_list_subscribers_spec.rb
index 75e32073d..aa311c038 100644
--- a/spec/jobs/notify_mailing_list_subscribers_spec.rb
+++ b/spec/jobs/notify_mailing_list_subscribers_spec.rb
@@ -3,7 +3,10 @@ require "rails_helper"
describe Jobs::NotifyMailingListSubscribers do
context "with mailing list on" do
- before { SiteSetting.default_email_mailing_list_mode = true }
+ before do
+ SiteSetting.default_email_mailing_list_mode = true
+ SiteSetting.default_email_mailing_list_mode_frequency = 1
+ end
let(:user) { Fabricate(:user) }
context "SiteSetting.max_emails_per_day_per_user" do
diff --git a/spec/models/topic_user_spec.rb b/spec/models/topic_user_spec.rb
index e08725480..5b609c0c8 100644
--- a/spec/models/topic_user_spec.rb
+++ b/spec/models/topic_user_spec.rb
@@ -294,7 +294,8 @@ describe TopicUser do
it "will receive email notification for every topic" do
user1 = Fabricate(:user)
- SiteSetting.stubs(:default_email_mailing_list_mode).returns(true)
+ SiteSetting.default_email_mailing_list_mode = true
+ SiteSetting.default_email_mailing_list_mode_frequency = 1
user2 = Fabricate(:user)
post = create_post
From eb21ed7fcfb030b06a6942c8c534ce3fd6879c8d Mon Sep 17 00:00:00 2001
From: Guo Xiang Tan
Date: Fri, 27 May 2016 14:34:44 +0800
Subject: [PATCH 023/320] Allow options to be cleared.
---
.../javascripts/discourse/components/combo-box.js.es6 | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/assets/javascripts/discourse/components/combo-box.js.es6 b/app/assets/javascripts/discourse/components/combo-box.js.es6
index e023ad267..4dd19bd58 100644
--- a/app/assets/javascripts/discourse/components/combo-box.js.es6
+++ b/app/assets/javascripts/discourse/components/combo-box.js.es6
@@ -65,7 +65,11 @@ export default Ember.Component.extend({
const $elem = this.$();
const minimumResultsForSearch = this.capabilities.isIOS ? -1 : 5;
- $elem.select2({formatResult: this.comboTemplate, minimumResultsForSearch, width: 'resolve'});
+ $elem.select2({
+ formatResult: this.comboTemplate, minimumResultsForSearch,
+ width: 'resolve',
+ allowClear: true
+ });
const castInteger = this.get('castInteger');
$elem.on("change", e => {
From 86ed6c7d5ef08d7561f4d3e8761f4a2580224ef5 Mon Sep 17 00:00:00 2001
From: Guo Xiang Tan
Date: Fri, 27 May 2016 18:02:22 +0800
Subject: [PATCH 024/320] Revert "Clear read only timestamp in Redis when
switching back to master."
This reverts commit f891430f32a3b8ba9caac20b5ad36621eeadd691.
---
.../connection_adapters/postgresql_fallback_adapter.rb | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb b/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb
index ecc2f6e2c..857cc28b5 100644
--- a/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb
+++ b/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb
@@ -39,7 +39,6 @@ class PostgreSQLFallbackHandler
end
Discourse.disable_readonly_mode
- Discourse.clear_readonly!
self.master = true
end
rescue => e
From ec4a7d708dde7a2c508cb5941a6c0fe7b0d30c6d Mon Sep 17 00:00:00 2001
From: Neil Lalonde
Date: Fri, 27 May 2016 11:06:51 -0400
Subject: [PATCH 025/320] Version bump to v1.6.0.beta7
---
lib/version.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/version.rb b/lib/version.rb
index 919b48142..3b9b3c2a3 100644
--- a/lib/version.rb
+++ b/lib/version.rb
@@ -5,7 +5,7 @@ module Discourse
MAJOR = 1
MINOR = 6
TINY = 0
- PRE = 'beta6'
+ PRE = 'beta7'
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
end
From 05c8bca2222ccbc5e07734357ad2285b7bc64cdc Mon Sep 17 00:00:00 2001
From: Neil Lalonde
Date: Fri, 27 May 2016 15:02:43 -0400
Subject: [PATCH 026/320] show tags usage in search options
---
config/locales/server.en.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index 6729cbae3..ff4ca0f80 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -2807,7 +2807,7 @@ en:
#category-slug
category:foo
group:foo
badge:foo
in:likes
in:posted
in:watching
in:tracking
in:private
in:bookmarks
in:first
in:pinned
in:unpinned
in:wiki
-
posts_count:num
before:days or date
after:days or date
+
posts_count:num
before:days or date
after:days or date
tags:one,two
Examples
From e922db82fb2c2970325ce6c157fa1e831be5f883 Mon Sep 17 00:00:00 2001
From: Arpit Jalan
Date: Sun, 29 May 2016 00:49:40 +0530
Subject: [PATCH 027/320] disable username autocomplete on Sign Up modal
---
.../javascripts/discourse/templates/modal/create-account.hbs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/assets/javascripts/discourse/templates/modal/create-account.hbs b/app/assets/javascripts/discourse/templates/modal/create-account.hbs
index b401e45c8..5e5d9b497 100644
--- a/app/assets/javascripts/discourse/templates/modal/create-account.hbs
+++ b/app/assets/javascripts/discourse/templates/modal/create-account.hbs
@@ -25,7 +25,7 @@
"
+ title: "HTML, mida lisatakse enne silti"
+ override_default: "Ära standardset laadilehte kaasa"
+ enabled: "Sisse lülitatud?"
+ preview: "eelvaade"
+ undo_preview: "eemalda eelvaade"
+ rescue_preview: "vaikelaad"
+ explain_preview: "Vaata saiti selle kohandatud laadilehega"
+ explain_undo_preview: "Pöördu tagasi hetkel aktiivse kohandatud laadilehe juurde"
+ explain_rescue_preview: "Vaata saiti vaikimisi laadilehega"
+ save: "Salvesta"
+ new: "Uus"
+ new_style: "Uus stiil"
+ import: "Impordi"
+ import_title: "Vali fail või kleebi tekst"
+ delete: "Kustuta"
+ delete_confirm: "Kustutan selle kohanduse?"
+ about: "Muuda saidi CSS laadilehed ja HTML päised. Alustamiseks lisa kohandus."
+ color: "Värv"
+ opacity: "Läbipaistvus"
+ copy: "Kopeeri"
+ email_templates:
+ title: "Meilimallid"
+ subject: "Teema"
+ multiple_subjects: "Sellel meilimallil on mitu pealkirja."
+ body: "Sisu"
+ none_selected: "Redigeerimise alustamiseks vali meili mall."
+ revert: "Loobu muudatustest"
+ revert_confirm: "Oled kindel, et soovid oma muudatustest loobuda?"
+ css_html:
+ title: "CSS/HTML"
+ long_title: "CSS and HTML modifikatsioonid"
+ colors:
+ title: "Värvid"
+ long_title: "Värvistikud"
+ about: "Muuda saidil kasutatavaid värve ilma CSS-i kirjutamata. Alustamiseks lisa uus värvistik."
+ new_name: "Uus värvistik"
+ copy_name_prefix: "Koopia sellest"
+ delete_confirm: "Kustutan selle värvistiku?"
+ undo: "ennista"
+ undo_title: "Ennista selle värvistiku muudatused alates viimasest salvestamisest."
+ revert: "võta tagasi"
+ revert_title: "Lähtesta see värvus Discourse'i vaikimisi värvistiku omale."
+ primary:
+ name: 'primaarne'
+ description: 'Enamik tekste, ikoone ja ääri.'
+ secondary:
+ name: 'teise astme'
+ description: 'Peamine taustavärv ja teksti värv mõnedel nuppudel.'
+ tertiary:
+ name: 'kolmanda astme'
+ description: 'Viited, mõned nupud, teavitused ja rõhuvärv.'
+ quaternary:
+ name: "neljanda astme"
+ description: "Navigatsiooniviited"
+ header_background:
+ name: "päise taust"
+ description: "Saidi päise taustavärv."
+ header_primary:
+ name: "päise primaarne"
+ description: "Tekst ja ikoonid saidi päises."
+ highlight:
+ name: 'esiletõst'
+ description: 'Taustavärv esiletõstetud elementidel lehel, nagu postitused ja teemad.'
+ danger:
+ name: 'oht'
+ description: 'Esiletõstetud tegevuste värv nagu postituste ja teemade kustutamine.'
+ success:
+ name: 'edu'
+ description: 'Näitab, et tegevus oli edukas.'
+ love:
+ name: 'armastus'
+ description: "Meeldimise nupu värvus."
+ email:
+ title: "Meilid"
+ settings: "Sätted"
+ templates: "Mallid"
+ preview_digest: "Saadetise eelvaatlus"
+ sending_test: "Saadan testmeili..."
+ error: "VIGA - %{server_error}"
+ test_error: "Testmeili saatmisel tekkis viga. Palun kontrolli oma meilisätteid, veendu, et sinu teenusepakkuja ei blokeeri meiliühendusi ja proovi uuesti."
+ sent: "Saadetud"
+ skipped: "Üle hüpatud"
+ received: "Saadud"
+ rejected: "Tagasi lükatud"
+ sent_at: "Saadetud"
+ time: "Aeg"
+ user: "Kasutaja"
+ email_type: "Meili liik"
+ to_address: "Aadressile"
+ test_email_address: "testitav meiliaadress"
+ send_test: "Saada testmeil"
+ sent_test: "saadetud!"
+ delivery_method: "Kättetoimetamise viis"
+ preview_digest_desc: "Passiivsetele kasutajatele meilitud saadetiste sisu eelvaatlus."
+ refresh: "Värskenda"
+ format: "Formaat"
+ html: "html"
+ text: "tekst"
+ last_seen_user: "Viimati nähtud kasutaja:"
+ reply_key: "Vastuse võti"
+ skipped_reason: "Ülehüppamise põhjus"
+ incoming_emails:
+ from_address: "Kellelt"
+ to_addresses: "Kellele"
+ cc_addresses: "Koopia"
+ subject: "Teema"
+ error: "Viga"
+ none: "Sissetulevaid meile pole."
+ modal:
+ title: "Sissetuleva meili üksikasjad"
+ error: "Viga"
+ headers: "Päised"
+ subject: "Teema"
+ body: "Sisu"
+ rejection_message: "Meil äraütlemise kohta"
+ filters:
+ from_placeholder: "from@example.com"
+ to_placeholder: "to@example.com"
+ cc_placeholder: "cc@example.com"
+ subject_placeholder: "Teema..."
+ error_placeholder: "Viga"
+ logs:
+ none: "Logid puuduvad."
+ filters:
+ title: "Filter"
+ user_placeholder: "kasutajanimi"
+ address_placeholder: "nimi@domeen.ee"
+ type_placeholder: "ülevaade, registreerimine..."
+ reply_key_placeholder: "vastuse võti"
+ skipped_reason_placeholder: "põhjus"
+ logs:
+ title: "Logid"
+ action: "Tegevus"
+ created_at: "Loodud"
+ last_match_at: "Viimati tabatud"
+ match_count: "Tabamisi"
+ ip_address: "IP"
+ topic_id: "Teema ID"
+ post_id: "Postituse ID"
+ category_id: "Liigi ID"
+ delete: 'Kustuta'
+ edit: 'Muuda'
+ save: 'Salvesta'
+ screened_actions:
+ block: "blokeeri"
+ do_nothing: "ära tee midagi"
+ staff_actions:
+ title: "Tiimi tegevused"
+ instructions: "Kliki kasutajanimedele ja tegevustele nimekirja filtreerimiseks. Kliki profiilipiltidele, et minna kasutajalehtedele."
+ clear_filters: "Näita kõike"
+ staff_user: "Meeskonnaliige"
+ target_user: "Sihtkasutaja"
+ subject: "Teema"
+ when: "Millal"
+ context: "Kontekst"
+ details: "Detailid"
+ previous_value: "Eelmine"
+ new_value: "Uus"
+ diff: "Erisused"
+ show: "Näita"
+ modal_title: "Detailid"
+ no_previous: "Varasem väärtus puudub."
+ deleted: "Uus väärtus puudub. Kirje kustutati."
+ actions:
+ delete_user: "kustuta kasutaja"
+ change_trust_level: "muuda usaldustaset"
+ change_username: "muuda kasutajanime"
+ change_site_setting: "muuda saidi sätet"
+ change_site_customization: "muuda saidi kohandusi"
+ delete_site_customization: "kustuta saidi kohandused"
+ change_site_text: "muuda saidi teksti"
+ suspend_user: "peata kasutaja"
+ unsuspend_user: "taasluba kasutaja"
+ grant_badge: "anna märgis"
+ revoke_badge: "eemalda märgis"
+ check_email: "kontrolli postkasti"
+ delete_topic: "kustuta teema"
+ delete_post: "kustuta postitus"
+ impersonate: "kehastu ümber"
+ anonymize_user: "muuda kasutaja anonüümseks"
+ roll_up: "Koonda IP-aadressi blokid kokku"
+ change_category_settings: "muuda liigi sätteid"
+ delete_category: "kustuta liik"
+ create_category: "loo liik"
+ block_user: "blokeeri kasutaja"
+ unblock_user: "vabasta kasutaja blokeeringust"
+ grant_admin: "anna admin-õigus"
+ revoke_admin: "võta admin-õigus ära"
+ grant_moderation: "anna modereerimisõigus"
+ revoke_moderation: "võta modereerimisõigus ära"
+ backup_operation: "varundustoiming"
+ screened_emails:
+ title: "Varjestatud meilid"
+ description: "Kui keegi üritab uut kontot luua, siis kontrollitakse järgmisi meiliaadresse ja vastavuse korral registreerimine peatatakse või tehakse mõni muu toiming."
+ email: "Meiliaadress"
+ actions:
+ allow: "Luba"
+ screened_urls:
+ title: "Varjestatud URL-d"
+ description: "Siin loetletud URL-d esinesid spämmeriteks kuulutatud kasutajate postitustes."
+ url: "URL"
+ domain: "Domeen"
+ screened_ips:
+ title: "Varjestatud IP-aadressid"
+ description: 'IP-aadressid, mis on vaatlemise all. IP-aadressi lubamiseks kasuta "Luban".'
+ delete_confirm: "Oled kindel, et soovid aadressi %{ip_address} jaoks kehtestatud reegli eemaldada?"
+ roll_up_confirm: "Oled kindel, et soovid tavaliselt varjestatud IP-aadressid alamvõrkudesse kokku koondada?"
+ rolled_up_some_subnets: "Bännitud IP-aadrissid edukalt järgmistesse alamvõrkudesse kokku koondatud: %{subnets}."
+ rolled_up_no_subnet: "Ei ole midagi kokku koondada."
+ actions:
+ block: "Blokeeri"
+ do_nothing: "Luba"
+ allow_admin: "Luba Admin"
+ form:
+ label: "Uus:"
+ ip_address: "IP-aadress"
+ add: "Lisa"
+ filter: "Otsi"
+ roll_up:
+ text: "Koonda kokku"
+ title: "Loob uue bännitud alamvõrgu koondsissekande kui on kogunenud vähemalt 'min_ban_entries_for_roll_up' aadressi."
+ logster:
+ title: "Vealogid"
+ impersonate:
+ title: "Kehasta"
+ help: "Kasuta seda töövahendit kasutajakonto ülevõtmiseks silumise eesmärgil. Tühistamiseks pead välja logima."
+ not_found: "Seda kasutajat ei leitud."
+ invalid: "Vabanda, ent Sa ei saa selle kasutajana esineda."
+ users:
+ title: 'Kasutajad'
+ create: 'Lisa admin-kasutaja'
+ last_emailed: "Viimati meilitud"
+ not_found: "Vabanda, sellist kasutajanime ei eksisteeri meie süsteemis."
+ id_not_found: "Vabanda, sellist kasutajatunnust ei eksisteeri meie süsteemis."
+ active: "Aktiivne"
+ show_emails: "Näita meile"
+ nav:
+ new: "Uus"
+ active: "Aktiivne"
+ pending: "Ootel"
+ staff: 'Meeskond'
+ suspended: 'Peatatud'
+ blocked: 'Blokeeritud'
+ suspect: 'Kahtlane'
+ approved: "Heakskiidetud?"
+ approved_selected:
+ one: "kiida heaks kasutaja"
+ other: "kiida heaks ({{count}}) kasutajat"
+ reject_selected:
+ one: "lükka tagasi kasutaja"
+ other: "lükka tagasi ({{count}}) kasutajat"
+ titles:
+ active: 'Aktiivsed kasutajad'
+ new: 'Uued kasutajad'
+ pending: 'Kasutajad kontrolli ootel'
+ newuser: 'Kasutajad usaldustasemel 0 (Uued kasutajad)'
+ basic: 'Kasutajad usaldustasemel 1 (Kasutajad)'
+ member: 'Kasutajad usaldustasemel 2 (Liikmed)'
+ regular: 'Kasutajad usaldustasemel 3 (Püsiliikmed)'
+ leader: 'Kasutajad usaldustasemel 4 (Vedajad)'
+ staff: "Meeskond"
+ admins: 'Admin-kasutajad'
+ moderators: 'Moderaatorid'
+ blocked: 'Blokeeritud kasutajad'
+ suspended: 'Peatatud kasutajad'
+ suspect: 'Kahtlased kasutajad'
+ reject_successful:
+ one: "Tagasi lükatud 1 kasutaja."
+ other: "Edukalt tagasi lükatud %{count} kasutajat."
+ reject_failures:
+ one: "Ei õnnestunud tagasi lükata 1 kasutaja."
+ other: "Ei õnnestunud tagasi lükata %{count} kasutajat."
+ not_verified: "Ei ole kontrollitud"
+ check_email:
+ title: "Näita selle kasutaja meiliaadressi"
+ text: "Näita"
+ user:
+ suspend_failed: "Selle kasutaja peatamisel tekkis viga {{error}}"
+ unsuspend_failed: "Selle kasutaja taaslubamisel tekkis viga {{error}}"
+ suspend_duration: "Kauaks see kasutaja peatatakse?"
+ suspend_duration_units: "(päeva)"
+ suspend_reason_label: "Peatamise põhjus? See tekst on nähtav kõigile selle kasutaja profiililehel, samuti kuvatakse kasutajale, kui ta üritab sisse logida. Tee lühidalt."
+ suspend_reason: "Põhjus"
+ suspended_by: "Peatati kasutaja poolt"
+ delete_all_posts: "Kustuta kõik postitused"
+ delete_all_posts_confirm: "Sa oled kustutamas %{posts} postitust ja %{topics} teemat. Oled Sa kindel?"
+ suspend: "Peata"
+ unsuspend: "Taasluba"
+ suspended: "Peatatud?"
+ moderator: "Moderaator?"
+ admin: "Admin?"
+ blocked: "Blokeeritud?"
+ staged: "Ettevalmistamisel?"
+ show_admin_profile: "Admin"
+ edit_title: "Muuda tiitlit"
+ save_title: "Salvesta tiitel"
+ refresh_browsers: "Sunni brauserit värskendama"
+ refresh_browsers_message: "Sõnum saadetud kõigile klientidele!"
+ show_public_profile: "Näita avalikku profiili"
+ impersonate: 'Kehasta'
+ ip_lookup: "IP otsimine"
+ log_out: "Logi välja"
+ logged_out: "Kasutaja logiti välja kõigil seadmetel"
+ revoke_admin: 'Eemalda admini õigused'
+ grant_admin: 'Anna admini õigused'
+ revoke_moderation: 'Eemalda modereerimise õigused'
+ grant_moderation: 'Anna modereerimise õigused'
+ unblock: 'Eemalda blokeering'
+ block: 'Blokeeri'
+ reputation: Maine
+ permissions: Õigused
+ activity: Tegevused
+ like_count: Meeldimisi antud / saadud
+ last_100_days: 'viimase 100 päeva jooksul'
+ private_topics_count: Privaatsed teemad
+ posts_read_count: Positusi loetud
+ post_count: Postitusi loodud
+ topics_entered: Vaadatud teemasid
+ flags_given_count: Omistatud tähised
+ flags_received_count: Saadud tähised
+ warnings_received_count: Hoiatust saadud
+ flags_given_received_count: 'Antud / saadud tähised'
+ approve: 'Kinnita'
+ approved_by: "kiitis heaks"
+ approve_success: "Kasutaja heaks kiidetud ja meil saadetud aktiveerimisjuhistega."
+ approve_bulk_success: "Edu! Kõik kasutajad on heaks kiidetud ja teavitatud."
+ time_read: "Lugemise aeg"
+ anonymize: "Anonümiseeri kasutaja"
+ anonymize_confirm: "Oled sa KINDEL, et soovid seda kontot anonümiseerida? See võib muuta kasutajanime ja meiliaadressi ja teha puhtaks kogu kasutajaprofiili."
+ anonymize_yes: "Jah, anonümiseeri see konto"
+ anonymize_failed: "Viga konto anonümiseerimisel."
+ delete: "Kustuta kasutaja"
+ delete_forbidden_because_staff: "Admine ja moderaatoreid ei saa kustutada."
+ delete_posts_forbidden_because_staff: "Ei saa kustutada adminide ja moderaatorite kõiki postitusi."
+ delete_forbidden:
+ one: "Kasutajaid ei saa kustutada, kui neil on postitusi. Kustuta kõik postitused enne kasutaja kustutamist. (Postitusi vanemaid, kui %{count} päev ei saa kustutada.)"
+ other: "Kasutajaid ei saa kustutada, kui neil on postitusi. Kustuta kõik postitused enne kasutaja kustutamist. (Postitusi vanemaid, kui %{count} päeva ei saa kustutada.)"
+ cant_delete_all_posts:
+ one: "Ei saa kustutada kõiki postitusi. Osa postitusi on vanemad, kui %{count} päev. (delete_user_max_post_age säte.) "
+ other: "Ei saa kustutada kõiki postitusi. Osa postitusi on vanemad, kui %{count} päeva. (delete_user_max_post_age säte.) "
+ cant_delete_all_too_many_posts:
+ one: "Ei saa kustutada kõiki postitusi, sest kasutajal on rohkem, kui 1 postitus. (delete_all_posts_max)"
+ other: "Ei saa kustutada kõiki postitusi, sest kasutajal on rohkem, kui %{count} postitust. (delete_all_posts_max)"
+ delete_confirm: "Oled Sa KINDEL, et soovid kustutada seda kasutajat? See kustutamine on lõplik!"
+ delete_and_block: "Kustuta ja blokeeri see meiliaadress ja IP-aadress"
+ delete_dont_block: "Kustuta vaid"
+ deleted: "See kasutaja kustutati."
+ delete_failed: "Viga selle kasutaja kustutamisel. Veendu, et kõik postitused on kustutatud enne kasutaja kustutamist."
+ send_activation_email: "Saada aktiveerimismeil"
+ activation_email_sent: "Aktiveerimismeil saadeti."
+ send_activation_email_failed: "Viga aktiveerimismeili saatmisel. %{error} "
+ activate: "Aktiveeri konto"
+ activate_failed: "Viga kasutaja aktiveerimisel."
+ deactivate_account: "Deaktiveeri konto"
+ deactivate_failed: "Viga kasutaja deaktiveerimisel."
+ unblock_failed: 'Viga kasutaja blokeeringu eemaldamisel.'
+ block_failed: 'Viga kasutaja blokeerimisel.'
+ block_confirm: 'Oled Sa kindel, et soovid seda kasutajat blokeerida? Kasutaja ei saa peale seda luua ühtegi teemat ega postitust.'
+ block_accept: 'Jah, blokeeri see kasutaja'
+ deactivate_explanation: "Deaktiveeritud kasutaja peab valideerima oma meiliaadressi."
+ suspended_explanation: "Peatatud kasutaja ei saa sisse logida."
+ block_explanation: "Blokeeritud kasutaja ei saa postitada ega alustada teemasid."
+ trust_level_change_failed: "Viga kasutaja usaldustaseme muutmisel."
+ suspend_modal_title: "Peata kasutaja"
+ trust_level_2_users: "Kasutajad usaldustasemel 2"
+ trust_level_3_requirements: "Usaldustaseme 3 nõuded"
+ trust_level_locked_tip: "usaldustase on lukustatud, süsteem ei eduta ega alanda kasutajat."
+ trust_level_unlocked_tip: "usaldustase on lukustamata, süsteem saab kasutajat edutada või alandada."
+ lock_trust_level: "Lukusta usaldustase"
+ unlock_trust_level: "Eemalda usaldustaseme lukustus"
+ tl3_requirements:
+ title: "Usaldustaseme 3 nõuded"
+ table_title: "Viimasel %{time_period} päeval:"
+ value_heading: "Väärtus"
+ requirement_heading: "Nõue"
+ visits: "Külastusi"
+ days: "päeva"
+ topics_replied_to: "Teemasid vastatud"
+ topics_viewed: "Vaadatud teemasid"
+ topics_viewed_all_time: "Teemasid vastatud (kogu aja jooksul)"
+ posts_read: "Positusi loetud"
+ posts_read_all_time: "Postitust loetud (kogu aja jooksul)"
+ flagged_posts: "Tähistatud postitused"
+ flagged_by_users: "Tähistanud kasutajad"
+ likes_given: "Meeldimisi antud"
+ likes_received: "Meeldimisi saadud"
+ likes_received_days: "Meeldimisi saadud: unikaalseid päevi"
+ likes_received_users: "Meeldimisi saadud: unikaalseid kasutajaid"
+ qualifies: "Kvalifitseerub usaldustasemele 3."
+ does_not_qualify: "Ei kvalifitseeru usaldustasemele 3."
+ will_be_promoted: "Edutatakse varsti."
+ will_be_demoted: "Alandatakse varsti."
+ on_grace_period: "Hetkel edutamisel halastusperiood, madalamale ei viida."
+ locked_will_not_be_promoted: "Usaldustase lukustatud. Ei edutata kunagi."
+ locked_will_not_be_demoted: "Usaldustase lukustatud. Ei alandata kunagi."
+ sso:
+ title: "Single Sign On"
+ external_id: "Väline ID"
+ external_username: "Kasutajanimi"
+ external_name: "Nimi"
+ external_email: "Meiliaadress"
+ external_avatar_url: "Profiili pildi URL"
+ user_fields:
+ title: "Kasutajaväljad"
+ help: "Lisa välju, mida kasutajad saavad täita."
+ create: "Loo kasutajaväli"
+ untitled: "Tiitlita"
+ name: "Välja nimi"
+ type: "Välja tüüp"
+ description: "Välja kirjeldus"
+ save: "Salvesta"
+ edit: "Muuda"
+ delete: "Kustuta"
+ cancel: "Tühista"
+ delete_confirm: "Oled Sa kindel, et soovid kustutada selle kasutajavälja?"
+ options: "Suvandid"
+ required:
+ title: "Nõutud registreerumisel?"
+ enabled: "nõutud"
+ disabled: "ei ole nõutud"
+ editable:
+ title: "Muudetav pärast registreerumist?"
+ enabled: "muudetav"
+ disabled: "ei ole muudetav"
+ show_on_profile:
+ title: "Näidata avalikul profiilil?"
+ enabled: "näidatav profiilil"
+ disabled: "ei ole näidatav profiilil"
+ show_on_user_card:
+ title: "Kuva kasutaja profiilil?"
+ enabled: "kuvatud kasutaja profiilil"
+ disabled: "ei kuvata kasutaja profiilil"
+ field_types:
+ text: 'Tekstiväli'
+ confirm: 'Kinnitus'
+ dropdown: "Rippmenüü"
+ site_text:
+ description: "Võid oma foorumi kõiki tekste muuta. Alustamiseks otsi allolevast:"
+ search: "Otsi teksi, mida soovid muuta"
+ title: 'Teksti sisu'
+ edit: 'muuda'
+ revert: "Pööra tagasi muudatused"
+ revert_confirm: "Oled Sa kindel, et soovid tagasi pöörata muudatusi?"
+ go_back: "Tagasi otsingusse"
+ recommended: "Soovitame järgnevat teksti oma vajadustele vastavalt kohandada:"
+ show_overriden: 'Näita vaid käsitsi muudetuid'
+ site_settings:
+ show_overriden: 'Näita vaid käsitsi muudetuid'
+ title: 'Sätted'
+ reset: 'lähtesta'
+ none: 'mitte ükski'
+ no_results: "Ei leidnud midagi."
+ clear_filter: "Puhasta"
+ add_url: "lisa URL"
+ add_host: "lisa teenusepakkuja"
+ categories:
+ all_results: 'Kõik'
+ required: 'Nõutud'
+ basic: 'Baassätted'
+ users: 'Kasutajad'
+ posting: 'Postitan'
+ email: 'Meiliaadress'
+ files: 'Failid'
+ trust: 'Usaldustasemed'
+ security: 'Turve'
+ onebox: "Onebox"
+ seo: 'SEO'
+ spam: 'Spämm'
+ rate_limits: 'Suhte piirang'
+ developer: 'Arendaja'
+ embedding: "Manustamised"
+ legal: "Õiguslik"
+ uncategorized: 'Muu'
+ backups: "Varukoopiad"
+ login: "Sisselogimine"
+ plugins: "Pistikprogrammid"
+ user_preferences: "Kasutaja seaded"
+ badges:
+ title: Märgised
+ new_badge: Uus märgis
+ new: Uus
+ name: Nimi
+ badge: Märgis
+ display_name: Kuvatav nimi
+ description: Kirjeldus
+ long_description: Pikk kirjeldus
+ badge_type: Märgise tüüp
+ badge_grouping: Grupp
+ badge_groupings:
+ modal_title: Märgiste grupeeringud
+ granted_by: Märgistaja
+ granted_at: Märgistuse aeg
+ reason_help: (Viide postitusele või teemale)
+ save: Salvesta
+ delete: Kustuta
+ delete_confirm: Oled kindel, et soovid selle märgist kustutada?
+ revoke: 'Tühista '
+ reason: Põhjus
+ expand: Näita …
+ revoke_confirm: Oled kindel, et soovid seda märgist eemaldada?
+ edit_badges: Muuda märgiseid
+ grant_badge: Anna märgis
+ granted_badges: Antud märgised
+ grant: Määra
+ no_user_badges: "%{name} ei ole saanud veel ühtegi märgist."
+ no_badges: Ei ole ühtegi märgist, mida saaks anda.
+ none_selected: "Vali märgis, et alustada"
+ allow_title: Luba märgise kasutamist tiitlina
+ multiple_grant: Võib olla määratud mitmeid kordi
+ listable: Näita märgist avalike märgiste lehel
+ enabled: Luba märgis
+ icon: Ikoon
+ image: Pilt
+ icon_help: "Kasuta kas Font Awesome klassi või URL-viidet pildile"
+ query: Märgise päring (SQL)
+ target_posts: Päri sihtmärkide postitusi
+ auto_revoke: Jooksuta tühistamispäringut igapäevaselt
+ show_posts: Näita märgistuste lehel postitust, millega anti märgistus
+ trigger: Päästik
+ trigger_type:
+ none: "Uuenda igapäevaselt"
+ post_action: "Kui kasutaja reageerib postitusele"
+ post_revision: "Kui kasutaja muudab postitust või loob postituse"
+ trust_level_change: "Kui kasutaja muudab usaldustaset"
+ user_change: "Kui kasutajat muudetakse või luuakse"
+ post_processed: "Peale postituse toimetamist"
+ preview:
+ link_text: "Näita eelvaadet antud märgistest"
+ plan_text: "Eelvaatle koos päringukavaga"
+ modal_title: "Märgistuse päringu eelvaade"
+ sql_error_header: "Viga päringuga."
+ error_help: "Vaata järgnevaid viiteid abiks märgiste päringute tegemisel."
+ bad_count_warning:
+ header: "HOIATUS!"
+ text: "Märgise andmise eksemplare on puudu. See juhtub, kui märgiste päring tagastab olematuid kasutaja või postisuse ID-sid. Sellega võivad hiljem kaasneda ettearvamatud tagajärjed - palun kontrolli oma päringut."
+ no_grant_count: "Ei ole märgiseid, mida määrata."
+ grant_count:
+ one: "1 märgis, mida määrata."
+ other: "%{count} märgist, mida määrata."
+ sample: "Näidis:"
+ grant:
+ with: %{username}
+ with_post: %{username} postitusele %{link}
+ with_post_time: %{username} postitusele %{link} ajal %{time}
+ with_time: %{username} ajal %{time}
+ emoji:
+ title: "Emotikon"
+ help: "Lisa uued emotikonid kõigile kasutamiseks. (PRO-vihje: pukseeri korraga mitu faili)"
+ add: "Lisa uus emotikon"
+ name: "Nimi"
+ image: "Pilt"
+ delete_confirm: "Oled Sa kindel, et soovid kustutada :%{name}: emotikoni?"
+ embedding:
+ get_started: "Kui Sa soovid lisada Discourse teise veebisaidi sisse ehk sängitada, alusta lisades oma teenusepakkuja"
+ confirm_delete: "Oled Sa kindel, et soovid kustutada selle teenusepakkuja?"
+ sample: "Kasuta järgnevat HTML koodi oma saidil, et luua ja lisada/sängitada discourse teemad oma saidile. Asenda REPLACE_ME kanoonilise lehe URL-viitega, kuhu Sa seda lisad."
+ title: "Sängitamine"
+ host: "Lubatud hostid"
+ edit: "muuda"
+ category: "Postita liiki"
+ add_host: "Lisa host"
+ settings: "Sängitamise sätted"
+ feed_settings: "Voo sätted"
+ feed_description: "Oma saidi RSS/ATOM voo ühendamine võib parendada Discourse'i võimet Sinu saidi sisu importida."
+ crawling_settings: "Ämbliku sätted"
+ crawling_description: "Kui Discourse loob Sinu postitustele teemasid ja RSS/ATOM voogu ei ole, üritab ta sisu Sinu HTML-st välja sõeluda. Mõnikord on sisu eraldamine raskendatud, mistõttu pakume sisu eraldamise hõlbustamiseks võimalust CSS-i reeglid ette anda."
+ embed_by_username: "Kasutajanimi teema loomiseks"
+ embed_post_limit: "Maksimaalne postituste arv, mida sängitada"
+ embed_username_key_from_feed: "Võti discourse kasutajanime eraldamiseks voost"
+ embed_truncate: "Lühenda sängitatud postitused"
+ embed_whitelist_selector: "CSS valik elementidele, mida lubada sängitamistes"
+ embed_blacklist_selector: "CSS valik elementidele, mida eemaldada sängitamistes"
+ feed_polling_enabled: "Impordi postitused RSS/ATOM'i kaudu"
+ feed_polling_url: "URL või RSS/ATOM voog, mida kududa"
+ save: "Salvesta sängitamise sätted"
+ permalink:
+ title: "Püsiviited"
+ url: "URL"
+ topic_id: "Teema ID"
+ topic_title: "Teema"
+ post_id: "Postituse ID"
+ post_title: "Postitus"
+ category_id: "Liigi ID"
+ category_title: "Liik"
+ external_url: "Väline URL"
+ delete_confirm: Oled Sa kindel, et soovid seda püsiviidet kustutada?
+ form:
+ label: "Uus"
+ add: "Lisa"
+ filter: "Otsi (URL või väline URL)"
+ lightbox:
+ download: "Lae alla"
+ search_help:
+ title: 'Otsingu spikker'
+ keyboard_shortcuts_help:
+ title: 'Klaviatuuri kiirvalikud'
+ jump_to:
+ title: 'Hüppa'
+ home: 'g, h Avaleht'
+ latest: 'g, l Viimased'
+ new: 'g, n Uus'
+ unread: 'g, u Lugemata'
+ categories: 'g, c Liigid'
+ top: 'g, t Üles'
+ bookmarks: 'g, b Järjehoidjad'
+ profile: 'g, p Profiil'
+ messages: 'g, m Sõnumid'
+ navigation:
+ title: 'Navigatsioon'
+ jump: '# Mine postitusse #'
+ back: 'u Tagasi'
+ up_down: 'k/j Liiguta valitut ↑ ↓'
+ open: 'o or Enter Ava valitud teema'
+ next_prev: 'shift+j/shift+k Järgmine/eelmine sektsioon'
+ application:
+ title: 'Rakendus'
+ create: 'c Loo uus teema'
+ notifications: 'n Ava teavitused'
+ hamburger_menu: '= Ava rippmenüü'
+ user_profile_menu: 'p Ava kasutajamenüü'
+ show_incoming_updated_topics: '. Näita uuendatud teemasid'
+ search: '/ Otsi'
+ help: '? Ava klaviatuuri abimenüü'
+ dismiss_new_posts: 'x, r Lükka Uued/Postitused tagasi'
+ dismiss_topics: 'x, t Lükka teemad tagasi'
+ log_out: 'shift+zshift+z Logi välja'
+ actions:
+ title: 'Tegevused'
+ bookmark_topic: 'f Lülita postituse järjehoidja sisse/välja
+
+ '
+ pin_unpin_topic: 'shift+p Kinnita/Vabasta teema'
+ share_topic: 'shift+s Jaga teemat'
+ share_post: 's Jaga postitust'
+ reply_as_new_topic: 't Vasta viidates teemale'
+ reply_topic: 'shift+r Vasta teemale'
+ reply_post: 'r Vasta postitusele'
+ quote_post: 'q Tsiteeri postitust'
+ like: 'l Märgi postitus meeldivaks'
+ flag: '! Tähista postitus'
+ bookmark: 'b Pane postitusele järjehoidja'
+ edit: 'e Muuda postitust'
+ delete: 'd Kustuta postitus'
+ mark_muted: 'm, m Vaigista teema'
+ mark_regular: 'm, r Tavaline teema'
+ mark_tracking: 'm, t Jälgi teemat'
+ mark_watching: 'Vaatle teemat'
+ badges:
+ earned_n_times:
+ one: "Teenis selle märgise 1 kord"
+ other: "Teenis selle märgise %{count} korda"
+ granted_on: "Märgistatud %{date}"
+ others_count: "Teised selle märgisega (%{count})"
+ title: Märgiseid
+ allow_title: "saadaval tiitel"
+ multiple_grant: "määratud mitmeid kordi"
+ badge_count:
+ one: "1 märgis"
+ other: "%{count} märgist"
+ more_badges:
+ one: "+1 veel"
+ other: "+%{count} veel"
+ granted:
+ one: "1 lubatud"
+ other: "%{count} lubatud"
+ select_badge_for_title: Vali märgis, mida kasutada oma tiitlina
+ none: ""
+ badge_grouping:
+ getting_started:
+ name: Alustamine
+ community:
+ name: Kogukond
+ trust_level:
+ name: Usaldustase
+ other:
+ name: Muu
+ posting:
+ name: Postitan
+ google_search: |
+
Otsi Google abil
+
+
+
+ tagging:
+ sort_by_name: "nimi"
+ topics:
+ bottom:
+ unread: "Lugemata teemasid rohkem ei ole"
diff --git a/config/locales/server.et.yml b/config/locales/server.et.yml
new file mode 100644
index 000000000..3ecd1b54f
--- /dev/null
+++ b/config/locales/server.et.yml
@@ -0,0 +1,561 @@
+et:
+ dates:
+ short_date_no_year: "D. MMMM"
+ short_date: "D. MMMM, YYYY"
+ long_date: "D. MMMM, YYYY hh:mm"
+ datetime_formats:
+ formats:
+ short: "%d.%m.%Y"
+ short_no_year: "%-d. %B"
+ date_only: "%-d. %B %Y"
+ date:
+ month_names: [null, jaanuar, veebruar, märts, aprill, mai, juuni, juuli, august, september, oktoober, november, detsember]
+ title: "Discourse"
+ topics: "Teemad"
+ posts: "postitused"
+ loading: "Laetakse"
+ powered_by_html: 'Ajamiks on Discourse... vaadata JavaScript lubatuna'
+ log_in: "Logi sisse"
+ disable_remote_images_download_reason: "Väliste piltide allalaadimine keelati, kuna polnud polnud piisavalt vaba ruumi."
+ anonymous: "Anonüümne"
+ emails:
+ incoming:
+ default_subject: "%{email} saatis kirja"
+ show_trimmed_content: "Näita lühendatud sisu"
+ errors:
+ empty_email_error: "Juhtub, kui meieni jõudnud toormeil on tühi."
+ no_message_id_error: "Juhtub, kui meilil puudub 'Message-Id' päis."
+ auto_generated_email_error: "Juhtub, kui 'precedence' päis on seatud väärtusele: list, junk, bulk või auto_reply või kui mingi muu päis sisaldab väärtusi: auto-submitted, auto-replied või auto-generated."
+ inactive_user_error: "Juhtub, kui saatja ei ole aktiveeritud."
+ blocked_user_error: "Juhtub, kui saatja on blokeeritud."
+ bad_destination_address: "Juhtub, kui ükski To/Cc/Bcc meiliaadresidest ei lange kokku seadistatud sissetulavate meiliaadressidega."
+ strangers_not_allowed_error: "Juhtub, kui kasutaja proovib teha teemat liiki, millesse ta ise ei kuulu."
+ insufficient_trust_level_error: "Juhtub, kui kasutaja proovib teha teemat liiki, millele tal puudub vajalik usaldustase."
+ reply_user_not_matching_error: "Juhtub, kui vastus tuleb teistsuguselt meiliaadressilt kui see, millele märguanne saadeti."
+ topic_not_found_error: "Juhtub, kui vastus tuli aga teema on juba kustutatud."
+ topic_closed_error: "Juhtub, kui vastus tuli aga teema on juba suletud."
+ errors:
+ format: '%{attribute} %{message}'
+ messages:
+ too_long_validation: "piirang on %{max} tähemärki; sina sisestasid %{length}."
+ invalid_boolean: "Vigane tõeväärtus."
+ taken: "on juba võetud"
+ accepted: vajab aktsepteerimist
+ blank: ei saa olla tühi
+ present: peab olema tühi
+ confirmation: "%{attribute} ei ühti"
+ empty: ei tohi olla tühi
+ equal_to: peab olema %{count}
+ even: peab olema paaris
+ exclusion: on reserveeritud
+ greater_than: peab olema suurem kui %{count}
+ greater_than_or_equal_to: peab olema suurem või võrdne kui %{count}
+ has_already_been_used: "on juba kasutusel"
+ inclusion: puudub nimekirjas
+ invalid: pole korrektne
+ is_invalid: "pole korrektne; katsu olla pisut täpsem"
+ less_than: peab olema väiksem kui %{count}
+ less_than_or_equal_to: peab olema väiksem või võrdne kui %{count}
+ not_a_number: ei ole number
+ not_an_integer: peab olema täisarv
+ odd: peab olema paaritu
+ record_invalid: 'Valideerimine ebaõnnestus: %{errors}'
+ restrict_dependent_destroy:
+ one: "Kirjet ei saa kustutada, kuna leiti seotud kirje %{record}"
+ many: "Kirjet ei saa kustutada, kuna leiti seotud kirje %{record}"
+ too_long:
+ one: on liiga pikk (maksimum on 1 tähemärk)
+ other: on liiga pikk (maksimum on %{count} tähemärki)
+ too_short:
+ one: on liiga lühike (miinimum on 1 tähemärk)
+ other: on liiga lühike (miinimum on %{count} tähemärki)
+ wrong_length:
+ one: on vale pikkus (peaks olema 1 tähemärk)
+ other: on vale pikkus (peaks olema %{count} tähemärki)
+ other_than: "peab olema midagi muud, kui %{count}"
+ template:
+ body: 'Järgmiste väljadega oli probleeme:'
+ header:
+ one: 1 viga takistas mudeli %{model} salvestamist
+ other: '%{count} viga takistasid mudeli %{model} salvestamist'
+ embed:
+ load_from_remote: "Selle postituse laadimisel ilmnes üks viga"
+ site_settings:
+ min_username_length_exists: "Miinimum kasutajanime pikkuseks ei saa olla süsteemi lühimast kasutajanimest pikem väärtus."
+ min_username_length_range: "Minimaalne ei tohi olla maksimaalsest suurem."
+ max_username_length_exists: "Maksimaalseks kasutajanime pikkuseks ei saa olla süsteemi pikimast kasutajanimest madalam väärtus."
+ max_username_length_range: "Sa ei tohi maksimaalset seada minimaalsest väiksemaks."
+ default_categories_already_selected: "Sa ei saa valida teises nimekirjas valitud liiki."
+ s3_upload_bucket_is_required: "Ei saa aktiveerida S3 üleslaadimist, kui 's3_upload_bucket' ei ole määratud."
+ bulk_invite:
+ file_should_be_csv: "Üles laetud fail peab olema kas csv või txt formaadis."
+ backup:
+ operation_already_running: "Praegu on üks protsess pooleli. Uut tegevust ei saa hetkel käivitada."
+ backup_file_should_be_tar_gz: "Varukoopia peab olema .tar.gz arhiivifail."
+ not_enough_space_on_disk: "Varukoopia üleslaadimiseks pole piisavalt kettaruumi."
+ not_logged_in: "Selleks peate olema sisse logitud."
+ not_found: "Päritud URLi või ressurssi ei leitud."
+ invalid_access: "Päritud ressursi vaatamiseks puuduvad õigused."
+ read_only_mode_enabled: "Sait on kirjutuskaitstud. Interaktsioonid on keelatud."
+ reading_time: "Lugemise aeg"
+ likes: "Meeldimisi"
+ too_many_replies:
+ one: "Vabandame, kuid ajutiselt on uutel kasutajatel lubatud 1 vastus teema kohta."
+ other: "Vabandame, kuid ajutiselt on uutel kasutajatel lubatud %{count} vastust teema kohta."
+ embed:
+ start_discussion: "Alusta vestlust"
+ continue: "Jätka arutelu"
+ more_replies:
+ one: "veel 1 vastus"
+ other: "veel %{count} vastust"
+ loading: "Laen arutelu..."
+ permalink: "Püsilink"
+ imported_from: "See on kaasnev vestlusteema originaalsisestusele %{link}"
+ in_reply_to: "▶ %{username}"
+ replies:
+ one: "1 vastus"
+ other: "%{count} vastust"
+ no_mentions_allowed: "Vabandust, sa ei saa teisi kasutajaid mainida."
+ too_many_mentions:
+ one: "Vabandust, sa tohid postituses vaid üht kasutajat mainida."
+ other: "Vabandust, Sa tohid postituses vaid %{count} kasutajat mainida."
+ no_mentions_allowed_newuser: "Vabanda, uued kasutajad ei tohi teisi kasutajaid mainida."
+ too_many_mentions_newuser:
+ one: "Vabandust, uued kasutajad tohivad postituses vaid ühte kasutajat mainida."
+ other: "Vabanda, uued kasutajad tohivad postituses vaid %{count} kasutajat mainida."
+ no_images_allowed: "Vabanda, uued kasutajad ei saa postitustesse pilte panna."
+ too_many_images:
+ one: "Vabandust, uued kasutajad tohivad postitusse panna vaid ühe pildi."
+ other: "Vabandust, uued kasutajad tohivad postitusse panna vaid %{count} pilti."
+ no_attachments_allowed: "Vabanda, uued kasutajad ei tohi postitusse manuseid lisada."
+ too_many_attachments:
+ one: "Vabandust, uued kasutajad tohivad postitusele ainult ühe manuse lisada."
+ other: "Vabandust, uued kasutajad tohivad postitusele ainult %{count} manust lisada."
+ no_links_allowed: "Vabandust, uued kasutajad ei tohi postituses viiteid kasutada."
+ too_many_links:
+ one: "Vabandust, uued kasutajad tohivad postituses vaid ühte viidet kasutada."
+ other: "Vabandust, uued kasutajad tohivad postituses vaid %{count} viidet kasutada."
+ spamming_host: "Vabandust, sa ei tohi sellele domeenile viidata."
+ user_is_suspended: "Peatatud kasutajatel pole lubatud postitada."
+ topic_not_found: "Midagi on valesti. Kas on võimalik, et antud teema suleti või kustutati samal ajal, kui te seda vaatasite?"
+ just_posted_that: "on liiga sarnane sellele, mida sa hiljuti postitasid"
+ has_already_been_used: "on juba kasutusel"
+ invalid_characters: "sisaldab ebasobivaid tähemärke"
+ is_invalid: "pole korrektne, püüa kirjeldada täpsemalt"
+ next_page: "järgmine leht →"
+ prev_page: "← eelmine leht"
+ page_num: "Leht %{num}"
+ home_title: "Avaleht"
+ topics_in_category: "Teemad '%{category}' liigis"
+ rss_posts_in_topic: "'%{topic}' RSS-kanal"
+ rss_topics_in_category: "Liigi '%{category}' teemade RSS-kanal"
+ author_wrote: "%{author} kirjutas:"
+ num_posts: "Postitused:"
+ num_participants: "Osalejad:"
+ read_full_topic: "Loe kogu teemat"
+ private_message_abbrev: "PS"
+ rss_description:
+ latest: "Viimased teemad"
+ hot: "Populaarsed teemad"
+ top: "Parimad teemad"
+ posts: "Viimased postitused"
+ private_posts: "Viimased privaatsõnumid"
+ group_posts: "Viimased postitused grupilt %{group_name}"
+ group_mentions: "Viimati mainitud grupis %{group_name}"
+ too_late_to_edit: "Postitus loodi kaua aega tagasi. Seda ei saa enam muuta ega kustutada."
+ revert_version_same: "Praegune versioon on sama sellega, millele sa püüad tagasi pöörduda."
+ excerpt_image: "pilt"
+ queue:
+ delete_reason: "Kustutatud modereerimisjärjekorra kaudu"
+ groups:
+ errors:
+ member_already_exist: "'%{username}' on juba selle grupi liige."
+ invalid_domain: "'%{domain}' ei ole nõuetele vastav domeen."
+ invalid_incoming_email: "'%{email}' ei ole korrektne meiliaadress."
+ email_already_used_in_group: "Grupp '%{group_name}' juba kasutab meiliaadressi '%{email}'."
+ email_already_used_in_category: "'%{email}' on juba liigi '%{category_name}' poolt kasutusse võetud."
+ default_names:
+ everyone: "kõik"
+ admins: "adminid"
+ moderators: "moderaatorid"
+ staff: "meeskond"
+ trust_level_0: "usaldustase_0"
+ trust_level_1: "usaldustase_1"
+ trust_level_2: "usaldustase_2"
+ trust_level_3: "usaldustase_3"
+ trust_level_4: "usaldustase_4"
+ education:
+ until_posts:
+ one: "1 postitus"
+ other: "%{count} postitust"
+ new-topic: |
+ Teretulemast saidile %{site_name} — **tänud uue vestluse alustamise eest!**
+
+ - Kas pealkiri kõlab kuvitavalt kui sa seda kõvasti loed? Kas see on hea kokkuvõte?
+
+ - Kas võiksid olla sellest huvitatud? Miks see oluline on? Millist tagasisidet sa soovid?
+
+ - Lisa enim kasutatud sõnad oma teemasse et teised *leiaksid* selle üles. Et grupeerida oma teema teiste sarnaste teemadega vali liik.
+
+ Rohkema info saamiseks [vaata meie kommuuni juhiseid](/guidelines). See paneel ilmub ainult esimesel %{education_posts_text}.
+ new-reply: |
+ Teretulemast saidile %{site_name} — **täname osalemast!**
+
+ - Kas sinu vastus parandab vestlust mingil moel?
+
+ - Ole kommuuni liikmete vastu lahke.
+
+ - Konstruktiivne kriitika on tervitatav aga kritiseeri *ideid*, mitte inimesi.
+
+ Rohkema info saamiseks [vaata meie kommuuni juhiseid](/guidelines). See paneel ilmub ainult esimesel %{education_posts_text}.
+ avatar: |
+ ### Kuidas oleks, kui lisaksid oma kontole pildi?
+
+ Oled postitanud mõned teemad ja vastused aga sinu profiilipilt pole hetkel sama unikaalne nagu sina... see on lihtsalt üks täht.
+
+ Kas sa oled kaalunud **[külastada oma profiili](%{profile_path})** laadimaks üles sind ennast kujutav pilt?
+
+ Diskussioone jälgida ja vestlustest huvitavaid inimesi leida on lihtsam, kui kõigil on unikaalne profiilipilt!
+ sequential_replies: |
+ ### Kaalu mitmele postitusele samaaegset vastamist
+
+ Selle asemel, et vastata mitu korda järjest paljudele sõnumitele, palun kaalu ühe postituse kasutamist eelnevaid postitusi tsiteerides või kasutades viidet @nimi.
+
+ Saad muuta oma varasemat postitust ning lisada tsitaati valides teksti ning vajutades nähtavale ilmunud nuppu tsiteeri.
+
+ Kõigil on lihtsam lugeda teemasid, milles on põhjalikumad vastused paljude pisikeste vastuste asemel.
+ activerecord:
+ attributes:
+ category:
+ name: "Liigi nimetus"
+ post:
+ raw: "Sisu"
+ user_profile:
+ bio_raw: "Minust"
+ errors:
+ models:
+ topic:
+ attributes:
+ base:
+ warning_requires_pm: "Saad hoiatusi lisada vaid privaatsõnumitele."
+ too_many_users: "Saad hoiatusi saata vaid ühele kasutajale korraga."
+ cant_send_pm: "Vabanda, sa ei saa sellele kasutajale privaatsõnumit saata."
+ no_user_selected: "Pead valima sobiva kasutaja."
+ user:
+ attributes:
+ password:
+ common: "on üks 10000 enim kasutatud salasõnast. Palun kasuta turvalisemat parooli."
+ same_as_username: "on sama mis su kasutajanimi. Palun kasuta turvalisemat parooli."
+ same_as_email: "on sama mis su meiliaadress. Palun kasuta turvalisemat parooli."
+ ip_address:
+ signup_not_allowed: "Sellelt kontolt pole liitumine lubatud."
+ color_scheme_color:
+ attributes:
+ hex:
+ invalid: "pole korrektne värv"
+ vip_category_name: "Lounge"
+ vip_category_description: "Liik, mis on eksklusiivne kasutajatele, kellel on usaldustase 3 või kõrgem."
+ meta_category_name: "Saidi tagasiside."
+ staff_category_name: "Meeskond"
+ lounge_welcome:
+ title: "Teretulemast Lounge'i"
+ category:
+ topic_prefix: "Liigist %{category}"
+ errors:
+ uncategorized_parent: "'Liigitamata' ei saa omada vanem-liiki"
+ self_parent: "Alamliigi vanemaks ei tohi olla alamliik ise"
+ depth: "Alamliiki ei saa paigutada teise alamliigi alla"
+ invalid_email_in: "'%{email}' ei ole korrektne meiliaadress."
+ email_already_used_in_group: "Grupp '%{group_name}' juba kasutab meiliaadressi '%{email}'."
+ email_already_used_in_category: "'%{email}' on juba liigi '%{category_name}' poolt kasutusse võetud."
+ cannot_delete:
+ uncategorized: "Ei saa kustutada Liigitamata liiki"
+ trust_levels:
+ newuser:
+ title: "uus kasutaja"
+ basic:
+ title: "baaskasutaja"
+ member:
+ title: "liige"
+ regular:
+ title: "tavaline"
+ leader:
+ title: "juht"
+ rate_limiter:
+ slow_down: "Oled antud seda toimingut liiga palju proovinud. Proovi hiljem uuesti."
+ hours:
+ one: "1 tund"
+ other: "%{count} tundi"
+ minutes:
+ one: "1 minut"
+ other: "%{count} minutit"
+ seconds:
+ one: "1 sekund"
+ other: "%{count} sekundit"
+ datetime:
+ distance_in_words:
+ half_a_minute: "< 1m"
+ less_than_x_seconds:
+ one: "< 1s"
+ other: "< %{count}s"
+ x_seconds:
+ one: "1s"
+ other: "%{count}s"
+ less_than_x_minutes:
+ one: "< 1m"
+ other: "< %{count}m"
+ x_minutes:
+ one: "1m"
+ other: "%{count}m"
+ about_x_hours:
+ one: "1h"
+ other: "%{count}h"
+ x_days:
+ one: "1p"
+ other: "%{count}p"
+ about_x_months:
+ one: "1kuu"
+ other: "%{count}kuud"
+ x_months:
+ one: "1kuu"
+ other: "%{count}kuud"
+ about_x_years:
+ one: "1a"
+ other: "%{count}a"
+ over_x_years:
+ one: "> 1a"
+ other: "> %{count}a"
+ almost_x_years:
+ one: "1a"
+ other: "%{count}a"
+ distance_in_words_verbose:
+ half_a_minute: "just praegu"
+ less_than_x_seconds:
+ one: "hetk tagasi"
+ other: "hetk tagasi"
+ x_seconds:
+ one: "1 sekund tagasi"
+ other: "%{count} sekundit tagasi"
+ less_than_x_minutes:
+ one: "vähem kui 1 minut tagasi"
+ other: "vähem kui %{count} minutit tagasi"
+ x_minutes:
+ one: "1 minut tagasi"
+ other: "%{count} minutit tagasi"
+ about_x_hours:
+ one: "1 tund tagasi"
+ other: "%{count} tundi tagasi"
+ x_days:
+ one: "1 päev tagasi"
+ other: "%{count} päeva tagasi"
+ about_x_months:
+ one: "umbes 1 kuu tagasi"
+ other: "umbes%{count} kuud tagasi"
+ x_months:
+ one: "1 kuu tagasi"
+ other: "%{count} kuud tagasi"
+ about_x_years:
+ one: "umbes 1 aasta tagasi"
+ other: "umbes %{count} aastat tagasi"
+ over_x_years:
+ one: "üle 1 aasta tagasi"
+ other: "üle %{count} aasta tagasi"
+ almost_x_years:
+ one: "peaaegu 1 aasta tagasi"
+ other: "peaaegu %{count} aastat tagasi"
+ password_reset:
+ choose_new: "Palun vali uus parool"
+ choose: "Palun vali parool"
+ update: 'Uuenda parooli'
+ save: 'Määra Parool'
+ title: 'Uuenda Parool'
+ success_unapproved: "Sinu parooli muutmine õnnestus."
+ continue: "Edasi saidile %{site_name}"
+ change_email:
+ confirmed: "Sinu meiliaadress on uuendatud."
+ please_continue: "Edasi saidile %{site_name}"
+ authorizing_old:
+ title: "Täname, et oma kehtiva meiliaadressi kinnitasid"
+ activation:
+ action: "Oma konto aktiveerimiseks kliki siia"
+ continue_button: "Edasi saidile %{site_name}"
+ post_action_types:
+ off_topic:
+ long_form: 'tähistasin selle kui teemavälise'
+ spam:
+ title: 'Spämm'
+ long_form: 'tähistasin selle kui spämmi'
+ inappropriate:
+ title: 'Ebasünnis'
+ long_form: 'tähistasin selle kui sobimatu'
+ bookmark:
+ title: 'Järjehoidja'
+ like:
+ title: 'Laigi'
+ description: 'Laigi seda postitust'
+ long_form: 'laikis seda'
+ vote:
+ title: 'Hääleta'
+ description: 'Hääleta selle postituse poolt'
+ long_form: 'hääletas selle postituse poolt'
+ topic_flag_types:
+ spam:
+ title: 'Spämm'
+ long_form: 'tähistasin selle kui spämmi'
+ inappropriate:
+ title: 'Ebasobiv'
+ long_form: 'tähistasin selle kui sobimatu'
+ archetypes:
+ banner:
+ title: "Teema Bänneriks"
+ unsubscribed:
+ title: 'Eemaldatud'
+ reports:
+ visits:
+ xaxis: "Päev"
+ signups:
+ title: "Uued kasutajad"
+ xaxis: "Päev"
+ profile_views:
+ xaxis: "Päev"
+ topics:
+ title: "Teemad"
+ xaxis: "Päev"
+ posts:
+ title: "Postitused"
+ xaxis: "Päev"
+ likes:
+ title: "Meeldimisi"
+ xaxis: "Päev"
+ flags:
+ title: "Lipud"
+ xaxis: "Päev"
+ bookmarks:
+ title: "Järjehoidjad"
+ xaxis: "Päev"
+ starred:
+ xaxis: "Päev"
+ users_by_trust_level:
+ xaxis: "Usaldustase"
+ emails:
+ title: "Saadetud kirjad"
+ xaxis: "Päev"
+ yaxis: "Kirjade hulk"
+ user_to_user_private_messages:
+ title: "Kasutajalt kasutajale"
+ xaxis: "Päev"
+ yaxis: "Sõnumite arv"
+ system_private_messages:
+ title: "Süsteem"
+ xaxis: "Päev"
+ yaxis: "Sõnumite arv"
+ moderator_warning_private_messages:
+ xaxis: "Päev"
+ yaxis: "Sõnumite arv"
+ notify_moderators_private_messages:
+ title: "Teavita moderaatorit"
+ xaxis: "Päev"
+ yaxis: "Sõnumite arv"
+ notify_user_private_messages:
+ title: "Teavita kasutajat"
+ xaxis: "Päev"
+ yaxis: "Sõnumite arv"
+ top_referrers:
+ xaxis: "Kasutaja"
+ num_clicks: "Klikid"
+ num_topics: "Teemad"
+ top_traffic_sources:
+ title: "Suurima liikluse allikad"
+ xaxis: "Domeen"
+ num_clicks: "Klikid"
+ num_topics: "Teemad"
+ num_users: "Kasutajad"
+ top_referred_topics:
+ title: "Parimad viidatud teemad"
+ xaxis: "Teema"
+ num_clicks: "Klikid"
+ page_view_anon_reqs:
+ title: "Anonüümne"
+ xaxis: "Päev"
+ page_view_logged_in_reqs:
+ title: "Sisse logitud"
+ xaxis: "Päev"
+ page_view_crawler_reqs:
+ xaxis: "Päev"
+ page_view_total_reqs:
+ title: "Kokku"
+ xaxis: "Päev"
+ page_view_logged_in_mobile_reqs:
+ xaxis: "Päev"
+ page_view_anon_mobile_reqs:
+ xaxis: "Päev"
+ http_background_reqs:
+ title: "Taustal"
+ xaxis: "Päev"
+ http_2xx_reqs:
+ xaxis: "Päev"
+ http_3xx_reqs:
+ xaxis: "Päev"
+ http_4xx_reqs:
+ xaxis: "Päev"
+ http_5xx_reqs:
+ xaxis: "Päev"
+ http_total_reqs:
+ title: "Kokku"
+ xaxis: "Päev"
+ yaxis: "Kokku päringuid"
+ time_to_first_response:
+ xaxis: "Päev"
+ yaxis: "Keskmine aeg (tundides)"
+ topics_with_no_response:
+ title: "Teemad, millele ei ole vastuseid"
+ xaxis: "Päev"
+ yaxis: "Kokku"
+ mobile_visits:
+ xaxis: "Päev"
+ site_settings:
+ min_post_length: "Lühim lubatud postituse pikkus"
+ max_post_length: "Maksimaalne lubatud postituse pikkus tähemärkides"
+ min_topic_title_length: "Lühim lubatud teema pealkirja pikkus tähemärkides"
+ max_topic_title_length: "Maksimaalne lubatud teema pealkirja pikkus tähemärkides"
+ min_private_message_title_length: "Minimaalne lubatud teema pealkirja pikkus tähemärkides"
+ search:
+ types:
+ category: 'Liigid'
+ user: 'Kasutajad'
+ original_poster: "Esialgne postitaja"
+ most_posts: "Enamus postitusi"
+ most_recent_poster: "Viimane postitaja"
+ frequent_poster: "Tihedam postitaja"
+ login:
+ admin_not_allowed_from_ip_address: "Sellelt IP-aadressilt ei saa adminnina sisse logida."
+ system_messages:
+ backup_failed:
+ subject_template: "Varundamine ebaõnnestus"
+ restore_succeeded:
+ subject_template: "Taastamine õnnelikult lõpetatud"
+ text_body_template: "Taastamine õnnestus."
+ restore_failed:
+ subject_template: "Taastamine ebaõnnestus"
+ csv_export_failed:
+ subject_template: "Andmete eksportimine ebaõnnestus"
+ page_not_found:
+ see_more: "Veel"
+ search_google: "Google"
+ terms_of_service:
+ title: "Teenuse tingimused"
+ about: "Teave"
+ guidelines: "Juhendid"
+ privacy: "Privaatsus"
+ csv_export:
+ boolean_yes: "Jah"
+ boolean_no: "Ei"
+ tos_topic:
+ title: "Teenuse tingimused"
+ privacy_topic:
+ title: "Puutumatusnormid"
+ admin_login:
+ success: "Kiri saadetud"
+ error: "Viga!"
+ email_input: "Admini kiri"
+ submit_button: "Saada kiri"
diff --git a/plugins/poll/config/locales/client.et.yml b/plugins/poll/config/locales/client.et.yml
new file mode 100644
index 000000000..a7bac2361
--- /dev/null
+++ b/plugins/poll/config/locales/client.et.yml
@@ -0,0 +1,41 @@
+et:
+ js:
+ poll:
+ voters:
+ one: "hääletaja"
+ other: "hääletajad"
+ total_votes:
+ one: "häält kokku"
+ other: "hääli kokku"
+ average_rating: "Keskmine hinnang: %{average}."
+ multiple:
+ help:
+ at_least_min_options:
+ one: "Sa pead valima vähemalt 1 valiku."
+ other: "Sa võid valida vähemalt %{count} valikut."
+ up_to_max_options:
+ one: "Sa võid valida kuni 1 valiku."
+ other: "Sa võid valida kuni %{count} valikut."
+ x_options:
+ one: "Sa võid valima 1 valiku."
+ other: "Sa võid valida %{count} valikut."
+ between_min_and_max_options: "Sa võid valida vahemikus %{min} ja %{max}."
+ cast-votes:
+ title: "Anna oma hääl"
+ label: "Hääleta nüüd!"
+ show-results:
+ title: "Kuva hääletuse tulemused"
+ label: "Kuva tulemused"
+ hide-results:
+ title: "Tagasi sinu vastuse juurde"
+ label: "Peida tulemused"
+ open:
+ title: "Ava hääletus"
+ label: "Ava"
+ confirm: "Kas sa oled kindel, et soovid selle hääletuse avada?"
+ close:
+ title: "Sulge hääletus"
+ label: "Sulge"
+ confirm: "Kas sa oled kindel, et sa tahad antud hääletuse sulgeda?"
+ error_while_toggling_status: "Hääletuse staatuse muutmisel esines viga."
+ error_while_casting_votes: "Esines veateade teie hääle edastamisel."
diff --git a/plugins/poll/config/locales/server.et.yml b/plugins/poll/config/locales/server.et.yml
new file mode 100644
index 000000000..a3cad2be0
--- /dev/null
+++ b/plugins/poll/config/locales/server.et.yml
@@ -0,0 +1,32 @@
+et:
+ site_settings:
+ poll_enabled: "Lubada kasutajatel küsitlusi koostada?"
+ poll_maximum_options: "Maksimaalne valikute arv, mis on küsitluses lubatud."
+ poll:
+ multiple_polls_without_name: "Mitmed küsitlused on ilma nimeta. Kasuta atribuuti 'name' küsitluse unikaalsuse tagamiseks."
+ multiple_polls_with_same_name: "Mitu küsitlust on sama nimega: %{name}. Kasuta atribuuti 'name' küsitluse unikaalsuse tagamiseks."
+ default_poll_must_have_at_least_2_options: "Küsitlusel peab olema vähemalt 2 valikut."
+ named_poll_must_have_at_least_2_options: "Küsitlusel nimega %{name} peab olema vähemalt 2 valikut."
+ default_poll_must_have_less_options:
+ one: "Küsitlusel peab olema vähemalt 1 valik."
+ other: "Küsitlusel peab olema vähem, kui %{count} valikut."
+ named_poll_must_have_less_options:
+ one: "Küsitlusel nimega %{name} peab olema vähem kui 1 valik."
+ other: "Küsitlusel nimega %{name} peab olema vähem kui %{count} valikut."
+ default_poll_must_have_different_options: "Küsitlusel peavad olema erinevad valikud."
+ named_poll_must_have_different_options: "Küsitlus nimega %{name} peab sisaldama erinevaid valikuid."
+ default_poll_with_multiple_choices_has_invalid_parameters: "Erinevate valikutega küsitlusel pole korrektsed parameetrid."
+ named_poll_with_multiple_choices_has_invalid_parameters: "Mitme valikuga küsitlusel nimega %{name} on vigaseid parameetreid."
+ requires_at_least_1_valid_option: "Pead tegema vähemalt 1 korrektse valiku."
+ cannot_change_polls_after_5_minutes: "Peale esimest 5 minutit ei saa küsitlust enam lisada, eemaldada ega ümber nimetada."
+ op_cannot_edit_options_after_5_minutes: "Peale esimest 5 minutit ei saa küsitluse valikuid lisada ega eemaldada. Palun võta ühendust moderaaatoriga, kui soovid küsitluse valikut muuta."
+ staff_cannot_add_or_remove_options_after_5_minutes: "Peale esimest 5 minutit ei saa küsitluse valikuid lisada ega eemaldada. Peaksid antud teema sulgema ja uue looma."
+ no_polls_associated_with_this_post: "Postitusega pole seotud ühtegi küsitlust."
+ no_poll_with_this_name: "Küsitlust nimega %{name} pole selle teemaga seotud."
+ post_is_deleted: "Kustutatud postitusega ei saa midagi teha."
+ topic_must_be_open_to_vote: "Teema peab olema avatud, et hääletada."
+ poll_must_be_open_to_vote: "Hääletamiseks peab küsitlus olema avatud."
+ topic_must_be_open_to_toggle_status: "Teema peab olema avatud, et staatust muuta."
+ only_staff_or_op_can_toggle_status: "Ainult meeskonnaliige või postitaja ise saavad küsitluse staatust muuta."
+ email:
+ link_to_poll: "Vaata küsitlust"
diff --git a/public/403.et.html b/public/403.et.html
new file mode 100644
index 000000000..4e3a373cd
--- /dev/null
+++ b/public/403.et.html
@@ -0,0 +1,26 @@
+
+