+
+
+ {{ $t('INBOX_MGMT.FINISH.WHATSAPP_QR_INSTRUCTION') }}
+
+
+
![WhatsApp QR Code]()
+
+
+
+
+ {{ $t('INBOX_MGMT.FINISH.MESSENGER_QR_INSTRUCTION') }}
+
+
+
![Messenger QR Code]()
+
+
+
+
+ {{ $t('INBOX_MGMT.FINISH.TELEGRAM_QR_INSTRUCTION') }}
+
+
+
+
![Telegram QR Code]()
+
+
+
=16'}
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
camelcase@8.0.0:
resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
engines: {node: '>=16'}
@@ -1739,6 +1749,9 @@ packages:
resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ cliui@6.0.0:
+ resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
+
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@@ -1943,6 +1956,10 @@ packages:
supports-color:
optional: true
+ decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
decimal.js@10.4.3:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
@@ -1978,6 +1995,9 @@ packages:
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+ dijkstrajs@1.0.3:
+ resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -2340,6 +2360,10 @@ packages:
resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==}
engines: {node: '>=16'}
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@@ -2974,6 +2998,10 @@ packages:
resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
engines: {node: '>=14'}
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -3305,6 +3333,10 @@ packages:
orderedmap@2.1.0:
resolution: {integrity: sha512-/pIFexOm6S70EPdznemIz3BQZoJ4VTFrhqzu0ACBqBgeLsLxq8e6Jim63ImIfwW/zAD1AlXpRMlOv3aghmo4dA==}
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -3313,6 +3345,10 @@ packages:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
@@ -3321,6 +3357,10 @@ packages:
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
package-json-from-dist@1.0.0:
resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
@@ -3425,6 +3465,10 @@ packages:
pkg-types@1.2.0:
resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==}
+ pngjs@5.0.0:
+ resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
+ engines: {node: '>=10.13.0'}
+
possible-typed-array-names@1.0.0:
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
engines: {node: '>= 0.4'}
@@ -3640,8 +3684,8 @@ packages:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
- posthog-js@1.260.2:
- resolution: {integrity: sha512-2Q+QUz9j9+uG16wp0WcOEbezVsLZCobZyTX8NvWPMGKyPaf2lOsjbPjznsq5JiIt324B6NAqzpWYZTzvhn9k9Q==}
+ posthog-js@1.260.3:
+ resolution: {integrity: sha512-FCtksk0GQn22Rk9P7x7dsmAO7a2aBxPeYb2O2KXSraxR8xd2G6lUOOthVDK+qgtmuhpUZuur/mHrXEslMUEtjg==}
peerDependencies:
'@rrweb/types': 2.0.0-alpha.17
rrweb-snapshot: 2.0.0-alpha.17
@@ -3736,6 +3780,11 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ qrcode@1.5.4:
+ resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
@@ -3779,6 +3828,9 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
+ require-main-filename@2.0.0:
+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
+
requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
@@ -3888,6 +3940,9 @@ packages:
sentence-case@3.0.4:
resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
+ set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -4529,6 +4584,9 @@ packages:
which-boxed-primitive@1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ which-module@2.0.1:
+ resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
+
which-typed-array@1.1.11:
resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==}
engines: {node: '>= 0.4'}
@@ -4551,6 +4609,10 @@ packages:
resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
engines: {node: '>=18'}
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -4589,6 +4651,9 @@ packages:
xmlchars@2.2.0:
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+ y18n@4.0.3:
+ resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -4609,10 +4674,18 @@ packages:
engines: {node: '>= 14'}
hasBin: true
+ yargs-parser@18.1.3:
+ resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
+ engines: {node: '>=6'}
+
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
+ yargs@15.4.1:
+ resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
+ engines: {node: '>=8'}
+
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
@@ -5375,6 +5448,8 @@ snapshots:
'@polka/url@1.0.0-next.28': {}
+ '@posthog/core@1.0.1': {}
+
'@radix-ui/colors@3.0.0': {}
'@rails/actioncable@6.1.3': {}
@@ -6122,6 +6197,8 @@ snapshots:
quick-lru: 6.1.2
type-fest: 4.26.1
+ camelcase@5.3.1: {}
+
camelcase@8.0.0: {}
caniuse-lite@1.0.30001651: {}
@@ -6216,6 +6293,12 @@ snapshots:
slice-ansi: 5.0.0
string-width: 5.1.2
+ cliui@6.0.0:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+
cliui@8.0.1:
dependencies:
string-width: 4.2.3
@@ -6388,6 +6471,8 @@ snapshots:
dependencies:
ms: 2.1.3
+ decamelize@1.2.0: {}
+
decimal.js@10.4.3: {}
deep-eql@5.0.2: {}
@@ -6419,6 +6504,8 @@ snapshots:
didyoumean@1.2.2: {}
+ dijkstrajs@1.0.3: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -6936,6 +7023,11 @@ snapshots:
common-path-prefix: 3.0.0
pkg-dir: 7.0.0
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
@@ -7677,6 +7769,10 @@ snapshots:
mlly: 1.7.1
pkg-types: 1.2.0
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
@@ -8016,6 +8112,10 @@ snapshots:
orderedmap@2.1.0: {}
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
@@ -8024,6 +8124,10 @@ snapshots:
dependencies:
yocto-queue: 1.1.1
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
p-locate@5.0.0:
dependencies:
p-limit: 3.1.0
@@ -8032,6 +8136,8 @@ snapshots:
dependencies:
p-limit: 4.0.0
+ p-try@2.2.0: {}
+
package-json-from-dist@1.0.0: {}
package-manager-detector@0.2.0: {}
@@ -8114,6 +8220,8 @@ snapshots:
mlly: 1.7.1
pathe: 1.1.2
+ pngjs@5.0.0: {}
+
possible-typed-array-names@1.0.0: {}
postcss-attribute-case-insensitive@6.0.2(postcss@8.4.47):
@@ -8368,8 +8476,9 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
- posthog-js@1.260.2:
+ posthog-js@1.260.3:
dependencies:
+ '@posthog/core': 1.0.1
core-js: 3.38.1
fflate: 0.4.8
preact: 10.27.1
@@ -8484,6 +8593,12 @@ snapshots:
punycode@2.3.1: {}
+ qrcode@1.5.4:
+ dependencies:
+ dijkstrajs: 1.0.3
+ pngjs: 5.0.0
+ yargs: 15.4.1
+
querystringify@2.2.0: {}
queue-microtask@1.2.3: {}
@@ -8522,6 +8637,8 @@ snapshots:
require-from-string@2.0.2: {}
+ require-main-filename@2.0.0: {}
+
requires-port@1.0.0: {}
resolve-from@4.0.0: {}
@@ -8658,6 +8775,8 @@ snapshots:
tslib: 2.8.1
upper-case-first: 2.0.2
+ set-blocking@2.0.0: {}
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -9373,6 +9492,8 @@ snapshots:
is-string: 1.0.7
is-symbol: 1.0.4
+ which-module@2.0.1: {}
+
which-typed-array@1.1.11:
dependencies:
available-typed-arrays: 1.0.5
@@ -9402,6 +9523,12 @@ snapshots:
dependencies:
string-width: 7.2.0
+ wrap-ansi@6.2.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -9430,6 +9557,8 @@ snapshots:
xmlchars@2.2.0: {}
+ y18n@4.0.3: {}
+
y18n@5.0.8: {}
yallist@4.0.0: {}
@@ -9444,8 +9573,27 @@ snapshots:
yaml@2.5.1: {}
+ yargs-parser@18.1.3:
+ dependencies:
+ camelcase: 5.3.1
+ decamelize: 1.2.0
+
yargs-parser@21.1.1: {}
+ yargs@15.4.1:
+ dependencies:
+ cliui: 6.0.0
+ decamelize: 1.2.0
+ find-up: 4.1.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ require-main-filename: 2.0.0
+ set-blocking: 2.0.0
+ string-width: 4.2.3
+ which-module: 2.0.1
+ y18n: 4.0.3
+ yargs-parser: 18.1.3
+
yargs@17.7.2:
dependencies:
cliui: 8.0.1
From f801c1928dffb67bc6c0cfdfd405e4fe3f54bea7 Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Wed, 27 Aug 2025 11:56:07 +0530
Subject: [PATCH 040/132] chore: Default file limits for private notes and
reset attachment on mode switch (#12310)
# Pull Request Template
## Description
This PR fixes the handling of attachments and file limits in reply
modes:
* Applies **default file size and type limits** for private notes
* **Resets attachments** automatically when switching reply modes
## Type of change
- [x] Bug fix (non-breaking change which fixes an issue)
## How Has This Been Tested?
### Loom video
https://www.loom.com/share/abad3e6a0383405ea5f31314c1494f2f?sid=38715fd0-e305-4a9b-8f4d-fc6a6e5c0833
## Checklist:
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules
Co-authored-by: Muhsin Keloth
---
.../widgets/WootWriter/ReplyBottomPanel.vue | 11 +++++++++++
.../components/widgets/conversation/ReplyBox.vue | 4 ++++
.../dashboard/composables/useFileUpload.js | 14 +++++++++++---
app/javascript/dashboard/mixins/fileUploadMixin.js | 6 ++++++
4 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
index 4802fc46f..7bc40c490 100644
--- a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
+++ b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
@@ -7,6 +7,7 @@ import * as ActiveStorage from 'activestorage';
import inboxMixin from 'shared/mixins/inboxMixin';
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
import { getAllowedFileTypesByChannel } from '@chatwoot/utils';
+import { ALLOWED_FILE_TYPES } from 'shared/constants/messages';
import VideoCallButton from '../VideoCallButton.vue';
import AIAssistanceButton from '../AIAssistanceButton.vue';
import { REPLY_EDITOR_MODES } from './constants';
@@ -151,6 +152,11 @@ export default {
uploadRef,
};
},
+ data() {
+ return {
+ ALLOWED_FILE_TYPES,
+ };
+ },
computed: {
...mapGetters({
accountId: 'getCurrentAccountId',
@@ -192,6 +198,11 @@ export default {
return this.conversationType === 'instagram_direct_message';
},
allowedFileTypes() {
+ // Use default file types for private notes
+ if (this.isOnPrivateNote) {
+ return this.ALLOWED_FILE_TYPES;
+ }
+
let channelType = this.channelType || this.inbox?.channel_type;
if (this.isAnInstagramChannel || this.isInstagramDM) {
diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
index e5243ac04..01c81d47e 100644
--- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
@@ -793,6 +793,10 @@ export default {
}, 100);
},
setReplyMode(mode = REPLY_EDITOR_MODES.REPLY) {
+ // Clear attachments when switching between private note and reply modes
+ // This is to prevent from breaking the upload rules
+ if (this.attachedFiles.length > 0) this.attachedFiles = [];
+
const { can_reply: canReply } = this.currentChat;
this.$store.dispatch('draftMessages/setReplyEditorMode', {
mode,
diff --git a/app/javascript/dashboard/composables/useFileUpload.js b/app/javascript/dashboard/composables/useFileUpload.js
index 423462fda..c0105d321 100644
--- a/app/javascript/dashboard/composables/useFileUpload.js
+++ b/app/javascript/dashboard/composables/useFileUpload.js
@@ -4,14 +4,16 @@ import { useI18n } from 'vue-i18n';
import { DirectUpload } from 'activestorage';
import { checkFileSizeLimit } from 'shared/helpers/FileHelper';
import { getMaxUploadSizeByChannel } from '@chatwoot/utils';
+import { MAXIMUM_FILE_UPLOAD_SIZE } from 'shared/constants/messages';
/**
* Composable for handling file uploads in conversations
* @param {Object} options
* @param {Object} options.inbox - Current inbox object (has channel_type, medium, etc.)
* @param {Function} options.attachFile - Callback to handle file attachment
+ * @param {boolean} options.isPrivateNote - Whether the upload is for a private note
*/
-export const useFileUpload = ({ inbox, attachFile }) => {
+export const useFileUpload = ({ inbox, attachFile, isPrivateNote = false }) => {
const { t } = useI18n();
const accountId = useMapGetter('getCurrentAccountId');
@@ -20,12 +22,18 @@ export const useFileUpload = ({ inbox, attachFile }) => {
const globalConfig = useMapGetter('globalConfig/get');
// helper: compute max upload size for a given file's mime
- const maxSizeFor = mime =>
- getMaxUploadSizeByChannel({
+ const maxSizeFor = mime => {
+ // Use default file size limit for private notes
+ if (isPrivateNote) {
+ return MAXIMUM_FILE_UPLOAD_SIZE;
+ }
+
+ return getMaxUploadSizeByChannel({
channelType: inbox?.channel_type,
medium: inbox?.medium, // e.g. 'sms' | 'whatsapp' | etc.
mime, // e.g. 'image/png'
});
+ };
const alertOverLimit = maxSizeMB =>
useAlert(
diff --git a/app/javascript/dashboard/mixins/fileUploadMixin.js b/app/javascript/dashboard/mixins/fileUploadMixin.js
index 85d640ec5..5313be812 100644
--- a/app/javascript/dashboard/mixins/fileUploadMixin.js
+++ b/app/javascript/dashboard/mixins/fileUploadMixin.js
@@ -3,6 +3,7 @@ import { useAlert } from 'dashboard/composables';
import { checkFileSizeLimit } from 'shared/helpers/FileHelper';
import { getMaxUploadSizeByChannel } from '@chatwoot/utils';
import { DirectUpload } from 'activestorage';
+import { MAXIMUM_FILE_UPLOAD_SIZE } from 'shared/constants/messages';
export default {
computed: {
@@ -13,6 +14,11 @@ export default {
methods: {
maxSizeFor(mime) {
+ // Use default file size limit for private notes
+ if (this.isOnPrivateNote) {
+ return MAXIMUM_FILE_UPLOAD_SIZE;
+ }
+
return getMaxUploadSizeByChannel({
channelType: this.inbox?.channel_type,
medium: this.inbox?.medium, // e.g. 'sms' | 'whatsapp'
From 472493b9afc06a27670739dc1f06049748abc54d Mon Sep 17 00:00:00 2001
From: Chatwoot Bot <92152627+chatwoot-bot@users.noreply.github.com>
Date: Tue, 26 Aug 2025 23:29:13 -0700
Subject: [PATCH 041/132] chore: Update translations (#12228)
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
---
.../dashboard/i18n/locale/am/contact.json | 19 +--
.../i18n/locale/am/conversation.json | 26 ++--
.../dashboard/i18n/locale/am/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/am/settings.json | 1 +
.../dashboard/i18n/locale/ar/contact.json | 5 +
.../dashboard/i18n/locale/ar/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ar/settings.json | 1 +
.../dashboard/i18n/locale/az/contact.json | 5 +
.../dashboard/i18n/locale/az/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/az/settings.json | 1 +
.../dashboard/i18n/locale/bg/contact.json | 5 +
.../dashboard/i18n/locale/bg/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/bg/settings.json | 1 +
.../dashboard/i18n/locale/ca/agentMgmt.json | 2 +-
.../dashboard/i18n/locale/ca/contact.json | 5 +
.../dashboard/i18n/locale/ca/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ca/settings.json | 1 +
.../dashboard/i18n/locale/cs/contact.json | 5 +
.../dashboard/i18n/locale/cs/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/cs/settings.json | 1 +
.../dashboard/i18n/locale/da/contact.json | 5 +
.../dashboard/i18n/locale/da/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/da/settings.json | 1 +
.../dashboard/i18n/locale/de/contact.json | 5 +
.../dashboard/i18n/locale/de/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/de/settings.json | 1 +
.../dashboard/i18n/locale/el/contact.json | 5 +
.../dashboard/i18n/locale/el/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/el/settings.json | 1 +
.../dashboard/i18n/locale/es/agentBots.json | 34 +++---
.../i18n/locale/es/attributesMgmt.json | 2 +-
.../dashboard/i18n/locale/es/automation.json | 10 +-
.../dashboard/i18n/locale/es/contact.json | 5 +
.../i18n/locale/es/conversation.json | 6 +-
.../i18n/locale/es/generalSettings.json | 6 +-
.../dashboard/i18n/locale/es/inboxMgmt.json | 11 +-
.../i18n/locale/es/integrations.json | 6 +-
.../dashboard/i18n/locale/es/settings.json | 1 +
.../dashboard/i18n/locale/fa/contact.json | 5 +
.../dashboard/i18n/locale/fa/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/fa/settings.json | 1 +
.../dashboard/i18n/locale/fi/contact.json | 5 +
.../dashboard/i18n/locale/fi/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/fi/settings.json | 1 +
.../dashboard/i18n/locale/fr/contact.json | 5 +
.../i18n/locale/fr/conversation.json | 2 +-
.../dashboard/i18n/locale/fr/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/fr/settings.json | 1 +
.../dashboard/i18n/locale/he/contact.json | 5 +
.../dashboard/i18n/locale/he/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/he/settings.json | 1 +
.../dashboard/i18n/locale/hi/contact.json | 5 +
.../dashboard/i18n/locale/hi/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/hi/settings.json | 1 +
.../dashboard/i18n/locale/hr/contact.json | 5 +
.../dashboard/i18n/locale/hr/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/hr/settings.json | 1 +
.../dashboard/i18n/locale/hu/contact.json | 5 +
.../dashboard/i18n/locale/hu/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/hu/settings.json | 1 +
.../dashboard/i18n/locale/hy/contact.json | 5 +
.../dashboard/i18n/locale/hy/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/hy/settings.json | 1 +
.../dashboard/i18n/locale/id/contact.json | 5 +
.../dashboard/i18n/locale/id/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/id/settings.json | 1 +
.../dashboard/i18n/locale/is/contact.json | 5 +
.../dashboard/i18n/locale/is/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/is/settings.json | 1 +
.../dashboard/i18n/locale/it/contact.json | 5 +
.../dashboard/i18n/locale/it/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/it/settings.json | 1 +
.../dashboard/i18n/locale/ja/contact.json | 5 +
.../dashboard/i18n/locale/ja/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ja/settings.json | 1 +
.../dashboard/i18n/locale/ka/contact.json | 5 +
.../dashboard/i18n/locale/ka/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ka/settings.json | 1 +
.../dashboard/i18n/locale/ko/agentBots.json | 6 +-
.../dashboard/i18n/locale/ko/agentMgmt.json | 2 +-
.../dashboard/i18n/locale/ko/contact.json | 5 +
.../dashboard/i18n/locale/ko/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ko/settings.json | 1 +
.../dashboard/i18n/locale/lt/contact.json | 5 +
.../dashboard/i18n/locale/lt/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/lt/settings.json | 1 +
.../dashboard/i18n/locale/lv/contact.json | 5 +
.../dashboard/i18n/locale/lv/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/lv/settings.json | 1 +
.../dashboard/i18n/locale/ml/contact.json | 5 +
.../dashboard/i18n/locale/ml/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ml/settings.json | 1 +
.../dashboard/i18n/locale/ms/contact.json | 5 +
.../dashboard/i18n/locale/ms/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ms/settings.json | 1 +
.../dashboard/i18n/locale/ne/contact.json | 5 +
.../dashboard/i18n/locale/ne/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ne/settings.json | 1 +
.../dashboard/i18n/locale/nl/contact.json | 5 +
.../dashboard/i18n/locale/nl/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/nl/settings.json | 1 +
.../dashboard/i18n/locale/no/contact.json | 5 +
.../dashboard/i18n/locale/no/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/no/settings.json | 1 +
.../dashboard/i18n/locale/pl/contact.json | 5 +
.../dashboard/i18n/locale/pl/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/pl/settings.json | 1 +
.../dashboard/i18n/locale/pt/contact.json | 5 +
.../dashboard/i18n/locale/pt/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/pt/settings.json | 1 +
.../dashboard/i18n/locale/pt_BR/contact.json | 5 +
.../i18n/locale/pt_BR/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/pt_BR/settings.json | 1 +
.../dashboard/i18n/locale/ro/contact.json | 5 +
.../dashboard/i18n/locale/ro/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ro/settings.json | 1 +
.../dashboard/i18n/locale/ru/contact.json | 5 +
.../dashboard/i18n/locale/ru/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ru/settings.json | 1 +
.../dashboard/i18n/locale/sh/contact.json | 5 +
.../dashboard/i18n/locale/sh/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/sh/settings.json | 1 +
.../dashboard/i18n/locale/sk/contact.json | 5 +
.../dashboard/i18n/locale/sk/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/sk/settings.json | 1 +
.../dashboard/i18n/locale/sl/contact.json | 5 +
.../dashboard/i18n/locale/sl/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/sl/settings.json | 1 +
.../dashboard/i18n/locale/sq/agentBots.json | 40 +++----
.../i18n/locale/sq/attributesMgmt.json | 2 +-
.../dashboard/i18n/locale/sq/auditLogs.json | 2 +-
.../dashboard/i18n/locale/sq/automation.json | 42 +++----
.../dashboard/i18n/locale/sq/campaign.json | 20 ++--
.../dashboard/i18n/locale/sq/components.json | 10 +-
.../dashboard/i18n/locale/sq/contact.json | 19 +--
.../i18n/locale/sq/conversation.json | 26 ++--
.../i18n/locale/sq/generalSettings.json | 92 +++++++-------
.../dashboard/i18n/locale/sq/helpCenter.json | 26 ++--
.../dashboard/i18n/locale/sq/inbox.json | 28 ++---
.../dashboard/i18n/locale/sq/inboxMgmt.json | 19 +--
.../i18n/locale/sq/integrations.json | 52 ++++----
.../dashboard/i18n/locale/sq/macros.json | 22 ++--
.../dashboard/i18n/locale/sq/report.json | 2 +-
.../dashboard/i18n/locale/sq/settings.json | 11 +-
.../i18n/locale/sq/whatsappTemplates.json | 38 +++---
.../dashboard/i18n/locale/sr/contact.json | 5 +
.../dashboard/i18n/locale/sr/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/sr/settings.json | 1 +
.../dashboard/i18n/locale/sv/contact.json | 5 +
.../dashboard/i18n/locale/sv/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/sv/settings.json | 1 +
.../dashboard/i18n/locale/ta/contact.json | 5 +
.../dashboard/i18n/locale/ta/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ta/settings.json | 1 +
.../dashboard/i18n/locale/th/contact.json | 5 +
.../dashboard/i18n/locale/th/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/th/settings.json | 1 +
.../dashboard/i18n/locale/tl/contact.json | 5 +
.../dashboard/i18n/locale/tl/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/tl/settings.json | 1 +
.../dashboard/i18n/locale/tr/contact.json | 5 +
.../dashboard/i18n/locale/tr/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/tr/settings.json | 1 +
.../dashboard/i18n/locale/uk/contact.json | 5 +
.../dashboard/i18n/locale/uk/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/uk/settings.json | 1 +
.../dashboard/i18n/locale/ur/contact.json | 5 +
.../dashboard/i18n/locale/ur/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ur/settings.json | 1 +
.../dashboard/i18n/locale/ur_IN/contact.json | 5 +
.../i18n/locale/ur_IN/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/ur_IN/settings.json | 1 +
.../dashboard/i18n/locale/vi/contact.json | 5 +
.../dashboard/i18n/locale/vi/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/vi/settings.json | 1 +
.../dashboard/i18n/locale/zh_CN/contact.json | 5 +
.../i18n/locale/zh_CN/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/zh_CN/settings.json | 1 +
.../dashboard/i18n/locale/zh_TW/contact.json | 5 +
.../i18n/locale/zh_TW/inboxMgmt.json | 11 +-
.../dashboard/i18n/locale/zh_TW/settings.json | 1 +
app/javascript/widget/i18n/locale/am.json | 10 +-
app/javascript/widget/i18n/locale/ar.json | 10 +-
app/javascript/widget/i18n/locale/az.json | 10 +-
app/javascript/widget/i18n/locale/bg.json | 10 +-
app/javascript/widget/i18n/locale/ca.json | 10 +-
app/javascript/widget/i18n/locale/cs.json | 10 +-
app/javascript/widget/i18n/locale/da.json | 10 +-
app/javascript/widget/i18n/locale/de.json | 10 +-
app/javascript/widget/i18n/locale/el.json | 10 +-
app/javascript/widget/i18n/locale/es.json | 10 +-
app/javascript/widget/i18n/locale/fa.json | 10 +-
app/javascript/widget/i18n/locale/fi.json | 10 +-
app/javascript/widget/i18n/locale/fr.json | 10 +-
app/javascript/widget/i18n/locale/he.json | 10 +-
app/javascript/widget/i18n/locale/hi.json | 10 +-
app/javascript/widget/i18n/locale/hr.json | 10 +-
app/javascript/widget/i18n/locale/hu.json | 10 +-
app/javascript/widget/i18n/locale/hy.json | 10 +-
app/javascript/widget/i18n/locale/id.json | 10 +-
app/javascript/widget/i18n/locale/is.json | 10 +-
app/javascript/widget/i18n/locale/it.json | 12 +-
app/javascript/widget/i18n/locale/ja.json | 10 +-
app/javascript/widget/i18n/locale/ka.json | 10 +-
app/javascript/widget/i18n/locale/ko.json | 10 +-
app/javascript/widget/i18n/locale/lt.json | 10 +-
app/javascript/widget/i18n/locale/lv.json | 10 +-
app/javascript/widget/i18n/locale/ml.json | 10 +-
app/javascript/widget/i18n/locale/ms.json | 10 +-
app/javascript/widget/i18n/locale/ne.json | 10 +-
app/javascript/widget/i18n/locale/nl.json | 10 +-
app/javascript/widget/i18n/locale/no.json | 10 +-
app/javascript/widget/i18n/locale/pl.json | 10 +-
app/javascript/widget/i18n/locale/pt.json | 10 +-
app/javascript/widget/i18n/locale/pt_BR.json | 10 +-
app/javascript/widget/i18n/locale/ro.json | 10 +-
app/javascript/widget/i18n/locale/ru.json | 10 +-
app/javascript/widget/i18n/locale/sh.json | 10 +-
app/javascript/widget/i18n/locale/sk.json | 10 +-
app/javascript/widget/i18n/locale/sl.json | 10 +-
app/javascript/widget/i18n/locale/sq.json | 12 +-
app/javascript/widget/i18n/locale/sr.json | 10 +-
app/javascript/widget/i18n/locale/sv.json | 10 +-
app/javascript/widget/i18n/locale/ta.json | 10 +-
app/javascript/widget/i18n/locale/th.json | 10 +-
app/javascript/widget/i18n/locale/tl.json | 10 +-
app/javascript/widget/i18n/locale/tr.json | 10 +-
app/javascript/widget/i18n/locale/uk.json | 10 +-
app/javascript/widget/i18n/locale/ur.json | 10 +-
app/javascript/widget/i18n/locale/ur_IN.json | 10 +-
app/javascript/widget/i18n/locale/vi.json | 10 +-
app/javascript/widget/i18n/locale/zh_CN.json | 10 +-
app/javascript/widget/i18n/locale/zh_TW.json | 10 +-
config/locales/am.yml | 2 +
config/locales/ar.yml | 2 +
config/locales/az.yml | 2 +
config/locales/bg.yml | 2 +
config/locales/ca.yml | 2 +
config/locales/cs.yml | 2 +
config/locales/da.yml | 2 +
config/locales/de.yml | 2 +
config/locales/el.yml | 2 +
config/locales/es.yml | 2 +
config/locales/fa.yml | 2 +
config/locales/fi.yml | 2 +
config/locales/fr.yml | 2 +
config/locales/he.yml | 2 +
config/locales/hi.yml | 2 +
config/locales/hr.yml | 2 +
config/locales/hu.yml | 2 +
config/locales/hy.yml | 2 +
config/locales/id.yml | 2 +
config/locales/is.yml | 2 +
config/locales/it.yml | 2 +
config/locales/ja.yml | 2 +
config/locales/ka.yml | 2 +
config/locales/ko.yml | 2 +
config/locales/lt.yml | 2 +
config/locales/lv.yml | 2 +
config/locales/ml.yml | 2 +
config/locales/ms.yml | 2 +
config/locales/ne.yml | 2 +
config/locales/nl.yml | 2 +
config/locales/no.yml | 2 +
config/locales/pl.yml | 2 +
config/locales/pt.yml | 2 +
config/locales/pt_BR.yml | 2 +
config/locales/ro.yml | 2 +
config/locales/ru.yml | 2 +
config/locales/sh.yml | 2 +
config/locales/sk.yml | 2 +
config/locales/sl.yml | 2 +
config/locales/sq.yml | 112 +++++++++---------
config/locales/sr.yml | 2 +
config/locales/sv.yml | 2 +
config/locales/ta.yml | 2 +
config/locales/th.yml | 2 +
config/locales/tl.yml | 2 +
config/locales/tr.yml | 2 +
config/locales/uk.yml | 2 +
config/locales/ur.yml | 2 +
config/locales/ur_IN.yml | 2 +
config/locales/vi.yml | 2 +
config/locales/zh_CN.yml | 2 +
config/locales/zh_TW.yml | 2 +
285 files changed, 1476 insertions(+), 696 deletions(-)
diff --git a/app/javascript/dashboard/i18n/locale/am/contact.json b/app/javascript/dashboard/i18n/locale/am/contact.json
index b4d640f7f..b63f2e70b 100644
--- a/app/javascript/dashboard/i18n/locale/am/contact.json
+++ b/app/javascript/dashboard/i18n/locale/am/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "ደውል",
+ "CALL_UNDER_DEVELOPMENT": "መደወል በልማት ላይ ነው",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "የድምፅ ኢንቦክስ ይምረጡ"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
@@ -285,7 +290,7 @@
"HEADER": {
"TITLE": "Contacts",
"SEARCH_TITLE": "Search contacts",
- "ACTIVE_TITLE": "Active contacts",
+ "ACTIVE_TITLE": "ንቁ እውቂያዎች",
"SEARCH_PLACEHOLDER": "Search...",
"MESSAGE_BUTTON": "Message",
"SEND_MESSAGE": "Send message",
@@ -460,8 +465,8 @@
}
},
"DELETE_CONTACT": {
- "MESSAGE": "This action is permanent and irreversible.",
- "BUTTON": "Delete now"
+ "MESSAGE": "ይህ እርምጃ ቋሚ ነው እና መመለስ አይቻልም።",
+ "BUTTON": "አሁን ሰርዝ"
}
},
"DETAILS": {
@@ -471,7 +476,7 @@
"DELETE_CONTACT": "Delete contact",
"DELETE_DIALOG": {
"TITLE": "Confirm Deletion",
- "DESCRIPTION": "Are you sure you want to delete this contact?",
+ "DESCRIPTION": "ይህን እውቂያ ማጥፋት እርግጠኛ ነዎት?",
"CONFIRM": "Yes, Delete",
"API": {
"SUCCESS_MESSAGE": "Contact deleted successfully",
@@ -550,8 +555,8 @@
"YOU": "You",
"SAVE": "Save note",
"EXPAND": "Expand",
- "COLLAPSE": "Collapse",
- "NO_NOTES": "No notes, you can add notes from the contact details page.",
+ "COLLAPSE": "ሰብስብ",
+ "NO_NOTES": "ማስታወሻዎች የሉም፣ ከእውቂያው ዝርዝር ገፅ ላይ ማስታወሻዎችን መጨመር ይችላሉ።",
"EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above."
}
},
@@ -561,7 +566,7 @@
"BUTTON_LABEL": "Add contact",
"SEARCH_EMPTY_STATE_TITLE": "No contacts matches your search 🔍",
"LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋",
- "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
+ "ACTIVE_EMPTY_STATE_TITLE": "በአሁኑ ጊዜ ንቁ እውቂያዎች የሉም 🌙"
}
},
"COMPOSE_NEW_CONVERSATION": {
diff --git a/app/javascript/dashboard/i18n/locale/am/conversation.json b/app/javascript/dashboard/i18n/locale/am/conversation.json
index 308f24f51..bd875dc35 100644
--- a/app/javascript/dashboard/i18n/locale/am/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/am/conversation.json
@@ -32,12 +32,12 @@
"LOADING_CONVERSATIONS": "Loading Conversations",
"CANNOT_REPLY": "You cannot reply due to",
"24_HOURS_WINDOW": "24 hour message window restriction",
- "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours",
+ "API_HOURS_WINDOW": "ለዚህ ውይይት መመለስ በ{hours} ሰአታት ውስጥ ብቻ ይቻላል",
"NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?",
"ASSIGN_TO_ME": "Assign to me",
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction",
- "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.",
+ "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "ይህ የInstagram መለያ ወደ አዲሱ የInstagram ቻናል ገቢ ሳጥን ተዛውሯል። ሁሉም አዲስ መልዕክቶች በዚያ ይታያሉ። ከአሁን ጀምሮ ከዚህ ውይይት መልዕክቶች መላክ አትችሉም።",
"REPLYING_TO": "You are replying to:",
"REMOVE_SELECTION": "Remove Selection",
"DOWNLOAD": "Download",
@@ -70,7 +70,7 @@
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
"OPEN_ACTION": "Open",
- "MORE_ACTIONS": "More actions",
+ "MORE_ACTIONS": "ተጨማሪ እርምጃዎች",
"OPEN": "More",
"CLOSE": "Close",
"DETAILS": "details",
@@ -123,8 +123,8 @@
}
},
"DELETE_CONVERSATION": {
- "TITLE": "Delete conversation #{conversationId}",
- "DESCRIPTION": "Are you sure you want to delete this conversation?",
+ "TITLE": "ውይይት #{conversationId}ን ሰርዝ",
+ "DESCRIPTION": "ይህን ውይይት ለመሰረዝ እርግጠኛ ነዎት?",
"CONFIRM": "Delete"
},
"CARD_CONTEXT_MENU": {
@@ -143,10 +143,10 @@
"ASSIGN_LABEL": "Assign label",
"AGENTS_LOADING": "Loading agents...",
"ASSIGN_TEAM": "Assign team",
- "DELETE": "Delete conversation",
- "OPEN_IN_NEW_TAB": "Open in new tab",
- "COPY_LINK": "Copy conversation link",
- "COPY_LINK_SUCCESS": "Conversation link copied to clipboard",
+ "DELETE": "ውይይት ሰርዝ",
+ "OPEN_IN_NEW_TAB": "በአዲስ ታብ ክፈት",
+ "COPY_LINK": "የውይይት አገናኝን ኮፒ አድርግ",
+ "COPY_LINK_SUCCESS": "የውይይት አገናኝ ወደ ቅጂ ሰሌዳ ኮፒ ተደረገ",
"API": {
"AGENT_ASSIGNMENT": {
"SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"",
@@ -221,8 +221,8 @@
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
"ASSIGN_LABEL_FAILED": "Label assignment failed",
"CHANGE_TEAM": "Conversation team changed",
- "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully",
- "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again",
+ "SUCCESS_DELETE_CONVERSATION": "ውይይት በተሳካ ሁኔታ ተሰርዟል",
+ "FAIL_DELETE_CONVERSATION": "ውይይትን መሰረዝ አልተቻለም! እንደገና ይሞክሩ",
"FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit",
"MESSAGE_ERROR": "Unable to send this message, please try again later",
"SENT_BY": "Sent by:",
@@ -311,11 +311,11 @@
"CONVERSATION_ACTIONS": "Conversation Actions",
"CONVERSATION_LABELS": "Conversation Labels",
"CONVERSATION_INFO": "Conversation Information",
- "CONTACT_NOTES": "Contact Notes",
+ "CONTACT_NOTES": "የእውቂያ ማስታወሻዎች",
"CONTACT_ATTRIBUTES": "Contact Attributes",
"PREVIOUS_CONVERSATION": "Previous Conversations",
"MACROS": "Macros",
- "LINEAR_ISSUES": "Linked Linear Issues",
+ "LINEAR_ISSUES": "የተገናኙ የLinear ጉዳዮች",
"SHOPIFY_ORDERS": "Shopify Orders"
},
"SHOPIFY": {
diff --git a/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json
index 4006212a3..6f44ec046 100644
--- a/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/am/settings.json b/app/javascript/dashboard/i18n/locale/am/settings.json
index fde198c92..d547538db 100644
--- a/app/javascript/dashboard/i18n/locale/am/settings.json
+++ b/app/javascript/dashboard/i18n/locale/am/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ar/contact.json b/app/javascript/dashboard/i18n/locale/ar/contact.json
index bfea55276..2fb5bccaa 100644
--- a/app/javascript/dashboard/i18n/locale/ar/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ar/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "عنوان IP",
"CREATED_AT_LABEL": "تم إنشاؤها",
"NEW_MESSAGE": "رسالة جديدة",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "لا توجد محادثات سابقة مرتبطة بجهة الاتصال هذه.",
"TITLE": "المحادثات السابقة"
diff --git a/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json
index 05b9ab278..77d953e7a 100644
--- a/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "مفتاح سر API",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ar/settings.json b/app/javascript/dashboard/i18n/locale/ar/settings.json
index 18e34f097..f0990ffe6 100644
--- a/app/javascript/dashboard/i18n/locale/ar/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ar/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/az/contact.json b/app/javascript/dashboard/i18n/locale/az/contact.json
index b4d640f7f..4dd081bd4 100644
--- a/app/javascript/dashboard/i18n/locale/az/contact.json
+++ b/app/javascript/dashboard/i18n/locale/az/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/az/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/az/inboxMgmt.json
index 4006212a3..6f44ec046 100644
--- a/app/javascript/dashboard/i18n/locale/az/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/az/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/az/settings.json b/app/javascript/dashboard/i18n/locale/az/settings.json
index fde198c92..d547538db 100644
--- a/app/javascript/dashboard/i18n/locale/az/settings.json
+++ b/app/javascript/dashboard/i18n/locale/az/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/bg/contact.json b/app/javascript/dashboard/i18n/locale/bg/contact.json
index cf08ef7e7..7fa33de75 100644
--- a/app/javascript/dashboard/i18n/locale/bg/contact.json
+++ b/app/javascript/dashboard/i18n/locale/bg/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP адрес",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "Ново съобщение",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Няма предишни разговори асоцирани с този контакт.",
"TITLE": "Предишни разговори"
diff --git a/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json
index 3f41b6692..f741d22fe 100644
--- a/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/bg/settings.json b/app/javascript/dashboard/i18n/locale/bg/settings.json
index 58c8bf75f..1d0eae470 100644
--- a/app/javascript/dashboard/i18n/locale/bg/settings.json
+++ b/app/javascript/dashboard/i18n/locale/bg/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ca/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ca/agentMgmt.json
index 995fabd0a..421b1717f 100644
--- a/app/javascript/dashboard/i18n/locale/ca/agentMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ca/agentMgmt.json
@@ -3,7 +3,7 @@
"HEADER": "Agents",
"HEADER_BTN_TXT": "Afegir Agent",
"LOADING": "S'està recollint la llista d'agents",
- "DESCRIPTION": "",
+ "DESCRIPTION": "Un agent és un membre del vostre equip d'atenció al client que pot veure i respondre als missatges dels usuaris. La llista següent mostra tots els agents del vostre compte.",
"LEARN_MORE": "Rakibkazi",
"AGENT_TYPES": {
"ADMINISTRATOR": "Administrador/a",
diff --git a/app/javascript/dashboard/i18n/locale/ca/contact.json b/app/javascript/dashboard/i18n/locale/ca/contact.json
index ee6bef2ca..92648bd8e 100644
--- a/app/javascript/dashboard/i18n/locale/ca/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ca/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Adreça IP",
"CREATED_AT_LABEL": "Creat",
"NEW_MESSAGE": "Nou missatge",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "No hi han converses prèvies associades a aquest contacte.",
"TITLE": "Converses prèvies"
diff --git a/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json
index 6ca31f720..f51f560fd 100644
--- a/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ca/settings.json b/app/javascript/dashboard/i18n/locale/ca/settings.json
index 1ac0ff3d0..dbd5f5cad 100644
--- a/app/javascript/dashboard/i18n/locale/ca/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ca/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/cs/contact.json b/app/javascript/dashboard/i18n/locale/cs/contact.json
index c18736ba5..abeffa589 100644
--- a/app/javascript/dashboard/i18n/locale/cs/contact.json
+++ b/app/javascript/dashboard/i18n/locale/cs/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP adresa",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "K tomuto kontaktu nejsou přiřazeny žádné předchozí konverzace.",
"TITLE": "Předchozí konverzace"
diff --git a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json
index 7f3585287..8be8f7da5 100644
--- a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/cs/settings.json b/app/javascript/dashboard/i18n/locale/cs/settings.json
index 38ef743f7..e143bc911 100644
--- a/app/javascript/dashboard/i18n/locale/cs/settings.json
+++ b/app/javascript/dashboard/i18n/locale/cs/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/da/contact.json b/app/javascript/dashboard/i18n/locale/da/contact.json
index 974bd97c3..f5cdcf1b8 100644
--- a/app/javascript/dashboard/i18n/locale/da/contact.json
+++ b/app/javascript/dashboard/i18n/locale/da/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Ip Adresse",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "Ny besked",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Der er ingen tidligere samtaler tilknyttet denne kontakt.",
"TITLE": "Tidligere Samtaler"
diff --git a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json
index 08105a3bd..ea84bf92c 100644
--- a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/da/settings.json b/app/javascript/dashboard/i18n/locale/da/settings.json
index 32fd1228b..e1a930e5b 100644
--- a/app/javascript/dashboard/i18n/locale/da/settings.json
+++ b/app/javascript/dashboard/i18n/locale/da/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/de/contact.json b/app/javascript/dashboard/i18n/locale/de/contact.json
index 3db34b141..124ed9caa 100644
--- a/app/javascript/dashboard/i18n/locale/de/contact.json
+++ b/app/javascript/dashboard/i18n/locale/de/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP-Adresse",
"CREATED_AT_LABEL": "Erstellt",
"NEW_MESSAGE": "Neue Nachricht",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Es sind keine vorherigen Gespräche mit diesem Kontakt verbunden.",
"TITLE": "Vorherige Gespräche"
diff --git a/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json
index 26a8fa753..705b24467 100644
--- a/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API-Schlüssel-Geheimnis",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/de/settings.json b/app/javascript/dashboard/i18n/locale/de/settings.json
index 8afed9cbd..71c12b477 100644
--- a/app/javascript/dashboard/i18n/locale/de/settings.json
+++ b/app/javascript/dashboard/i18n/locale/de/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/el/contact.json b/app/javascript/dashboard/i18n/locale/el/contact.json
index 7cb18c39f..e9a94b540 100644
--- a/app/javascript/dashboard/i18n/locale/el/contact.json
+++ b/app/javascript/dashboard/i18n/locale/el/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Διεύθυνση IP",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "Νέο Μήνυμα",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Δεν υπάρχουν προηγούμενες συνομιλίες που σχετίζονται με αυτήν την επαφή.",
"TITLE": "Προηγούμενες συνομιλίες"
diff --git a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json
index f53c3c19f..224cae5d0 100644
--- a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/el/settings.json b/app/javascript/dashboard/i18n/locale/el/settings.json
index b69e25146..336e96111 100644
--- a/app/javascript/dashboard/i18n/locale/el/settings.json
+++ b/app/javascript/dashboard/i18n/locale/el/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/es/agentBots.json b/app/javascript/dashboard/i18n/locale/es/agentBots.json
index 512bbf7dd..6b3e904b6 100644
--- a/app/javascript/dashboard/i18n/locale/es/agentBots.json
+++ b/app/javascript/dashboard/i18n/locale/es/agentBots.json
@@ -2,13 +2,13 @@
"AGENT_BOTS": {
"HEADER": "Bots",
"LOADING_EDITOR": "Cargando el editor...",
- "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.",
+ "DESCRIPTION": "Los bots de agentes son como los miembros más fabulosos de tu equipo. Ellos pueden manejar las cosas pequeñas, así que usted puede centrarse en las cosas que importan. Inténtalos. Puedes administrar tus bots desde esta página o crear nuevos usando el botón 'Configurar un nuevo bot'.",
"LEARN_MORE": "Learn about agent bots",
- "GLOBAL_BOT": "System bot",
+ "GLOBAL_BOT": "Bot del sistema",
"GLOBAL_BOT_BADGE": "Sistema",
"AVATAR": {
- "SUCCESS_DELETE": "Bot avatar deleted successfully",
- "ERROR_DELETE": "Error deleting bot avatar, please try again"
+ "SUCCESS_DELETE": "Avatar del bot eliminado correctamente",
+ "ERROR_DELETE": "Error al borrar el bot, por favor intentar más tarde"
},
"BOT_CONFIGURATION": {
"TITLE": "Seleccione un bot de agente",
@@ -22,7 +22,7 @@
"SELECT_PLACEHOLDER": "Seleccionar bot"
},
"ADD": {
- "TITLE": "Add Bot",
+ "TITLE": "Agregar Bot",
"CANCEL_BUTTON_TEXT": "Cancelar",
"API": {
"SUCCESS_MESSAGE": "Bot añadido correctamente.",
@@ -30,10 +30,10 @@
}
},
"LIST": {
- "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.",
+ "404": "No sé encontró ningún bot. Puedes crear uno haciendo clic en 'crear un Bot'.",
"LOADING": "Obteniendo bots...",
"TABLE_HEADER": {
- "DETAILS": "Bot Details",
+ "DETAILS": "Detalles del Bot",
"URL": "URL de Webhook"
}
},
@@ -42,7 +42,7 @@
"TITLE": "Eliminar bot",
"CONFIRM": {
"TITLE": "Confirmar eliminación",
- "MESSAGE": "Are you sure you want to delete {name}?",
+ "MESSAGE": "¿Está seguro que desea borrar {name}?",
"YES": "Sí, eliminar",
"NO": "No, mantenerlo"
},
@@ -61,18 +61,18 @@
},
"ACCESS_TOKEN": {
"TITLE": "Token de acceso",
- "DESCRIPTION": "Copy the access token and save it securely",
- "COPY_SUCCESSFUL": "Access token copied to clipboard",
- "RESET_SUCCESS": "Access token regenerated successfully",
- "RESET_ERROR": "Unable to regenerate access token. Please try again"
+ "DESCRIPTION": "Copie el código de acceso y guardarlo seguro",
+ "COPY_SUCCESSFUL": "Código de acceso copiado en el portapapeles",
+ "RESET_SUCCESS": "Código de acceso regenerado exitosamente",
+ "RESET_ERROR": "Dirección del webhook es requerida"
},
"FORM": {
"AVATAR": {
- "LABEL": "Bot avatar"
+ "LABEL": "Avatar del Bot"
},
"NAME": {
"LABEL": "Nombre del bot",
- "PLACEHOLDER": "Enter bot name",
+ "PLACEHOLDER": "Nombre del Bot",
"REQUIRED": "El nombre del bot es obligatorio"
},
"DESCRIPTION": {
@@ -82,11 +82,11 @@
"WEBHOOK_URL": {
"LABEL": "URL de Webhook",
"PLACEHOLDER": "https://example.com/webhook",
- "REQUIRED": "Webhook URL is required"
+ "REQUIRED": "Dirección del webhook es requerida"
},
"ERRORS": {
"NAME": "El nombre del bot es obligatorio",
- "URL": "Webhook URL is required",
+ "URL": "Dirección del webhook es requerida",
"VALID_URL": "Please enter a valid URL starting with http:// or https://"
},
"CANCEL": "Cancelar",
@@ -94,7 +94,7 @@
"UPDATE": "Update Bot"
},
"WEBHOOK": {
- "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them."
+ "DESCRIPTION": "Configure el webhook del bot para integrarse con sus servicios personalizados. El bot recibirá y procesará eventos de conversaciones y podrá responder a ellos."
},
"TYPES": {
"WEBHOOK": "Webhook Bot"
diff --git a/app/javascript/dashboard/i18n/locale/es/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/es/attributesMgmt.json
index 8b70b2a6c..1c3138821 100644
--- a/app/javascript/dashboard/i18n/locale/es/attributesMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/es/attributesMgmt.json
@@ -13,7 +13,7 @@
"TEXT": "Texto",
"NUMBER": "Número",
"LINK": "Enlace",
- "DATE": "Date",
+ "DATE": "Fecha",
"LIST": "Lista",
"CHECKBOX": "Casilla"
},
diff --git a/app/javascript/dashboard/i18n/locale/es/automation.json b/app/javascript/dashboard/i18n/locale/es/automation.json
index 63b529aee..33bec1729 100644
--- a/app/javascript/dashboard/i18n/locale/es/automation.json
+++ b/app/javascript/dashboard/i18n/locale/es/automation.json
@@ -131,7 +131,7 @@
"CONVERSATION_CREATED": "Conversación creada",
"CONVERSATION_UPDATED": "Conversación actualizada",
"MESSAGE_CREATED": "Mensaje creado",
- "CONVERSATION_RESOLVED": "Conversation Resolved",
+ "CONVERSATION_RESOLVED": "Conversación Resuelta",
"CONVERSATION_OPENED": "Conversación abierta"
},
"ACTIONS": {
@@ -147,14 +147,14 @@
"SEND_WEBHOOK_EVENT": "Enviar Evento de Webhook",
"SEND_ATTACHMENT": "Enviar archivo adjunto",
"SEND_MESSAGE": "Enviar mensaje",
- "ADD_PRIVATE_NOTE": "Add a Private Note",
+ "ADD_PRIVATE_NOTE": "Añadir una nota privada",
"CHANGE_PRIORITY": "Cambiar prioridad",
"ADD_SLA": "Añadir SLA",
"OPEN_CONVERSATION": "Abrir conversación"
},
"MESSAGE_TYPES": {
- "INCOMING": "Incoming Message",
- "OUTGOING": "Outgoing Message"
+ "INCOMING": "Mensaje entrante",
+ "OUTGOING": "Mensaje saliente"
},
"PRIORITY_TYPES": {
"NONE": "Ninguna",
@@ -175,7 +175,7 @@
"MAIL_SUBJECT": "Asunto de Email",
"COUNTRY_NAME": "País",
"REFERER_LINK": "Enlace de referencia",
- "ASSIGNEE_NAME": "Cesionario",
+ "ASSIGNEE_NAME": "Asignado a",
"TEAM_NAME": "Equipo",
"PRIORITY": "Prioridad"
}
diff --git a/app/javascript/dashboard/i18n/locale/es/contact.json b/app/javascript/dashboard/i18n/locale/es/contact.json
index 859de8246..08fcbbaf9 100644
--- a/app/javascript/dashboard/i18n/locale/es/contact.json
+++ b/app/javascript/dashboard/i18n/locale/es/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Dirección IP",
"CREATED_AT_LABEL": "Creado",
"NEW_MESSAGE": "Nuevo mensaje",
+ "CALL": "Llamar",
+ "CALL_UNDER_DEVELOPMENT": "Llamar está bajo desarrollo",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Seleccionar un buzón de entrada"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "No hay conversaciones previas asociadas a este contacto.",
"TITLE": "Conversaciones anteriores"
diff --git a/app/javascript/dashboard/i18n/locale/es/conversation.json b/app/javascript/dashboard/i18n/locale/es/conversation.json
index 851f237bb..3ef706051 100644
--- a/app/javascript/dashboard/i18n/locale/es/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/es/conversation.json
@@ -144,9 +144,9 @@
"AGENTS_LOADING": "Cargando agentes...",
"ASSIGN_TEAM": "Asignar equipo",
"DELETE": "Eliminar conversación",
- "OPEN_IN_NEW_TAB": "Open in new tab",
- "COPY_LINK": "Copy conversation link",
- "COPY_LINK_SUCCESS": "Conversation link copied to clipboard",
+ "OPEN_IN_NEW_TAB": "Abrir en nueva pestaña",
+ "COPY_LINK": "Copiar enlace de conversación",
+ "COPY_LINK_SUCCESS": "Enlace de conversación copiado en portapapeles",
"API": {
"AGENT_ASSIGNMENT": {
"SUCCESFUL": "ID de conversación {conversationId} asignado a \"{agentName}\"",
diff --git a/app/javascript/dashboard/i18n/locale/es/generalSettings.json b/app/javascript/dashboard/i18n/locale/es/generalSettings.json
index 579c0b275..36a71c6be 100644
--- a/app/javascript/dashboard/i18n/locale/es/generalSettings.json
+++ b/app/javascript/dashboard/i18n/locale/es/generalSettings.json
@@ -3,7 +3,7 @@
"LIMIT_MESSAGES": {
"CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.",
"INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.",
- "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.",
+ "AGENTS": "Has superado el límite de agentes. Tu plan solo permite {allowedAgents} agentes.",
"NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features."
},
"TITLE": "Configuración de la cuenta",
@@ -30,7 +30,7 @@
"SCHEDULED_DELETION": {
"TITLE": "Account Scheduled for Deletion",
"MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.",
- "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.",
+ "MESSAGE_INACTIVITY": "Esta cuenta se eliminará el {deletionDate} debido a inactividad. Puedes cancelar la eliminación antes de esta fecha.",
"CLEAR_BUTTON": "Cancel Scheduled Deletion"
}
},
@@ -134,7 +134,7 @@
"MULTISELECT": {
"ENTER_TO_SELECT": "Pulse Enter para seleccionar",
"ENTER_TO_REMOVE": "Presione Enter para eliminar",
- "NO_OPTIONS": "List is empty",
+ "NO_OPTIONS": "La lista está vacía",
"SELECT_ONE": "Seleccione uno",
"SELECT": "Seleccionar"
}
diff --git a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json
index 750fa3a9b..bb587c4cf 100644
--- a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "Clave API secreta",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/es/integrations.json b/app/javascript/dashboard/i18n/locale/es/integrations.json
index ee297c2f8..37ac7c869 100644
--- a/app/javascript/dashboard/i18n/locale/es/integrations.json
+++ b/app/javascript/dashboard/i18n/locale/es/integrations.json
@@ -487,12 +487,12 @@
"ASSISTANT": "Assistant"
},
"BASIC_SETTINGS": {
- "TITLE": "Basic settings",
- "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human."
+ "TITLE": "Configuraciones básicas",
+ "DESCRIPTION": ""
},
"SYSTEM_SETTINGS": {
"TITLE": "System settings",
- "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human."
+ "DESCRIPTION": ""
},
"CONTROL_ITEMS": {
"TITLE": "The Fun Stuff",
diff --git a/app/javascript/dashboard/i18n/locale/es/settings.json b/app/javascript/dashboard/i18n/locale/es/settings.json
index 42a3df59a..f2662bc72 100644
--- a/app/javascript/dashboard/i18n/locale/es/settings.json
+++ b/app/javascript/dashboard/i18n/locale/es/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Cambiar apariencia",
"SUPER_ADMIN_CONSOLE": "Consola SuperAdmin",
"DOCS": "Leer la documentación",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Cerrar sesión"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/fa/contact.json b/app/javascript/dashboard/i18n/locale/fa/contact.json
index 3f8940c0e..174fb7e31 100644
--- a/app/javascript/dashboard/i18n/locale/fa/contact.json
+++ b/app/javascript/dashboard/i18n/locale/fa/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "آدرس آیپی",
"CREATED_AT_LABEL": "ایجاد شده",
"NEW_MESSAGE": "پیام جدید",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "این اولین گفتگوی این کاربر است.",
"TITLE": "گفتگوهای قبلی"
diff --git a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json
index c8070216e..870699abb 100644
--- a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/fa/settings.json b/app/javascript/dashboard/i18n/locale/fa/settings.json
index a41a39890..32f54fdfe 100644
--- a/app/javascript/dashboard/i18n/locale/fa/settings.json
+++ b/app/javascript/dashboard/i18n/locale/fa/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/fi/contact.json b/app/javascript/dashboard/i18n/locale/fi/contact.json
index 969c21162..2854f50e0 100644
--- a/app/javascript/dashboard/i18n/locale/fi/contact.json
+++ b/app/javascript/dashboard/i18n/locale/fi/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP-osoite",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "Uusi viesti",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Tähän yhteystietoon ei liity aikaisempia keskusteluja.",
"TITLE": "Edelliset keskustelut"
diff --git a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json
index d14c63f1b..9570d8afb 100644
--- a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/fi/settings.json b/app/javascript/dashboard/i18n/locale/fi/settings.json
index 4647727d3..99faa10bd 100644
--- a/app/javascript/dashboard/i18n/locale/fi/settings.json
+++ b/app/javascript/dashboard/i18n/locale/fi/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/fr/contact.json b/app/javascript/dashboard/i18n/locale/fr/contact.json
index c41f004b0..882638b78 100644
--- a/app/javascript/dashboard/i18n/locale/fr/contact.json
+++ b/app/javascript/dashboard/i18n/locale/fr/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Adresse IP",
"CREATED_AT_LABEL": "Créé",
"NEW_MESSAGE": "Nouveau message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Il n'y a aucune conversation précédente associée à ce contact.",
"TITLE": "Conversations précédentes"
diff --git a/app/javascript/dashboard/i18n/locale/fr/conversation.json b/app/javascript/dashboard/i18n/locale/fr/conversation.json
index e9057cb6e..544e68e4e 100644
--- a/app/javascript/dashboard/i18n/locale/fr/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/fr/conversation.json
@@ -315,7 +315,7 @@
"CONTACT_ATTRIBUTES": "Attributs du contact",
"PREVIOUS_CONVERSATION": "Conversations précédentes",
"MACROS": "Macros",
- "LINEAR_ISSUES": "Linked Linear Issues",
+ "LINEAR_ISSUES": "Problèmes Linear liés",
"SHOPIFY_ORDERS": "Shopify Orders"
},
"SHOPIFY": {
diff --git a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json
index 85bec42c6..ed8c885d6 100644
--- a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "Secret de la clé API",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/fr/settings.json b/app/javascript/dashboard/i18n/locale/fr/settings.json
index a66cd9871..96ac90636 100644
--- a/app/javascript/dashboard/i18n/locale/fr/settings.json
+++ b/app/javascript/dashboard/i18n/locale/fr/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/he/contact.json b/app/javascript/dashboard/i18n/locale/he/contact.json
index b18a83ef9..7dd5d1191 100644
--- a/app/javascript/dashboard/i18n/locale/he/contact.json
+++ b/app/javascript/dashboard/i18n/locale/he/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "כתובת IP",
"CREATED_AT_LABEL": "נוצר",
"NEW_MESSAGE": "הודעה חדשה",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "לא קיימות שיחות קודמות המשויכות לאיש קשר זה.",
"TITLE": "שיחות קודמות"
diff --git a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json
index 7f4785f75..9032c3c3d 100644
--- a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/he/settings.json b/app/javascript/dashboard/i18n/locale/he/settings.json
index 2ce59feeb..d6c5fe90f 100644
--- a/app/javascript/dashboard/i18n/locale/he/settings.json
+++ b/app/javascript/dashboard/i18n/locale/he/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/hi/contact.json b/app/javascript/dashboard/i18n/locale/hi/contact.json
index d50af43d7..b46989678 100644
--- a/app/javascript/dashboard/i18n/locale/hi/contact.json
+++ b/app/javascript/dashboard/i18n/locale/hi/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json
index a19105738..031fcb57e 100644
--- a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/hi/settings.json b/app/javascript/dashboard/i18n/locale/hi/settings.json
index 469dfe4ac..98c3f559b 100644
--- a/app/javascript/dashboard/i18n/locale/hi/settings.json
+++ b/app/javascript/dashboard/i18n/locale/hi/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/hr/contact.json b/app/javascript/dashboard/i18n/locale/hr/contact.json
index 01094d599..86d1592e5 100644
--- a/app/javascript/dashboard/i18n/locale/hr/contact.json
+++ b/app/javascript/dashboard/i18n/locale/hr/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json
index 192ee849a..9bb35d8b6 100644
--- a/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/hr/settings.json b/app/javascript/dashboard/i18n/locale/hr/settings.json
index e4a5de5a1..03ff834ba 100644
--- a/app/javascript/dashboard/i18n/locale/hr/settings.json
+++ b/app/javascript/dashboard/i18n/locale/hr/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/hu/contact.json b/app/javascript/dashboard/i18n/locale/hu/contact.json
index 5da9fe661..aae0bee52 100644
--- a/app/javascript/dashboard/i18n/locale/hu/contact.json
+++ b/app/javascript/dashboard/i18n/locale/hu/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP cím",
"CREATED_AT_LABEL": "Létrehozva",
"NEW_MESSAGE": "Új üzenet",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Nincs megelőző beszélgetés ezzel a kontakttal.",
"TITLE": "Korábbi beszélgetések"
diff --git a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json
index b348a6903..be250c927 100644
--- a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API titkos kulcs",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/hu/settings.json b/app/javascript/dashboard/i18n/locale/hu/settings.json
index ebba10ced..41dd9b73e 100644
--- a/app/javascript/dashboard/i18n/locale/hu/settings.json
+++ b/app/javascript/dashboard/i18n/locale/hu/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/hy/contact.json b/app/javascript/dashboard/i18n/locale/hy/contact.json
index b4bb1c13a..0ae5ecc38 100644
--- a/app/javascript/dashboard/i18n/locale/hy/contact.json
+++ b/app/javascript/dashboard/i18n/locale/hy/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json
index 585e5c510..ebc03363c 100644
--- a/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/hy/settings.json b/app/javascript/dashboard/i18n/locale/hy/settings.json
index fde198c92..d547538db 100644
--- a/app/javascript/dashboard/i18n/locale/hy/settings.json
+++ b/app/javascript/dashboard/i18n/locale/hy/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/id/contact.json b/app/javascript/dashboard/i18n/locale/id/contact.json
index 212bde087..e0887245c 100644
--- a/app/javascript/dashboard/i18n/locale/id/contact.json
+++ b/app/javascript/dashboard/i18n/locale/id/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Alamat IP",
"CREATED_AT_LABEL": "Dibuat",
"NEW_MESSAGE": "Pesan baru",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Tidak ada percakapan sebelumnya yang terkait dengan kontak ini.",
"TITLE": "Percakapan Sebelumnya"
diff --git a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json
index 2c0f9ba33..9f19e3d44 100644
--- a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/id/settings.json b/app/javascript/dashboard/i18n/locale/id/settings.json
index db6fa1002..916b9cc6e 100644
--- a/app/javascript/dashboard/i18n/locale/id/settings.json
+++ b/app/javascript/dashboard/i18n/locale/id/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/is/contact.json b/app/javascript/dashboard/i18n/locale/is/contact.json
index de2b1fdb5..93e674ff5 100644
--- a/app/javascript/dashboard/i18n/locale/is/contact.json
+++ b/app/javascript/dashboard/i18n/locale/is/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP tala",
"CREATED_AT_LABEL": "Skráð",
"NEW_MESSAGE": "Ný skilaboð",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Engin fyrri samtöl eru tengd þessum tengilið.",
"TITLE": "Fyrri samtöl"
diff --git a/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json
index 6521bbc3e..4ce98f192 100644
--- a/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/is/settings.json b/app/javascript/dashboard/i18n/locale/is/settings.json
index 0b5a3a08c..380695607 100644
--- a/app/javascript/dashboard/i18n/locale/is/settings.json
+++ b/app/javascript/dashboard/i18n/locale/is/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/it/contact.json b/app/javascript/dashboard/i18n/locale/it/contact.json
index 7acdb3426..d1844f228 100644
--- a/app/javascript/dashboard/i18n/locale/it/contact.json
+++ b/app/javascript/dashboard/i18n/locale/it/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Indirizzo IP",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "Nuovo messaggio",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Non ci sono precedenti conversazioni associate a questo contatto.",
"TITLE": "Conversazioni precedenti"
diff --git a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json
index 3cf0220c2..d335618d5 100644
--- a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Inserisci il tuo API Key Secret Twilio",
"REQUIRED": "API Key Secret richiesto"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/it/settings.json b/app/javascript/dashboard/i18n/locale/it/settings.json
index e8760cba4..443bf1c47 100644
--- a/app/javascript/dashboard/i18n/locale/it/settings.json
+++ b/app/javascript/dashboard/i18n/locale/it/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ja/contact.json b/app/javascript/dashboard/i18n/locale/ja/contact.json
index a37e63f54..f8f71b337 100644
--- a/app/javascript/dashboard/i18n/locale/ja/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ja/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IPアドレス",
"CREATED_AT_LABEL": "作成日時",
"NEW_MESSAGE": "新しいメッセージ",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "この連絡先に関連付けられている以前の会話はありません。",
"TITLE": "以前の会話"
diff --git a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json
index 837c73c13..a09b254c8 100644
--- a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "APIキーシークレット",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ja/settings.json b/app/javascript/dashboard/i18n/locale/ja/settings.json
index 914e7cfc3..c938f7793 100644
--- a/app/javascript/dashboard/i18n/locale/ja/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ja/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "外観を変更",
"SUPER_ADMIN_CONSOLE": "SuperAdminコンソール",
"DOCS": "ドキュメントを読む",
+ "CHANGELOG": "Changelog",
"LOGOUT": "ログアウト"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ka/contact.json b/app/javascript/dashboard/i18n/locale/ka/contact.json
index b4bb1c13a..0ae5ecc38 100644
--- a/app/javascript/dashboard/i18n/locale/ka/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ka/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json
index a19105738..031fcb57e 100644
--- a/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ka/settings.json b/app/javascript/dashboard/i18n/locale/ka/settings.json
index 469dfe4ac..98c3f559b 100644
--- a/app/javascript/dashboard/i18n/locale/ka/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ka/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ko/agentBots.json b/app/javascript/dashboard/i18n/locale/ko/agentBots.json
index 86664d128..e07da4507 100644
--- a/app/javascript/dashboard/i18n/locale/ko/agentBots.json
+++ b/app/javascript/dashboard/i18n/locale/ko/agentBots.json
@@ -22,7 +22,7 @@
"SELECT_PLACEHOLDER": "Select bot"
},
"ADD": {
- "TITLE": "Add Bot",
+ "TITLE": "Agregar Bot",
"CANCEL_BUTTON_TEXT": "취소",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully.",
@@ -30,10 +30,10 @@
}
},
"LIST": {
- "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.",
+ "404": "Bot no encontrado. Puedes crear uno haciendo click en el botón 'Agregar Bot'.",
"LOADING": "Fetching bots...",
"TABLE_HEADER": {
- "DETAILS": "Bot Details",
+ "DETAILS": "Detalles del Bot",
"URL": "웹훅 URL"
}
},
diff --git a/app/javascript/dashboard/i18n/locale/ko/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ko/agentMgmt.json
index 15cb28d31..d73b5c8ab 100644
--- a/app/javascript/dashboard/i18n/locale/ko/agentMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ko/agentMgmt.json
@@ -78,7 +78,7 @@
},
"AGENT_AVAILABILITY": {
"LABEL": "유용성",
- "PLACEHOLDER": "",
+ "PLACEHOLDER": "가용성 상태를 선택하세요",
"ERROR": "Availability is required"
},
"SUBMIT": "에이전트 수정"
diff --git a/app/javascript/dashboard/i18n/locale/ko/contact.json b/app/javascript/dashboard/i18n/locale/ko/contact.json
index faaa14ccc..53bac391b 100644
--- a/app/javascript/dashboard/i18n/locale/ko/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ko/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP 주소",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "새 메시지",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "이 연락처와 관련된 이전 대화가 없습니다.",
"TITLE": "이전 대화"
diff --git a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json
index 277e39c0e..4a1d5d18d 100644
--- a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ko/settings.json b/app/javascript/dashboard/i18n/locale/ko/settings.json
index e2e8f1231..2dcbcd532 100644
--- a/app/javascript/dashboard/i18n/locale/ko/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ko/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/lt/contact.json b/app/javascript/dashboard/i18n/locale/lt/contact.json
index 305f66b23..ca4e1eeef 100644
--- a/app/javascript/dashboard/i18n/locale/lt/contact.json
+++ b/app/javascript/dashboard/i18n/locale/lt/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Adresas",
"CREATED_AT_LABEL": "Sukurta",
"NEW_MESSAGE": "Naujas pranešimas",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Su šiuo kontaktu nėra susietų ankstesnių pokalbių.",
"TITLE": "Ankstesni pokalbiai"
diff --git a/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json
index 5aed6b37d..e35ec10b2 100644
--- a/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/lt/settings.json b/app/javascript/dashboard/i18n/locale/lt/settings.json
index 7feed76ec..b80a711de 100644
--- a/app/javascript/dashboard/i18n/locale/lt/settings.json
+++ b/app/javascript/dashboard/i18n/locale/lt/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/lv/contact.json b/app/javascript/dashboard/i18n/locale/lv/contact.json
index 3697015a0..2e547cf1e 100644
--- a/app/javascript/dashboard/i18n/locale/lv/contact.json
+++ b/app/javascript/dashboard/i18n/locale/lv/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP adrese",
"CREATED_AT_LABEL": "Izveidots",
"NEW_MESSAGE": "Jauns ziņojums",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Ar šo kontaktpersonu nav saistītas iepriekšējās sarunas.",
"TITLE": "Iepriekšējās Sarunas"
diff --git a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json
index d7de66c22..3954c9196 100644
--- a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Atslēgas Noslēpums",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/lv/settings.json b/app/javascript/dashboard/i18n/locale/lv/settings.json
index c70aff35c..9caf8de0b 100644
--- a/app/javascript/dashboard/i18n/locale/lv/settings.json
+++ b/app/javascript/dashboard/i18n/locale/lv/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Mainīt izskatu",
"SUPER_ADMIN_CONSOLE": "SuperAdmin konsole",
"DOCS": "Lasīt dokumentāciju",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Izrakstīties"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ml/contact.json b/app/javascript/dashboard/i18n/locale/ml/contact.json
index 0fcc576f1..f8143d8ab 100644
--- a/app/javascript/dashboard/i18n/locale/ml/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ml/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP വിലാസം",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "പുതിയ സന്ദേശം",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "ഈ കോൺടാക്റ്റുമായി മുമ്പത്തെ സംഭാഷണങ്ങളൊന്നും ബന്ധപ്പെടുത്തിയിട്ടില്ല.",
"TITLE": "മുമ്പത്തെ സംഭാഷണങ്ങൾ"
diff --git a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json
index d14da0e83..72eee5d91 100644
--- a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ml/settings.json b/app/javascript/dashboard/i18n/locale/ml/settings.json
index 4d6727f21..cd7eaaa4b 100644
--- a/app/javascript/dashboard/i18n/locale/ml/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ml/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ms/contact.json b/app/javascript/dashboard/i18n/locale/ms/contact.json
index 6373a8987..0b452f059 100644
--- a/app/javascript/dashboard/i18n/locale/ms/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ms/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json
index 46f46ece6..02b707d82 100644
--- a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ms/settings.json b/app/javascript/dashboard/i18n/locale/ms/settings.json
index 327fc9603..386fddf66 100644
--- a/app/javascript/dashboard/i18n/locale/ms/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ms/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ne/contact.json b/app/javascript/dashboard/i18n/locale/ne/contact.json
index ecf2e17ac..ff40d2c75 100644
--- a/app/javascript/dashboard/i18n/locale/ne/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ne/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json
index f53e031d8..c8d3e72a0 100644
--- a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ne/settings.json b/app/javascript/dashboard/i18n/locale/ne/settings.json
index 755426999..22ea8edd8 100644
--- a/app/javascript/dashboard/i18n/locale/ne/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ne/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/nl/contact.json b/app/javascript/dashboard/i18n/locale/nl/contact.json
index 1939b63b5..fe172b93d 100644
--- a/app/javascript/dashboard/i18n/locale/nl/contact.json
+++ b/app/javascript/dashboard/i18n/locale/nl/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP-adres",
"CREATED_AT_LABEL": "Aangemaakt op",
"NEW_MESSAGE": "Nieuw bericht",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Er zijn geen eerdere gesprekken gekoppeld aan dit contact.",
"TITLE": "Vorige gesprekken"
diff --git a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json
index fbc9511db..dd7433613 100644
--- a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/nl/settings.json b/app/javascript/dashboard/i18n/locale/nl/settings.json
index 8471e6e88..98ac5535b 100644
--- a/app/javascript/dashboard/i18n/locale/nl/settings.json
+++ b/app/javascript/dashboard/i18n/locale/nl/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/no/contact.json b/app/javascript/dashboard/i18n/locale/no/contact.json
index fccb77206..43326595c 100644
--- a/app/javascript/dashboard/i18n/locale/no/contact.json
+++ b/app/javascript/dashboard/i18n/locale/no/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Adresse",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Det er ingen tidligere samtaler knyttet til denne kontakten.",
"TITLE": "Tidligere samtaler"
diff --git a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json
index 1f5826078..9bf8edbe4 100644
--- a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/no/settings.json b/app/javascript/dashboard/i18n/locale/no/settings.json
index 1107744e0..e2bffacc6 100644
--- a/app/javascript/dashboard/i18n/locale/no/settings.json
+++ b/app/javascript/dashboard/i18n/locale/no/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/pl/contact.json b/app/javascript/dashboard/i18n/locale/pl/contact.json
index 87f901eda..26fddc117 100644
--- a/app/javascript/dashboard/i18n/locale/pl/contact.json
+++ b/app/javascript/dashboard/i18n/locale/pl/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Adres IP",
"CREATED_AT_LABEL": "Utworzono",
"NEW_MESSAGE": "Nowa wiadomość",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Brak wcześniejszych rozmów z tym kontaktem.",
"TITLE": "Poprzednie rozmowy"
diff --git a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json
index 7f5a62f96..772c2afd7 100644
--- a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/pl/settings.json b/app/javascript/dashboard/i18n/locale/pl/settings.json
index 24fe6ab7d..5c6d7312b 100644
--- a/app/javascript/dashboard/i18n/locale/pl/settings.json
+++ b/app/javascript/dashboard/i18n/locale/pl/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/pt/contact.json b/app/javascript/dashboard/i18n/locale/pt/contact.json
index e84d74f78..b9f74435c 100644
--- a/app/javascript/dashboard/i18n/locale/pt/contact.json
+++ b/app/javascript/dashboard/i18n/locale/pt/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Endereço IP",
"CREATED_AT_LABEL": "Criado",
"NEW_MESSAGE": "Nova mensagem",
+ "CALL": "Chamada",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Não há conversas anteriores associadas a este contacto.",
"TITLE": "Conversas anteriores"
diff --git a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json
index d698c6313..b7b4ec61d 100644
--- a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "Chave secreta da API",
"PLACEHOLDER": "Insira a chave secreta da API Twilio",
"REQUIRED": "A chave secreta da API é obrigatória"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Insira a sua Twilio TwiML App SID (começa por AP)",
- "REQUIRED": "TwiML App SID é obrigatória"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Criar canal de Voz",
"API": {
"ERROR_MESSAGE": "Não foi possível criar o canal de voz"
diff --git a/app/javascript/dashboard/i18n/locale/pt/settings.json b/app/javascript/dashboard/i18n/locale/pt/settings.json
index dffb4ff81..0f78e6469 100644
--- a/app/javascript/dashboard/i18n/locale/pt/settings.json
+++ b/app/javascript/dashboard/i18n/locale/pt/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json
index 0bbee4de3..57941ef09 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Endereço IP",
"CREATED_AT_LABEL": "Criado",
"NEW_MESSAGE": "Nova Mensagem",
+ "CALL": "Chamada",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Não há conversas anteriores associadas a este contato.",
"TITLE": "Conversas anteriores"
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json
index adf445252..b0b117b51 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "Segredo da Chave API",
"PLACEHOLDER": "Digite o segredo da sua chave de API do Twilio",
"REQUIRED": "Segredo da chave da API é obrigatório"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Insira seu Twilio TwiML App SID (começa com AP)",
- "REQUIRED": "TwiML App SID é obrigatório"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Criar Canal de Voz",
"API": {
"ERROR_MESSAGE": "Não conseguimos criar o canal de voz"
diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
index 74a07aaad..29f75b325 100644
--- a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
+++ b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Alterar Tema",
"SUPER_ADMIN_CONSOLE": "Console de Super Admin",
"DOCS": "Ler documentação",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Encerrar sessão"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ro/contact.json b/app/javascript/dashboard/i18n/locale/ro/contact.json
index 747ada0d3..1e2d05039 100644
--- a/app/javascript/dashboard/i18n/locale/ro/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ro/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Adresă IP",
"CREATED_AT_LABEL": "Creat",
"NEW_MESSAGE": "Mesaj nou",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Nu există conversații anterioare asociate cu acest contact.",
"TITLE": "Conversații anterioare"
diff --git a/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json
index 9af77f363..3f37e4d67 100644
--- a/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ro/settings.json b/app/javascript/dashboard/i18n/locale/ro/settings.json
index 71eb37c30..570740b7c 100644
--- a/app/javascript/dashboard/i18n/locale/ro/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ro/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ru/contact.json b/app/javascript/dashboard/i18n/locale/ru/contact.json
index 66c86ea04..1898e5a15 100644
--- a/app/javascript/dashboard/i18n/locale/ru/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ru/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP адрес",
"CREATED_AT_LABEL": "Создан",
"NEW_MESSAGE": "Новое сообщение",
+ "CALL": "Вызов",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Нет предыдущих диалогов, связанных с этим контактом.",
"TITLE": "Предыдущие диалоги"
diff --git a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json
index 83b983539..206a0663b 100644
--- a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "Секретный ключ API",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ru/settings.json b/app/javascript/dashboard/i18n/locale/ru/settings.json
index c6bb8f348..749f11492 100644
--- a/app/javascript/dashboard/i18n/locale/ru/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ru/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Изменить внешний вид",
"SUPER_ADMIN_CONSOLE": "Консоль супер администратора",
"DOCS": "Открыть документацию",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Выйти из системы"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/sh/contact.json b/app/javascript/dashboard/i18n/locale/sh/contact.json
index 38489d630..735489a08 100644
--- a/app/javascript/dashboard/i18n/locale/sh/contact.json
+++ b/app/javascript/dashboard/i18n/locale/sh/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json
index db4959846..c456411cd 100644
--- a/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/sh/settings.json b/app/javascript/dashboard/i18n/locale/sh/settings.json
index fde198c92..d547538db 100644
--- a/app/javascript/dashboard/i18n/locale/sh/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sh/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/sk/contact.json b/app/javascript/dashboard/i18n/locale/sk/contact.json
index 245231cc4..9bab7e8fd 100644
--- a/app/javascript/dashboard/i18n/locale/sk/contact.json
+++ b/app/javascript/dashboard/i18n/locale/sk/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP adresa",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "Nová správa",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "K tomuto kontaktu nie sú priradené žiadne predchádzajúce konverzácie.",
"TITLE": "Prechádzajúce konverzácie"
diff --git a/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json
index 535d60aec..884133023 100644
--- a/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/sk/settings.json b/app/javascript/dashboard/i18n/locale/sk/settings.json
index 16c4ad6a3..9f452890d 100644
--- a/app/javascript/dashboard/i18n/locale/sk/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sk/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/sl/contact.json b/app/javascript/dashboard/i18n/locale/sl/contact.json
index f1ad75a48..2b43dfea8 100644
--- a/app/javascript/dashboard/i18n/locale/sl/contact.json
+++ b/app/javascript/dashboard/i18n/locale/sl/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json
index 30fd68bde..40ffb6acb 100644
--- a/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/sl/settings.json b/app/javascript/dashboard/i18n/locale/sl/settings.json
index 1d76f4bce..4948a016c 100644
--- a/app/javascript/dashboard/i18n/locale/sl/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sl/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/sq/agentBots.json b/app/javascript/dashboard/i18n/locale/sq/agentBots.json
index d3a0bb991..c7dee5d5e 100644
--- a/app/javascript/dashboard/i18n/locale/sq/agentBots.json
+++ b/app/javascript/dashboard/i18n/locale/sq/agentBots.json
@@ -2,13 +2,13 @@
"AGENT_BOTS": {
"HEADER": "Bots",
"LOADING_EDITOR": "Loading editor...",
- "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.",
+ "DESCRIPTION": "Botët agjentë janë si anëtarët më të mrekullueshëm të ekipit tuaj. Ata mund të merren me gjërat e vogla, që ju të përqendroheni te ato që kanë rëndësi. Provojini. Mund t'i menaxhoni botët nga kjo faqe ose të krijoni të rinj duke përdorur butonin 'Shto Bot'.",
"LEARN_MORE": "Learn about agent bots",
- "GLOBAL_BOT": "System bot",
+ "GLOBAL_BOT": "Bot i sistemit",
"GLOBAL_BOT_BADGE": "System",
"AVATAR": {
- "SUCCESS_DELETE": "Bot avatar deleted successfully",
- "ERROR_DELETE": "Error deleting bot avatar, please try again"
+ "SUCCESS_DELETE": "Avatari i botit u fshi me sukses",
+ "ERROR_DELETE": "Gabim gjatë fshirjes së avatarit të botit, ju lutemi provoni përsëri"
},
"BOT_CONFIGURATION": {
"TITLE": "Select an agent bot",
@@ -22,7 +22,7 @@
"SELECT_PLACEHOLDER": "Select bot"
},
"ADD": {
- "TITLE": "Add Bot",
+ "TITLE": "Shto Bot",
"CANCEL_BUTTON_TEXT": "Cancel",
"API": {
"SUCCESS_MESSAGE": "Bot added successfully.",
@@ -30,10 +30,10 @@
}
},
"LIST": {
- "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.",
+ "404": "Nuk u gjet asnjë bot. Mund të krijoni një bot duke klikuar butonin 'Shto Bot'.",
"LOADING": "Fetching bots...",
"TABLE_HEADER": {
- "DETAILS": "Bot Details",
+ "DETAILS": "Detajet e botit",
"URL": "Webhook URL"
}
},
@@ -42,7 +42,7 @@
"TITLE": "Delete bot",
"CONFIRM": {
"TITLE": "Confirm Deletion",
- "MESSAGE": "Are you sure you want to delete {name}?",
+ "MESSAGE": "Jeni të sigurt që doni të fshini {name}?",
"YES": "Yes, Delete",
"NO": "No, Keep"
},
@@ -61,18 +61,18 @@
},
"ACCESS_TOKEN": {
"TITLE": "Access Token",
- "DESCRIPTION": "Copy the access token and save it securely",
- "COPY_SUCCESSFUL": "Access token copied to clipboard",
- "RESET_SUCCESS": "Access token regenerated successfully",
- "RESET_ERROR": "Unable to regenerate access token. Please try again"
+ "DESCRIPTION": "Kopjoni tokenin e aksesit dhe ruajeni në mënyrë të sigurt",
+ "COPY_SUCCESSFUL": "Tokeni i aksesit u kopjua në kujtesën e përkohshme",
+ "RESET_SUCCESS": "Tokeni i aksesit u rigjenerua me sukses",
+ "RESET_ERROR": "Nuk mund të rigjenerohet tokeni i aksesit. Ju lutemi provoni përsëri"
},
"FORM": {
"AVATAR": {
- "LABEL": "Bot avatar"
+ "LABEL": "Avatari i botit"
},
"NAME": {
"LABEL": "Bot name",
- "PLACEHOLDER": "Enter bot name",
+ "PLACEHOLDER": "Shkruani emrin e botit",
"REQUIRED": "Bot name is required"
},
"DESCRIPTION": {
@@ -82,19 +82,19 @@
"WEBHOOK_URL": {
"LABEL": "Webhook URL",
"PLACEHOLDER": "https://example.com/webhook",
- "REQUIRED": "Webhook URL is required"
+ "REQUIRED": "URL-ja e webhook-ut është e detyrueshme"
},
"ERRORS": {
"NAME": "Bot name is required",
- "URL": "Webhook URL is required",
- "VALID_URL": "Please enter a valid URL starting with http:// or https://"
+ "URL": "URL-ja e webhook-ut është e detyrueshme",
+ "VALID_URL": "Ju lutemi shkruani një URL të vlefshme që fillon me http:// ose https://"
},
"CANCEL": "Cancel",
- "CREATE": "Create Bot",
- "UPDATE": "Update Bot"
+ "CREATE": "Krijo Bot",
+ "UPDATE": "Përditëso Bot"
},
"WEBHOOK": {
- "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them."
+ "DESCRIPTION": "Konfiguroni një bot webhook për t'u integruar me shërbimet tuaja të personalizuara. Boti do të marrë dhe përpunojë ngjarjet nga bisedat dhe mund t'u përgjigjet atyre."
},
"TYPES": {
"WEBHOOK": "Webhook bot"
diff --git a/app/javascript/dashboard/i18n/locale/sq/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/sq/attributesMgmt.json
index cea6359de..93360eeb0 100644
--- a/app/javascript/dashboard/i18n/locale/sq/attributesMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sq/attributesMgmt.json
@@ -13,7 +13,7 @@
"TEXT": "Text",
"NUMBER": "Number",
"LINK": "Link",
- "DATE": "Date",
+ "DATE": "Datë",
"LIST": "List",
"CHECKBOX": "Checkbox"
},
diff --git a/app/javascript/dashboard/i18n/locale/sq/auditLogs.json b/app/javascript/dashboard/i18n/locale/sq/auditLogs.json
index f85ad2a3e..26d0626d3 100644
--- a/app/javascript/dashboard/i18n/locale/sq/auditLogs.json
+++ b/app/javascript/dashboard/i18n/locale/sq/auditLogs.json
@@ -71,7 +71,7 @@
"EDIT": "{agentName} updated the account configuration (#{id})"
},
"CONVERSATION": {
- "DELETE": "{agentName} deleted conversation #{id}"
+ "DELETE": "{agentName} fshiu bisedën #{id}"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sq/automation.json b/app/javascript/dashboard/i18n/locale/sq/automation.json
index 280c6c65d..020df33f3 100644
--- a/app/javascript/dashboard/i18n/locale/sq/automation.json
+++ b/app/javascript/dashboard/i18n/locale/sq/automation.json
@@ -130,31 +130,31 @@
"EVENTS": {
"CONVERSATION_CREATED": "Conversation Created",
"CONVERSATION_UPDATED": "Conversation Updated",
- "MESSAGE_CREATED": "Message Created",
- "CONVERSATION_RESOLVED": "Conversation Resolved",
- "CONVERSATION_OPENED": "Conversation Opened"
+ "MESSAGE_CREATED": "Mesazhi u krijua",
+ "CONVERSATION_RESOLVED": "Biseda u zgjidh",
+ "CONVERSATION_OPENED": "Biseda u hap"
},
"ACTIONS": {
- "ASSIGN_AGENT": "Assign to Agent",
- "ASSIGN_TEAM": "Assign a Team",
- "ADD_LABEL": "Add a Label",
- "REMOVE_LABEL": "Remove a Label",
- "SEND_EMAIL_TO_TEAM": "Send an Email to Team",
- "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript",
- "MUTE_CONVERSATION": "Mute Conversation",
+ "ASSIGN_AGENT": "Cakto te një agjent",
+ "ASSIGN_TEAM": "Cakto një ekip",
+ "ADD_LABEL": "Shto një etiketë",
+ "REMOVE_LABEL": "Hiq një etiketë",
+ "SEND_EMAIL_TO_TEAM": "Dërgo një email ekipit",
+ "SEND_EMAIL_TRANSCRIPT": "Dërgo një transkript me email",
+ "MUTE_CONVERSATION": "Heshto bisedën",
"SNOOZE_CONVERSATION": "Snooze Conversation",
"RESOLVE_CONVERSATION": "Resolve Conversation",
- "SEND_WEBHOOK_EVENT": "Send Webhook Event",
- "SEND_ATTACHMENT": "Send Attachment",
- "SEND_MESSAGE": "Send a Message",
- "ADD_PRIVATE_NOTE": "Add a Private Note",
+ "SEND_WEBHOOK_EVENT": "Dërgo një ngjarje webhook",
+ "SEND_ATTACHMENT": "Dërgo një bashkëngjitje",
+ "SEND_MESSAGE": "Dërgo një mesazh",
+ "ADD_PRIVATE_NOTE": "Shto një shënim privat",
"CHANGE_PRIORITY": "Change Priority",
"ADD_SLA": "Add SLA",
"OPEN_CONVERSATION": "Open conversation"
},
"MESSAGE_TYPES": {
- "INCOMING": "Incoming Message",
- "OUTGOING": "Outgoing Message"
+ "INCOMING": "Mesazh hyrës",
+ "OUTGOING": "Mesazh dalës"
},
"PRIORITY_TYPES": {
"NONE": "None",
@@ -164,17 +164,17 @@
"URGENT": "Urgent"
},
"ATTRIBUTES": {
- "MESSAGE_TYPE": "Message Type",
- "MESSAGE_CONTAINS": "Message Contains",
+ "MESSAGE_TYPE": "Lloji i mesazhit",
+ "MESSAGE_CONTAINS": "Mesazhi përmban",
"EMAIL": "Email",
"INBOX": "Inbox",
- "CONVERSATION_LANGUAGE": "Conversation Language",
+ "CONVERSATION_LANGUAGE": "Gjuha e bisedës",
"PHONE_NUMBER": "Phone Number",
"STATUS": "Status",
"BROWSER_LANGUAGE": "Browser Language",
- "MAIL_SUBJECT": "Email Subject",
+ "MAIL_SUBJECT": "Subjekti i emailit",
"COUNTRY_NAME": "Country",
- "REFERER_LINK": "Referrer Link",
+ "REFERER_LINK": "Lidhja e referuesit",
"ASSIGNEE_NAME": "Assignee",
"TEAM_NAME": "Team",
"PRIORITY": "Priority"
diff --git a/app/javascript/dashboard/i18n/locale/sq/campaign.json b/app/javascript/dashboard/i18n/locale/sq/campaign.json
index 6dd043352..d4785a15e 100644
--- a/app/javascript/dashboard/i18n/locale/sq/campaign.json
+++ b/app/javascript/dashboard/i18n/locale/sq/campaign.json
@@ -138,11 +138,11 @@
}
},
"WHATSAPP": {
- "HEADER_TITLE": "WhatsApp campaigns",
+ "HEADER_TITLE": "Fushata WhatsApp",
"NEW_CAMPAIGN": "Create campaign",
"EMPTY_STATE": {
- "TITLE": "No WhatsApp campaigns are available",
- "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started."
+ "TITLE": "Nuk ka fushata WhatsApp të disponueshme",
+ "SUBTITLE": "Nisni një fushatë në WhatsApp për të arritur klientët tuaj drejtpërdrejt. Dërgoni oferta ose bëni njoftime me lehtësi. Klikoni 'Krijo fushatë' për të filluar."
},
"CARD": {
"STATUS": {
@@ -155,7 +155,7 @@
}
},
"CREATE": {
- "TITLE": "Create WhatsApp campaign",
+ "TITLE": "Krijo fushatë WhatsApp",
"CANCEL_BUTTON_TEXT": "Cancel",
"CREATE_BUTTON_TEXT": "Create",
"FORM": {
@@ -170,15 +170,15 @@
"ERROR": "Inbox is required"
},
"TEMPLATE": {
- "LABEL": "WhatsApp Template",
- "PLACEHOLDER": "Select a template",
- "INFO": "Select a template to use for this campaign.",
- "ERROR": "Template is required",
+ "LABEL": "Shabllon WhatsApp",
+ "PLACEHOLDER": "Zgjidhni një shabllon",
+ "INFO": "Zgjidhni një shabllon për ta përdorur në këtë fushatë.",
+ "ERROR": "Kërkohet shablloni",
"PREVIEW_TITLE": "Process {templateName}",
"LANGUAGE": "Language",
"CATEGORY": "Category",
"VARIABLES_LABEL": "Variables",
- "VARIABLE_PLACEHOLDER": "Enter value for {variable}"
+ "VARIABLE_PLACEHOLDER": "Futni vlerën për {variable}"
},
"AUDIENCE": {
"LABEL": "Audience",
@@ -195,7 +195,7 @@
"CANCEL": "Cancel"
},
"API": {
- "SUCCESS_MESSAGE": "WhatsApp campaign created successfully",
+ "SUCCESS_MESSAGE": "Fushata WhatsApp u krijua me sukses",
"ERROR_MESSAGE": "There was an error. Please try again."
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sq/components.json b/app/javascript/dashboard/i18n/locale/sq/components.json
index 0a2542a84..5eb3d95f9 100644
--- a/app/javascript/dashboard/i18n/locale/sq/components.json
+++ b/app/javascript/dashboard/i18n/locale/sq/components.json
@@ -45,12 +45,12 @@
"WATCH_VIDEO": "Watch video"
},
"DURATION_INPUT": {
- "MINUTES": "Minutes",
- "HOURS": "Hours",
- "DAYS": "Days",
- "PLACEHOLDER": "Enter duration"
+ "MINUTES": "Minuta",
+ "HOURS": "Orë",
+ "DAYS": "Ditë",
+ "PLACEHOLDER": "Shkruani kohëzgjatjen"
},
"CHANNEL_SELECTOR": {
- "COMING_SOON": "Coming Soon!"
+ "COMING_SOON": "Së shpejti!"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sq/contact.json b/app/javascript/dashboard/i18n/locale/sq/contact.json
index f6a929e78..d226b001e 100644
--- a/app/javascript/dashboard/i18n/locale/sq/contact.json
+++ b/app/javascript/dashboard/i18n/locale/sq/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Telefono",
+ "CALL_UNDER_DEVELOPMENT": "Telefonimi është në zhvillim",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Zgjidhni një inbox të zërit"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
@@ -285,7 +290,7 @@
"HEADER": {
"TITLE": "Contacts",
"SEARCH_TITLE": "Search contacts",
- "ACTIVE_TITLE": "Active contacts",
+ "ACTIVE_TITLE": "Kontaktet aktive",
"SEARCH_PLACEHOLDER": "Search...",
"MESSAGE_BUTTON": "Message",
"SEND_MESSAGE": "Send message",
@@ -460,8 +465,8 @@
}
},
"DELETE_CONTACT": {
- "MESSAGE": "This action is permanent and irreversible.",
- "BUTTON": "Delete now"
+ "MESSAGE": "Ky veprim është i përhershëm dhe i pakthyeshëm.",
+ "BUTTON": "Fshi tani"
}
},
"DETAILS": {
@@ -471,7 +476,7 @@
"DELETE_CONTACT": "Delete contact",
"DELETE_DIALOG": {
"TITLE": "Confirm Deletion",
- "DESCRIPTION": "Are you sure you want to delete this contact?",
+ "DESCRIPTION": "A jeni i sigurt se doni ta fshini këtë kontakt?",
"CONFIRM": "Yes, Delete",
"API": {
"SUCCESS_MESSAGE": "Contact deleted successfully",
@@ -550,8 +555,8 @@
"YOU": "Ju",
"SAVE": "Save note",
"EXPAND": "Expand",
- "COLLAPSE": "Collapse",
- "NO_NOTES": "No notes, you can add notes from the contact details page.",
+ "COLLAPSE": "Palos",
+ "NO_NOTES": "Nuk ka shënime, mund të shtoni shënime nga faqja e detajeve të kontaktit.",
"EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above."
}
},
@@ -561,7 +566,7 @@
"BUTTON_LABEL": "Add contact",
"SEARCH_EMPTY_STATE_TITLE": "No contacts matches your search 🔍",
"LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋",
- "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙"
+ "ACTIVE_EMPTY_STATE_TITLE": "Asnjë kontakt nuk është aktiv për momentin 🌙"
}
},
"COMPOSE_NEW_CONVERSATION": {
diff --git a/app/javascript/dashboard/i18n/locale/sq/conversation.json b/app/javascript/dashboard/i18n/locale/sq/conversation.json
index 308f24f51..98da737b8 100644
--- a/app/javascript/dashboard/i18n/locale/sq/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/sq/conversation.json
@@ -32,12 +32,12 @@
"LOADING_CONVERSATIONS": "Loading Conversations",
"CANNOT_REPLY": "You cannot reply due to",
"24_HOURS_WINDOW": "24 hour message window restriction",
- "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours",
+ "API_HOURS_WINDOW": "Mund t'i përgjigjeni kësaj bisede vetëm brenda {hours} orëve",
"NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?",
"ASSIGN_TO_ME": "Assign to me",
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction",
- "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.",
+ "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "Kjo llogari Instagram u migrua te kutia hyrëse e re e kanalit të Instagram-it. Të gjitha mesazhet e reja do të shfaqen atje. Nuk do të mund të dërgoni më mesazhe nga kjo bisedë.",
"REPLYING_TO": "You are replying to:",
"REMOVE_SELECTION": "Remove Selection",
"DOWNLOAD": "Download",
@@ -70,7 +70,7 @@
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
"OPEN_ACTION": "Open",
- "MORE_ACTIONS": "More actions",
+ "MORE_ACTIONS": "Më shumë veprime",
"OPEN": "More",
"CLOSE": "Close",
"DETAILS": "details",
@@ -123,8 +123,8 @@
}
},
"DELETE_CONVERSATION": {
- "TITLE": "Delete conversation #{conversationId}",
- "DESCRIPTION": "Are you sure you want to delete this conversation?",
+ "TITLE": "Fshi bisedën #{conversationId}",
+ "DESCRIPTION": "A jeni të sigurt se doni ta fshini këtë bisedë?",
"CONFIRM": "Delete"
},
"CARD_CONTEXT_MENU": {
@@ -143,10 +143,10 @@
"ASSIGN_LABEL": "Assign label",
"AGENTS_LOADING": "Loading agents...",
"ASSIGN_TEAM": "Assign team",
- "DELETE": "Delete conversation",
- "OPEN_IN_NEW_TAB": "Open in new tab",
- "COPY_LINK": "Copy conversation link",
- "COPY_LINK_SUCCESS": "Conversation link copied to clipboard",
+ "DELETE": "Fshi bisedën",
+ "OPEN_IN_NEW_TAB": "Hap në skedë të re",
+ "COPY_LINK": "Kopjo lidhjen e bisedës",
+ "COPY_LINK_SUCCESS": "Lidhja e bisedës u kopjua në kujtesën e përkohshme",
"API": {
"AGENT_ASSIGNMENT": {
"SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"",
@@ -221,8 +221,8 @@
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
"ASSIGN_LABEL_FAILED": "Label assignment failed",
"CHANGE_TEAM": "Conversation team changed",
- "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully",
- "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again",
+ "SUCCESS_DELETE_CONVERSATION": "Biseda u fshi me sukses",
+ "FAIL_DELETE_CONVERSATION": "Biseda nuk u fshi dot! Provoni përsëri",
"FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit",
"MESSAGE_ERROR": "Unable to send this message, please try again later",
"SENT_BY": "Sent by:",
@@ -311,11 +311,11 @@
"CONVERSATION_ACTIONS": "Conversation Actions",
"CONVERSATION_LABELS": "Conversation Labels",
"CONVERSATION_INFO": "Conversation Information",
- "CONTACT_NOTES": "Contact Notes",
+ "CONTACT_NOTES": "Shënime kontakti",
"CONTACT_ATTRIBUTES": "Contact Attributes",
"PREVIOUS_CONVERSATION": "Previous Conversations",
"MACROS": "Macros",
- "LINEAR_ISSUES": "Linked Linear Issues",
+ "LINEAR_ISSUES": "Çështje të lidhura në Linear",
"SHOPIFY_ORDERS": "Shopify Orders"
},
"SHOPIFY": {
diff --git a/app/javascript/dashboard/i18n/locale/sq/generalSettings.json b/app/javascript/dashboard/i18n/locale/sq/generalSettings.json
index d924bffbd..d657e4c4b 100644
--- a/app/javascript/dashboard/i18n/locale/sq/generalSettings.json
+++ b/app/javascript/dashboard/i18n/locale/sq/generalSettings.json
@@ -1,10 +1,10 @@
{
"GENERAL_SETTINGS": {
"LIMIT_MESSAGES": {
- "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.",
- "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.",
- "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.",
- "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features."
+ "CONVERSATION": "Keni tejkaluar kufirin e bisedave. Plani Hacker lejon vetëm 500 biseda.",
+ "INBOXES": "Keni tejkaluar kufirin e inbox-it. Plani Hacker mbështet vetëm bisedën e drejtpërdrejtë në ueb. Inboxe shtesë si email, WhatsApp etj. kërkojnë një plan me pagesë.",
+ "AGENTS": "Keni tejkaluar kufirin e agjentëve. Plani juaj lejon vetëm {allowedAgents} agjentë.",
+ "NON_ADMIN": "Ju lutemi kontaktoni administratorin tuaj për të përmirësuar planin dhe për të vazhduar përdorimin e të gjitha veçorive."
},
"TITLE": "Account settings",
"SUBMIT": "Update settings",
@@ -15,23 +15,23 @@
"SUCCESS": "Successfully updated account settings"
},
"ACCOUNT_DELETE_SECTION": {
- "TITLE": "Delete your Account",
- "NOTE": "Once you delete your account, all your data will be deleted.",
- "BUTTON_TEXT": "Delete Your Account",
+ "TITLE": "Fshini llogarinë tuaj",
+ "NOTE": "Pasi ta fshini llogarinë tuaj, të dhënat tuaja do të fshihen.",
+ "BUTTON_TEXT": "Fshi llogarinë tuaj",
"CONFIRM": {
- "TITLE": "Delete Account",
- "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.",
+ "TITLE": "Fshi llogarinë",
+ "MESSAGE": "Fshirja e llogarisë tuaj është e pakthyeshme. Shkruani më poshtë emrin e llogarisë për të konfirmuar se dëshironi ta fshini përgjithmonë.",
"BUTTON_TEXT": "Delete",
"DISMISS": "Cancel",
"PLACE_HOLDER": "Please type {accountName} to confirm"
},
- "SUCCESS": "Account marked for deletion",
- "FAILURE": "Could not delete account, try again!",
+ "SUCCESS": "Llogaria u shënua për fshirje",
+ "FAILURE": "Nuk u arrit të fshihej llogaria, provoni përsëri!",
"SCHEDULED_DELETION": {
- "TITLE": "Account Scheduled for Deletion",
- "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.",
- "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.",
- "CLEAR_BUTTON": "Cancel Scheduled Deletion"
+ "TITLE": "Llogaria e planifikuar për fshirje",
+ "MESSAGE_MANUAL": "Kjo llogari është planifikuar të fshihet më {deletionDate}. Kjo u kërkua nga një administrator. Mund ta anuloni fshirjen para kësaj date.",
+ "MESSAGE_INACTIVITY": "Kjo llogari është planifikuar të fshihet më {deletionDate} për shkak të pasivitetit të llogarisë. Mund ta anuloni fshirjen para kësaj date.",
+ "CLEAR_BUTTON": "Anulo fshirjen e planifikuar"
}
},
"FORM": {
@@ -45,32 +45,32 @@
"NOTE": "This ID is required if you are building an API based integration"
},
"AUTO_RESOLVE": {
- "TITLE": "Auto-resolve conversations",
- "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.",
+ "TITLE": "Zgjidhje automatike e bisedave",
+ "NOTE": "Ky konfigurim ju lejon ta zgjidhni automatikisht bisedën pas një periudhe të caktuar pasiviteti.",
"DURATION": {
- "LABEL": "Inactivity duration",
- "HELP": "Time period of inactivity after which conversation is auto-resolved",
+ "LABEL": "Kohëzgjatja e pasivitetit",
+ "HELP": "Periudha e pasivitetit pas së cilës biseda zgjidhet automatikisht",
"PLACEHOLDER": "30",
- "ERROR": "Auto resolve duration should be between 10 minutes and 999 days",
+ "ERROR": "Kohëzgjatja e zgjidhjes automatike duhet të jetë ndërmjet 10 minutave dhe 999 ditëve",
"API": {
- "SUCCESS": "Auto resolve settings updated successfully",
- "ERROR": "Failed to update auto resolve settings"
+ "SUCCESS": "Cilësimet e zgjidhjes automatike u përditësuan me sukses",
+ "ERROR": "Dështoi përditësimi i cilësimeve të zgjidhjes automatike"
}
},
"MESSAGE": {
- "LABEL": "Custom auto-resolution message",
- "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity",
- "HELP": "Message sent to the customer after conversation is auto-resolved"
+ "LABEL": "Mesazh i personalizuar për zgjidhjen automatike",
+ "PLACEHOLDER": "Biseda u shënua si e zgjidhur nga sistemi për shkak të 15 ditëve pasiviteti",
+ "HELP": "Mesazh i dërguar klientit pasi biseda të jetë zgjidhur automatikisht"
},
- "PREFERENCES": "Preferences",
+ "PREFERENCES": "Preferencat",
"LABEL": {
- "LABEL": "Add label after auto-resolution",
- "PLACEHOLDER": "Select a label"
+ "LABEL": "Shto etiketë pas zgjidhjes automatike",
+ "PLACEHOLDER": "Zgjidhni një etiketë"
},
"IGNORE_WAITING": {
- "LABEL": "Skip conversations waiting for agent’s reply"
+ "LABEL": "Anashkalo bisedat që presin përgjigjen e agjentit"
},
- "UPDATE_BUTTON": "Save Changes"
+ "UPDATE_BUTTON": "Ruaj ndryshimet"
},
"NAME": {
"LABEL": "Account name",
@@ -93,30 +93,30 @@
"ERROR": ""
},
"AUTO_RESOLVE_IGNORE_WAITING": {
- "LABEL": "Exclude unattended conversations",
- "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply."
+ "LABEL": "Përjashto bisedat e patrajtuara",
+ "HELP": "Kur të aktivizohet, sistemi do të anashkalojë zgjidhjen e bisedave që ende po presin përgjigjen e një agjenti."
},
"AUDIO_TRANSCRIPTION": {
- "TITLE": "Transcribe Audio Messages",
- "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.",
+ "TITLE": "Transkripto mesazhet audio",
+ "NOTE": "Transkriptoni automatikisht mesazhet audio në biseda. Gjeneroni një transkript në tekst sa herë që dërgohet ose merret një mesazh audio dhe shfaqeni pranë mesazhit.",
"API": {
- "SUCCESS": "Audio transcription setting updated successfully",
- "ERROR": "Failed to update audio transcription setting"
+ "SUCCESS": "Cilësimi i transkriptimit audio u përditësua me sukses",
+ "ERROR": "Dështoi përditësimi i cilësimit të transkriptimit audio"
}
},
"AUTO_RESOLVE_DURATION": {
- "LABEL": "Inactivity duration for resolution",
- "HELP": "Duration after a conversation should auto resolve if there is no activity",
+ "LABEL": "Kohëzgjatja e pasivitetit për zgjidhje",
+ "HELP": "Kohëzgjatja pas së cilës një bisedë duhet të zgjidhet automatikisht nëse nuk ka aktivitet",
"PLACEHOLDER": "30",
- "ERROR": "Auto resolve duration should be between 10 minutes and 999 days",
+ "ERROR": "Kohëzgjatja e zgjidhjes automatike duhet të jetë ndërmjet 10 minutave dhe 999 ditëve",
"API": {
- "SUCCESS": "Auto resolve settings updated successfully",
- "ERROR": "Failed to update auto resolve settings"
+ "SUCCESS": "Cilësimet e zgjidhjes automatike u përditësuan me sukses",
+ "ERROR": "Dështoi përditësimi i cilësimeve të zgjidhjes automatike"
},
"UPDATE_BUTTON": "Update",
- "MESSAGE_LABEL": "Custom resolution message",
- "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity",
- "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity."
+ "MESSAGE_LABEL": "Mesazh i personalizuar për zgjidhje",
+ "MESSAGE_PLACEHOLDER": "Biseda u shënua si e zgjidhur nga sistemi për shkak të 15 ditëve pasiviteti",
+ "MESSAGE_HELP": "Ky mesazh i dërgohet klientit kur një bisedë zgjidhet automatikisht nga sistemi për shkak të pasivitetit"
},
"FEATURES": {
"INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.",
@@ -126,7 +126,7 @@
"UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.",
"LEARN_MORE": "Learn more",
"PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot",
- "UPGRADE": "Upgrade to continue using Chatwoot",
+ "UPGRADE": "Përmirësoni planin për të vazhduar përdorimin e Chatwoot.",
"LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot",
"OPEN_BILLING": "Open billing"
},
@@ -134,7 +134,7 @@
"MULTISELECT": {
"ENTER_TO_SELECT": "Press enter to select",
"ENTER_TO_REMOVE": "Press enter to remove",
- "NO_OPTIONS": "List is empty",
+ "NO_OPTIONS": "Lista është bosh",
"SELECT_ONE": "Select one",
"SELECT": "Select"
}
diff --git a/app/javascript/dashboard/i18n/locale/sq/helpCenter.json b/app/javascript/dashboard/i18n/locale/sq/helpCenter.json
index 7a4de594e..591591e0b 100644
--- a/app/javascript/dashboard/i18n/locale/sq/helpCenter.json
+++ b/app/javascript/dashboard/i18n/locale/sq/helpCenter.json
@@ -160,8 +160,8 @@
},
"SEND_CNAME_INSTRUCTIONS": {
"API": {
- "SUCCESS_MESSAGE": "CNAME instructions sent successfully",
- "ERROR_MESSAGE": "Error while sending CNAME instructions"
+ "SUCCESS_MESSAGE": "Udhëzimet për CNAME u dërguan me sukses",
+ "ERROR_MESSAGE": "Gabim gjatë dërgimit të udhëzimeve për CNAME"
}
}
},
@@ -703,7 +703,7 @@
"LABEL": "Slug",
"PLACEHOLDER": "user-guide",
"ERROR": "Slug is required",
- "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide"
+ "FORMAT_ERROR": "Ju lutemi shkruani një slug të vlefshëm, p.sh.: user-guide"
}
},
"PORTAL_SETTINGS": {
@@ -732,7 +732,7 @@
"HOME_PAGE_LINK": {
"LABEL": "Home page link",
"PLACEHOLDER": "Portal home page link",
- "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'."
+ "ERROR": "Shkruani një URL të vlefshme. Lidhja e faqes kryesore duhet të fillojë me 'http://' ose 'https://'."
},
"SLUG": {
"LABEL": "Slug",
@@ -753,14 +753,14 @@
"HEADER": "Custom domain",
"LABEL": "Custom domain:",
"DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.",
- "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.",
+ "STATUS_DESCRIPTION": "Portali juaj i personalizuar do të fillojë të funksionojë sapo të verifikohet.",
"PLACEHOLDER": "Portal custom domain",
"EDIT_BUTTON": "Edit",
"ADD_BUTTON": "Add custom domain",
"STATUS": {
"LIVE": "Live",
- "PENDING": "Awaiting verification",
- "ERROR": "Verification failed"
+ "PENDING": "Në pritje të verifikimit",
+ "ERROR": "Verifikimi dështoi"
},
"DIALOG": {
"ADD_HEADER": "Add custom domain",
@@ -770,17 +770,17 @@
"LABEL": "Custom domain",
"PLACEHOLDER": "Portal custom domain",
"ERROR": "Custom domain is required",
- "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com"
+ "FORMAT_ERROR": "Ju lutemi shkruani një URL të vlefshme të domain-it, p.sh. docs.yourdomain.com"
},
"DNS_CONFIGURATION_DIALOG": {
"HEADER": "DNS configuration",
"DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help",
- "COPY": "Successfully copied CNAME",
+ "COPY": "CNAME u kopjua me sukses",
"SEND_INSTRUCTIONS": {
- "HEADER": "Send instructions",
- "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.",
- "PLACEHOLDER": "Enter their email",
- "ERROR": "Enter a valid email address",
+ "HEADER": "Dërgo udhëzimet",
+ "DESCRIPTION": "Nëse preferoni që dikush nga ekipi juaj i zhvillimit ta trajtojë këtë hap, mund të shkruani adresën e emailit më poshtë dhe ne do t'u dërgojmë udhëzimet e nevojshme.",
+ "PLACEHOLDER": "Shkruani emailin e tyre",
+ "ERROR": "Shkruani një adresë emaili të vlefshme",
"SEND_BUTTON": "Send"
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sq/inbox.json b/app/javascript/dashboard/i18n/locale/sq/inbox.json
index 385e9e4ce..cfcf14531 100644
--- a/app/javascript/dashboard/i18n/locale/sq/inbox.json
+++ b/app/javascript/dashboard/i18n/locale/sq/inbox.json
@@ -74,21 +74,21 @@
"DELETE_ALL_READ": "All read notifications deleted"
},
"REAUTHORIZE": {
- "TITLE": "Reauthorization Required",
- "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.",
- "BUTTON_TEXT": "Reconnect WhatsApp",
- "LOADING_FACEBOOK": "Loading Facebook SDK...",
- "SUCCESS": "WhatsApp reconnected successfully",
- "ERROR": "Failed to reconnect WhatsApp. Please try again.",
- "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.",
- "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.",
- "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.",
- "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.",
+ "TITLE": "Kërkohet riautorizim",
+ "DESCRIPTION": "Lidhja juaj me WhatsApp ka skaduar. Ju lutemi, lidhuni sërish për të vazhduar marrjen dhe dërgimin e mesazheve.",
+ "BUTTON_TEXT": "Rilidheni WhatsApp-in",
+ "LOADING_FACEBOOK": "Po ngarkohet Facebook SDK...",
+ "SUCCESS": "WhatsApp u rilidh me sukses",
+ "ERROR": "Dështoi rilidhja e WhatsApp-it. Ju lutemi, provoni sërish.",
+ "WHATSAPP_APP_ID_MISSING": "ID-ja e aplikacionit të WhatsApp-it nuk është konfiguruar. Ju lutemi, kontaktoni administratorin tuaj.",
+ "WHATSAPP_CONFIG_ID_MISSING": "ID-ja e konfigurimit të WhatsApp-it nuk është konfiguruar. Ju lutemi, kontaktoni administratorin tuaj.",
+ "CONFIGURATION_ERROR": "Ndodhi një gabim konfigurimi gjatë riautorizimit.",
+ "FACEBOOK_LOAD_ERROR": "Dështoi ngarkimi i SDK-së së Facebook-ut. Ju lutemi, provoni sërish.",
"TROUBLESHOOTING": {
- "TITLE": "Troubleshooting",
- "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site",
- "COOKIES": "Third-party cookies must be enabled",
- "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account"
+ "TITLE": "Zgjidhja e problemeve",
+ "POPUP_BLOCKED": "Sigurohuni që dritaret kërcyese të jenë të lejuara për këtë faqe",
+ "COOKIES": "cookie-t e palëve të treta duhet të jenë të aktivizuara",
+ "ADMIN_ACCESS": "Ju nevojitet akses si administrator te llogaria e biznesit në WhatsApp"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sq/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sq/inboxMgmt.json
index 3c0769793..255f261b8 100644
--- a/app/javascript/dashboard/i18n/locale/sq/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sq/inboxMgmt.json
@@ -51,7 +51,7 @@
"CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile",
"HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ",
"ERROR_MESSAGE": "There was an error connecting to Instagram, please try again",
- "ERROR_AUTH": "There was an error connecting to Instagram, please try again",
+ "ERROR_AUTH": "Ndodhi një gabim gjatë lidhjes me Instagram, ju lutemi provoni përsëri",
"NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.",
"DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore."
},
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
@@ -615,14 +616,14 @@
"WHATSAPP_CONNECT_ERROR": "Failed to connect to WhatsApp Business. Please try again.",
"WHATSAPP_RECONFIGURE_SUCCESS": "Successfully reconfigured WhatsApp Business!",
"WHATSAPP_RECONFIGURE_ERROR": "Failed to reconfigure WhatsApp Business. Please try again.",
- "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.",
- "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.",
+ "WHATSAPP_APP_ID_MISSING": "ID-ja e aplikacionit të WhatsApp-it nuk është konfiguruar. Ju lutemi, kontaktoni administratorin tuaj.",
+ "WHATSAPP_CONFIG_ID_MISSING": "ID-ja e konfigurimit të WhatsApp-it nuk është konfiguruar. Ju lutemi, kontaktoni administratorin tuaj.",
"WHATSAPP_LOGIN_CANCELLED": "WhatsApp login was cancelled. Please try again.",
"WHATSAPP_WEBHOOK_TITLE": "Webhook Verification Token",
"WHATSAPP_WEBHOOK_SUBHEADER": "This token is used to verify the authenticity of the webhook endpoint.",
"WHATSAPP_TEMPLATES_SYNC_TITLE": "Sync Templates",
"WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.",
- "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates",
+ "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sinkronizo shabllonet",
"WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.",
"UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings"
},
diff --git a/app/javascript/dashboard/i18n/locale/sq/integrations.json b/app/javascript/dashboard/i18n/locale/sq/integrations.json
index 3fe43940a..7f988c09f 100644
--- a/app/javascript/dashboard/i18n/locale/sq/integrations.json
+++ b/app/javascript/dashboard/i18n/locale/sq/integrations.json
@@ -466,7 +466,7 @@
"PLACEHOLDER": "Enter resolution message"
},
"INSTRUCTIONS": {
- "LABEL": "Instructions",
+ "LABEL": "Udhëzime",
"PLACEHOLDER": "Enter instructions for the assistant"
},
"FEATURES": {
@@ -492,7 +492,7 @@
},
"SYSTEM_SETTINGS": {
"TITLE": "System settings",
- "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human."
+ "DESCRIPTION": "Përshtatni se çfarë thotë asistenti kur përfundon një bisedë ose kur e transferon te një agjent."
},
"CONTROL_ITEMS": {
"TITLE": "The Fun Stuff",
@@ -527,15 +527,15 @@
}
},
"GUARDRAILS": {
- "TITLE": "Guardrails",
- "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.",
+ "TITLE": "Kufizime",
+ "DESCRIPTION": "I mban gjërat në vijë—vetëm llojet e pyetjeve që dëshironi që asistenti juaj t’u përgjigjet, asgjë e ndaluar apo jashtë teme.",
"BREADCRUMB": {
- "TITLE": "Guardrails"
+ "TITLE": "Kufizime"
},
"BULK_ACTION": {
"SELECTED": "{count} item selected | {count} items selected",
- "SELECT_ALL": "Select all ({count})",
- "UNSELECT_ALL": "Unselect all ({count})",
+ "SELECT_ALL": "Zgjidh të gjitha ({count})",
+ "UNSELECT_ALL": "Hiq përzgjedhjen nga të gjitha ({count})",
"BULK_DELETE_BUTTON": "Delete"
},
"ADD": {
@@ -550,7 +550,7 @@
"TITLE": "Add a guardrail",
"CREATE": "Create",
"CANCEL": "Cancel",
- "PLACEHOLDER": "Type in another guardrail...",
+ "PLACEHOLDER": "Shkruani një kufizim tjetër...",
"TEST_ALL": "Test all"
}
},
@@ -576,30 +576,30 @@
},
"RESPONSE_GUIDELINES": {
"TITLE": "Response Guidelines",
- "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?",
+ "DESCRIPTION": "Stili dhe struktura e përgjigjeve të asistentit tuaj—të qarta dhe miqësore? Të shkurtra dhe koncize? Të detajuara dhe formale?",
"BREADCRUMB": {
- "TITLE": "Response Guidelines"
+ "TITLE": "Udhëzime për përgjigjet"
},
"BULK_ACTION": {
- "SELECTED": "{count} item selected | {count} items selected",
- "SELECT_ALL": "Select all ({count})",
- "UNSELECT_ALL": "Unselect all ({count})",
+ "SELECTED": "{count, plural, one {{count} element i përzgjedhur} other {{count} elemente të përzgjedhura}}",
+ "SELECT_ALL": "Zgjidh të gjitha ({count})",
+ "UNSELECT_ALL": "Hiq përzgjedhjen nga të gjitha ({count})",
"BULK_DELETE_BUTTON": "Delete"
},
"ADD": {
"SUGGESTED": {
"TITLE": "Example response guidelines",
- "ADD": "Add all",
- "ADD_SINGLE": "Add this",
- "SAVE": "Add and save (↵)",
+ "ADD": "Shto të gjitha",
+ "ADD_SINGLE": "Shto këtë",
+ "SAVE": "Shto dhe ruaj (↵)",
"PLACEHOLDER": "Type in another response guideline..."
},
"NEW": {
"TITLE": "Add a response guideline",
"CREATE": "Create",
"CANCEL": "Cancel",
- "PLACEHOLDER": "Type in another response guideline...",
- "TEST_ALL": "Test all"
+ "PLACEHOLDER": "Shkruani një udhëzim tjetër për përgjigjet...",
+ "TEST_ALL": "Testo të gjitha"
}
},
"LIST": {
@@ -623,22 +623,22 @@
}
},
"SCENARIOS": {
- "TITLE": "Scenarios",
- "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”",
+ "TITLE": "Skenarë",
+ "DESCRIPTION": "Jepini asistentit pak kontekst—si p.sh. “çfarë të bëjë kur një përdorues ngec” ose “si të veprojë gjatë një kërkese për rimbursim”.",
"BREADCRUMB": {
- "TITLE": "Scenarios"
+ "TITLE": "Skenarë"
},
"BULK_ACTION": {
- "SELECTED": "{count} item selected | {count} items selected",
- "SELECT_ALL": "Select all ({count})",
- "UNSELECT_ALL": "Unselect all ({count})",
+ "SELECTED": "{count, plural, one {{count} element i përzgjedhur} other {{count} elemente të përzgjedhura}}",
+ "SELECT_ALL": "Zgjidh të gjitha ({count})",
+ "UNSELECT_ALL": "Hiq përzgjedhjen nga të gjitha ({count})",
"BULK_DELETE_BUTTON": "Delete"
},
"ADD": {
"SUGGESTED": {
"TITLE": "Example scenarios",
- "ADD": "Add all",
- "ADD_SINGLE": "Add this",
+ "ADD": "Shto të gjitha",
+ "ADD_SINGLE": "Shto këtë",
"TOOLS_USED": "Tools used :"
},
"NEW": {
diff --git a/app/javascript/dashboard/i18n/locale/sq/macros.json b/app/javascript/dashboard/i18n/locale/sq/macros.json
index fcb409f34..33596e353 100644
--- a/app/javascript/dashboard/i18n/locale/sq/macros.json
+++ b/app/javascript/dashboard/i18n/locale/sq/macros.json
@@ -85,20 +85,20 @@
"ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required"
},
"ACTIONS": {
- "ASSIGN_TEAM": "Assign a Team",
- "ASSIGN_AGENT": "Assign an Agent",
- "ADD_LABEL": "Add a Label",
- "REMOVE_LABEL": "Remove a Label",
- "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team",
- "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript",
- "MUTE_CONVERSATION": "Mute Conversation",
+ "ASSIGN_TEAM": "Cakto një ekip",
+ "ASSIGN_AGENT": "Cakto një agjent",
+ "ADD_LABEL": "Shto një etiketë",
+ "REMOVE_LABEL": "Hiq një etiketë",
+ "REMOVE_ASSIGNED_TEAM": "Hiq ekipin e caktuar",
+ "SEND_EMAIL_TRANSCRIPT": "Dërgo një transkript me email",
+ "MUTE_CONVERSATION": "Heshto bisedën",
"SNOOZE_CONVERSATION": "Snooze Conversation",
"RESOLVE_CONVERSATION": "Resolve Conversation",
- "SEND_ATTACHMENT": "Send Attachment",
- "SEND_MESSAGE": "Send a Message",
+ "SEND_ATTACHMENT": "Dërgo një bashkëngjitje",
+ "SEND_MESSAGE": "Dërgo një mesazh",
"CHANGE_PRIORITY": "Change Priority",
- "ADD_PRIVATE_NOTE": "Add a Private Note",
- "SEND_WEBHOOK_EVENT": "Send Webhook Event"
+ "ADD_PRIVATE_NOTE": "Shto një shënim privat",
+ "SEND_WEBHOOK_EVENT": "Dërgo një ngjarje webhook"
},
"PRIORITY_TYPES": {
"NONE": "None",
diff --git a/app/javascript/dashboard/i18n/locale/sq/report.json b/app/javascript/dashboard/i18n/locale/sq/report.json
index 7c42fdfba..6a19b74f5 100644
--- a/app/javascript/dashboard/i18n/locale/sq/report.json
+++ b/app/javascript/dashboard/i18n/locale/sq/report.json
@@ -193,7 +193,7 @@
},
"LABEL_REPORTS": {
"HEADER": "Labels Overview",
- "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.",
+ "DESCRIPTION": "Ndiqni performancën e etiketave me metrika kyçe, përfshirë bisedat, kohët e përgjigjes, kohët e zgjidhjes dhe rastet e zgjidhura. Klikoni një emër etikete për analiza të detajuara.",
"LOADING_CHART": "Loading chart data...",
"NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.",
"DOWNLOAD_LABEL_REPORTS": "Download label reports",
diff --git a/app/javascript/dashboard/i18n/locale/sq/settings.json b/app/javascript/dashboard/i18n/locale/sq/settings.json
index d411f2d64..705e75d37 100644
--- a/app/javascript/dashboard/i18n/locale/sq/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sq/settings.json
@@ -78,10 +78,10 @@
"NOTE": "This token can be used if you are building an API based integration",
"COPY": "Copy",
"RESET": "Reset",
- "CONFIRM_RESET": "Are you sure?",
- "CONFIRM_HINT": "Click again to confirm",
- "RESET_SUCCESS": "Access token regenerated successfully",
- "RESET_ERROR": "Unable to regenerate access token. Please try again"
+ "CONFIRM_RESET": "A jeni i sigurt?",
+ "CONFIRM_HINT": "Klikoni përsëri për të konfirmuar",
+ "RESET_SUCCESS": "Tokeni i aksesit u rigjenerua me sukses",
+ "RESET_ERROR": "Nuk mund të rigjenerohet tokeni i aksesit. Ju lutemi provoni përsëri"
},
"AUDIO_NOTIFICATIONS_SECTION": {
"TITLE": "Audio Alerts",
@@ -191,7 +191,7 @@
},
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again",
- "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user"
+ "IMPERSONATING_ERROR": "Nuk mund të ndryshoni disponueshmërinë ndërsa po veproni si një përdorues"
},
"EMAIL": {
"LABEL": "Your email address",
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Lista e ndryshimeve",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/sq/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/sq/whatsappTemplates.json
index 5f53faaa8..43cfeea51 100644
--- a/app/javascript/dashboard/i18n/locale/sq/whatsappTemplates.json
+++ b/app/javascript/dashboard/i18n/locale/sq/whatsappTemplates.json
@@ -3,22 +3,22 @@
"MODAL": {
"TITLE": "Whatsapp Templates",
"SUBTITLE": "Select the whatsapp template you want to send",
- "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}"
+ "TEMPLATE_SELECTED_SUBTITLE": "Konfiguro shabllonin: {templateName}"
},
"PICKER": {
"SEARCH_PLACEHOLDER": "Search Templates",
"NO_TEMPLATES_FOUND": "No templates found for",
- "HEADER": "Header",
- "BODY": "Body",
- "FOOTER": "Footer",
- "BUTTONS": "Buttons",
+ "HEADER": "Krye",
+ "BODY": "Trup",
+ "FOOTER": "Fund",
+ "BUTTONS": "Butona",
"CATEGORY": "Category",
- "MEDIA_CONTENT": "Media Content",
- "MEDIA_CONTENT_FALLBACK": "media content",
- "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.",
- "REFRESH_BUTTON": "Refresh templates",
- "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.",
- "REFRESH_ERROR": "Failed to refresh templates. Please try again.",
+ "MEDIA_CONTENT": "Përmbajtje mediatike",
+ "MEDIA_CONTENT_FALLBACK": "përmbajtje mediatike",
+ "NO_TEMPLATES_AVAILABLE": "Nuk ka shabllone WhatsApp të disponueshme. Klikoni Rifresko për të sinkronizuar shabllonet nga WhatsApp.",
+ "REFRESH_BUTTON": "Rifresko shabllonet",
+ "REFRESH_SUCCESS": "Rifreskimi i shablloneve u nis. Mund të duhen disa minuta për t'u përditësuar.",
+ "REFRESH_ERROR": "Dështoi rifreskimi i shablloneve. Ju lutemi, provoni përsëri.",
"LABELS": {
"LANGUAGE": "Language",
"TEMPLATE_BODY": "Template Body",
@@ -33,14 +33,14 @@
"GO_BACK_LABEL": "Go Back",
"SEND_MESSAGE_LABEL": "Send Message",
"FORM_ERROR_MESSAGE": "Please fill all variables before sending",
- "MEDIA_HEADER_LABEL": "{type} Header",
- "OTP_CODE": "Enter 4-8 digit OTP",
- "EXPIRY_MINUTES": "Enter expiry minutes",
- "BUTTON_PARAMETERS": "Button Parameters",
- "BUTTON_LABEL": "Button {index}",
- "COUPON_CODE": "Enter coupon code (max 15 chars)",
- "MEDIA_URL_LABEL": "Enter {type} URL",
- "BUTTON_PARAMETER": "Enter button parameter"
+ "MEDIA_HEADER_LABEL": "Krye {type}",
+ "OTP_CODE": "Futni kodin OTP me 4-8 shifra",
+ "EXPIRY_MINUTES": "Futni minutat e skadimit",
+ "BUTTON_PARAMETERS": "Parametrat e butonit",
+ "BUTTON_LABEL": "Butoni {index}",
+ "COUPON_CODE": "Futni kodin e kuponit (maks 15 karaktere)",
+ "MEDIA_URL_LABEL": "Futni URL-në e {type}",
+ "BUTTON_PARAMETER": "Futni parametrin e butonit"
}
}
}
diff --git a/app/javascript/dashboard/i18n/locale/sr/contact.json b/app/javascript/dashboard/i18n/locale/sr/contact.json
index bbb3e19d0..64d2afe4a 100644
--- a/app/javascript/dashboard/i18n/locale/sr/contact.json
+++ b/app/javascript/dashboard/i18n/locale/sr/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP adresa",
"CREATED_AT_LABEL": "Kreirano",
"NEW_MESSAGE": "Nova poruka",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Nema ranijih razgovora povezanih sa ovim kontaktom.",
"TITLE": "Prethodni razgovor"
diff --git a/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json
index 97015ee59..58b7f46e9 100644
--- a/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/sr/settings.json b/app/javascript/dashboard/i18n/locale/sr/settings.json
index 55fa96a8c..d83baf157 100644
--- a/app/javascript/dashboard/i18n/locale/sr/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sr/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/sv/contact.json b/app/javascript/dashboard/i18n/locale/sv/contact.json
index 0937bf565..7320ebb32 100644
--- a/app/javascript/dashboard/i18n/locale/sv/contact.json
+++ b/app/javascript/dashboard/i18n/locale/sv/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP-adress",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "Nytt meddelande",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Det finns inga tidigare konversationer kopplade till denna kontakt.",
"TITLE": "Tidigare konversationer"
diff --git a/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json
index a600dcf2e..7f0708845 100644
--- a/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/sv/settings.json b/app/javascript/dashboard/i18n/locale/sv/settings.json
index 77aded190..e80207056 100644
--- a/app/javascript/dashboard/i18n/locale/sv/settings.json
+++ b/app/javascript/dashboard/i18n/locale/sv/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ta/contact.json b/app/javascript/dashboard/i18n/locale/ta/contact.json
index d1a3a5dd3..bd64d9944 100644
--- a/app/javascript/dashboard/i18n/locale/ta/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ta/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "இந்த தொடர்புடன் முந்தைய உரையாடல்கள் எதுவும் இல்லை.",
"TITLE": "முந்தைய உரையாடல்கள்"
diff --git a/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json
index f554e432c..43a5c0f8f 100644
--- a/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ta/settings.json b/app/javascript/dashboard/i18n/locale/ta/settings.json
index 52acfe6cc..fa1caa4e3 100644
--- a/app/javascript/dashboard/i18n/locale/ta/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ta/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/th/contact.json b/app/javascript/dashboard/i18n/locale/th/contact.json
index 292e8ccf9..9a9dd4520 100644
--- a/app/javascript/dashboard/i18n/locale/th/contact.json
+++ b/app/javascript/dashboard/i18n/locale/th/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "ที่อยู่ไอพี",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "ข้อความใหม่",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "ไม่มีการสนทนาก่อนหน้านี้ที่เชื่อมโยงกับผู้ติดต่อนี้",
"TITLE": "การสนทนาก่อนหน้า"
diff --git a/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json
index e41aab615..260dca517 100644
--- a/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/th/settings.json b/app/javascript/dashboard/i18n/locale/th/settings.json
index 2bdb9c88a..67004d623 100644
--- a/app/javascript/dashboard/i18n/locale/th/settings.json
+++ b/app/javascript/dashboard/i18n/locale/th/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/tl/contact.json b/app/javascript/dashboard/i18n/locale/tl/contact.json
index b4d640f7f..4dd081bd4 100644
--- a/app/javascript/dashboard/i18n/locale/tl/contact.json
+++ b/app/javascript/dashboard/i18n/locale/tl/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/tl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/tl/inboxMgmt.json
index 4006212a3..6f44ec046 100644
--- a/app/javascript/dashboard/i18n/locale/tl/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/tl/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/tl/settings.json b/app/javascript/dashboard/i18n/locale/tl/settings.json
index fde198c92..d547538db 100644
--- a/app/javascript/dashboard/i18n/locale/tl/settings.json
+++ b/app/javascript/dashboard/i18n/locale/tl/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/tr/contact.json b/app/javascript/dashboard/i18n/locale/tr/contact.json
index ec2724c03..59d0d9d66 100644
--- a/app/javascript/dashboard/i18n/locale/tr/contact.json
+++ b/app/javascript/dashboard/i18n/locale/tr/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Adresi",
"CREATED_AT_LABEL": "Oluşturuldu",
"NEW_MESSAGE": "Yeni Mesaj",
+ "CALL": "Ara",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Bu kişiyle ilişkilendirilmiş önceki görüşme yok.",
"TITLE": "Önceki Sohbetler"
diff --git a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json
index 53c38eae1..c29f24673 100644
--- a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Anahtar Sırrı",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/tr/settings.json b/app/javascript/dashboard/i18n/locale/tr/settings.json
index 5b7c546ef..535a59849 100644
--- a/app/javascript/dashboard/i18n/locale/tr/settings.json
+++ b/app/javascript/dashboard/i18n/locale/tr/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/uk/contact.json b/app/javascript/dashboard/i18n/locale/uk/contact.json
index ba4239dcf..54bc682c6 100644
--- a/app/javascript/dashboard/i18n/locale/uk/contact.json
+++ b/app/javascript/dashboard/i18n/locale/uk/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP-адреса",
"CREATED_AT_LABEL": "Створено",
"NEW_MESSAGE": "Нове повідомлення",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Не було попередніх бесід, пов'язаних з цим контактом.",
"TITLE": "Попередні бесіди"
diff --git a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json
index d57c34cf2..aa7d8f5a5 100644
--- a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "Секретний ключ API",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/uk/settings.json b/app/javascript/dashboard/i18n/locale/uk/settings.json
index 2512506a2..6d311258a 100644
--- a/app/javascript/dashboard/i18n/locale/uk/settings.json
+++ b/app/javascript/dashboard/i18n/locale/uk/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ur/contact.json b/app/javascript/dashboard/i18n/locale/ur/contact.json
index 249c1b013..b87865ca0 100644
--- a/app/javascript/dashboard/i18n/locale/ur/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ur/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "آئی پی ایڈریس",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "نیا پیغام",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "اس کانٹیکٹ سے وابستہ کوئی پچھلی بات چیت موجود نہیں ہے۔.",
"TITLE": "پچھلی بات چیت"
diff --git a/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json
index b8f615d8a..1e0d7a922 100644
--- a/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ur/settings.json b/app/javascript/dashboard/i18n/locale/ur/settings.json
index cf3660791..326f39c98 100644
--- a/app/javascript/dashboard/i18n/locale/ur/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ur/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/contact.json b/app/javascript/dashboard/i18n/locale/ur_IN/contact.json
index 38489d630..735489a08 100644
--- a/app/javascript/dashboard/i18n/locale/ur_IN/contact.json
+++ b/app/javascript/dashboard/i18n/locale/ur_IN/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP Address",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "New message",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json
index a81205fe7..43dbe3e65 100644
--- a/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/settings.json b/app/javascript/dashboard/i18n/locale/ur_IN/settings.json
index 469dfe4ac..98c3f559b 100644
--- a/app/javascript/dashboard/i18n/locale/ur_IN/settings.json
+++ b/app/javascript/dashboard/i18n/locale/ur_IN/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/vi/contact.json b/app/javascript/dashboard/i18n/locale/vi/contact.json
index 384923580..621f31671 100644
--- a/app/javascript/dashboard/i18n/locale/vi/contact.json
+++ b/app/javascript/dashboard/i18n/locale/vi/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "Địa chỉ IP",
"CREATED_AT_LABEL": "Đã tạo",
"NEW_MESSAGE": "Tin nhắn mới",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "Không có cuộc trò chuyện trước đó được liên kết với liên hệ này.",
"TITLE": "Cuộc trò chuyện trước đó"
diff --git a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json
index be06fe575..3d660c2b6 100644
--- a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/vi/settings.json b/app/javascript/dashboard/i18n/locale/vi/settings.json
index c817c6767..6a3f631c7 100644
--- a/app/javascript/dashboard/i18n/locale/vi/settings.json
+++ b/app/javascript/dashboard/i18n/locale/vi/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "Change appearance",
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "Log out"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/contact.json b/app/javascript/dashboard/i18n/locale/zh_CN/contact.json
index b233f798b..70834c650 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/contact.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP 地址",
"CREATED_AT_LABEL": "创建时间",
"NEW_MESSAGE": "新消息",
+ "CALL": "呼叫",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "此联系人没有关联到以前的会话。",
"TITLE": "上一次对话"
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json
index 9469db1f9..8abeeb053 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API 密钥密码",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/settings.json b/app/javascript/dashboard/i18n/locale/zh_CN/settings.json
index f45f296c9..843f2f7a2 100644
--- a/app/javascript/dashboard/i18n/locale/zh_CN/settings.json
+++ b/app/javascript/dashboard/i18n/locale/zh_CN/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "更改外观",
"SUPER_ADMIN_CONSOLE": "超级管理员控制台",
"DOCS": "阅读文档",
+ "CHANGELOG": "Changelog",
"LOGOUT": "注销"
},
"APP_GLOBAL": {
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/contact.json b/app/javascript/dashboard/i18n/locale/zh_TW/contact.json
index bdde30a21..9a0bbc05d 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/contact.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/contact.json
@@ -17,6 +17,11 @@
"IP_ADDRESS": "IP 位置",
"CREATED_AT_LABEL": "Created",
"NEW_MESSAGE": "新訊息",
+ "CALL": "Call",
+ "CALL_UNDER_DEVELOPMENT": "Calling is under development",
+ "VOICE_INBOX_PICKER": {
+ "TITLE": "Choose a voice inbox"
+ },
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "此聯絡人没有關聯到以前的對話。",
"TITLE": "上一次對話"
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json
index 65f73f500..759e3639d 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json
@@ -330,13 +330,14 @@
"LABEL": "API Key Secret",
"PLACEHOLDER": "Enter your Twilio API Key Secret",
"REQUIRED": "API Key Secret is required"
- },
- "TWIML_APP_SID": {
- "LABEL": "TwiML App SID",
- "PLACEHOLDER": "Enter your Twilio TwiML App SID (starts with AP)",
- "REQUIRED": "TwiML App SID is required"
}
},
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
"SUBMIT_BUTTON": "Create Voice Channel",
"API": {
"ERROR_MESSAGE": "We were not able to create the voice channel"
diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
index f34b2d5aa..094af1d7c 100644
--- a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
+++ b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json
@@ -226,6 +226,7 @@
"APPEARANCE": "切換風格",
"SUPER_ADMIN_CONSOLE": "系統管理員後台",
"DOCS": "Read documentation",
+ "CHANGELOG": "Changelog",
"LOGOUT": "退出登入"
},
"APP_GLOBAL": {
diff --git a/app/javascript/widget/i18n/locale/am.json b/app/javascript/widget/i18n/locale/am.json
index 4f244c566..c3d6ddfc1 100644
--- a/app/javascript/widget/i18n/locale/am.json
+++ b/app/javascript/widget/i18n/locale/am.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/ar.json b/app/javascript/widget/i18n/locale/ar.json
index 21b1c072e..110fadcd1 100644
--- a/app/javascript/widget/i18n/locale/ar.json
+++ b/app/javascript/widget/i18n/locale/ar.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "متواجدون لخدمتك",
- "OFFLINE": "نحن بعيدون في الوقت الحالي"
+ "OFFLINE": "نحن بعيدون في الوقت الحالي",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "عادة نقوم بالرد خلال بضع دقائق",
"IN_A_FEW_HOURS": "عادة نقوم بالرد خلال بضع ساعات",
"IN_A_DAY": "عادة نقوم بالرد خلال يوم واحد",
- "BACK_IN": "سوف نعود إلى الإنترنت"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/az.json b/app/javascript/widget/i18n/locale/az.json
index 4f244c566..c3d6ddfc1 100644
--- a/app/javascript/widget/i18n/locale/az.json
+++ b/app/javascript/widget/i18n/locale/az.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/bg.json b/app/javascript/widget/i18n/locale/bg.json
index 1fd4bc35d..c26a30565 100644
--- a/app/javascript/widget/i18n/locale/bg.json
+++ b/app/javascript/widget/i18n/locale/bg.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "На линия сме",
- "OFFLINE": "В момента не сме на линия"
+ "OFFLINE": "В момента не сме на линия",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Обикновено отговаряме до няколко минути",
"IN_A_FEW_HOURS": "Обикновено отговаряме до няколко часа",
"IN_A_DAY": "Обикновено отговаряме до един ден",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/ca.json b/app/javascript/widget/i18n/locale/ca.json
index 6ae69fcb6..ce3b99da7 100644
--- a/app/javascript/widget/i18n/locale/ca.json
+++ b/app/javascript/widget/i18n/locale/ca.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Estem en línia",
- "OFFLINE": "Estem fora en aquest moment"
+ "OFFLINE": "Estem fora en aquest moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Normalment responem en pocs minuts",
"IN_A_FEW_HOURS": "Normalment responem en poques hores",
"IN_A_DAY": "Normalment respon en un dia",
- "BACK_IN": "Tornarem a estar en línia"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Diumenge",
diff --git a/app/javascript/widget/i18n/locale/cs.json b/app/javascript/widget/i18n/locale/cs.json
index adefb1eb4..4e7234d59 100644
--- a/app/javascript/widget/i18n/locale/cs.json
+++ b/app/javascript/widget/i18n/locale/cs.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Jsme online",
- "OFFLINE": "V současné době jsme pryč"
+ "OFFLINE": "V současné době jsme pryč",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Většinou odpovíme během pár minut",
"IN_A_FEW_HOURS": "Většinou odpovíme během pár hodin",
"IN_A_DAY": "Obvykle odpoví za den",
- "BACK_IN": "Budem online zase"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Neděle",
diff --git a/app/javascript/widget/i18n/locale/da.json b/app/javascript/widget/i18n/locale/da.json
index 31303d4d5..ef7adfc51 100644
--- a/app/javascript/widget/i18n/locale/da.json
+++ b/app/javascript/widget/i18n/locale/da.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Vi er online",
- "OFFLINE": "Vi er ikke tilgængelige i øjeblikket"
+ "OFFLINE": "Vi er ikke tilgængelige i øjeblikket",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Svarer typisk på et par minutter",
"IN_A_FEW_HOURS": "Svarer typisk på et par timer",
"IN_A_DAY": "Svarer typisk på en dag",
- "BACK_IN": "Vi er tilbage online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "søndag",
diff --git a/app/javascript/widget/i18n/locale/de.json b/app/javascript/widget/i18n/locale/de.json
index b7490c368..fd6de1f2e 100644
--- a/app/javascript/widget/i18n/locale/de.json
+++ b/app/javascript/widget/i18n/locale/de.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Wir sind online",
- "OFFLINE": "Wir sind momentan abwesend"
+ "OFFLINE": "Wir sind momentan abwesend",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Wir antworten üblicherweise innerhalb weniger Minuten",
"IN_A_FEW_HOURS": "Wir antworten üblicherweise innerhalb weniger Stunden",
"IN_A_DAY": "Wir antworten üblicherweise innerhalb eines Tages",
- "BACK_IN": "Wir werden wieder online sein"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sonntag",
diff --git a/app/javascript/widget/i18n/locale/el.json b/app/javascript/widget/i18n/locale/el.json
index 1cb35a76b..64bb71e74 100644
--- a/app/javascript/widget/i18n/locale/el.json
+++ b/app/javascript/widget/i18n/locale/el.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Είμαστε online",
- "OFFLINE": "Προς το παρόν, είμαστε εκτός"
+ "OFFLINE": "Προς το παρόν, είμαστε εκτός",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Τυπικά έχετε απάντηση σε μερικά λεπτά",
"IN_A_FEW_HOURS": "Τυπικά έχετε απάντηση σε μερικές σε μερικές ώρες",
"IN_A_DAY": "Τυπικά έχετε απάντηση σε μία ημέρα",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/es.json b/app/javascript/widget/i18n/locale/es.json
index 9c807ed84..7227ab056 100644
--- a/app/javascript/widget/i18n/locale/es.json
+++ b/app/javascript/widget/i18n/locale/es.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Estamos en línea",
- "OFFLINE": "Estamos ausentes en este momento"
+ "OFFLINE": "Estamos ausentes en este momento",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Normalmente responde en unos minutos",
"IN_A_FEW_HOURS": "Normalmente responde en unas pocas horas",
"IN_A_DAY": "Normalmente responde en un día",
- "BACK_IN": "Volveremos a estar en línea"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Domingo",
diff --git a/app/javascript/widget/i18n/locale/fa.json b/app/javascript/widget/i18n/locale/fa.json
index 982df19ac..9fdbd0a38 100644
--- a/app/javascript/widget/i18n/locale/fa.json
+++ b/app/javascript/widget/i18n/locale/fa.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "ما آنلاین هستیم",
- "OFFLINE": "در حال حاضر دردسترس نیستیم"
+ "OFFLINE": "در حال حاضر دردسترس نیستیم",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "معمولاً در عرض چند دقیقه پاسخ می دهند",
"IN_A_FEW_HOURS": "معمولاً در عرض چند ساعت پاسخ می دهند",
"IN_A_DAY": "به طور معمول در یک روز پاسخ می دهند",
- "BACK_IN": "دوباره آنلاین خواهیم شد"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "یکشنبه",
diff --git a/app/javascript/widget/i18n/locale/fi.json b/app/javascript/widget/i18n/locale/fi.json
index a5d742303..b11170020 100644
--- a/app/javascript/widget/i18n/locale/fi.json
+++ b/app/javascript/widget/i18n/locale/fi.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Olemme online-tilassa",
- "OFFLINE": "Olemme tällä hetkellä poissa"
+ "OFFLINE": "Olemme tällä hetkellä poissa",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Vastaa tyypillisesti muutamassa minuutissa",
"IN_A_FEW_HOURS": "Tyypillisesti vastaa muutaman tunnin kuluessa",
"IN_A_DAY": "Vastaa tyypillisesti päivässä",
- "BACK_IN": "Tulemme olemaan takaisin linjoilla"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunnuntai",
diff --git a/app/javascript/widget/i18n/locale/fr.json b/app/javascript/widget/i18n/locale/fr.json
index ff25bbd45..578d0217f 100644
--- a/app/javascript/widget/i18n/locale/fr.json
+++ b/app/javascript/widget/i18n/locale/fr.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Nous sommes en ligne",
- "OFFLINE": "Nous sommes absents pour le moment"
+ "OFFLINE": "Nous sommes absents pour le moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Répond généralement en quelques minutes",
"IN_A_FEW_HOURS": "Répond généralement en quelques heures",
"IN_A_DAY": "Répond généralement dans la journée",
- "BACK_IN": "Nous serons de retour en ligne"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Dimanche",
diff --git a/app/javascript/widget/i18n/locale/he.json b/app/javascript/widget/i18n/locale/he.json
index 1eaa103db..5d10f0a8b 100644
--- a/app/javascript/widget/i18n/locale/he.json
+++ b/app/javascript/widget/i18n/locale/he.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "אנחנו אונליין",
- "OFFLINE": "אנחנו לא זמינים כרגע"
+ "OFFLINE": "אנחנו לא זמינים כרגע",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "זמן מענה טיפוסי תוך כמה דקות",
"IN_A_FEW_HOURS": "מענה ממוצע תוך כמה שעות",
"IN_A_DAY": "מענה ממוצע לאחר יום",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "יום ראשון",
diff --git a/app/javascript/widget/i18n/locale/hi.json b/app/javascript/widget/i18n/locale/hi.json
index 4f244c566..c3d6ddfc1 100644
--- a/app/javascript/widget/i18n/locale/hi.json
+++ b/app/javascript/widget/i18n/locale/hi.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/hr.json b/app/javascript/widget/i18n/locale/hr.json
index 37cf7b53e..1ae76f16f 100644
--- a/app/javascript/widget/i18n/locale/hr.json
+++ b/app/javascript/widget/i18n/locale/hr.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Online smo",
- "OFFLINE": "Trenutačno nismo online"
+ "OFFLINE": "Trenutačno nismo online",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Obično odgovara za nekoliko minuta",
"IN_A_FEW_HOURS": "Obično odgovara za nekoliko sati",
"IN_A_DAY": "Obično odgovara u roku jednog dana",
- "BACK_IN": "Bit ćemo ponovno online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Nedjelja",
diff --git a/app/javascript/widget/i18n/locale/hu.json b/app/javascript/widget/i18n/locale/hu.json
index 81c4b6886..5ea7c095a 100644
--- a/app/javascript/widget/i18n/locale/hu.json
+++ b/app/javascript/widget/i18n/locale/hu.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Online vagyunk",
- "OFFLINE": "Jelenleg nem vagyunk elérhetőek"
+ "OFFLINE": "Jelenleg nem vagyunk elérhetőek",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Néhány percen belül válaszol",
"IN_A_FEW_HOURS": "Néhány órán belül válaszol",
"IN_A_DAY": "Általánban egy napon belül válaszol",
- "BACK_IN": "Legközelebb online leszünk ekkor:"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "vasárnap",
diff --git a/app/javascript/widget/i18n/locale/hy.json b/app/javascript/widget/i18n/locale/hy.json
index 4f244c566..c3d6ddfc1 100644
--- a/app/javascript/widget/i18n/locale/hy.json
+++ b/app/javascript/widget/i18n/locale/hy.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/id.json b/app/javascript/widget/i18n/locale/id.json
index e7fbec8ad..59f86956f 100644
--- a/app/javascript/widget/i18n/locale/id.json
+++ b/app/javascript/widget/i18n/locale/id.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Kami sedang online",
- "OFFLINE": "Kami sedang tidak tersedia saat ini"
+ "OFFLINE": "Kami sedang tidak tersedia saat ini",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Biasanya membalas dalam beberapa menit",
"IN_A_FEW_HOURS": "Biasanya membalas dalam beberapa jam",
"IN_A_DAY": "Biasanya membalas dalam sehari",
- "BACK_IN": "Kami akan kembali online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Minggu",
diff --git a/app/javascript/widget/i18n/locale/is.json b/app/javascript/widget/i18n/locale/is.json
index b794493f4..0ab53118a 100644
--- a/app/javascript/widget/i18n/locale/is.json
+++ b/app/javascript/widget/i18n/locale/is.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Við erum tengd",
- "OFFLINE": "Það er enginn við í augnablikinu"
+ "OFFLINE": "Það er enginn við í augnablikinu",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Svarar iðulega innan nokkura mínútna",
"IN_A_FEW_HOURS": "Svarar iðulega innan nokkura klukkustunda",
"IN_A_DAY": "Svarar iðulega samdægurs",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/it.json b/app/javascript/widget/i18n/locale/it.json
index 7e0385220..13cf4a433 100644
--- a/app/javascript/widget/i18n/locale/it.json
+++ b/app/javascript/widget/i18n/locale/it.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Siamo online",
- "OFFLINE": "Siamo offline in questo momento"
+ "OFFLINE": "Siamo offline in questo momento",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "In genere risponde in pochi minuti",
"IN_A_FEW_HOURS": "In genere risponde in poche ore",
"IN_A_DAY": "In genere risponde in un giorno",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
@@ -117,7 +123,7 @@
}
},
"PORTAL": {
- "POPULAR_ARTICLES": "Popular Articles",
+ "POPULAR_ARTICLES": "Articoli Popolari",
"VIEW_ALL_ARTICLES": "View all articles",
"IFRAME_LOAD_ERROR": "There was an error loading the article, please refresh the page and try again."
},
diff --git a/app/javascript/widget/i18n/locale/ja.json b/app/javascript/widget/i18n/locale/ja.json
index 17c4beae0..969b5483a 100644
--- a/app/javascript/widget/i18n/locale/ja.json
+++ b/app/javascript/widget/i18n/locale/ja.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "オンライン",
- "OFFLINE": "留守中"
+ "OFFLINE": "留守中",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "通常数分以内にご返信します。",
"IN_A_FEW_HOURS": "通常数時間以内にご返信します。",
"IN_A_DAY": "通常数日以内にご返信します。",
- "BACK_IN": "オンラインに戻ります"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "日",
diff --git a/app/javascript/widget/i18n/locale/ka.json b/app/javascript/widget/i18n/locale/ka.json
index 4f244c566..c3d6ddfc1 100644
--- a/app/javascript/widget/i18n/locale/ka.json
+++ b/app/javascript/widget/i18n/locale/ka.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/ko.json b/app/javascript/widget/i18n/locale/ko.json
index ef8d15a6e..d084e243b 100644
--- a/app/javascript/widget/i18n/locale/ko.json
+++ b/app/javascript/widget/i18n/locale/ko.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "온라인",
- "OFFLINE": "부재중"
+ "OFFLINE": "부재중",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "보통 몇 분 안에 응답",
"IN_A_FEW_HOURS": "보통 몇 시간 내에 응답",
"IN_A_DAY": "보통 하루 안에 응답",
- "BACK_IN": "곧 돌아오겠습니다."
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "일요일",
diff --git a/app/javascript/widget/i18n/locale/lt.json b/app/javascript/widget/i18n/locale/lt.json
index fb61b586e..6b8e031bf 100644
--- a/app/javascript/widget/i18n/locale/lt.json
+++ b/app/javascript/widget/i18n/locale/lt.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Mes prisijungę",
- "OFFLINE": "Šiuo metu esame atsijungę"
+ "OFFLINE": "Šiuo metu esame atsijungę",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Paprastai atsako per kelias minutes",
"IN_A_FEW_HOURS": "Paprastai atsako per kelias valandas",
"IN_A_DAY": "Paprastai atsako per dieną",
- "BACK_IN": "Mes grįšime"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sekmadienis",
diff --git a/app/javascript/widget/i18n/locale/lv.json b/app/javascript/widget/i18n/locale/lv.json
index 5262e87f7..702fb041f 100644
--- a/app/javascript/widget/i18n/locale/lv.json
+++ b/app/javascript/widget/i18n/locale/lv.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Mēs esam tiešsaistē",
- "OFFLINE": "Šobrīd mēs neesam uz vietas"
+ "OFFLINE": "Šobrīd mēs neesam uz vietas",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Parasti atbild pēc dažām minūtēm",
"IN_A_FEW_HOURS": "Parasti atbild pēc dažām stundām",
"IN_A_DAY": "Parasti atbild vienas dienas laikā",
- "BACK_IN": "Mēs atgriezīsimies tiešsaistē"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Svētdiena",
diff --git a/app/javascript/widget/i18n/locale/ml.json b/app/javascript/widget/i18n/locale/ml.json
index c4761e99f..96a650cb4 100644
--- a/app/javascript/widget/i18n/locale/ml.json
+++ b/app/javascript/widget/i18n/locale/ml.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "ഞങ്ങൾ ഓൺലൈനിലാണ്",
- "OFFLINE": "ഞങ്ങൾ ഇപ്പോൾ അകലെയാണ്"
+ "OFFLINE": "ഞങ്ങൾ ഇപ്പോൾ അകലെയാണ്",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "സാധാരണയായി കുറച്ച് മിനിറ്റിനുള്ളിൽ മറുപടി നൽകുന്നു",
"IN_A_FEW_HOURS": "സാധാരണയായി കുറച്ച് മണിക്കൂറിനുള്ളിൽ മറുപടി നൽകുന്നു",
"IN_A_DAY": "സാധാരണയായി ഒരു ദിവസത്തിൽ മറുപടി നൽകുന്നു",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/ms.json b/app/javascript/widget/i18n/locale/ms.json
index 4dcbc5f57..d813e4eb1 100644
--- a/app/javascript/widget/i18n/locale/ms.json
+++ b/app/javascript/widget/i18n/locale/ms.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/ne.json b/app/javascript/widget/i18n/locale/ne.json
index 5201951e5..20120afd9 100644
--- a/app/javascript/widget/i18n/locale/ne.json
+++ b/app/javascript/widget/i18n/locale/ne.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "हामी अनलाइन छौं",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "धेरै जसो केहि मिनेटमा जवाफ हुन्छ",
"IN_A_FEW_HOURS": "धेरै जसो केहि घण्टामा जवाफ हुन्छ",
"IN_A_DAY": "धेरै जसो एक दिनमा जवाफ हुन्छ",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/nl.json b/app/javascript/widget/i18n/locale/nl.json
index a33be5f90..0dd99b863 100644
--- a/app/javascript/widget/i18n/locale/nl.json
+++ b/app/javascript/widget/i18n/locale/nl.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We zijn online",
- "OFFLINE": "We zijn momenteel afwezig"
+ "OFFLINE": "We zijn momenteel afwezig",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Reageert meestal binnen een paar minuten",
"IN_A_FEW_HOURS": "Reageert meestal binnen een paar uur",
"IN_A_DAY": "Reageert meestal binnen een dag",
- "BACK_IN": "We zullen weer online zijn"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "zondag",
diff --git a/app/javascript/widget/i18n/locale/no.json b/app/javascript/widget/i18n/locale/no.json
index fa2c5a2b2..9034df45b 100644
--- a/app/javascript/widget/i18n/locale/no.json
+++ b/app/javascript/widget/i18n/locale/no.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Vi er pålogget",
- "OFFLINE": "Vi er for øyeblikket borte"
+ "OFFLINE": "Vi er for øyeblikket borte",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Svarer vanligvis innen et par timer",
"IN_A_FEW_HOURS": "Svarer vanligvis innen et par timer",
"IN_A_DAY": "Svarer vanligvis innen en dag",
- "BACK_IN": "Vi vil være tilbake online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Søndag",
diff --git a/app/javascript/widget/i18n/locale/pl.json b/app/javascript/widget/i18n/locale/pl.json
index c143e3b00..bea067b26 100644
--- a/app/javascript/widget/i18n/locale/pl.json
+++ b/app/javascript/widget/i18n/locale/pl.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Jesteśmy dostępni",
- "OFFLINE": "W tej chwili jesteśmy niedostępni"
+ "OFFLINE": "W tej chwili jesteśmy niedostępni",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Zwykle odpowiadamy w ciągu paru minut",
"IN_A_FEW_HOURS": "Zwykle odpowiadamy w ciągu paru godzin",
"IN_A_DAY": "Zwykle odpowiadamy w przeciągu jednego dnia",
- "BACK_IN": "Będziemy dostępni ponownie"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Niedziela",
diff --git a/app/javascript/widget/i18n/locale/pt.json b/app/javascript/widget/i18n/locale/pt.json
index c1fffb681..300ffb59f 100644
--- a/app/javascript/widget/i18n/locale/pt.json
+++ b/app/javascript/widget/i18n/locale/pt.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Estamos online",
- "OFFLINE": "Estamos ausentes"
+ "OFFLINE": "Estamos ausentes",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Normalmente respondemos em poucos minutos",
"IN_A_FEW_HOURS": "Normalmente respondemos em poucas horas",
"IN_A_DAY": "Normalmente respondemos num dia",
- "BACK_IN": "Voltaremos online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Domingo",
diff --git a/app/javascript/widget/i18n/locale/pt_BR.json b/app/javascript/widget/i18n/locale/pt_BR.json
index ea1316b8b..7a2678962 100644
--- a/app/javascript/widget/i18n/locale/pt_BR.json
+++ b/app/javascript/widget/i18n/locale/pt_BR.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Estamos conectados",
- "OFFLINE": "Estamos ausentes no momento"
+ "OFFLINE": "Estamos ausentes no momento",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Normalmente responde em alguns minutos",
"IN_A_FEW_HOURS": "Normalmente responde em algumas horas",
"IN_A_DAY": "Normalmente responde em um dia",
- "BACK_IN": "Estaremos de volta on-line"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Domingo",
diff --git a/app/javascript/widget/i18n/locale/ro.json b/app/javascript/widget/i18n/locale/ro.json
index e030c50b2..cd77700b8 100644
--- a/app/javascript/widget/i18n/locale/ro.json
+++ b/app/javascript/widget/i18n/locale/ro.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Suntem online",
- "OFFLINE": "Suntem plecați în acest moment"
+ "OFFLINE": "Suntem plecați în acest moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "De obicei, răspunsurile în câteva minute",
"IN_A_FEW_HOURS": "De obicei, răspunsurile în câteva ore",
"IN_A_DAY": "De obicei, răspunsurile într-o zi",
- "BACK_IN": "Vom reveni online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Duminică",
diff --git a/app/javascript/widget/i18n/locale/ru.json b/app/javascript/widget/i18n/locale/ru.json
index 734a3a035..37cb9ba04 100644
--- a/app/javascript/widget/i18n/locale/ru.json
+++ b/app/javascript/widget/i18n/locale/ru.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Мы в сети",
- "OFFLINE": "В данный момент мы отсутствуем"
+ "OFFLINE": "В данный момент мы отсутствуем",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Обычно отвечаем в течение нескольких минут",
"IN_A_FEW_HOURS": "Обычно отвечаем в течение нескольких часов",
"IN_A_DAY": "Обычно отвечаем в течение дня",
- "BACK_IN": "Мы будем онлайн"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Воскресенье",
diff --git a/app/javascript/widget/i18n/locale/sh.json b/app/javascript/widget/i18n/locale/sh.json
index 4f244c566..c3d6ddfc1 100644
--- a/app/javascript/widget/i18n/locale/sh.json
+++ b/app/javascript/widget/i18n/locale/sh.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/sk.json b/app/javascript/widget/i18n/locale/sk.json
index 60dc03162..b7ac2a763 100644
--- a/app/javascript/widget/i18n/locale/sk.json
+++ b/app/javascript/widget/i18n/locale/sk.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Sme online",
- "OFFLINE": "Momentálne nie sme k dispozícii"
+ "OFFLINE": "Momentálne nie sme k dispozícii",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Zvyčajne odpovedá do niekoľkých minút",
"IN_A_FEW_HOURS": "Zvyčajne odpovedá do niekoľkých hodín",
"IN_A_DAY": "Zvyčajne odpovedá do dňa",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Nedeľa",
diff --git a/app/javascript/widget/i18n/locale/sl.json b/app/javascript/widget/i18n/locale/sl.json
index 8665e1e1b..0c95f1268 100644
--- a/app/javascript/widget/i18n/locale/sl.json
+++ b/app/javascript/widget/i18n/locale/sl.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Smo na voljo",
- "OFFLINE": "Trenutno nismo na voljo"
+ "OFFLINE": "Trenutno nismo na voljo",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Običajno odgovorimo v nekaj minutah",
"IN_A_FEW_HOURS": "Običajno odgovorimo v nekaj urah",
"IN_A_DAY": "Običajno odgovorimo v enem dnevu",
- "BACK_IN": "Kmalu se vrnemo"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Nedelja",
diff --git a/app/javascript/widget/i18n/locale/sq.json b/app/javascript/widget/i18n/locale/sq.json
index 34fe645e9..3efbe543e 100644
--- a/app/javascript/widget/i18n/locale/sq.json
+++ b/app/javascript/widget/i18n/locale/sq.json
@@ -14,18 +14,24 @@
},
"THUMBNAIL": {
"AUTHOR": {
- "NOT_AVAILABLE": "Not available"
+ "NOT_AVAILABLE": "Nuk është i disponueshëm"
}
},
"TEAM_AVAILABILITY": {
"ONLINE": "Ne jemi online",
- "OFFLINE": "Nuk jemi online për momentin"
+ "OFFLINE": "Nuk jemi online për momentin",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Zakonisht përgjigjet brenda pak minutash",
"IN_A_FEW_HOURS": "Zakonisht përgjigjemi brenda disa orësh",
"IN_A_DAY": "Zakonisht përgjigjemi brenda një dite",
- "BACK_IN": "Ne do të kthehemi serish online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "E diele",
diff --git a/app/javascript/widget/i18n/locale/sr.json b/app/javascript/widget/i18n/locale/sr.json
index 039982ee6..c0eae2c59 100644
--- a/app/javascript/widget/i18n/locale/sr.json
+++ b/app/javascript/widget/i18n/locale/sr.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Dostupni smo",
- "OFFLINE": "Trenutno nismo dostupni"
+ "OFFLINE": "Trenutno nismo dostupni",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Obično odgovaramo u roku od nekoliko minuta",
"IN_A_FEW_HOURS": "Obično odgovaramo u roku od nekoliko sati",
"IN_A_DAY": "Obično odgovaramo u roku od jednog dana",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/sv.json b/app/javascript/widget/i18n/locale/sv.json
index d65e39358..4d6e1723c 100644
--- a/app/javascript/widget/i18n/locale/sv.json
+++ b/app/javascript/widget/i18n/locale/sv.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Vi är online",
- "OFFLINE": "Vi är borta för tillfället"
+ "OFFLINE": "Vi är borta för tillfället",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Svarar vanligtvis inom några minuter",
"IN_A_FEW_HOURS": "Svarar vanligtvis inom några timmar",
"IN_A_DAY": "Svar vanligtvis inom en dag",
- "BACK_IN": "Vi kommer tillbaka online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Söndag",
diff --git a/app/javascript/widget/i18n/locale/ta.json b/app/javascript/widget/i18n/locale/ta.json
index 27e069ea7..91ccddf96 100644
--- a/app/javascript/widget/i18n/locale/ta.json
+++ b/app/javascript/widget/i18n/locale/ta.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/th.json b/app/javascript/widget/i18n/locale/th.json
index a1e39c2f5..fcfed1fde 100644
--- a/app/javascript/widget/i18n/locale/th.json
+++ b/app/javascript/widget/i18n/locale/th.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "เรากำลังออนไลน์",
- "OFFLINE": "เราไม่อยู่"
+ "OFFLINE": "เราไม่อยู่",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "ปกติจะตอบกลับภายในไม่กี่นาที",
"IN_A_FEW_HOURS": "ปกติจะตอบกลับในไม่กี่ชั่วโมง",
"IN_A_DAY": "ปกติจะตอบกลับภายใน 1 วัน",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/tl.json b/app/javascript/widget/i18n/locale/tl.json
index 4f244c566..c3d6ddfc1 100644
--- a/app/javascript/widget/i18n/locale/tl.json
+++ b/app/javascript/widget/i18n/locale/tl.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/tr.json b/app/javascript/widget/i18n/locale/tr.json
index b346504fe..d61b1767f 100644
--- a/app/javascript/widget/i18n/locale/tr.json
+++ b/app/javascript/widget/i18n/locale/tr.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Çevrimiçi",
- "OFFLINE": "Şu an operatörlerimiz müsait değil"
+ "OFFLINE": "Şu an operatörlerimiz müsait değil",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Genellikle birkaç dakika içinde yanıt verir",
"IN_A_FEW_HOURS": "Genellikle birkaç saat içinde yanıt verir",
"IN_A_DAY": "Genellikle bir gün içinde yanıtlar",
- "BACK_IN": "Tekrar çevrim içi olacağız"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Pazar",
diff --git a/app/javascript/widget/i18n/locale/uk.json b/app/javascript/widget/i18n/locale/uk.json
index aed413394..6850623a4 100644
--- a/app/javascript/widget/i18n/locale/uk.json
+++ b/app/javascript/widget/i18n/locale/uk.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Ми онлайн",
- "OFFLINE": "Нас наразі немає"
+ "OFFLINE": "Нас наразі немає",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Зазвичай, відповідаємо за декілька хвилин",
"IN_A_FEW_HOURS": "Зазвичай, відповідаємо за декілька годин",
"IN_A_DAY": "Зазвичай, відповідаємо протягом доби",
- "BACK_IN": "Ми повернемось в мережу"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Неділя",
diff --git a/app/javascript/widget/i18n/locale/ur.json b/app/javascript/widget/i18n/locale/ur.json
index 3869ab5d6..7b03483a4 100644
--- a/app/javascript/widget/i18n/locale/ur.json
+++ b/app/javascript/widget/i18n/locale/ur.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/ur_IN.json b/app/javascript/widget/i18n/locale/ur_IN.json
index 4f244c566..c3d6ddfc1 100644
--- a/app/javascript/widget/i18n/locale/ur_IN.json
+++ b/app/javascript/widget/i18n/locale/ur_IN.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "We are online",
- "OFFLINE": "We are away at the moment"
+ "OFFLINE": "We are away at the moment",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Typically replies in a few minutes",
"IN_A_FEW_HOURS": "Typically replies in a few hours",
"IN_A_DAY": "Typically replies in a day",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Sunday",
diff --git a/app/javascript/widget/i18n/locale/vi.json b/app/javascript/widget/i18n/locale/vi.json
index d12dbc8db..312883388 100644
--- a/app/javascript/widget/i18n/locale/vi.json
+++ b/app/javascript/widget/i18n/locale/vi.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "Chúng tôi đang trực tuyến",
- "OFFLINE": "Hiện tại chúng tôi đang bận chút"
+ "OFFLINE": "Hiện tại chúng tôi đang bận chút",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "Thường trả lời sau vài phút",
"IN_A_FEW_HOURS": "Thường trả lời sau vài giờ",
"IN_A_DAY": "Thường trả lời trong một ngày",
- "BACK_IN": "Chúng tôi sẽ quay lại"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "Chủ Nhật",
diff --git a/app/javascript/widget/i18n/locale/zh_CN.json b/app/javascript/widget/i18n/locale/zh_CN.json
index dd834af87..3eb08c8f0 100644
--- a/app/javascript/widget/i18n/locale/zh_CN.json
+++ b/app/javascript/widget/i18n/locale/zh_CN.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "在线",
- "OFFLINE": "当前已离线"
+ "OFFLINE": "当前已离线",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "通常在几分钟内回复您",
"IN_A_FEW_HOURS": "通常在几小时内回复您",
"IN_A_DAY": "通常在一天之内回复您",
- "BACK_IN": "我们将重新上线"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "周日",
diff --git a/app/javascript/widget/i18n/locale/zh_TW.json b/app/javascript/widget/i18n/locale/zh_TW.json
index 3f46d258f..70a5a7c47 100644
--- a/app/javascript/widget/i18n/locale/zh_TW.json
+++ b/app/javascript/widget/i18n/locale/zh_TW.json
@@ -19,13 +19,19 @@
},
"TEAM_AVAILABILITY": {
"ONLINE": "我們在線上",
- "OFFLINE": "我們目前不在線上"
+ "OFFLINE": "我們目前不在線上",
+ "BACK_AS_SOON_AS_POSSIBLE": "We will be back as soon as possible"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "通常在幾分鐘內回覆",
"IN_A_FEW_HOURS": "通常在幾小時內回覆",
"IN_A_DAY": "通常在一天內回覆",
- "BACK_IN": "We will be back online"
+ "BACK_IN_HOURS": "We will be back online in {n} hour | We will be back online in {n} hours",
+ "BACK_IN_MINUTES": "We will be back online in {time} minutes",
+ "BACK_AT_TIME": "We will be back online at {time}",
+ "BACK_ON_DAY": "We will be back online on {day}",
+ "BACK_TOMORROW": "We will be back online tomorrow",
+ "BACK_IN_SOME_TIME": "We will be back online in some time"
},
"DAY_NAMES": {
"SUNDAY": "星期日",
diff --git a/config/locales/am.yml b/config/locales/am.yml
index d0d6ce053..2466c6060 100644
--- a/config/locales/am.yml
+++ b/config/locales/am.yml
@@ -39,6 +39,8 @@ am:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 181c42fba..46212cf2e 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -39,6 +39,8 @@ ar:
email_already_exists: 'لقد قمت بالفعل بتسجيل حساب سابقاً بالعنوان %{email}'
invalid_params: 'غير صالح، الرجاء التحقق من خانات التسجيل وحاول مرة أخرى'
failed: فشلت عملية التسجيل
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: نوع البيانات غير صالح
diff --git a/config/locales/az.yml b/config/locales/az.yml
index dacb9109a..79682f873 100644
--- a/config/locales/az.yml
+++ b/config/locales/az.yml
@@ -39,6 +39,8 @@ az:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 6c100c816..5ca4765a8 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -39,6 +39,8 @@ bg:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 1355ac009..e74015a14 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -39,6 +39,8 @@ ca:
email_already_exists: 'Ja us heu registrat amb el compte %{email}'
invalid_params: 'No és vàlid, comprova els paràmetres de registre i torna-ho a provar'
failed: El registre ha fallat
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Tipus de dades no vàlid
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index c1ed7175c..f58991eae 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -39,6 +39,8 @@ cs:
email_already_exists: 'Již jste se zaregistrovali k účtu s %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Registrace se nezdařila
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/da.yml b/config/locales/da.yml
index f1e49f351..fecd42250 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -39,6 +39,8 @@ da:
email_already_exists: 'Du har allerede tilmeldt dig en konto med %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Tilmelding mislykkedes
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Ugyldig datatype
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 2cd9a7165..c7a81c971 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -39,6 +39,8 @@ de:
email_already_exists: 'Sie haben sich bereits für ein Konto bei %{email} angemeldet.'
invalid_params: 'Ungültig, bitte überprüfen Sie die Anmeldeparameter und versuchen Sie es erneut'
failed: Anmeldung gescheitert
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Ungültiger Datentyp
diff --git a/config/locales/el.yml b/config/locales/el.yml
index d2e2b5a67..211782256 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -39,6 +39,8 @@ el:
email_already_exists: 'Έχει ήδη καταχωρηθεί λογαριασμός στο %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Η εγγραφή απέτυχε
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Μη έγκυρος τύπος δεδομένων
diff --git a/config/locales/es.yml b/config/locales/es.yml
index b7840de03..06da2c054 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -39,6 +39,8 @@ es:
email_already_exists: 'Ya te has registrado en una cuenta con %{email}'
invalid_params: 'Inválido, por favor comprueba los parámetros de registro e inténtalo de nuevo'
failed: Registro fallido
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Tipo de datos no válido
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index f36ca57eb..703916b83 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -39,6 +39,8 @@ fa:
email_already_exists: 'قبلا کاربری با ایمیل %{email} ثبتنام کرده است'
invalid_params: 'نامعتبر است، لطفا پارامترهای ثبتنام را بررسی کرده و دوباره امتحان کنید'
failed: ثبت نام ناموفق بود
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: نوع داده نامعتبر است
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 4c30174f3..9c8e4e988 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -39,6 +39,8 @@ fi:
email_already_exists: 'Olet jo rekisteröitynyt tiliin sähköpostin %{email} kanssa'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Rekisteröityminen epäonnistui
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 0d0a3a038..0645826f5 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -39,6 +39,8 @@ fr:
email_already_exists: 'Vous avez déjà créé un compte avec %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: L'inscription a échoué
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Type de données incorrect
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 603293335..a00832de7 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -39,6 +39,8 @@ he:
email_already_exists: 'כבר נרשמת לחשבון עם %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: הרשמה נכשלה
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/hi.yml b/config/locales/hi.yml
index 91b8a488d..0368f1e12 100644
--- a/config/locales/hi.yml
+++ b/config/locales/hi.yml
@@ -39,6 +39,8 @@ hi:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/hr.yml b/config/locales/hr.yml
index 60006e9b8..dcbb3152d 100644
--- a/config/locales/hr.yml
+++ b/config/locales/hr.yml
@@ -39,6 +39,8 @@ hr:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index dcac609e4..8244f32ad 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -39,6 +39,8 @@ hu:
email_already_exists: 'Ezzel az e-mailcímmel már van fiók: %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Feliratkozás sikertelen
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Hibás adattípus
diff --git a/config/locales/hy.yml b/config/locales/hy.yml
index f2d031ce3..7e76b6177 100644
--- a/config/locales/hy.yml
+++ b/config/locales/hy.yml
@@ -39,6 +39,8 @@ hy:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/id.yml b/config/locales/id.yml
index d7d4344ac..50109acbb 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -39,6 +39,8 @@ id:
email_already_exists: 'Anda telah mendaftar untuk sebuah akun dengan %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Pendaftaran gagal
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Jenis data tidak valid
diff --git a/config/locales/is.yml b/config/locales/is.yml
index dadeae6bc..465e86ff2 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -39,6 +39,8 @@ is:
email_already_exists: 'Þú hefur þegar skráð þig fyrir reikning með %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/it.yml b/config/locales/it.yml
index b392f311f..5347657c6 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -39,6 +39,8 @@ it:
email_already_exists: 'Ti sei già registrato per un account con %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Registrazione non riuscita
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Tipo di dato non valido
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 5e5d16c81..d2e7f1c6f 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -39,6 +39,8 @@ ja:
email_already_exists: 'あなたは既に %{email} でアカウントにサインアップしています'
invalid_params: '無効な値が入力されました。確認のうえ再度お試しください。'
failed: サインアップに失敗しました
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: 無効なデータ型。
diff --git a/config/locales/ka.yml b/config/locales/ka.yml
index 5a0d06abd..d8d49a9a9 100644
--- a/config/locales/ka.yml
+++ b/config/locales/ka.yml
@@ -39,6 +39,8 @@ ka:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 78b4bbc6f..a6a58d94f 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -39,6 +39,8 @@ ko:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index b17069dc4..46baa4120 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -39,6 +39,8 @@ lt:
email_already_exists: 'Jūs jau užregistravote paskyrą su %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Prisijungimas nesėkmingas
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Neteisingas duomenų tipas
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index 73e369bb1..cf7d5f42d 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -39,6 +39,8 @@ lv:
email_already_exists: 'Jūs jau esat reģistrējis kontu ar %{email}'
invalid_params: 'Kļūda. Lūdzu, pārbaudiet pierakstīšanās parametrus un mēģiniet vēlreiz'
failed: Reģistrēšanās neizdevās
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Nederīgs datu tips
diff --git a/config/locales/ml.yml b/config/locales/ml.yml
index b300aa883..c82ac2ae8 100644
--- a/config/locales/ml.yml
+++ b/config/locales/ml.yml
@@ -39,6 +39,8 @@ ml:
email_already_exists: 'നിങ്ങൾ ഇതിനകം ഈ %{email} ഉപയോഗിച്ചു ഒരു അക്കൗണ്ടിനായി സൈൻ അപ്പ് ചെയ്തു'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: സൈനപ്പ് പരാജയപ്പെട്ടു
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index 5d17ff0bc..3460b45ca 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -39,6 +39,8 @@ ms:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/ne.yml b/config/locales/ne.yml
index ac517598d..920cb9531 100644
--- a/config/locales/ne.yml
+++ b/config/locales/ne.yml
@@ -39,6 +39,8 @@ ne:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 8ca9b96f4..8e4c95604 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -39,6 +39,8 @@ nl:
email_already_exists: 'Je hebt je al aangemeld voor een account bij %{email}'
invalid_params: 'Ongeldig zijn, controleer de aanmeldingsparameters en probeer het opnieuw'
failed: Aanmelden mislukt
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Ongeldig datatype
diff --git a/config/locales/no.yml b/config/locales/no.yml
index ad1102e41..3f3fa5490 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -39,6 +39,8 @@
email_already_exists: 'Du har allerede registrert en konto med %{email}'
invalid_params: 'Ugyldig registrering, sjekk registrerings-parametere og prøv på nytt'
failed: Registrering mislyktes
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Ugyldig datatype
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 116d8d542..b16e709ec 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -39,6 +39,8 @@ pl:
email_already_exists: 'Już zarejestrowałeś się na konto %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Rejestracja nie powiodła się
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Nieprawidłowy typ danych
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index b4df9763c..cb4379ce5 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -39,6 +39,8 @@ pt:
email_already_exists: 'Já existe uma conta com o %{email}'
invalid_params: 'Inválido, por favor, verifique os parâmetros de subscrição e tente novamente'
failed: Falha na inscrição
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Tipo de dados inválido
diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml
index 71ab85e3a..4dcfbad6c 100644
--- a/config/locales/pt_BR.yml
+++ b/config/locales/pt_BR.yml
@@ -39,6 +39,8 @@ pt_BR:
email_already_exists: 'Você já se cadastrou para uma conta com %{email}'
invalid_params: 'Inválido, por favor, verifique os parâmetros de inscrição e tente novamente'
failed: Registro falhou
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Tipo de dado inválido
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index c6941ab52..8ea544ff3 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -39,6 +39,8 @@ ro:
email_already_exists: 'V-ați înregistrat deja cu un cont cu %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Înregistrare eșuată
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Tip de date nevalid
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 8bea444c2..8ded63703 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -39,6 +39,8 @@ ru:
email_already_exists: 'Вы уже зарегистрировались для учётной записи с %{email}'
invalid_params: 'Неверно, проверьте параметры регистрации и повторите попытку'
failed: Ошибка регистрации
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Недопустимый тип данных
diff --git a/config/locales/sh.yml b/config/locales/sh.yml
index 983466533..0121d7b84 100644
--- a/config/locales/sh.yml
+++ b/config/locales/sh.yml
@@ -39,6 +39,8 @@ sh:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 7f4b3df66..e445b7495 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -39,6 +39,8 @@ sk:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 7690b3731..079083bc9 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -39,6 +39,8 @@ sl:
email_already_exists: 'Ste že ustvarili račun z e-poštnim naslovom %{email}'
invalid_params: 'Neveljavno, preverite vnešene podatke in poskusite znova'
failed: Registracija neuspešna
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Nepravilen podatkovni tip
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index 07d605048..f9922e678 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -20,9 +20,9 @@ sq:
hello: 'Hello world'
inbox:
reauthorization:
- success: 'Channel reauthorized successfully'
- not_required: 'Reauthorization is not required for this inbox'
- invalid_channel: 'Invalid channel type for reauthorization'
+ success: 'Kanali u riautorizua me sukses'
+ not_required: 'Riautorizimi nuk kërkohet për këtë kuti hyrëse'
+ invalid_channel: 'Lloj i pavlefshëm kanali për riautorizim'
messages:
reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions.
reset_password_failure: Uh ho! We could not find any user with the specified email.
@@ -39,6 +39,8 @@ sq:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Nuk u gjet politika e caktimit
data_import:
data_type:
invalid: Invalid data type
@@ -59,12 +61,12 @@ sq:
slack:
invalid_channel_id: 'Invalid slack channel. Please try again'
whatsapp:
- token_exchange_failed: 'Failed to exchange code for access token. Please try again.'
- invalid_token_permissions: 'The access token does not have the required permissions for WhatsApp.'
- phone_info_fetch_failed: 'Failed to fetch phone number information. Please try again.'
+ token_exchange_failed: 'Dështoi shkëmbimi i kodit për tokenin e aksesit. Ju lutemi, provoni përsëri.'
+ invalid_token_permissions: 'Tokeni i aksesit nuk ka lejet e nevojshme për WhatsApp.'
+ phone_info_fetch_failed: 'Dështoi marrja e informacionit të numrit të telefonit. Ju lutemi, provoni përsëri.'
reauthorization:
- generic: 'Failed to reauthorize WhatsApp. Please try again.'
- not_supported: 'Reauthorization is not supported for this type of WhatsApp channel.'
+ generic: 'Dështoi riautorizimi i WhatsApp-it. Ju lutemi, provoni përsëri.'
+ not_supported: 'Riautorizimi nuk mbështetet për këtë lloj kanali të WhatsApp-it.'
inboxes:
imap:
socket_error: Please check the network connection, IMAP address and try again.
@@ -103,7 +105,7 @@ sq:
conversations_count: No. of conversations
avg_first_response_time: Avg first response time
avg_resolution_time: Avg resolution time
- avg_reply_time: Avg reply time
+ avg_reply_time: Koha mesatare e përgjigjes
resolution_count: Resolution Count
team_csv:
team_name: Team name
@@ -147,19 +149,19 @@ sq:
no_content: 'No content'
conversations:
captain:
- handoff: 'Transferring to another agent for further assistance.'
+ handoff: 'Po transferohet te një agjent tjetër për ndihmë të mëtejshme.'
messages:
instagram_story_content: '%{story_sender} mentioned you in the story: '
instagram_deleted_story_content: This story is no longer available.
deleted: This message was deleted
whatsapp:
- list_button_label: 'Choose an item'
+ list_button_label: 'Zgjidhni një element'
delivery_status:
error_code: 'Error code: %{error_code}'
activity:
captain:
- resolved: 'Conversation was marked resolved by %{user_name} due to inactivity'
- open: 'Conversation was marked open by %{user_name}'
+ resolved: 'Biseda u shënua si e zgjidhur nga %{user_name} për shkak të mungesës së aktivitetit'
+ open: 'Biseda u shënua si e hapur nga %{user_name}'
status:
resolved: 'Conversation was marked resolved by %{user_name}'
contact_resolved: 'Conversation was resolved by %{contact_name}'
@@ -167,8 +169,8 @@ sq:
pending: 'Conversation was marked as pending by %{user_name}'
snoozed: 'Conversation was snoozed by %{user_name}'
auto_resolved_days: 'Conversation was marked resolved by system due to %{count} days of inactivity'
- auto_resolved_hours: 'Conversation was marked resolved by system due to %{count} hours of inactivity'
- auto_resolved_minutes: 'Conversation was marked resolved by system due to %{count} minutes of inactivity'
+ auto_resolved_hours: 'Biseda u shënua si e zgjidhur nga sistemi për %{count} orë pa aktivitet'
+ auto_resolved_minutes: 'Biseda u shënua si e zgjidhur nga sistemi për %{count} minuta pa aktivitet'
system_auto_open: System reopened the conversation due to a new incoming message.
priority:
added: '%{user_name} set the priority to %{new_priority}'
@@ -189,13 +191,13 @@ sq:
added: '%{user_name} added SLA policy %{sla_name}'
removed: '%{user_name} removed SLA policy %{sla_name}'
linear:
- issue_created: 'Linear issue %{issue_id} was created by %{user_name}'
- issue_linked: 'Linear issue %{issue_id} was linked by %{user_name}'
- issue_unlinked: 'Linear issue %{issue_id} was unlinked by %{user_name}'
+ issue_created: 'Çështja në Linear %{issue_id} u krijua nga %{user_name}'
+ issue_linked: 'Çështja në Linear %{issue_id} u lidh nga %{user_name}'
+ issue_unlinked: 'Çështja në Linear %{issue_id} u shkëput nga %{user_name}'
csat:
- not_sent_due_to_messaging_window: 'CSAT survey not sent due to outgoing message restrictions'
+ not_sent_due_to_messaging_window: 'Anketa CSAT nuk u dërgua për shkak të kufizimeve për mesazhet dalëse'
auto_resolve:
- not_sent_due_to_messaging_window: 'Auto-resolve message not sent due to outgoing message restrictions'
+ not_sent_due_to_messaging_window: 'Mesazhi i zgjidhjes automatike nuk u dërgua për shkak të kufizimeve për mesazhet dalëse'
muted: '%{user_name} has muted the conversation'
unmuted: '%{user_name} has unmuted the conversation'
auto_resolution_message: 'Resolving the conversation as it has been inactive for a while. Please start a new conversation if you need further assistance.'
@@ -229,53 +231,53 @@ sq:
description: 'Dashboard Apps allow you to create and embed applications that display user information, orders, or payment history, providing more context to your customer support agents.'
dyte:
name: 'Dyte'
- short_description: 'Start video/voice calls with customers directly from Chatwoot.'
+ short_description: 'Filloni thirrje video/zanore me klientët drejtpërdrejt nga Chatwoot.'
description: 'Dyte is a product that integrates audio and video functionalities into your application. With this integration, your agents can start video/voice calls with your customers directly from Chatwoot.'
meeting_name: '%{agent_name} has started a meeting'
slack:
name: 'Slack'
- short_description: 'Receive notifications and respond to conversations directly in Slack.'
+ short_description: 'Merrni njoftime dhe përgjigjuni bisedave drejtpërdrejt në Slack.'
description: "Integrate Chatwoot with Slack to keep your team in sync. This integration allows you to receive notifications for new conversations and respond to them directly within Slack's interface."
webhooks:
name: 'Webhooks'
description: 'Webhook events provide real-time updates about activities in your Chatwoot account. You can subscribe to your preferred events, and Chatwoot will send you HTTP callbacks with the updates.'
dialogflow:
name: 'Dialogflow'
- short_description: 'Build chatbots to handle initial queries before transferring to agents.'
+ short_description: 'Ndërtoni chatbot-e për të trajtuar kërkesat fillestare para se t''i transferoni te agjentët.'
description: 'Build chatbots with Dialogflow and easily integrate them into your inbox. These bots can handle initial queries before transferring them to a customer service agent.'
google_translate:
name: 'Google Translate'
- short_description: 'Automatically translate customer messages for agents.'
+ short_description: 'Përktheni automatikisht mesazhet e klientëve për agjentët.'
description: "Integrate Google Translate to help agents easily translate customer messages. This integration automatically detects the language and converts it to the agent's or admin's preferred language."
openai:
name: 'OpenAI'
- short_description: 'AI-powered reply suggestions, summarization, and message enhancement.'
+ short_description: 'Sugjerime përgjigjesh të mundësuara nga AI, përmbledhje dhe përmirësim mesazhesh.'
description: 'Leverage the power of large language models from OpenAI with the features such as reply suggestions, summarization, message rephrasing, spell-checking, and label classification.'
linear:
name: 'Linear'
- short_description: 'Create and link Linear issues directly from conversations.'
+ short_description: 'Krijoni dhe lidhni çështje në Linear drejtpërdrejt nga bisedat.'
description: 'Create issues in Linear directly from your conversation window. Alternatively, link existing Linear issues for a more streamlined and efficient issue tracking process.'
notion:
name: 'Notion'
- short_description: 'Integrate databases, documents and pages directly with Captain.'
- description: 'Connect your Notion workspace to enable Captain to access and generate intelligent responses using content from your databases, documents, and pages to provide more contextual customer support.'
+ short_description: 'Integroni bazat e të dhënave, dokumentet dhe faqet drejtpërdrejt me Captain.'
+ description: 'Lidheni hapësirën tuaj të punës në Notion për t''i mundësuar Captain-it të hyjë dhe të gjenerojë përgjigje inteligjente duke përdorur përmbajtjen nga bazat tuaja të të dhënave, dokumentet dhe faqet, për të ofruar mbështetje ndaj klientit me më shumë kontekst.'
shopify:
name: 'Shopify'
- short_description: 'Access order details and customer data from your Shopify store.'
+ short_description: 'Hyni te detajet e porosisë dhe te të dhënat e klientëve nga dyqani juaj Shopify.'
description: 'Connect your Shopify store to access order details, customer information, and product data directly within your conversations and helps your support team provide faster, more contextual assistance to your customers.'
leadsquared:
name: 'LeadSquared'
- short_description: 'Sync your contacts and conversations with LeadSquared CRM.'
- description: 'Sync your contacts and conversations with LeadSquared CRM. This integration automatically creates leads in LeadSquared when new contacts are added, and logs conversation activity to provide your sales team with complete context.'
+ short_description: 'Sinkronizoni kontaktet dhe bisedat tuaja me LeadSquared CRM.'
+ description: 'Sinkronizoni kontaktet dhe bisedat tuaja me LeadSquared CRM. Ky integrim krijon automatikisht lead-e në LeadSquared kur shtohen kontakte të reja dhe regjistron aktivitetin e bisedave për t''i ofruar ekipit tuaj të shitjeve kontekst të plotë.'
captain:
copilot_message_required: Message is required
copilot_error: 'Please connect an assistant to this inbox to use Copilot'
copilot_limit: 'You are out of Copilot credits. You can buy more credits from the billing section.'
copilot:
- using_tool: 'Using tool %{function_name}'
- completed_tool_call: 'Completed %{function_name} tool call'
- invalid_tool_call: 'Invalid tool call'
- tool_not_available: 'Tool not available'
+ using_tool: 'Duke përdorur mjetin %{function_name}'
+ completed_tool_call: 'Thirrja e mjetit %{function_name} u përfundua'
+ invalid_tool_call: 'Thirrje e pavlefshme e mjetit'
+ tool_not_available: 'Mjeti nuk është i disponueshëm'
public_portal:
search:
search_placeholder: Search for article by title or body...
@@ -301,7 +303,7 @@ sq:
made_with: Made with
header:
go_to_homepage: Website
- visit_website: Visit website
+ visit_website: Vizitoni faqen e internetit
appearance:
system: System
light: Light
@@ -335,33 +337,33 @@ sq:
one: '%{count} second'
other: '%{count} seconds'
automation:
- system_name: 'Automation System'
+ system_name: 'Sistemi i Automatizimit'
crm:
- no_message: 'No messages in conversation'
- attachment: '[Attachment: %{type}]'
+ no_message: 'Nuk ka mesazhe në bisedë'
+ attachment: '[Bashkëngjitje: %{type}]'
no_content: '[No content]'
created_activity: |
- New conversation started on %{brand_name}
+ Bisedë e re e nisur në %{brand_name}
- Channel: %{channel_info}
- Created: %{formatted_creation_time}
- Conversation ID: %{display_id}
- View in %{brand_name}: %{url}
+ Kanal: %{channel_info}
+ Krijuar: %{formatted_creation_time}
+ ID e bisedës: %{display_id}
+ Shiko në %{brand_name}: %{url}
transcript_activity: |
- Conversation Transcript from %{brand_name}
+ Transkript i bisedës nga %{brand_name}
- Channel: %{channel_info}
- Conversation ID: %{display_id}
- View in %{brand_name}: %{url}
+ Kanal: %{channel_info}
+ ID e bisedës: %{display_id}
+ Shiko në %{brand_name}: %{url}
- Transcript:
+ Transkript:
%{format_messages}
portals:
send_instructions:
- email_required: 'Email is required'
- invalid_email_format: 'Invalid email format'
- custom_domain_not_configured: 'Custom domain is not configured'
- instructions_sent_successfully: 'Instructions sent successfully'
- subject: 'Finish setting up %{custom_domain}'
+ email_required: 'Kërkohet emaili'
+ invalid_email_format: 'Format i pavlefshëm i emailit'
+ custom_domain_not_configured: 'Domeni i personalizuar nuk është konfiguruar'
+ instructions_sent_successfully: 'Udhëzimet u dërguan me sukses'
+ subject: 'Përfundoni konfigurimin e %{custom_domain}'
ssl_status:
- custom_domain_not_configured: 'Custom domain is not configured'
+ custom_domain_not_configured: 'Domeni i personalizuar nuk është konfiguruar'
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 0317020bc..243e190ea 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -39,6 +39,8 @@ sr-Latn:
email_already_exists: 'Već ste registrovali nalog sa %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Registracija nije uspela
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Neispravan tip podatka
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index bdb3efb92..bf441e57c 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -39,6 +39,8 @@ sv:
email_already_exists: 'Du har redan registrerat dig för ett konto med %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Registrering misslyckades
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/ta.yml b/config/locales/ta.yml
index c09c35f62..dbb280d06 100644
--- a/config/locales/ta.yml
+++ b/config/locales/ta.yml
@@ -39,6 +39,8 @@ ta:
email_already_exists: 'நீங்கள் ஏற்கனவே %{email} கொண்டு கணக்கிற்கு பதிவு செய்துள்ளீர்கள்'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: உள்நுழையும் முயறிசி தோல்வி அடைந்துள்ளது
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/th.yml b/config/locales/th.yml
index f356cc34c..61c99c44e 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -39,6 +39,8 @@ th:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/tl.yml b/config/locales/tl.yml
index e127396ef..4a7ac228d 100644
--- a/config/locales/tl.yml
+++ b/config/locales/tl.yml
@@ -39,6 +39,8 @@ tl:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index b917848e8..fb0c26e89 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -39,6 +39,8 @@ tr:
email_already_exists: '%{email} ile zaten bir hesaba kaydoldunuz'
invalid_params: 'Hata, lütfen kayıt olma parametrelerini kontrol edin ve tekrar deneyin'
failed: Kayıt başarısız oldu
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Hatalı veri türü
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 90b82d772..4d9a08fc3 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -39,6 +39,8 @@ uk:
email_already_exists: 'Ви вже зареєстровані з адресою %{email}'
invalid_params: 'Неправильно, будь ласка, перевірте параметри реєстрації та повторіть спробу'
failed: Помилка реєстрації
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Некоректний тип даних
diff --git a/config/locales/ur.yml b/config/locales/ur.yml
index 76c0a93d0..366c187de 100644
--- a/config/locales/ur.yml
+++ b/config/locales/ur.yml
@@ -39,6 +39,8 @@ ur:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/ur_IN.yml b/config/locales/ur_IN.yml
index 869c4fac9..b6cc72296 100644
--- a/config/locales/ur_IN.yml
+++ b/config/locales/ur_IN.yml
@@ -39,6 +39,8 @@ ur:
email_already_exists: 'You have already signed up for an account with %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Signup failed
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 593f5d2dd..31524c6d2 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -39,6 +39,8 @@ vi:
email_already_exists: 'Bạn đã đăng ký một tài khoản với %{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: Đăng ký thât bại
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Kiểu dữ liệu không hợp lệ
diff --git a/config/locales/zh_CN.yml b/config/locales/zh_CN.yml
index a4db743d9..6cf6e7aea 100644
--- a/config/locales/zh_CN.yml
+++ b/config/locales/zh_CN.yml
@@ -39,6 +39,8 @@ zh_CN:
email_already_exists: '您已经注册了 %{email} 的帐户'
invalid_params: '无效,请检查注册参数并重试'
failed: 注册失败
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: 错误的数据类型
diff --git a/config/locales/zh_TW.yml b/config/locales/zh_TW.yml
index 35182bf8f..636b5231f 100644
--- a/config/locales/zh_TW.yml
+++ b/config/locales/zh_TW.yml
@@ -39,6 +39,8 @@ zh_TW:
email_already_exists: '您已經註冊了一個帳號%{email}'
invalid_params: 'Invalid, please check the signup paramters and try again'
failed: 註冊失敗。
+ assignment_policy:
+ not_found: Assignment policy not found
data_import:
data_type:
invalid: Invalid data type
From b44d178acc58e10212d8c3b5f20bfcf5e0a4a280 Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Wed, 27 Aug 2025 15:12:48 +0530
Subject: [PATCH 042/132] chore: Replace copilot input with auto-expanding
textarea (#12296)
---
.../components-next/copilot/CopilotInput.vue | 34 ++++++++++++++++---
.../components/copilot/CopilotContainer.vue | 33 ++++++++++--------
2 files changed, 48 insertions(+), 19 deletions(-)
diff --git a/app/javascript/dashboard/components-next/copilot/CopilotInput.vue b/app/javascript/dashboard/components-next/copilot/CopilotInput.vue
index c8f1a0056..852506a4c 100644
--- a/app/javascript/dashboard/components-next/copilot/CopilotInput.vue
+++ b/app/javascript/dashboard/components-next/copilot/CopilotInput.vue
@@ -1,25 +1,49 @@
{{ $t('INBOX_MGMT.FINISH.WHATSAPP_QR_INSTRUCTION') }}
-
{{ $t('INBOX_MGMT.FINISH.MESSENGER_QR_INSTRUCTION') }}
-
{{ $t('INBOX_MGMT.FINISH.TELEGRAM_QR_INSTRUCTION') }}
-
From 0c2ab7f5e7b349b2aca1529ca14c7c9b7554f257 Mon Sep 17 00:00:00 2001
From: Pranav
Date: Wed, 27 Aug 2025 21:40:28 -0700
Subject: [PATCH 046/132] feat(ee): Setup advanced, performant message search
(#12193)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
We now support searching within the actual message content, email
subject lines, and audio transcriptions. This enables a faster, more
accurate search experience going forward. Unlike the standard message
search, which is limited to the last 3 months, this search has no time
restrictions.
The search engine also accounts for small variations in queries. Minor
spelling mistakes, such as searching for slck instead of Slack, will
still return the correct results. It also ignores differences in accents
and diacritics, so searching for Deja vu will match content containing
Déjà vu.
We can also refine searches in the future by criteria such as:
- Searching within a specific inbox
- Filtering by sender or recipient
- Limiting to messages sent by an agent
Fixes https://github.com/chatwoot/chatwoot/issues/11656
Fixes https://github.com/chatwoot/chatwoot/issues/10669
Fixes https://github.com/chatwoot/chatwoot/issues/5910
---
Rake tasks to reindex all the messages.
```sh
bundle exec rake search:all
```
Rake task to reindex messages from one account only
```sh
bundle exec rake search:account ACCOUNT_ID=1
```
---
Gemfile | 4 ++
Gemfile.lock | 12 +++++
Rakefile | 4 ++
.../search/components/MessageContent.vue | 32 ++++++++---
.../components/SearchResultMessagesList.vue | 2 +-
app/models/message.rb | 23 +++++++-
app/services/search_service.rb | 10 ++++
.../v1/accounts/search/_message.json.jbuilder | 13 +----
config/features.yml | 5 ++
config/initializers/searchkick.rb | 14 +++++
.../app/services/enterprise/search_service.rb | 15 ++++++
.../messages/audio_transcription_service.rb | 4 ++
.../app/services/messages/reindex_service.rb | 15 ++++++
enterprise/lib/tasks.rb | 4 ++
enterprise/lib/tasks/search.rake | 49 +++++++++++++++++
lib/chatwoot_app.rb | 4 ++
spec/models/message_spec.rb | 53 +++++++++++++++++++
17 files changed, 242 insertions(+), 21 deletions(-)
create mode 100644 config/initializers/searchkick.rb
create mode 100644 enterprise/app/services/enterprise/search_service.rb
create mode 100644 enterprise/app/services/messages/reindex_service.rb
create mode 100644 enterprise/lib/tasks.rb
create mode 100644 enterprise/lib/tasks/search.rake
diff --git a/Gemfile b/Gemfile
index 615267a77..1148251af 100644
--- a/Gemfile
+++ b/Gemfile
@@ -62,6 +62,10 @@ gem 'redis-namespace'
# super fast record imports in bulk
gem 'activerecord-import'
+gem 'searchkick'
+gem 'opensearch-ruby'
+gem 'faraday_middleware-aws-sigv4'
+
##--- gems for server & infra configuration ---##
gem 'dotenv-rails', '>= 3.0.0'
gem 'foreman'
diff --git a/Gemfile.lock b/Gemfile.lock
index 8fa38a31e..26814db59 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -299,6 +299,9 @@ GEM
net-http-persistent (~> 4.0)
faraday-retry (2.2.1)
faraday (~> 2.0)
+ faraday_middleware-aws-sigv4 (1.0.1)
+ aws-sigv4 (~> 1.0)
+ faraday (>= 2.0, < 3)
fast-mcp (1.5.0)
addressable (~> 2.8)
base64
@@ -601,6 +604,9 @@ GEM
omniauth-rails_csrf_protection (1.0.2)
actionpack (>= 4.2)
omniauth (~> 2.0)
+ opensearch-ruby (3.4.0)
+ faraday (>= 1.0, < 3)
+ multi_json (>= 1.0)
openssl (3.2.0)
orm_adapter (0.5.0)
os (1.1.4)
@@ -802,6 +808,9 @@ GEM
parser
scss_lint (0.60.0)
sass (~> 3.5, >= 3.5.5)
+ searchkick (5.5.2)
+ activemodel (>= 7.1)
+ hashie
securerandom (0.4.1)
seed_dump (3.3.1)
activerecord (>= 4)
@@ -996,6 +1005,7 @@ DEPENDENCIES
facebook-messenger
factory_bot_rails (>= 6.4.3)
faker
+ faraday_middleware-aws-sigv4
fcm
flag_shih_tzu
foreman
@@ -1036,6 +1046,7 @@ DEPENDENCIES
omniauth-google-oauth2 (>= 1.1.3)
omniauth-oauth2
omniauth-rails_csrf_protection (~> 1.0, >= 1.0.2)
+ opensearch-ruby
pg
pg_search
pgvector
@@ -1064,6 +1075,7 @@ DEPENDENCIES
ruby_llm-schema
scout_apm
scss_lint
+ searchkick
seed_dump
sentry-rails (>= 5.19.0)
sentry-ruby
diff --git a/Rakefile b/Rakefile
index e85f91391..591d2c4c6 100644
--- a/Rakefile
+++ b/Rakefile
@@ -4,3 +4,7 @@
require_relative 'config/application'
Rails.application.load_tasks
+
+# Load Enterprise Edition rake tasks if they exist
+enterprise_tasks_path = Rails.root.join('enterprise/lib/tasks.rb').to_s
+require enterprise_tasks_path if File.exist?(enterprise_tasks_path)
diff --git a/app/javascript/dashboard/modules/search/components/MessageContent.vue b/app/javascript/dashboard/modules/search/components/MessageContent.vue
index fef35ac89..9ec425919 100644
--- a/app/javascript/dashboard/modules/search/components/MessageContent.vue
+++ b/app/javascript/dashboard/modules/search/components/MessageContent.vue
@@ -1,5 +1,5 @@
From 99997a701a18cf8db137d735dade1b3c6d5e7f02 Mon Sep 17 00:00:00 2001
From: Muhsin Keloth
Date: Fri, 29 Aug 2025 16:13:25 +0530
Subject: [PATCH 048/132] feat: Add twilio content templates (#12277)
Implements comprehensive Twilio WhatsApp content template support (Phase
1) enabling text, media, and quick reply templates with proper parameter
conversion, sync capabilities, and feature flag protection.
### Features Implemented
**Template Types Supported**
- Basic Text Templates: Simple text with variables ({{1}}, {{2}})
- Media Templates: Image/Video/Document templates with text variables
- Quick Reply Templates: Interactive button templates
- Phase 2 (Future): List Picker, Call-to-Action, Catalog, Carousel,
Authentication templates
**Template Synchronization**
- API Endpoint: POST
/api/v1/accounts/{account_id}/inboxes/{inbox_id}/sync_templates
- Background Job: Channels::Twilio::TemplatesSyncJob
- Storage: JSONB format in channel_twilio_sms.content_templates
- Auto-categorization: UTILITY, MARKETING, AUTHENTICATION categories
### Template Examples Tested
#### Text template
```
{ "name": "greet", "language": "en" }
```
#### Template with variables
```
{ "name": "order_status", "parameters": [{"type": "body", "parameters": [{"text": "John"}]}] }
```
#### Media template with image
```
{ "name": "product_showcase", "parameters": [
{"type": "header", "parameters": [{"image": {"link": "image.jpg"}}]},
{"type": "body", "parameters": [{"text": "iPhone"}, {"text": "$999"}]}
]}
```
#### Preview
#### User guide
https://www.chatwoot.com/hc/user-guide/articles/1756195741-twilio-content-templates
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
---
.../components/ActionButtons.vue | 34 ++-
.../components/ComposeNewConversationForm.vue | 29 +-
.../components/ContentTemplateForm.vue | 56 ++++
.../components/ContentTemplateSelector.vue | 124 ++++++++
.../helpers/composeConversationHelper.js | 3 +-
.../ContentTemplateParser.vue | 278 ++++++++++++++++++
.../widgets/WootWriter/ReplyBottomPanel.vue | 16 +-
.../ContentTemplatesModal.vue | 97 ++++++
.../ContentTemplatesPicker.vue | 169 +++++++++++
.../widgets/conversation/ReplyBox.vue | 29 ++
app/javascript/dashboard/helper/URLHelper.js | 20 ++
.../dashboard/helper/specs/URLHelper.spec.js | 55 ++++
.../dashboard/i18n/locale/en/contact.json | 9 +
.../i18n/locale/en/contentTemplates.json | 51 ++++
.../dashboard/i18n/locale/en/index.js | 2 +
.../inbox/settingsPage/ConfigurationPage.vue | 13 +
app/javascript/shared/constants/messages.js | 6 +
app/services/twilio/template_sync_service.rb | 33 ++-
config/features.yml | 1 +
19 files changed, 1001 insertions(+), 24 deletions(-)
create mode 100644 app/javascript/dashboard/components-next/NewConversation/components/ContentTemplateForm.vue
create mode 100644 app/javascript/dashboard/components-next/NewConversation/components/ContentTemplateSelector.vue
create mode 100644 app/javascript/dashboard/components-next/content-templates/ContentTemplateParser.vue
create mode 100644 app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesModal.vue
create mode 100644 app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesPicker.vue
create mode 100644 app/javascript/dashboard/i18n/locale/en/contentTemplates.json
diff --git a/app/javascript/dashboard/components-next/NewConversation/components/ActionButtons.vue b/app/javascript/dashboard/components-next/NewConversation/components/ActionButtons.vue
index 6f2178408..773ebe315 100644
--- a/app/javascript/dashboard/components-next/NewConversation/components/ActionButtons.vue
+++ b/app/javascript/dashboard/components-next/NewConversation/components/ActionButtons.vue
@@ -11,12 +11,14 @@ import { extractTextFromMarkdown } from 'dashboard/helper/editorHelper';
import Button from 'dashboard/components-next/button/Button.vue';
import WhatsAppOptions from './WhatsAppOptions.vue';
+import ContentTemplateSelector from './ContentTemplateSelector.vue';
const props = defineProps({
attachedFiles: { type: Array, default: () => [] },
isWhatsappInbox: { type: Boolean, default: false },
isEmailOrWebWidgetInbox: { type: Boolean, default: false },
isTwilioSmsInbox: { type: Boolean, default: false },
+ isTwilioWhatsAppInbox: { type: Boolean, default: false },
messageTemplates: { type: Array, default: () => [] },
channelType: { type: String, default: '' },
isLoading: { type: Boolean, default: false },
@@ -32,6 +34,7 @@ const emit = defineEmits([
'discard',
'sendMessage',
'sendWhatsappMessage',
+ 'sendTwilioMessage',
'insertEmoji',
'addSignature',
'removeSignature',
@@ -63,6 +66,20 @@ const sendWithSignature = computed(() => {
return fetchSignatureFlagFromUISettings(props.channelType);
});
+const showTwilioContentTemplates = computed(() => {
+ return props.isTwilioWhatsAppInbox && props.inboxId;
+});
+
+const shouldShowEmojiButton = computed(() => {
+ return (
+ !props.isWhatsappInbox && !props.isTwilioWhatsAppInbox && !props.hasNoInbox
+ );
+});
+
+const isRegularMessageMode = computed(() => {
+ return !props.isWhatsappInbox && !props.isTwilioWhatsAppInbox;
+});
+
const setSignature = () => {
if (signatureToApply.value) {
if (sendWithSignature.value) {
@@ -125,7 +142,7 @@ const keyboardEvents = {
action: () => {
if (
isEditorHotKeyEnabled('enter') &&
- !props.isWhatsappInbox &&
+ isRegularMessageMode.value &&
!props.isDropdownActive
) {
emit('sendMessage');
@@ -136,7 +153,7 @@ const keyboardEvents = {
action: () => {
if (
isEditorHotKeyEnabled('cmd_enter') &&
- !props.isWhatsappInbox &&
+ isRegularMessageMode.value &&
!props.isDropdownActive
) {
emit('sendMessage');
@@ -158,8 +175,13 @@ useKeyboardEvents(keyboardEvents);
:message-templates="messageTemplates"
@send-message="emit('sendWhatsappMessage', $event)"
/>
+
@@ -172,7 +194,7 @@ useKeyboardEvents(keyboardEvents);
/>
@@ -199,7 +221,7 @@ useKeyboardEvents(keyboardEvents);
/>
diff --git a/app/javascript/dashboard/components-next/NewConversation/components/ContentTemplateForm.vue b/app/javascript/dashboard/components-next/NewConversation/components/ContentTemplateForm.vue
new file mode 100644
index 000000000..18a219605
--- /dev/null
+++ b/app/javascript/dashboard/components-next/NewConversation/components/ContentTemplateForm.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/NewConversation/components/ContentTemplateSelector.vue b/app/javascript/dashboard/components-next/NewConversation/components/ContentTemplateSelector.vue
new file mode 100644
index 000000000..684429182
--- /dev/null
+++ b/app/javascript/dashboard/components-next/NewConversation/components/ContentTemplateSelector.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ template.friendly_name
+ }}
+
+
+ {{ template.body || t('CONTENT_TEMPLATES.PICKER.NO_CONTENT') }}
+
+
+
+
+ {{ t('COMPOSE_NEW_CONVERSATION.FORM.TWILIO_OPTIONS.EMPTY_STATE') }}
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/NewConversation/helpers/composeConversationHelper.js b/app/javascript/dashboard/components-next/NewConversation/helpers/composeConversationHelper.js
index cb79752f7..482988581 100644
--- a/app/javascript/dashboard/components-next/NewConversation/helpers/composeConversationHelper.js
+++ b/app/javascript/dashboard/components-next/NewConversation/helpers/composeConversationHelper.js
@@ -25,7 +25,7 @@ export const generateLabelForContactableInboxesList = ({
channelType === INBOX_TYPES.TWILIO ||
channelType === INBOX_TYPES.WHATSAPP
) {
- return `${name} (${phoneNumber})`;
+ return phoneNumber ? `${name} (${phoneNumber})` : name;
}
return name;
};
@@ -53,6 +53,7 @@ const transformInbox = ({
email,
phoneNumber,
channelType,
+ medium,
...rest,
});
diff --git a/app/javascript/dashboard/components-next/content-templates/ContentTemplateParser.vue b/app/javascript/dashboard/components-next/content-templates/ContentTemplateParser.vue
new file mode 100644
index 000000000..4d526d558
--- /dev/null
+++ b/app/javascript/dashboard/components-next/content-templates/ContentTemplateParser.vue
@@ -0,0 +1,278 @@
+
+
+
+
+
+
+
+ {{ template.friendly_name }}
+
+
+ {{ languageLabel }}
+
+
+
+
+
+
+ {{ renderedTemplate }}
+
+
+
+
+
+ {{ categoryLabel }}
+
+
+
+
+
+
+
+ {{ $t('CONTENT_TEMPLATES.PARSER.MEDIA_URL_LABEL') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('CONTENT_TEMPLATES.PARSER.VARIABLES_LABEL') }}
+
+
+
+
+
+
+
+ {{ $t('CONTENT_TEMPLATES.PARSER.FORM_ERROR_MESSAGE') }}
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
index 7bc40c490..f74436c65 100644
--- a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
+++ b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
@@ -95,6 +95,10 @@ export default {
type: Boolean,
default: false,
},
+ enableContentTemplates: {
+ type: Boolean,
+ default: false,
+ },
conversationId: {
type: Number,
required: true,
@@ -121,6 +125,7 @@ export default {
'toggleInsertArticle',
'toggleEditor',
'selectWhatsappTemplate',
+ 'selectContentTemplate',
],
setup() {
const { setSignatureFlagForInbox, fetchSignatureFlagFromUISettings } =
@@ -347,6 +352,15 @@ export default {
sm
@click="$emit('selectWhatsappTemplate')"
/>
+
diff --git a/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesModal.vue b/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesModal.vue
new file mode 100644
index 000000000..7ae95fe59
--- /dev/null
+++ b/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesModal.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesPicker.vue b/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesPicker.vue
new file mode 100644
index 000000000..89d82fe0c
--- /dev/null
+++ b/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesPicker.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('CONTENT_TEMPLATES.PICKER.NO_TEMPLATES_FOUND') }}
+ {{ query }}
+
+
+
+
+ {{ t('CONTENT_TEMPLATES.PICKER.NO_TEMPLATES_AVAILABLE') }}
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
index 01c81d47e..cedf502a6 100644
--- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
@@ -27,6 +27,7 @@ import {
replaceVariablesInMessage,
} from '@chatwoot/utils';
import WhatsappTemplates from './WhatsappTemplates/Modal.vue';
+import ContentTemplates from './ContentTemplates/ContentTemplatesModal.vue';
import { MESSAGE_MAX_LENGTH } from 'shared/helpers/MessageTypeHelper';
import inboxMixin, { INBOX_FEATURES } from 'shared/mixins/inboxMixin';
import { trimContent, debounce, getRecipients } from '@chatwoot/utils';
@@ -61,6 +62,7 @@ export default {
ReplyToMessage,
ReplyTopPanel,
ResizableTextArea,
+ ContentTemplates,
WhatsappTemplates,
WootMessageEditor,
},
@@ -109,6 +111,7 @@ export default {
toEmails: '',
doAutoSaveDraft: () => {},
showWhatsAppTemplatesModal: false,
+ showContentTemplatesModal: false,
updateEditorSelectionWith: '',
undefinedVariableMessage: '',
showMentions: false,
@@ -187,6 +190,9 @@ export default {
showWhatsappTemplates() {
return this.isAWhatsAppCloudChannel && !this.isPrivate;
},
+ showContentTemplates() {
+ return this.isATwilioWhatsAppChannel && !this.isPrivate;
+ },
isPrivate() {
if (this.currentChat.can_reply || this.isAWhatsAppChannel) {
return this.isOnPrivateNote;
@@ -659,6 +665,12 @@ export default {
hideWhatsappTemplatesModal() {
this.showWhatsAppTemplatesModal = false;
},
+ openContentTemplateModal() {
+ this.showContentTemplatesModal = true;
+ },
+ hideContentTemplatesModal() {
+ this.showContentTemplatesModal = false;
+ },
onClickSelfAssign() {
const {
account_id,
@@ -774,6 +786,13 @@ export default {
});
this.hideWhatsappTemplatesModal();
},
+ async onSendContentTemplateReply(messagePayload) {
+ this.sendMessage({
+ conversationId: this.currentChat.id,
+ ...messagePayload,
+ });
+ this.hideContentTemplatesModal();
+ },
replaceText(message) {
if (this.sendWithSignature && !this.private) {
// if signature is enabled, append it to the message
@@ -1217,6 +1236,7 @@ export default {
:conversation-id="conversationId"
:enable-multiple-file-upload="enableMultipleFileUpload"
:enable-whats-app-templates="showWhatsappTemplates"
+ :enable-content-templates="showContentTemplates"
:inbox="inbox"
:is-on-private-note="isOnPrivateNote"
:is-recording-audio="isRecordingAudio"
@@ -1239,6 +1259,7 @@ export default {
:portal-slug="connectedPortalSlug"
:new-conversation-modal-active="newConversationModalActive"
@select-whatsapp-template="openWhatsappTemplateModal"
+ @select-content-template="openContentTemplateModal"
@toggle-editor="toggleRichContentEditor"
@replace-text="replaceText"
@toggle-insert-article="toggleInsertArticle"
@@ -1251,6 +1272,14 @@ export default {
@cancel="hideWhatsappTemplatesModal"
/>
+
+
{
return null;
}
};
+
+/**
+ * Extracts filename from a URL
+ * @param {string} url - The URL to extract filename from
+ * @returns {string} - The extracted filename or original URL if extraction fails
+ */
+export const extractFilenameFromUrl = url => {
+ if (!url || typeof url !== 'string') return url;
+
+ try {
+ const urlObj = new URL(url);
+ const pathname = urlObj.pathname;
+ const filename = pathname.split('/').pop();
+ return filename || url;
+ } catch (error) {
+ // If URL parsing fails, try to extract filename using regex
+ const match = url.match(/\/([^/?#]+)(?:[?#]|$)/);
+ return match ? match[1] : url;
+ }
+};
diff --git a/app/javascript/dashboard/helper/specs/URLHelper.spec.js b/app/javascript/dashboard/helper/specs/URLHelper.spec.js
index 0f6d631b1..3a286d8af 100644
--- a/app/javascript/dashboard/helper/specs/URLHelper.spec.js
+++ b/app/javascript/dashboard/helper/specs/URLHelper.spec.js
@@ -7,6 +7,7 @@ import {
hasValidAvatarUrl,
timeStampAppendedURL,
getHostNameFromURL,
+ extractFilenameFromUrl,
} from '../URLHelper';
describe('#URL Helpers', () => {
@@ -263,4 +264,58 @@ describe('#URL Helpers', () => {
expect(getHostNameFromURL('https://chatwoot.help')).toBe('chatwoot.help');
});
});
+
+ describe('extractFilenameFromUrl', () => {
+ it('should extract filename from a valid URL', () => {
+ expect(
+ extractFilenameFromUrl('https://example.com/path/to/file.jpg')
+ ).toBe('file.jpg');
+ expect(extractFilenameFromUrl('https://example.com/image.png')).toBe(
+ 'image.png'
+ );
+ expect(
+ extractFilenameFromUrl(
+ 'https://example.com/folder/document.pdf?query=1'
+ )
+ ).toBe('document.pdf');
+ expect(
+ extractFilenameFromUrl('https://example.com/file.txt#section')
+ ).toBe('file.txt');
+ });
+
+ it('should handle URLs without filename', () => {
+ expect(extractFilenameFromUrl('https://example.com/')).toBe(
+ 'https://example.com/'
+ );
+ expect(extractFilenameFromUrl('https://example.com')).toBe(
+ 'https://example.com'
+ );
+ });
+
+ it('should handle invalid URLs gracefully', () => {
+ expect(extractFilenameFromUrl('not-a-url/file.txt')).toBe('file.txt');
+ expect(extractFilenameFromUrl('invalid-url')).toBe('invalid-url');
+ });
+
+ it('should handle edge cases', () => {
+ expect(extractFilenameFromUrl('')).toBe('');
+ expect(extractFilenameFromUrl(null)).toBe(null);
+ expect(extractFilenameFromUrl(undefined)).toBe(undefined);
+ expect(extractFilenameFromUrl(123)).toBe(123);
+ });
+
+ it('should handle URLs with query parameters and fragments', () => {
+ expect(
+ extractFilenameFromUrl(
+ 'https://example.com/file.jpg?size=large&format=png'
+ )
+ ).toBe('file.jpg');
+ expect(
+ extractFilenameFromUrl('https://example.com/file.pdf#page=1')
+ ).toBe('file.pdf');
+ expect(
+ extractFilenameFromUrl('https://example.com/file.doc?v=1#section')
+ ).toBe('file.doc');
+ });
+ });
});
diff --git a/app/javascript/dashboard/i18n/locale/en/contact.json b/app/javascript/dashboard/i18n/locale/en/contact.json
index a5c9549f1..a7db8480f 100644
--- a/app/javascript/dashboard/i18n/locale/en/contact.json
+++ b/app/javascript/dashboard/i18n/locale/en/contact.json
@@ -612,6 +612,15 @@
"SEND_MESSAGE": "Send message"
}
},
+ "TWILIO_OPTIONS": {
+ "LABEL": "Select template",
+ "SEARCH_PLACEHOLDER": "Search templates",
+ "EMPTY_STATE": "No templates found",
+ "TEMPLATE_PARSER": {
+ "BACK": "Go back",
+ "SEND_MESSAGE": "Send message"
+ }
+ },
"ACTION_BUTTONS": {
"DISCARD": "Discard",
"SEND": "Send ({keyCode})"
diff --git a/app/javascript/dashboard/i18n/locale/en/contentTemplates.json b/app/javascript/dashboard/i18n/locale/en/contentTemplates.json
new file mode 100644
index 000000000..a9b1d54c4
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/en/contentTemplates.json
@@ -0,0 +1,51 @@
+{
+ "CONTENT_TEMPLATES": {
+ "MODAL": {
+ "TITLE": "Twilio Templates",
+ "SUBTITLE": "Select the Twilio template you want to send",
+ "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}"
+ },
+ "PICKER": {
+ "SEARCH_PLACEHOLDER": "Search Templates",
+ "NO_TEMPLATES_FOUND": "No templates found for",
+ "NO_CONTENT": "No content",
+ "HEADER": "Header",
+ "BODY": "Body",
+ "FOOTER": "Footer",
+ "BUTTONS": "Buttons",
+ "CATEGORY": "Category",
+ "MEDIA_CONTENT": "Media Content",
+ "MEDIA_CONTENT_FALLBACK": "media content",
+ "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.",
+ "REFRESH_BUTTON": "Refresh templates",
+ "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.",
+ "REFRESH_ERROR": "Failed to refresh templates. Please try again.",
+ "LABELS": {
+ "LANGUAGE": "Language",
+ "TEMPLATE_BODY": "Template Body",
+ "CATEGORY": "Category"
+ },
+ "TYPES": {
+ "MEDIA": "Media",
+ "QUICK_REPLY": "Quick Reply",
+ "TEXT": "Text"
+ }
+ },
+ "PARSER": {
+ "VARIABLES_LABEL": "Variables",
+ "LANGUAGE": "Language",
+ "CATEGORY": "Category",
+ "VARIABLE_PLACEHOLDER": "Enter {variable} value",
+ "GO_BACK_LABEL": "Go Back",
+ "SEND_MESSAGE_LABEL": "Send Message",
+ "FORM_ERROR_MESSAGE": "Please fill all variables before sending",
+ "MEDIA_HEADER_LABEL": "{type} Header",
+ "MEDIA_URL_LABEL": "Enter full media URL",
+ "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg"
+ },
+ "FORM": {
+ "BACK_BUTTON": "Back",
+ "SEND_MESSAGE_BUTTON": "Send Message"
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/en/index.js b/app/javascript/dashboard/i18n/locale/en/index.js
index 213387d0c..bc4a8312a 100644
--- a/app/javascript/dashboard/i18n/locale/en/index.js
+++ b/app/javascript/dashboard/i18n/locale/en/index.js
@@ -35,6 +35,7 @@ import signup from './signup.json';
import sla from './sla.json';
import teamsSettings from './teamsSettings.json';
import whatsappTemplates from './whatsappTemplates.json';
+import contentTemplates from './contentTemplates.json';
export default {
...advancedFilters,
@@ -74,4 +75,5 @@ export default {
...sla,
...teamsSettings,
...whatsappTemplates,
+ ...contentTemplates,
};
diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue
index dd7be76aa..9d35541ff 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue
@@ -125,6 +125,19 @@ export default {
>
+
+
+
+ {{ $t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_TEMPLATES_SYNC_BUTTON') }}
+
+
+
Date: Fri, 29 Aug 2025 20:46:52 +0200
Subject: [PATCH 049/132] chore: Refactor UTM params to stay compliant with
standards (#12312)
We were using UTM params on various branding urls which weren't
compliant to standard utm params and hence were ignored by analytics
tooling. this PR ensures that the params stays compliant with defined
standard
ref: https://en.wikipedia.org/wiki/UTM_parameters
## Changes
- updated utm tags on widget and survey urls
- added utm on helpcenter branding
---------
Co-authored-by: Muhsin Keloth
---
app/helpers/portal_helper.rb | 11 ++++++
app/javascript/shared/components/Branding.vue | 12 ++++---
.../public/api/v1/portals/_footer.html.erb | 12 +++----
spec/helpers/portal_helper_spec.rb | 36 +++++++++++++++++++
4 files changed, 60 insertions(+), 11 deletions(-)
diff --git a/app/helpers/portal_helper.rb b/app/helpers/portal_helper.rb
index 3ed303556..e98f0a72d 100644
--- a/app/helpers/portal_helper.rb
+++ b/app/helpers/portal_helper.rb
@@ -74,6 +74,17 @@ module PortalHelper
end
end
+ def generate_portal_brand_url(brand_url, referer)
+ url = URI.parse(brand_url.to_s)
+ query_params = Rack::Utils.parse_query(url.query)
+ query_params['utm_medium'] = 'helpcenter'
+ query_params['utm_campaign'] = 'branding'
+ query_params['utm_source'] = URI.parse(referer).host if referer.present? && referer.match?(URI::DEFAULT_PARSER.make_regexp)
+
+ url.query = query_params.to_query
+ url.to_s
+ end
+
def render_category_content(content)
ChatwootMarkdownRenderer.new(content).render_markdown_to_plain_text
end
diff --git a/app/javascript/shared/components/Branding.vue b/app/javascript/shared/components/Branding.vue
index 9ca976d80..2f1a8d5d0 100644
--- a/app/javascript/shared/components/Branding.vue
+++ b/app/javascript/shared/components/Branding.vue
@@ -33,13 +33,15 @@ export default {
brandRedirectURL() {
try {
const referrerHost = this.$store.getters['appConfig/getReferrerHost'];
- const baseURL = `${this.globalConfig.widgetBrandURL}?utm_source=${
- referrerHost ? 'widget_branding' : 'survey_branding'
- }`;
+ const url = new URL(this.globalConfig.widgetBrandURL);
if (referrerHost) {
- return `${baseURL}&utm_referrer=${referrerHost}`;
+ url.searchParams.set('utm_source', referrerHost);
+ url.searchParams.set('utm_medium', 'widget');
+ } else {
+ url.searchParams.set('utm_medium', 'survey');
}
- return baseURL;
+ url.searchParams.set('utm_campaign', 'branding');
+ return url.toString();
} catch (e) {
// Suppressing the error as getter is not defined in some cases
}
diff --git a/app/views/public/api/v1/portals/_footer.html.erb b/app/views/public/api/v1/portals/_footer.html.erb
index 8de87b8f2..bfba6235b 100644
--- a/app/views/public/api/v1/portals/_footer.html.erb
+++ b/app/views/public/api/v1/portals/_footer.html.erb
@@ -8,12 +8,12 @@
alt="<%= @global_config['BRAND_NAME'] %>"
src="<%= @global_config['LOGO_THUMBNAIL'] %>"
/>
-
- <%= I18n.t('public_portal.footer.made_with') %>
-
- <%= @global_config['BRAND_NAME'] %>
-
-
+
+ <%= I18n.t('public_portal.footer.made_with') %>
+
+ <%= @global_config['BRAND_NAME'] %>
+
+
diff --git a/spec/helpers/portal_helper_spec.rb b/spec/helpers/portal_helper_spec.rb
index 241b4c6dd..d55c83be7 100644
--- a/spec/helpers/portal_helper_spec.rb
+++ b/spec/helpers/portal_helper_spec.rb
@@ -291,4 +291,40 @@ describe PortalHelper do
end
end
end
+
+ describe '#generate_portal_brand_url' do
+ it 'builds URL with UTM params and referer host as source (happy path)' do
+ result = helper.generate_portal_brand_url('https://brand.example.com', 'https://app.chatwoot.com/some/page')
+ uri = URI.parse(result)
+ params = Rack::Utils.parse_query(uri.query)
+ expect(uri.scheme).to eq('https')
+ expect(uri.host).to eq('brand.example.com')
+ expect(params['utm_medium']).to eq('helpcenter')
+ expect(params['utm_campaign']).to eq('branding')
+ expect(params['utm_source']).to eq('app.chatwoot.com')
+ end
+
+ it 'returns utm string when brand_url is nil or empty' do
+ expect(helper.generate_portal_brand_url(nil,
+ 'https://app.chatwoot.com')).to eq(
+ '?utm_campaign=branding&utm_medium=helpcenter&utm_source=app.chatwoot.com'
+ )
+ expect(helper.generate_portal_brand_url('',
+ 'https://app.chatwoot.com')).to eq(
+ '?utm_campaign=branding&utm_medium=helpcenter&utm_source=app.chatwoot.com'
+ )
+ end
+
+ it 'omits utm_source when referer is nil or invalid' do
+ r1 = helper.generate_portal_brand_url('https://brand.example.com', nil)
+ p1 = Rack::Utils.parse_query(URI.parse(r1).query)
+ expect(p1.key?('utm_source')).to be(false)
+
+ r2 = helper.generate_portal_brand_url('https://brand.example.com', '::not-a-valid-url')
+ p2 = Rack::Utils.parse_query(URI.parse(r2).query)
+ expect(p2.key?('utm_source')).to be(false)
+ expect(p2['utm_medium']).to eq('helpcenter')
+ expect(p2['utm_campaign']).to eq('branding')
+ end
+ end
end
From f4643116df850764ecdb0aecd0276a96cf3e2266 Mon Sep 17 00:00:00 2001
From: Pranav
Date: Fri, 29 Aug 2025 15:10:56 -0700
Subject: [PATCH 050/132] feat: Run assignment every 15 minutes (#12334)
Currently, auto-assignment runs only during conversation creation or
update events. If no agents are online when new conversations arrive,
those conversations remain unassigned.
With this change, unassigned conversations will be automatically
assigned once agents become available. The job runs every 15 minutes and
uses a fair distribution threshold of 100 to prevent a large number of
conversations from being assigned to a single available agent. This will
be customizable later.
---
app/jobs/inboxes/bulk_auto_assignment_job.rb | 47 ++++++++++
config/schedule.yml | 7 ++
lib/limits.rb | 1 +
.../inboxes/bulk_auto_assignment_job_spec.rb | 93 +++++++++++++++++++
4 files changed, 148 insertions(+)
create mode 100644 app/jobs/inboxes/bulk_auto_assignment_job.rb
create mode 100644 spec/jobs/inboxes/bulk_auto_assignment_job_spec.rb
diff --git a/app/jobs/inboxes/bulk_auto_assignment_job.rb b/app/jobs/inboxes/bulk_auto_assignment_job.rb
new file mode 100644
index 000000000..9e808648b
--- /dev/null
+++ b/app/jobs/inboxes/bulk_auto_assignment_job.rb
@@ -0,0 +1,47 @@
+class Inboxes::BulkAutoAssignmentJob < ApplicationJob
+ queue_as :scheduled_jobs
+ include BillingHelper
+
+ def perform
+ Account.feature_assignment_v2.find_each do |account|
+ if should_skip_auto_assignment?(account)
+ Rails.logger.info("Skipping auto assignment for account #{account.id}")
+ next
+ end
+
+ account.inboxes.where(enable_auto_assignment: true).find_each do |inbox|
+ process_assignment(inbox)
+ end
+ end
+ end
+
+ private
+
+ def process_assignment(inbox)
+ allowed_agent_ids = inbox.member_ids_with_assignment_capacity
+
+ if allowed_agent_ids.blank?
+ Rails.logger.info("No agents available to assign conversation to inbox #{inbox.id}")
+ return
+ end
+
+ assign_conversations(inbox, allowed_agent_ids)
+ end
+
+ def assign_conversations(inbox, allowed_agent_ids)
+ unassigned_conversations = inbox.conversations.unassigned.open.limit(Limits::AUTO_ASSIGNMENT_BULK_LIMIT)
+ unassigned_conversations.find_each do |conversation|
+ ::AutoAssignment::AgentAssignmentService.new(
+ conversation: conversation,
+ allowed_agent_ids: allowed_agent_ids
+ ).perform
+ Rails.logger.info("Assigned conversation #{conversation.id} to agent #{allowed_agent_ids.first}")
+ end
+ end
+
+ def should_skip_auto_assignment?(account)
+ return false unless ChatwootApp.chatwoot_cloud?
+
+ default_plan?(account)
+ end
+end
diff --git a/config/schedule.yml b/config/schedule.yml
index c45d395bf..b5b21b4ce 100644
--- a/config/schedule.yml
+++ b/config/schedule.yml
@@ -46,3 +46,10 @@ delete_accounts_job:
cron: '0 1 * * *'
class: 'Internal::DeleteAccountsJob'
queue: scheduled_jobs
+
+# executed every 15 minutes
+# to assign unassigned conversations for all inboxes
+bulk_auto_assignment_job:
+ cron: '*/15 * * * *'
+ class: 'Inboxes::BulkAutoAssignmentJob'
+ queue: scheduled_jobs
diff --git a/lib/limits.rb b/lib/limits.rb
index 5a50f2f8f..7a2371207 100644
--- a/lib/limits.rb
+++ b/lib/limits.rb
@@ -5,6 +5,7 @@ module Limits
OUT_OF_OFFICE_MESSAGE_MAX_LENGTH = 10_000
GREETING_MESSAGE_MAX_LENGTH = 10_000
CATEGORIES_PER_PAGE = 1000
+ AUTO_ASSIGNMENT_BULK_LIMIT = 100
def self.conversation_message_per_minute_limit
ENV.fetch('CONVERSATION_MESSAGE_PER_MINUTE_LIMIT', '200').to_i
diff --git a/spec/jobs/inboxes/bulk_auto_assignment_job_spec.rb b/spec/jobs/inboxes/bulk_auto_assignment_job_spec.rb
new file mode 100644
index 000000000..5e7e3d7cc
--- /dev/null
+++ b/spec/jobs/inboxes/bulk_auto_assignment_job_spec.rb
@@ -0,0 +1,93 @@
+require 'rails_helper'
+
+RSpec.describe Inboxes::BulkAutoAssignmentJob do
+ let(:account) { create(:account, custom_attributes: { 'plan_name' => 'Startups' }) }
+ let(:agent) { create(:user, account: account, role: :agent, auto_offline: false) }
+ let(:inbox) { create(:inbox, account: account) }
+ let!(:conversation) { create(:conversation, account: account, inbox: inbox, assignee: nil, status: :open) }
+ let(:assignment_service) { double }
+
+ describe '#perform' do
+ before do
+ allow(assignment_service).to receive(:perform)
+ end
+
+ context 'when inbox has inbox members' do
+ before do
+ create(:inbox_member, user: agent, inbox: inbox)
+ account.enable_features!('assignment_v2')
+ inbox.update!(enable_auto_assignment: true)
+ end
+
+ it 'assigns unassigned conversations in enabled inboxes' do
+ allow(AutoAssignment::AgentAssignmentService).to receive(:new).with(
+ conversation: conversation,
+ allowed_agent_ids: [agent.id]
+ ).and_return(assignment_service)
+
+ described_class.perform_now
+ expect(AutoAssignment::AgentAssignmentService).to have_received(:new).with(
+ conversation: conversation,
+ allowed_agent_ids: [agent.id]
+ )
+ end
+
+ it 'skips inboxes with auto assignment disabled' do
+ inbox.update!(enable_auto_assignment: false)
+ allow(AutoAssignment::AgentAssignmentService).to receive(:new)
+
+ described_class.perform_now
+
+ expect(AutoAssignment::AgentAssignmentService).not_to have_received(:new).with(
+ conversation: conversation,
+ allowed_agent_ids: [agent.id]
+ )
+ end
+
+ context 'when account is on default plan in chatwoot cloud' do
+ before do
+ account.update!(custom_attributes: {})
+ InstallationConfig.create(name: 'CHATWOOT_CLOUD_PLANS', value: [{ 'name' => 'default' }])
+ allow(ChatwootApp).to receive(:chatwoot_cloud?).and_return(true)
+ end
+
+ it 'skips auto assignment' do
+ allow(Rails.logger).to receive(:info)
+ expect(Rails.logger).to receive(:info).with("Skipping auto assignment for account #{account.id}")
+
+ allow(AutoAssignment::AgentAssignmentService).to receive(:new)
+ expect(AutoAssignment::AgentAssignmentService).not_to receive(:new)
+
+ described_class.perform_now
+ end
+ end
+ end
+
+ context 'when inbox has no members' do
+ before do
+ account.enable_features!('assignment_v2')
+ inbox.update!(enable_auto_assignment: true)
+ end
+
+ it 'does not assign conversations' do
+ allow(Rails.logger).to receive(:info)
+ expect(Rails.logger).to receive(:info).with("No agents available to assign conversation to inbox #{inbox.id}")
+
+ described_class.perform_now
+ end
+ end
+
+ context 'when assignment_v2 feature is disabled' do
+ before do
+ account.disable_features!('assignment_v2')
+ end
+
+ it 'skips auto assignment' do
+ allow(AutoAssignment::AgentAssignmentService).to receive(:new)
+ expect(AutoAssignment::AgentAssignmentService).not_to receive(:new)
+
+ described_class.perform_now
+ end
+ end
+ end
+end
From 0a9edd4c3bee31d6e674edabc21e503a8baf7216 Mon Sep 17 00:00:00 2001
From: Sojan Jose
Date: Sat, 30 Aug 2025 21:09:34 +0200
Subject: [PATCH 051/132] ci(circleci): switch coverage reporting to Qlty orb
(#12337)
---
.circleci/config.yml | 36 ++++++++++++++----------------------
Gemfile | 3 ++-
Gemfile.lock | 16 +++++++++-------
spec/coverage_helper.rb | 8 ++++++++
spec/spec_helper.rb | 2 --
spec/test_helper.rb | 2 --
6 files changed, 33 insertions(+), 34 deletions(-)
create mode 100644 spec/coverage_helper.rb
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 99795db91..65ceda04c 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1,6 +1,7 @@
version: 2.1
orbs:
node: circleci/node@6.1.0
+ qlty-orb: qltysh/qlty-orb@0.0
defaults: &defaults
working_directory: ~/build
@@ -89,14 +90,6 @@ jobs:
command: |
source ~/.rvm/scripts/rvm
bundle install
- # pnpm install
-
- - run:
- name: Download cc-test-reporter
- command: |
- mkdir -p ~/tmp
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ~/tmp/cc-test-reporter
- chmod +x ~/tmp/cc-test-reporter
# Swagger verification
- run:
@@ -108,10 +101,11 @@ jobs:
echo "ERROR: The swagger.json file is not in sync with the yaml specification. Run 'rake swagger:build' and commit 'swagger/swagger.json'."
exit 1
fi
+ mkdir -p ~/tmp
curl -L https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/6.3.0/openapi-generator-cli-6.3.0.jar > ~/tmp/openapi-generator-cli-6.3.0.jar
java -jar ~/tmp/openapi-generator-cli-6.3.0.jar validate -i swagger/swagger.json
- # we remove the FRONTED_URL from the .env before running the tests
+ # Configure environment and database
- run:
name: Database Setup and Configure Environment Variables
command: |
@@ -149,17 +143,11 @@ jobs:
command: pnpm run eslint
- run:
- name: Run frontend tests
+ name: Run frontend tests (with coverage)
command: |
mkdir -p ~/build/coverage/frontend
- ~/tmp/cc-test-reporter before-build
pnpm run test:coverage
- - run:
- name: Code Climate Test Coverage (Frontend)
- command: |
- ~/tmp/cc-test-reporter format-coverage -t lcov -o "~/build/coverage/frontend/codeclimate.frontend_$CIRCLE_NODE_INDEX.json"
-
# Run backend tests
- run:
name: Run backend tests
@@ -167,18 +155,18 @@ jobs:
mkdir -p ~/tmp/test-results/rspec
mkdir -p ~/tmp/test-artifacts
mkdir -p ~/build/coverage/backend
- ~/tmp/cc-test-reporter before-build
TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
- bundle exec rspec --format progress \
+ bundle exec rspec -I ./spec --require coverage_helper --require spec_helper --format progress \
--format RspecJunitFormatter \
--out ~/tmp/test-results/rspec.xml \
-- ${TESTFILES}
no_output_timeout: 30m
- - run:
- name: Code Climate Test Coverage (Backend)
- command: |
- ~/tmp/cc-test-reporter format-coverage -t simplecov -o "~/build/coverage/backend/codeclimate.$CIRCLE_NODE_INDEX.json"
+ # Qlty coverage publish
+ - qlty-orb/coverage_publish:
+ files: |
+ coverage/coverage.json
+ coverage/lcov.info
- run:
name: List coverage directory contents
@@ -189,3 +177,7 @@ jobs:
root: ~/build
paths:
- coverage
+
+ - store_artifacts:
+ path: coverage
+ destination: coverage
diff --git a/Gemfile b/Gemfile
index 1148251af..03d0b62b9 100644
--- a/Gemfile
+++ b/Gemfile
@@ -227,6 +227,7 @@ group :test do
gem 'webmock'
# test profiling
gem 'test-prof'
+ gem 'simplecov_json_formatter', require: false
end
group :development, :test do
@@ -251,7 +252,7 @@ group :development, :test do
gem 'rubocop-factory_bot', require: false
gem 'seed_dump'
gem 'shoulda-matchers'
- gem 'simplecov', '0.17.1', require: false
+ gem 'simplecov', '>= 0.21', require: false
gem 'spring'
gem 'spring-watcher-listen'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index 26814db59..e8bccf54e 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -219,7 +219,7 @@ GEM
diff-lcs (1.5.1)
digest-crc (0.6.5)
rake (>= 12.0.0, < 14.0.0)
- docile (1.4.0)
+ docile (1.4.1)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (3.1.2)
@@ -447,7 +447,7 @@ GEM
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
- json (2.12.0)
+ json (2.13.2)
json_refs (0.1.8)
hana
json_schemer (0.2.24)
@@ -857,11 +857,12 @@ GEM
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
- simplecov (0.17.1)
+ simplecov (0.22.0)
docile (~> 1.1)
- json (>= 1.8, < 3)
- simplecov-html (~> 0.10.0)
- simplecov-html (0.10.2)
+ simplecov-html (~> 0.11)
+ simplecov_json_formatter (~> 0.1)
+ simplecov-html (0.13.2)
+ simplecov_json_formatter (0.1.4)
slack-ruby-client (2.5.2)
faraday (>= 2.0)
faraday-mashify
@@ -1085,7 +1086,8 @@ DEPENDENCIES
sidekiq (>= 7.3.1)
sidekiq-cron (>= 1.12.0)
sidekiq_alive
- simplecov (= 0.17.1)
+ simplecov (>= 0.21)
+ simplecov_json_formatter
slack-ruby-client (~> 2.5.2)
spring
spring-watcher-listen
diff --git a/spec/coverage_helper.rb b/spec/coverage_helper.rb
new file mode 100644
index 000000000..288ab87d7
--- /dev/null
+++ b/spec/coverage_helper.rb
@@ -0,0 +1,8 @@
+require 'simplecov'
+require 'simplecov_json_formatter'
+
+# Configure SimpleCov to emit JSON for Qlty and HTML locally if needed
+SimpleCov.formatter = SimpleCov::Formatter::JSONFormatter
+SimpleCov.start 'rails' do
+ SimpleCov.coverage_dir 'coverage'
+end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 3c275aeb4..d91a22500 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,7 +1,5 @@
-require 'simplecov'
require 'webmock/rspec'
-SimpleCov.start 'rails'
WebMock.disable_net_connect!(allow_localhost: true)
RSpec.configure do |config|
diff --git a/spec/test_helper.rb b/spec/test_helper.rb
index f657305ef..dcb5cdf93 100644
--- a/spec/test_helper.rb
+++ b/spec/test_helper.rb
@@ -1,6 +1,4 @@
ENV['RAILS_ENV'] ||= 'test'
-require 'simplecov'
-SimpleCov.start 'rails'
require File.expand_path('../config/environment', __dir__)
require 'rails/test_help'
From e863a52262abb18f40552447cdeb82888c1aef99 Mon Sep 17 00:00:00 2001
From: Pranav
Date: Sun, 31 Aug 2025 07:01:41 -0700
Subject: [PATCH 052/132] chore: Update account deletion email copy (#12317)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Update the email copies for account deletion emails
## Manual Deletion
## Inactive Deletion
---------
Co-authored-by: Cursor Agent
Co-authored-by: Sojan Jose
---
.../account_notification_mailer.rb | 28 +++-
.../account_deletion.liquid | 16 ---
.../account_deletion_for_inactivity.liquid | 21 +++
.../account_deletion_user_initiated.liquid | 16 +++
enterprise/app/models/enterprise/account.rb | 16 ++-
spec/enterprise/models/account_spec.rb | 19 ++-
.../account_notification_mailer_spec.rb | 126 ++++--------------
7 files changed, 118 insertions(+), 124 deletions(-)
delete mode 100644 app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion.liquid
create mode 100644 app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion_for_inactivity.liquid
create mode 100644 app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion_user_initiated.liquid
diff --git a/app/mailers/administrator_notifications/account_notification_mailer.rb b/app/mailers/administrator_notifications/account_notification_mailer.rb
index 8837e4f8c..5ac753372 100644
--- a/app/mailers/administrator_notifications/account_notification_mailer.rb
+++ b/app/mailers/administrator_notifications/account_notification_mailer.rb
@@ -1,10 +1,22 @@
class AdministratorNotifications::AccountNotificationMailer < AdministratorNotifications::BaseMailer
- def account_deletion(account, reason = 'manual_deletion')
- subject = 'Your account has been marked for deletion'
+ def account_deletion_user_initiated(account, reason)
+ subject = 'Your Chatwoot account deletion has been scheduled'
action_url = settings_url('general')
meta = {
'account_name' => account.name,
- 'deletion_date' => account.custom_attributes['marked_for_deletion_at'],
+ 'deletion_date' => format_deletion_date(account.custom_attributes['marked_for_deletion_at']),
+ 'reason' => reason
+ }
+
+ send_notification(subject, action_url: action_url, meta: meta)
+ end
+
+ def account_deletion_for_inactivity(account, reason)
+ subject = 'Your Chatwoot account is scheduled for deletion due to inactivity'
+ action_url = settings_url('general')
+ meta = {
+ 'account_name' => account.name,
+ 'deletion_date' => format_deletion_date(account.custom_attributes['marked_for_deletion_at']),
'reason' => reason
}
@@ -45,4 +57,14 @@ class AdministratorNotifications::AccountNotificationMailer < AdministratorNotif
send_notification(subject, action_url: action_url, meta: meta)
end
+
+ private
+
+ def format_deletion_date(deletion_date_str)
+ return 'Unknown' if deletion_date_str.blank?
+
+ Time.zone.parse(deletion_date_str).strftime('%B %d, %Y')
+ rescue StandardError
+ 'Unknown'
+ end
end
diff --git a/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion.liquid b/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion.liquid
deleted file mode 100644
index 0873dbac1..000000000
--- a/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion.liquid
+++ /dev/null
@@ -1,16 +0,0 @@
-Hello,
-
-Your account {{ meta.account_name }} has been marked for deletion. The account will be permanently deleted on {{ meta.deletion_date }}.
-
-{% if meta.reason == 'manual_deletion' %}
-This action was requested by one of the administrators of your account.
-{% else %}
-Reason for deletion: {{ meta.reason }}
-{% endif %}
-
-If this was done in error, you can cancel the deletion process by visiting your account settings.
-
-Cancel Account Deletion
-
-Thank you,
-Team Chatwoot
\ No newline at end of file
diff --git a/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion_for_inactivity.liquid b/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion_for_inactivity.liquid
new file mode 100644
index 000000000..273eca12b
--- /dev/null
+++ b/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion_for_inactivity.liquid
@@ -0,0 +1,21 @@
+Hello there,
+
+We've noticed that your Chatwoot account {{ meta.account_name }} has been inactive for some time. Because of this, it's scheduled for deletion on {{ meta.deletion_date }}.
+
+How do I keep my account?
+
+Log in to your Chatwoot account before {{ meta.deletion_date }}. From your account settings, you can cancel the deletion and continue using your account.
+
+What happens if I don't cancel?
+
+Unless you cancel the account deletion before {{ meta.deletion_date }}, your account and all associated data — including conversations, contacts, reports, and settings — will be permanently deleted.
+
+Why are we doing this?
+
+To keep things secure and efficient, we regularly remove inactive accounts so our systems remain optimized for active teams.
+
+If you have any questions, feel free to reach us at hello@chatwoot.com.
+
+— The Chatwoot Team
+
+
diff --git a/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion_user_initiated.liquid b/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion_user_initiated.liquid
new file mode 100644
index 000000000..2039a93df
--- /dev/null
+++ b/app/views/mailers/administrator_notifications/account_notification_mailer/account_deletion_user_initiated.liquid
@@ -0,0 +1,16 @@
+Hello there,
+
+An account administrator has requested deletion of the Chatwoot account {{ meta.account_name }}. The account is scheduled for deletion on {{ meta.deletion_date }}.
+
+What happens next?
+
+
+ - The account will remain accessible until the scheduled deletion date.
+ - After that, all data including conversations, contacts, integrations, and settings will be permanently removed.
+
+
+If you change your mind before the deletion date, you can cancel this request by visiting your account settings.
+
+— The Chatwoot Team
+
+
diff --git a/enterprise/app/models/enterprise/account.rb b/enterprise/app/models/enterprise/account.rb
index fae44dab6..dff97c0ee 100644
--- a/enterprise/app/models/enterprise/account.rb
+++ b/enterprise/app/models/enterprise/account.rb
@@ -4,10 +4,22 @@ module Enterprise::Account
def manually_managed_features; end
def mark_for_deletion(reason = 'manual_deletion')
- result = custom_attributes.merge!('marked_for_deletion_at' => 7.days.from_now.iso8601, 'marked_for_deletion_reason' => reason) && save
+ reason = reason.to_s == 'manual_deletion' ? 'manual_deletion' : 'inactivity'
+
+ result = custom_attributes.merge!(
+ 'marked_for_deletion_at' => 7.days.from_now.iso8601,
+ 'marked_for_deletion_reason' => reason
+ ) && save
# Send notification to admin users if the account was successfully marked for deletion
- AdministratorNotifications::AccountNotificationMailer.with(account: self).account_deletion(self, reason).deliver_later if result
+ if result
+ mailer = AdministratorNotifications::AccountNotificationMailer.with(account: self)
+ if reason == 'manual_deletion'
+ mailer.account_deletion_user_initiated(self, reason).deliver_later
+ else
+ mailer.account_deletion_for_inactivity(self, reason).deliver_later
+ end
+ end
result
end
diff --git a/spec/enterprise/models/account_spec.rb b/spec/enterprise/models/account_spec.rb
index 4d851d50e..1c727328e 100644
--- a/spec/enterprise/models/account_spec.rb
+++ b/spec/enterprise/models/account_spec.rb
@@ -229,18 +229,27 @@ RSpec.describe Account, type: :model do
describe '#mark_for_deletion' do
it 'sets the marked_for_deletion_at and marked_for_deletion_reason attributes' do
expect do
- account.mark_for_deletion('test_reason')
+ account.mark_for_deletion('inactivity')
end.to change { account.reload.custom_attributes['marked_for_deletion_at'] }.from(nil).to(be_present)
- .and change { account.reload.custom_attributes['marked_for_deletion_reason'] }.from(nil).to('test_reason')
+ .and change { account.reload.custom_attributes['marked_for_deletion_reason'] }.from(nil).to('inactivity')
end
- it 'sends a notification email to admin users' do
+ it 'sends a user-initiated deletion email when reason is manual_deletion' do
mailer = double
expect(AdministratorNotifications::AccountNotificationMailer).to receive(:with).with(account: account).and_return(mailer)
- expect(mailer).to receive(:account_deletion).with(account, 'test_reason').and_return(mailer)
+ expect(mailer).to receive(:account_deletion_user_initiated).with(account, 'manual_deletion').and_return(mailer)
expect(mailer).to receive(:deliver_later)
- account.mark_for_deletion('test_reason')
+ account.mark_for_deletion('manual_deletion')
+ end
+
+ it 'sends a system-initiated deletion email when reason is not manual_deletion' do
+ mailer = double
+ expect(AdministratorNotifications::AccountNotificationMailer).to receive(:with).with(account: account).and_return(mailer)
+ expect(mailer).to receive(:account_deletion_for_inactivity).with(account, 'inactivity').and_return(mailer)
+ expect(mailer).to receive(:deliver_later)
+
+ account.mark_for_deletion('inactivity')
end
it 'returns true when successful' do
diff --git a/spec/mailers/administrator_notifications/account_notification_mailer_spec.rb b/spec/mailers/administrator_notifications/account_notification_mailer_spec.rb
index 44df38e88..dbe6ac11b 100644
--- a/spec/mailers/administrator_notifications/account_notification_mailer_spec.rb
+++ b/spec/mailers/administrator_notifications/account_notification_mailer_spec.rb
@@ -1,116 +1,46 @@
require 'rails_helper'
-require Rails.root.join 'spec/mailers/administrator_notifications/shared/smtp_config_shared.rb'
RSpec.describe AdministratorNotifications::AccountNotificationMailer do
- include_context 'with smtp config'
+ let(:account) { create(:account, name: 'Test Account') }
+ let(:mailer) { described_class.with(account: account) }
+ let(:class_instance) { described_class.new }
- let!(:account) { create(:account) }
- let!(:admin) { create(:user, account: account, role: :administrator) }
+ before do
+ allow(described_class).to receive(:new).and_return(class_instance)
+ allow(class_instance).to receive(:smtp_config_set_or_development?).and_return(true)
+ account.custom_attributes['marked_for_deletion_at'] = 7.days.from_now.iso8601
+ account.save!
+ end
- describe 'account_deletion' do
- let(:reason) { 'manual_deletion' }
- let(:mail) { described_class.with(account: account).account_deletion(account, reason) }
- let(:deletion_date) { 7.days.from_now.iso8601 }
-
- before do
- account.update!(custom_attributes: {
- 'marked_for_deletion_at' => deletion_date,
- 'marked_for_deletion_reason' => reason
- })
- end
-
- it 'renders the subject' do
- expect(mail.subject).to eq('Your account has been marked for deletion')
- end
-
- it 'renders the receiver email' do
- expect(mail.to).to eq([admin.email])
- end
-
- it 'includes the account name in the email body' do
- expect(mail.body.encoded).to include(account.name)
- end
-
- it 'includes the deletion date in the email body' do
- expect(mail.body.encoded).to include(deletion_date)
- end
-
- it 'includes a link to cancel the deletion' do
- expect(mail.body.encoded).to include('Cancel Account Deletion')
- end
-
- context 'when reason is manual_deletion' do
- it 'includes the administrator message' do
- expect(mail.body.encoded).to include('This action was requested by one of the administrators of your account')
- end
- end
-
- context 'when reason is not manual_deletion' do
- let(:reason) { 'inactivity' }
-
- it 'includes the reason directly' do
- expect(mail.body.encoded).to include('Reason for deletion: inactivity')
- end
+ describe '#account_deletion_user_initiated' do
+ it 'sets the correct subject for user-initiated deletion' do
+ mail = mailer.account_deletion_user_initiated(account, 'manual_deletion')
+ expect(mail.subject).to eq('Your Chatwoot account deletion has been scheduled')
end
end
- describe 'contact_import_complete' do
- let!(:data_import) { build(:data_import, total_records: 10, processed_records: 8) }
- let(:mail) { described_class.with(account: account).contact_import_complete(data_import).deliver_now }
-
- it 'renders the subject' do
- expect(mail.subject).to eq('Contact Import Completed')
- end
-
- it 'renders the processed records' do
- expect(mail.body.encoded).to include('Number of records imported: 8')
- expect(mail.body.encoded).to include('Number of records failed: 2')
- end
-
- it 'renders the receiver email' do
- expect(mail.to).to eq([admin.email])
+ describe '#account_deletion_for_inactivity' do
+ it 'sets the correct subject for system-initiated deletion' do
+ mail = mailer.account_deletion_for_inactivity(account, 'Account Inactive')
+ expect(mail.subject).to eq('Your Chatwoot account is scheduled for deletion due to inactivity')
end
end
- describe 'contact_import_failed' do
- let(:mail) { described_class.with(account: account).contact_import_failed.deliver_now }
-
- it 'renders the subject' do
- expect(mail.subject).to eq('Contact Import Failed')
+ describe '#format_deletion_date' do
+ it 'formats a valid date string' do
+ date_str = '2024-12-31T23:59:59Z'
+ formatted = described_class.new.send(:format_deletion_date, date_str)
+ expect(formatted).to eq('December 31, 2024')
end
- it 'renders the receiver email' do
- expect(mail.to).to eq([admin.email])
- end
- end
-
- describe 'contact_export_complete' do
- let!(:file_url) { 'http://test.com/test' }
- let(:mail) { described_class.with(account: account).contact_export_complete(file_url, admin.email).deliver_now }
-
- it 'renders the subject' do
- expect(mail.subject).to eq("Your contact's export file is available to download.")
+ it 'handles blank dates' do
+ formatted = described_class.new.send(:format_deletion_date, nil)
+ expect(formatted).to eq('Unknown')
end
- it 'renders the receiver email' do
- expect(mail.to).to eq([admin.email])
- end
- end
-
- describe 'automation_rule_disabled' do
- let(:rule) { instance_double(AutomationRule, name: 'Test Rule') }
- let(:mail) { described_class.with(account: account).automation_rule_disabled(rule).deliver_now }
-
- it 'renders the subject' do
- expect(mail.subject).to eq('Automation rule disabled due to validation errors.')
- end
-
- it 'renders the receiver email' do
- expect(mail.to).to eq([admin.email])
- end
-
- it 'includes the rule name in the email body' do
- expect(mail.body.encoded).to include('Test Rule')
+ it 'handles invalid dates' do
+ formatted = described_class.new.send(:format_deletion_date, 'invalid-date')
+ expect(formatted).to eq('Unknown')
end
end
end
From f9c258f1a04b9ef56bfe6c30656054738c454bec Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Mon, 1 Sep 2025 13:02:35 +0530
Subject: [PATCH 053/132] fix: Prevent `[object Object]` when copying custom
attributes (#12323)
# Pull Request Template
## Description
This PR fixes custom conversation attributes copying as `[object
Object]` by enhancing the clipboard helper to properly serialize objects
and handle different data types.
Fixes
[CW-5428](https://linear.app/chatwoot/issue/CW-5428/copying-custom-conversation-attribute-returns-object-object-instead-of),
https://github.com/chatwoot/chatwoot/issues/12202
## Type of change
- [x] Bug fix (non-breaking change which fixes an issue)
## How Has This Been Tested?
### Loom video
https://www.loom.com/share/f52db17d4d524b3cbb5badb2b6f381eb?sid=2b34f38f-e95d-4981-be5f-6cb42a0212b9
## Checklist:
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules
---
app/javascript/shared/helpers/clipboard.js | 9 +-
.../shared/helpers/specs/clipboard.spec.js | 174 ++++++++++++++++++
2 files changed, 181 insertions(+), 2 deletions(-)
create mode 100644 app/javascript/shared/helpers/specs/clipboard.spec.js
diff --git a/app/javascript/shared/helpers/clipboard.js b/app/javascript/shared/helpers/clipboard.js
index dbadd4037..dcd25afae 100644
--- a/app/javascript/shared/helpers/clipboard.js
+++ b/app/javascript/shared/helpers/clipboard.js
@@ -2,11 +2,16 @@
* Writes a text string to the system clipboard.
*
* @async
- * @param {string} text text to be written to the clipboard
+ * @param {string} data text to be written to the clipboard
* @throws {Error} unable to copy text to clipboard
*/
-export const copyTextToClipboard = async text => {
+export const copyTextToClipboard = async data => {
try {
+ const text =
+ typeof data === 'object' && data !== null
+ ? JSON.stringify(data, null, 2)
+ : String(data ?? '');
+
await navigator.clipboard.writeText(text);
} catch (error) {
throw new Error(`Unable to copy text to clipboard: ${error.message}`);
diff --git a/app/javascript/shared/helpers/specs/clipboard.spec.js b/app/javascript/shared/helpers/specs/clipboard.spec.js
new file mode 100644
index 000000000..c675edd35
--- /dev/null
+++ b/app/javascript/shared/helpers/specs/clipboard.spec.js
@@ -0,0 +1,174 @@
+import { copyTextToClipboard } from '../clipboard';
+
+const mockWriteText = vi.fn();
+Object.assign(navigator, {
+ clipboard: {
+ writeText: mockWriteText,
+ },
+});
+
+describe('copyTextToClipboard', () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ describe('with string input', () => {
+ it('copies plain text string to clipboard', async () => {
+ const text = 'Hello World';
+ await copyTextToClipboard(text);
+
+ expect(mockWriteText).toHaveBeenCalledWith('Hello World');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('copies empty string to clipboard', async () => {
+ const text = '';
+ await copyTextToClipboard(text);
+
+ expect(mockWriteText).toHaveBeenCalledWith('');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+ });
+
+ describe('with number input', () => {
+ it('converts number to string', async () => {
+ await copyTextToClipboard(42);
+
+ expect(mockWriteText).toHaveBeenCalledWith('42');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('converts zero to string', async () => {
+ await copyTextToClipboard(0);
+
+ expect(mockWriteText).toHaveBeenCalledWith('0');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+ });
+
+ describe('with boolean input', () => {
+ it('converts true to string', async () => {
+ await copyTextToClipboard(true);
+
+ expect(mockWriteText).toHaveBeenCalledWith('true');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('converts false to string', async () => {
+ await copyTextToClipboard(false);
+
+ expect(mockWriteText).toHaveBeenCalledWith('false');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+ });
+
+ describe('with null/undefined input', () => {
+ it('converts null to empty string', async () => {
+ await copyTextToClipboard(null);
+
+ expect(mockWriteText).toHaveBeenCalledWith('');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('converts undefined to empty string', async () => {
+ await copyTextToClipboard(undefined);
+
+ expect(mockWriteText).toHaveBeenCalledWith('');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+ });
+
+ describe('with object input', () => {
+ it('stringifies simple object with proper formatting', async () => {
+ const obj = { name: 'John', age: 30 };
+ await copyTextToClipboard(obj);
+
+ const expectedJson = JSON.stringify(obj, null, 2);
+ expect(mockWriteText).toHaveBeenCalledWith(expectedJson);
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('stringifies nested object with proper formatting', async () => {
+ const nestedObj = {
+ severity: {
+ user_id: 1181505,
+ user_name: 'test',
+ server_name: '[1253]test1253',
+ },
+ };
+ await copyTextToClipboard(nestedObj);
+
+ const expectedJson = JSON.stringify(nestedObj, null, 2);
+ expect(mockWriteText).toHaveBeenCalledWith(expectedJson);
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('stringifies array with proper formatting', async () => {
+ const arr = [1, 2, { name: 'test' }];
+ await copyTextToClipboard(arr);
+
+ const expectedJson = JSON.stringify(arr, null, 2);
+ expect(mockWriteText).toHaveBeenCalledWith(expectedJson);
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('stringifies empty object', async () => {
+ const obj = {};
+ await copyTextToClipboard(obj);
+
+ expect(mockWriteText).toHaveBeenCalledWith('{}');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('stringifies empty array', async () => {
+ const arr = [];
+ await copyTextToClipboard(arr);
+
+ expect(mockWriteText).toHaveBeenCalledWith('[]');
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+ });
+
+ describe('error handling', () => {
+ it('throws error when clipboard API fails', async () => {
+ const error = new Error('Clipboard access denied');
+ mockWriteText.mockRejectedValueOnce(error);
+
+ await expect(copyTextToClipboard('test')).rejects.toThrow(
+ 'Unable to copy text to clipboard: Clipboard access denied'
+ );
+ });
+
+ it('handles clipboard API not available', async () => {
+ // Temporarily remove clipboard API
+ const originalClipboard = navigator.clipboard;
+ delete navigator.clipboard;
+
+ await expect(copyTextToClipboard('test')).rejects.toThrow(
+ 'Unable to copy text to clipboard:'
+ );
+
+ // Restore clipboard API
+ navigator.clipboard = originalClipboard;
+ });
+ });
+
+ describe('edge cases', () => {
+ it('handles Date objects', async () => {
+ const date = new Date('2023-01-01T00:00:00.000Z');
+ await copyTextToClipboard(date);
+
+ const expectedJson = JSON.stringify(date, null, 2);
+ expect(mockWriteText).toHaveBeenCalledWith(expectedJson);
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+
+ it('handles functions by converting to string', async () => {
+ const func = () => 'test';
+ await copyTextToClipboard(func);
+
+ expect(mockWriteText).toHaveBeenCalledWith(func.toString());
+ expect(mockWriteText).toHaveBeenCalledTimes(1);
+ });
+ });
+});
From c53e750be0df7176ce660b89dbd8c4b7eced7d36 Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Mon, 1 Sep 2025 13:22:55 +0530
Subject: [PATCH 054/132] feat: Display banner and handoff for bot-managed
chats (#12292)
---
.../widgets/conversation/ReplyBox.vue | 71 +---------
.../widgets/conversation/ReplyBoxBanner.vue | 129 ++++++++++++++++++
.../i18n/locale/en/conversation.json | 5 +
3 files changed, 137 insertions(+), 68 deletions(-)
create mode 100644 app/javascript/dashboard/components/widgets/conversation/ReplyBoxBanner.vue
diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
index cedf502a6..3db4779b0 100644
--- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
@@ -15,7 +15,7 @@ import ReplyEmailHead from './ReplyEmailHead.vue';
import ReplyBottomPanel from 'dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue';
import ArticleSearchPopover from 'dashboard/routes/dashboard/helpcenter/components/ArticleSearch/SearchPopover.vue';
import MessageSignatureMissingAlert from './MessageSignatureMissingAlert.vue';
-import Banner from 'dashboard/components/ui/Banner.vue';
+import ReplyBoxBanner from './ReplyBoxBanner.vue';
import { REPLY_EDITOR_MODES } from 'dashboard/components/widgets/WootWriter/constants';
import WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';
import AudioRecorder from 'dashboard/components/widgets/WootWriter/AudioRecorder.vue';
@@ -53,8 +53,8 @@ export default {
ArticleSearchPopover,
AttachmentPreview,
AudioRecorder,
- Banner,
CannedResponse,
+ ReplyBoxBanner,
EmojiInput,
MessageSignatureMissingAlert,
ReplyBottomPanel,
@@ -158,35 +158,6 @@ export default {
return false;
},
- assignedAgent: {
- get() {
- return this.currentChat.meta.assignee;
- },
- set(agent) {
- const agentId = agent ? agent.id : 0;
- this.$store.dispatch('setCurrentChatAssignee', agent);
- this.$store
- .dispatch('assignAgent', {
- conversationId: this.currentChat.id,
- agentId,
- })
- .then(() => {
- useAlert(this.$t('CONVERSATION.CHANGE_AGENT'));
- });
- },
- },
- showSelfAssignBanner() {
- if (this.message !== '' && !this.isOnPrivateNote) {
- if (!this.assignedAgent) {
- return true;
- }
- if (this.assignedAgent.id !== this.currentUser.id) {
- return true;
- }
- }
-
- return false;
- },
showWhatsappTemplates() {
return this.isAWhatsAppCloudChannel && !this.isPrivate;
},
@@ -671,29 +642,6 @@ export default {
hideContentTemplatesModal() {
this.showContentTemplatesModal = false;
},
- onClickSelfAssign() {
- const {
- account_id,
- availability_status,
- available_name,
- email,
- id,
- name,
- role,
- avatar_url,
- } = this.currentUser;
- const selfAssign = {
- account_id,
- availability_status,
- available_name,
- email,
- id,
- name,
- role,
- thumbnail: avatar_url,
- };
- this.assignedAgent = selfAssign;
- },
confirmOnSendReply() {
if (this.isReplyButtonDisabled) {
return;
@@ -1118,16 +1066,7 @@ export default {
-
+
+import { computed } from 'vue';
+import { useStore } from 'vuex';
+import { useMapGetter } from 'dashboard/composables/store';
+import { useAlert } from 'dashboard/composables';
+import { useI18n } from 'vue-i18n';
+import wootConstants from 'dashboard/constants/globals';
+
+import Banner from 'dashboard/components/ui/Banner.vue';
+
+const props = defineProps({
+ message: {
+ type: String,
+ default: '',
+ },
+ isOnPrivateNote: {
+ type: Boolean,
+ default: false,
+ },
+});
+
+const store = useStore();
+const { t } = useI18n();
+
+const currentChat = useMapGetter('getSelectedChat');
+const currentUser = useMapGetter('getCurrentUser');
+
+const assignedAgent = computed({
+ get() {
+ return currentChat.value?.meta?.assignee;
+ },
+ set(agent) {
+ const agentId = agent ? agent.id : 0;
+ store.dispatch('setCurrentChatAssignee', agent);
+ store.dispatch('assignAgent', {
+ conversationId: currentChat.value?.id,
+ agentId,
+ });
+ },
+});
+
+const isUserTyping = computed(
+ () => props.message !== '' && !props.isOnPrivateNote
+);
+const isUnassigned = computed(() => !assignedAgent.value);
+const isAssignedToOtherAgent = computed(
+ () => assignedAgent.value?.id !== currentUser.value?.id
+);
+
+const showSelfAssignBanner = computed(() => {
+ return (
+ isUserTyping.value && (isUnassigned.value || isAssignedToOtherAgent.value)
+ );
+});
+
+const showBotHandoffBanner = computed(
+ () =>
+ isUserTyping.value &&
+ currentChat.value?.status === wootConstants.STATUS_TYPE.PENDING
+);
+
+const botHandoffActionLabel = computed(() => {
+ return assignedAgent.value?.id === currentUser.value?.id
+ ? t('CONVERSATION.BOT_HANDOFF_REOPEN_ACTION')
+ : t('CONVERSATION.BOT_HANDOFF_ACTION');
+});
+
+const selfAssignConversation = async () => {
+ const { avatar_url, ...rest } = currentUser.value || {};
+ assignedAgent.value = { ...rest, thumbnail: avatar_url };
+};
+
+const needsAssignmentToCurrentUser = computed(() => {
+ return isUnassigned.value || isAssignedToOtherAgent.value;
+});
+
+const onClickSelfAssign = async () => {
+ try {
+ await selfAssignConversation();
+ useAlert(t('CONVERSATION.CHANGE_AGENT'));
+ } catch (error) {
+ useAlert(t('CONVERSATION.CHANGE_AGENT_FAILED'));
+ }
+};
+
+const reopenConversation = async () => {
+ await store.dispatch('toggleStatus', {
+ conversationId: currentChat.value?.id,
+ status: wootConstants.STATUS_TYPE.OPEN,
+ });
+};
+
+const onClickBotHandoff = async () => {
+ try {
+ await reopenConversation();
+
+ if (needsAssignmentToCurrentUser.value) {
+ await selfAssignConversation();
+ }
+
+ useAlert(t('CONVERSATION.BOT_HANDOFF_SUCCESS'));
+ } catch (error) {
+ useAlert(t('CONVERSATION.BOT_HANDOFF_ERROR'));
+ }
+};
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/i18n/locale/en/conversation.json b/app/javascript/dashboard/i18n/locale/en/conversation.json
index 308f24f51..93f375e7f 100644
--- a/app/javascript/dashboard/i18n/locale/en/conversation.json
+++ b/app/javascript/dashboard/i18n/locale/en/conversation.json
@@ -35,6 +35,11 @@
"API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours",
"NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?",
"ASSIGN_TO_ME": "Assign to me",
+ "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.",
+ "BOT_HANDOFF_ACTION": "Mark open and assign to you",
+ "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open",
+ "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you",
+ "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.",
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction",
"OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.",
From d68ac251878ae77737ea473adfc7c22eef5dbaf4 Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Mon, 1 Sep 2025 15:55:09 +0530
Subject: [PATCH 055/132] feat: Display notification count in sidebar inbox
item (#12324)
---
.../components-next/sidebar/Sidebar.vue | 2 +-
.../sidebar/SidebarGroupHeader.vue | 25 ++++++++++++++++---
.../routes/dashboard/inbox/InboxList.vue | 7 +-----
.../store/modules/notifications/getters.js | 3 +++
4 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/app/javascript/dashboard/components-next/sidebar/Sidebar.vue b/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
index 20139ed27..c4daaf519 100644
--- a/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
+++ b/app/javascript/dashboard/components-next/sidebar/Sidebar.vue
@@ -128,7 +128,7 @@ const menuItems = computed(() => {
to: accountScopedRoute('inbox_view'),
activeOn: ['inbox_view', 'inbox_view_conversation'],
getterKeys: {
- badge: 'notifications/getHasUnreadNotifications',
+ count: 'notifications/getUnreadCount',
},
},
{
diff --git a/app/javascript/dashboard/components-next/sidebar/SidebarGroupHeader.vue b/app/javascript/dashboard/components-next/sidebar/SidebarGroupHeader.vue
index b0fd8fc69..2619f3100 100644
--- a/app/javascript/dashboard/components-next/sidebar/SidebarGroupHeader.vue
+++ b/app/javascript/dashboard/components-next/sidebar/SidebarGroupHeader.vue
@@ -1,4 +1,5 @@
-
- {{ label }}
-
+
+
+ {{ label }}
+
+
+ {{ count }}
+
+
{
const markNotificationAsRead = async notificationItem => {
useTrack(INBOX_EVENTS.MARK_NOTIFICATION_AS_READ);
- const {
- id,
- primary_actor_id: primaryActorId,
- primary_actor_type: primaryActorType,
- } = notificationItem;
-
+ const { id, primaryActorId, primaryActorType } = notificationItem;
try {
await store.dispatch('notifications/read', {
id,
diff --git a/app/javascript/dashboard/store/modules/notifications/getters.js b/app/javascript/dashboard/store/modules/notifications/getters.js
index 4f4cafc9a..8af1d0360 100644
--- a/app/javascript/dashboard/store/modules/notifications/getters.js
+++ b/app/javascript/dashboard/store/modules/notifications/getters.js
@@ -38,4 +38,7 @@ export const getters = {
getHasUnreadNotifications: $state => {
return $state.meta.unreadCount > 0;
},
+ getUnreadCount: $state => {
+ return $state.meta.unreadCount;
+ },
};
From 8606aa1310af3ffadfa40603e60a00f6ccdb8cca Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Tue, 2 Sep 2025 12:35:18 +0530
Subject: [PATCH 056/132] feat: Ability to filter contact based on labels
(#12343)
# Pull Request Template
## Description
This PR add the ability to filter contact based on labels.
Fixes
https://linear.app/chatwoot/issue/CW-4001/feat-ability-to-filter-contact-based-on-labels
## Type of change
- [x] New feature (non-breaking change which adds functionality
## How Has This Been Tested?
### Loom video
https://www.loom.com/share/f3d58d0fcee844b7817325a9a19929d3?sid=075b9448-7e6d-4180-af3c-9466fbf2138b
## Checklist:
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules
---
.../ContactsHeader/ContactListHeaderWrapper.vue | 2 ++
.../filter/ActiveFilterPreview.vue | 14 +++++++++-----
.../components-next/filter/contactProvider.js | 15 +++++++++++++++
.../components-next/filter/helper/filterHelper.js | 1 +
.../dashboard/i18n/locale/en/contactFilters.json | 3 ++-
.../contacts/contactFilterItems/index.js | 13 +++++++++++++
6 files changed, 42 insertions(+), 6 deletions(-)
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue b/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue
index ea5c63ebc..0b4880264 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue
@@ -62,6 +62,7 @@ const segmentsQuery = ref({});
const appliedFilters = useMapGetter('contacts/getAppliedContactFiltersV4');
const contactAttributes = useMapGetter('attributes/getContactAttributes');
+const labels = useMapGetter('labels/getLabels');
const hasActiveSegments = computed(
() => props.activeSegment && props.segmentsId !== 0
);
@@ -215,6 +216,7 @@ const setParamsForEditSegmentModal = () => {
countries,
filterTypes: contactFilterItems,
allCustomAttributes: useSnakeCase(contactAttributes.value),
+ labels: labels.value || [],
};
};
diff --git a/app/javascript/dashboard/components-next/filter/ActiveFilterPreview.vue b/app/javascript/dashboard/components-next/filter/ActiveFilterPreview.vue
index 959d95ccc..38b3d72db 100644
--- a/app/javascript/dashboard/components-next/filter/ActiveFilterPreview.vue
+++ b/app/javascript/dashboard/components-next/filter/ActiveFilterPreview.vue
@@ -34,14 +34,17 @@ const formatOperatorLabel = operator => {
};
const formatFilterValue = value => {
+ // Case 1: null, undefined, empty string
if (!value) return '';
+
+ // Case 2: array → map each item, use name if present, else the item itself
if (Array.isArray(value)) {
- return value.join(', ');
+ return value.map(item => item?.name ?? item).join(', ');
}
- if (typeof value === 'object' && value.name) {
- return value.name;
- }
- return value;
+
+ // Case 3: object with a "name" property → return name
+ // Case 4: primitive (string, number, etc.) → return as is
+ return value?.name ?? value;
};
@@ -66,6 +69,7 @@ const formatFilterValue = value => {
Date: Tue, 2 Sep 2025 14:11:38 +0530
Subject: [PATCH 057/132] feat: Update Inbox/Team creation UI (#12305)
---
.../components-next/icon/provider.js | 26 +--
.../icon/specs/provider.spec.js | 30 ++--
.../components-next/sidebar/ChannelLeaf.vue | 2 +-
.../dashboard/components/ChannelSelector.vue | 77 ++++----
.../dashboard/components/ui/Wizard.vue | 144 +++++++--------
.../components/widgets/ChannelItem.vue | 152 ++++++++--------
.../components/widgets/InboxName.vue | 2 +-
.../widgets/conversation/ConversationCard.vue | 1 -
.../dashboard/i18n/locale/en/inboxMgmt.json | 61 ++++++-
.../dashboard/settings/inbox/AddAgents.vue | 4 +-
.../dashboard/settings/inbox/ChannelList.vue | 165 ++++++++++--------
.../dashboard/settings/inbox/FinishSetup.vue | 4 +-
.../settings/inbox/InboxChannels.vue | 137 ++++++++++-----
.../routes/dashboard/settings/inbox/Index.vue | 2 +-
.../dashboard/settings/inbox/channels/Api.vue | 4 +-
.../settings/inbox/channels/Email.vue | 27 +--
.../settings/inbox/channels/Facebook.vue | 6 +-
.../settings/inbox/channels/Line.vue | 4 +-
.../dashboard/settings/inbox/channels/Sms.vue | 4 +-
.../settings/inbox/channels/Telegram.vue | 4 +-
.../settings/inbox/channels/Twitter.vue | 4 +-
.../settings/inbox/channels/Voice.vue | 4 +-
.../settings/inbox/channels/Website.vue | 4 +-
.../settings/inbox/channels/Whatsapp.vue | 76 +++-----
.../emailChannels/ForwardToOption.vue | 4 +-
.../channels/emailChannels/OAuthChannel.vue | 4 +-
.../settings/teams/Create/AddAgents.vue | 4 +-
.../settings/teams/Create/CreateTeam.vue | 4 +-
.../dashboard/settings/teams/Create/Index.vue | 13 +-
.../settings/teams/Edit/EditAgents.vue | 4 +-
.../settings/teams/Edit/EditTeam.vue | 4 +-
.../dashboard/settings/teams/Edit/Index.vue | 13 +-
.../dashboard/settings/teams/FinishSetup.vue | 4 +-
theme/icons.js | 67 +++++++
34 files changed, 600 insertions(+), 465 deletions(-)
diff --git a/app/javascript/dashboard/components-next/icon/provider.js b/app/javascript/dashboard/components-next/icon/provider.js
index 887368438..a356ae2fd 100644
--- a/app/javascript/dashboard/components-next/icon/provider.js
+++ b/app/javascript/dashboard/components-next/icon/provider.js
@@ -2,23 +2,23 @@ import { computed } from 'vue';
export function useChannelIcon(inbox) {
const channelTypeIconMap = {
- 'Channel::Api': 'i-ri-cloudy-fill',
- 'Channel::Email': 'i-ri-mail-fill',
- 'Channel::FacebookPage': 'i-ri-messenger-fill',
- 'Channel::Line': 'i-ri-line-fill',
- 'Channel::Sms': 'i-ri-chat-1-fill',
- 'Channel::Telegram': 'i-ri-telegram-fill',
- 'Channel::TwilioSms': 'i-ri-chat-1-fill',
+ 'Channel::Api': 'i-woot-api',
+ 'Channel::Email': 'i-woot-mail',
+ 'Channel::FacebookPage': 'i-woot-messenger',
+ 'Channel::Line': 'i-woot-line',
+ 'Channel::Sms': 'i-woot-sms',
+ 'Channel::Telegram': 'i-woot-telegram',
+ 'Channel::TwilioSms': 'i-woot-sms',
'Channel::TwitterProfile': 'i-ri-twitter-x-fill',
- 'Channel::WebWidget': 'i-ri-global-fill',
- 'Channel::Whatsapp': 'i-ri-whatsapp-fill',
- 'Channel::Instagram': 'i-ri-instagram-fill',
+ 'Channel::WebWidget': 'i-woot-website',
+ 'Channel::Whatsapp': 'i-woot-whatsapp',
+ 'Channel::Instagram': 'i-woot-instagram',
'Channel::Voice': 'i-ri-phone-fill',
};
const providerIconMap = {
- microsoft: 'i-ri-microsoft-fill',
- google: 'i-ri-google-fill',
+ microsoft: 'i-woot-outlook',
+ google: 'i-woot-gmail',
};
const channelIcon = computed(() => {
@@ -34,7 +34,7 @@ export function useChannelIcon(inbox) {
// Special case for Twilio whatsapp
if (type === 'Channel::TwilioSms' && inboxDetails.medium === 'whatsapp') {
- icon = 'i-ri-whatsapp-fill';
+ icon = 'i-woot-whatsapp';
}
return icon ?? 'i-ri-global-fill';
diff --git a/app/javascript/dashboard/components-next/icon/specs/provider.spec.js b/app/javascript/dashboard/components-next/icon/specs/provider.spec.js
index b0b820f25..e32df567d 100644
--- a/app/javascript/dashboard/components-next/icon/specs/provider.spec.js
+++ b/app/javascript/dashboard/components-next/icon/specs/provider.spec.js
@@ -4,19 +4,19 @@ describe('useChannelIcon', () => {
it('returns correct icon for API channel', () => {
const inbox = { channel_type: 'Channel::Api' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-cloudy-fill');
+ expect(icon).toBe('i-woot-api');
});
it('returns correct icon for Facebook channel', () => {
const inbox = { channel_type: 'Channel::FacebookPage' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-messenger-fill');
+ expect(icon).toBe('i-woot-messenger');
});
it('returns correct icon for WhatsApp channel', () => {
const inbox = { channel_type: 'Channel::Whatsapp' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-whatsapp-fill');
+ expect(icon).toBe('i-woot-whatsapp');
});
it('returns correct icon for Voice channel', () => {
@@ -28,19 +28,19 @@ describe('useChannelIcon', () => {
it('returns correct icon for Line channel', () => {
const inbox = { channel_type: 'Channel::Line' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-line-fill');
+ expect(icon).toBe('i-woot-line');
});
it('returns correct icon for SMS channel', () => {
const inbox = { channel_type: 'Channel::Sms' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-chat-1-fill');
+ expect(icon).toBe('i-woot-sms');
});
it('returns correct icon for Telegram channel', () => {
const inbox = { channel_type: 'Channel::Telegram' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-telegram-fill');
+ expect(icon).toBe('i-woot-telegram');
});
it('returns correct icon for Twitter channel', () => {
@@ -52,20 +52,20 @@ describe('useChannelIcon', () => {
it('returns correct icon for WebWidget channel', () => {
const inbox = { channel_type: 'Channel::WebWidget' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-global-fill');
+ expect(icon).toBe('i-woot-website');
});
it('returns correct icon for Instagram channel', () => {
const inbox = { channel_type: 'Channel::Instagram' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-instagram-fill');
+ expect(icon).toBe('i-woot-instagram');
});
describe('TwilioSms channel', () => {
it('returns chat icon for regular Twilio SMS channel', () => {
const inbox = { channel_type: 'Channel::TwilioSms' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-chat-1-fill');
+ expect(icon).toBe('i-woot-sms');
});
it('returns WhatsApp icon for Twilio SMS with WhatsApp medium', () => {
@@ -74,7 +74,7 @@ describe('useChannelIcon', () => {
medium: 'whatsapp',
};
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-whatsapp-fill');
+ expect(icon).toBe('i-woot-whatsapp');
});
it('returns chat icon for Twilio SMS with non-WhatsApp medium', () => {
@@ -83,7 +83,7 @@ describe('useChannelIcon', () => {
medium: 'sms',
};
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-chat-1-fill');
+ expect(icon).toBe('i-woot-sms');
});
it('returns chat icon for Twilio SMS with undefined medium', () => {
@@ -92,7 +92,7 @@ describe('useChannelIcon', () => {
medium: undefined,
};
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-chat-1-fill');
+ expect(icon).toBe('i-woot-sms');
});
});
@@ -100,7 +100,7 @@ describe('useChannelIcon', () => {
it('returns mail icon for generic email channel', () => {
const inbox = { channel_type: 'Channel::Email' };
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-mail-fill');
+ expect(icon).toBe('i-woot-mail');
});
it('returns Microsoft icon for Microsoft email provider', () => {
@@ -109,7 +109,7 @@ describe('useChannelIcon', () => {
provider: 'microsoft',
};
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-microsoft-fill');
+ expect(icon).toBe('i-woot-outlook');
});
it('returns Google icon for Google email provider', () => {
@@ -118,7 +118,7 @@ describe('useChannelIcon', () => {
provider: 'google',
};
const { value: icon } = useChannelIcon(inbox);
- expect(icon).toBe('i-ri-google-fill');
+ expect(icon).toBe('i-woot-gmail');
});
});
diff --git a/app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue b/app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue
index 2a93089a9..db0e08d04 100644
--- a/app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue
+++ b/app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue
@@ -25,7 +25,7 @@ const reauthorizationRequired = computed(() => {
diff --git a/app/javascript/dashboard/components/ChannelSelector.vue b/app/javascript/dashboard/components/ChannelSelector.vue
index 236ae3ded..9e593af51 100644
--- a/app/javascript/dashboard/components/ChannelSelector.vue
+++ b/app/javascript/dashboard/components/ChannelSelector.vue
@@ -1,50 +1,57 @@
-
-
-
diff --git a/app/javascript/dashboard/components/ui/Wizard.vue b/app/javascript/dashboard/components/ui/Wizard.vue
index 6ab196d9d..709557b50 100644
--- a/app/javascript/dashboard/components/ui/Wizard.vue
+++ b/app/javascript/dashboard/components/ui/Wizard.vue
@@ -1,97 +1,75 @@
-
-
+
-
-
+
- {{ item.title }}
-
-
-
+ {{ index + 1 }}
-
- {{ items.indexOf(item) + 1 }}
-
-
- {{ item.body }}
-
+
+
+
+ {{ item.title }}
+
+
+
+ {{ item.body }}
+
+
-
-
diff --git a/app/javascript/dashboard/components/widgets/ChannelItem.vue b/app/javascript/dashboard/components/widgets/ChannelItem.vue
index 5bc96d2b5..afd74409d 100644
--- a/app/javascript/dashboard/components/widgets/ChannelItem.vue
+++ b/app/javascript/dashboard/components/widgets/ChannelItem.vue
@@ -1,91 +1,87 @@
-
diff --git a/app/javascript/dashboard/components/widgets/InboxName.vue b/app/javascript/dashboard/components/widgets/InboxName.vue
index 66b80f69b..ecdaa8a6f 100644
--- a/app/javascript/dashboard/components/widgets/InboxName.vue
+++ b/app/javascript/dashboard/components/widgets/InboxName.vue
@@ -13,7 +13,7 @@ defineProps({
{{ inbox.name }}
diff --git a/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue b/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
index cfac915bf..57958ec0f 100644
--- a/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
@@ -250,7 +250,6 @@ const deleteConversation = () => {
:src="currentContact.thumbnail"
:size="32"
:status="currentContact.availability_status"
- :inbox="inbox"
:class="!showInboxName ? 'mt-4' : 'mt-8'"
hide-offline-status
rounded-full
diff --git a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
index aff0d58e4..f171914db 100644
--- a/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
+++ b/app/javascript/dashboard/i18n/locale/en/inboxMgmt.json
@@ -424,7 +424,51 @@
},
"AUTH": {
"TITLE": "Choose a channel",
- "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below."
+ "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.",
+ "TITLE_NEXT": "Complete the setup",
+ "TITLE_FINISH": "Voilà!",
+ "CHANNEL": {
+ "WEBSITE": {
+ "TITLE": "Website",
+ "DESCRIPTION": "Create a live-chat widget"
+ },
+ "FACEBOOK": {
+ "TITLE": "Facebook",
+ "DESCRIPTION": "Connect your Facebook page"
+ },
+ "WHATSAPP": {
+ "TITLE": "WhatsApp",
+ "DESCRIPTION": "Support your customers on WhatsApp"
+ },
+ "EMAIL": {
+ "TITLE": "Email",
+ "DESCRIPTION": "Connect with Gmail, Outlook, or other providers"
+ },
+ "SMS": {
+ "TITLE": "SMS",
+ "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth"
+ },
+ "API": {
+ "TITLE": "API",
+ "DESCRIPTION": "Make a custom channel using our API"
+ },
+ "TELEGRAM": {
+ "TITLE": "Telegram",
+ "DESCRIPTION": "Configure Telegram channel using Bot token"
+ },
+ "LINE": {
+ "TITLE": "Line",
+ "DESCRIPTION": "Integrate your Line channel"
+ },
+ "INSTAGRAM": {
+ "TITLE": "Instagram",
+ "DESCRIPTION": "Connect your instagram account"
+ },
+ "VOICE": {
+ "TITLE": "Voice",
+ "DESCRIPTION": "Integrate with Twilio Voice"
+ }
+ }
},
"AGENTS": {
"TITLE": "Agents",
@@ -871,9 +915,18 @@
"SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
},
"EMAIL_PROVIDERS": {
- "MICROSOFT": "Microsoft",
- "GOOGLE": "Google",
- "OTHER_PROVIDERS": "Other Providers"
+ "MICROSOFT": {
+ "TITLE": "Microsoft",
+ "DESCRIPTION": "Connect with Microsoft"
+ },
+ "GOOGLE": {
+ "TITLE": "Google",
+ "DESCRIPTION": "Connect with Google"
+ },
+ "OTHER_PROVIDERS": {
+ "TITLE": "Other Providers",
+ "DESCRIPTION": "Connect with Other Providers"
+ }
},
"CHANNELS": {
"MESSENGER": "Messenger",
diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue
index 17752dfd2..c05c6724b 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue
@@ -63,9 +63,7 @@ export default {
-