Merge pull request #2793 from modoboa/refacto/dmarc_plugin

Moved DMARC plugin back to core repo
This commit is contained in:
Antoine Nguyen
2023-02-23 19:42:15 +01:00
committed by GitHub
86 changed files with 7124 additions and 608 deletions
+2 -2
View File
@@ -101,7 +101,7 @@ jobs:
run: |
python ./tests.py
cd test_project
python3 manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.transport modoboa.relaydomains modoboa.dnstools modoboa.ldapsync modoboa.policyd modoboa.maillog modoboa.parameters
python3 manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.transport modoboa.relaydomains modoboa.dnstools modoboa.ldapsync modoboa.policyd modoboa.maillog modoboa.parameters modoboa.dmarc
env:
# use localhost for the host here because we are running the job on the VM.
# If we were running the job on in a container this would be postgres
@@ -117,7 +117,7 @@ jobs:
run: |
python ./tests.py
cd test_project
coverage run manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.transport modoboa.relaydomains modoboa.dnstools modoboa.ldapsync modoboa.policyd modoboa.maillog modoboa.parameters
coverage run manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.transport modoboa.relaydomains modoboa.dnstools modoboa.ldapsync modoboa.policyd modoboa.maillog modoboa.parameters modoboa.dmarc
coverage combine
env:
# use localhost for the host here because we are running the job on the VM.
+37 -4
View File
@@ -66,7 +66,7 @@ New admin interface won't update by itself. Run the following commands to update
> rm -rf frontend
> cp -R <virtuenv_path>/lib/pythonX.X/site-packages/modoboa/frontend_dist/ frontend/
> cp ./config.json frontend/config.json
Extensions
**********
@@ -108,7 +108,40 @@ Rebuild Virtual Environment
Specific instructions
*********************
2.0.4
2.1.0
=====
The ``modoboa-dmarc`` plugin has been merged into the core.
Add ``'modoboa.dmarc'`` to ``MODOBOA_APPS``:
.. sourcecode:: python
MODOBOA_APPS = (
'modoboa',
'modoboa.core',
'modoboa.lib',
'modoboa.admin',
'modoboa.transport',
'modoboa.relaydomains',
'modoboa.limits',
'modoboa.parameters',
'modoboa.dnstools',
'modoboa.policyd',
'modoboa.maillog',
'modoboa.dmarc',
)
And remove any reference to ``modoboa_dmarc`` in this same variable.
FIXME: INSTALLATION django-rename-app
.. sourcecode:: bash
python manage.py rename_app modoboa_dmarc dmarc
2.0.4t
=====
The following modifications must be applied to the :file:`settings.py` file:
@@ -159,7 +192,7 @@ The following modifications must be applied to the :file:`settings.py` file:
},
* You now have the possibility to customize the url of the new-admin interface.
* You now have the possibility to customize the url of the new-admin interface.
To do so please head up to :ref:`the custom configuration chapter <customization>` (advanced user).
* Add ``DEFAULT_THROTTLE_RATES`` to ``REST_FRAMEWORK``:
@@ -187,7 +220,7 @@ The following modifications must be applied to the :file:`settings.py` file:
* You can edit the ``DEFAULT_THROTTLE_RATES`` to whatever value suits you.
- `user` is for every endpoint, it is per user or per ip if not logged.
- `ddos` is per api endpoint and per user or per ip if not logged.
- `ddos` is per api endpoint and per user or per ip if not logged.
- `ddos_lesser` is for per api endpoint and per user or per ip if not logged. This is for api endpoint that are lighter.
- `login` the number of time an ip can attempt to log. The counter will reset on login success.
- `password_` is for the recovery, it is divided per step in the recovery process.
+165 -33
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:17+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:17+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -27,22 +27,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -165,7 +172,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -181,6 +190,10 @@ msgstr ""
msgid "Aliases"
msgstr "Aliasoù"
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -269,9 +282,12 @@ msgstr "Cheñch ger-tremen"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Kochit an dibarzh ma ne vez ket kriptet ar gerioù-tremen endalc'het en ho restr"
msgstr ""
"Kochit an dibarzh ma ne vez ket kriptet ar gerioù-tremen endalc'het en ho "
"restr"
#: src/components/domains/DomainAliasForm.vue:56
#: src/components/domains/DomainAliasForm.vue:26
@@ -282,7 +298,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -291,7 +308,8 @@ msgstr ""
msgid "Close"
msgstr "Serriñ"
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr "Serriñ"
@@ -306,7 +324,8 @@ msgstr "Kadarnadur"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -362,7 +381,8 @@ msgstr ""
msgid "Creation date"
msgstr "Deiziad krouidigezh"
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr "Kriptañ ar gerioù-tremen"
@@ -404,8 +424,12 @@ msgid "Default mailbox quota"
msgstr "Kota boest-posteloù dre-ziouer"
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Kota arloet d'ar boestoù-postel. Gellout a ra bezañ ezpleget e Ko, Mo (diouer) pe Go c'hoazh. Un dalvoudegezh \"0\" a dalvez kota ebet."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
"Kota arloet d'ar boestoù-postel. Gellout a ra bezañ ezpleget e Ko, Mo "
"(diouer) pe Go c'hoazh. Un dalvoudegezh \"0\" a dalvez kota ebet."
#: src/components/domains/DomainAliasForm.vue:24
#: src/components/domains/DomainList.vue:115
@@ -431,6 +455,10 @@ msgstr ""
msgid "Description"
msgstr "Deskrivadur"
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -460,7 +488,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -481,6 +510,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -491,6 +524,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -682,7 +719,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -719,6 +758,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr "C'hwitet"
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -740,13 +786,27 @@ msgstr "Treuzkas"
#: src/components/user/ForwardForm.vue:6
msgid "Forward messages and store copies into your local mailbox"
msgstr "Treuzkas kemennadennoù ha stokiñ eiladennoù e-barzh ar voest-posteloù lec'hel"
msgstr ""
"Treuzkas kemennadennoù ha stokiñ eiladennoù e-barzh ar voest-posteloù "
"lec'hel"
#: src/components/user/ForwardForm.vue:19
#: src/components/user/ForwardForm.vue:52
msgid "Forward updated"
msgstr "Treuzkas hizivaet"
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
#, fuzzy
msgid "Forwarded"
msgstr "Treuzkas"
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -762,13 +822,21 @@ msgstr "Anv klok"
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
#, fuzzy
msgid "Fully aligned"
msgstr "Linennet penn-da-benn"
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -806,7 +874,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -829,7 +899,15 @@ msgstr "Identelezhioù"
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1050,7 +1128,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1101,11 +1180,13 @@ msgid "Not generated"
msgstr "Neket ganet"
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1122,7 +1203,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr "Hegerz ez eus un hizivadenn pe muioc'h"
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1142,6 +1224,17 @@ msgstr "Dibarzhioù"
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr "Linennet dre an hanter"
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1219,7 +1312,8 @@ msgstr "Profil hizivaet"
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1237,12 +1331,23 @@ msgid "Quota"
msgstr "Kota"
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgstr "Kota evit ar voest-posteloù-mañ. Gellout a ra bezañ ezpleget e Ko, Mo (diouer) pe Go c'hoazh. Termeniñ un dalvoudegezh ispisial pe implijit talvoudegezh an domani. Laoskit goullo evit termeniñ un dalvoudegezh divevenn (berzet evit ar verourien zomani)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
"Kota evit ar voest-posteloù-mañ. Gellout a ra bezañ ezpleget e Ko, Mo "
"(diouer) pe Go c'hoazh. Termeniñ un dalvoudegezh ispisial pe implijit "
"talvoudegezh an domani. Laoskit goullo evit termeniñ un dalvoudegezh "
"divevenn (berzet evit ar verourien zomani)."
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Kota rannet kenetre ar boestoù-postel. Gellout a ra bezañ ezpleget e Ko, Mo (diouer) pe Go c'hoazh. Un dalvoudegezh \"0\" a dalvez kota ebet."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
"Kota rannet kenetre ar boestoù-postel. Gellout a ra bezañ ezpleget e Ko, Mo "
"(diouer) pe Go c'hoazh. Un dalvoudegezh \"0\" a dalvez kota ebet."
#: src/components/domains/DomainForm.vue:68
#: src/components/identities/AccountForm.vue:64
@@ -1469,7 +1574,13 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
#, fuzzy
msgid "Statistics"
msgstr "Statud"
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1497,7 +1608,9 @@ msgid "Tags"
msgstr "Balizoù"
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1540,6 +1653,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr "Hollad"
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1553,17 +1673,25 @@ msgstr ""
msgid "Transport"
msgstr "Treuzdougen"
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
#, fuzzy
msgid "Trusted sources"
msgstr "Mammennoù fizius"
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1585,6 +1713,10 @@ msgstr ""
msgid "Unknown"
msgstr "Dizanv"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr "Mammennoù dizanv/Gourdrouzioù"
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -270,7 +283,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,7 +323,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +380,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -405,7 +423,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -432,6 +452,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +485,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +507,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +521,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +716,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +755,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +790,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +816,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +867,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +892,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1121,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1173,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1196,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1217,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1305,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,11 +1324,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1470,7 +1561,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1594,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1639,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1659,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1698,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+163 -32
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:17+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:17+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr "Aliase"
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -270,7 +283,8 @@ msgstr "Passwort ändern"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Auswählen, wenn Kennwörter in Datei nicht verschlüsselt sind"
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr "Schließen"
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr "Schließen"
@@ -307,8 +323,11 @@ msgstr "Bestätigung"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr "Glückwunsch! Die Zwei-Faktor-Authentifizierung ist nun für diesen Account aktiviert."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
"Glückwunsch! Die Zwei-Faktor-Authentifizierung ist nun für diesen Account "
"aktiviert."
#: src/views/Login.vue:23
msgid "Connect"
@@ -363,7 +382,8 @@ msgstr ""
msgid "Creation date"
msgstr "Erstellungsdatum"
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr "Passwörter verschlüsseln"
@@ -405,8 +425,12 @@ msgid "Default mailbox quota"
msgstr "Standard Postfach Kontingent"
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Auf Postfächer angewendete Quota. Kann in KB, MB (Voreinstellung) oder GB angegeben werden. 0 eingeben, um keine Quota zu verwenden."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
"Auf Postfächer angewendete Quota. Kann in KB, MB (Voreinstellung) oder GB "
"angegeben werden. 0 eingeben, um keine Quota zu verwenden."
#: src/components/domains/DomainAliasForm.vue:24
#: src/components/domains/DomainList.vue:115
@@ -432,6 +456,10 @@ msgstr ""
msgid "Description"
msgstr "Beschreibung"
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +489,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +511,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +525,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +720,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +759,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr "Fehlgeschlagen"
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +794,18 @@ msgstr "Nachricht weiterleiten und Kopie in Mailbox ablegen"
msgid "Forward updated"
msgstr "Weiterleitung aktualisiert"
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
#, fuzzy
msgid "Forwarded"
msgstr "Weiterleiten"
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +821,21 @@ msgstr "Vollständiger Name"
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
#, fuzzy
msgid "Fully aligned"
msgstr "Voll zugeordnet"
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +873,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +898,15 @@ msgstr "Identitäten"
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1127,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1179,13 @@ msgid "Not generated"
msgstr "Nicht generiert"
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1202,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr "Eine oder mehrere Aktualisierungen sind verfügbar"
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1223,17 @@ msgstr "Optionen"
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr "Teilweise zugeordnet"
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1311,8 @@ msgstr "Profil aktualisiert"
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,12 +1330,24 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgstr "Quota dieses Postfachs. Kann in KB, MB (Voreinstellung) oder GB angegeben werden. Eigenen Wert eingeben oder Voreinstellung der Domain verwenden lassen. Frei lassen, um Quota auf unlimitiert zu setzen (nur Super-Administratoren)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
"Quota dieses Postfachs. Kann in KB, MB (Voreinstellung) oder GB angegeben "
"werden. Eigenen Wert eingeben oder Voreinstellung der Domain verwenden "
"lassen. Frei lassen, um Quota auf unlimitiert zu setzen (nur Super-"
"Administratoren)."
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Von Postfächern gemeinsam genutzte Quota/Speicherplatz. Kann in KB, MB (Voreinstellung) oder GB angegeben werden. 0 eingeben, um keine Quota zu verwenden."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
"Von Postfächern gemeinsam genutzte Quota/Speicherplatz. Kann in KB, MB "
"(Voreinstellung) oder GB angegeben werden. 0 eingeben, um keine Quota zu "
"verwenden."
#: src/components/domains/DomainForm.vue:68
#: src/components/identities/AccountForm.vue:64
@@ -1470,7 +1574,13 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
#, fuzzy
msgid "Statistics"
msgstr "Statistiken"
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1608,9 @@ msgid "Tags"
msgstr "Tags"
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1653,13 @@ msgstr "Bis"
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr "Total"
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1673,25 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
#, fuzzy
msgid "Trusted sources"
msgstr "Vertraute Quellen"
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
"Zwei-Faktor-Authentifizierung (2FA) ist noch nicht für diesen Account aktiviert.\n"
"Aktiviere dieses Feature, um die Account-Sicherheit zu erhöhen."
@@ -1588,6 +1715,10 @@ msgstr ""
msgid "Unknown"
msgstr "Unbekannt"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr "Unbekannte Quellen / Bedrohungen"
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -270,7 +283,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,7 +323,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +380,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -405,7 +423,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -432,6 +452,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +485,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +507,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +521,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +716,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +755,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +790,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +816,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +867,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +892,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1121,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1173,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1196,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1217,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1305,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,11 +1324,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1470,7 +1561,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1594,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1639,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1659,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1698,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+77 -2
View File
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-22 19:25+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: en\n"
@@ -177,6 +177,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -427,6 +431,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -477,6 +485,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -487,6 +499,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -715,6 +731,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -743,6 +766,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -758,13 +792,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -828,6 +869,10 @@ msgstr ""
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid "If you configured it recently, please wait for the first report to be received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
msgid "Import"
msgstr ""
@@ -1138,6 +1183,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1465,6 +1521,10 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
@@ -1536,6 +1596,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1553,6 +1620,10 @@ msgstr ""
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
@@ -1581,6 +1652,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+159 -32
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr "Alias"
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -270,9 +283,12 @@ msgstr "Cambiar contraseña"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Marque esta opción si las contraseñas que contiene su fichero no están cifradas"
msgstr ""
"Marque esta opción si las contraseñas que contiene su fichero no están "
"cifradas"
#: src/components/domains/DomainAliasForm.vue:56
#: src/components/domains/DomainAliasForm.vue:26
@@ -283,7 +299,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +309,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,7 +325,8 @@ msgstr "Confirmación"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +382,8 @@ msgstr ""
msgid "Creation date"
msgstr "Fecha de creación"
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr "Contraseñas cifradas"
@@ -405,8 +425,11 @@ msgid "Default mailbox quota"
msgstr "Cuota de mailbox por defecto"
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
"Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite."
#: src/components/domains/DomainAliasForm.vue:24
#: src/components/domains/DomainList.vue:115
@@ -432,6 +455,10 @@ msgstr ""
msgid "Description"
msgstr "Descripción"
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +488,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +510,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +524,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +719,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +758,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +793,18 @@ msgstr "Reenvía mensajes y guarda copias en su mailbox local"
msgid "Forward updated"
msgstr "Reenvío actualizado"
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
#, fuzzy
msgid "Forwarded"
msgstr "Siguiente"
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +820,21 @@ msgstr "Nombre completo"
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
#, fuzzy
msgid "Fully aligned"
msgstr "Nombre completo"
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +872,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +897,15 @@ msgstr "Identidades"
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1126,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1178,13 @@ msgid "Not generated"
msgstr "Sin definir"
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1201,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr "Una o más actualizaciones están disponibles"
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1222,17 @@ msgstr "Opciones"
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1310,8 @@ msgstr "Perfil actualizado"
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,12 +1329,21 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgstr "Cuota en MB para este mailbox. Defina un valor por defecto o use el del dominio por defecto. Déjelo vacío para definir un valor ilimitado (no permitido para los administradores del dominio)"
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
"Cuota en MB para este mailbox. Defina un valor por defecto o use el del "
"dominio por defecto. Déjelo vacío para definir un valor ilimitado (no "
"permitido para los administradores del dominio)"
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
"Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite."
#: src/components/domains/DomainForm.vue:68
#: src/components/identities/AccountForm.vue:64
@@ -1470,7 +1570,13 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
#, fuzzy
msgid "Statistics"
msgstr "Estadísticas"
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1604,9 @@ msgid "Tags"
msgstr "Tags"
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1649,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1669,25 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
#, fuzzy
msgid "Trusted sources"
msgstr "Recursos"
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1709,10 @@ msgstr ""
msgid "Unknown"
msgstr "Desconocido"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+203 -45
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:17+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -26,23 +26,39 @@ msgstr "API:n dokumentaatio on saatavilla"
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr "Uusi avain luodaan pian. Päivitä sivu hetken kuluttua nähdäksesi sen."
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgstr "Käyttäjä, jolla on kaikki oikeudet, voi tehdä mitä tahansa. Oletusarvoisesti tällaisella käyttäjällä ei ole postilaatikkoa, joten hän ei voi käyttää loppukäyttäjän ominaisuuksia."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
"Käyttäjä, jolla on kaikki oikeudet, voi tehdä mitä tahansa. Oletusarvoisesti"
" tällaisella käyttäjällä ei ole postilaatikkoa, joten hän ei voi käyttää "
"loppukäyttäjän ominaisuuksia."
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgstr "Käyttäjä, jolla ei ole oikeuksia mutta jolla on postilaatikko. Hän saa käyttää kaikkia loppukäyttäjän ominaisuuksia: webmail, kalenteri, yhteystiedot, suodattimet."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
"Käyttäjä, jolla ei ole oikeuksia mutta jolla on postilaatikko. Hän saa "
"käyttää kaikkia loppukäyttäjän ominaisuuksia: webmail, kalenteri, "
"yhteystiedot, suodattimet."
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgstr "Käyttäjä, jolla on oikeuksia yhdessä tai useammassa verkkotunnuksessa. Hänellä on oikeus hallinnoida postilaatikoita ja hänellä voi myös olla postilaatikko."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
"Käyttäjä, jolla on oikeuksia yhdessä tai useammassa verkkotunnuksessa. "
"Hänellä on oikeus hallinnoida postilaatikoita ja hänellä voi myös olla "
"postilaatikko."
#: src/components/tools/TimeSerieChart.vue:16
msgid "Absolute time range"
@@ -164,8 +180,12 @@ msgstr "Alias päivitetty"
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgstr "Tämän postilaatikon alias-nimet. Jos haluat luoda catchall-aliaksen, kirjoita vain verkkotunnus (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
"Tämän postilaatikon alias-nimet. Jos haluat luoda catchall-aliaksen, "
"kirjoita vain verkkotunnus (@domain.tld)."
#: src/components/domains/DomainList.vue:25
#: src/components/domains/DomainSummary.vue:31
@@ -180,6 +200,10 @@ msgstr "Tämän postilaatikon alias-nimet. Jos haluat luoda catchall-aliaksen, k
msgid "Aliases"
msgstr "Aliakset"
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -269,9 +293,12 @@ msgstr "Vaihda salasana"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Valitse tämä vaihtoehto, jos tiedostosi sisältämiä salasanoja ei ole salakirjoitettu"
msgstr ""
"Valitse tämä vaihtoehto, jos tiedostosi sisältämiä salasanoja ei ole "
"salakirjoitettu"
#: src/components/domains/DomainAliasForm.vue:56
#: src/components/domains/DomainAliasForm.vue:26
@@ -282,7 +309,8 @@ msgstr "Valitse verkkotunnus"
msgid "Choose a role"
msgstr "Valitse käyttäjätyyppisi"
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -291,7 +319,8 @@ msgstr "Valitse käyttäjätyyppisi"
msgid "Close"
msgstr "Sulje"
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
#, fuzzy
msgid "Closed"
msgstr "Suljettu"
@@ -307,7 +336,8 @@ msgstr "Vahvistus"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr "Onnittelut! Kaksivaiheinen tunnistus on nyt käytössä tililläsi."
#: src/views/Login.vue:23
@@ -363,7 +393,8 @@ msgstr "Luo verkkotunnuksen tavanomaiset aliakset."
msgid "Creation date"
msgstr "Luontipäivä"
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr "Salakirjoita salasanat"
@@ -405,8 +436,13 @@ msgid "Default mailbox quota"
msgstr "Oletuspostilaatikkokiintiö"
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Postilaatikoihin sovellettava oletuskiintiö. Voidaan ilmaista kilotavuina, megatavuina (oletus) tai gigatavuina. Arvo 0 tarkoittaa, ettei kiintiötä ole."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
"Postilaatikoihin sovellettava oletuskiintiö. Voidaan ilmaista kilotavuina, "
"megatavuina (oletus) tai gigatavuina. Arvo 0 tarkoittaa, ettei kiintiötä "
"ole."
#: src/components/domains/DomainAliasForm.vue:24
#: src/components/domains/DomainList.vue:115
@@ -432,6 +468,10 @@ msgstr "Poista avain"
msgid "Description"
msgstr "Kuvaus"
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,8 +501,10 @@ msgstr "DKIM-avaimen valitsin-tietue"
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr "DKIM-avaimet ovat jo olemassa tälle verkkotunnukselle. Haluatko korvata ne?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
"DKIM-avaimet ovat jo olemassa tälle verkkotunnukselle. Haluatko korvata ne?"
#: src/components/domains/DomainDKIMKey.vue:4
msgid "DKIM public key for"
@@ -482,6 +524,10 @@ msgstr "DKIM-tietuetta ei löydy"
msgid "DKIM signing"
msgstr "DKIM-allekirjoitus"
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +538,10 @@ msgstr "DMARC-tietue löydetty"
msgid "DMARC record not found"
msgstr "DMARC-tietuetta ei löydy"
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,8 +733,12 @@ msgid "Enter an email address"
msgstr "Syötä oikean muotoinen sähköpostiosoite"
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgstr "Syötä koodi mobiililaitteesi kaksivaiheisen tunnistuksen sovelluksesta. Jos olet hukannut laitteesi, voit syöttää yhden palautuskoodeistasi."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
"Syötä koodi mobiililaitteesi kaksivaiheisen tunnistuksen sovelluksesta. Jos "
"olet hukannut laitteesi, voit syöttää yhden palautuskoodeistasi."
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
msgid "Enter the code you've just received by SMS"
@@ -720,6 +774,13 @@ msgstr "Vie tilit ja aliakset CSV-tiedostoon"
msgid "Export domains and aliases to CSV"
msgstr "Vie verkkotunnukset ja aliakset CSV-tiedostoon"
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +809,18 @@ msgstr "Välitä viestit ja tallenna kopiot paikalliseen postilaatikkoon"
msgid "Forward updated"
msgstr "Välitystieto päivitetty"
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
#, fuzzy
msgid "Forwarded"
msgstr "Välitä"
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +836,21 @@ msgstr "Koko nimi"
msgid "Fullname/recipient"
msgstr "Koko nimi/saaja"
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
#, fuzzy
msgid "Fully aligned"
msgstr "Koko nimi"
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,8 +888,12 @@ msgid "help"
msgstr "ohje"
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgstr "Tässä on esimerkki DNS-määrityksistä (bind-muodossa). Korvaa [ ]:n välissä olevat arvot sopivilla arvoilla."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
"Tässä on esimerkki DNS-määrityksistä (bind-muodossa). Korvaa [ ]:n välissä "
"olevat arvot sopivilla arvoilla."
#: src/components/domains/DomainDNSConfig.vue:33
#: src/components/domains/DomainDNSConfig.vue:34
@@ -830,8 +915,17 @@ msgstr "Identiteetit"
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgstr "Jos suljet tämän lomakkeen nyt, muutokset eivät tallennu. Vahvistatko?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
"Jos suljet tämän lomakkeen nyt, muutokset eivät tallennu. Vahvistatko?"
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
msgid "Import"
@@ -1057,7 +1151,8 @@ msgid "Never logged-in"
msgstr "Ei koskaan kirjautunut sisään"
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr "Uusi"
@@ -1108,12 +1203,18 @@ msgid "Not generated"
msgstr "Ei luotu"
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgstr "Viestien määrä, jonka tämä verkkotunnus voi lähettää päivässä. Jätä tyhjäksi, jos et halua rajoitusta."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
"Viestien määrä, jonka tämä verkkotunnus voi lähettää päivässä. Jätä "
"tyhjäksi, jos et halua rajoitusta."
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr "Viestien määrä, jonka tämä postilaatikko voi lähettää päivässä. Jätä tyhjäksi, jos et halua rajoitusta."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
"Viestien määrä, jonka tämä postilaatikko voi lähettää päivässä. Jätä "
"tyhjäksi, jos et halua rajoitusta."
#: src/views/user/PasswordRecoveryForm.vue:31
#: src/views/user/PasswordRecoveryForm.vue:77
@@ -1129,7 +1230,8 @@ msgstr "OK"
msgid "One or more updates are available"
msgstr "Yksi tai useampi päivitys on saatavilla"
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
#, fuzzy
msgid "Opened"
msgstr "Avattu"
@@ -1150,6 +1252,17 @@ msgstr "Vaihtoehdot"
msgid "Parameters updated"
msgstr "Parametrit päivitetty"
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1226,9 +1339,11 @@ msgstr "Profiili päivitetty"
#: src/components/tools/ImportForm.vue:7
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr "Toimita CSV-tiedosto, jonka rivit ovat jossakin seuraavista muodoista:"
msgstr ""
"Toimita CSV-tiedosto, jonka rivit ovat jossakin seuraavista muodoista:"
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr "Jonon ID"
@@ -1246,12 +1361,24 @@ msgid "Quota"
msgstr "Verkkotunnuksen oletuskiintiö"
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgstr "Tämän postilaatikon kiintiö, joka voidaan ilmaista kilotavuina, megatavuina (oletus) tai gigatavuina. Määritä oma arvo tai käytä toimialueen oletusarvoa. Jätä tyhjäksi, jos haluat määrittää rajoittamattoman arvon (ei sallittu toimialueen ylläpitäjille)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
"Tämän postilaatikon kiintiö, joka voidaan ilmaista kilotavuina, megatavuina "
"(oletus) tai gigatavuina. Määritä oma arvo tai käytä toimialueen "
"oletusarvoa. Jätä tyhjäksi, jos haluat määrittää rajoittamattoman arvon (ei "
"sallittu toimialueen ylläpitäjille)."
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Postilaatikoiden kesken jaettu kiintiö. Voidaan ilmaista kilotavuina (KB), megatavuina (MB) (oletus) tai gigatavuina (GB). Arvo 0 tarkoittaa, ettei kiintiötä ole."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
"Postilaatikoiden kesken jaettu kiintiö. Voidaan ilmaista kilotavuina (KB), "
"megatavuina (MB) (oletus) tai gigatavuina (GB). Arvo 0 tarkoittaa, ettei "
"kiintiötä ole."
#: src/components/domains/DomainForm.vue:68
#: src/components/identities/AccountForm.vue:64
@@ -1478,7 +1605,13 @@ msgstr "SPF-tietuetta ei löydy"
msgid "Start typing a name here..."
msgstr "Aloita nimen kirjoittaminen tästä..."
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
#, fuzzy
msgid "Statistics"
msgstr "Tilastot"
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1506,8 +1639,12 @@ msgid "Tags"
msgstr "Tunnisteet"
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgstr "Kunkin rivin ensimmäinen elementti on pakollinen, ja sen on oltava yhtä suuri kuin jokin edellisistä arvoista."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
"Kunkin rivin ensimmäinen elementti on pakollinen, ja sen on oltava yhtä "
"suuri kuin jokin edellisistä arvoista."
#: src/components/user/TwoFactorAuthForm.vue:39
#: src/components/user/TwoFactorAuthForm.vue:7
@@ -1557,6 +1694,13 @@ msgstr "Vastaanottaja"
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1570,18 +1714,28 @@ msgstr ""
msgid "Transport"
msgstr "Siirto"
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
#, fuzzy
msgid "Trusted sources"
msgstr "Resurssit"
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr "Kaksivaiheinent tunnistus"
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgstr "Kaksivaiheista tunnistusta (2FA) ei ole vielä aktivoitu tilillesi. Tämän ominaisuuden käyttöönotto lisää tilisi turvallisuutta."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
"Kaksivaiheista tunnistusta (2FA) ei ole vielä aktivoitu tilillesi. Tämän "
"ominaisuuden käyttöönotto lisää tilisi turvallisuutta."
#: src/views/TwoFA.vue:11
msgid "Two-factor authentication code"
@@ -1602,6 +1756,10 @@ msgstr "Tyyppi:"
msgid "Unknown"
msgstr "Tuntematon"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+172 -36
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-22 19:25+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2021-07-01 16:15+0200\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -168,7 +175,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -184,6 +193,10 @@ msgstr ""
msgid "Aliases"
msgstr "Alias"
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -274,9 +287,12 @@ msgstr "Changer le mot de passe"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Cocher cette option si les mots de passe contenus dans votre fichier ne sont pas chiffrés"
msgstr ""
"Cocher cette option si les mots de passe contenus dans votre fichier ne sont"
" pas chiffrés"
#: src/components/domains/DomainAliasForm.vue:56
#: src/components/domains/DomainAliasForm.vue:26
@@ -287,7 +303,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -296,7 +313,8 @@ msgstr ""
msgid "Close"
msgstr "Fermer"
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
#, fuzzy
msgid "Closed"
msgstr "Fermée"
@@ -312,8 +330,11 @@ msgstr "Confirmation"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr "Félicitations ! L'authentification à deux facteurs est maintenant activée pour votre compte."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
"Félicitations ! L'authentification à deux facteurs est maintenant activée "
"pour votre compte."
#: src/views/Login.vue:23
msgid "Connect"
@@ -368,7 +389,8 @@ msgstr ""
msgid "Creation date"
msgstr "Date de création"
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
#, fuzzy
msgid "Crypt passwords"
msgstr "Chiffrer les mots de passe"
@@ -412,8 +434,12 @@ msgid "Default mailbox quota"
msgstr "Quota par défaut pour une boîte aux lettres"
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Quota par défaut appliqué aux boîtes aux lettres. Peut être exprimé en Ko, Mo (défaut) ou Go. Une valeur à 0 signifie pas de quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
"Quota par défaut appliqué aux boîtes aux lettres. Peut être exprimé en Ko, "
"Mo (défaut) ou Go. Une valeur à 0 signifie pas de quota."
#: src/components/domains/DomainAliasForm.vue:24
#: src/components/domains/DomainList.vue:115
@@ -439,6 +465,10 @@ msgstr ""
msgid "Description"
msgstr "Description"
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
#, fuzzy
@@ -469,8 +499,10 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr "Des clés DKIM existent déjà pour ce domaine. Voulez vous les écraser ?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
"Des clés DKIM existent déjà pour ce domaine. Voulez vous les écraser ?"
#: src/components/domains/DomainDKIMKey.vue:4
msgid "DKIM public key for"
@@ -490,6 +522,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -500,6 +536,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -692,7 +732,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -729,6 +771,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr "En échec"
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -750,7 +799,8 @@ msgstr "Transfert"
#: src/components/user/ForwardForm.vue:6
msgid "Forward messages and store copies into your local mailbox"
msgstr "Transférer les messages et conserver une copie dans votre boite locale"
msgstr ""
"Transférer les messages et conserver une copie dans votre boite locale"
#: src/components/user/ForwardForm.vue:19
#: src/components/user/ForwardForm.vue:52
@@ -758,6 +808,18 @@ msgstr "Transférer les messages et conserver une copie dans votre boite locale"
msgid "Forward updated"
msgstr "Transfert mis à jour"
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
#, fuzzy
msgid "Forwarded"
msgstr "Transfert"
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -773,13 +835,21 @@ msgstr "Nom complet"
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
#, fuzzy
msgid "Fully aligned"
msgstr "Alignement complet"
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -819,7 +889,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -842,7 +914,15 @@ msgstr "Identités"
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1066,7 +1146,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1117,11 +1198,13 @@ msgid "Not generated"
msgstr "Non générée"
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1138,7 +1221,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr "Une ou plusieurs mises à jour sont disponibles!"
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr "Ouverte"
@@ -1158,6 +1242,17 @@ msgstr "Options"
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr "Alignement partiel"
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1238,7 +1333,8 @@ msgstr "Profil mis à jour"
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr "ID de file"
@@ -1256,12 +1352,23 @@ msgid "Quota"
msgstr "Quota"
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgstr "Quota pour cette boite. Peut être exprimé en Ko, Mo (défaut) ou Go. Définir une valeur spécifique ou utiliser la valeur par défaut du domaine. Laisser vide pour définir une valeur illimitée (interdit pour les admins. de domaine)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
"Quota pour cette boite. Peut être exprimé en Ko, Mo (défaut) ou Go. Définir "
"une valeur spécifique ou utiliser la valeur par défaut du domaine. Laisser "
"vide pour définir une valeur illimitée (interdit pour les admins. de "
"domaine)."
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Quota partagé entre les boîtes aux lettres. Peut être exprimé en Ko, Mo (défaut) ou Go. Une valeur à 0 signifie pas de quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
"Quota partagé entre les boîtes aux lettres. Peut être exprimé en Ko, Mo "
"(défaut) ou Go. Une valeur à 0 signifie pas de quota."
#: src/components/domains/DomainForm.vue:68
#: src/components/identities/AccountForm.vue:64
@@ -1492,7 +1599,13 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
#, fuzzy
msgid "Statistics"
msgstr "Statistiques"
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1520,7 +1633,9 @@ msgid "Tags"
msgstr "Tags"
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1563,6 +1678,13 @@ msgstr "A"
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr "Total"
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1576,10 +1698,16 @@ msgstr ""
msgid "Transport"
msgstr "Transport"
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
#, fuzzy
msgid "Trusted sources"
msgstr "Sources de confiance"
#: src/components/user/TwoFactorAuthForm.vue:4
#, fuzzy
msgid "Two factor authentication"
@@ -1587,8 +1715,12 @@ msgstr "Authentification"
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgstr "L'authentification à 2 facteurs n'est pas encore activée pour votre compte. Activer cette fonctionnalité renforcera la sécurité de votre compte."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
"L'authentification à 2 facteurs n'est pas encore activée pour votre compte. "
"Activer cette fonctionnalité renforcera la sécurité de votre compte."
#: src/views/TwoFA.vue:11
msgid "Two-factor authentication code"
@@ -1609,6 +1741,10 @@ msgstr ""
msgid "Unknown"
msgstr "Inconnu"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr "Sources inconnues / Menaces"
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+164 -33
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr "Alias"
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -270,9 +283,11 @@ msgstr "Cambia password"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Seleziona questa opzione se le password contenute nel file non sono criptate"
msgstr ""
"Seleziona questa opzione se le password contenute nel file non sono criptate"
#: src/components/domains/DomainAliasForm.vue:56
#: src/components/domains/DomainAliasForm.vue:26
@@ -283,7 +298,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +308,8 @@ msgstr ""
msgid "Close"
msgstr "Chiudi"
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr "Chiudi"
@@ -307,7 +324,8 @@ msgstr "Conferma"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +381,8 @@ msgstr ""
msgid "Creation date"
msgstr "Data di creazione"
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr "Cripta le password"
@@ -405,8 +424,13 @@ msgid "Default mailbox quota"
msgstr "Dimensione massima predefinita per le mailbox"
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Valore predefinito per lo spazio massimo confiviso tra le mailbox. Può essere espresso in KB, MB (predefinito) o GB. Il valore 0 indica nessun limite."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
"Valore predefinito per lo spazio massimo confiviso tra le mailbox. Può "
"essere espresso in KB, MB (predefinito) o GB. Il valore 0 indica nessun "
"limite."
#: src/components/domains/DomainAliasForm.vue:24
#: src/components/domains/DomainList.vue:115
@@ -432,6 +456,10 @@ msgstr ""
msgid "Description"
msgstr "Descrizione"
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +489,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +511,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +525,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +720,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +759,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr "Fallito"
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -741,13 +787,26 @@ msgstr "Inoltra"
#: src/components/user/ForwardForm.vue:6
msgid "Forward messages and store copies into your local mailbox"
msgstr "Inoltra i messaggi e memorizza le copie nella tua casella di posta locale"
msgstr ""
"Inoltra i messaggi e memorizza le copie nella tua casella di posta locale"
#: src/components/user/ForwardForm.vue:19
#: src/components/user/ForwardForm.vue:52
msgid "Forward updated"
msgstr "Inoltro aggiornato"
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
#, fuzzy
msgid "Forwarded"
msgstr "Inoltra"
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +822,21 @@ msgstr "Nome completo"
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
#, fuzzy
msgid "Fully aligned"
msgstr "Completamente allineato"
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +874,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +899,15 @@ msgstr "Identità"
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1128,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1180,13 @@ msgid "Not generated"
msgstr "Non generata"
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1203,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr "Sono disponibili nuovi aggiornamenti"
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1224,17 @@ msgstr "Opzioni"
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr "Parzialmente allineato"
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1312,8 @@ msgstr "Profilo aggiornato"
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,12 +1331,23 @@ msgid "Quota"
msgstr "Dimensione massima"
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgstr "Dimensione massima per questa mailbox, può essere espressa in KB, MB (predefinito) o GB. Definire un valore personalizzato o utilizzare quello predefinito per il dominio. Lasciare vuoto per specificare un valore non limitato (non permesso per amministratori di dominio)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
"Dimensione massima per questa mailbox, può essere espressa in KB, MB "
"(predefinito) o GB. Definire un valore personalizzato o utilizzare quello "
"predefinito per il dominio. Lasciare vuoto per specificare un valore non "
"limitato (non permesso per amministratori di dominio)."
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Spazio massimo confiviso tra le mailbox. Può essere espresso in KB, MB (predefinito) o GB. Il valore 0 indica nessun limite."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
"Spazio massimo confiviso tra le mailbox. Può essere espresso in KB, MB "
"(predefinito) o GB. Il valore 0 indica nessun limite."
#: src/components/domains/DomainForm.vue:68
#: src/components/identities/AccountForm.vue:64
@@ -1470,7 +1574,13 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
#, fuzzy
msgid "Statistics"
msgstr "Statistiche"
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1608,9 @@ msgid "Tags"
msgstr "Tag"
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1653,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr "Totale"
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1673,25 @@ msgstr ""
msgid "Transport"
msgstr "Trasporto"
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
#, fuzzy
msgid "Trusted sources"
msgstr "Fonti attendibili"
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1713,10 @@ msgstr ""
msgid "Unknown"
msgstr "Sconosciuto"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr "Fonti sconosciute / Minaccie"
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -270,7 +283,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,7 +323,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +380,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -405,7 +423,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -432,6 +452,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +485,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +507,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +521,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +716,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +755,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +790,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +816,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +867,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +892,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1121,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1173,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1196,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1217,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1305,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,11 +1324,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1470,7 +1561,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1594,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1639,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1659,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1698,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -270,7 +283,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,7 +323,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +380,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -405,7 +423,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -432,6 +452,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +485,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +507,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +521,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +716,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +755,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +790,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +816,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +867,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +892,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1121,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1173,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1196,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1217,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1305,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,11 +1324,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1470,7 +1561,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1594,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1639,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1659,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1698,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -270,7 +283,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,7 +323,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +380,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -405,7 +423,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -432,6 +452,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +485,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +507,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +521,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +716,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +755,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +790,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +816,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +867,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +892,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1121,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1173,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1196,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1217,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1305,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,11 +1324,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1470,7 +1561,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1594,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1639,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1659,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1698,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -27,22 +27,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -165,7 +172,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -181,6 +190,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -269,7 +282,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -282,7 +296,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -291,7 +306,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -306,7 +322,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -362,7 +379,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -404,7 +422,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -431,6 +451,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -460,7 +484,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -481,6 +506,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -491,6 +520,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -682,7 +715,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -719,6 +754,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -747,6 +789,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -762,13 +815,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -806,7 +866,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -829,7 +891,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1050,7 +1120,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1101,11 +1172,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1122,7 +1195,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1142,6 +1216,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1219,7 +1304,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1237,11 +1323,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1469,7 +1560,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1497,7 +1593,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1540,6 +1638,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1553,17 +1658,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1585,6 +1697,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -27,22 +27,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -165,7 +172,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -181,6 +190,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -269,7 +282,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -282,7 +296,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -291,7 +306,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -306,7 +322,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -362,7 +379,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -404,7 +422,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -431,6 +451,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -460,7 +484,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -481,6 +506,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -491,6 +520,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -682,7 +715,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -719,6 +754,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -747,6 +789,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -762,13 +815,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -806,7 +866,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -829,7 +891,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1050,7 +1120,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1101,11 +1172,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1122,7 +1195,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1142,6 +1216,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1219,7 +1304,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1237,11 +1323,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1469,7 +1560,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1497,7 +1593,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1540,6 +1638,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1553,17 +1658,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1585,6 +1697,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -270,7 +283,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,7 +323,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +380,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -405,7 +423,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -432,6 +452,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +485,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +507,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +521,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +716,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +755,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +790,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +816,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +867,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +892,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1121,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1173,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1196,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1217,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1305,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,11 +1324,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1470,7 +1561,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1594,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1639,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1659,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1698,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+156 -30
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr "Синоним(ы)"
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -270,7 +283,8 @@ msgstr "Изменить пароль"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Выберите эту опцию если пароль в вашем файле не зашифрован "
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,7 +323,8 @@ msgstr "Подтверждение"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -363,7 +380,8 @@ msgstr ""
msgid "Creation date"
msgstr "Дата создания"
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr "Шифровать пароль"
@@ -405,7 +423,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -432,6 +452,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +485,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +507,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +521,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +716,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +755,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -741,13 +783,27 @@ msgstr "Перенаправленые"
#: src/components/user/ForwardForm.vue:6
msgid "Forward messages and store copies into your local mailbox"
msgstr "Перенаправление сообщения, и сохранение копии в вашем локальном почтовом ящике"
msgstr ""
"Перенаправление сообщения, и сохранение копии в вашем локальном почтовом "
"ящике"
#: src/components/user/ForwardForm.vue:19
#: src/components/user/ForwardForm.vue:52
msgid "Forward updated"
msgstr "Перенаправление обновлено"
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
#, fuzzy
msgid "Forwarded"
msgstr "Перенаправленые"
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +819,21 @@ msgstr "Имя файла"
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
#, fuzzy
msgid "Fully aligned"
msgstr "Имя файла"
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +871,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +896,15 @@ msgstr "Пользователи"
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1125,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1177,13 @@ msgid "Not generated"
msgstr "Получатель не определен"
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1200,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr "Доступны одно или более обновлений."
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1221,17 @@ msgstr "Опции"
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1309,8 @@ msgstr "Профиль обновлен"
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,11 +1328,20 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgstr "Квота в мегабайтах для этого почтового ящика. Определите собственное значение или используйте значение по умолчанию для родительского домена. Оставьте пустым для неограниченного значения. (Не разрешено администраторам домена)"
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
"Квота в мегабайтах для этого почтового ящика. Определите собственное "
"значение или используйте значение по умолчанию для родительского домена. "
"Оставьте пустым для неограниченного значения. (Не разрешено администраторам"
" домена)"
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1470,7 +1569,13 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
#, fuzzy
msgid "Statistics"
msgstr "Статистика"
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1603,9 @@ msgid "Tags"
msgstr "Теги"
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1648,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,17 +1668,25 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
#, fuzzy
msgid "Trusted sources"
msgstr "Ресурсы"
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1586,6 +1708,10 @@ msgstr ""
msgid "Unknown"
msgstr "Неизвестное"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+159 -32
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr "Alias"
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -270,7 +283,8 @@ msgstr "Ändra lösenord"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Markera det här alternativet om lösenord i filen inte är krypterad"
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr "Stäng"
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr "Stäng"
@@ -307,7 +323,8 @@ msgstr "Bekräftelse"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr "Grattis! Tvåfaktorsautentisering är nu aktiverat för ditt konto."
#: src/views/Login.vue:23
@@ -363,7 +380,8 @@ msgstr ""
msgid "Creation date"
msgstr "Skapelsedatum"
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr "Krypterade lösenord"
@@ -405,8 +423,11 @@ msgid "Default mailbox quota"
msgstr "Standard brevlåde kvota"
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Standardkvota i MB applicerad på nya brevlådor. 0 betyder ingen kvota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
"Standardkvota i MB applicerad på nya brevlådor. 0 betyder ingen kvota."
#: src/components/domains/DomainAliasForm.vue:24
#: src/components/domains/DomainList.vue:115
@@ -432,6 +453,10 @@ msgstr ""
msgid "Description"
msgstr "Beskrivning"
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +486,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +508,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +522,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +717,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +756,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr "Misslyckades"
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +791,18 @@ msgstr "Vidarebefordra meddelande och spara kopia i din lokala brevlåda"
msgid "Forward updated"
msgstr "Vidarebefordring uppdaterad"
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
#, fuzzy
msgid "Forwarded"
msgstr "Vidarebefordra"
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +818,21 @@ msgstr "Fullständigt nam"
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
#, fuzzy
msgid "Fully aligned"
msgstr "Helt i linje"
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +870,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +895,15 @@ msgstr "Konton"
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1124,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1176,13 @@ msgid "Not generated"
msgstr "Ej genererad"
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1199,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr "En eller fler uppdateringar finns tillgängliga"
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1220,17 @@ msgstr "Inställningar"
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr "Delvis i linje"
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1308,8 @@ msgstr "Profil uppdaterad"
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,12 +1327,21 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgstr "Kvot i MB för denna brevlåda. Definiera ett anpassat värde eller använda domänens förvalda. Lämna tomt för att definiera ett obegränsat värde (ej tillåtet för domänadministratörer)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
"Kvot i MB för denna brevlåda. Definiera ett anpassat värde eller använda "
"domänens förvalda. Lämna tomt för att definiera ett obegränsat värde (ej "
"tillåtet för domänadministratörer)."
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgstr "Standardkvota i MB applicerad på nya brevlådor. 0 betyder ingen kvota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
"Standardkvota i MB applicerad på nya brevlådor. 0 betyder ingen kvota."
#: src/components/domains/DomainForm.vue:68
#: src/components/identities/AccountForm.vue:64
@@ -1470,7 +1568,13 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
#, fuzzy
msgid "Statistics"
msgstr "Statistik"
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1602,9 @@ msgid "Tags"
msgstr "Tagg"
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1647,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr "Totalt"
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,18 +1667,28 @@ msgstr ""
msgid "Transport"
msgstr "Transport"
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
#, fuzzy
msgid "Trusted sources"
msgstr "Betrodda källor"
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgstr "Tvåfaktorsautentisering (2FA) har inte aktiverats för ditt konto. Aktivering ökar ditt kontos säkerhet."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
"Tvåfaktorsautentisering (2FA) har inte aktiverats för ditt konto. Aktivering"
" ökar ditt kontos säkerhet."
#: src/views/TwoFA.vue:11
msgid "Two-factor authentication code"
@@ -1586,6 +1709,10 @@ msgstr ""
msgid "Unknown"
msgstr "Okänt"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr "Okända källor / Hot"
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+150 -30
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -28,22 +28,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -166,7 +173,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -182,6 +191,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr "API"
@@ -270,7 +283,8 @@ msgstr "Parolayı değiştirin"
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -283,7 +297,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -292,7 +307,8 @@ msgstr ""
msgid "Close"
msgstr "Kapat"
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -307,8 +323,11 @@ msgstr "Onayla"
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr "Tebrikler! Artık hesabınız için İki Faktörlü Kimlik Doğrulama etkinleştirildi."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
"Tebrikler! Artık hesabınız için İki Faktörlü Kimlik Doğrulama "
"etkinleştirildi."
#: src/views/Login.vue:23
msgid "Connect"
@@ -363,7 +382,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -405,7 +425,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -432,6 +454,10 @@ msgstr ""
msgid "Description"
msgstr "Tanım"
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -461,7 +487,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -482,6 +509,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -492,6 +523,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -683,7 +718,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -720,6 +757,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -748,6 +792,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -763,13 +818,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -807,7 +869,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -830,7 +894,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1051,7 +1123,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1102,11 +1175,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1123,7 +1198,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr "Bir veya daha fazla güncelleme mevcut"
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1143,6 +1219,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1220,7 +1307,8 @@ msgstr "Profil güncellendi"
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1238,11 +1326,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1470,7 +1563,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1498,7 +1596,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1541,6 +1641,13 @@ msgstr "Kime"
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1554,18 +1661,27 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgstr "Hesabınız için İki Faktörlü Kimlik Doğrulama (2FA) henüz etkinleştirilmedi. Bu özelliği etkinleştirmek hesabınızın güvenliğini artıracaktır."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
"Hesabınız için İki Faktörlü Kimlik Doğrulama (2FA) henüz etkinleştirilmedi. "
"Bu özelliği etkinleştirmek hesabınızın güvenliğini artıracaktır."
#: src/views/TwoFA.vue:11
msgid "Two-factor authentication code"
@@ -1586,6 +1702,10 @@ msgstr ""
msgid "Unknown"
msgstr "Bilinmeyen"
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+144 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa 0.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 11:26+0100\n"
"POT-Creation-Date: 2023-02-23 18:08+0100\n"
"PO-Revision-Date: 2023-02-23 11:26+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -27,22 +27,29 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:47
#: src/components/domains/DNSDetail.vue:205
msgid "A new key will be generated soon. Refresh the page in a moment to see it."
msgid ""
"A new key will be generated soon. Refresh the page in a moment to see it."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:39
#: src/components/identities/AccountRoleForm.vue:69
msgid "A user with all privileges, can do anything. By default, such a user does not have a mailbox so he can't access end-user features."
msgid ""
"A user with all privileges, can do anything. By default, such a user does "
"not have a mailbox so he can't access end-user features."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:34
#: src/components/identities/AccountRoleForm.vue:64
msgid "A user with no privileges but with a mailbox. He will be allowed to use all end-user features: webmail, calendar, contacts, filters."
msgid ""
"A user with no privileges but with a mailbox. He will be allowed to use all "
"end-user features: webmail, calendar, contacts, filters."
msgstr ""
#: src/components/identities/AccountRoleForm.vue:24
#: src/components/identities/AccountRoleForm.vue:54
msgid "A user with privileges on one or more domain. He will be allowed to administer mailboxes and he can also have a mailbox."
msgid ""
"A user with privileges on one or more domain. He will be allowed to "
"administer mailboxes and he can also have a mailbox."
msgstr ""
#: src/components/tools/TimeSerieChart.vue:16
@@ -165,7 +172,9 @@ msgstr ""
#: src/components/identities/AccountAliasForm.vue:3
#: src/components/identities/AliasRecipientForm.vue:3
msgid "Alias(es) of this mailbox. To create a catchall alias, just enter the domain name (@domain.tld)."
msgid ""
"Alias(es) of this mailbox. To create a catchall alias, just enter the domain"
" name (@domain.tld)."
msgstr ""
#: src/components/domains/DomainList.vue:25
@@ -181,6 +190,10 @@ msgstr ""
msgid "Aliases"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:4
msgid "Alignment"
msgstr ""
#: src/components/layout/Navbar.vue:99 src/components/layout/Navbar.vue:214
msgid "API"
msgstr ""
@@ -269,7 +282,8 @@ msgstr ""
msgid "Check out the following list to find related components"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
@@ -282,7 +296,8 @@ msgstr ""
msgid "Choose a role"
msgstr ""
#: src/App.vue:18 src/App.vue:2 src/components/domains/AdministratorList.vue:36
#: src/App.vue:18 src/App.vue:2
#: src/components/domains/AdministratorList.vue:36
#: src/components/domains/DomainAliasForm.vue:21
#: src/components/domains/DomainDKIMKey.vue:22
#: src/components/domains/DomainDNSConfig.vue:40
@@ -291,7 +306,8 @@ msgstr ""
msgid "Close"
msgstr ""
#: src/components/alarms/AlarmList.vue:21 src/components/alarms/AlarmList.vue:5
#: src/components/alarms/AlarmList.vue:21
#: src/components/alarms/AlarmList.vue:5
msgid "Closed"
msgstr ""
@@ -306,7 +322,8 @@ msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:34
#: src/components/user/TwoFactorAuthForm.vue:2
msgid "Congratulations! Two-Factor Authentication is now enabled for your account."
msgid ""
"Congratulations! Two-Factor Authentication is now enabled for your account."
msgstr ""
#: src/views/Login.vue:23
@@ -362,7 +379,8 @@ msgstr ""
msgid "Creation date"
msgstr ""
#: src/views/identities/Identities.vue:45 src/views/identities/Identities.vue:1
#: src/views/identities/Identities.vue:45
#: src/views/identities/Identities.vue:1
msgid "Crypt passwords"
msgstr ""
@@ -404,7 +422,9 @@ msgid "Default mailbox quota"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:6
msgid "Default quota applied to mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Default quota applied to mailboxes. Can be expressed in KB, MB (default) or "
"GB. A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainAliasForm.vue:24
@@ -431,6 +451,10 @@ msgstr ""
msgid "Description"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:37
msgid "Detail"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:57
#: src/components/user/TwoFactorAuthForm.vue:5
msgid "Disable 2FA"
@@ -460,7 +484,8 @@ msgstr ""
#: src/components/domains/DNSDetail.vue:30
#: src/components/domains/DNSDetail.vue:189
msgid "DKIM keys already exist for this domain. Do you want to overwrite them?"
msgid ""
"DKIM keys already exist for this domain. Do you want to overwrite them?"
msgstr ""
#: src/components/domains/DomainDKIMKey.vue:4
@@ -481,6 +506,10 @@ msgstr ""
msgid "DKIM signing"
msgstr ""
#: src/views/domains/Domain.vue:17
msgid "DMARC"
msgstr ""
#: src/components/domains/DNSDetail.vue:79
#: src/components/domains/DNSDetail.vue:43
msgid "DMARC record found"
@@ -491,6 +520,10 @@ msgstr ""
msgid "DMARC record not found"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:50
msgid "DMARC support does not seem to be enabled for this domain."
msgstr ""
#: src/components/domains/DomainCreationForm.vue:31
#: src/components/domains/DomainCreationForm.vue:109
#: src/components/domains/DomainCreationForm.vue:115
@@ -682,7 +715,9 @@ msgid "Enter an email address"
msgstr ""
#: src/views/TwoFA.vue:12
msgid "Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes."
msgid ""
"Enter the code from the two-factor app on your mobile device. If you have "
"lost your device, you may enter one of your recovery codes."
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:11
@@ -719,6 +754,13 @@ msgstr ""
msgid "Export domains and aliases to CSV"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:25
#: src/components/dmarc/DmarcAligmentChart.vue:37
#: src/components/dmarc/DmarcAligmentChart.vue:143
#: src/components/dmarc/DmarcAligmentChart.vue:155
msgid "Failed"
msgstr ""
#: src/components/identities/AccountCreationForm.vue:30
#: src/components/identities/AccountGeneralForm.vue:32
#: src/components/user/ProfileForm.vue:45
@@ -747,6 +789,17 @@ msgstr ""
msgid "Forward updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:24
#: src/components/dmarc/DmarcAligmentChart.vue:36
#: src/components/dmarc/DmarcAligmentChart.vue:142
#: src/components/dmarc/DmarcAligmentChart.vue:154
msgid "Forwarded"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:42
msgid "Forwarders with ARC"
msgstr ""
#: src/components/logs/MessageList.vue:13
#: src/components/tools/TimeSerieChart.vue:17
#: src/components/logs/MessageList.vue:46
@@ -762,13 +815,20 @@ msgstr ""
msgid "Fullname/recipient"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:22
#: src/components/dmarc/DmarcAligmentChart.vue:34
#: src/components/dmarc/DmarcAligmentChart.vue:140
#: src/components/dmarc/DmarcAligmentChart.vue:152
msgid "Fully aligned"
msgstr ""
#: src/components/domains/DomainCreationForm.vue:23
#: src/components/domains/DomainCreationForm.vue:108
#: src/components/domains/DomainCreationForm.vue:114
#: src/components/domains/DomainForm.vue:7
#: src/components/identities/AliasCreationForm.vue:17
#: src/components/identities/AliasCreationForm.vue:49
#: src/components/identities/AliasForm.vue:7
#: src/components/identities/AliasForm.vue:7 src/views/domains/Domain.vue:11
#: src/components/identities/AliasCreationForm.vue:37
#: src/components/identities/AliasCreationForm.vue:69
#: src/components/domains/DomainCreationForm.vue:74
@@ -806,7 +866,9 @@ msgid "help"
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:8
msgid "Here is an example of DNS configuration (bind format). Replace values between [ ] by the appropriate ones."
msgid ""
"Here is an example of DNS configuration (bind format). Replace values "
"between [ ] by the appropriate ones."
msgstr ""
#: src/components/domains/DomainDNSConfig.vue:33
@@ -829,7 +891,15 @@ msgstr ""
#: src/components/tools/CreationForm.vue:26
#: src/components/tools/CreationForm.vue:99
msgid "If you close this form now, your modifications won't be saved. Do you confirm?"
msgid ""
"If you close this form now, your modifications won't be saved. Do you "
"confirm?"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:52
msgid ""
"If you configured it recently, please wait for the first report to be "
"received and processed."
msgstr ""
#: src/components/tools/ImportForm.vue:29
@@ -1050,7 +1120,8 @@ msgid "Never logged-in"
msgstr ""
#: src/views/domains/Domains.vue:15 src/views/domains/Domains.vue:3
#: src/views/identities/Identities.vue:15 src/views/identities/Identities.vue:3
#: src/views/identities/Identities.vue:15
#: src/views/identities/Identities.vue:3
msgid "New"
msgstr ""
@@ -1101,11 +1172,13 @@ msgid "Not generated"
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:9
msgid "Number of messages this domain can send per day. Leave empty for no limit."
msgid ""
"Number of messages this domain can send per day. Leave empty for no limit."
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:8
msgid "Number of messages this mailbox can send per day. Leave empty for no limit."
msgid ""
"Number of messages this mailbox can send per day. Leave empty for no limit."
msgstr ""
#: src/views/user/PasswordRecoveryForm.vue:31
@@ -1122,7 +1195,8 @@ msgstr ""
msgid "One or more updates are available"
msgstr ""
#: src/components/alarms/AlarmList.vue:18 src/components/alarms/AlarmList.vue:2
#: src/components/alarms/AlarmList.vue:18
#: src/components/alarms/AlarmList.vue:2
msgid "Opened"
msgstr ""
@@ -1142,6 +1216,17 @@ msgstr ""
msgid "Parameters updated"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:23
#: src/components/dmarc/DmarcAligmentChart.vue:35
#: src/components/dmarc/DmarcAligmentChart.vue:141
#: src/components/dmarc/DmarcAligmentChart.vue:153
msgid "Partially aligned"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:41
msgid "Partially trusted sources / Forwarders"
msgstr ""
#: src/components/identities/AccountPasswordForm.vue:88
#: src/components/user/ProfileForm.vue:21 src/views/Login.vue:13
#: src/components/identities/AccountPasswordForm.vue:42
@@ -1219,7 +1304,8 @@ msgstr ""
msgid "Provide a CSV file where lines respect one of the following formats:"
msgstr ""
#: src/components/logs/MessageList.vue:9 src/components/logs/MessageList.vue:42
#: src/components/logs/MessageList.vue:9
#: src/components/logs/MessageList.vue:42
msgid "Queue ID"
msgstr ""
@@ -1237,11 +1323,16 @@ msgid "Quota"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:5
msgid "Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a custom value or use domain's default one. Leave empty to define an unlimited value (not allowed for domain administrators)."
msgid ""
"Quota for this mailbox, can be expressed in KB, MB (default) or GB. Define a"
" custom value or use domain's default one. Leave empty to define an "
"unlimited value (not allowed for domain administrators)."
msgstr ""
#: src/components/domains/DomainLimitationsForm.vue:3
msgid "Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. A value of 0 means no quota."
msgid ""
"Quota shared between mailboxes. Can be expressed in KB, MB (default) or GB. "
"A value of 0 means no quota."
msgstr ""
#: src/components/domains/DomainForm.vue:68
@@ -1469,7 +1560,12 @@ msgstr ""
msgid "Start typing a name here..."
msgstr ""
#: src/components/alarms/AlarmList.vue:9 src/components/logs/MessageList.vue:11
#: src/views/domains/Domain.vue:14
msgid "Statistics"
msgstr ""
#: src/components/alarms/AlarmList.vue:9
#: src/components/logs/MessageList.vue:11
#: src/components/alarms/AlarmList.vue:73
#: src/components/logs/MessageList.vue:44
msgid "Status"
@@ -1497,7 +1593,9 @@ msgid "Tags"
msgstr ""
#: src/components/tools/ImportForm.vue:9
msgid "The first element of each line is mandatory and must be equal to one of the previous values."
msgid ""
"The first element of each line is mandatory and must be equal to one of the "
"previous values."
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:39
@@ -1540,6 +1638,13 @@ msgstr ""
msgid "Too many unsuccessful attempts, please try later."
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:33
#: src/components/dmarc/DmarcSourceTable.vue:8
#: src/components/dmarc/DmarcSourceTable.vue:3
#: src/components/dmarc/DmarcAligmentChart.vue:151
msgid "Total"
msgstr ""
#: src/views/user/PasswordRecoverySmsTotpForm.vue:37
#: src/views/user/PasswordRecoverySmsTotpForm.vue:85
msgid "TOTP resent."
@@ -1553,17 +1658,24 @@ msgstr ""
msgid "Transport"
msgstr ""
#: src/components/alarms/AlarmList.vue:8 src/components/alarms/AlarmList.vue:72
#: src/components/alarms/AlarmList.vue:8
#: src/components/alarms/AlarmList.vue:72
msgid "Triggered"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:40
msgid "Trusted sources"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:4
msgid "Two factor authentication"
msgstr ""
#: src/components/user/TwoFactorAuthForm.vue:64
#: src/components/user/TwoFactorAuthForm.vue:1
msgid "Two-Factor Authentication (2FA) is not yet activated for your account. Enabling this feature will increase your account's security."
msgid ""
"Two-Factor Authentication (2FA) is not yet activated for your account. "
"Enabling this feature will increase your account's security."
msgstr ""
#: src/views/TwoFA.vue:11
@@ -1585,6 +1697,10 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: src/components/dmarc/DmarcAligmentChart.vue:43
msgid "Unknown sources / Threats"
msgstr ""
#: src/components/identities/AccountMailboxForm.vue:30
#: src/components/identities/AccountMailboxForm.vue:69
msgid "unlimited"
+2 -1
View File
@@ -35,7 +35,8 @@ OLD_TRANSLATION_MODULES = [
"maillog",
"policyd",
"relaydomains",
"transport"
"transport",
"dmarc",
]
+6
View File
@@ -13,6 +13,12 @@ export default {
getDomainDNSDetail (domainId) {
return repository.get(`/${domainResource}/${domainId}/dns_detail/`)
},
getDomainDmarcAlignment (domainId, period) {
return repository.get(
`${domainResource}/${domainId}/dmarc/alignment_stats/`,
{ params: { period } }
)
},
getDomainAliases (domain) {
let url = `/${domainAliasResource}/`
if (domain !== undefined) {
@@ -0,0 +1,259 @@
<template>
<div v-if="alignments">
<v-card>
<v-toolbar dense elevation="0" class="mr-2">
<v-toolbar-title><translate>Alignment</translate></v-toolbar-title>
<v-spacer />
<v-btn
icon
x-small
@click="previousWeek"
>
<v-icon>mdi-arrow-left</v-icon>
</v-btn>
<span class="mx-2">{{ weekStart.toLocaleString() }} - {{ weekEnd.toLocaleString() }}</span>
<v-btn
icon
x-small
@click="nextWeek"
>
<v-icon>mdi-arrow-right</v-icon>
</v-btn>
</v-toolbar>
<v-card-text>
<v-row>
<v-col cols="5">
<apexchart
v-if="series"
type="pie"
height="350"
:options="options"
:series="series"
/>
</v-col>
<v-col cols="7">
<v-row>
<v-col
v-for="box in boxes"
:key="box.key"
cols="6"
>
<v-sheet
outlined
:color="box.color"
rounded
>
<v-card
outlined
class="pa-10 text-center"
>
<span :class="'text-h4 ' + getTextColors(box.color)">{{ stats[box.key] }}</span><br>
<span class="text-subtitle-1">{{ box.label }}</span>
</v-card>
</v-sheet>
</v-col>
</v-row>
</v-col>
</v-row>
</v-card-text>
</v-card>
<v-expansion-panels
v-model="panel"
class="mt-2"
>
<v-expansion-panel>
<v-expansion-panel-header>
<translate>Detail</translate>
</v-expansion-panel-header>
<v-expansion-panel-content>
<dmarc-source-table
:title="'Trusted sources'|translate"
color="green"
:total="stats.aligned"
:sources="alignments.aligned"
/>
<dmarc-source-table
:title="'Partially trusted sources / Forwarders'|translate"
color="orange"
:total="stats.trusted"
:sources="alignments.trusted"
class="mt-4"
/>
<dmarc-source-table
:title="'Forwarders with ARC'|translate"
color="blue"
:total="stats.forwarded"
:sources="alignments.forwarded"
class="mt-4"
/>
<dmarc-source-table
:title="'Unknown sources / Threats'|translate"
color="red"
:total="stats.failed"
:sources="alignments.failed"
class="mt-4"
/>
</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
</div>
<div v-else>
<v-alert
v-if="dmarcDisabled"
type="info"
outlined
prominent
border="left"
class="mt-6"
>
<translate tag="div">
DMARC support does not seem to be enabled for this domain.</translate>
<translate tag="div">
If you configured it recently, please wait for the first report to be received and processed.
</translate>
</v-alert>
</div>
</template>
<script>
import colors from 'vuetify/lib/util/colors'
import DmarcSourceTable from './DmarcSourceTable'
import domainsApi from '@/api/domains'
import { DateTime } from 'luxon'
import VueApexCharts from 'vue-apexcharts'
const order = ['aligned', 'trusted', 'forwarded', 'failed']
export default {
components: {
apexchart: VueApexCharts,
DmarcSourceTable
},
props: {
domain: Object
},
data () {
return {
options: {
colors: [colors.green.lighten2, colors.orange.lighten2, colors.blue.lighten2, colors.red.lighten2],
labels: [
this.$gettext('Fully aligned'),
this.$gettext('Partially aligned'),
this.$gettext('Forwarded'),
this.$gettext('Failed')
],
legend: {
position: 'bottom'
}
},
alignments: null,
boxes: [
{ key: 'total', label: this.$gettext('Total'), color: 'primary lighten-2' },
{ key: 'aligned', label: this.$gettext('Fully aligned'), color: 'green lighten-2' },
{ key: 'trusted', label: this.$gettext('Partially aligned'), color: 'orange lighten-2' },
{ key: 'forwarded', label: this.$gettext('Forwarded'), color: 'blue lighten-2' },
{ key: 'failed', label: this.$gettext('Failed'), color: 'red lighten-2' }
],
currentWeek: 0,
currentYear: 0,
dmarcDisabled: false,
loading: false,
panel: null,
series: [],
stats: {}
}
},
computed: {
weekStart () {
const dt = DateTime.fromObject({
weekYear: this.currentYear,
weekNumber: this.currentWeek
})
return dt.startOf('week')
},
weekEnd () {
const dt = DateTime.fromObject({
weekYear: this.currentYear,
weekNumber: this.currentWeek
})
return dt.endOf('week')
}
},
methods: {
getTextColors (value) {
let result = ''
for (const color of value.split(' ')) {
if (result !== '') {
result += ' '
}
if (color.startsWith('lighten')) {
result += 'text--' + color
} else {
result += color + '--text'
}
}
return result
},
nextWeek () {
if (this.currentWeek === 52) {
this.currentYear += 1
this.currentWeek = 1
} else {
this.currentWeek += 1
}
},
previousWeek () {
if (this.currentWeek === 1) {
this.currentYear -= 1
this.currentWeek = 52
} else {
this.currentWeek -= 1
}
},
fetchAlignmentStats () {
if (this.loading) {
return
}
const period = `${this.currentYear}-${this.currentWeek}`
this.loading = true
domainsApi.getDomainDmarcAlignment(this.domain.pk, period).then(resp => {
this.loading = false
if (resp.status === 204) {
this.dmarcDisabled = true
return
}
this.stats = { total: 0 }
this.alignments = resp.data
this.series = []
for (const key of order) {
let total = 0
for (const name in resp.data[key]) {
for (const ip in resp.data[key][name]) {
total += resp.data[key][name][ip].total
}
}
this.stats.total += total
this.stats[key] = total
this.series.push(total)
}
})
}
},
created () {
const now = DateTime.now()
this.currentYear = now.year
this.currentWeek = now.weekNumber
},
mounted () {
this.fetchAlignmentStats()
},
watch: {
currentWeek () {
this.fetchAlignmentStats()
},
currentYear () {
this.fetchAlignmentStats()
}
}
}
</script>
@@ -0,0 +1,60 @@
<template>
<div>
<div class="text-h6">{{ title }} <span :class="`${color}--text text--lighten-2`">{{ total }}</span></div>
<v-simple-table>
<tbody>
<template v-for="(source, name) in sources">
<tr :key="name">
<th width="40%">{{ name }}</th>
<th><translate>Total</translate></th>
<th>SPF</th>
<th>DKIM</th>
</tr>
<tr v-for="(counters, ip) in source" :key="ip">
<td>{{ ip }}</td>
<td>{{ counters.total }}</td>
<td>
<v-avatar
color="green lighten-2"
size="24"
>
<span class="white--text">{{ counters.spf.success }}</span>
</v-avatar>
<v-avatar
color="red lighten-2 ml-1"
size="24"
>
<span class="white--text">{{ counters.spf.failure }}</span>
</v-avatar>
</td>
<td>
<v-avatar
color="green lighten-2"
size="24"
>
<span class="white--text">{{ counters.dkim.success }}</span>
</v-avatar>
<v-avatar
color="red lighten-2 ml-1"
size="24"
>
<span class="white--text">{{ counters.dkim.failure }}</span>
</v-avatar>
</td>
</tr>
</template>
</tbody>
</v-simple-table>
</div>
</template>
<script>
export default {
props: {
title: String,
color: String,
total: Number,
sources: Object
}
}
</script>
+7 -2
View File
@@ -13,6 +13,7 @@
<validation-provider
v-slot="{ errors }"
vid="code"
name="code"
rules="required"
>
<v-row>
@@ -24,13 +25,14 @@
:error-messages="errors"
:hint="'Enter the code from the two-factor app on your mobile device. If you have lost your device, you may enter one of your recovery codes.'|translate"
persistent-hint
@finish="verifyCode"
/>
</v-col>
</v-row>
</validation-provider>
</validation-observer>
<div class="d-flex justify-center mt-6">
<v-btn class="flex-grow-1" color="primary" large @click="verifyCode">
<v-btn class="flex-grow-1" color="primary" large @click="verifyCode" :loading="loading">
<translate>Verify code</translate>
</v-btn>
</div>
@@ -46,7 +48,8 @@ export default {
data () {
return {
code: null,
errors: {}
errors: {},
loading: false
}
},
methods: {
@@ -55,6 +58,7 @@ export default {
if (!isValid) {
return
}
this.loading = true
account.verifyTFACode(this.code).then(resp => {
Cookies.set('token', resp.data.access, { sameSite: 'strict' })
Cookies.set('refreshToken', resp.data.refresh, { sameSite: 'strict' })
@@ -63,6 +67,7 @@ export default {
})
}).catch(error => {
this.$refs.observer.setErrors(error.response.data)
this.loading = false
})
}
}
+76 -42
View File
@@ -6,49 +6,77 @@
<v-icon>mdi-circle-edit-outline</v-icon>
</v-btn>
</v-toolbar>
<v-layout>
<v-row>
<v-col cols="6">
<domain-summary :domain="domain" />
<div class="mt-4" />
<administrator-list
<v-tabs
v-model="tab"
>
<v-tab>
<translate>General</translate>
</v-tab>
<v-tab>
<translate>Statistics</translate>
</v-tab>
<v-tab>
<translate>DMARC</translate>
</v-tab>
<v-tabs-items
v-model="tab"
>
<v-tab-item>
<v-layout class="pa-2">
<v-row>
<v-col cols="6">
<domain-summary :domain="domain" />
<div class="mt-4" />
<administrator-list
:domain="domain"
/>
</v-col>
<v-col cols="6">
<dns-detail v-model="domain" />
<div class="mt-4" />
<resources
v-if="limitsConfig.params && limitsConfig.params.enable_domain_limits && domain.resources && domain.resources.length"
:resources="domain.resources"
/>
</v-col>
</v-row>
</v-layout>
</v-tab-item>
<v-tab-item>
<v-layout class="pa-2">
<v-row class="mt-2">
<v-col cols="12">
<time-serie-chart
v-if="domain.name"
:domain="domain"
graphic-set="mailtraffic"
graphic-name="averagetraffic"
/>
</v-col>
<v-col cols="12">
<time-serie-chart
v-if="domain.name"
:domain="domain"
graphic-set="mailtraffic"
graphic-name="averagetrafficsize"
/>
</v-col>
</v-row>
</v-layout>
</v-tab-item>
<v-tab-item>
<dmarc-aligment-chart
:domain="domain"
/>
</v-col>
<v-col cols="6">
<dns-detail v-model="domain" />
<div class="mt-4" />
<resources
v-if="limitsConfig.params && limitsConfig.params.enable_domain_limits && domain.resources && domain.resources.length"
:resources="domain.resources"
/>
</v-col>
</v-row>
</v-layout>
<v-layout>
<v-row class="mt-2">
<v-col cols="12">
<time-serie-chart
v-if="domain.name"
:domain="domain"
graphic-set="mailtraffic"
graphic-name="averagetraffic"
/>
</v-col>
<v-col cols="12">
<time-serie-chart
v-if="domain.name"
:domain="domain"
graphic-set="mailtraffic"
graphic-name="averagetrafficsize"
/>
</v-col>
</v-row>
</v-layout>
<v-dialog v-model="showEditForm"
persistent
max-width="800px"
>
</v-tab-item>
</v-tabs-items>
</v-tabs>
<v-dialog
v-model="showEditForm"
persistent
max-width="800px"
>
<domain-form :domain="domain" @close="showEditForm = false" />
</v-dialog>
</div>
@@ -57,6 +85,7 @@
<script>
import domains from '@/api/domains'
import AdministratorList from '@/components/domains/AdministratorList'
import DmarcAligmentChart from '@/components/dmarc/DmarcAligmentChart'
import DNSDetail from '@/components/domains/DNSDetail'
import DomainForm from '@/components/domains/DomainForm'
import DomainSummary from '@/components/domains/DomainSummary'
@@ -68,6 +97,7 @@ export default {
components: {
AdministratorList,
'dns-detail': DNSDetail,
DmarcAligmentChart,
DomainForm,
DomainSummary,
Resources,
@@ -78,7 +108,8 @@ export default {
domain: { pk: this.$route.params.id },
limitsConfig: {},
showEditForm: false,
showAdminList: false
showAdminList: false,
tab: null
}
},
methods: {
@@ -98,4 +129,7 @@ export default {
.v-toolbar {
background-color: #f7f8fa !important;
}
.v-tabs-items {
background-color: #f7f8fa !important;
}
</style>
@@ -87,6 +87,7 @@ MODOBOA_APPS = (
'modoboa.dnstools',
'modoboa.policyd',
'modoboa.maillog',
'modoboa.dmarc',
# Modoboa extensions here.
{% for extension in extensions %} '{{ extension }}',
{% endfor %}
+1
View File
@@ -93,6 +93,7 @@ SETTINGS_SAMPLE = {
"maillog-logfile": "/var/log/mail.log",
"maillog-rrd_rootdir": "/tmp",
"maillog-greylist": False,
"dmarc-enable_rlookups": False,
}
+3
View File
@@ -0,0 +1,3 @@
"""DMARC related tools for Modoboa."""
default_app_config = "modoboa.dmarc.apps.DmarcConfig"
+3
View File
@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.
View File
View File
+32
View File
@@ -0,0 +1,32 @@
"""App related serializers."""
from rest_framework import serializers
class TestResultSerializer(serializers.Serializer):
success = serializers.IntegerField()
failure = serializers.IntegerField()
class SourceSerializer(serializers.Serializer):
total = serializers.IntegerField()
spf = TestResultSerializer()
dkim = TestResultSerializer()
class DMARCAligmentSerializer(serializers.Serializer):
aligned = serializers.DictField(
child=serializers.DictField(child=SourceSerializer())
)
trusted = serializers.DictField(
child=serializers.DictField(child=SourceSerializer())
)
forwarded = serializers.DictField(
child=serializers.DictField(child=SourceSerializer())
)
failed = serializers.DictField(
child=serializers.DictField(child=SourceSerializer())
)
+36
View File
@@ -0,0 +1,36 @@
"""API v2 tests."""
from django.urls import reverse
from modoboa.lib.tests import ModoAPITestCase
from modoboa.admin import factories as admin_factories
from modoboa.dmarc.tests import mixins
class DmarcViewSetTestCase(mixins.CallCommandMixin, ModoAPITestCase):
@classmethod
def setUpTestData(cls):
"""Create test data."""
super().setUpTestData()
cls.domain = admin_factories.DomainFactory(name="ngyn.org")
def test_alignment_stats(self):
"""Test alignment stats endpoint."""
self.import_reports()
url = reverse("v2:dmarc-alignment-stats", args=[self.domain.pk])
response = self.client.get(f"{url}?period=2015-26")
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.json()["failed"]), 1)
def test_no_record(self):
url = reverse("v2:dmarc-alignment-stats", args=[self.domain.pk])
response = self.client.get(f"{url}?period=2015-26")
self.assertEqual(response.status_code, 204)
def test_wrong_range(self):
self.import_reports()
url = reverse("v2:dmarc-alignment-stats", args=[self.domain.pk])
response = self.client.get(f"{url}?period=toto-titi")
self.assertEqual(response.status_code, 400)
+10
View File
@@ -0,0 +1,10 @@
"""App related API urls."""
from rest_framework import routers
from . import viewsets
router = routers.SimpleRouter()
router.register(r"domains", viewsets.DMARCViewSet, basename="dmarc")
urlpatterns = router.urls
+38
View File
@@ -0,0 +1,38 @@
"""App. related viewsets."""
from rest_framework import permissions, response, viewsets
from rest_framework.decorators import action
from modoboa.admin import models as admin_models
from modoboa.lib.throttle import GetThrottleViewsetMixin
from ... import lib
from . import serializers
class DMARCViewSet(GetThrottleViewsetMixin, viewsets.GenericViewSet):
permission_classes = (permissions.IsAuthenticated, )
def get_queryset(self):
"""Filter queryset based on current user."""
return admin_models.Domain.objects.get_for_admin(self.request.user)
@action(
methods=["get"],
detail=True,
serializer_class=serializers.DMARCAligmentSerializer,
url_path="dmarc/alignment_stats"
)
def alignment_stats(self, request, **kwargs):
domain = self.get_object()
if not domain.record_set.exists():
return response.Response(status=204)
try:
stats = lib.get_aligment_stats(
domain, self.request.query_params.get("period")
)
except ValueError:
return response.Response("Invalid range received", status=400)
serializer = self.get_serializer(stats)
return response.Response(serializer.data)
+16
View File
@@ -0,0 +1,16 @@
"""AppConfig for dmarc."""
from django.apps import AppConfig
from modoboa.dmarc.forms import load_settings
class DmarcConfig(AppConfig):
"""App configuration."""
name = "modoboa.dmarc"
verbose_name = "Modoboa DMARC tools"
def ready(self):
load_settings()
from . import handlers
+10
View File
@@ -0,0 +1,10 @@
"""DMARC constants."""
ALLOWED_REASON_TYPES = (
"forwarded",
"sampled_out",
"trusted_forwarder",
"mailing_list",
"local_policy",
"other"
)
+51
View File
@@ -0,0 +1,51 @@
"""Custom forms."""
from django import forms
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from modoboa.lib import form_utils
from modoboa.parameters import forms as param_forms
class ReportOptionsForm(forms.Form):
"""Report display options."""
current_year = forms.IntegerField(widget=forms.widgets.HiddenInput)
current_week = forms.IntegerField()
query = forms.ChoiceField(
choices=[("previous", "Previous"), ("next", "Next")])
resolve_hostnames = forms.BooleanField(
initial=False, required=False)
def __init__(self, *args, **kwargs):
"""Constructor."""
super().__init__(*args, **kwargs)
if not args:
year, week, day = timezone.now().isocalendar()
self.fields["current_year"].initial = year
self.fields["current_week"].initial = week
class ParametersForm(param_forms.AdminParametersForm):
"""Extension settings."""
app = "dmarc"
qsettings_sep = form_utils.SeparatorField(label=_("DNS settings"))
enable_rlookups = form_utils.YesNoField(
label=_("Enable reverse lookups"),
initial=False,
help_text=_(
"Enable reverse DNS lookups (reports will be longer to display)"
)
)
def load_settings():
"""Load app settings."""
from modoboa.parameters import tools as param_tools
param_tools.registry.add(
"global", ParametersForm, _("DMARC"))
+22
View File
@@ -0,0 +1,22 @@
"""Django signal handlers for modoboa_dmarc."""
from django.urls import reverse
from django.utils.translation import ugettext as _
from django.dispatch import receiver
from modoboa.admin import signals as admin_signals
from . import models
@receiver(admin_signals.extra_domain_actions)
def dmarc_domain_actions(sender, user, domain, **kwargs):
"""Return a link to access domain report."""
if not models.Record.objects.filter(header_from=domain).exists():
return []
return [{
"name": "dmarc_report",
"url": reverse("dmarc:domain_report", args=[domain.pk]),
"title": _("Show DMARC report for {}").format(domain.name),
"img": "fa fa-pie-chart"
}]
+309
View File
@@ -0,0 +1,309 @@
"""Internal library."""
import concurrent.futures
import datetime
import email
import fileinput
import getpass
import imaplib
import zipfile
import gzip
import sys
import tldextract
from defusedxml.ElementTree import fromstring
from dns import resolver, reversename
import magic
import pytz.exceptions
import six
from django.db import transaction
from django.db.models import Q
from django.utils import timezone
from django.utils.encoding import smart_text
from django.utils.translation import ugettext as _
from modoboa.admin import models as admin_models
from modoboa.parameters import tools as param_tools
from . import constants
from . import models
ZIP_CONTENT_TYPES = [
"application/x-zip-compressed",
"application/x-zip",
"application/zip",
"application/gzip",
"application/octet-stream",
"text/xml",
]
FILE_TYPES = [
"text/plain",
"text/xml",
]
def import_record(xml_node, report):
"""Import a record."""
record = models.Record(report=report)
row = xml_node.find("row")
record.source_ip = row.find("source_ip").text
record.count = int(row.find("count").text)
policy_evaluated = row.find("policy_evaluated")
record.disposition = policy_evaluated.find("disposition").text
record.dkim_result = policy_evaluated.find("dkim").text
record.spf_result = policy_evaluated.find("spf").text
reason = policy_evaluated.find("reason")
if reason:
record.reason_type = smart_text(reason.find("type").text)[:14]
if record.reason_type not in constants.ALLOWED_REASON_TYPES:
record.reason_type = "other"
comment = reason.find("comment").text or ""
record.reason_comment = comment
identifiers = xml_node.find("identifiers")
header_from = identifiers.find("header_from").text.split(".")
domain = None
while len(header_from) >= 2:
domain = admin_models.Domain.objects.filter(
name=".".join(header_from)).first()
if domain is not None:
record.header_from = domain
break
header_from = header_from[1:]
if domain is None:
print("Invalid record found (domain not local)")
return None
record.save()
auth_results = xml_node.find("auth_results")
for rtype in ["spf", "dkim"]:
rnode = auth_results.find(rtype)
if not rnode:
continue
models.Result.objects.create(
record=record, type=rtype, domain=rnode.find("domain").text,
result=rnode.find("result").text)
@transaction.atomic
def import_report(content):
"""Import an aggregated report."""
root = fromstring(content, forbid_dtd=True)
metadata = root.find("report_metadata")
print(
"Importing report {} received from {}".format(
metadata.find("report_id").text,
metadata.find("org_name").text)
)
reporter, created = models.Reporter.objects.get_or_create(
email=metadata.find("email").text,
defaults={"org_name": metadata.find("org_name").text}
)
qs = models.Report.objects.filter(
reporter=reporter, report_id=metadata.find("report_id").text)
if qs.exists():
print("Report already imported.")
return
report = models.Report(reporter=reporter)
report.report_id = metadata.find("report_id").text
date_range = metadata.find("date_range")
report.start_date = timezone.make_aware(
datetime.datetime.fromtimestamp(int(date_range.find("begin").text))
)
report.end_date = timezone.make_aware(
datetime.datetime.fromtimestamp(int(date_range.find("end").text))
)
policy_published = root.find("policy_published")
for attr in ["domain", "adkim", "aspf", "p", "sp", "pct"]:
node = policy_published.find(attr)
if node is None or not node.text:
if attr == "sp":
node = fromstring('<sp>unstated</sp>', forbid_dtd=True)
else:
print(f"Report skipped because of malformed data (empty {attr})")
return
value = setattr(report, "policy_{}".format(attr), node.text)
try:
report.save()
except (pytz.exceptions.AmbiguousTimeError):
print("Report skipped because of invalid date.")
return
for record in root.findall("record"):
import_record(record, report)
def import_archive(archive, content_type=None):
"""Import reports contained inside (file pointer)
- a zip archive,
- a gzip file,
- a xml file.
"""
if content_type == "text/xml":
import_report(archive.read())
elif content_type in ["application/gzip", "application/octet-stream"]:
with gzip.GzipFile(mode="r", fileobj=archive) as zfile:
import_report(zfile.read())
else:
with zipfile.ZipFile(archive, "r") as zfile:
for fname in zfile.namelist():
import_report(zfile.read(fname))
def import_report_from_email(content):
"""Import a report from an email."""
if isinstance(content, six.string_types):
msg = email.message_from_string(content)
elif isinstance(content, six.binary_type):
msg = email.message_from_bytes(content)
else:
msg = email.message_from_file(content)
err = False
for part in msg.walk():
if part.get_content_type() not in ZIP_CONTENT_TYPES:
continue
try:
fpo = six.BytesIO(part.get_payload(decode=True))
# Try to get the actual file type of the buffer
# required to make sure we are dealing with an XML file
file_type = magic.Magic(uncompress=True, mime=True).from_buffer(fpo.read(2048))
fpo.seek(0)
if file_type in FILE_TYPES:
import_archive(fpo, content_type=part.get_content_type())
except (OSError, IOError):
print('Error: the attachment does not match the mimetype')
err = True
else:
fpo.close()
if err:
# Return EX_DATAERR code <data format error> available
# at sysexits.h file
# (see http://www.postfix.org/pipe.8.html)
sys.exit(65)
def import_report_from_stdin():
"""Parse a report from stdin."""
content = six.StringIO()
for line in fileinput.input([]):
content.write(line)
content.seek(0)
if not content:
return
import_report_from_email(content)
def import_from_imap(options):
"""Import reports from an IMAP mailbox."""
obj = imaplib.IMAP4_SSL if options["ssl"] else imaplib.IMAP4
conn = obj(options["host"])
username = input("Username: ")
password = getpass.getpass(prompt="Password: ")
conn.login(username, password)
conn.select(options["mailbox"])
type, msg_ids = conn.search(None, "ALL")
for msg_id in msg_ids[0].split():
typ, content = conn.fetch(msg_id, "(RFC822)")
for response_part in content:
if isinstance(response_part, tuple):
import_report_from_email(response_part[1])
conn.close()
def week_range(year, weeknumber):
"""Return start and end dates of a given week."""
tz = timezone.get_current_timezone()
fmt = "%Y-%W-%w"
start_week = datetime.datetime.strptime(
"{}-{}-{}".format(year, weeknumber, 1), fmt)
end_week = datetime.datetime.strptime(
"{}-{}-{}".format(year, weeknumber, 0), fmt)
return tz.localize(start_week), tz.localize(end_week)
def insert_record(target: dict, record, name: str) -> None:
"""Add a record."""
if name not in target:
target[name] = {}
if record.source_ip not in target[name]:
target[name][record.source_ip] = {
"total": 0,
"spf": {"success": 0, "failure": 0},
"dkim": {"success": 0, "failure": 0}
}
target[name][record.source_ip]["total"] += record.count
for typ in ["spf", "dkim"]:
result = getattr(record, "{}_result".format(typ))
key = "success" if result == "pass" else "failure"
target[name][record.source_ip][typ][key] += record.count
def get_aligment_stats(domain, period=None) -> dict:
"""Retrieve aligment statistics for given domain."""
if not period:
year, week, day = timezone.now().isocalendar()
week -= 1
period = f"{year}-{week}"
else:
year, week = period.split("-")
if not year or not week:
period = f"{year}-{week}"
daterange = week_range(year, week)
qargs = (
(Q(report__start_date__gte=daterange[0],
report__start_date__lte=daterange[1]) |
Q(report__end_date__gte=daterange[0],
report__end_date__lte=daterange[1])) &
Q(header_from=domain)
)
all_records = models.Record.objects.filter(qargs)
stats: dict = {
"aligned": {},
"trusted": {},
"forwarded": {},
"failed": {}
}
dns_names = {}
if param_tools.get_global_parameter("enable_rlookups"):
dns_resolver = resolver.Resolver()
dns_resolver.timeout = 1.0
dns_resolver.lifetime = 1.0
def get_domain_name_from_ip(ip):
addr = reversename.from_address(ip)
try:
resp = dns_resolver.query(addr, "PTR")
ext = tldextract.extract(str(resp[0].target))
if not ext.suffix: # invalid PTR record
raise resolver.NXDOMAIN()
return (ip, '.'.join((ext.domain, ext.suffix)).lower())
except (resolver.NXDOMAIN, resolver.YXDOMAIN,
resolver.NoAnswer, resolver.NoNameservers,
resolver.Timeout):
return (None, None)
ips = (r.source_ip for r in all_records)
with concurrent.futures.ThreadPoolExecutor(max_workers=16) as pool:
dns_names = {i: n for (i, n) in
list(pool.map(get_domain_name_from_ip, ips))}
for record in all_records:
name = dns_names.get(record.source_ip, _("Not resolved"))
if record.dkim_result == "pass" and record.spf_result == "pass":
insert_record(stats["aligned"], record, name)
elif record.dkim_result == "pass" or record.spf_result == "pass":
insert_record(stats["trusted"], record, name)
elif record.reason_type == "local_policy" and record.reason_comment.startswith("arc=pass"):
insert_record(stats["forwarded"], record, name)
else:
insert_record(stats["failed"], record, name)
return stats
@@ -0,0 +1,138 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Irriep Nala Novram <allannkorh@yahoo.fr>, 2019
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2020-05-06 12:07+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Breton (http://www.transifex.com/tonio/modoboa/language/br/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: br\n"
"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);\n"
#: forms.py:35
msgid "DNS settings"
msgstr "Arventennoù DNS"
#: forms.py:38
msgid "Enable reverse lookups"
msgstr "Enaouiñ an enklaskoù eilpennet"
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr "Enaouiñ an enklaskoù DNS eilpennet (danevelloù a vo hiroc'h da vezañ diskouezet)"
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "Diskouez an danevell DMARC evit {}"
#: models.py:10 models.py:16
msgid "None"
msgstr "Hini ebet"
#: models.py:11
msgid "Quarantine"
msgstr "Dispell"
#: models.py:12
msgid "Reject"
msgstr "Nac'hañ"
#: models.py:17
msgid "Neutral"
msgstr "Neptu"
#: models.py:18
msgid "Pass"
msgstr "Tremen"
#: models.py:19
msgid "Fail"
msgstr "Sac'hadenn"
#: models.py:20
msgid "Temporary error"
msgstr "Fazi padennek"
#: models.py:21
msgid "Permanent error"
msgstr "Fazi peurbadus"
#: models.py:25
msgid "Policy"
msgstr "Politikerezh"
#: models.py:29
msgid "Soft failure"
msgstr "Sac'hadenn wan"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "Ostilhoù DMARC"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "Un dastumad ostilhoù da aesaat enframmañ DMARC"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Hollad"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Linennet penn-da-benn"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Linennet dre an hanter"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "C'hwitet"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "Danevell DMARC evit"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "tretet"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "linennet penn-da-benn"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "linennet dre an hanter"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "c'hwitet"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Diskouez ar munudoù"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Mammennoù fizius"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Mammennoù dizanv/Gourdrouzioù"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,139 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Jan Laufik, 2016
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2017-03-03 08:18+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/tonio/"
"modoboa/language/cs_CZ/)\n"
"Language: cs_CZ\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: forms.py:35
msgid "DNS settings"
msgstr ""
#: forms.py:38
msgid "Enable reverse lookups"
msgstr ""
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr ""
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "Zobrazit DMARC zprávu pro {}"
#: models.py:10 models.py:16
msgid "None"
msgstr "Nic"
#: models.py:11
msgid "Quarantine"
msgstr "Karanténa"
#: models.py:12
msgid "Reject"
msgstr "Odmítnout"
#: models.py:17
msgid "Neutral"
msgstr "Neutrální"
#: models.py:18
msgid "Pass"
msgstr "Úspěch"
#: models.py:19
msgid "Fail"
msgstr "Selhání"
#: models.py:20
msgid "Temporary error"
msgstr "Dočasná chyba"
#: models.py:21
msgid "Permanent error"
msgstr "Permanentní chyba"
#: models.py:25
msgid "Policy"
msgstr "Politika"
#: models.py:29
msgid "Soft failure"
msgstr "Selhání bez odmítnutí"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "DMARC nástroje"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "Sada nástrojů pro zjednodušení integrace DMARC"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Celkem"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Plně v souladu"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Částečně v souladu"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "Selhalo"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "DMARC zpráva pro"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "zpracované"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "plně v souladu"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "částečně v souladu"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "selhalo"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Zobrazit podrobnosti"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Důvěryhodné zdroje"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Neznáme zdroje / Hrozby"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,139 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# controlc.de, 2015
# Tobias Strobel, 2016
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2017-03-03 08:18+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: German (http://www.transifex.com/tonio/modoboa/language/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forms.py:35
msgid "DNS settings"
msgstr ""
#: forms.py:38
msgid "Enable reverse lookups"
msgstr ""
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr ""
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "DMARC-Bericht für {} anzeigen"
#: models.py:10 models.py:16
msgid "None"
msgstr "Nichts"
#: models.py:11
msgid "Quarantine"
msgstr "Quarantäne"
#: models.py:12
msgid "Reject"
msgstr "Ablehnung"
#: models.py:17
msgid "Neutral"
msgstr "Neutral"
#: models.py:18
msgid "Pass"
msgstr "Genehmigen"
#: models.py:19
msgid "Fail"
msgstr "Abbruch"
#: models.py:20
msgid "Temporary error"
msgstr "Temporärer Fehler"
#: models.py:21
msgid "Permanent error"
msgstr "Permanenter Fehler"
#: models.py:25
msgid "Policy"
msgstr "Richtlinie"
#: models.py:29
msgid "Soft failure"
msgstr "Schwacher Fehler"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "DMARC-Tools"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "Ein Set von Tools um die DMARC-Integration zu vereinfachen"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Total"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Voll zugeordnet"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Teilweise zugeordnet"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "Fehlgeschlagen"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "DMARC-Bericht für"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "durchgeführt"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "voll zugeordnet"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "teilweise zugeordnet"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "fehlgeschlagen"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Anzeigedetails"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Vertraute Quellen"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Unbekannte Quellen / Bedrohungen"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,140 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Giannis Kapetanakis <bilias@edu.physics.uoc.gr>, 2016
# Kostas Moumouris <moumouriskostas@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2017-10-12 09:55+0000\n"
"Last-Translator: Kostas Moumouris <moumouriskostas@gmail.com>\n"
"Language-Team: Greek (Greece) (http://www.transifex.com/tonio/modoboa/"
"language/el_GR/)\n"
"Language: el_GR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forms.py:35
msgid "DNS settings"
msgstr "Ρυθμίσεις DNS"
#: forms.py:38
msgid "Enable reverse lookups"
msgstr "Ενεργοποίηση ανάστροφης αναζήτησης reverse lookups"
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr "Ενεργοποίηση reverse DNS lookups (η αναφορές θα καθυστερούν)"
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "Εμφάνιση της έκθεσης DMARC του {}"
#: models.py:10 models.py:16
msgid "None"
msgstr "Κανένα"
#: models.py:11
msgid "Quarantine"
msgstr "Καραντίνα"
#: models.py:12
msgid "Reject"
msgstr "Απόρριψη"
#: models.py:17
msgid "Neutral"
msgstr "Ουδέτερο"
#: models.py:18
msgid "Pass"
msgstr "Εγκρίθηκε"
#: models.py:19
msgid "Fail"
msgstr "Απορρίφθηκε"
#: models.py:20
msgid "Temporary error"
msgstr "προσωρινό σφάλμα"
#: models.py:21
msgid "Permanent error"
msgstr "Μόνιμο σφάλμα"
#: models.py:25
msgid "Policy"
msgstr "Πολιτική"
#: models.py:29
msgid "Soft failure"
msgstr "Πρόβλημα Soft"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "Εργαλεία DMARC"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "Ένα σετ εργαλείων για την απλοποίηση της ενσωμάτωσης του DMARC"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Σύνολο"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Πλήρως ευθυγραμμισμένο"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Μερικός ευθυγραμισμένα"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "Απέτυχε"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "Έκθεση DMARC του"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "Επεξεργάστηκε"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "πλήρως ευθυγραμμισμένο"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "Μερικώς ευθυγραμμισμένο"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "απέτυχε"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Προβολή λεπτομερειών"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Αξιόπιστες πηγές"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Άγνωστες πηγές / Απειλές"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,137 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: forms.py:35
msgid "DNS settings"
msgstr ""
#: forms.py:38
msgid "Enable reverse lookups"
msgstr ""
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr ""
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr ""
#: models.py:10 models.py:16
msgid "None"
msgstr ""
#: models.py:11
msgid "Quarantine"
msgstr ""
#: models.py:12
msgid "Reject"
msgstr ""
#: models.py:17
msgid "Neutral"
msgstr ""
#: models.py:18
msgid "Pass"
msgstr ""
#: models.py:19
msgid "Fail"
msgstr ""
#: models.py:20
msgid "Temporary error"
msgstr ""
#: models.py:21
msgid "Permanent error"
msgstr ""
#: models.py:25
msgid "Policy"
msgstr ""
#: models.py:29
msgid "Soft failure"
msgstr ""
#: modo_extension.py:16
msgid "DMARC tools"
msgstr ""
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr ""
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr ""
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr ""
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,138 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Antoine Nguyen <tonio@ngyn.org>, 2017,2020
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2020-05-06 12:07+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: French (http://www.transifex.com/tonio/modoboa/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: forms.py:35
msgid "DNS settings"
msgstr "Paramètres DNS"
#: forms.py:38
msgid "Enable reverse lookups"
msgstr "Activer les recherches inversées"
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr "Activer les recherches DNS inversées (les rapports seront plus longs à afficher)"
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "Afficher le rapport DMARC pour {}"
#: models.py:10 models.py:16
msgid "None"
msgstr "Aucun"
#: models.py:11
msgid "Quarantine"
msgstr "Quarantaine"
#: models.py:12
msgid "Reject"
msgstr "Rejeter"
#: models.py:17
msgid "Neutral"
msgstr "Neutre"
#: models.py:18
msgid "Pass"
msgstr "Succès"
#: models.py:19
msgid "Fail"
msgstr "Echec"
#: models.py:20
msgid "Temporary error"
msgstr "Erreur temporaire"
#: models.py:21
msgid "Permanent error"
msgstr "Erreur permanente"
#: models.py:25
msgid "Policy"
msgstr "Politique"
#: models.py:29
msgid "Soft failure"
msgstr "Erreur soft"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "Outils DMARC"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "Un jeu d'outils pour faciliter l'intégration de DMARC"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Total"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Alignement complet"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Alignement partiel"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "En échec"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "Rapport DMARC pour"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "traité(s)"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "complètement aligné(s)"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "partiellement aligné(s)"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "en échec"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Afficher les détails"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Sources de confiance"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Sources inconnues / Menaces"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr "Non résolu"
@@ -0,0 +1,139 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Rocco <mors10@hotmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2017-03-03 08:18+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Italian (http://www.transifex.com/tonio/modoboa/language/"
"it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forms.py:35
msgid "DNS settings"
msgstr ""
#: forms.py:38
msgid "Enable reverse lookups"
msgstr ""
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr ""
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "Mostra DMARC report per {}"
#: models.py:10 models.py:16
msgid "None"
msgstr "Nessuno"
#: models.py:11
msgid "Quarantine"
msgstr "Quarantina"
#: models.py:12
msgid "Reject"
msgstr "Rifiuta"
#: models.py:17
msgid "Neutral"
msgstr "Neutrale"
#: models.py:18
msgid "Pass"
msgstr "Passa"
#: models.py:19
msgid "Fail"
msgstr "Fallito"
#: models.py:20
msgid "Temporary error"
msgstr "Errore temporaneo"
#: models.py:21
msgid "Permanent error"
msgstr "Errore permanente"
#: models.py:25
msgid "Policy"
msgstr "Policy"
#: models.py:29
msgid "Soft failure"
msgstr "Piccolo problema"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "Strumenti DMARC"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "Una serie di strumenti per facilitare l'integrazione DMARC"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Totale"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Completamente allineato"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Parzialmente allineato"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "Fallito"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "Rapporto DMARC per"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "Processati"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "Completamente allineato"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "Allineato parzialmente"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "Fallito"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Mostra dettagli"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Fonti attendibili"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Fonti sconosciute / Minaccie"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,139 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# cwatanab <chihiro.watanabe@live.jp>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2017-03-03 08:18+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/tonio/modoboa/"
"language/ja_JP/)\n"
"Language: ja_JP\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: forms.py:35
msgid "DNS settings"
msgstr ""
#: forms.py:38
msgid "Enable reverse lookups"
msgstr ""
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr ""
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "{} の DMARC レポートを表示"
#: models.py:10 models.py:16
msgid "None"
msgstr "None"
#: models.py:11
msgid "Quarantine"
msgstr "Quarantine"
#: models.py:12
msgid "Reject"
msgstr "Reject"
#: models.py:17
msgid "Neutral"
msgstr "Neutral"
#: models.py:18
msgid "Pass"
msgstr "Pass"
#: models.py:19
msgid "Fail"
msgstr "Fail"
#: models.py:20
msgid "Temporary error"
msgstr "Temporary error"
#: models.py:21
msgid "Permanent error"
msgstr "Permanent error"
#: models.py:25
msgid "Policy"
msgstr "Policy"
#: models.py:29
msgid "Soft failure"
msgstr "Soft failure"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "DMARC ツール"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "DMARC 統合のためのツールセット"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Total"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Fully aligned"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Partially aligned"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "Failed"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "DMARC レポート"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "processed"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "fully aligned"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "partially aligned"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "failed"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "詳細を表示"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Trusted sources"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Unknown sources / Threats"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,141 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Harrie v.d. Vegt <hvdvegt@gmail.com>, 2016
# Tuxis Internet Engineering V.O.F. <info@tuxis.nl>, 2016
# Tuxis Internet Engineering V.O.F. <info@tuxis.nl>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2017-03-03 08:18+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/tonio/modoboa/"
"language/nl_NL/)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forms.py:35
msgid "DNS settings"
msgstr ""
#: forms.py:38
msgid "Enable reverse lookups"
msgstr ""
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr ""
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "Toon DMARC rapportage voor {}"
#: models.py:10 models.py:16
msgid "None"
msgstr "Geen"
#: models.py:11
msgid "Quarantine"
msgstr "Quarantaine"
#: models.py:12
msgid "Reject"
msgstr "Afkeuren"
#: models.py:17
msgid "Neutral"
msgstr "Neutraal"
#: models.py:18
msgid "Pass"
msgstr "Gelukt"
#: models.py:19
msgid "Fail"
msgstr "Mislukt"
#: models.py:20
msgid "Temporary error"
msgstr "Tijdelijke fout"
#: models.py:21
msgid "Permanent error"
msgstr "Permanente fout"
#: models.py:25
msgid "Policy"
msgstr "Beleid"
#: models.py:29
msgid "Soft failure"
msgstr "Toegestane fout"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "DMARC gereedschappen"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "Een aantal eenvoudige programmas DMARC"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Totaal"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Volledig alligned"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Gedeeltelijk alligned"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "Mislukt"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "DMARC rapportage voor"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "verwerkt"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "volledig alligned"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "gedeeltelijk alligned"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "mislukt"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Toon details"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Vertrouwde bronnen"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Onbekende bronnen / bedreigingen"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,139 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Paulino Michelazzo <paulino@michelazzo.com.br>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2017-03-03 08:18+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/tonio/modoboa/"
"language/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: forms.py:35
msgid "DNS settings"
msgstr ""
#: forms.py:38
msgid "Enable reverse lookups"
msgstr ""
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr ""
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "Mostrar relatório DMARC para {}"
#: models.py:10 models.py:16
msgid "None"
msgstr "Nenhum"
#: models.py:11
msgid "Quarantine"
msgstr "Quarentena"
#: models.py:12
msgid "Reject"
msgstr "Rejeitado"
#: models.py:17
msgid "Neutral"
msgstr "Neutro"
#: models.py:18
msgid "Pass"
msgstr "Passou"
#: models.py:19
msgid "Fail"
msgstr "Falha"
#: models.py:20
msgid "Temporary error"
msgstr "Erro temporário"
#: models.py:21
msgid "Permanent error"
msgstr "Erro permanente"
#: models.py:25
msgid "Policy"
msgstr "Política"
#: models.py:29
msgid "Soft failure"
msgstr "Falha leve"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "Ferramentas DMARC"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "Um conjunto de ferramentas para fácil integração do DMARC"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Total"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Completamente alinhado"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Parcialmente alinhado"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "Falha"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "Relatório DMARC para"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "processado"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "completamente alinhado"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "parcialmente alinhado"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "falho"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Mostrar detalhes"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Fontes confiáveis"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Fontes desconhecidas / Ameaças"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,139 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Olle Gustafsson <olle@dalnix.se>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-06 14:05+0200\n"
"PO-Revision-Date: 2017-03-03 08:18+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Swedish (http://www.transifex.com/tonio/modoboa/language/"
"sv/)\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: forms.py:35
msgid "DNS settings"
msgstr ""
#: forms.py:38
msgid "Enable reverse lookups"
msgstr ""
#: forms.py:41
msgid "Enable reverse DNS lookups (reports will be longer to display)"
msgstr ""
#: handlers.py:20
msgid "Show DMARC report for {}"
msgstr "Visa DMARC rapport för {}"
#: models.py:10 models.py:16
msgid "None"
msgstr "Inga"
#: models.py:11
msgid "Quarantine"
msgstr "Karantän"
#: models.py:12
msgid "Reject"
msgstr "Avvisa"
#: models.py:17
msgid "Neutral"
msgstr "Netural"
#: models.py:18
msgid "Pass"
msgstr "Passera"
#: models.py:19
msgid "Fail"
msgstr "Avslå"
#: models.py:20
msgid "Temporary error"
msgstr "Tillfälligt fel"
#: models.py:21
msgid "Permanent error"
msgstr "Permanent fel"
#: models.py:25
msgid "Policy"
msgstr "Policy"
#: models.py:29
msgid "Soft failure"
msgstr "Mjukt misslyckande"
#: modo_extension.py:16
msgid "DMARC tools"
msgstr "DMARC verktyg"
#: modo_extension.py:19
msgid "A set of tools to ease DMARC integration"
msgstr "En uppsättning verktyg för att underlätta DMARC integration"
#: templates/modoboa_dmarc/_result_detail.html:6
msgid "Total"
msgstr "Totalt"
#: templates/modoboa_dmarc/domain_report.html:21
#: templates/modoboa_dmarc/domain_report.html:26
msgid "Fully aligned"
msgstr "Helt i linje"
#: templates/modoboa_dmarc/domain_report.html:22
#: templates/modoboa_dmarc/domain_report.html:27
msgid "Partially aligned"
msgstr "Delvis i linje"
#: templates/modoboa_dmarc/domain_report.html:23
#: templates/modoboa_dmarc/domain_report.html:28
msgid "Failed"
msgstr "Misslyckades"
#: templates/modoboa_dmarc/domain_report.html:50
msgid "DMARC report for"
msgstr "DMARC rapport för"
#: templates/modoboa_dmarc/domain_report.html:74
msgid "processed"
msgstr "bearbetats"
#: templates/modoboa_dmarc/domain_report.html:83
msgid "fully aligned"
msgstr "helt i linje"
#: templates/modoboa_dmarc/domain_report.html:92
msgid "partially aligned"
msgstr "delvis i linje"
#: templates/modoboa_dmarc/domain_report.html:101
msgid "failed"
msgstr "misslyckades"
#: templates/modoboa_dmarc/domain_report.html:111
msgid "Display details"
msgstr "Visa detaljer"
#: templates/modoboa_dmarc/domain_report.html:115
msgid "Trusted sources"
msgstr "Betrodda källor"
#: templates/modoboa_dmarc/domain_report.html:123
msgid "Unknown sources / Threats"
msgstr "Okända källor / Hot"
#: templatetags/dmarc_tags.py:59 views.py:120
msgid "Not resolved"
msgstr ""
@@ -0,0 +1,40 @@
"""Import a DMARC aggregated report."""
from __future__ import print_function
from django.core.management.base import BaseCommand
from ... import lib
class Command(BaseCommand):
"""Command definition."""
help = "Import DMARC aggregated reports."
def add_arguments(self, parser):
"""Add extra arguments to parser."""
parser.add_argument(
"--pipe", action="store_true", default=False,
help="Import a report from an email given on stdin")
parser.add_argument(
"--imap", action="store_true", default=False,
help="Import a report from an IMAP mailbox")
parser.add_argument(
"--host", default="localhost",
help="IMAP host")
parser.add_argument(
"--ssl", action="store_true", default=False,
help="Connect using SSL"),
parser.add_argument(
"--mailbox", default="INBOX",
help="IMAP mailbox to import reports from")
def handle(self, *args, **options):
"""Entry point."""
if options.get("pipe"):
lib.import_report_from_stdin()
elif options.get("imap"):
lib.import_from_imap(options)
else:
print("Nothing to do.")
+90
View File
@@ -0,0 +1,90 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('admin', '0002_migrate_from_modoboa_admin'),
]
operations = [
migrations.CreateModel(
name='Record',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('source_ip', models.GenericIPAddressField()),
('count', models.IntegerField()),
('disposition', models.CharField(max_length=10, choices=[(b'none', 'None'), (b'quarantine', 'Quarantine'), (b'reject', 'Reject')])),
('dkim_result', models.CharField(max_length=9, choices=[(b'none', 'None'), (b'neutral', 'Neutral'), (b'pass', 'Pass'), (b'fail', 'Fail'), (b'temperror', 'Temporary error'), (b'permerror', 'Permanent error'), (b'policy', 'Policy')])),
('spf_result', models.CharField(max_length=9, choices=[(b'none', 'None'), (b'neutral', 'Neutral'), (b'pass', 'Pass'), (b'fail', 'Fail'), (b'temperror', 'Temporary error'), (b'permerror', 'Permanent error'), (b'softfail', 'Soft failure')])),
('reason_type', models.CharField(max_length=15, blank=True)),
('reason_comment', models.CharField(max_length=100, blank=True)),
('header_from', models.ForeignKey(to='admin.Domain', on_delete=models.CASCADE)),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Report',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('report_id', models.CharField(max_length=100)),
('start_date', models.DateTimeField()),
('end_date', models.DateTimeField()),
('policy_domain', models.CharField(max_length=100)),
('policy_adkim', models.CharField(max_length=1)),
('policy_aspf', models.CharField(max_length=1)),
('policy_p', models.CharField(max_length=10)),
('policy_sp', models.CharField(max_length=10)),
('policy_pct', models.SmallIntegerField()),
],
options={
'permissions': (('view_report', 'Can view report'),),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Reporter',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('org_name', models.CharField(max_length=100)),
('email', models.EmailField(unique=True, max_length=254)),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Result',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('type', models.CharField(max_length=4, choices=[(b'dkim', b'DKIM'), (b'spf', b'SPF')])),
('domain', models.CharField(max_length=100)),
('result', models.CharField(max_length=9)),
('record', models.ForeignKey(to='dmarc.Record', on_delete=models.CASCADE)),
],
options={
},
bases=(models.Model,),
),
migrations.AddField(
model_name='report',
name='reporter',
field=models.ForeignKey(to='dmarc.Reporter', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AlterUniqueTogether(
name='report',
unique_together=set([('reporter', 'report_id')]),
),
migrations.AddField(
model_name='record',
name='report',
field=models.ForeignKey(to='dmarc.Report', on_delete=models.CASCADE),
preserve_default=True,
),
]
@@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.8 on 2018-01-24 23:11
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dmarc', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='record',
name='disposition',
field=models.CharField(choices=[('none', 'None'), ('quarantine', 'Quarantine'), ('reject', 'Reject')], max_length=10),
),
migrations.AlterField(
model_name='record',
name='dkim_result',
field=models.CharField(choices=[('none', 'None'), ('neutral', 'Neutral'), ('pass', 'Pass'), ('fail', 'Fail'), ('temperror', 'Temporary error'), ('permerror', 'Permanent error'), ('policy', 'Policy')], max_length=9),
),
migrations.AlterField(
model_name='record',
name='spf_result',
field=models.CharField(choices=[('none', 'None'), ('neutral', 'Neutral'), ('pass', 'Pass'), ('fail', 'Fail'), ('temperror', 'Temporary error'), ('permerror', 'Permanent error'), ('softfail', 'Soft failure')], max_length=9),
),
migrations.AlterField(
model_name='result',
name='type',
field=models.CharField(choices=[('dkim', 'DKIM'), ('spf', 'SPF')], max_length=4),
),
]
@@ -0,0 +1,17 @@
# Generated by Django 2.2.9 on 2020-02-27 08:36
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('dmarc', '0002_auto_20180124_2311'),
]
operations = [
migrations.AlterModelOptions(
name='report',
options={},
),
]
@@ -0,0 +1,33 @@
# Generated by Django 3.2.12 on 2022-09-26 07:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dmarc', '0003_auto_20200227_0936'),
]
operations = [
migrations.AlterField(
model_name='record',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='report',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='reporter',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='result',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]
+104
View File
@@ -0,0 +1,104 @@
"""DMARC models."""
from django.db import models
from django.utils.translation import ugettext_lazy as _
from modoboa.admin import models as admin_models
POLICY_DISPOSITIONS = [
("none", _("None")),
("quarantine", _("Quarantine")),
("reject", _("Reject"))
]
COMMON_RESULTS = [
("none", _("None")),
("neutral", _("Neutral")),
("pass", _("Pass")),
("fail", _("Fail")),
("temperror", _("Temporary error")),
("permerror", _("Permanent error"))
]
DKIM_RESULTS = COMMON_RESULTS + [
("policy", _("Policy"))
]
SPF_RESULTS = COMMON_RESULTS + [
("softfail", _("Soft failure"))
]
RECORD_TYPES = [
("dkim", "DKIM"),
("spf", "SPF"),
]
class Reporter(models.Model):
"""Report issuers."""
org_name = models.CharField(max_length=100)
email = models.EmailField(unique=True)
def __str__(self):
"""Return name and email."""
return "{} <{}>".format(self.org_name, self.email)
class Report(models.Model):
"""Aggregated reports."""
report_id = models.CharField(max_length=100)
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
start_date = models.DateTimeField()
end_date = models.DateTimeField()
# Published policy
policy_domain = models.CharField(max_length=100)
policy_adkim = models.CharField(max_length=1)
policy_aspf = models.CharField(max_length=1)
policy_p = models.CharField(max_length=10)
policy_sp = models.CharField(max_length=10)
policy_pct = models.SmallIntegerField()
class Meta:
unique_together = ("reporter", "report_id")
def __str__(self):
"""Display provider and dates."""
return "{}: {} -> {}".format(
self.reporter, self.start_date, self.end_date)
class Record(models.Model):
"""Report records."""
report = models.ForeignKey(Report, on_delete=models.CASCADE)
source_ip = models.GenericIPAddressField()
count = models.IntegerField()
# Policy evaluated
disposition = models.CharField(
max_length=10, choices=POLICY_DISPOSITIONS)
dkim_result = models.CharField(
max_length=9, choices=DKIM_RESULTS)
spf_result = models.CharField(
max_length=9, choices=SPF_RESULTS)
header_from = models.ForeignKey(admin_models.Domain,
on_delete=models.CASCADE)
reason_type = models.CharField(max_length=15, blank=True)
reason_comment = models.CharField(max_length=100, blank=True)
class Result(models.Model):
"""Record results."""
record = models.ForeignKey(Record, on_delete=models.CASCADE)
type = models.CharField(max_length=4, choices=RECORD_TYPES)
domain = models.CharField(max_length=100)
result = models.CharField(max_length=9)
@@ -0,0 +1,27 @@
{% load i18n %}
<tr>
<th>{{ domain }}</th>
{% if forloop.first %}
<th class="text-center">{% trans "Total" %}</th>
<th class="text-center">SPF</th>
<th class="text-center">DKIM</th>
{% else %}
<th colspan="3"></th>
{% endif %}
</tr>
{% for ip_address, results in stats.items %}
<tr>
<td class="col-sm-6">{{ ip_address }}</td>
<td class="col-sm-2 text-center">{{ results.total }}</td>
<td class="col-sm-2 text-center">
{% if not only_failed %}<span class="label label-success">{{ results.spf.pass }}</span>{% endif %}
<span class="label label-danger">{{ results.spf.fail }}</span>
</td>
<td class="col-sm-2 text-center">
{% if not only_failed %}<span class="label label-success">{{ results.dkim.pass }}</span>{% endif %}
<span class="label label-danger">{{ results.dkim.fail }}</span>
</td>
</tr>
{% endfor %}
@@ -0,0 +1,159 @@
{% extends "admin/domains.html" %}
{% load i18n l10n %}
{% load static %}
{% load admin_tags %}
{% load dmarc_tags %}
{% block extra_css %}
<link rel="stylesheet" href="{{ STATIC_URL }}c3/c3.min.css" />
{% endblock %}
{% block extra_js %}
<script type="text/javascript" src="{{ STATIC_URL }}d3/d3.min.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}c3/c3.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var pie_chart = c3.generate({
bindto: '#global_distribution',
data: {
columns: [
['{% trans "Fully aligned" %}', {{ pie_data.faligned|unlocalize }}],
['{% trans "Partially aligned" %}', {{ pie_data.paligned|unlocalize }}],
['{% trans "Forwarded" %}', {{ pie_data.forwarded|unlocalize }}],
['{% trans "Failed" %}', {{ pie_data.failed|unlocalize }}]
],
colors: {
'{% trans "Fully aligned" %}': 'limegreen',
'{% trans "Partially aligned" %}': 'gold',
'{% trans "Forwarded" %}': 'lightskyblue',
'{% trans "Failed" %}': 'lightcoral',
},
type : 'pie'
}
});
$("#show-report-detail").click(function(evt) {
$("#report-details").show();
$(this).remove();
});
});
</script>
{% endblock %}
{% block leftcol %}
<ul class="nav nav-sidebar">
{% domains_menu "dmarc" user False %}
</ul>
{% endblock %}
{% block apparea %}
<div class="row">
<div class="col-sm-7">
<h1><small>{% trans "DMARC report for" %} {{ domain }}</small></h1>
</div>
<div class="col-sm-5">
<div class="panel panel-default">
<div class="panel-body text-center">
<a href="{% url 'dmarc:domain_report' domain.pk %}?period={% previous_period period %}" name="prevweek"><span class="fa fa-chevron-left"></span></a>
{{ daterange.0|date }} - {{ daterange.1|date }}
<a href="{% url 'dmarc:domain_report' domain.pk %}?period={% next_period period %}" name="nextweek"><span class="fa fa-chevron-right"></span></a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-5">
<div id="global_distribution"></div>
</div>
<div class="col-sm-7">
<div class="row">
<div class="col-sm-6">
<div class="panel panel-primary text-center">
<div class="panel-body">
<h1 class="text-primary">{{ stats.total }}</h1>
<h4>{% trans "processed" %}</h4>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="panel panel-success text-center">
<div class="panel-body">
<h1 class="text-success" >{{ stats.aligned }}</h1>
<h4>{% trans "fully aligned" %}</h4>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="panel panel-warning text-center">
<div class="panel-body">
<h1 class="text-warning" >{{ stats.trusted }}</h1>
<h4>{% trans "partially aligned" %}</h4>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="panel panel-info text-center">
<div class="panel-body">
<h1 class="text-info" >{{ stats.forwarded }}</h1>
<h4>{% trans "forwarded" %}</h4>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="panel panel-danger text-center">
<div class="panel-body">
<h1 class="text-danger">{{ stats.failed }}</h1>
<h4>{% trans "failed" %}</h4>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="text-center">
<button id="show-report-detail" class="btn btn-primary">
{% trans "Display details" %}</button>
</div>
<div id="report-details" style="display: none">
<h1><small>{% trans "Trusted sources" %} <span class="text-success">{{ stats.aligned }}</span></small></h1>
<table class="table">
{% for domain, stats in aligned|domain_sorted_items %}
{% include "dmarc/_result_detail.html" with domain=domain stats=stats %}
{% endfor %}
</table>
<h1><small>{% trans "Partially trusted sources / Forwarders" %} <span class="text-warning">{{ stats.trusted }}</span></small></h1>
<table class="table">
{% for domain, stats in trusted|domain_sorted_items %}
{% include "dmarc/_result_detail.html" with domain=domain stats=stats %}
{% endfor %}
</table>
<h1><small>{% trans "Forwarders with ARC" %} <span class="text-info">{{ stats.forwarded }}</span></small></h1>
<table class="table">
{% for domain, stats in forwarded|domain_sorted_items %}
{% include "dmarc/_result_detail.html" with domain=domain stats=stats %}
{% endfor %}
</table>
<h1><small>{% trans "Unknown sources / Threats" %} <span class="text-danger">{{ stats.failed }}</span></small></h1>
<table class="table">
{% for domain, stats in threats|domain_sorted_items %}
{% include "dmarc/_result_detail.html" with domain=domain stats=stats only_failed=True %}
{% endfor %}
</table>
</div>
{% endblock %}
+65
View File
@@ -0,0 +1,65 @@
"""Custom template tags."""
import datetime
from collections import OrderedDict
from django import template
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
register = template.Library()
@register.simple_tag
def next_period(period):
"""Return next period."""
current = period.split("-")
if int(current[1]) == 52:
week0 = datetime.datetime.strptime("{}-0-1".format(int(current[0]) + 1 ), "%Y-%W-%w")
week1 = datetime.datetime.strptime("{}-1-1".format(int(current[0]) + 1 ), "%Y-%W-%w")
week52 = datetime.datetime.strptime("{}-52-1".format(current[0]), "%Y-%W-%w")
if week0 == week52 or week0 == week1 :
parts = (int(current[0]) + 1, 1 )
else:
parts = (int(current[0]) + 1, 0 )
else:
parts = (current[0], int(current[1]) + 1 )
return mark_safe("{}-{}".format(parts[0], parts[1]))
@register.simple_tag
def previous_period(period):
"""Return previous period."""
current = period.split("-")
if int(current[1]) == 1:
week0 = datetime.datetime.strptime("{}-0-1".format(current[0]), "%Y-%W-%w")
week1 = datetime.datetime.strptime("{}-1-1".format(current[0]), "%Y-%W-%w")
if week0 == week1:
parts = (int(current[0]) - 1, 52 )
else:
parts = (current[0], 0 )
elif int(current[1]) == 0:
week0 = datetime.datetime.strptime("{}-0-1".format(current[0]), "%Y-%W-%w")
week52 = datetime.datetime.strptime("{}-52-1".format(int(current[0]) - 1 ), "%Y-%W-%w")
if week0 == week52:
parts = (int(current[0]) - 1, 51 )
else:
parts = (int(current[0]) - 1, 52 )
else:
parts = (current[0], int(current[1]) - 1 )
return mark_safe("{}-{}".format(parts[0], parts[1]))
@register.filter
def domain_sorted_items(domain_dict):
"""Return a list of tuples ordered alphabetically by domain names."""
if isinstance(domain_dict, dict):
sorted_domain_dict = OrderedDict(
sorted(domain_dict.items(), key=lambda t: t[0]))
unresolved_label = _("Not resolved")
unresolved = sorted_domain_dict.pop(unresolved_label, None)
if unresolved:
sorted_domain_dict[unresolved_label] = unresolved
return sorted_domain_dict.items()
raise ValueError("domain_dict is not a dict")
View File
@@ -0,0 +1,67 @@
Return-Path: <abuse@163.com>
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id IKPdD1ULmlXgLQAABvoInA
for <tonio@ngyn.org>; Mon, 06 Jul 2015 07:00:05 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id 2645EE035B
for <postmaster@ngyn.org>; Mon, 6 Jul 2015 07:00:05 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <postmaster@ngyn.org>;
Mon, 6 Jul 2015 07:00:03 +0200 (CEST)
Received: from m12-181.163.com (m12-181.163.com [220.181.12.181])
by mail.koalabs.org (Postfix) with ESMTP
for <postmaster@ngyn.org>; Mon, 6 Jul 2015 06:59:54 +0200 (CEST)
Received: from 163.com (unknown [192.168.201.141])
by mfast1 (Coremail) with SMTP id tcCowEAJixEvC5pVHJvvLg--.53754S2;
Mon, 06 Jul 2015 12:59:27 +0800 (CST)
Content-Type: multipart/mixed; boundary="===============2544031943362770105=="
MIME-Version: 1.0
From: <abuse@163.com>
Date: Mon, 06 Jul 2015 12:59:25 +0800
Subject: Report Domain: ngyn.org Submitter: 163.com Report-ID:
aggr_report_ngyn.org_20150705_163.com
To: postmaster@ngyn.org
X-CM-TRANSID:tcCowEAJixEvC5pVHJvvLg--.53754S2
Message-Id:<559A0B30.EBEE1F.29746@m12-181.163.com>
X-Coremail-Antispam: 1UD129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73
VFW2AGmfu7bjvjm3AaLaJ3UjIYCTnIWjp_UUUnI7CY07I20VC2zVCF04k26cxKx2IYs7xG
6rWj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wAa7VASzI0EjI02j7AqF2
xKxVCjxxvEa2IrM2AIxVAIcxkEcVAq07x20xvEncxIr21le4C267I2x7xF54xIwI1l5I8C
rVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VWrMcvjeVCFs4IE7xkEbVWUJVW8Jw
ACjcxG0xvEwIxGrwAKzVAC0xCFj2AI6cx7M4kE6xkIj40Ew7xC0wCjxxvEa2IrMxkIecxE
wVCm-wCY0x0Ix7I2Y4AK64vIr41l42xK82IYc2Ij64vIr41l42xK82IY6x8ErcxFaVAv8V
WrMxCjnVAqn7xvrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18
MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jr0_JrylIxkGc2Ij64vIr4
1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjTRClkVDUUUU
X-Originating-IP: [192.168.201.141]
X-CM-SenderInfo: 5dex2vi6rwjhhfrp/
--===============2544031943362770105==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
This is a DMARC aggregate report for domain ngyn.org on 20150705. For more information please mail to abuse@163.com.
--===============2544031943362770105==
MIME-Version: 1.0
Content-Type: application/gzip;
name="163.com!ngyn.org!1436054400!1436140799.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="163.com!ngyn.org!1436054400!1436140799.zip"
UEsDBBQAAAAIAGxn5kZGEGLBdAEAAJQDAAAqAAAAMTYzLmNvbSFuZ3luLm9yZyExNDM2MDU0NDAw
ITE0MzYxNDA3OTkueG1sbVNbbsMgEPzvKXICg5M4USSEehOEzdpBsQEBbpXbF4eHadovzOzs7Owu
JiOA6PnwoB+HA7FgtPVsAc8F93zDAqrtxBRfgLaXUzPohaCCRAIsXM6U96uDz8KJYCQkXSkonybL
0lVNT9VsUkfcdviKO1aS94QoENwAs1xNqWSAepikou35dMHd+YwxQRHJcVDiFW3P+Hq7BT8qi6Hf
aqVa3TYxepbDk5m1n6W7QzGiQ1uKZutBKwIxysVDLtQRFD8S6Mz4wrYzQoYqrYAgk+4uAy4jZvC0
C4RwvCz+ZyeMddA2O7P6u/Tu9GoHYNLQtu2aIz42l3CcguAeydxBr8rTlqD4keFUEL74vIZxiRzY
ZiCd0U56qVWyXSMVb5vBGF5BIJRxpH7HFCgzqZp8qxn2k1sjUoDycpRgXUm7Axdg2Wj1Qtdm30yN
J6E/6YSv/h7eo1tnvytWpvaV19L10tMD3xTSNNKltLXvHb2X28hxhwSVP/EHUEsBAhQDFAAAAAgA
bGfmRkYQYsF0AQAAlAMAACoAAAAAAAAAAAAAAKSBAAAAADE2My5jb20hbmd5bi5vcmchMTQzNjA1
NDQwMCExNDM2MTQwNzk5LnhtbFBLBQYAAAAAAQABAFgAAAC8AQAAAAA=
--===============2544031943362770105==--
+47
View File
@@ -0,0 +1,47 @@
"""Test mixins."""
import io
import os
import sys
from django.core.management import call_command
class CallCommandMixin(object):
"""A mixin to provide command execution shortcuts."""
def setUp(self):
"""Replace stdin"""
super(CallCommandMixin, self).setUp()
self.stdin = sys.stdin
def tearDown(self):
sys.stdin = self.stdin
def import_report(self, path):
"""Import test report from file."""
with open(path) as fp:
buf = io.StringIO(fp.read())
sys.stdin = buf
out = io.StringIO()
call_command("import_aggregated_report", "--pipe", stdout=out)
return out.getvalue()
def import_reports(self, folder="reports"):
"""Import reports from folder."""
path = os.path.join(os.path.dirname(__file__), folder)
for f in os.listdir(path):
fpath = os.path.join(path, f)
if f.startswith(".") or not os.path.isfile(fpath):
continue
self.import_report(fpath)
def import_fail_reports(self, folder="fail-reports"):
"""Import failed reports from folder."""
path = os.path.join(os.path.dirname(__file__), folder)
for f in os.listdir(path):
fpath = os.path.join(path, f)
if f.startswith(".") or not os.path.isfile(fpath):
continue
with self.assertRaisesMessage(SystemExit, '65'):
self.import_report(fpath)
@@ -0,0 +1,67 @@
Return-Path: <abuse@163.com>
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id IKPdD1ULmlXgLQAABvoInA
for <tonio@ngyn.org>; Mon, 06 Jul 2015 07:00:05 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id 2645EE035B
for <postmaster@ngyn.org>; Mon, 6 Jul 2015 07:00:05 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <postmaster@ngyn.org>;
Mon, 6 Jul 2015 07:00:03 +0200 (CEST)
Received: from m12-181.163.com (m12-181.163.com [220.181.12.181])
by mail.koalabs.org (Postfix) with ESMTP
for <postmaster@ngyn.org>; Mon, 6 Jul 2015 06:59:54 +0200 (CEST)
Received: from 163.com (unknown [192.168.201.141])
by mfast1 (Coremail) with SMTP id tcCowEAJixEvC5pVHJvvLg--.53754S2;
Mon, 06 Jul 2015 12:59:27 +0800 (CST)
Content-Type: multipart/mixed; boundary="===============2544031943362770105=="
MIME-Version: 1.0
From: <abuse@163.com>
Date: Mon, 06 Jul 2015 12:59:25 +0800
Subject: Report Domain: ngyn.org Submitter: 163.com Report-ID:
aggr_report_ngyn.org_20150705_163.com
To: postmaster@ngyn.org
X-CM-TRANSID:tcCowEAJixEvC5pVHJvvLg--.53754S2
Message-Id:<559A0B30.EBEE1F.29746@m12-181.163.com>
X-Coremail-Antispam: 1UD129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73
VFW2AGmfu7bjvjm3AaLaJ3UjIYCTnIWjp_UUUnI7CY07I20VC2zVCF04k26cxKx2IYs7xG
6rWj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wAa7VASzI0EjI02j7AqF2
xKxVCjxxvEa2IrM2AIxVAIcxkEcVAq07x20xvEncxIr21le4C267I2x7xF54xIwI1l5I8C
rVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VWrMcvjeVCFs4IE7xkEbVWUJVW8Jw
ACjcxG0xvEwIxGrwAKzVAC0xCFj2AI6cx7M4kE6xkIj40Ew7xC0wCjxxvEa2IrMxkIecxE
wVCm-wCY0x0Ix7I2Y4AK64vIr41l42xK82IYc2Ij64vIr41l42xK82IY6x8ErcxFaVAv8V
WrMxCjnVAqn7xvrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18
MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jr0_JrylIxkGc2Ij64vIr4
1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjTRClkVDUUUU
X-Originating-IP: [192.168.201.141]
X-CM-SenderInfo: 5dex2vi6rwjhhfrp/
--===============2544031943362770105==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
This is a DMARC aggregate report for domain ngyn.org on 20150705. For more information please mail to abuse@163.com.
--===============2544031943362770105==
MIME-Version: 1.0
Content-Type: application/zip;
name="163.com!ngyn.org!1436054400!1436140799.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="163.com!ngyn.org!1436054400!1436140799.zip"
UEsDBBQAAAAIAGxn5kZGEGLBdAEAAJQDAAAqAAAAMTYzLmNvbSFuZ3luLm9yZyExNDM2MDU0NDAw
ITE0MzYxNDA3OTkueG1sbVNbbsMgEPzvKXICg5M4USSEehOEzdpBsQEBbpXbF4eHadovzOzs7Owu
JiOA6PnwoB+HA7FgtPVsAc8F93zDAqrtxBRfgLaXUzPohaCCRAIsXM6U96uDz8KJYCQkXSkonybL
0lVNT9VsUkfcdviKO1aS94QoENwAs1xNqWSAepikou35dMHd+YwxQRHJcVDiFW3P+Hq7BT8qi6Hf
aqVa3TYxepbDk5m1n6W7QzGiQ1uKZutBKwIxysVDLtQRFD8S6Mz4wrYzQoYqrYAgk+4uAy4jZvC0
C4RwvCz+ZyeMddA2O7P6u/Tu9GoHYNLQtu2aIz42l3CcguAeydxBr8rTlqD4keFUEL74vIZxiRzY
ZiCd0U56qVWyXSMVb5vBGF5BIJRxpH7HFCgzqZp8qxn2k1sjUoDycpRgXUm7Axdg2Wj1Qtdm30yN
J6E/6YSv/h7eo1tnvytWpvaV19L10tMD3xTSNNKltLXvHb2X28hxhwSVP/EHUEsBAhQDFAAAAAgA
bGfmRkYQYsF0AQAAlAMAACoAAAAAAAAAAAAAAKSBAAAAADE2My5jb20hbmd5bi5vcmchMTQzNjA1
NDQwMCExNDM2MTQwNzk5LnhtbFBLBQYAAAAAAQABAFgAAAC8AQAAAAA=
--===============2544031943362770105==--
@@ -0,0 +1,279 @@
Return-Path: postmaster@amazonses.com
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id dV+vEDEApVVCdQAABvoInA
for <tonio@ngyn.org>; Tue, 03 Jun 2021 14:27:34 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id C28EFE035E
for <dmarc-aggrep@ngyn.org>; Tue, 03 Jun 2021 14:27:34 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <dmarc-aggrep@ngyn.org>;
Tue, 03 Jun 2021 14:27:32 +0200 (CEST)
Received: from a7-16.smtp-out.eu-west-1.amazonses.com (a7-16.smtp-out.eu-west-1.amazonses.com [54.240.7.16])
by mail.koalabs.org (Postfix) with ESMTPS
for <dmarc-aggrep@ngyn.org>; Mon, 7 Jun 2021 12:28:31 +0200 (CEST)
(envelope-from 01020179e5ffe776-2049ffa3-f9ed-4b84-8bed-26aec834960c-000000@eu-west-1.amazonses.com)
Date: Mon, 7 Jun 2021 10:23:43 +0000
From: postmaster@amazonses.com
To: dmarc-aggrep@ngyn.org
Message-ID: <01020179e5ffe776-2049ffa3-f9ed-4b84-8bed-26aec834960c-000000@eu-west-1.amazonses.com>
Subject: Dmarc Aggregate Report Domain: {ngyn.org} Submitter: {Amazon
SES} Date: {2021-06-06} Report-ID: {12007123-9847-4f23-a7d7-c6837cce89de}
Content-Type: multipart/mixed;
boundary="----=_Part_8428_1073105148.1623061423987"
MIME-Version: 1.0
------=_Part_8428_1073105148.1623061423987
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
This MIME email was sent through Amazon SES.
------=_Part_8428_1073105148.1623061423987
Content-Type: application/octet-stream;
name=amazonses.com!ngyn.org!1622937600!1623024000.xml.gz
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="amazonses.com!ngyn.org!1622937600!1623024000.xml.gz"
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
yanL1kmbf/kfHM/x+WY1AAA=
------=_Part_8428_1073105148.1623061423987--
@@ -0,0 +1,50 @@
Return-Path: postmaster@amazonses.com
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id dV+vEDEApVVCdQAABvoInA
for <tonio@ngyn.org>; Tue, 03 Jun 2021 14:27:34 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id C28EFE035E
for <dmarc-aggrep@ngyn.org>; Tue, 03 Jun 2021 14:27:34 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <dmarc-aggrep@ngyn.org>;
Tue, 03 Jun 2021 14:27:32 +0200 (CEST)
Received: from a7-16.smtp-out.eu-west-1.amazonses.com (a7-16.smtp-out.eu-west-1.amazonses.com [54.240.7.16])
by mail.koalabs.org (Postfix) with ESMTPS
for <dmarc-aggrep@ngyn.org>; Mon, 7 Jun 2021 12:28:31 +0200 (CEST)
(envelope-from 01020179e5ffe776-2049ffa3-f9ed-4b84-8bed-26aec834960c-000000@eu-west-1.amazonses.com)
Date: Mon, 7 Jun 2021 10:23:43 +0000
From: postmaster@amazonses.com
To: dmarc-aggrep@ngyn.org
Message-ID: <01020179e5ffe776-2049ffa3-f9ed-4b84-8bed-26aec834960c-000000@eu-west-1.amazonses.com>
Subject: Dmarc Aggregate Report Domain: {ngyn.org} Submitter: {Amazon
SES} Date: {2021-06-06} Report-ID: {12007123-9847-4f23-a7d7-c6837cce89de}
Content-Type: multipart/mixed;
boundary="----=_Part_8428_1073105148.1623061423987"
MIME-Version: 1.0
------=_Part_8428_1073105148.1623061423987
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
This MIME email was sent through Amazon SES.
------=_Part_8428_1073105148.1623061423987
Content-Type: application/octet-stream;
name=amazonses.com!ngyn.org!1622937600!1623024000.xml.gz
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="amazonses.com!ngyn.org!1622937600!1623024000.xml.gz"
H4sICA343WAAA2FtYXpvbnNlcy5jb20hbmd5bi5vcmchMTYyNDIzMzYwMCExNjI0MzIwMDAwLnht
bAClU7ty2zAQrKWv4LgX3xalGQSOi5RJCndpOBBwlDAmAQ4AOnG+PgeCryhJlYp3u4e9WxxInn50
bfQGxkqtPjxkcfrwRPekARAXxl/pfkcmkqZxRpI5QdxAr42rO3BMMMcQ2hFtrrViHdDnz8/fvn45
vHx6IckC+gromGxpr63rmHVgPrKO/dTKgo257kgSeF856UtBszxNqywvDudTWR3KBiNWierAj6ei
4hxOZwEkWev9aRwJasPUdWy7Ixe4SkWzY17mRXFMU5IEZCRBiZEqsJGnfO5Fkt9Ulhar5SgivW4l
f6/74dJKewNBd4giLjQ6UVRd31WMN4BaAZhoJl5lRy1JQjCjtm9G0H8nrKdKK/TXLwB39BFz/HgE
o/sRPGqAazOGPtHfQ4Sx1YPhUMuenss4L+LyMc5OuNoVnyu5HpSjSIVghqd28MbaAe9HzIQ3LS2u
Vjr/RMLUW2RT5z33zKLVMVwZbzwQPppbJn/viRuZjREpQDnZSHygy7EbMAGmbozuNovYopPMH4cJ
G9ytNmCH1q16d7P+a8VrRRCYDE3J4mmrRjZu/195EcOXdOfDF48PI4r2JFn/819WLGN5CQQAAA==
------=_Part_8428_1073105148.1623061423987--
@@ -0,0 +1,90 @@
Return-Path: <dmarc@fastmail.com>
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id MN7aCZgMilV1TAAABvoInA
for <tonio@ngyn.org>; Wed, 24 Jun 2015 03:49:12 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id 0FF2EE035E
for <postmaster@ngyn.org>; Wed, 24 Jun 2015 03:49:12 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Authentication-Results: nelson.ngyn.org (amavisd-new);
dkim=pass (1024-bit key) header.d=fastmail.com header.b=0Nj5GpwR;
dkim=pass (1024-bit key) header.d=messagingengine.com
header.b=W7jB990M
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <postmaster@ngyn.org>;
Wed, 24 Jun 2015 03:49:11 +0200 (CEST)
Received: from bulk2-smtp.messagingengine.com (bulk2-smtp.messagingengine.com [66.111.4.225])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mail.koalabs.org (Postfix) with ESMTPS
for <postmaster@ngyn.org>; Wed, 24 Jun 2015 03:49:11 +0200 (CEST)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46])
by mailbulk.nyi.internal (Postfix) with ESMTP id D8DDDAFE;
Tue, 23 Jun 2015 21:49:03 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
by compute6.internal (MEProxy); Tue, 23 Jun 2015 21:49:03 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=fastmail.com; h=
content-type:date:from:message-id:mime-version:subject:to
:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=1t7zGOXcrQ9ovOrxVPikV8Cc8h4
=; b=0Nj5GpwRFukRLOhanfU0ZrV04k7RkzI1k4Ko8nC1WFOPbK43dzMSg6zZ1QM
+Hgb+WdYhPc1D1oInpbxoN5urVBNqOL43xyQY7Ul0fg+5kY8s8Pxndo2pFko2Sqf
YvTXeDN9IZJgxcT3Qy1/N38sE0q+Jt3uD+0gTJhJAOZqVlxY=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
messagingengine.com; h=content-type:date:from:message-id
:mime-version:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=1t
7zGOXcrQ9ovOrxVPikV8Cc8h4=; b=W7jB990M1394jwz9JB5XcuQlJ1qTn478nI
nG4+68z4YRi88Nl0Mwmq3LMkamLzim/HSrTSsN2dk2yWl+JxQZNis0Nh6nqq7f60
mkTmv74DLMnAKdqriTpkzN7PnzKTr/A4AumpPF0yFJ3DONjq1fqXFHOAx+T8xk7I
zf1/lQlPs=
X-Sasl-enc: pVVGFLeGBqO3p41F4hif6WoWvBVprb8iTS5Hykw0gj6x 1435110543
Received: from root1.messagingengine.com (unknown [66.111.4.4])
by mail.messagingengine.com (Postfix) with ESMTPA id A2C52C00288
for <postmaster@ngyn.org>; Tue, 23 Jun 2015 21:49:03 -0400 (EDT)
From: dmarc@fastmail.com
To: postmaster@ngyn.org
Date: Tue, 23 Jun 2015 21:49:03 -0400
Subject: Report Domain: ngyn.org Submitter: fastmail.com Report-ID:
2015.06.23.5672770
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="1435110543.af000f16737.3591227"; charset="us-ascii"
Message-Id: <20150624014903.A2C52C00288@frontend1.nyi.internal>
--1435110543.af000f16737.3591227
Date: Tue, 23 Jun 2015 21:49:03 -0400
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Disposition: inline
This is a DMARC aggregate report for ngyn.org
1 records.
0 passed.
1 failed.
Submitted by FastMail Pty Ltd
Generated with Mail::DMARC 1.20150611
--1435110543.af000f16737.3591227
Date: Tue, 23 Jun 2015 21:49:03 -0400
MIME-Version: 1.0
Content-Type: application/gzip; name="fastmail.com!ngyn.org!1435017600!1435103999!5672770.xml.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="fastmail.com!ngyn.org!1435017600!1435103999!5672770.xml.gz"
H4sIAI8MilUAA21TTXPbIBA9J7/Ck3uFlNTWuENJTjm1M/0HGgwrmYn4GEBu/O+7gCzZbk5i31t2
31tW9PVTj5sT+KCs+fnUVPXTK3ukPYA8cPHBHh+oB2d97DRELnnkCC2Ykmy7a5/btqZkhVKC9UNn
uAb2zkP8zdW4+RPPm19RUrJQKQ80ckxq7sVbj6kprITVlBQm53xGzzthTeQCG5jesmOMLvwg5PoK
wTv/Z6YCKBs6z82Qez7QAwzKsOb7y7Zu2l2N4guSSTAyU039st/vsaYpjshNlcXv1Vios6MS585N
h1GFI5R70qJAw8xwNhVaxzoFSByXH0qzQEk5ZCi4PiPpmwDHjDVAictRuIShxE5EtkUSP0nUFwrw
rYT1RYu3f4vJYCcvoFOOtU3V7Ktmu6uatsWyC5HzhJ1MZM+UlEPG5h5w4uOEI8mVk08VnA0q4h7N
Eq+ROSe57PG9kJwNZ0/9DM6eVyM3TXDmRT9VEkxUvcK1vTzaCUbroIuWwTdhRzucK8HT663EbWbv
rWajOnjAUcV5527InH8ELsEXYH3DazQru1NE+RSPnYcwjXGWePG2bMRd73UtUrJAFUyn+jiVHBSi
lGSOh5BWMAdlYpd9IXetU1pZAErW3/of7jTwqvgDAAA=
--1435110543.af000f16737.3591227--
@@ -0,0 +1,51 @@
Return-Path: <noreply-dmarc-support@google.com>
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id dV+vEDEApVVCdQAABvoInA
for <tonio@ngyn.org>; Tue, 03 Jun 2021 14:27:34 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id C28EFE035E
for <dmarc-aggrep@ngyn.org>; Tue, 03 Jun 2021 14:27:34 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <dmarc-aggrep@ngyn.org>;
Tue, 03 Jun 2021 14:27:32 +0200 (CEST)
Received: from mail-vn0-f74.google.com (mail-vn0-f74.google.com [209.85.216.74])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by mail.koalabs.org (Postfix) with ESMTPS
for <dmarc-aggrep@ngyn.org>; Tue, 03 Jun 2021 14:27:29 +0200 (CEST)
Received: by vnbf7 with SMTP id f7so392460vnb.1
for <dmarc-aggrep@ngyn.org>; Tue, 03 Jun 2021 05:27:28 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.52.251.34 with SMTP id zh2mr50557742vdc.8.1436869893195;
Tue, 03 Jun 2021 03:31:33 -0700 (PDT)
Message-ID: <14872432101891615947@google.com>
Date: Tue, 03 Jun 2021 10:31:33 +0000
Subject: Report domain: ngyn.org Submitter: google.com Report-ID: 1282989064754998675
From: noreply-dmarc-support@google.com
To: dmarc-aggrep@ngyn.org
Content-Type: application/zip;
name="google.com!ngyn.org!1622592000!1622678399.zip"
Content-Disposition: attachment;
filename="google.com!ngyn.org!1622592000!1622678399.zip"
Content-Transfer-Encoding: base64
UEsDBBQDAAAIAMhzw1IU0YnahAIAAAQMAAAtAAAAZ29vZ2xlLmNvbSFuZ3luLm9yZyExNjIyNTky
MDAwITE2MjI2NzgzOTkueG1s7ZbBctsgFEX3+QqP9wYJ24rUIaSrfkG71hDpWWYiAQM4if++WAJJ
ressmridTrOSuPCu3rs+w5jev3Tt4gmMFUreLVOULBcgK1UL2dwtv339ssqXi3t2Q3cA9QOvHtnN
YkENaGVc2YHjNXf8pHlVmaaUvAPWKNW0gCrVURzFcAY6LlomlXdoj6u646Za2YM+2X2el/XnYs2L
M7yslHS8cqWQO8X2zmn7CeNQiqZSzDGX9hkMJpss2+YJxef1wTiMIWqWkpwUeZFkm9vtpijy7HZL
8bgdjvtRoTRcNmEYLz1AIyRLM0K2BUkS/7FBifsg6343u83XRUExyGiGf3Sj+BeZUq1aUR1LfXho
hd3D2Ijy6Ugmm6NEPl+KByHs8vpRdMxS3L9E0epdr/lnkDSTSgLFOqxtFGxUdOWYz8E/hhbP2hlY
qJSJnRn1PM5u1cFUUArNSFKgfIsISVDmQ5g24tFKHaRjhOL+JcpxfHji7YG7OP4QgbBaWeE8taHr
uTKd6yPYeZYontII4+7CxhhJgILbYBEld9TAWlXxthxaoriX5mc8eh343j3Qd5pbH3VUJmscveP6
fMBBH2OkovYWYifA2LFsD7wGU+6M6mYMzNRoc1ZM+cHtSwP20LrJbwpmThe88E63sPJjIJKk2yQj
a9Rwra3tnEZejtzNagdrNgQQFrPIoYXKKcOiH8VRmjKJ3cQf6WJnr7YQoAiL0XyiH/8cBcU9yb8D
9Sa9DPXmWlD3Gb8K9b/BWXR+C00kTdbr9G00SXB/kaa0IChBBKXJKyit/zhLp40Pli6w9F7ff2eQ
crRNPUcJWl9GKb0WSafL5/+4lU4DXY+kcCtdDSaKpz/03wFQSwECPwMUAwAACADIc8NSFNGJ2oQC
AAAEDAAALQAkAAAAAAAAACCAtIEAAAAAZ29vZ2xlLmNvbSFuZ3luLm9yZyExNjIyNTkyMDAwITE2
MjI2NzgzOTkueG1sCgAgAAAAAAABABgAgCVxNHRY1wGAJXE0dFjXAQBf60Z0WNcBUEsFBgAAAAAB
AAEAfwAAAM8CAAAAAA==
@@ -0,0 +1,60 @@
Return-Path: <noreply-dmarc-support@google.com>
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id dV+vEDEApVVCdQAABvoInA
for <tonio@ngyn.org>; Tue, 14 Jul 2015 14:27:34 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id C28EFE035E
for <dmarc-aggrep@ngyn.org>; Tue, 14 Jul 2015 14:27:34 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Authentication-Results: nelson.ngyn.org (amavisd-new);
dkim=pass (2048-bit key) header.d=google.com
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <dmarc-aggrep@ngyn.org>;
Tue, 14 Jul 2015 14:27:32 +0200 (CEST)
Received: from mail-vn0-f74.google.com (mail-vn0-f74.google.com [209.85.216.74])
(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
(No client certificate requested)
by mail.koalabs.org (Postfix) with ESMTPS
for <dmarc-aggrep@ngyn.org>; Tue, 14 Jul 2015 14:27:29 +0200 (CEST)
Received: by vnbf7 with SMTP id f7so392460vnb.1
for <dmarc-aggrep@ngyn.org>; Tue, 14 Jul 2015 05:27:28 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=20120113;
h=mime-version:message-id:date:subject:from:to:content-type
:content-disposition:content-transfer-encoding;
bh=28gVVTJdqkSuhoNLWpBiJ0mYAF1CETmzecT8+PvUARY=;
b=jahe/NPogONhyXBkFG2iEkgVoYJmOoXuXCsfTUiY4WtDacSfBxs4pHCYd9kv1iu7Rm
8TUOyMG0ftm+Bu3Ldctb75lcrEb6yf/X/LIhXUyPlWSOwowqU429D8+89Lz2234K+5Ps
9u4E4vSI4HvVKjqxs/eIkSSpmqZDZydFtqOiKg3Nj4fr9v2FzEHuiwOvqO6dU8lct3zs
cc9/NNNp9q2z+nJ02hujEKDDrqEW+U3Xm8uk+YE4eUDvvqQQyC5SFTRWcGiQ1visZmfm
OlHmv25II7saHmZ4VrGXFUZHE+8d0lXN+QOndSZ6aorsarKzSRlXvD2ISxKKo3Qw8UqJ
CCnA==
MIME-Version: 1.0
X-Received: by 10.52.251.34 with SMTP id zh2mr50557742vdc.8.1436869893195;
Tue, 14 Jul 2015 03:31:33 -0700 (PDT)
Message-ID: <14872432101891615947@google.com>
Date: Tue, 14 Jul 2015 10:31:33 +0000
Subject: Report domain: ngyn.org Submitter: google.com Report-ID: 14872432101891615947
From: noreply-dmarc-support@google.com
To: dmarc-aggrep@ngyn.org
Content-Type: application/zip;
name="google.com!ngyn.org!1436745600!1436831999.zip"
Content-Disposition: attachment;
filename="google.com!ngyn.org!1436745600!1436831999.zip"
Content-Transfer-Encoding: base64
UEsDBAoAAAAIANhS7kbvUmeO+AEAANQEAAAtAAAAZ29vZ2xlLmNvbSFuZ3luLm9yZyExNDM2NzQ1
NjAwITE0MzY4MzE5OTkueG1spVTLcqMwELznK1y+Gxkb27ClKDnlC3bPlCwGrApIKkkk8d/vYImH
na1c9oTo6WlNN2PTl6+uXX2AdVKr53WabNcrUEJXUjXP6z+/3zb5evXCnmgNUJ25eGdPqxW1YLT1
ZQeeV9zzAUNU26ZUvAPWaN20kAjdUTKBgQMdly1TGhXa66bquBUb15tB7nXZFnix58tbXgqtPBe+
lKrW7OK9cb8Iia3J3Eo44cp9giW77Hg85FvU+t4fhKMNWbE0y0+7bL9Lt2lepMf0UGQnSuZ64KNX
KC1XTXSD0BkaqbB9fzxlh+MWbwvIWAdV3ar5Pi2KAmdRoxi5V5tuW4ZKjW6luJamP7fSXWAaRGM8
iqnmqhIMGLUCEKq8epcdc5SEQwSdqW/Y8AyQwe+ggBIT390IuBExwrMDEvBxG/Ff42CKQttxMqs/
J+9O91ZAKQ0rsmS3T7JDkuYpyk/4yBS6V55hKRxGOF4HH7ztMaxqLAwJSGe0kx63Ng69RBa8IQHD
HTqfw4hu61iYEolLwd1SAiF/NcAc70wLVal7T8kNWVJw8zrA0QcL4TQrknvJKcYHX8gbw6OyQglZ
S/xdTm0X4BXYsra6W3z5JRplvjVT3vtLacH1rZ/1HvL4cadiMoNADC2+TJ6WavQ+0f9UnheWPPoY
yGH5KJn/oP4CUEsBAgoACgAAAAgA2FLuRu9SZ474AQAA1AQAAC0AAAAAAAAAAAAAAAAAAAAAAGdv
b2dsZS5jb20hbmd5bi5vcmchMTQzNjc0NTYwMCExNDM2ODMxOTk5LnhtbFBLBQYAAAAAAQABAFsA
AABDAgAAAAA=
@@ -0,0 +1,59 @@
Return-Path: <dmarcrep@microsoft.com>
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id mL/aJNE4kFUCCAAABvoInA
for <tonio@ngyn.org>; Sun, 28 Jun 2015 20:11:29 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id 7F4A2E035D
for <postmaster@ngyn.org>; Sun, 28 Jun 2015 20:11:29 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <postmaster@ngyn.org>;
Sun, 28 Jun 2015 20:11:28 +0200 (CEST)
Received: from mail2.koalabs.org (alena.koalabs.org [66.175.223.133])
by mail.koalabs.org (Postfix) with ESMTP
for <postmaster@ngyn.org>; Sun, 28 Jun 2015 20:11:28 +0200 (CEST)
Received: from BAY004-OMC4S15.hotmail.com (bay004-omc4s15.hotmail.com [65.54.190.217])
by mail2.koalabs.org (Postfix) with ESMTP id 63F8D46F66
for <postmaster@ngyn.org>; Sun, 28 Jun 2015 14:11:26 -0400 (EDT)
Received: from BAY0-DTS-DRS01 ([65.54.190.200]) by BAY004-OMC4S15.hotmail.com with Microsoft SMTPSVC(7.5.7601.23008);
Sun, 28 Jun 2015 11:11:18 -0700
MIME-Version: 1.0
From: dmarcrep@microsoft.com
To: postmaster@ngyn.org
Date: 28 Jun 2015 11:11:18 -0700
Subject: =?utf-8?B?UmVwb3J0IERvbWFpbjogbmd5bi5vcmcgU3VibWl0dGVyOiBob3RtYWlsLmNvbSBSZXBvcnQtSUQ6IDw2NmYzMTdhMDIxZmY0Y2RhYmFkMmIzNTBkMzMwMzYxNUBob3RtYWlsLmNvbT4=?=
Content-Type: multipart/mixed;
boundary=--boundary_32281_b52cf564-2a50-4f96-aeb0-ef5f83b05463
Message-ID: <BAY004-OMC4S15A1cZU00000eb5@BAY004-OMC4S15.hotmail.com>
X-OriginalArrivalTime: 28 Jun 2015 18:11:18.0588 (UTC) FILETIME=[D4889FC0:01D0B1CD]
----boundary_32281_b52cf564-2a50-4f96-aeb0-ef5f83b05463
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
----boundary_32281_b52cf564-2a50-4f96-aeb0-ef5f83b05463
Content-Type: application/zip; name=hotmail.com!ngyn.org!1435428000!1435514400.zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=hotmail.com!ngyn.org!1435428000!1435514400.zip
UEsDBBQAAgAIAGlZ3EbQIUrLnQEAADsDAAAuAF0AaG90bWFpbC5jb20hbmd5bi5vcmchMTQz
NTQyODAwMCExNDM1NTE0NDAwLnhtbFNESACMAAAAAAgAiyIcyGNkYGkRYWBgUGCAAB0gZmQE
M1lF0NhMDAkMLCCegATDf0Z5BkYmiBxIryITdnEFsLgIRBxqlhADphjIfABVVA0AB8Y4kFXG
OJBVxjiQVYWT226cMBCGX2W198WwwHYrTZxIue4zIGOPWSv4INvk8Gy96CP1FWrjsCGKqt7g
8W/+mW/G8OfXb7h/1fPhGX1Q1twdm6o+HtBwK5SZ7o5LlN8ux3sKElGMjD9R8Oisj4PGyASL
jIL102CYRvpTcW+DlfHwaL2rgNxOADVTMxWaeZ78D3p7s+JWAymnW2Yl6Pks2+Y7q0+NlB0X
bGTiNLZ9Ldq2bs9N/3C1MXuK/cMHiQgHz8yUao44KUObru2706WuayBFATRilfum67Kc90D2
VvKlSWdnxd8Gt4yzClfMpWwiMNRMb6ZKjaYERQAmnpSmAUgJgAUn121ewVFjDQJxFMIWpwAc
j7RPclrS80s1j9z6vNqXZLSL5zgoR3901amtur5qLk3Kc9OB28VEmrQSbPz4zOYlNZr5VXA2
qJiu/R1jr8DK7lhI4KWNTC/TzDOu/GDcZSQrnBJoopIqfVEUrsgE+kF6q3eT2qtAPhnYEq+D
x7DMMZSa/x50eY1G1A69tz5f26q8Ixbu/9lLjzdnMZHPHGQbP7n9B38BUEsBAhcLFAACAAgA
aVncRtAhSsudAQAAOwMAAC4AEQAAAAAAAQAgALaBAAAAAGhvdG1haWwuY29tIW5neW4ub3Jn
ITE0MzU0MjgwMDAhMTQzNTUxNDQwMC54bWxTRAQAjAAAAFVUBQAHxjiQVVBLBQYAAAAAAQAB
AG0AAABGAgAAAAA=
----boundary_32281_b52cf564-2a50-4f96-aeb0-ef5f83b05463--
@@ -0,0 +1,67 @@
Return-Path: <noreply@dmarc.yahoo.com>
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id 53eANBaoilWVQwAABvoInA
for <tonio@ngyn.org>; Wed, 24 Jun 2015 14:52:38 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id BD629E0360
for <postmaster@ngyn.org>; Wed, 24 Jun 2015 14:52:38 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Authentication-Results: nelson.ngyn.org (amavisd-new);
dkim=pass (2048-bit key) header.d=yahoo.com
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <postmaster@ngyn.org>;
Wed, 24 Jun 2015 14:52:37 +0200 (CEST)
Received: from n1-vm5.bullet.mail.ne1.yahoo.com (n1-vm5.bullet.mail.ne1.yahoo.com [98.138.229.197])
(using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits))
(No client certificate requested)
by mail.koalabs.org (Postfix) with ESMTPS
for <postmaster@ngyn.org>; Wed, 24 Jun 2015 14:52:37 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1435150193; bh=s8fRltU+y/nfIjdSVEbtwFXKmxeW2BeOfADZ7qSc3i4=; h=Date:From:To:Subject:From:Subject; b=Masqn66+cIcv0cwUblZZjLPFOA+l0BfXvanLooG2xAWCwGItLHUToHXwfhsbw5QsyhpptvQSIFWFUBoZqS8T27ZcLVzkPRFl38h/Yo03pBDwL6njc1yQVN2RZxz3i7VO5MXEF2XFg9z2B19dfi+GRISCGLTPA0s+sAt32I+A8FZDSzqDxb3AKuU66QabM9BJiMn/XUGAr7At96sEFyWPDBWe2Q3+MzEN5pO54uWVhjd9qaIRB6Oc/FAFM+SFcVU9UrJFRN43rP/50xV70rrV00//lWrJH+4b3RdIHjy54Vy0qLwOJ8PRdKaDbJ/NJuxbKNiYJZvE+t+QvlEpbvd7/Q==
Received: from [98.138.226.173] by n1.bullet.mail.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000
Received: from [98.138.237.130] by t2.bullet.mail.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000
Received: from [127.0.0.1] by launcher100.asd.mail.corp.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000
X-Yahoo-Newman-Property: asdreport
X-Yahoo-Newman-Id: 1435111091.916236
MIME-Version: 1.0
Content-Transfer-Encoding: binary
Content-Type: multipart/mixed; boundary="_----------=_14351501937631101"
X-Mailer: MIME::Lite 3.027 (F2.73; A2.04; B3.13; Q3.13)
Date: Wed, 24 Jun 2015 05:49:53 -0700
From: noreply@dmarc.yahoo.com
To: postmaster@ngyn.org
Subject: Report Domain: ngyn.org Submitter: yahoo.com Report-ID: <1435111091.916236>
Message-Id: <1435150193.404586@dmarc.yahoo.com>
This is a multi-part message in MIME format.
--_----------=_14351501937631101
Content-Disposition: inline
Content-Length: 44
Content-Transfer-Encoding: binary
Content-Type: text/plain
This is an aggregate report from Yahoo! Inc.
--_----------=_14351501937631101
Content-Disposition: attachment; filename="yahoo.com!ngyn.org!1435017600!1435103999.zip"
Content-Transfer-Encoding: base64
Content-Type: application/x-zip-compressed; name="yahoo.com!ngyn.org!1435017600!1435103999.zip"
UEsDBBQAAAAIADsu2EY7OXCQrwEAACUEAAAsABwAeWFob28uY29tIW5neW4u
b3JnITE0MzUwMTc2MDAhMTQzNTEwMzk5OS54bWxVVAkAA3GnilVxp4pVdXgL
AAEEAAAAAAQAAAAAlVRBcuMgEDzvvkKbB4CIY7tURche84Q9qTAa2VQkoAAl
8e8zMhjJTi57EvQ0M90zU+Ivn+NQvYMP2prnB0bqhxfx6zfvAbqDVG94riru
wVkf2xGi7GSUFxBh64+tkSOIf/Jk7Z/q1SjCaUEzC0apB+FsiKMMEfzfbpRe
kfP8hig7cpoYmZ5r6U6wp82WMVY3jDRs97jZcboEMxvlQOulOV7LIXaAozaX
1zXb7+qa04QUApicvN40TVOhAFMS0ruMpeaNee7soNW5ddNh0OEEix6LXoww
x7Mh2AhMl4Aclt2bHkXgNB2uaHD9BZy/GXPCWAOcugKoKLZ4x0/S9aMEbJ+y
vsjx9mOxHezkFbTaiT0jrCFsuyNsv+d0CRSuspOJouE0HQqei8K7HCZsVFci
s3cdcMo64iZl8WtkTZy99zhzZCxtSBqxAymy9GJl9r4uTqc45LoDE3WvcZmX
lyeQHfi293ZcTWWNXjN9f87lFE+thzANcZXyXnMe8aAPHnAUMS31zeDzZs+J
hIEpejnMi3W5LyZvEvN1A/6/ipMh/FBitWH0m7uZn7eH09Uf4AtQSwECHgMU
AAAACAA7LthGOzlwkK8BAAAlBAAALAAYAAAAAAABAAAApIEAAAAAeWFob28u
Y29tIW5neW4ub3JnITE0MzUwMTc2MDAhMTQzNTEwMzk5OS54bWxVVAUAA3Gn
ilV1eAsAAQQAAAAABAAAAABQSwUGAAAAAAEAAQByAAAAFQIAAAAA
--_----------=_14351501937631101--
@@ -0,0 +1,64 @@
Return-Path: <noreply@dmarc.yahoo.com>
Delivered-To: <tonio@ngyn.org>
Received: from mail.koalabs.org
by nelson.ngyn.org (Dovecot) with LMTP id 53eANBaoilWVQwAABvoInA
for <tonio@ngyn.org>; Wed, 24 Jun 2015 14:52:38 +0200
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.koalabs.org (Postfix) with ESMTP id BD629E0360
for <postmaster@ngyn.org>; Wed, 24 Jun 2015 14:52:38 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at mail.koalabs.org
Authentication-Results: nelson.ngyn.org (amavisd-new);
dkim=pass (2048-bit key) header.d=yahoo.com
Received: from mail.koalabs.org ([127.0.0.1])
by localhost (nelson.ngyn.org [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP for <postmaster@ngyn.org>;
Wed, 24 Jun 2015 14:52:37 +0200 (CEST)
Received: from n1-vm5.bullet.mail.ne1.yahoo.com (n1-vm5.bullet.mail.ne1.yahoo.com [98.138.229.197])
(using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits))
(No client certificate requested)
by mail.koalabs.org (Postfix) with ESMTPS
for <postmaster@ngyn.org>; Wed, 24 Jun 2015 14:52:37 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1435150193; bh=s8fRltU+y/nfIjdSVEbtwFXKmxeW2BeOfADZ7qSc3i4=; h=Date:From:To:Subject:From:Subject; b=Masqn66+cIcv0cwUblZZjLPFOA+l0BfXvanLooG2xAWCwGItLHUToHXwfhsbw5QsyhpptvQSIFWFUBoZqS8T27ZcLVzkPRFl38h/Yo03pBDwL6njc1yQVN2RZxz3i7VO5MXEF2XFg9z2B19dfi+GRISCGLTPA0s+sAt32I+A8FZDSzqDxb3AKuU66QabM9BJiMn/XUGAr7At96sEFyWPDBWe2Q3+MzEN5pO54uWVhjd9qaIRB6Oc/FAFM+SFcVU9UrJFRN43rP/50xV70rrV00//lWrJH+4b3RdIHjy54Vy0qLwOJ8PRdKaDbJ/NJuxbKNiYJZvE+t+QvlEpbvd7/Q==
Received: from [98.138.226.173] by n1.bullet.mail.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000
Received: from [98.138.237.130] by t2.bullet.mail.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000
Received: from [127.0.0.1] by launcher100.asd.mail.corp.ne1.yahoo.com with NNFMP; 24 Jun 2015 12:49:53 -0000
X-Yahoo-Newman-Property: asdreport
X-Yahoo-Newman-Id: 1435111091.916236
MIME-Version: 1.0
Content-Transfer-Encoding: binary
Content-Type: multipart/mixed; boundary="_----------=_14351501937631101"
X-Mailer: MIME::Lite 3.027 (F2.73; A2.04; B3.13; Q3.13)
Date: Wed, 24 Jun 2015 05:49:53 -0700
From: noreply@dmarc.yahoo.com
To: postmaster@ngyn.org
Subject: Report Domain: ngyn.org Submitter: yahoo.com Report-ID: <1436111091.916236>
Message-Id: <1435150193.404586@dmarc.yahoo.com>
This is a multi-part message in MIME format.
--_----------=_14351501937631101
Content-Disposition: inline
Content-Length: 44
Content-Transfer-Encoding: binary
Content-Type: text/plain
This is an aggregate report from Yahoo! Inc.
--_----------=_14351501937631101
Content-Disposition: attachment; filename="yahoo.com!ngyn.org!1436017600!1436103999.zip"
Content-Transfer-Encoding: base64
Content-Type: application/x-zip-compressed; name="yahoo.com!ngyn.org!1436017600!1436103999.zip"
UEsDBBQDAAAIAHhdTFUTlAO/pwEAABkEAAAsAAAAeWFob28uY29tIW5neW4ub3JnITE0MzYwMTc2
MDAhMTQzNjEwMzk5OS54bWylU0uu2zAMXLenSN8BLKtpExhg9brtEboyFJt21Gd9QMmvze2rSIZk
pNl15fFwOEMSNrz+0cvhHckra7698KZ9eRUfPsKEOF7k8Bbx4QCEzlLoNQY5yiATGWlLc2+kRvFT
Xq39dPhhhgZYYTcVaqkW4awPWvqA9H3Ukobmdu9pBquBJUWS1yw1Cv7leOKctx1vOn76fDwBq8VN
HcfBnqSZc1ziLjgrk7pbfj61LbDEVAGazbw9dl0X803xYw+GwJ7tDs4uarj1br0syl+xtMvxTWnh
gWWwkd5NgoClZ6acIPyFQwDmNsZXKsJNNQTB7/PfQRrmaS4QDpbKDGR/11W9XWnAXjlx5g3vGv71
1PDzGVgpVO1gVxNEvEcCld9C8V0uqwxl2Xx/5Z31KihrhLEGge2YvTDdY5JqAZbgrhTPslUiqrHs
SW4u1A1BjWiCmhSSr51XlCNSP5HVwsw301iage3Y4vRvO8g1XHtCvy5hZ/k482i1VEYs6kK4KB/y
h5zZvS4bCYNrIBk3zO9FUY5RT/EfKU56/yQim2b8uF2kytcDbPfX/wVQSwECPwMUAwAACAB4XUxV
E5QDv6cBAAAZBAAALAAkAAAAAAAAACCApIEAAAAAeWFob28uY29tIW5neW4ub3JnITE0MzYwMTc2
MDAhMTQzNjEwMzk5OS54bWwKACAAAAAAAAEAGACASwUgH97YAYBLBSAf3tgBAFhOMR/e2AFQSwUG
AAAAAAEAAQB+AAAA8QEAAAAA
--_----------=_14351501937631101--
@@ -0,0 +1,33 @@
"""Management command tests."""
from modoboa.admin import factories as admin_factories
from modoboa.lib.tests import ModoTestCase
from . import mixins
from .. import models
class ManagementCommandTestCase(mixins.CallCommandMixin, ModoTestCase):
"""Test management command."""
@classmethod
def setUpTestData(cls):
super(ManagementCommandTestCase, cls).setUpTestData()
cls.domain = admin_factories.DomainFactory(name="ngyn.org")
def test_import_from_archive(self):
"""Import report from archive."""
self.import_reports()
self.import_fail_reports()
self.assertTrue(self.domain.record_set.exists())
self.assertTrue(
models.Reporter.objects.filter(
org_name="FastMail Pty Ltd").exists())
# Ensure that reports from Yahoo are processed successfully.
# These do not contain a sp attribute in policy_published
self.assertTrue(
models.Report.objects.filter(
report_id="1435111091.916236",
reporter=models.Reporter.objects.get(org_name="Yahoo! Inc."),
).exists()
)
+77
View File
@@ -0,0 +1,77 @@
"""Views tests."""
from django.urls import reverse
from modoboa.admin import factories as admin_factories
from modoboa.core import models as core_models
from modoboa.lib.tests import ModoTestCase
from . import mixins
class DMARCViewsTestCase(mixins.CallCommandMixin, ModoTestCase):
"""Views test cases."""
@classmethod
def setUpTestData(cls):
"""Create test data."""
super(DMARCViewsTestCase, cls).setUpTestData()
cls.domain = admin_factories.DomainFactory(name="ngyn.org")
def test_domainlist_view(self):
"""Test domain list view."""
self.import_reports()
user = core_models.User.objects.get(username="admin")
self.client.force_login(user)
url = reverse("admin:_domain_list")
response = self.ajax_get(url)
url = reverse("dmarc:domain_report", args=[self.domain.pk])
self.assertIn(url, response["rows"])
def test_domainreport_view(self):
"""Test domain report view."""
self.import_reports()
user = core_models.User.objects.get(username="admin")
self.client.force_login(user)
url = reverse("dmarc:domain_report", args=[self.domain.pk])
response = self.client.get("{}?period=2015-26".format(url))
self.assertContains(response, "'Failed', 100.0")
def test_domainreport_view_week0(self):
"""Test domain report view for week 0."""
self.import_reports()
user = core_models.User.objects.get(username="admin")
self.client.force_login(user)
url = reverse("dmarc:domain_report", args=[self.domain.pk])
response = self.client.get("{}?period=2019-0".format(url))
self.assertContains(response, "Dec. 31, 2018")
def test_domainreport_view_week1(self):
"""Test domain report view for week 1."""
self.import_reports()
user = core_models.User.objects.get(username="admin")
self.client.force_login(user)
url = reverse("dmarc:domain_report", args=[self.domain.pk])
response = self.client.get("{}?period=2019-1".format(url))
self.assertContains(response, "Jan. 7, 2019")
def test_domainreport_view_week52(self):
"""Test domain report view for week 52."""
self.import_reports()
user = core_models.User.objects.get(username="admin")
self.client.force_login(user)
url = reverse("dmarc:domain_report", args=[self.domain.pk])
response = self.client.get("{}?period=2018-52".format(url))
self.assertContains(response, "Dec. 30, 2018")
def test_domainreport_view_arc(self):
"""Test domain report view for displaying ARC results"""
self.import_reports()
user = core_models.User.objects.get(username="admin")
self.client.force_login(user)
url = reverse("dmarc:domain_report", args=[self.domain.pk])
response = self.client.get("{}?period=2021-22".format(url))
self.assertContains(response, "'Fully aligned', 86.0")
self.assertContains(response, "'Partially aligned', 8.0")
self.assertContains(response, "'Forwarded', 4.0")
self.assertContains(response, "'Failed', 2.0")
+12
View File
@@ -0,0 +1,12 @@
"""DMARC urls."""
from django.urls import path
from . import views
app_name = "dmarc"
urlpatterns = [
path("domains/<int:pk>/", views.DomainReportView.as_view(),
name="domain_report"),
]
+151
View File
@@ -0,0 +1,151 @@
"""DMARC views."""
import concurrent.futures
import datetime
import tldextract
from dns import resolver, reversename
from django.db.models import Q
from django.utils import timezone
from django.views import generic
from django.contrib.auth import mixins as auth_mixins
from django.utils.translation import ugettext_lazy as _
from modoboa.admin import models as admin_models
from modoboa.parameters import tools as param_tools
from . import models
def insert_record(target, record, name):
"""Add a record."""
if name not in target:
target[name] = {}
if record.source_ip not in target[name]:
target[name][record.source_ip] = {
"total": 0,
"spf": {"pass": 0, "fail": 0},
"dkim": {"pass": 0, "fail": 0}
}
target[name][record.source_ip]["total"] += record.count
for typ in ["spf", "dkim"]:
result = getattr(record, "{}_result".format(typ))
target[name][record.source_ip][typ][result] += record.count
def week_range(year, weeknumber):
"""Return start and end dates of a given week."""
tz = timezone.get_current_timezone()
fmt = "%Y-%W-%w"
start_week = datetime.datetime.strptime(
"{}-{}-{}".format(year, weeknumber, 1), fmt)
end_week = datetime.datetime.strptime(
"{}-{}-{}".format(year, weeknumber, 0), fmt)
return tz.localize(start_week), tz.localize(end_week)
class DomainReportView(
auth_mixins.PermissionRequiredMixin,
generic.TemplateView):
"""ListView for Report."""
permission_required = "dmarc.view_report"
template_name = "dmarc/domain_report.html"
def get_queryset(self):
"""Filter reports."""
self.period = self.request.GET.get("period", "")
if not self.period:
year, week, day = timezone.now().isocalendar()
week -= 1
self.period = "{}-{}".format(year, week)
else:
year, week = self.period.split("-")
self.daterange = week_range(year, week)
self.domain = admin_models.Domain.objects.get(pk=self.kwargs["pk"])
qargs = (
(Q(report__start_date__gte=self.daterange[0],
report__start_date__lte=self.daterange[1]) |
Q(report__end_date__gte=self.daterange[0],
report__end_date__lte=self.daterange[1])) &
Q(header_from=self.domain)
)
return models.Record.objects.select_related().filter(qargs)
def get_context_data(self, *args, **kwargs):
"""Extra context data."""
context = super(DomainReportView, self).get_context_data(
*args, **kwargs)
qset = self.get_queryset()
stats = {
"total": 0,
"aligned": 0,
"trusted": 0,
"forwarded": 0,
"failed": 0
}
aligned = {}
trusted = {}
forwarded = {}
threats = {}
all_records = qset.all()
dns_names = {}
if param_tools.get_global_parameter("enable_rlookups"):
dns_resolver = resolver.Resolver()
dns_resolver.timeout = 1.0
dns_resolver.lifetime = 1.0
def get_domain_name_from_ip(ip):
addr = reversename.from_address(ip)
try:
resp = dns_resolver.query(addr, "PTR")
ext = tldextract.extract(str(resp[0].target))
if not ext.suffix: # invalid PTR record
raise resolver.NXDOMAIN()
return (ip, '.'.join((ext.domain, ext.suffix)).lower())
except (resolver.NXDOMAIN, resolver.YXDOMAIN,
resolver.NoAnswer, resolver.NoNameservers,
resolver.Timeout):
return (None, None)
ips = (r.source_ip for r in all_records)
with concurrent.futures.ThreadPoolExecutor(max_workers=16) as pool:
dns_names = {i: n for (i, n) in
list(pool.map(get_domain_name_from_ip, ips))}
for record in all_records:
stats["total"] += record.count
name = dns_names.get(record.source_ip, _("Not resolved"))
if record.dkim_result == "pass" and record.spf_result == "pass":
stats["aligned"] += record.count
insert_record(aligned, record, name)
elif record.dkim_result == "pass" or record.spf_result == "pass":
stats["trusted"] += record.count
insert_record(trusted, record, name)
elif record.reason_type == "local_policy" and record.reason_comment.startswith("arc=pass"):
stats["forwarded"] += record.count
insert_record(forwarded, record, name)
else:
insert_record(threats, record, name)
stats["failed"] += record.count
pie_data = {}
if stats["total"]:
pie_data.update({
"faligned": stats["aligned"] / float(stats["total"]) * 100,
"paligned": stats["trusted"] / float(stats["total"]) * 100,
"forwarded": stats["forwarded"] / float(stats["total"]) * 100,
"failed": stats["failed"] / float(stats["total"]) * 100
})
context.update({
"stats": stats, "aligned": aligned, "trusted": trusted, "forwarded": forwarded, "threats": threats,
"period": self.period, "daterange": self.daterange,
"domain": self.domain, "pie_data": pie_data
})
return context
+1
View File
@@ -28,6 +28,7 @@ urlpatterns = [
path('admin/', include("modoboa.admin.urls")),
path('dnstools/', include("modoboa.dnstools.urls")),
path('stats/', include("modoboa.maillog.urls")),
path('dmarc/', include("modoboa.dmarc.urls")),
path('user/forward/', user_views.forward, name="user_forward"),
+1
View File
@@ -12,6 +12,7 @@ urlpatterns = [
path('', include("modoboa.parameters.api.v2.urls")),
path('', include("modoboa.limits.api.v1.urls")),
path('', include("modoboa.relaydomains.api.v1.urls")),
path('', include("modoboa.dmarc.api.v2.urls")),
path('', include("modoboa.dnstools.api.v2.urls")),
path('', include("modoboa.maillog.api.v2.urls")),
path('', include("modoboa.transport.api.v2.urls")),
+4
View File
@@ -37,3 +37,7 @@ qrcode
aiosmtplib
aioredis==2.0.1
tldextract>=2.0.2
defusedxml>=0.6.0
python-magic>=0.4.24
+1
View File
@@ -89,6 +89,7 @@ MODOBOA_APPS = (
'modoboa.dnstools',
'modoboa.policyd',
'modoboa.maillog',
'modoboa.dmarc',
# Modoboa extensions here.
)