nodebb-plugin-admin-chats 3.1.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client.js +67 -37
- package/library.js +23 -0
- package/package.json +1 -1
- package/public/languages/ar/admin-chats.json +12 -0
- package/public/languages/de/admin-chats.json +12 -0
- package/public/languages/de-CH/admin-chats.json +12 -0
- package/public/languages/el/admin-chats.json +12 -0
- package/public/languages/es/admin-chats.json +12 -0
- package/public/languages/fr-CH/admin-chats.json +12 -0
- package/public/languages/hi/admin-chats.json +12 -0
- package/public/languages/it/admin-chats.json +12 -0
- package/public/languages/it-CH/admin-chats.json +12 -0
- package/public/languages/ja/admin-chats.json +12 -0
- package/public/languages/nl/admin-chats.json +12 -0
- package/public/languages/pl/admin-chats.json +12 -0
- package/public/languages/pt-BR/admin-chats.json +12 -0
- package/public/languages/rm-CH/admin-chats.json +12 -0
- package/public/languages/ru/admin-chats.json +12 -0
- package/public/languages/uk/admin-chats.json +12 -0
- package/public/languages/zh-CN/admin-chats.json +12 -0
- package/public/languages/zh-TW/admin-chats.json +12 -0
package/client.js
CHANGED
|
@@ -336,68 +336,69 @@ $(document).ready(function() {
|
|
|
336
336
|
return null;
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
+
// First, check if we have the room data in ajaxify.data (from the current page)
|
|
339
340
|
const currentRoom = ajaxify && ajaxify.data && (ajaxify.data.room || ajaxify.data);
|
|
340
|
-
if (currentRoom && parseInt(currentRoom.roomId, 10) === roomId
|
|
341
|
-
|
|
342
|
-
|
|
341
|
+
if (currentRoom && parseInt(currentRoom.roomId, 10) === roomId) {
|
|
342
|
+
if (currentRoom.adminChatLock) {
|
|
343
|
+
setCachedRoomData(roomId, currentRoom);
|
|
344
|
+
return currentRoom;
|
|
345
|
+
}
|
|
343
346
|
}
|
|
344
347
|
|
|
348
|
+
// Check cache
|
|
345
349
|
const cached = getCachedRoomData(roomId);
|
|
346
350
|
if (cached) {
|
|
347
351
|
return cached;
|
|
348
352
|
}
|
|
349
353
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
`${config.relative_path || ''}/api/chats/${roomId}`;
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
'x-csrf-token': config.csrf_token,
|
|
356
|
-
},
|
|
357
|
-
credentials: 'same-origin',
|
|
358
|
-
});
|
|
359
|
-
if (!response.ok) {
|
|
360
|
-
if (hasAdminChatsAccess() && !isAdminAllChatsPage()) {
|
|
361
|
-
const adminResponse = await fetch(`${config.relative_path || ''}/api/admin-chats/page/${roomId}`, {
|
|
354
|
+
// Try admin endpoint first if user has access
|
|
355
|
+
if (hasAdminChatsAccess()) {
|
|
356
|
+
const adminEndpoint = `${config.relative_path || ''}/api/admin-chats/page/${roomId}`;
|
|
357
|
+
try {
|
|
358
|
+
const adminResponse = await fetch(adminEndpoint, {
|
|
362
359
|
headers: {
|
|
363
360
|
'x-csrf-token': config.csrf_token,
|
|
364
361
|
},
|
|
365
362
|
credentials: 'same-origin',
|
|
366
363
|
});
|
|
367
|
-
if (
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
364
|
+
if (adminResponse.ok) {
|
|
365
|
+
const adminPayload = await adminResponse.json();
|
|
366
|
+
const adminRoom = adminPayload && adminPayload.roomId ? adminPayload : (adminPayload && adminPayload.room ? adminPayload.room : null);
|
|
367
|
+
if (adminRoom) {
|
|
368
|
+
setCachedRoomData(roomId, adminRoom);
|
|
369
|
+
return adminRoom;
|
|
370
|
+
}
|
|
374
371
|
}
|
|
375
|
-
|
|
372
|
+
} catch (err) {
|
|
373
|
+
// Continue to fallback
|
|
376
374
|
}
|
|
377
|
-
return null;
|
|
378
375
|
}
|
|
379
376
|
|
|
380
|
-
|
|
381
|
-
const
|
|
382
|
-
|
|
383
|
-
const
|
|
377
|
+
// For all users, try to get lock data from the new endpoint
|
|
378
|
+
const lockEndpoint = `${config.relative_path || ''}/api/admin-chats/${roomId}/lock`;
|
|
379
|
+
try {
|
|
380
|
+
const lockResponse = await fetch(lockEndpoint, {
|
|
384
381
|
headers: {
|
|
385
382
|
'x-csrf-token': config.csrf_token,
|
|
386
383
|
},
|
|
387
384
|
credentials: 'same-origin',
|
|
388
385
|
});
|
|
389
|
-
if (
|
|
390
|
-
const
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
386
|
+
if (lockResponse.ok) {
|
|
387
|
+
const lockPayload = await lockResponse.json();
|
|
388
|
+
if (lockPayload && lockPayload.lockData) {
|
|
389
|
+
const roomData = {
|
|
390
|
+
roomId: roomId,
|
|
391
|
+
adminChatLock: lockPayload.lockData,
|
|
392
|
+
};
|
|
393
|
+
setCachedRoomData(roomId, roomData);
|
|
394
|
+
return roomData;
|
|
394
395
|
}
|
|
395
396
|
}
|
|
397
|
+
} catch (err) {
|
|
398
|
+
// Ignore error
|
|
396
399
|
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
}
|
|
400
|
-
return roomData;
|
|
400
|
+
|
|
401
|
+
return null;
|
|
401
402
|
}
|
|
402
403
|
function isLockedForUser(roomData) {
|
|
403
404
|
return !!(roomData && roomData.adminChatLock && roomData.adminChatLock.isLocked && !canManageChats());
|
|
@@ -739,6 +740,35 @@ $(document).ready(function() {
|
|
|
739
740
|
socket.on('event:chats.restore', function() { setTimeout(refreshChatUi, 0); });
|
|
740
741
|
}
|
|
741
742
|
|
|
743
|
+
// Monitor for new chat modals/windows being added to the DOM
|
|
744
|
+
// This ensures styling is applied to floating chat windows opened from non-chat pages
|
|
745
|
+
const observer = new MutationObserver(function(mutations) {
|
|
746
|
+
let hasNewChatWindow = false;
|
|
747
|
+
mutations.forEach(function(mutation) {
|
|
748
|
+
if (mutation.type === 'childList') {
|
|
749
|
+
mutation.addedNodes.forEach(function(node) {
|
|
750
|
+
if (node.nodeType === 1) { // Element node
|
|
751
|
+
const $node = $(node);
|
|
752
|
+
if ($node.is('.chat-modal') || $node.find('.chat-modal').length) {
|
|
753
|
+
hasNewChatWindow = true;
|
|
754
|
+
}
|
|
755
|
+
if ($node.is('[component="chat/message/window"]') || $node.find('[component="chat/message/window"]').length) {
|
|
756
|
+
hasNewChatWindow = true;
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
});
|
|
762
|
+
if (hasNewChatWindow) {
|
|
763
|
+
setTimeout(refreshChatUi, 50);
|
|
764
|
+
}
|
|
765
|
+
});
|
|
766
|
+
|
|
767
|
+
observer.observe(document.body, {
|
|
768
|
+
childList: true,
|
|
769
|
+
subtree: true
|
|
770
|
+
});
|
|
771
|
+
|
|
742
772
|
// Handle browser back/forward navigation
|
|
743
773
|
$(window).on('popstate', function() {
|
|
744
774
|
if (isAdminAllChatsPage()) {
|
package/library.js
CHANGED
|
@@ -830,6 +830,29 @@ function registerRoutes(app, router, middleware) {
|
|
|
830
830
|
return res.status(500).json({ status: { code: 'error', message: err.message } });
|
|
831
831
|
}
|
|
832
832
|
});
|
|
833
|
+
|
|
834
|
+
router.get('/api/admin-chats/:roomId/lock', ...routeMiddleware, async (req, res) => {
|
|
835
|
+
try {
|
|
836
|
+
const roomId = parseInt(req.params.roomId, 10);
|
|
837
|
+
|
|
838
|
+
if (Number.isNaN(roomId)) {
|
|
839
|
+
return res.status(400).json({ status: { code: 'bad-request', message: 'Invalid room id' } });
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
if (!await roomExists(roomId)) {
|
|
843
|
+
return res.status(404).json({ status: { code: 'not-found', message: 'Room not found' } });
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
const lockData = await getRoomLockData(roomId);
|
|
847
|
+
return res.json({
|
|
848
|
+
status: { code: 'ok', message: 'Lock data retrieved' },
|
|
849
|
+
roomId,
|
|
850
|
+
lockData,
|
|
851
|
+
});
|
|
852
|
+
} catch (err) {
|
|
853
|
+
return res.status(500).json({ status: { code: 'error', message: err.message } });
|
|
854
|
+
}
|
|
855
|
+
});
|
|
833
856
|
}
|
|
834
857
|
|
|
835
858
|
async function renderAdminChatsPage(req, res, next) {
|
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 تم قفل هذه الغرفة من قبل المسؤولين.",
|
|
3
|
+
"menu.lock": "قفل الغرفة",
|
|
4
|
+
"menu.release": "إزالة القفل",
|
|
5
|
+
"errors.update": "تعذر تحديث قفل الغرفة.",
|
|
6
|
+
"profile.viewChats": "عرض الدردشات",
|
|
7
|
+
"empty.selectChat": "يرجى اختيار دردشة من الشريط الجانبي.",
|
|
8
|
+
"errors.lockedAction": "لا يمكن تنفيذ هذا الإجراء في غرفة مقفلة.",
|
|
9
|
+
"admin-chats-view": "عرض جميع الدردشات",
|
|
10
|
+
"admin-chats-manage": "إدارة غرف الدردشة",
|
|
11
|
+
"participants": "المشاركون"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Dieser Raum wurde von den Administratoren gesperrt.",
|
|
3
|
+
"menu.lock": "Raum sperren",
|
|
4
|
+
"menu.release": "Sperre aufheben",
|
|
5
|
+
"errors.update": "Raumsperre konnte nicht aktualisiert werden.",
|
|
6
|
+
"profile.viewChats": "Chats ansehen",
|
|
7
|
+
"empty.selectChat": "Bitte wählen Sie einen Chat in der Seitenleiste aus.",
|
|
8
|
+
"errors.lockedAction": "Diese Aktion kann in einem gesperrten Raum nicht ausgeführt werden.",
|
|
9
|
+
"admin-chats-view": "Alle Chats ansehen",
|
|
10
|
+
"admin-chats-manage": "Chat-Räume verwalten",
|
|
11
|
+
"participants": "Teilnehmer"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Dieser Raum wurde von den Administratoren gesperrt.",
|
|
3
|
+
"menu.lock": "Raum sperren",
|
|
4
|
+
"menu.release": "Sperre aufheben",
|
|
5
|
+
"errors.update": "Raumsperre konnte nicht aktualisiert werden.",
|
|
6
|
+
"profile.viewChats": "Chats ansehen",
|
|
7
|
+
"empty.selectChat": "Bitte wählen Sie einen Chat in der Seitenleiste aus.",
|
|
8
|
+
"errors.lockedAction": "Diese Aktion kann in einem gesperrten Raum nicht ausgeführt werden.",
|
|
9
|
+
"admin-chats-view": "Alle Chats ansehen",
|
|
10
|
+
"admin-chats-manage": "Chat-Räume verwalten",
|
|
11
|
+
"participants": "Teilnehmer"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Αυτό το δωμάτιο κλειδώθηκε από τους διαχειριστές.",
|
|
3
|
+
"menu.lock": "Κλείδωμα δωματίου",
|
|
4
|
+
"menu.release": "Άρση κλειδώματος",
|
|
5
|
+
"errors.update": "Δεν ήταν δυνατή η ενημέρωση του κλειδώματος του δωματίου.",
|
|
6
|
+
"profile.viewChats": "Προβολή συνομιλιών",
|
|
7
|
+
"empty.selectChat": "Παρακαλώ επιλέξτε μια συνομιλία από την πλαϊνή μπάρα.",
|
|
8
|
+
"errors.lockedAction": "Αυτή η ενέργεια δεν μπορεί να εκτελεστεί σε κλειδωμένο δωμάτιο.",
|
|
9
|
+
"admin-chats-view": "Προβολή όλων των συνομιλιών",
|
|
10
|
+
"admin-chats-manage": "Διαχείριση δωματίων συνομιλίας",
|
|
11
|
+
"participants": "Συμμετέχοντες"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Esta sala fue bloqueada por los administradores.",
|
|
3
|
+
"menu.lock": "Bloquear sala",
|
|
4
|
+
"menu.release": "Liberar bloqueo",
|
|
5
|
+
"errors.update": "No se pudo actualizar el bloqueo de la sala.",
|
|
6
|
+
"profile.viewChats": "Ver chats",
|
|
7
|
+
"empty.selectChat": "Seleccione un chat de la barra lateral.",
|
|
8
|
+
"errors.lockedAction": "Esta acción no se puede realizar en una sala bloqueada.",
|
|
9
|
+
"admin-chats-view": "Ver todos los chats",
|
|
10
|
+
"admin-chats-manage": "Administrar salas de chat",
|
|
11
|
+
"participants": "Participantes"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Cette salle a été verrouillée par les administrateurs.",
|
|
3
|
+
"menu.lock": "Verrouiller la salle",
|
|
4
|
+
"menu.release": "Déverrouiller",
|
|
5
|
+
"errors.update": "Impossible de mettre à jour le verrouillage de la salle.",
|
|
6
|
+
"profile.viewChats": "Voir les discussions",
|
|
7
|
+
"empty.selectChat": "Veuillez sélectionner une discussion dans la barre latérale.",
|
|
8
|
+
"errors.lockedAction": "Cette action ne peut pas être effectuée dans une salle verrouillée.",
|
|
9
|
+
"admin-chats-view": "Voir toutes les discussions",
|
|
10
|
+
"admin-chats-manage": "Gérer les salons de discussion",
|
|
11
|
+
"participants": "Participants"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 इस कमरे को प्रशासकों द्वारा लॉक किया गया था।",
|
|
3
|
+
"menu.lock": "कमरा लॉक करें",
|
|
4
|
+
"menu.release": "लॉक हटाएं",
|
|
5
|
+
"errors.update": "कमरे का लॉक अपडेट नहीं हो सका।",
|
|
6
|
+
"profile.viewChats": "चैट देखें",
|
|
7
|
+
"empty.selectChat": "कृपया साइडबार से एक चैट चुनें।",
|
|
8
|
+
"errors.lockedAction": "लॉक किए गए कमरे में यह कार्रवाई नहीं की जा सकती।",
|
|
9
|
+
"admin-chats-view": "सभी चैट देखें",
|
|
10
|
+
"admin-chats-manage": "चैट रूम प्रबंधित करें",
|
|
11
|
+
"participants": "प्रतिभागी"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Questa stanza è stata bloccata dagli amministratori.",
|
|
3
|
+
"menu.lock": "Blocca stanza",
|
|
4
|
+
"menu.release": "Rimuovi blocco",
|
|
5
|
+
"errors.update": "Impossibile aggiornare il blocco della stanza.",
|
|
6
|
+
"profile.viewChats": "Visualizza chat",
|
|
7
|
+
"empty.selectChat": "Seleziona una chat dalla barra laterale.",
|
|
8
|
+
"errors.lockedAction": "Questa azione non può essere eseguita in una stanza bloccata.",
|
|
9
|
+
"admin-chats-view": "Visualizza tutte le chat",
|
|
10
|
+
"admin-chats-manage": "Gestisci le stanze di chat",
|
|
11
|
+
"participants": "Partecipanti"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Questa stanza è stata bloccata dagli amministratori.",
|
|
3
|
+
"menu.lock": "Blocca stanza",
|
|
4
|
+
"menu.release": "Rimuovi blocco",
|
|
5
|
+
"errors.update": "Impossibile aggiornare il blocco della stanza.",
|
|
6
|
+
"profile.viewChats": "Visualizza chat",
|
|
7
|
+
"empty.selectChat": "Seleziona una chat dalla barra laterale.",
|
|
8
|
+
"errors.lockedAction": "Questa azione non può essere eseguita in una stanza bloccata.",
|
|
9
|
+
"admin-chats-view": "Visualizza tutte le chat",
|
|
10
|
+
"admin-chats-manage": "Gestisci le stanze di chat",
|
|
11
|
+
"participants": "Partecipanti"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 このルームは管理者によってロックされました。",
|
|
3
|
+
"menu.lock": "ルームをロック",
|
|
4
|
+
"menu.release": "ロック解除",
|
|
5
|
+
"errors.update": "ルームのロックを更新できませんでした。",
|
|
6
|
+
"profile.viewChats": "チャットを見る",
|
|
7
|
+
"empty.selectChat": "サイドバーからチャットを選択してください。",
|
|
8
|
+
"errors.lockedAction": "ロックされたルームではこの操作は実行できません。",
|
|
9
|
+
"admin-chats-view": "すべてのチャットを見る",
|
|
10
|
+
"admin-chats-manage": "チャットルームを管理",
|
|
11
|
+
"participants": "参加者"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Deze chatruimte is door de beheerders vergrendeld.",
|
|
3
|
+
"menu.lock": "Chatruimte vergrendelen",
|
|
4
|
+
"menu.release": "Vergrendeling opheffen",
|
|
5
|
+
"errors.update": "Kon de vergrendeling van de chatruimte niet bijwerken.",
|
|
6
|
+
"profile.viewChats": "Chats bekijken",
|
|
7
|
+
"empty.selectChat": "Selecteer een chat in de zijbalk.",
|
|
8
|
+
"errors.lockedAction": "Deze actie kan niet worden uitgevoerd in een vergrendelde chatruimte.",
|
|
9
|
+
"admin-chats-view": "Alle chats bekijken",
|
|
10
|
+
"admin-chats-manage": "Chatruimtes beheren",
|
|
11
|
+
"participants": "Deelnemers"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Ten pokój został zablokowany przez administratorów.",
|
|
3
|
+
"menu.lock": "Zablokuj pokój",
|
|
4
|
+
"menu.release": "Odblokuj",
|
|
5
|
+
"errors.update": "Nie udało się zaktualizować blokady pokoju.",
|
|
6
|
+
"profile.viewChats": "Wyświetl czaty",
|
|
7
|
+
"empty.selectChat": "Wybierz czat z paska bocznego.",
|
|
8
|
+
"errors.lockedAction": "Tej czynności nie można wykonać w zablokowanym pokoju.",
|
|
9
|
+
"admin-chats-view": "Wyświetl wszystkie czaty",
|
|
10
|
+
"admin-chats-manage": "Zarządzaj pokojami czatu",
|
|
11
|
+
"participants": "Uczestnicy"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Esta sala foi bloqueada pelos administradores.",
|
|
3
|
+
"menu.lock": "Bloquear sala",
|
|
4
|
+
"menu.release": "Desbloquear sala",
|
|
5
|
+
"errors.update": "Não foi possível atualizar o bloqueio da sala.",
|
|
6
|
+
"profile.viewChats": "Ver chats",
|
|
7
|
+
"empty.selectChat": "Selecione um chat na barra lateral.",
|
|
8
|
+
"errors.lockedAction": "Esta ação não pode ser realizada em uma sala bloqueada.",
|
|
9
|
+
"admin-chats-view": "Ver todos os chats",
|
|
10
|
+
"admin-chats-manage": "Gerenciar salas de chat",
|
|
11
|
+
"participants": "Participantes"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Quest locals è vegnì bloccà dals administraturs.",
|
|
3
|
+
"menu.lock": "Bloccar il local",
|
|
4
|
+
"menu.release": "Levà il bloc",
|
|
5
|
+
"errors.update": "Impussibel d'actualisar il bloc dal local.",
|
|
6
|
+
"profile.viewChats": "Veser chats",
|
|
7
|
+
"empty.selectChat": "Per plaschair tscherna in chat en la trav laterala.",
|
|
8
|
+
"errors.lockedAction": "Questa acziun na po betg vegnir fatga en in local bloccà.",
|
|
9
|
+
"admin-chats-view": "Veser tut ils chats",
|
|
10
|
+
"admin-chats-manage": "Administrar locals da chat",
|
|
11
|
+
"participants": "Participonts"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Эта комната была заблокирована администраторами.",
|
|
3
|
+
"menu.lock": "Заблокировать комнату",
|
|
4
|
+
"menu.release": "Снять блокировку",
|
|
5
|
+
"errors.update": "Не удалось обновить блокировку комнаты.",
|
|
6
|
+
"profile.viewChats": "Просмотреть чаты",
|
|
7
|
+
"empty.selectChat": "Пожалуйста, выберите чат на боковой панели.",
|
|
8
|
+
"errors.lockedAction": "Это действие нельзя выполнить в заблокированной комнате.",
|
|
9
|
+
"admin-chats-view": "Просмотреть все чаты",
|
|
10
|
+
"admin-chats-manage": "Управлять чат-комнатами",
|
|
11
|
+
"participants": "Участники"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 Ця кімната заблокована адміністратором.",
|
|
3
|
+
"menu.lock": "Заблокувати кімнату",
|
|
4
|
+
"menu.release": "Зняти блокування",
|
|
5
|
+
"errors.update": "Не вдалося оновити блокування кімнати.",
|
|
6
|
+
"profile.viewChats": "Переглянути Чати",
|
|
7
|
+
"empty.selectChat": "Оберіть чат з сайдбару, будь ласка.",
|
|
8
|
+
"errors.lockedAction": "Цю дію не можна виконати в блокованій кімнаті.",
|
|
9
|
+
"admin-chats-view": "Переглянути всі чати",
|
|
10
|
+
"admin-chats-manage": "Керувати чат-кімнатами",
|
|
11
|
+
"participants": "Учасники"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 此聊天室已被管理员锁定。",
|
|
3
|
+
"menu.lock": "锁定聊天室",
|
|
4
|
+
"menu.release": "解除锁定",
|
|
5
|
+
"errors.update": "无法更新聊天室锁定状态。",
|
|
6
|
+
"profile.viewChats": "查看聊天",
|
|
7
|
+
"empty.selectChat": "请从侧边栏选择一个聊天。",
|
|
8
|
+
"errors.lockedAction": "锁定的聊天室无法执行此操作。",
|
|
9
|
+
"admin-chats-view": "查看所有聊天",
|
|
10
|
+
"admin-chats-manage": "管理聊天室",
|
|
11
|
+
"participants": "参与者"
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lock.banner": "🔒 此聊天室已被管理員鎖定。",
|
|
3
|
+
"menu.lock": "鎖定聊天室",
|
|
4
|
+
"menu.release": "解除鎖定",
|
|
5
|
+
"errors.update": "無法更新聊天室鎖定狀態。",
|
|
6
|
+
"profile.viewChats": "查看聊天",
|
|
7
|
+
"empty.selectChat": "請從側邊欄選擇一個聊天。",
|
|
8
|
+
"errors.lockedAction": "鎖定的聊天室無法執行此操作。",
|
|
9
|
+
"admin-chats-view": "查看所有聊天",
|
|
10
|
+
"admin-chats-manage": "管理聊天室",
|
|
11
|
+
"participants": "參與者"
|
|
12
|
+
}
|