livechat 0.5.0 → 0.5.2
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 +4 -4
- data/CHANGELOG.md +18 -0
- data/app/controllers/livechat/attachments_controller.rb +4 -4
- data/app/helpers/livechat/inbox_helper.rb +5 -2
- data/app/models/livechat/message.rb +5 -3
- data/app/views/layouts/livechat/application.html.erb +10 -0
- data/app/views/livechat/conversations/show.html.erb +10 -1
- data/config/locales/livechat.ar.yml +14 -0
- data/config/locales/livechat.bg.yml +14 -0
- data/config/locales/livechat.bn.yml +14 -0
- data/config/locales/livechat.de.yml +14 -0
- data/config/locales/livechat.el.yml +14 -0
- data/config/locales/livechat.en.yml +14 -0
- data/config/locales/livechat.es.yml +14 -0
- data/config/locales/livechat.fr.yml +14 -0
- data/config/locales/livechat.hi.yml +14 -0
- data/config/locales/livechat.hr.yml +14 -0
- data/config/locales/livechat.id.yml +14 -0
- data/config/locales/livechat.it.yml +14 -0
- data/config/locales/livechat.ja.yml +14 -0
- data/config/locales/livechat.ko.yml +14 -0
- data/config/locales/livechat.lb.yml +14 -0
- data/config/locales/livechat.nl.yml +14 -0
- data/config/locales/livechat.pl.yml +14 -0
- data/config/locales/livechat.pt.yml +14 -0
- data/config/locales/livechat.ro.yml +14 -0
- data/config/locales/livechat.ru.yml +14 -0
- data/config/locales/livechat.th.yml +14 -0
- data/config/locales/livechat.tr.yml +14 -0
- data/config/locales/livechat.uk.yml +14 -0
- data/config/locales/livechat.ur.yml +14 -0
- data/config/locales/livechat.vi.yml +14 -0
- data/config/locales/livechat.zh-CN.yml +14 -0
- data/lib/livechat/dashboard.js +185 -2
- data/lib/livechat/version.rb +1 -1
- data/lib/livechat/widget.js +270 -10
- data/lib/livechat/widget.rb +8 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 69c3cd167112ced4976fb8b759c45586255c4f9c94f8d89aedfc481efd138e09
|
|
4
|
+
data.tar.gz: c1762cc48eb85e28d203c4ac272137f12ced552a1dc96555be8c8c9af14d7161
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b84e5860f58d5cffc5da5eb0694f600597e5c7932805ab7a376a12997fbfb8e0ba3e380eecfe1462bdf7f167f46c79cdb46d52f4c5a63ebfe2c4458bb8165263
|
|
7
|
+
data.tar.gz: 0dc49e26bf29a41797a96317a5c4cbaeca3c3ec5edbe6a0b253c451ad1ab08cbec4c60c1f66faf14de0916a118d6f4ede433b6c3db6ca42d5dfe434bc2e5ddab
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.2
|
|
4
|
+
|
|
5
|
+
- Added audio messages. Visitors can record a voice note from the widget, send
|
|
6
|
+
it as an attachment, and both visitors and agents can play audio files
|
|
7
|
+
inline in the conversation.
|
|
8
|
+
- Tightened the mobile chat modal scroll lock for iOS keyboard edge cases. The
|
|
9
|
+
widget now locks both root elements, blocks touch scrolling that escapes the
|
|
10
|
+
chat thread, and re-checks the lock when the viewport switches between phone
|
|
11
|
+
and desktop widths while the panel is open.
|
|
12
|
+
|
|
13
|
+
## 0.5.1
|
|
14
|
+
|
|
15
|
+
- Fixed the mobile chat panel letting the page scroll behind it (and the host
|
|
16
|
+
page showing through above/below the panel) while the keyboard was open.
|
|
17
|
+
The scroll lock now pins `<body>` with `position: fixed` — `overflow:hidden`
|
|
18
|
+
alone is ignored by iOS Safari for touch — so the background is truly frozen
|
|
19
|
+
and the keyboard-pinned panel covers the visible area with no gaps.
|
|
20
|
+
|
|
3
21
|
## 0.5.0
|
|
4
22
|
|
|
5
23
|
- The full-screen mobile panel now survives the on-screen keyboard. On phones
|
|
@@ -46,12 +46,12 @@ module Livechat
|
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
# Images render inline (so the
|
|
50
|
-
# else downloads. nosniff keeps the browser from
|
|
51
|
-
# of a visitor-supplied file.
|
|
49
|
+
# Images and audio render inline (so the clients can show native media
|
|
50
|
+
# controls); anything else downloads. nosniff keeps the browser from
|
|
51
|
+
# second-guessing the type of a visitor-supplied file.
|
|
52
52
|
def stream(blob)
|
|
53
53
|
response.headers['X-Content-Type-Options'] = 'nosniff'
|
|
54
|
-
inline = blob.content_type.to_s.start_with?('image/')
|
|
54
|
+
inline = blob.content_type.to_s.start_with?('image/', 'audio/')
|
|
55
55
|
send_data blob.download,
|
|
56
56
|
filename: blob.filename.to_s,
|
|
57
57
|
type: blob.content_type.presence || 'application/octet-stream',
|
|
@@ -16,8 +16,8 @@ module Livechat
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
# A message's attachments, rendered like the widget: images inline as
|
|
19
|
-
# thumbnails, everything else as a download link.
|
|
20
|
-
# engine route, never a public blob URL.
|
|
19
|
+
# thumbnails, audio as native controls, everything else as a download link.
|
|
20
|
+
# All point at the gated engine route, never a public blob URL.
|
|
21
21
|
def livechat_message_attachments(message)
|
|
22
22
|
attachments = message.attachments_json
|
|
23
23
|
return if attachments.empty?
|
|
@@ -41,6 +41,9 @@ module Livechat
|
|
|
41
41
|
if attachment[:image]
|
|
42
42
|
link_to image_tag(attachment[:url], alt: attachment[:name], loading: 'lazy'),
|
|
43
43
|
attachment[:url], target: '_blank', rel: 'noopener', class: 'att-img'
|
|
44
|
+
elsif attachment[:audio]
|
|
45
|
+
tag.audio(controls: true, preload: 'metadata', src: attachment[:url],
|
|
46
|
+
class: 'att-audio', aria: { label: attachment[:name] })
|
|
44
47
|
else
|
|
45
48
|
link_to attachment[:name], attachment[:url],
|
|
46
49
|
target: '_blank', rel: 'noopener', class: 'att-file'
|
|
@@ -97,17 +97,19 @@ module Livechat
|
|
|
97
97
|
end
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
-
# [{ id:, name:, url:, image:, size: }] — url is the gated engine
|
|
101
|
-
# image flags
|
|
100
|
+
# [{ id:, name:, url:, image:, audio:, size: }] — url is the gated engine
|
|
101
|
+
# route; image/audio flags tell clients which native preview to render.
|
|
102
102
|
def attachments_json
|
|
103
103
|
return [] unless files_attached?
|
|
104
104
|
|
|
105
105
|
base = Livechat.config.mount_path.to_s.chomp('/')
|
|
106
106
|
files.map do |file|
|
|
107
|
+
content_type = file.content_type.to_s
|
|
107
108
|
{ id: file.id,
|
|
108
109
|
name: file.filename.to_s,
|
|
109
110
|
url: "#{base}/attachments/#{file.id}",
|
|
110
|
-
image:
|
|
111
|
+
image: content_type.start_with?('image/'),
|
|
112
|
+
audio: content_type.start_with?('audio/'),
|
|
111
113
|
size: file.byte_size }
|
|
112
114
|
end
|
|
113
115
|
end
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
.thread .system { align-self: center; color: var(--muted); font-size: 12px; margin: 8px 0; }
|
|
88
88
|
.thread .msg .atts { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
|
|
89
89
|
.thread .msg .att-img img { max-width: 100%; max-height: 240px; border-radius: 8px; display: block; }
|
|
90
|
+
.thread .msg .att-audio { display: block; width: 280px; max-width: 100%; height: 36px; }
|
|
90
91
|
.thread .msg .att-file { display: inline-block; padding: 6px 10px; border-radius: 8px;
|
|
91
92
|
background: rgba(0,0,0,.06); color: inherit; font-size: 13px;
|
|
92
93
|
overflow-wrap: anywhere; }
|
|
@@ -109,6 +110,7 @@
|
|
|
109
110
|
color: var(--muted); border-radius: 8px; cursor: pointer;
|
|
110
111
|
display: flex; align-items: center; justify-content: center; }
|
|
111
112
|
.reply .attach:hover { background: var(--border); color: var(--text); }
|
|
113
|
+
.reply .attach.recording-on { color: var(--danger); }
|
|
112
114
|
.reply .chips { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
113
115
|
.reply .chip { display: inline-flex; align-items: center; gap: 6px; max-width: 100%;
|
|
114
116
|
padding: 4px 6px 4px 10px; border: 1px solid var(--border); border-radius: 999px;
|
|
@@ -117,6 +119,14 @@
|
|
|
117
119
|
.reply .chip-x { padding: 0 2px; border: none; background: none; color: var(--muted);
|
|
118
120
|
font-size: 16px; line-height: 1; cursor: pointer; }
|
|
119
121
|
.reply .chip-x:hover { color: var(--text); }
|
|
122
|
+
.reply .recording { display: flex; align-items: center; justify-content: space-between; gap: 8px;
|
|
123
|
+
padding: 6px 4px 0; color: var(--muted); font-size: 12px; }
|
|
124
|
+
.reply .recording[hidden] { display: none; }
|
|
125
|
+
.reply .recording-status { display: inline-flex; align-items: center; gap: 6px; }
|
|
126
|
+
.reply .recording-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--danger); }
|
|
127
|
+
.reply .recording-actions { display: flex; align-items: center; gap: 4px; }
|
|
128
|
+
.reply .recording-actions button { padding: 6px 8px; border-radius: 8px; font-size: 12px; line-height: 1; }
|
|
129
|
+
.reply .recording-actions .stop-recording { border-color: var(--danger); color: var(--danger); }
|
|
120
130
|
.reply .send { width: 32px; min-width: 32px; height: 32px; padding: 0; border: none; border-radius: 50%;
|
|
121
131
|
background: var(--accent); color: var(--accent-text); cursor: pointer;
|
|
122
132
|
display: flex; align-items: center; justify-content: center; }
|
|
@@ -66,7 +66,16 @@
|
|
|
66
66
|
<%# One bordered composer box (matches the visitor widget): the reply on top,
|
|
67
67
|
a toolbar row below with tools on the left and send on the right. %>
|
|
68
68
|
<%= form_with url: conversation_messages_path(@conversation), method: :post,
|
|
69
|
-
multipart: true, class: 'reply'
|
|
69
|
+
multipart: true, class: 'reply',
|
|
70
|
+
data: {
|
|
71
|
+
record_audio: t('livechat.dashboard.record_audio', default: 'Record audio'),
|
|
72
|
+
stop_recording: t('livechat.dashboard.stop_recording', default: 'Stop recording'),
|
|
73
|
+
cancel_recording: t('livechat.dashboard.cancel_recording', default: 'Cancel recording'),
|
|
74
|
+
recording: t('livechat.dashboard.recording', default: 'Recording %{time}'),
|
|
75
|
+
microphone_unsupported: t('livechat.dashboard.microphone_unsupported', default: 'Audio recording is not supported in this browser.'),
|
|
76
|
+
microphone_denied: t('livechat.dashboard.microphone_denied', default: 'Microphone access was blocked. Allow microphone access in your browser and try again.'),
|
|
77
|
+
microphone_error: t('livechat.dashboard.microphone_error', default: 'Could not start audio recording.')
|
|
78
|
+
} do |form| %>
|
|
70
79
|
<%= form.text_area :body, rows: 2, autofocus: true, required: !Livechat.attachments_enabled?,
|
|
71
80
|
placeholder: t('livechat.dashboard.reply_placeholder', default: 'Write your reply…') %>
|
|
72
81
|
<%# dashboard.js hides this and swaps in a paperclip button (into .reply-tools)
|
|
@@ -18,6 +18,13 @@ ar:
|
|
|
18
18
|
error_rate_limited: "رسائل كثيرة جدًا. يرجى الانتظار قليلًا والمحاولة مرة أخرى."
|
|
19
19
|
unread_aria: "رسائل غير مقروءة"
|
|
20
20
|
attach: "إرفاق ملفات"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "إزالة الملف"
|
|
22
29
|
attachment_error: "تعذر إرسال بعض الملفات."
|
|
23
30
|
expand: "تكبير"
|
|
@@ -46,6 +53,13 @@ ar:
|
|
|
46
53
|
reply_placeholder: "اكتب ردك…"
|
|
47
54
|
send: "إرسال"
|
|
48
55
|
attach: "إرفاق ملفات"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "الأحدث"
|
|
50
64
|
older: "الأقدم"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ bg:
|
|
|
18
18
|
error_rate_limited: "Твърде много съобщения. Моля, изчакайте малко и опитайте отново."
|
|
19
19
|
unread_aria: "непрочетени съобщения"
|
|
20
20
|
attach: "Прикачване на файлове"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Премахване на файла"
|
|
22
29
|
attachment_error: "Някои файлове не можаха да бъдат изпратени."
|
|
23
30
|
expand: "Уголеми"
|
|
@@ -46,6 +53,13 @@ bg:
|
|
|
46
53
|
reply_placeholder: "Напишете отговора си…"
|
|
47
54
|
send: "Изпрати"
|
|
48
55
|
attach: "Прикачване на файлове"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "По-нови"
|
|
50
64
|
older: "По-стари"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ bn:
|
|
|
18
18
|
error_rate_limited: "অনেক বেশি বার্তা। একটু অপেক্ষা করে আবার চেষ্টা করুন।"
|
|
19
19
|
unread_aria: "অপঠিত বার্তা"
|
|
20
20
|
attach: "ফাইল সংযুক্ত করুন"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "ফাইল সরান"
|
|
22
29
|
attachment_error: "কিছু ফাইল পাঠানো যায়নি।"
|
|
23
30
|
expand: "বড় করুন"
|
|
@@ -46,6 +53,13 @@ bn:
|
|
|
46
53
|
reply_placeholder: "আপনার উত্তর লিখুন…"
|
|
47
54
|
send: "পাঠান"
|
|
48
55
|
attach: "ফাইল সংযুক্ত করুন"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "নতুনতর"
|
|
50
64
|
older: "পুরনো"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ de:
|
|
|
18
18
|
error_rate_limited: "Zu viele Nachrichten. Bitte warten Sie einen Moment und versuchen Sie es erneut."
|
|
19
19
|
unread_aria: "ungelesene Nachrichten"
|
|
20
20
|
attach: "Dateien anhängen"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Datei entfernen"
|
|
22
29
|
attachment_error: "Einige Dateien konnten nicht gesendet werden."
|
|
23
30
|
expand: "Vergrößern"
|
|
@@ -46,6 +53,13 @@ de:
|
|
|
46
53
|
reply_placeholder: "Antwort schreiben…"
|
|
47
54
|
send: "Senden"
|
|
48
55
|
attach: "Dateien anhängen"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Neuere"
|
|
50
64
|
older: "Ältere"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ el:
|
|
|
18
18
|
error_rate_limited: "Πάρα πολλά μηνύματα. Περιμένετε λίγο και δοκιμάστε ξανά."
|
|
19
19
|
unread_aria: "μη αναγνωσμένα μηνύματα"
|
|
20
20
|
attach: "Επισύναψη αρχείων"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Αφαίρεση αρχείου"
|
|
22
29
|
attachment_error: "Ορισμένα αρχεία δεν ήταν δυνατό να σταλούν."
|
|
23
30
|
expand: "Μεγέθυνση"
|
|
@@ -46,6 +53,13 @@ el:
|
|
|
46
53
|
reply_placeholder: "Γράψτε την απάντησή σας…"
|
|
47
54
|
send: "Αποστολή"
|
|
48
55
|
attach: "Επισύναψη αρχείων"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Νεότερα"
|
|
50
64
|
older: "Παλαιότερα"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ en:
|
|
|
18
18
|
error_rate_limited: "Too many messages. Please wait a moment and try again."
|
|
19
19
|
unread_aria: "unread messages"
|
|
20
20
|
attach: "Attach files"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Remove file"
|
|
22
29
|
attachment_error: "Some files could not be sent."
|
|
23
30
|
expand: "Expand"
|
|
@@ -46,6 +53,13 @@ en:
|
|
|
46
53
|
reply_placeholder: "Write your reply…"
|
|
47
54
|
send: "Send"
|
|
48
55
|
attach: "Attach files"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Newer"
|
|
50
64
|
older: "Older"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ es:
|
|
|
18
18
|
error_rate_limited: "Demasiados mensajes. Espera un momento e inténtalo de nuevo."
|
|
19
19
|
unread_aria: "mensajes sin leer"
|
|
20
20
|
attach: "Adjuntar archivos"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Quitar archivo"
|
|
22
29
|
attachment_error: "No se pudieron enviar algunos archivos."
|
|
23
30
|
expand: "Ampliar"
|
|
@@ -46,6 +53,13 @@ es:
|
|
|
46
53
|
reply_placeholder: "Escribe tu respuesta…"
|
|
47
54
|
send: "Enviar"
|
|
48
55
|
attach: "Adjuntar archivos"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Más recientes"
|
|
50
64
|
older: "Más antiguos"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ fr:
|
|
|
18
18
|
error_rate_limited: "Trop de messages. Veuillez patienter un instant et réessayer."
|
|
19
19
|
unread_aria: "messages non lus"
|
|
20
20
|
attach: "Joindre des fichiers"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Retirer le fichier"
|
|
22
29
|
attachment_error: "Certains fichiers n'ont pas pu être envoyés."
|
|
23
30
|
expand: "Agrandir"
|
|
@@ -46,6 +53,13 @@ fr:
|
|
|
46
53
|
reply_placeholder: "Écrivez votre réponse…"
|
|
47
54
|
send: "Envoyer"
|
|
48
55
|
attach: "Joindre des fichiers"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Plus récents"
|
|
50
64
|
older: "Plus anciens"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ hi:
|
|
|
18
18
|
error_rate_limited: "बहुत सारे संदेश। कृपया थोड़ी देर रुककर फिर से कोशिश करें।"
|
|
19
19
|
unread_aria: "अपठित संदेश"
|
|
20
20
|
attach: "फ़ाइलें संलग्न करें"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "फ़ाइल हटाएं"
|
|
22
29
|
attachment_error: "कुछ फ़ाइलें भेजी नहीं जा सकीं।"
|
|
23
30
|
expand: "बड़ा करें"
|
|
@@ -46,6 +53,13 @@ hi:
|
|
|
46
53
|
reply_placeholder: "अपना जवाब लिखें…"
|
|
47
54
|
send: "भेजें"
|
|
48
55
|
attach: "फ़ाइलें संलग्न करें"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "नए"
|
|
50
64
|
older: "पुराने"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ hr:
|
|
|
18
18
|
error_rate_limited: "Previše poruka. Pričekajte trenutak i pokušajte ponovno."
|
|
19
19
|
unread_aria: "nepročitane poruke"
|
|
20
20
|
attach: "Priloži datoteke"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Ukloni datoteku"
|
|
22
29
|
attachment_error: "Neke datoteke nije bilo moguće poslati."
|
|
23
30
|
expand: "Povećaj"
|
|
@@ -46,6 +53,13 @@ hr:
|
|
|
46
53
|
reply_placeholder: "Napišite svoj odgovor…"
|
|
47
54
|
send: "Pošalji"
|
|
48
55
|
attach: "Priloži datoteke"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Novije"
|
|
50
64
|
older: "Starije"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ id:
|
|
|
18
18
|
error_rate_limited: "Terlalu banyak pesan. Mohon tunggu sebentar dan coba lagi."
|
|
19
19
|
unread_aria: "pesan belum dibaca"
|
|
20
20
|
attach: "Lampirkan file"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Hapus file"
|
|
22
29
|
attachment_error: "Beberapa file tidak dapat dikirim."
|
|
23
30
|
expand: "Perbesar"
|
|
@@ -46,6 +53,13 @@ id:
|
|
|
46
53
|
reply_placeholder: "Tulis balasan Anda…"
|
|
47
54
|
send: "Kirim"
|
|
48
55
|
attach: "Lampirkan file"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Lebih baru"
|
|
50
64
|
older: "Lebih lama"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ it:
|
|
|
18
18
|
error_rate_limited: "Troppi messaggi. Attendi un momento e riprova."
|
|
19
19
|
unread_aria: "messaggi non letti"
|
|
20
20
|
attach: "Allega file"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Rimuovi file"
|
|
22
29
|
attachment_error: "Non è stato possibile inviare alcuni file."
|
|
23
30
|
expand: "Ingrandisci"
|
|
@@ -46,6 +53,13 @@ it:
|
|
|
46
53
|
reply_placeholder: "Scrivi la tua risposta…"
|
|
47
54
|
send: "Invia"
|
|
48
55
|
attach: "Allega file"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Più recenti"
|
|
50
64
|
older: "Più vecchi"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ ja:
|
|
|
18
18
|
error_rate_limited: "メッセージが多すぎます。少し待ってからもう一度お試しください。"
|
|
19
19
|
unread_aria: "件の未読メッセージ"
|
|
20
20
|
attach: "ファイルを添付"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "ファイルを削除"
|
|
22
29
|
attachment_error: "一部のファイルを送信できませんでした。"
|
|
23
30
|
expand: "拡大"
|
|
@@ -46,6 +53,13 @@ ja:
|
|
|
46
53
|
reply_placeholder: "返信を入力…"
|
|
47
54
|
send: "送信"
|
|
48
55
|
attach: "ファイルを添付"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "新しい"
|
|
50
64
|
older: "古い"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ ko:
|
|
|
18
18
|
error_rate_limited: "메시지가 너무 많습니다. 잠시 후 다시 시도해 주세요."
|
|
19
19
|
unread_aria: "읽지 않은 메시지"
|
|
20
20
|
attach: "파일 첨부"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "파일 제거"
|
|
22
29
|
attachment_error: "일부 파일을 보내지 못했습니다."
|
|
23
30
|
expand: "확대"
|
|
@@ -46,6 +53,13 @@ ko:
|
|
|
46
53
|
reply_placeholder: "답장을 입력하세요…"
|
|
47
54
|
send: "보내기"
|
|
48
55
|
attach: "파일 첨부"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "최신"
|
|
50
64
|
older: "이전"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ lb:
|
|
|
18
18
|
error_rate_limited: "Ze vill Noriichten. Waart w.e.g. e Moment a probéiert nach eng Kéier."
|
|
19
19
|
unread_aria: "ongelies Noriichten"
|
|
20
20
|
attach: "Dateien uschléissen"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Datei ewechhuelen"
|
|
22
29
|
attachment_error: "E puer Dateie konnten net geschéckt ginn."
|
|
23
30
|
expand: "Vergréisseren"
|
|
@@ -46,6 +53,13 @@ lb:
|
|
|
46
53
|
reply_placeholder: "Schreift Är Äntwert…"
|
|
47
54
|
send: "Schécken"
|
|
48
55
|
attach: "Dateien uschléissen"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Méi nei"
|
|
50
64
|
older: "Méi al"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ nl:
|
|
|
18
18
|
error_rate_limited: "Te veel berichten. Wacht even en probeer het opnieuw."
|
|
19
19
|
unread_aria: "ongelezen berichten"
|
|
20
20
|
attach: "Bestanden bijvoegen"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Bestand verwijderen"
|
|
22
29
|
attachment_error: "Sommige bestanden konden niet worden verzonden."
|
|
23
30
|
expand: "Vergroten"
|
|
@@ -46,6 +53,13 @@ nl:
|
|
|
46
53
|
reply_placeholder: "Schrijf je antwoord…"
|
|
47
54
|
send: "Versturen"
|
|
48
55
|
attach: "Bestanden bijvoegen"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Nieuwer"
|
|
50
64
|
older: "Ouder"
|
|
51
65
|
mail:
|
|
@@ -18,6 +18,13 @@ pl:
|
|
|
18
18
|
error_rate_limited: "Zbyt wiele wiadomości. Poczekaj chwilę i spróbuj ponownie."
|
|
19
19
|
unread_aria: "nieprzeczytane wiadomości"
|
|
20
20
|
attach: "Załącz pliki"
|
|
21
|
+
record_audio: "Record audio"
|
|
22
|
+
stop_recording: "Stop recording"
|
|
23
|
+
cancel_recording: "Cancel recording"
|
|
24
|
+
recording: "Recording %{time}"
|
|
25
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
26
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
27
|
+
microphone_error: "Could not start audio recording."
|
|
21
28
|
remove_file: "Usuń plik"
|
|
22
29
|
attachment_error: "Nie udało się wysłać niektórych plików."
|
|
23
30
|
expand: "Powiększ"
|
|
@@ -46,6 +53,13 @@ pl:
|
|
|
46
53
|
reply_placeholder: "Napisz odpowiedź…"
|
|
47
54
|
send: "Wyślij"
|
|
48
55
|
attach: "Załącz pliki"
|
|
56
|
+
record_audio: "Record audio"
|
|
57
|
+
stop_recording: "Stop recording"
|
|
58
|
+
cancel_recording: "Cancel recording"
|
|
59
|
+
recording: "Recording %{time}"
|
|
60
|
+
microphone_unsupported: "Audio recording is not supported in this browser."
|
|
61
|
+
microphone_denied: "Microphone access was blocked. Allow microphone access in your browser and try again."
|
|
62
|
+
microphone_error: "Could not start audio recording."
|
|
49
63
|
newer: "Nowsze"
|
|
50
64
|
older: "Starsze"
|
|
51
65
|
mail:
|