feedback_engine 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +27 -0
- data/MIT-LICENSE +20 -0
- data/README.md +265 -0
- data/Rakefile +8 -0
- data/app/assets/feedback_engine/widget.js +368 -0
- data/app/controllers/feedback_engine/application_controller.rb +15 -0
- data/app/controllers/feedback_engine/feedbacks_controller.rb +120 -0
- data/app/helpers/feedback_engine/widget_helper.rb +18 -0
- data/app/models/feedback_engine/application_record.rb +7 -0
- data/app/models/feedback_engine/feedback.rb +30 -0
- data/app/views/feedback_engine/feedbacks/index.html.erb +75 -0
- data/app/views/feedback_engine/feedbacks/show.html.erb +63 -0
- data/app/views/layouts/feedback_engine/application.html.erb +75 -0
- data/config/locales/feedback_engine.ar.yml +23 -0
- data/config/locales/feedback_engine.bg.yml +23 -0
- data/config/locales/feedback_engine.bn.yml +23 -0
- data/config/locales/feedback_engine.de.yml +23 -0
- data/config/locales/feedback_engine.el.yml +23 -0
- data/config/locales/feedback_engine.en.yml +43 -0
- data/config/locales/feedback_engine.es.yml +23 -0
- data/config/locales/feedback_engine.fr.yml +23 -0
- data/config/locales/feedback_engine.hi.yml +23 -0
- data/config/locales/feedback_engine.hr.yml +23 -0
- data/config/locales/feedback_engine.id.yml +23 -0
- data/config/locales/feedback_engine.it.yml +23 -0
- data/config/locales/feedback_engine.ja.yml +23 -0
- data/config/locales/feedback_engine.ko.yml +23 -0
- data/config/locales/feedback_engine.lb.yml +23 -0
- data/config/locales/feedback_engine.nl.yml +23 -0
- data/config/locales/feedback_engine.pl.yml +23 -0
- data/config/locales/feedback_engine.pt.yml +23 -0
- data/config/locales/feedback_engine.ro.yml +23 -0
- data/config/locales/feedback_engine.ru.yml +23 -0
- data/config/locales/feedback_engine.th.yml +23 -0
- data/config/locales/feedback_engine.tr.yml +23 -0
- data/config/locales/feedback_engine.uk.yml +23 -0
- data/config/locales/feedback_engine.ur.yml +23 -0
- data/config/locales/feedback_engine.vi.yml +23 -0
- data/config/locales/feedback_engine.zh-CN.yml +23 -0
- data/config/routes.rb +8 -0
- data/lib/feedback_engine/configuration.rb +87 -0
- data/lib/feedback_engine/engine.rb +13 -0
- data/lib/feedback_engine/version.rb +5 -0
- data/lib/feedback_engine/widget.rb +107 -0
- data/lib/feedback_engine.rb +34 -0
- data/lib/generators/feedback_engine/install/install_generator.rb +41 -0
- data/lib/generators/feedback_engine/install/templates/create_feedback_engine_feedbacks.rb.tt +21 -0
- data/lib/generators/feedback_engine/install/templates/initializer.rb +43 -0
- metadata +110 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<div class="breadcrumb">
|
|
2
|
+
<%= link_to t('feedback_engine.dashboard.title', default: 'Feedback'), root_path %>
|
|
3
|
+
/ #<%= @feedback.id %>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<h1>
|
|
7
|
+
<span class="badge kind-<%= @feedback.kind.to_s.parameterize %>">
|
|
8
|
+
<%= t("feedback_engine.kinds.#{@feedback.kind}", default: @feedback.kind.humanize) %>
|
|
9
|
+
</span>
|
|
10
|
+
<span class="badge status-<%= @feedback.status %>">
|
|
11
|
+
<%= t("feedback_engine.statuses.#{@feedback.status}", default: @feedback.status.humanize) %>
|
|
12
|
+
</span>
|
|
13
|
+
</h1>
|
|
14
|
+
|
|
15
|
+
<div class="card" style="padding: 16px; margin-bottom: 16px;">
|
|
16
|
+
<p class="message"><%= @feedback.message %></p>
|
|
17
|
+
|
|
18
|
+
<% if @feedback.screenshots? %>
|
|
19
|
+
<div class="shots">
|
|
20
|
+
<% @feedback.screenshots.each do |screenshot| %>
|
|
21
|
+
<%= link_to main_app.url_for(screenshot), target: '_blank', rel: 'noopener' do %>
|
|
22
|
+
<%= image_tag main_app.url_for(screenshot), alt: screenshot.filename %>
|
|
23
|
+
<% end %>
|
|
24
|
+
<% end %>
|
|
25
|
+
</div>
|
|
26
|
+
<% end %>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="card" style="padding: 16px;">
|
|
30
|
+
<dl>
|
|
31
|
+
<% if @feedback.section.present? %>
|
|
32
|
+
<dt><%= t('feedback_engine.section', default: 'Section') %></dt>
|
|
33
|
+
<dd><%= @feedback.section %></dd>
|
|
34
|
+
<% end %>
|
|
35
|
+
<% if @feedback.author_label.present? || @feedback.author_id.present? %>
|
|
36
|
+
<dt><%= t('feedback_engine.dashboard.from', default: 'From') %></dt>
|
|
37
|
+
<dd><%= @feedback.author_label.presence || "##{@feedback.author_id}" %></dd>
|
|
38
|
+
<% end %>
|
|
39
|
+
<% if @feedback.page_url.present? %>
|
|
40
|
+
<dt><%= t('feedback_engine.dashboard.page', default: 'Page') %></dt>
|
|
41
|
+
<dd><%= link_to @feedback.page_url, @feedback.page_url, target: '_blank', rel: 'noopener' %></dd>
|
|
42
|
+
<% end %>
|
|
43
|
+
<% if @feedback.user_agent.present? %>
|
|
44
|
+
<dt><%= t('feedback_engine.dashboard.browser', default: 'Browser') %></dt>
|
|
45
|
+
<dd class="muted"><%= @feedback.user_agent %></dd>
|
|
46
|
+
<% end %>
|
|
47
|
+
<dt><%= t('feedback_engine.dashboard.filed', default: 'Filed') %></dt>
|
|
48
|
+
<dd><%= @feedback.created_at %></dd>
|
|
49
|
+
</dl>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<div class="actions">
|
|
53
|
+
<% (FeedbackEngine::Feedback::STATUSES - [@feedback.status]).each do |status| %>
|
|
54
|
+
<%= button_to t("feedback_engine.dashboard.move_to_#{status}", default: "Mark #{status.humanize.downcase}"),
|
|
55
|
+
feedback_path(@feedback),
|
|
56
|
+
method: :patch, params: { feedback: { status: status } },
|
|
57
|
+
class: ('primary' if status == 'resolved') %>
|
|
58
|
+
<% end %>
|
|
59
|
+
<%= button_to t('feedback_engine.dashboard.delete', default: 'Delete'),
|
|
60
|
+
feedback_path(@feedback),
|
|
61
|
+
method: :delete, class: 'danger',
|
|
62
|
+
form: { onsubmit: "return confirm('#{t('feedback_engine.dashboard.delete_confirm', default: 'Delete this feedback?')}')" } %>
|
|
63
|
+
</div>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title><%= t('feedback_engine.dashboard.title', default: 'Feedback') %></title>
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<%= csrf_meta_tags %>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
color-scheme: light dark;
|
|
10
|
+
--bg: #f6f7f9; --surface: #fff; --text: #1c2024; --muted: #6b7280;
|
|
11
|
+
--border: #e5e7eb; --accent: #2563eb; --accent-text: #fff;
|
|
12
|
+
--bug: #dc2626; --feature: #16a34a; --other: #6b7280;
|
|
13
|
+
--open: #2563eb; --in_review: #d97706; --resolved: #16a34a;
|
|
14
|
+
}
|
|
15
|
+
@media (prefers-color-scheme: dark) {
|
|
16
|
+
:root {
|
|
17
|
+
--bg: #111418; --surface: #1a1f26; --text: #e6e8ea; --muted: #9aa2ab;
|
|
18
|
+
--border: #2a313a; --accent: #3b82f6;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
* { box-sizing: border-box; }
|
|
22
|
+
body { margin: 0; background: var(--bg); color: var(--text);
|
|
23
|
+
font: 15px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; }
|
|
24
|
+
a { color: var(--accent); text-decoration: none; }
|
|
25
|
+
a:hover { text-decoration: underline; }
|
|
26
|
+
.container { max-width: 960px; margin: 0 auto; padding: 24px 16px 64px; }
|
|
27
|
+
h1 { font-size: 22px; margin: 0 0 16px; }
|
|
28
|
+
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border); margin-bottom: 16px; flex-wrap: wrap; }
|
|
29
|
+
.tabs a { padding: 8px 14px; border-radius: 8px 8px 0 0; color: var(--muted); }
|
|
30
|
+
.tabs a.active { color: var(--text); font-weight: 600; border: 1px solid var(--border);
|
|
31
|
+
border-bottom: 2px solid var(--surface); background: var(--surface); margin-bottom: -1px; }
|
|
32
|
+
.tabs a:hover { text-decoration: none; color: var(--text); }
|
|
33
|
+
.count { display: inline-block; min-width: 20px; padding: 0 6px; margin-left: 4px; border-radius: 999px;
|
|
34
|
+
background: var(--border); font-size: 12px; text-align: center; }
|
|
35
|
+
.filters { margin-bottom: 16px; display: flex; gap: 8px; align-items: center; }
|
|
36
|
+
.filters select { padding: 6px 8px; border: 1px solid var(--border); border-radius: 8px;
|
|
37
|
+
background: var(--surface); color: var(--text); }
|
|
38
|
+
.card { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; }
|
|
39
|
+
table { width: 100%; border-collapse: collapse; }
|
|
40
|
+
th, td { padding: 10px 14px; text-align: left; vertical-align: top; }
|
|
41
|
+
th { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted);
|
|
42
|
+
border-bottom: 1px solid var(--border); }
|
|
43
|
+
tr + tr td { border-top: 1px solid var(--border); }
|
|
44
|
+
.badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600;
|
|
45
|
+
color: #fff; white-space: nowrap; }
|
|
46
|
+
.badge.kind-bug { background: var(--bug); }
|
|
47
|
+
.badge.kind-feature { background: var(--feature); }
|
|
48
|
+
.badge.kind-other, .badge.kind-default { background: var(--other); }
|
|
49
|
+
.badge.status-open { background: var(--open); }
|
|
50
|
+
.badge.status-in_review { background: var(--in_review); }
|
|
51
|
+
.badge.status-resolved { background: var(--resolved); }
|
|
52
|
+
.muted { color: var(--muted); font-size: 13px; }
|
|
53
|
+
.pager { margin-top: 16px; display: flex; gap: 16px; }
|
|
54
|
+
.actions { display: flex; gap: 8px; flex-wrap: wrap; margin: 16px 0; }
|
|
55
|
+
.actions form { display: inline; }
|
|
56
|
+
button, .button { padding: 8px 14px; border: 1px solid var(--border); border-radius: 8px; cursor: pointer;
|
|
57
|
+
background: var(--surface); color: var(--text); font: inherit; }
|
|
58
|
+
button.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-text); }
|
|
59
|
+
button.danger { color: var(--bug); }
|
|
60
|
+
.message { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
61
|
+
dl { display: grid; grid-template-columns: max-content 1fr; gap: 6px 16px; margin: 0; }
|
|
62
|
+
dt { color: var(--muted); }
|
|
63
|
+
dd { margin: 0; overflow-wrap: anywhere; }
|
|
64
|
+
.shots { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 8px; }
|
|
65
|
+
.shots img { max-width: 280px; max-height: 200px; border: 1px solid var(--border); border-radius: 8px; }
|
|
66
|
+
.empty { padding: 48px 16px; text-align: center; color: var(--muted); }
|
|
67
|
+
.breadcrumb { margin-bottom: 12px; font-size: 13px; }
|
|
68
|
+
</style>
|
|
69
|
+
</head>
|
|
70
|
+
<body>
|
|
71
|
+
<div class="container">
|
|
72
|
+
<%= yield %>
|
|
73
|
+
</div>
|
|
74
|
+
</body>
|
|
75
|
+
</html>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
ar:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "ملاحظات"
|
|
4
|
+
title: "إرسال ملاحظات"
|
|
5
|
+
kind: "النوع"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "الإبلاغ عن خطأ"
|
|
8
|
+
feature: "طلب ميزة"
|
|
9
|
+
other: "أخرى"
|
|
10
|
+
section: "القسم"
|
|
11
|
+
section_any: "عام"
|
|
12
|
+
message: "رسالتك"
|
|
13
|
+
message_placeholder: "أخبرنا بما يدور في ذهنك…"
|
|
14
|
+
screenshots: "لقطات الشاشة"
|
|
15
|
+
screenshots_hint: "اختياري، حتى %{count} ملفات، %{size} ميغابايت لكل ملف"
|
|
16
|
+
submit: "إرسال الملاحظات"
|
|
17
|
+
cancel: "إلغاء"
|
|
18
|
+
close: "إغلاق"
|
|
19
|
+
thanks: "شكرًا لملاحظاتك!"
|
|
20
|
+
error_blank: "يرجى إدخال رسالة."
|
|
21
|
+
error_save: "تعذر إرسال الملاحظات. يرجى المحاولة مرة أخرى."
|
|
22
|
+
error_too_many: "عدد كبير جدًا من لقطات الشاشة (الحد الأقصى %{count})."
|
|
23
|
+
error_too_large: "إحدى لقطات الشاشة كبيرة جدًا (الحد الأقصى %{size} ميغابايت)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
bg:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Обратна връзка"
|
|
4
|
+
title: "Изпратете обратна връзка"
|
|
5
|
+
kind: "Тип"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Докладване на грешка"
|
|
8
|
+
feature: "Заявка за функционалност"
|
|
9
|
+
other: "Друго"
|
|
10
|
+
section: "Раздел"
|
|
11
|
+
section_any: "Общи"
|
|
12
|
+
message: "Вашето съобщение"
|
|
13
|
+
message_placeholder: "Кажете ни какво мислите…"
|
|
14
|
+
screenshots: "Екранни снимки"
|
|
15
|
+
screenshots_hint: "по избор, до %{count} файла, по %{size} MB всеки"
|
|
16
|
+
submit: "Изпрати"
|
|
17
|
+
cancel: "Отказ"
|
|
18
|
+
close: "Затвори"
|
|
19
|
+
thanks: "Благодарим за обратната връзка!"
|
|
20
|
+
error_blank: "Моля, въведете съобщение."
|
|
21
|
+
error_save: "Изпращането не бе успешно. Моля, опитайте отново."
|
|
22
|
+
error_too_many: "Твърде много екранни снимки (макс. %{count})."
|
|
23
|
+
error_too_large: "Екранна снимка е твърде голяма (макс. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
bn:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "মতামত"
|
|
4
|
+
title: "মতামত পাঠান"
|
|
5
|
+
kind: "ধরন"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "ত্রুটি জানান"
|
|
8
|
+
feature: "ফিচারের অনুরোধ"
|
|
9
|
+
other: "অন্যান্য"
|
|
10
|
+
section: "বিভাগ"
|
|
11
|
+
section_any: "সাধারণ"
|
|
12
|
+
message: "আপনার বার্তা"
|
|
13
|
+
message_placeholder: "আপনার মনে কী আছে আমাদের জানান…"
|
|
14
|
+
screenshots: "স্ক্রিনশট"
|
|
15
|
+
screenshots_hint: "ঐচ্ছিক, সর্বোচ্চ %{count}টি ফাইল, প্রতিটি %{size} MB"
|
|
16
|
+
submit: "মতামত পাঠান"
|
|
17
|
+
cancel: "বাতিল"
|
|
18
|
+
close: "বন্ধ করুন"
|
|
19
|
+
thanks: "আপনার মতামতের জন্য ধন্যবাদ!"
|
|
20
|
+
error_blank: "অনুগ্রহ করে একটি বার্তা লিখুন।"
|
|
21
|
+
error_save: "মতামত পাঠানো যায়নি। আবার চেষ্টা করুন।"
|
|
22
|
+
error_too_many: "অতিরিক্ত স্ক্রিনশট (সর্বোচ্চ %{count}টি)।"
|
|
23
|
+
error_too_large: "একটি স্ক্রিনশট খুব বড় (সর্বোচ্চ %{size} MB)।"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
de:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Feedback"
|
|
4
|
+
title: "Feedback senden"
|
|
5
|
+
kind: "Art"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Fehlerbericht"
|
|
8
|
+
feature: "Funktionswunsch"
|
|
9
|
+
other: "Sonstiges"
|
|
10
|
+
section: "Bereich"
|
|
11
|
+
section_any: "Allgemein"
|
|
12
|
+
message: "Ihre Nachricht"
|
|
13
|
+
message_placeholder: "Sagen Sie uns, was Sie denken…"
|
|
14
|
+
screenshots: "Screenshots"
|
|
15
|
+
screenshots_hint: "optional, bis zu %{count} Dateien, je %{size} MB"
|
|
16
|
+
submit: "Feedback senden"
|
|
17
|
+
cancel: "Abbrechen"
|
|
18
|
+
close: "Schließen"
|
|
19
|
+
thanks: "Danke für Ihr Feedback!"
|
|
20
|
+
error_blank: "Bitte geben Sie eine Nachricht ein."
|
|
21
|
+
error_save: "Senden fehlgeschlagen. Bitte erneut versuchen."
|
|
22
|
+
error_too_many: "Zu viele Screenshots (max. %{count})."
|
|
23
|
+
error_too_large: "Ein Screenshot ist zu groß (max. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
el:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Σχόλια"
|
|
4
|
+
title: "Αποστολή σχολίων"
|
|
5
|
+
kind: "Τύπος"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Αναφορά σφάλματος"
|
|
8
|
+
feature: "Αίτημα λειτουργίας"
|
|
9
|
+
other: "Άλλο"
|
|
10
|
+
section: "Ενότητα"
|
|
11
|
+
section_any: "Γενικά"
|
|
12
|
+
message: "Το μήνυμά σας"
|
|
13
|
+
message_placeholder: "Πείτε μας τι σκέφτεστε…"
|
|
14
|
+
screenshots: "Στιγμιότυπα οθόνης"
|
|
15
|
+
screenshots_hint: "προαιρετικά, έως %{count} αρχεία, %{size} MB το καθένα"
|
|
16
|
+
submit: "Αποστολή σχολίων"
|
|
17
|
+
cancel: "Άκυρο"
|
|
18
|
+
close: "Κλείσιμο"
|
|
19
|
+
thanks: "Ευχαριστούμε για τα σχόλιά σας!"
|
|
20
|
+
error_blank: "Παρακαλώ εισαγάγετε ένα μήνυμα."
|
|
21
|
+
error_save: "Η αποστολή απέτυχε. Δοκιμάστε ξανά."
|
|
22
|
+
error_too_many: "Πάρα πολλά στιγμιότυπα οθόνης (έως %{count})."
|
|
23
|
+
error_too_large: "Ένα στιγμιότυπο οθόνης είναι πολύ μεγάλο (έως %{size} MB)."
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
en:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Feedback"
|
|
4
|
+
title: "Send feedback"
|
|
5
|
+
kind: "Type"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Bug report"
|
|
8
|
+
feature: "Feature request"
|
|
9
|
+
other: "Other"
|
|
10
|
+
section: "Section"
|
|
11
|
+
section_any: "General"
|
|
12
|
+
message: "Your message"
|
|
13
|
+
message_placeholder: "Tell us what's on your mind…"
|
|
14
|
+
screenshots: "Screenshots"
|
|
15
|
+
screenshots_hint: "optional, up to %{count} files, %{size} MB each"
|
|
16
|
+
submit: "Send feedback"
|
|
17
|
+
cancel: "Cancel"
|
|
18
|
+
close: "Close"
|
|
19
|
+
thanks: "Thanks for your feedback!"
|
|
20
|
+
error_blank: "Please enter a message."
|
|
21
|
+
error_save: "Could not send feedback. Please try again."
|
|
22
|
+
error_too_many: "Too many screenshots (max %{count})."
|
|
23
|
+
error_too_large: "A screenshot is too large (max %{size} MB)."
|
|
24
|
+
statuses:
|
|
25
|
+
open: "Open"
|
|
26
|
+
in_review: "In review"
|
|
27
|
+
resolved: "Resolved"
|
|
28
|
+
dashboard:
|
|
29
|
+
title: "Feedback"
|
|
30
|
+
all_kinds: "All types"
|
|
31
|
+
filter: "Filter"
|
|
32
|
+
from: "From"
|
|
33
|
+
filed: "Filed"
|
|
34
|
+
page: "Page"
|
|
35
|
+
browser: "Browser"
|
|
36
|
+
empty: "Nothing here yet."
|
|
37
|
+
newer: "← Newer"
|
|
38
|
+
older: "Older →"
|
|
39
|
+
move_to_open: "Reopen"
|
|
40
|
+
move_to_in_review: "Mark in review"
|
|
41
|
+
move_to_resolved: "Mark resolved"
|
|
42
|
+
delete: "Delete"
|
|
43
|
+
delete_confirm: "Delete this feedback?"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
es:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Comentarios"
|
|
4
|
+
title: "Enviar comentarios"
|
|
5
|
+
kind: "Tipo"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Informe de error"
|
|
8
|
+
feature: "Solicitud de función"
|
|
9
|
+
other: "Otro"
|
|
10
|
+
section: "Sección"
|
|
11
|
+
section_any: "General"
|
|
12
|
+
message: "Tu mensaje"
|
|
13
|
+
message_placeholder: "Cuéntanos qué piensas…"
|
|
14
|
+
screenshots: "Capturas de pantalla"
|
|
15
|
+
screenshots_hint: "opcional, hasta %{count} archivos, %{size} MB cada uno"
|
|
16
|
+
submit: "Enviar comentarios"
|
|
17
|
+
cancel: "Cancelar"
|
|
18
|
+
close: "Cerrar"
|
|
19
|
+
thanks: "¡Gracias por tus comentarios!"
|
|
20
|
+
error_blank: "Por favor escribe un mensaje."
|
|
21
|
+
error_save: "No se pudo enviar. Inténtalo de nuevo."
|
|
22
|
+
error_too_many: "Demasiadas capturas (máx. %{count})."
|
|
23
|
+
error_too_large: "Una captura es demasiado grande (máx. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
fr:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Commentaires"
|
|
4
|
+
title: "Envoyer un commentaire"
|
|
5
|
+
kind: "Type"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Signaler un bug"
|
|
8
|
+
feature: "Suggestion de fonctionnalité"
|
|
9
|
+
other: "Autre"
|
|
10
|
+
section: "Section"
|
|
11
|
+
section_any: "Général"
|
|
12
|
+
message: "Votre message"
|
|
13
|
+
message_placeholder: "Dites-nous ce que vous pensez…"
|
|
14
|
+
screenshots: "Captures d'écran"
|
|
15
|
+
screenshots_hint: "facultatif, jusqu'à %{count} fichiers, %{size} Mo chacun"
|
|
16
|
+
submit: "Envoyer"
|
|
17
|
+
cancel: "Annuler"
|
|
18
|
+
close: "Fermer"
|
|
19
|
+
thanks: "Merci pour votre retour !"
|
|
20
|
+
error_blank: "Veuillez saisir un message."
|
|
21
|
+
error_save: "Envoi impossible. Veuillez réessayer."
|
|
22
|
+
error_too_many: "Trop de captures d'écran (max %{count})."
|
|
23
|
+
error_too_large: "Une capture est trop volumineuse (max %{size} Mo)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
hi:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "प्रतिक्रिया"
|
|
4
|
+
title: "प्रतिक्रिया भेजें"
|
|
5
|
+
kind: "प्रकार"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "बग रिपोर्ट"
|
|
8
|
+
feature: "फ़ीचर अनुरोध"
|
|
9
|
+
other: "अन्य"
|
|
10
|
+
section: "अनुभाग"
|
|
11
|
+
section_any: "सामान्य"
|
|
12
|
+
message: "आपका संदेश"
|
|
13
|
+
message_placeholder: "हमें बताएं कि आप क्या सोच रहे हैं…"
|
|
14
|
+
screenshots: "स्क्रीनशॉट"
|
|
15
|
+
screenshots_hint: "वैकल्पिक, अधिकतम %{count} फ़ाइलें, प्रत्येक %{size} MB"
|
|
16
|
+
submit: "प्रतिक्रिया भेजें"
|
|
17
|
+
cancel: "रद्द करें"
|
|
18
|
+
close: "बंद करें"
|
|
19
|
+
thanks: "आपकी प्रतिक्रिया के लिए धन्यवाद!"
|
|
20
|
+
error_blank: "कृपया एक संदेश लिखें।"
|
|
21
|
+
error_save: "प्रतिक्रिया नहीं भेजी जा सकी। कृपया फिर से प्रयास करें।"
|
|
22
|
+
error_too_many: "बहुत अधिक स्क्रीनशॉट (अधिकतम %{count})।"
|
|
23
|
+
error_too_large: "एक स्क्रीनशॉट बहुत बड़ा है (अधिकतम %{size} MB)।"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
hr:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Povratne informacije"
|
|
4
|
+
title: "Pošaljite povratne informacije"
|
|
5
|
+
kind: "Vrsta"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Prijava greške"
|
|
8
|
+
feature: "Zahtjev za značajku"
|
|
9
|
+
other: "Ostalo"
|
|
10
|
+
section: "Odjeljak"
|
|
11
|
+
section_any: "Općenito"
|
|
12
|
+
message: "Vaša poruka"
|
|
13
|
+
message_placeholder: "Recite nam što mislite…"
|
|
14
|
+
screenshots: "Snimke zaslona"
|
|
15
|
+
screenshots_hint: "neobavezno, do %{count} datoteke, svaka %{size} MB"
|
|
16
|
+
submit: "Pošalji"
|
|
17
|
+
cancel: "Odustani"
|
|
18
|
+
close: "Zatvori"
|
|
19
|
+
thanks: "Hvala na povratnim informacijama!"
|
|
20
|
+
error_blank: "Molimo unesite poruku."
|
|
21
|
+
error_save: "Slanje nije uspjelo. Pokušajte ponovno."
|
|
22
|
+
error_too_many: "Previše snimki zaslona (najviše %{count})."
|
|
23
|
+
error_too_large: "Snimka zaslona je prevelika (najviše %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
id:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Masukan"
|
|
4
|
+
title: "Kirim masukan"
|
|
5
|
+
kind: "Jenis"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Laporan bug"
|
|
8
|
+
feature: "Permintaan fitur"
|
|
9
|
+
other: "Lainnya"
|
|
10
|
+
section: "Bagian"
|
|
11
|
+
section_any: "Umum"
|
|
12
|
+
message: "Pesan Anda"
|
|
13
|
+
message_placeholder: "Ceritakan apa yang Anda pikirkan…"
|
|
14
|
+
screenshots: "Tangkapan layar"
|
|
15
|
+
screenshots_hint: "opsional, maksimal %{count} berkas, masing-masing %{size} MB"
|
|
16
|
+
submit: "Kirim masukan"
|
|
17
|
+
cancel: "Batal"
|
|
18
|
+
close: "Tutup"
|
|
19
|
+
thanks: "Terima kasih atas masukan Anda!"
|
|
20
|
+
error_blank: "Silakan tulis pesan."
|
|
21
|
+
error_save: "Masukan gagal terkirim. Silakan coba lagi."
|
|
22
|
+
error_too_many: "Terlalu banyak tangkapan layar (maks. %{count})."
|
|
23
|
+
error_too_large: "Sebuah tangkapan layar terlalu besar (maks. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
it:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Feedback"
|
|
4
|
+
title: "Invia feedback"
|
|
5
|
+
kind: "Tipo"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Segnala un errore"
|
|
8
|
+
feature: "Richiesta di funzionalità"
|
|
9
|
+
other: "Altro"
|
|
10
|
+
section: "Sezione"
|
|
11
|
+
section_any: "Generale"
|
|
12
|
+
message: "Il tuo messaggio"
|
|
13
|
+
message_placeholder: "Dicci cosa ne pensi…"
|
|
14
|
+
screenshots: "Screenshot"
|
|
15
|
+
screenshots_hint: "facoltativo, fino a %{count} file, %{size} MB ciascuno"
|
|
16
|
+
submit: "Invia feedback"
|
|
17
|
+
cancel: "Annulla"
|
|
18
|
+
close: "Chiudi"
|
|
19
|
+
thanks: "Grazie per il tuo feedback!"
|
|
20
|
+
error_blank: "Inserisci un messaggio."
|
|
21
|
+
error_save: "Invio non riuscito. Riprova."
|
|
22
|
+
error_too_many: "Troppi screenshot (max %{count})."
|
|
23
|
+
error_too_large: "Uno screenshot è troppo grande (max %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
ja:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "フィードバック"
|
|
4
|
+
title: "フィードバックを送信"
|
|
5
|
+
kind: "種類"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "バグ報告"
|
|
8
|
+
feature: "機能リクエスト"
|
|
9
|
+
other: "その他"
|
|
10
|
+
section: "セクション"
|
|
11
|
+
section_any: "全般"
|
|
12
|
+
message: "メッセージ"
|
|
13
|
+
message_placeholder: "ご意見をお聞かせください…"
|
|
14
|
+
screenshots: "スクリーンショット"
|
|
15
|
+
screenshots_hint: "任意、最大%{count}ファイル、各%{size} MB"
|
|
16
|
+
submit: "送信"
|
|
17
|
+
cancel: "キャンセル"
|
|
18
|
+
close: "閉じる"
|
|
19
|
+
thanks: "フィードバックありがとうございます!"
|
|
20
|
+
error_blank: "メッセージを入力してください。"
|
|
21
|
+
error_save: "送信できませんでした。もう一度お試しください。"
|
|
22
|
+
error_too_many: "スクリーンショットが多すぎます(最大%{count}枚)。"
|
|
23
|
+
error_too_large: "スクリーンショットが大きすぎます(最大%{size} MB)。"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
ko:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "피드백"
|
|
4
|
+
title: "피드백 보내기"
|
|
5
|
+
kind: "유형"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "버그 신고"
|
|
8
|
+
feature: "기능 요청"
|
|
9
|
+
other: "기타"
|
|
10
|
+
section: "섹션"
|
|
11
|
+
section_any: "일반"
|
|
12
|
+
message: "메시지"
|
|
13
|
+
message_placeholder: "의견을 들려주세요…"
|
|
14
|
+
screenshots: "스크린샷"
|
|
15
|
+
screenshots_hint: "선택 사항, 최대 %{count}개 파일, 각 %{size} MB"
|
|
16
|
+
submit: "피드백 보내기"
|
|
17
|
+
cancel: "취소"
|
|
18
|
+
close: "닫기"
|
|
19
|
+
thanks: "피드백 감사합니다!"
|
|
20
|
+
error_blank: "메시지를 입력해 주세요."
|
|
21
|
+
error_save: "피드백을 보낼 수 없습니다. 다시 시도해 주세요."
|
|
22
|
+
error_too_many: "스크린샷이 너무 많습니다 (최대 %{count}개)."
|
|
23
|
+
error_too_large: "스크린샷이 너무 큽니다 (최대 %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
lb:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Feedback"
|
|
4
|
+
title: "Feedback schécken"
|
|
5
|
+
kind: "Typ"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Feeler mellen"
|
|
8
|
+
feature: "Funktioun ufroen"
|
|
9
|
+
other: "Aneres"
|
|
10
|
+
section: "Beräich"
|
|
11
|
+
section_any: "Allgemeng"
|
|
12
|
+
message: "Är Noriicht"
|
|
13
|
+
message_placeholder: "Sot eis, wat Iech um Häerz läit…"
|
|
14
|
+
screenshots: "Screenshots"
|
|
15
|
+
screenshots_hint: "optional, bis zu %{count} Fichieren, all %{size} MB"
|
|
16
|
+
submit: "Feedback schécken"
|
|
17
|
+
cancel: "Ofbriechen"
|
|
18
|
+
close: "Zoumaachen"
|
|
19
|
+
thanks: "Merci fir Äre Feedback!"
|
|
20
|
+
error_blank: "Gitt w.e.g. eng Noriicht an."
|
|
21
|
+
error_save: "Konnt net geschéckt ginn. Probéiert w.e.g. nach eng Kéier."
|
|
22
|
+
error_too_many: "Ze vill Screenshots (max. %{count})."
|
|
23
|
+
error_too_large: "E Screenshot ass ze grouss (max. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
nl:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Feedback"
|
|
4
|
+
title: "Feedback versturen"
|
|
5
|
+
kind: "Type"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Fout melden"
|
|
8
|
+
feature: "Functieverzoek"
|
|
9
|
+
other: "Overig"
|
|
10
|
+
section: "Sectie"
|
|
11
|
+
section_any: "Algemeen"
|
|
12
|
+
message: "Je bericht"
|
|
13
|
+
message_placeholder: "Vertel ons wat je bezighoudt…"
|
|
14
|
+
screenshots: "Schermafbeeldingen"
|
|
15
|
+
screenshots_hint: "optioneel, maximaal %{count} bestanden, elk %{size} MB"
|
|
16
|
+
submit: "Feedback versturen"
|
|
17
|
+
cancel: "Annuleren"
|
|
18
|
+
close: "Sluiten"
|
|
19
|
+
thanks: "Bedankt voor je feedback!"
|
|
20
|
+
error_blank: "Voer een bericht in."
|
|
21
|
+
error_save: "Versturen mislukt. Probeer het opnieuw."
|
|
22
|
+
error_too_many: "Te veel schermafbeeldingen (max. %{count})."
|
|
23
|
+
error_too_large: "Een schermafbeelding is te groot (max. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
pl:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Opinie"
|
|
4
|
+
title: "Wyślij opinię"
|
|
5
|
+
kind: "Typ"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Zgłoszenie błędu"
|
|
8
|
+
feature: "Propozycja funkcji"
|
|
9
|
+
other: "Inne"
|
|
10
|
+
section: "Sekcja"
|
|
11
|
+
section_any: "Ogólne"
|
|
12
|
+
message: "Twoja wiadomość"
|
|
13
|
+
message_placeholder: "Powiedz nam, co myślisz…"
|
|
14
|
+
screenshots: "Zrzuty ekranu"
|
|
15
|
+
screenshots_hint: "opcjonalnie, do %{count} plików, po %{size} MB każdy"
|
|
16
|
+
submit: "Wyślij opinię"
|
|
17
|
+
cancel: "Anuluj"
|
|
18
|
+
close: "Zamknij"
|
|
19
|
+
thanks: "Dziękujemy za opinię!"
|
|
20
|
+
error_blank: "Wpisz wiadomość."
|
|
21
|
+
error_save: "Nie udało się wysłać opinii. Spróbuj ponownie."
|
|
22
|
+
error_too_many: "Za dużo zrzutów ekranu (maks. %{count})."
|
|
23
|
+
error_too_large: "Zrzut ekranu jest za duży (maks. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
pt:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Feedback"
|
|
4
|
+
title: "Enviar feedback"
|
|
5
|
+
kind: "Tipo"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Relatar erro"
|
|
8
|
+
feature: "Sugestão de funcionalidade"
|
|
9
|
+
other: "Outro"
|
|
10
|
+
section: "Seção"
|
|
11
|
+
section_any: "Geral"
|
|
12
|
+
message: "Sua mensagem"
|
|
13
|
+
message_placeholder: "Conte-nos o que você pensa…"
|
|
14
|
+
screenshots: "Capturas de tela"
|
|
15
|
+
screenshots_hint: "opcional, até %{count} arquivos, %{size} MB cada"
|
|
16
|
+
submit: "Enviar feedback"
|
|
17
|
+
cancel: "Cancelar"
|
|
18
|
+
close: "Fechar"
|
|
19
|
+
thanks: "Obrigado pelo seu feedback!"
|
|
20
|
+
error_blank: "Por favor, escreva uma mensagem."
|
|
21
|
+
error_save: "Não foi possível enviar. Tente novamente."
|
|
22
|
+
error_too_many: "Muitas capturas de tela (máx. %{count})."
|
|
23
|
+
error_too_large: "Uma captura é grande demais (máx. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
ro:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Feedback"
|
|
4
|
+
title: "Trimite feedback"
|
|
5
|
+
kind: "Tip"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Raportează o eroare"
|
|
8
|
+
feature: "Cerere de funcționalitate"
|
|
9
|
+
other: "Altele"
|
|
10
|
+
section: "Secțiune"
|
|
11
|
+
section_any: "General"
|
|
12
|
+
message: "Mesajul tău"
|
|
13
|
+
message_placeholder: "Spune-ne ce părere ai…"
|
|
14
|
+
screenshots: "Capturi de ecran"
|
|
15
|
+
screenshots_hint: "opțional, până la %{count} fișiere, fiecare de %{size} MB"
|
|
16
|
+
submit: "Trimite feedback"
|
|
17
|
+
cancel: "Anulează"
|
|
18
|
+
close: "Închide"
|
|
19
|
+
thanks: "Mulțumim pentru feedback!"
|
|
20
|
+
error_blank: "Te rugăm să introduci un mesaj."
|
|
21
|
+
error_save: "Trimiterea a eșuat. Încearcă din nou."
|
|
22
|
+
error_too_many: "Prea multe capturi de ecran (max. %{count})."
|
|
23
|
+
error_too_large: "O captură de ecran este prea mare (max. %{size} MB)."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
ru:
|
|
2
|
+
feedback_engine:
|
|
3
|
+
button: "Обратная связь"
|
|
4
|
+
title: "Отправить отзыв"
|
|
5
|
+
kind: "Тип"
|
|
6
|
+
kinds:
|
|
7
|
+
bug: "Сообщить об ошибке"
|
|
8
|
+
feature: "Предложить функцию"
|
|
9
|
+
other: "Другое"
|
|
10
|
+
section: "Раздел"
|
|
11
|
+
section_any: "Общее"
|
|
12
|
+
message: "Ваше сообщение"
|
|
13
|
+
message_placeholder: "Расскажите, что у вас на уме…"
|
|
14
|
+
screenshots: "Скриншоты"
|
|
15
|
+
screenshots_hint: "необязательно, до %{count} файлов, по %{size} МБ"
|
|
16
|
+
submit: "Отправить отзыв"
|
|
17
|
+
cancel: "Отмена"
|
|
18
|
+
close: "Закрыть"
|
|
19
|
+
thanks: "Спасибо за ваш отзыв!"
|
|
20
|
+
error_blank: "Пожалуйста, введите сообщение."
|
|
21
|
+
error_save: "Не удалось отправить. Попробуйте ещё раз."
|
|
22
|
+
error_too_many: "Слишком много скриншотов (макс. %{count})."
|
|
23
|
+
error_too_large: "Скриншот слишком большой (макс. %{size} МБ)."
|