strapi-plugin-magic-link-v5 4.6.0 → 4.8.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/README.md CHANGED
@@ -5,6 +5,18 @@ Secure passwordless authentication for Strapi using email-based magic links. No
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
6
6
  [![npm version](https://badge.fury.io/js/strapi-plugin-magic-link-v5.svg)](https://www.npmjs.com/package/strapi-plugin-magic-link-v5)
7
7
 
8
+ ## 🌍 Supported Languages
9
+
10
+ The admin interface is available in **5 languages** for international accessibility:
11
+
12
+ - 🇬🇧 **English** - Global standard
13
+ - 🇩🇪 **Deutsch** - German (DACH region)
14
+ - 🇫🇷 **Français** - French (Strapi's home & community)
15
+ - 🇪🇸 **Español** - Spanish (Spain & Latin America)
16
+ - 🇵🇹 **Português** - Portuguese (Brazil & Portugal)
17
+
18
+ Users can switch languages in **Settings → Magic Link → Interface Language**.
19
+
8
20
  ---
9
21
 
10
22
  ## 📜 License
@@ -1,5 +1,6 @@
1
1
  import React, { useState, useEffect, useCallback, useMemo } from 'react';
2
2
  import styled, { keyframes } from 'styled-components';
3
+ import { useIntl } from 'react-intl';
3
4
  import {
4
5
  Typography,
5
6
  Box,
@@ -33,6 +34,7 @@ import {
33
34
  Plus,
34
35
  WarningCircle,
35
36
  } from '@strapi/icons';
37
+ import getTrad from '../../utils/getTrad';
36
38
 
37
39
  // ================ DESIGN TOKENS ================
38
40
  const theme = {
@@ -253,6 +255,7 @@ const LoadingOverlay = styled(Flex)`
253
255
 
254
256
  // ================ HAUPTKOMPONENTE ================
255
257
  const IPBans = () => {
258
+ const { formatMessage } = useIntl();
256
259
  const { get, post } = useFetchClient();
257
260
  const { toggleNotification } = useNotification();
258
261
 
@@ -295,7 +298,7 @@ const IPBans = () => {
295
298
  // Stat Cards Konfiguration
296
299
  const statCards = [
297
300
  {
298
- title: 'Gesperrte IPs',
301
+ title: formatMessage({ id: getTrad('ipban.stats.total') }),
299
302
  value: stats.total,
300
303
  icon: Lock,
301
304
  color: theme.colors.danger[600],
@@ -331,8 +334,8 @@ const IPBans = () => {
331
334
  fetchBannedIPs();
332
335
  toggleNotification({
333
336
  type: 'success',
334
- message: 'Daten wurden aktualisiert',
335
- title: 'Erfolg'
337
+ message: formatMessage({ id: getTrad('ipban.notifications.refreshSuccess') }),
338
+ title: formatMessage({ id: getTrad('tokens.notifications.success') })
336
339
  });
337
340
  };
338
341
 
@@ -355,14 +358,14 @@ const IPBans = () => {
355
358
  setNewIP('');
356
359
  toggleNotification({
357
360
  type: 'success',
358
- message: `IP ${newIP} wurde gesperrt`,
359
- title: 'Erfolg'
361
+ message: formatMessage({ id: getTrad('ipban.notifications.banSuccess') }, { ip: newIP }),
362
+ title: formatMessage({ id: getTrad('tokens.notifications.success') })
360
363
  });
361
364
  } catch (error) {
362
365
  toggleNotification({
363
366
  type: 'warning',
364
- message: 'Fehler beim Sperren der IP',
365
- title: 'Fehler'
367
+ message: formatMessage({ id: getTrad('ipban.notifications.banError') }),
368
+ title: formatMessage({ id: getTrad('tokens.notifications.error') })
366
369
  });
367
370
  }
368
371
  };
@@ -375,14 +378,14 @@ const IPBans = () => {
375
378
  await fetchBannedIPs();
376
379
  toggleNotification({
377
380
  type: 'success',
378
- message: `IP ${ip} wurde entsperrt`,
379
- title: 'Erfolg'
381
+ message: formatMessage({ id: getTrad('ipban.notifications.unbanSuccess') }, { ip }),
382
+ title: formatMessage({ id: getTrad('tokens.notifications.success') })
380
383
  });
381
384
  } catch (error) {
382
385
  toggleNotification({
383
386
  type: 'warning',
384
- message: 'Fehler beim Entsperren der IP',
385
- title: 'Fehler'
387
+ message: formatMessage({ id: getTrad('ipban.notifications.unbanError') }),
388
+ title: formatMessage({ id: getTrad('tokens.notifications.error') })
386
389
  });
387
390
  }
388
391
  };
@@ -399,7 +402,7 @@ const IPBans = () => {
399
402
  <Container>
400
403
  <LoadingOverlay>
401
404
  <Box className="loader-icon">
402
- <Loader>Lade gesperrte IPs...</Loader>
405
+ <Loader>{formatMessage({ id: getTrad('common.loadingBannedIPs') })}</Loader>
403
406
  </Box>
404
407
  </LoadingOverlay>
405
408
  </Container>
@@ -454,7 +457,7 @@ const IPBans = () => {
454
457
  variant="default"
455
458
  size="S"
456
459
  >
457
- IP sperren
460
+ {formatMessage({ id: getTrad('ipban.actions.ban') })}
458
461
  </Button>
459
462
  <Button
460
463
  onClick={handleRefresh}
@@ -462,7 +465,7 @@ const IPBans = () => {
462
465
  variant="secondary"
463
466
  size="S"
464
467
  >
465
- Aktualisieren
468
+ {formatMessage({ id: getTrad('ipban.actions.refresh') })}
466
469
  </Button>
467
470
  </FilterBar>
468
471
 
@@ -495,7 +498,7 @@ const IPBans = () => {
495
498
  marginBottom: '8px',
496
499
  }}
497
500
  >
498
- Keine gesperrten IPs
501
+ {formatMessage({ id: getTrad('ipban.empty.title') })}
499
502
  </Typography>
500
503
 
501
504
  <Typography
@@ -507,7 +510,7 @@ const IPBans = () => {
507
510
  lineHeight: '1.6',
508
511
  }}
509
512
  >
510
- Es sind momentan keine IP-Adressen gesperrt. Fügen Sie eine IP hinzu, um sie zu blockieren.
513
+ {formatMessage({ id: getTrad('ipban.empty.description') })}
511
514
  </Typography>
512
515
 
513
516
  <Flex gap={3} justifyContent="center" style={{ marginTop: '16px' }}>
@@ -522,7 +525,7 @@ const IPBans = () => {
522
525
  fontWeight: '600',
523
526
  }}
524
527
  >
525
- Erste IP sperren
528
+ {formatMessage({ id: getTrad('ipban.empty.action') })}
526
529
  </Button>
527
530
  </Flex>
528
531
  </Flex>
@@ -568,12 +571,12 @@ const IPBans = () => {
568
571
  </Flex>
569
572
  </Td>
570
573
  <Td>
571
- <AnimatedBadge variant="danger">Gesperrt</AnimatedBadge>
574
+ <AnimatedBadge variant="danger">{formatMessage({ id: getTrad('ipban.status.banned') })}</AnimatedBadge>
572
575
  </Td>
573
576
  <Td>
574
577
  <Flex gap={1} justifyContent="flex-end">
575
578
  <IconButton
576
- label="IP entsperren"
579
+ label={formatMessage({ id: getTrad('ipban.actions.unban') })}
577
580
  variant="success-ghost"
578
581
  onClick={() => handleUnbanIP(ip)}
579
582
  withTooltip={false}
@@ -593,7 +596,7 @@ const IPBans = () => {
593
596
  <Flex justifyContent="center">
594
597
  <Pagination activePage={currentPage} pageCount={totalPages}>
595
598
  <PreviousLink onClick={() => setCurrentPage(Math.max(1, currentPage - 1))}>
596
- Zurück
599
+ {formatMessage({ id: getTrad('common.previous') })}
597
600
  </PreviousLink>
598
601
  {[...Array(totalPages)].map((_, i) => (
599
602
  <PageLink
@@ -605,7 +608,7 @@ const IPBans = () => {
605
608
  </PageLink>
606
609
  ))}
607
610
  <NextLink onClick={() => setCurrentPage(Math.min(totalPages, currentPage + 1))}>
608
- Weiter
611
+ {formatMessage({ id: getTrad('common.next') })}
609
612
  </NextLink>
610
613
  </Pagination>
611
614
  </Flex>
@@ -659,15 +662,15 @@ const IPBans = () => {
659
662
  >
660
663
  <Flex direction="column" gap={1} alignItems="flex-start">
661
664
  <Typography variant="beta" style={{ fontSize: '16px', fontWeight: '600' }}>
662
- IP-Adresse sperren
665
+ {formatMessage({ id: getTrad('ipban.modal.title') })}
663
666
  </Typography>
664
667
  <Typography variant="pi" textColor="neutral600" style={{ fontSize: '13px' }}>
665
- Fügen Sie eine IP-Adresse zur Sperrliste hinzu
668
+ {formatMessage({ id: getTrad('ipban.modal.subtitle') })}
666
669
  </Typography>
667
670
  </Flex>
668
671
  <IconButton
669
672
  onClick={() => setShowAddModal(false)}
670
- label="Schließen"
673
+ label={formatMessage({ id: getTrad('common.close') })}
671
674
  withTooltip={false}
672
675
  >
673
676
  <Cross />
@@ -695,8 +698,8 @@ const IPBans = () => {
695
698
 
696
699
  <Box>
697
700
  <TextInput
698
- label="IP-Adresse"
699
- placeholder="z.B. 192.168.1.1"
701
+ label={formatMessage({ id: getTrad('ipban.modal.label') })}
702
+ placeholder={formatMessage({ id: getTrad('ipban.modal.placeholder') })}
700
703
  value={newIP}
701
704
  onChange={(e) => setNewIP(e.target.value)}
702
705
  style={{ fontSize: '14px', fontFamily: 'monospace' }}
@@ -706,7 +709,7 @@ const IPBans = () => {
706
709
  textColor="neutral600"
707
710
  style={{ marginTop: '6px', fontSize: '12px' }}
708
711
  >
709
- Geben Sie eine IPv4 oder IPv6 Adresse ein
712
+ {formatMessage({ id: getTrad('ipban.modal.hint') })}
710
713
  </Typography>
711
714
  </Box>
712
715
  </Flex>
@@ -734,7 +737,7 @@ const IPBans = () => {
734
737
  size="M"
735
738
  variant="tertiary"
736
739
  >
737
- Abbrechen
740
+ {formatMessage({ id: getTrad('ipban.modal.cancel') })}
738
741
  </Button>
739
742
  <Button
740
743
  onClick={handleBanIP}
@@ -743,7 +746,7 @@ const IPBans = () => {
743
746
  startIcon={<Lock />}
744
747
  disabled={!newIP}
745
748
  >
746
- IP sperren
749
+ {formatMessage({ id: getTrad('ipban.modal.submit') })}
747
750
  </Button>
748
751
  </Flex>
749
752
  </Box>
@@ -1,5 +1,6 @@
1
1
  import React, { useState, useEffect, useCallback, useMemo } from 'react';
2
2
  import styled, { keyframes } from 'styled-components';
3
+ import { useIntl } from 'react-intl';
3
4
  import {
4
5
  Typography,
5
6
  Box,
@@ -38,6 +39,7 @@ import {
38
39
  CaretDown,
39
40
  Monitor,
40
41
  } from '@strapi/icons';
42
+ import getTrad from '../../utils/getTrad';
41
43
 
42
44
  // ================ DESIGN TOKENS ================
43
45
  const theme = {
@@ -280,6 +282,7 @@ const formatDate = (dateString) => {
280
282
 
281
283
  // ================ HAUPTKOMPONENTE ================
282
284
  const JWTSessions = () => {
285
+ const { formatMessage } = useIntl();
283
286
  const { get, post } = useFetchClient();
284
287
  const { toggleNotification } = useNotification();
285
288
 
@@ -358,7 +361,7 @@ const JWTSessions = () => {
358
361
  // Stat Cards Konfiguration
359
362
  const statCards = [
360
363
  {
361
- title: 'Gesamt',
364
+ title: formatMessage({ id: getTrad('jwt.stats.total') }),
362
365
  value: stats.total,
363
366
  icon: Shield,
364
367
  color: theme.colors.primary[600],
@@ -366,7 +369,7 @@ const JWTSessions = () => {
366
369
  delay: '0s'
367
370
  },
368
371
  {
369
- title: 'Aktiv',
372
+ title: formatMessage({ id: getTrad('jwt.stats.active') }),
370
373
  value: stats.active,
371
374
  icon: Check,
372
375
  color: theme.colors.success[600],
@@ -374,7 +377,7 @@ const JWTSessions = () => {
374
377
  delay: '0.1s'
375
378
  },
376
379
  {
377
- title: 'Abgelaufen',
380
+ title: formatMessage({ id: getTrad('jwt.stats.expired') }),
378
381
  value: stats.expired,
379
382
  icon: Clock,
380
383
  color: theme.colors.warning[600],
@@ -382,7 +385,7 @@ const JWTSessions = () => {
382
385
  delay: '0.2s'
383
386
  },
384
387
  {
385
- title: 'Gesperrt',
388
+ title: formatMessage({ id: getTrad('jwt.stats.revoked') }),
386
389
  value: stats.revoked,
387
390
  icon: Lock,
388
391
  color: theme.colors.danger[600],
@@ -435,8 +438,8 @@ const JWTSessions = () => {
435
438
  } catch (error) {
436
439
  toggleNotification({
437
440
  type: 'warning',
438
- message: 'Fehler beim Sperren der Session',
439
- title: 'Fehler'
441
+ message: formatMessage({ id: getTrad('jwt.notifications.revokeError') }),
442
+ title: formatMessage({ id: getTrad('tokens.notifications.error') })
440
443
  });
441
444
  }
442
445
  };
@@ -447,14 +450,14 @@ const JWTSessions = () => {
447
450
  await fetchSessions();
448
451
  toggleNotification({
449
452
  type: 'success',
450
- message: 'Session wurde entsperrt',
451
- title: 'Erfolg'
453
+ message: formatMessage({ id: getTrad('jwt.notifications.unrevokeSuccess') }),
454
+ title: formatMessage({ id: getTrad('tokens.notifications.success') })
452
455
  });
453
456
  } catch (error) {
454
457
  toggleNotification({
455
458
  type: 'warning',
456
- message: 'Fehler beim Entsperren der Session',
457
- title: 'Fehler'
459
+ message: formatMessage({ id: getTrad('jwt.notifications.unrevokeError') }),
460
+ title: formatMessage({ id: getTrad('tokens.notifications.error') })
458
461
  });
459
462
  }
460
463
  };
@@ -465,14 +468,14 @@ const JWTSessions = () => {
465
468
  await fetchSessions();
466
469
  toggleNotification({
467
470
  type: 'success',
468
- message: response?.data?.message || 'Sessions wurden aufgeräumt',
469
- title: 'Erfolg'
471
+ message: response?.data?.message || formatMessage({ id: getTrad('jwt.notifications.cleanupSuccess') }),
472
+ title: formatMessage({ id: getTrad('tokens.notifications.success') })
470
473
  });
471
474
  } catch (error) {
472
475
  toggleNotification({
473
476
  type: 'warning',
474
- message: 'Fehler beim Aufräumen der Sessions',
475
- title: 'Fehler'
477
+ message: formatMessage({ id: getTrad('jwt.notifications.cleanupError') }),
478
+ title: formatMessage({ id: getTrad('tokens.notifications.error') })
476
479
  });
477
480
  }
478
481
  };
@@ -504,12 +507,12 @@ const JWTSessions = () => {
504
507
 
505
508
  const getStatusBadge = (session) => {
506
509
  if (session.revoked) {
507
- return <AnimatedBadge variant="danger">Gesperrt</AnimatedBadge>;
510
+ return <AnimatedBadge variant="danger">{formatMessage({ id: getTrad('jwt.status.revoked') })}</AnimatedBadge>;
508
511
  }
509
512
  if (session.isExpired) {
510
- return <AnimatedBadge variant="warning">Abgelaufen</AnimatedBadge>;
513
+ return <AnimatedBadge variant="warning">{formatMessage({ id: getTrad('jwt.status.expired') })}</AnimatedBadge>;
511
514
  }
512
- return <AnimatedBadge variant="success">Aktiv</AnimatedBadge>;
515
+ return <AnimatedBadge variant="success">{formatMessage({ id: getTrad('jwt.status.active') })}</AnimatedBadge>;
513
516
  };
514
517
 
515
518
  // Loading State
@@ -518,7 +521,7 @@ const JWTSessions = () => {
518
521
  <Container>
519
522
  <LoadingOverlay>
520
523
  <Box className="loader-icon">
521
- <Loader>Lade JWT Sessions...</Loader>
524
+ <Loader>{formatMessage({ id: getTrad('common.loadingSessions') })}</Loader>
522
525
  </Box>
523
526
  </LoadingOverlay>
524
527
  </Container>
@@ -570,12 +573,12 @@ const JWTSessions = () => {
570
573
  <SingleSelect
571
574
  value={filterStatus}
572
575
  onChange={setFilterStatus}
573
- placeholder="Status filtern"
576
+ placeholder={formatMessage({ id: getTrad('tokens.filter.status') })}
574
577
  >
575
- <SingleSelectOption value="all">Alle anzeigen</SingleSelectOption>
576
- <SingleSelectOption value="active">Nur Aktive</SingleSelectOption>
577
- <SingleSelectOption value="expired">Nur Abgelaufene</SingleSelectOption>
578
- <SingleSelectOption value="revoked">Nur Gesperrte</SingleSelectOption>
578
+ <SingleSelectOption value="all">{formatMessage({ id: getTrad('jwt.filter.all') })}</SingleSelectOption>
579
+ <SingleSelectOption value="active">{formatMessage({ id: getTrad('jwt.filter.active') })}</SingleSelectOption>
580
+ <SingleSelectOption value="expired">{formatMessage({ id: getTrad('jwt.filter.expired') })}</SingleSelectOption>
581
+ <SingleSelectOption value="revoked">{formatMessage({ id: getTrad('jwt.filter.revoked') })}</SingleSelectOption>
579
582
  </SingleSelect>
580
583
  <SingleSelect
581
584
  value={pageSize.toString()}
@@ -593,7 +596,7 @@ const JWTSessions = () => {
593
596
  variant="secondary"
594
597
  size="S"
595
598
  >
596
- Aufräumen
599
+ {formatMessage({ id: getTrad('jwt.actions.cleanup') })}
597
600
  </Button>
598
601
  <Button
599
602
  onClick={handleRefresh}
@@ -601,7 +604,7 @@ const JWTSessions = () => {
601
604
  variant="secondary"
602
605
  size="S"
603
606
  >
604
- Aktualisieren
607
+ {formatMessage({ id: getTrad('jwt.actions.refresh') })}
605
608
  </Button>
606
609
  </FilterBar>
607
610
 
@@ -650,7 +653,7 @@ const JWTSessions = () => {
650
653
  marginBottom: '8px',
651
654
  }}
652
655
  >
653
- Keine JWT Sessions gefunden
656
+ {formatMessage({ id: getTrad('jwt.empty.title') })}
654
657
  </Typography>
655
658
 
656
659
  <Typography
@@ -662,7 +665,7 @@ const JWTSessions = () => {
662
665
  lineHeight: '1.6',
663
666
  }}
664
667
  >
665
- Es sind momentan keine JWT Sessions aktiv oder ändere deine Filterkriterien
668
+ {formatMessage({ id: getTrad('jwt.empty.description') })}
666
669
  </Typography>
667
670
 
668
671
  <Flex gap={3} justifyContent="center" style={{ marginTop: '16px' }}>
@@ -674,7 +677,7 @@ const JWTSessions = () => {
674
677
  variant="secondary"
675
678
  size="L"
676
679
  >
677
- Filter zurücksetzen
680
+ {formatMessage({ id: getTrad('jwt.empty.resetFilters') })}
678
681
  </Button>
679
682
  </Flex>
680
683
  </Flex>
@@ -789,7 +792,7 @@ const JWTSessions = () => {
789
792
  <Flex gap={1} justifyContent="flex-end">
790
793
  {session.revoked ? (
791
794
  <IconButton
792
- label="Session entsperren"
795
+ label={formatMessage({ id: getTrad('jwt.actions.unrevoke') })}
793
796
  variant="success-ghost"
794
797
  onClick={() => handleUnrevoke(session.id, session.userId)}
795
798
  withTooltip={false}
@@ -799,7 +802,7 @@ const JWTSessions = () => {
799
802
  </IconButton>
800
803
  ) : (
801
804
  <IconButton
802
- label="Session sperren"
805
+ label={formatMessage({ id: getTrad('jwt.actions.revoke') })}
803
806
  variant="danger-ghost"
804
807
  onClick={() => handleRevoke(session.id)}
805
808
  withTooltip={false}
@@ -820,7 +823,7 @@ const JWTSessions = () => {
820
823
  <Flex justifyContent="center">
821
824
  <Pagination activePage={currentPage} pageCount={totalPages}>
822
825
  <PreviousLink onClick={() => setCurrentPage(Math.max(1, currentPage - 1))}>
823
- Zurück
826
+ {formatMessage({ id: getTrad('common.previous') })}
824
827
  </PreviousLink>
825
828
  {[...Array(totalPages)].map((_, i) => (
826
829
  <PageLink
@@ -832,7 +835,7 @@ const JWTSessions = () => {
832
835
  </PageLink>
833
836
  ))}
834
837
  <NextLink onClick={() => setCurrentPage(Math.min(totalPages, currentPage + 1))}>
835
- Weiter
838
+ {formatMessage({ id: getTrad('common.next') })}
836
839
  </NextLink>
837
840
  </Pagination>
838
841
  </Flex>
@@ -296,5 +296,76 @@
296
296
  "magic-link.tokens.extend.custom": "Eigene",
297
297
  "magic-link.tokens.extend.newExpiry": "Neues Ablaufdatum",
298
298
  "magic-link.tokens.extend.submit": "Token verlängern",
299
- "magic-link.tokens.extend.cancel": "Abbrechen"
299
+ "magic-link.tokens.extend.cancel": "Abbrechen",
300
+
301
+ "magic-link.jwt.stats.total": "Gesamt",
302
+ "magic-link.jwt.stats.active": "Aktiv",
303
+ "magic-link.jwt.stats.expired": "Abgelaufen",
304
+ "magic-link.jwt.stats.revoked": "Gesperrt",
305
+ "magic-link.jwt.filter.all": "Alle anzeigen",
306
+ "magic-link.jwt.filter.active": "Nur Aktive",
307
+ "magic-link.jwt.filter.expired": "Nur Abgelaufene",
308
+ "magic-link.jwt.filter.revoked": "Nur Gesperrte",
309
+ "magic-link.jwt.status.active": "Aktiv",
310
+ "magic-link.jwt.status.expired": "Abgelaufen",
311
+ "magic-link.jwt.status.revoked": "Gesperrt",
312
+ "magic-link.jwt.actions.cleanup": "Aufräumen",
313
+ "magic-link.jwt.actions.refresh": "Aktualisieren",
314
+ "magic-link.jwt.actions.revoke": "Sperren",
315
+ "magic-link.jwt.actions.unrevoke": "Entsperren",
316
+ "magic-link.jwt.empty.title": "Keine JWT Sessions gefunden",
317
+ "magic-link.jwt.empty.description": "Es sind momentan keine JWT Sessions aktiv oder ändere deine Filterkriterien",
318
+ "magic-link.jwt.empty.resetFilters": "Filter zurücksetzen",
319
+ "magic-link.jwt.notifications.revokeSuccess": "Session wurde gesperrt",
320
+ "magic-link.jwt.notifications.revokeError": "Fehler beim Sperren der Session",
321
+ "magic-link.jwt.notifications.unrevokeSuccess": "Session wurde entsperrt",
322
+ "magic-link.jwt.notifications.unrevokeError": "Fehler beim Entsperren der Session",
323
+ "magic-link.jwt.notifications.cleanupSuccess": "Sessions wurden aufgeräumt",
324
+ "magic-link.jwt.notifications.cleanupError": "Fehler beim Aufräumen der Sessions",
325
+ "magic-link.jwt.notifications.refreshSuccess": "Daten wurden aktualisiert",
326
+
327
+ "magic-link.ipban.stats.total": "Gesperrte IPs",
328
+ "magic-link.ipban.title": "Gesperrte IP-Adressen",
329
+ "magic-link.ipban.actions.ban": "IP sperren",
330
+ "magic-link.ipban.actions.unban": "Entsperren",
331
+ "magic-link.ipban.actions.refresh": "Aktualisieren",
332
+ "magic-link.ipban.modal.title": "IP-Adresse sperren",
333
+ "magic-link.ipban.modal.subtitle": "Fügen Sie eine IP-Adresse zur Sperrliste hinzu",
334
+ "magic-link.ipban.modal.warning": "Warnung: Diese IP-Adresse wird sofort gesperrt und alle zugehörigen Tokens werden deaktiviert.",
335
+ "magic-link.ipban.modal.label": "IP-Adresse",
336
+ "magic-link.ipban.modal.placeholder": "z.B. 192.168.1.1",
337
+ "magic-link.ipban.modal.hint": "Geben Sie eine IPv4 oder IPv6 Adresse ein",
338
+ "magic-link.ipban.modal.cancel": "Abbrechen",
339
+ "magic-link.ipban.modal.submit": "IP sperren",
340
+ "magic-link.ipban.status.banned": "Gesperrt",
341
+ "magic-link.ipban.empty.title": "Keine gesperrten IPs",
342
+ "magic-link.ipban.empty.description": "Es sind momentan keine IP-Adressen gesperrt. Fügen Sie eine IP hinzu, um sie zu blockieren.",
343
+ "magic-link.ipban.empty.action": "Erste IP sperren",
344
+ "magic-link.ipban.notifications.banSuccess": "IP {ip} wurde gesperrt",
345
+ "magic-link.ipban.notifications.unbanSuccess": "IP {ip} wurde entsperrt",
346
+ "magic-link.ipban.notifications.banError": "Fehler beim Sperren der IP",
347
+ "magic-link.ipban.notifications.unbanError": "Fehler beim Entsperren der IP",
348
+ "magic-link.ipban.notifications.refreshSuccess": "IP-Liste aktualisiert",
349
+
350
+ "magic-link.common.loading": "Lädt...",
351
+ "magic-link.common.loadingSessions": "Lade JWT Sessions...",
352
+ "magic-link.common.loadingBannedIPs": "Lade gesperrte IP-Adressen...",
353
+ "magic-link.common.search": "Suchen",
354
+ "magic-link.common.clear": "Löschen",
355
+ "magic-link.common.previous": "Zurück",
356
+ "magic-link.common.next": "Weiter",
357
+ "magic-link.common.user": "Benutzer",
358
+ "magic-link.common.ipAddress": "IP-Adresse",
359
+ "magic-link.common.userAgent": "User Agent",
360
+ "magic-link.common.status": "Status",
361
+ "magic-link.common.created": "Erstellt",
362
+ "magic-link.common.expiresAt": "Gültig bis",
363
+ "magic-link.common.actions": "Aktionen",
364
+ "magic-link.common.tokens": "Tokens",
365
+ "magic-link.common.close": "Schließen",
366
+ "magic-link.common.cancel": "Abbrechen",
367
+ "magic-link.common.submit": "Absenden",
368
+ "magic-link.common.entriesPerPage": "Einträge pro Seite",
369
+ "magic-link.common.entries": "{count} Einträge",
370
+ "magic-link.common.selectedCount": "{count} ausgewählt"
300
371
  }
@@ -296,5 +296,76 @@
296
296
  "magic-link.tokens.extend.custom": "Custom",
297
297
  "magic-link.tokens.extend.newExpiry": "New expiry date",
298
298
  "magic-link.tokens.extend.submit": "Extend Token",
299
- "magic-link.tokens.extend.cancel": "Cancel"
299
+ "magic-link.tokens.extend.cancel": "Cancel",
300
+
301
+ "magic-link.jwt.stats.total": "Total",
302
+ "magic-link.jwt.stats.active": "Active",
303
+ "magic-link.jwt.stats.expired": "Expired",
304
+ "magic-link.jwt.stats.revoked": "Revoked",
305
+ "magic-link.jwt.filter.all": "Show All",
306
+ "magic-link.jwt.filter.active": "Active Only",
307
+ "magic-link.jwt.filter.expired": "Expired Only",
308
+ "magic-link.jwt.filter.revoked": "Revoked Only",
309
+ "magic-link.jwt.status.active": "Active",
310
+ "magic-link.jwt.status.expired": "Expired",
311
+ "magic-link.jwt.status.revoked": "Revoked",
312
+ "magic-link.jwt.actions.cleanup": "Cleanup",
313
+ "magic-link.jwt.actions.refresh": "Refresh",
314
+ "magic-link.jwt.actions.revoke": "Revoke",
315
+ "magic-link.jwt.actions.unrevoke": "Unrevoke",
316
+ "magic-link.jwt.empty.title": "No JWT Sessions Found",
317
+ "magic-link.jwt.empty.description": "No JWT sessions are currently active or change your filter criteria",
318
+ "magic-link.jwt.empty.resetFilters": "Reset Filters",
319
+ "magic-link.jwt.notifications.revokeSuccess": "Session revoked successfully",
320
+ "magic-link.jwt.notifications.revokeError": "Error revoking session",
321
+ "magic-link.jwt.notifications.unrevokeSuccess": "Session unrevoked successfully",
322
+ "magic-link.jwt.notifications.unrevokeError": "Error unrevoking session",
323
+ "magic-link.jwt.notifications.cleanupSuccess": "Sessions cleaned up successfully",
324
+ "magic-link.jwt.notifications.cleanupError": "Error cleaning up sessions",
325
+ "magic-link.jwt.notifications.refreshSuccess": "Data has been refreshed",
326
+
327
+ "magic-link.ipban.stats.total": "Banned IPs",
328
+ "magic-link.ipban.title": "Banned IP Addresses",
329
+ "magic-link.ipban.actions.ban": "Ban IP",
330
+ "magic-link.ipban.actions.unban": "Unban",
331
+ "magic-link.ipban.actions.refresh": "Refresh",
332
+ "magic-link.ipban.modal.title": "Ban IP Address",
333
+ "magic-link.ipban.modal.subtitle": "Add an IP address to the block list",
334
+ "magic-link.ipban.modal.warning": "Warning: This IP address will be immediately blocked and all associated tokens will be deactivated.",
335
+ "magic-link.ipban.modal.label": "IP Address",
336
+ "magic-link.ipban.modal.placeholder": "e.g. 192.168.1.1",
337
+ "magic-link.ipban.modal.hint": "Enter an IPv4 or IPv6 address",
338
+ "magic-link.ipban.modal.cancel": "Cancel",
339
+ "magic-link.ipban.modal.submit": "Ban IP",
340
+ "magic-link.ipban.status.banned": "Banned",
341
+ "magic-link.ipban.empty.title": "No Banned IPs",
342
+ "magic-link.ipban.empty.description": "No IP addresses are currently banned. Add an IP to block it.",
343
+ "magic-link.ipban.empty.action": "Ban First IP",
344
+ "magic-link.ipban.notifications.banSuccess": "IP {ip} has been banned",
345
+ "magic-link.ipban.notifications.unbanSuccess": "IP {ip} has been unbanned",
346
+ "magic-link.ipban.notifications.banError": "Error banning IP",
347
+ "magic-link.ipban.notifications.unbanError": "Error unbanning IP",
348
+ "magic-link.ipban.notifications.refreshSuccess": "IP list updated",
349
+
350
+ "magic-link.common.loading": "Loading...",
351
+ "magic-link.common.loadingSessions": "Loading JWT sessions...",
352
+ "magic-link.common.loadingBannedIPs": "Loading banned IP addresses...",
353
+ "magic-link.common.search": "Search",
354
+ "magic-link.common.clear": "Clear",
355
+ "magic-link.common.previous": "Previous",
356
+ "magic-link.common.next": "Next",
357
+ "magic-link.common.user": "User",
358
+ "magic-link.common.ipAddress": "IP Address",
359
+ "magic-link.common.userAgent": "User Agent",
360
+ "magic-link.common.status": "Status",
361
+ "magic-link.common.created": "Created",
362
+ "magic-link.common.expiresAt": "Expires At",
363
+ "magic-link.common.actions": "Actions",
364
+ "magic-link.common.tokens": "Tokens",
365
+ "magic-link.common.close": "Close",
366
+ "magic-link.common.cancel": "Cancel",
367
+ "magic-link.common.submit": "Submit",
368
+ "magic-link.common.entriesPerPage": "Entries per page",
369
+ "magic-link.common.entries": "{count} entries",
370
+ "magic-link.common.selectedCount": "{count} selected"
300
371
  }
@@ -296,6 +296,77 @@
296
296
  "magic-link.tokens.extend.custom": "Personalizado",
297
297
  "magic-link.tokens.extend.newExpiry": "Nueva fecha de expiración",
298
298
  "magic-link.tokens.extend.submit": "Extender token",
299
- "magic-link.tokens.extend.cancel": "Cancelar"
299
+ "magic-link.tokens.extend.cancel": "Cancelar",
300
+
301
+ "magic-link.jwt.stats.total": "Total",
302
+ "magic-link.jwt.stats.active": "Activo",
303
+ "magic-link.jwt.stats.expired": "Expirado",
304
+ "magic-link.jwt.stats.revoked": "Revocado",
305
+ "magic-link.jwt.filter.all": "Mostrar todo",
306
+ "magic-link.jwt.filter.active": "Solo activos",
307
+ "magic-link.jwt.filter.expired": "Solo expirados",
308
+ "magic-link.jwt.filter.revoked": "Solo revocados",
309
+ "magic-link.jwt.status.active": "Activo",
310
+ "magic-link.jwt.status.expired": "Expirado",
311
+ "magic-link.jwt.status.revoked": "Revocado",
312
+ "magic-link.jwt.actions.cleanup": "Limpiar",
313
+ "magic-link.jwt.actions.refresh": "Actualizar",
314
+ "magic-link.jwt.actions.revoke": "Revocar",
315
+ "magic-link.jwt.actions.unrevoke": "Desrevocar",
316
+ "magic-link.jwt.empty.title": "No se encontraron sesiones JWT",
317
+ "magic-link.jwt.empty.description": "No hay sesiones JWT activas actualmente o cambie sus criterios de filtro",
318
+ "magic-link.jwt.empty.resetFilters": "Restablecer filtros",
319
+ "magic-link.jwt.notifications.revokeSuccess": "Sesión revocada correctamente",
320
+ "magic-link.jwt.notifications.revokeError": "Error al revocar la sesión",
321
+ "magic-link.jwt.notifications.unrevokeSuccess": "Sesión desrevocada correctamente",
322
+ "magic-link.jwt.notifications.unrevokeError": "Error al desrevocar la sesión",
323
+ "magic-link.jwt.notifications.cleanupSuccess": "Sesiones limpiadas correctamente",
324
+ "magic-link.jwt.notifications.cleanupError": "Error al limpiar las sesiones",
325
+ "magic-link.jwt.notifications.refreshSuccess": "Los datos se han actualizado",
326
+
327
+ "magic-link.ipban.stats.total": "IPs bloqueadas",
328
+ "magic-link.ipban.title": "Direcciones IP bloqueadas",
329
+ "magic-link.ipban.actions.ban": "Bloquear IP",
330
+ "magic-link.ipban.actions.unban": "Desbloquear",
331
+ "magic-link.ipban.actions.refresh": "Actualizar",
332
+ "magic-link.ipban.modal.title": "Bloquear dirección IP",
333
+ "magic-link.ipban.modal.subtitle": "Agregar una dirección IP a la lista de bloqueo",
334
+ "magic-link.ipban.modal.warning": "Advertencia: Esta dirección IP será bloqueada inmediatamente y todos los tokens asociados serán desactivados.",
335
+ "magic-link.ipban.modal.label": "Dirección IP",
336
+ "magic-link.ipban.modal.placeholder": "ej. 192.168.1.1",
337
+ "magic-link.ipban.modal.hint": "Ingrese una dirección IPv4 o IPv6",
338
+ "magic-link.ipban.modal.cancel": "Cancelar",
339
+ "magic-link.ipban.modal.submit": "Bloquear IP",
340
+ "magic-link.ipban.status.banned": "Bloqueado",
341
+ "magic-link.ipban.empty.title": "No hay IPs bloqueadas",
342
+ "magic-link.ipban.empty.description": "No hay direcciones IP bloqueadas actualmente. Agregue una IP para bloquearla.",
343
+ "magic-link.ipban.empty.action": "Bloquear primera IP",
344
+ "magic-link.ipban.notifications.banSuccess": "IP {ip} ha sido bloqueada",
345
+ "magic-link.ipban.notifications.unbanSuccess": "IP {ip} ha sido desbloqueada",
346
+ "magic-link.ipban.notifications.banError": "Error al bloquear IP",
347
+ "magic-link.ipban.notifications.unbanError": "Error al desbloquear IP",
348
+ "magic-link.ipban.notifications.refreshSuccess": "Lista de IP actualizada",
349
+
350
+ "magic-link.common.loading": "Cargando...",
351
+ "magic-link.common.loadingSessions": "Cargando sesiones JWT...",
352
+ "magic-link.common.loadingBannedIPs": "Cargando direcciones IP bloqueadas...",
353
+ "magic-link.common.search": "Buscar",
354
+ "magic-link.common.clear": "Borrar",
355
+ "magic-link.common.previous": "Anterior",
356
+ "magic-link.common.next": "Siguiente",
357
+ "magic-link.common.user": "Usuario",
358
+ "magic-link.common.ipAddress": "Dirección IP",
359
+ "magic-link.common.userAgent": "User Agent",
360
+ "magic-link.common.status": "Estado",
361
+ "magic-link.common.created": "Creado",
362
+ "magic-link.common.expiresAt": "Expira",
363
+ "magic-link.common.actions": "Acciones",
364
+ "magic-link.common.tokens": "Tokens",
365
+ "magic-link.common.close": "Cerrar",
366
+ "magic-link.common.cancel": "Cancelar",
367
+ "magic-link.common.submit": "Enviar",
368
+ "magic-link.common.entriesPerPage": "Entradas por página",
369
+ "magic-link.common.entries": "{count} entradas",
370
+ "magic-link.common.selectedCount": "{count} seleccionado(s)"
300
371
  }
301
372
 
@@ -296,6 +296,77 @@
296
296
  "magic-link.tokens.extend.custom": "Personnalisé",
297
297
  "magic-link.tokens.extend.newExpiry": "Nouvelle date d'expiration",
298
298
  "magic-link.tokens.extend.submit": "Prolonger le jeton",
299
- "magic-link.tokens.extend.cancel": "Annuler"
299
+ "magic-link.tokens.extend.cancel": "Annuler",
300
+
301
+ "magic-link.jwt.stats.total": "Total",
302
+ "magic-link.jwt.stats.active": "Actif",
303
+ "magic-link.jwt.stats.expired": "Expiré",
304
+ "magic-link.jwt.stats.revoked": "Révoqué",
305
+ "magic-link.jwt.filter.all": "Afficher tout",
306
+ "magic-link.jwt.filter.active": "Actifs uniquement",
307
+ "magic-link.jwt.filter.expired": "Expirés uniquement",
308
+ "magic-link.jwt.filter.revoked": "Révoqués uniquement",
309
+ "magic-link.jwt.status.active": "Actif",
310
+ "magic-link.jwt.status.expired": "Expiré",
311
+ "magic-link.jwt.status.revoked": "Révoqué",
312
+ "magic-link.jwt.actions.cleanup": "Nettoyer",
313
+ "magic-link.jwt.actions.refresh": "Actualiser",
314
+ "magic-link.jwt.actions.revoke": "Révoquer",
315
+ "magic-link.jwt.actions.unrevoke": "Annuler la révocation",
316
+ "magic-link.jwt.empty.title": "Aucune session JWT trouvée",
317
+ "magic-link.jwt.empty.description": "Aucune session JWT n'est actuellement active ou modifiez vos critères de filtre",
318
+ "magic-link.jwt.empty.resetFilters": "Réinitialiser les filtres",
319
+ "magic-link.jwt.notifications.revokeSuccess": "Session révoquée avec succès",
320
+ "magic-link.jwt.notifications.revokeError": "Erreur lors de la révocation de la session",
321
+ "magic-link.jwt.notifications.unrevokeSuccess": "Révocation de session annulée avec succès",
322
+ "magic-link.jwt.notifications.unrevokeError": "Erreur lors de l'annulation de la révocation de la session",
323
+ "magic-link.jwt.notifications.cleanupSuccess": "Sessions nettoyées avec succès",
324
+ "magic-link.jwt.notifications.cleanupError": "Erreur lors du nettoyage des sessions",
325
+ "magic-link.jwt.notifications.refreshSuccess": "Les données ont été actualisées",
326
+
327
+ "magic-link.ipban.stats.total": "IPs bannies",
328
+ "magic-link.ipban.title": "Adresses IP bannies",
329
+ "magic-link.ipban.actions.ban": "Bannir IP",
330
+ "magic-link.ipban.actions.unban": "Débannir",
331
+ "magic-link.ipban.actions.refresh": "Actualiser",
332
+ "magic-link.ipban.modal.title": "Bannir une adresse IP",
333
+ "magic-link.ipban.modal.subtitle": "Ajouter une adresse IP à la liste de blocage",
334
+ "magic-link.ipban.modal.warning": "Attention : Cette adresse IP sera immédiatement bloquée et tous les jetons associés seront désactivés.",
335
+ "magic-link.ipban.modal.label": "Adresse IP",
336
+ "magic-link.ipban.modal.placeholder": "ex. 192.168.1.1",
337
+ "magic-link.ipban.modal.hint": "Entrez une adresse IPv4 ou IPv6",
338
+ "magic-link.ipban.modal.cancel": "Annuler",
339
+ "magic-link.ipban.modal.submit": "Bannir IP",
340
+ "magic-link.ipban.status.banned": "Banni",
341
+ "magic-link.ipban.empty.title": "Aucune IP bannie",
342
+ "magic-link.ipban.empty.description": "Aucune adresse IP n'est actuellement bannie. Ajoutez une IP pour la bloquer.",
343
+ "magic-link.ipban.empty.action": "Bannir la première IP",
344
+ "magic-link.ipban.notifications.banSuccess": "IP {ip} a été bannie",
345
+ "magic-link.ipban.notifications.unbanSuccess": "IP {ip} a été débannie",
346
+ "magic-link.ipban.notifications.banError": "Erreur lors du bannissement de l'IP",
347
+ "magic-link.ipban.notifications.unbanError": "Erreur lors du débannissement de l'IP",
348
+ "magic-link.ipban.notifications.refreshSuccess": "Liste IP mise à jour",
349
+
350
+ "magic-link.common.loading": "Chargement...",
351
+ "magic-link.common.loadingSessions": "Chargement des sessions JWT...",
352
+ "magic-link.common.loadingBannedIPs": "Chargement des adresses IP bannies...",
353
+ "magic-link.common.search": "Rechercher",
354
+ "magic-link.common.clear": "Effacer",
355
+ "magic-link.common.previous": "Précédent",
356
+ "magic-link.common.next": "Suivant",
357
+ "magic-link.common.user": "Utilisateur",
358
+ "magic-link.common.ipAddress": "Adresse IP",
359
+ "magic-link.common.userAgent": "User Agent",
360
+ "magic-link.common.status": "Statut",
361
+ "magic-link.common.created": "Créé",
362
+ "magic-link.common.expiresAt": "Expire le",
363
+ "magic-link.common.actions": "Actions",
364
+ "magic-link.common.tokens": "Jetons",
365
+ "magic-link.common.close": "Fermer",
366
+ "magic-link.common.cancel": "Annuler",
367
+ "magic-link.common.submit": "Soumettre",
368
+ "magic-link.common.entriesPerPage": "Entrées par page",
369
+ "magic-link.common.entries": "{count} entrées",
370
+ "magic-link.common.selectedCount": "{count} sélectionné(s)"
300
371
  }
301
372
 
@@ -296,6 +296,77 @@
296
296
  "magic-link.tokens.extend.custom": "Personalizado",
297
297
  "magic-link.tokens.extend.newExpiry": "Nova data de expiração",
298
298
  "magic-link.tokens.extend.submit": "Estender token",
299
- "magic-link.tokens.extend.cancel": "Cancelar"
299
+ "magic-link.tokens.extend.cancel": "Cancelar",
300
+
301
+ "magic-link.jwt.stats.total": "Total",
302
+ "magic-link.jwt.stats.active": "Ativo",
303
+ "magic-link.jwt.stats.expired": "Expirado",
304
+ "magic-link.jwt.stats.revoked": "Revogado",
305
+ "magic-link.jwt.filter.all": "Mostrar tudo",
306
+ "magic-link.jwt.filter.active": "Apenas ativos",
307
+ "magic-link.jwt.filter.expired": "Apenas expirados",
308
+ "magic-link.jwt.filter.revoked": "Apenas revogados",
309
+ "magic-link.jwt.status.active": "Ativo",
310
+ "magic-link.jwt.status.expired": "Expirado",
311
+ "magic-link.jwt.status.revoked": "Revogado",
312
+ "magic-link.jwt.actions.cleanup": "Limpar",
313
+ "magic-link.jwt.actions.refresh": "Atualizar",
314
+ "magic-link.jwt.actions.revoke": "Revogar",
315
+ "magic-link.jwt.actions.unrevoke": "Cancelar revogação",
316
+ "magic-link.jwt.empty.title": "Nenhuma sessão JWT encontrada",
317
+ "magic-link.jwt.empty.description": "Não há sessões JWT ativas no momento ou altere seus critérios de filtro",
318
+ "magic-link.jwt.empty.resetFilters": "Redefinir filtros",
319
+ "magic-link.jwt.notifications.revokeSuccess": "Sessão revogada com sucesso",
320
+ "magic-link.jwt.notifications.revokeError": "Erro ao revogar a sessão",
321
+ "magic-link.jwt.notifications.unrevokeSuccess": "Revogação de sessão cancelada com sucesso",
322
+ "magic-link.jwt.notifications.unrevokeError": "Erro ao cancelar a revogação da sessão",
323
+ "magic-link.jwt.notifications.cleanupSuccess": "Sessões limpas com sucesso",
324
+ "magic-link.jwt.notifications.cleanupError": "Erro ao limpar as sessões",
325
+ "magic-link.jwt.notifications.refreshSuccess": "Os dados foram atualizados",
326
+
327
+ "magic-link.ipban.stats.total": "IPs banidos",
328
+ "magic-link.ipban.title": "Endereços IP banidos",
329
+ "magic-link.ipban.actions.ban": "Banir IP",
330
+ "magic-link.ipban.actions.unban": "Desbanir",
331
+ "magic-link.ipban.actions.refresh": "Atualizar",
332
+ "magic-link.ipban.modal.title": "Banir endereço IP",
333
+ "magic-link.ipban.modal.subtitle": "Adicionar um endereço IP à lista de bloqueio",
334
+ "magic-link.ipban.modal.warning": "Aviso: Este endereço IP será bloqueado imediatamente e todos os tokens associados serão desativados.",
335
+ "magic-link.ipban.modal.label": "Endereço IP",
336
+ "magic-link.ipban.modal.placeholder": "ex. 192.168.1.1",
337
+ "magic-link.ipban.modal.hint": "Digite um endereço IPv4 ou IPv6",
338
+ "magic-link.ipban.modal.cancel": "Cancelar",
339
+ "magic-link.ipban.modal.submit": "Banir IP",
340
+ "magic-link.ipban.status.banned": "Banido",
341
+ "magic-link.ipban.empty.title": "Nenhum IP banido",
342
+ "magic-link.ipban.empty.description": "Nenhum endereço IP está banido no momento. Adicione um IP para bloqueá-lo.",
343
+ "magic-link.ipban.empty.action": "Banir primeiro IP",
344
+ "magic-link.ipban.notifications.banSuccess": "IP {ip} foi banido",
345
+ "magic-link.ipban.notifications.unbanSuccess": "IP {ip} foi desbanido",
346
+ "magic-link.ipban.notifications.banError": "Erro ao banir IP",
347
+ "magic-link.ipban.notifications.unbanError": "Erro ao desbanir IP",
348
+ "magic-link.ipban.notifications.refreshSuccess": "Lista de IP atualizada",
349
+
350
+ "magic-link.common.loading": "Carregando...",
351
+ "magic-link.common.loadingSessions": "Carregando sessões JWT...",
352
+ "magic-link.common.loadingBannedIPs": "Carregando endereços IP banidos...",
353
+ "magic-link.common.search": "Pesquisar",
354
+ "magic-link.common.clear": "Limpar",
355
+ "magic-link.common.previous": "Anterior",
356
+ "magic-link.common.next": "Próximo",
357
+ "magic-link.common.user": "Usuário",
358
+ "magic-link.common.ipAddress": "Endereço IP",
359
+ "magic-link.common.userAgent": "User Agent",
360
+ "magic-link.common.status": "Status",
361
+ "magic-link.common.created": "Criado",
362
+ "magic-link.common.expiresAt": "Expira em",
363
+ "magic-link.common.actions": "Ações",
364
+ "magic-link.common.tokens": "Tokens",
365
+ "magic-link.common.close": "Fechar",
366
+ "magic-link.common.cancel": "Cancelar",
367
+ "magic-link.common.submit": "Enviar",
368
+ "magic-link.common.entriesPerPage": "Entradas por página",
369
+ "magic-link.common.entries": "{count} entradas",
370
+ "magic-link.common.selectedCount": "{count} selecionado(s)"
300
371
  }
301
372
 
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.6.0",
2
+ "version": "4.8.0",
3
3
  "keywords": [],
4
4
  "type": "commonjs",
5
5
  "exports": {