mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Merge pull request #2911 from modoboa/imap-migration-to-v2
Import imap-migration
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
IMAP Migration for Modoboa
|
||||
===========================
|
||||
|
||||
.. _imap:
|
||||
|
||||
A simple `Modoboa <http://modoboa.org/>`_ extension which provides a
|
||||
way to transfer your account from another provider/server
|
||||
provided that you have IMAP access to it.
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
The plugin configuration is done from the admin panel (*Modoboa >
|
||||
Parameters > IMAP Migration*). And you have a specific tab to configure
|
||||
your migration that is visible for SuperAdmins.
|
||||
These settings are only available on the new admin interface.
|
||||
|
||||
.. warning::
|
||||
|
||||
You must have enabled "Auto create domain" in modoboa parameters for this extension to work.
|
||||
|
||||
This extension can create `OfflineIMAP <https://www.offlineimap.org/doc/installation.html>`_
|
||||
configuration file with the command:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
> python manage.py generate_offlineimap_config
|
||||
|
||||
You then need to setup `OfflineIMAP <https://www.offlineimap.org/doc/quick_start.html>`_.
|
||||
..
|
||||
This will sync back-and-forth user mailbox.
|
||||
|
||||
|
||||
Providers
|
||||
---------
|
||||
|
||||
Mail server can host multiple domains so the provider address
|
||||
may be different from the domain part of your email address.
|
||||
|
||||
Associated domain is the domain part of the email address.
|
||||
You can leave "Local Domain" blank if you keep the same domain.
|
||||
This domain will be auto-created if needed.
|
||||
you must create the domain beforhand if you want to migrate an account
|
||||
from `user@domain1.tld` to `user@domain2.tld`.
|
||||
|
||||
|
||||
Migrations
|
||||
----------
|
||||
|
||||
Migrations are automatically handled when providers have been configured.
|
||||
Users use their old credential to log and the account is automatically created.
|
||||
They shall use the new domain on next logins if a local domain was set in the provider configuration.
|
||||
If you have installed OfflineIMAP, you may delete the migration to stop mailbox sync.
|
||||
SuperAdmins may check migrations in the `IMAP Migration` tab.
|
||||
+4
-4
@@ -34,6 +34,10 @@ It provides built-in features by default :
|
||||
| |containing account | |
|
||||
| |credentials | |
|
||||
+---------------------------------------------------------+-------------------------+------------------------------------------------------+
|
||||
|modoboa-imap-migration |Transfer accounts from |:ref:`modoboa_imap-migration Documentation <imap>` |
|
||||
| |other mail server | |
|
||||
| |automatically | |
|
||||
+---------------------------------------------------------+-------------------------+------------------------------------------------------+
|
||||
|
||||
|
||||
And it is extensible by nature and comes with a lot of additional extensions:
|
||||
@@ -49,10 +53,6 @@ And it is extensible by nature and comes with a lot of additional extensions:
|
||||
| | | |
|
||||
| | | |
|
||||
+---------------------------------------------------------+-------------------------+------------------------------------------------------+
|
||||
|`modoboa-imap-migration |Migrate mailboxes from an|https://github.com/modoboa/modoboa-imap-migration |
|
||||
|<https://github.com/modoboa/modoboa-imap-migration>`_ |existing server using | |
|
||||
| |IMAP (and offlineimap) | |
|
||||
+---------------------------------------------------------+-------------------------+------------------------------------------------------+
|
||||
|`modoboa-pfxadmin-migrate |A tool to migrate from |https://github.com/modoboa/modoboa-pfxadmin-migrate |
|
||||
|<https://github.com/modoboa/modoboa-pfxadmin-migrate>`_ |Postfixadmin | |
|
||||
+---------------------------------------------------------+-------------------------+------------------------------------------------------+
|
||||
|
||||
+19
-5
@@ -111,9 +111,20 @@ Specific instructions
|
||||
2.1.0
|
||||
=====
|
||||
|
||||
The ``modoboa-dmarc`` and ``modoboa.pdfcredentials`` plugins have been merged into the core.
|
||||
The ``modoboa-dmarc``, ``modoboa-pdfcredentials`` and ``modoboa-imapmigration``
|
||||
plugins have been merged into the core.
|
||||
|
||||
Add ``'modoboa.dmarc'`` and ``'modoboa.pdfcredentials'`` to ``MODOBOA_APPS``:
|
||||
Add ``'django_rename_app,'`` To ``INSTALLED_APPS``:
|
||||
|
||||
.. sourcecode:: python
|
||||
|
||||
INSTALLED_APPS = (
|
||||
...,
|
||||
'django_rename_app',
|
||||
)
|
||||
|
||||
Add ``'modoboa.dmarc'``, ``'modoboa.pdfcredentials'`` and ``'modoboa.imap_migration'``
|
||||
to ``MODOBOA_APPS``:
|
||||
|
||||
.. sourcecode:: python
|
||||
|
||||
@@ -130,16 +141,19 @@ Add ``'modoboa.dmarc'`` and ``'modoboa.pdfcredentials'`` to ``MODOBOA_APPS``:
|
||||
'modoboa.policyd',
|
||||
'modoboa.maillog',
|
||||
'modoboa.dmarc',
|
||||
'modoboa.pdfcredentials'
|
||||
'modoboa.pdfcredentials',
|
||||
'modoboa.imap_migration',
|
||||
)
|
||||
|
||||
And remove any reference to ``'modoboa_dmarc'`` or ``'modoboa.pdfcredentials'`` in this same variable.
|
||||
And remove any reference to ``'modoboa_dmarc'``, ``'modoboa_pdfcredentials'`` or ``'modoboa_imap_migration'``
|
||||
in this same variable.
|
||||
|
||||
After upgrading modoboa, run the following commands from your virtual environment:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
python manage.py rename_app modoboa_dmarc dmarc
|
||||
> python manage.py rename_app modoboa_dmarc dmarc
|
||||
> python manage.py rename_app modoboa_imap_migration imap_migration
|
||||
|
||||
|
||||
2.0.4
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ version: '3'
|
||||
services:
|
||||
api:
|
||||
container_name: modoboa_api
|
||||
restart: always
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile.dev
|
||||
@@ -24,7 +24,7 @@ services:
|
||||
|
||||
front:
|
||||
container_name: modoboa_front
|
||||
restart: always
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile.front.dev
|
||||
|
||||
@@ -7,7 +7,7 @@ ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||
FROM base as build
|
||||
|
||||
RUN apk add --update openssl librrd python3-dev libffi-dev gcc g++ musl-dev libxml2-dev libxslt-dev \
|
||||
libressl-dev jpeg-dev rrdtool-dev file make gettext \
|
||||
libressl-dev jpeg-dev rrdtool-dev file make gettext freetype-dev \
|
||||
&& rm -rf /var/cache/apk/*
|
||||
RUN python3 -m venv $VIRTUAL_ENV
|
||||
WORKDIR /tmp
|
||||
@@ -18,7 +18,7 @@ RUN pip install -r requirements.txt -r test-requirements.txt
|
||||
|
||||
FROM base as run
|
||||
COPY --from=build $VIRTUAL_ENV $VIRTUAL_ENV
|
||||
RUN apk add --no-cache --update librrd libxslt libjpeg libressl git rrdtool \
|
||||
RUN apk add --no-cache --update librrd libxslt libjpeg libressl git rrdtool libmagic \
|
||||
&& rm -rf /var/cache/apk/*
|
||||
RUN mkdir /code
|
||||
WORKDIR /code
|
||||
|
||||
+2
-2
@@ -47,9 +47,9 @@ translations: ./$(INPUT_DIR)/translations.json
|
||||
# Generate .po files for each available language.
|
||||
@for lang in $(LOCALES); do \
|
||||
export PO_FILE=$(OUTPUT_DIR)/locale/$$lang/LC_MESSAGES/app.po; \
|
||||
echo "msgmerge --update $$PO_FILE $@"; \
|
||||
echo "msgmerge --backup=off --update $$PO_FILE $@"; \
|
||||
mkdir -p $$(dirname $$PO_FILE); \
|
||||
[ -f $$PO_FILE ] && msgmerge --lang=$$lang --update $$PO_FILE $@ || msginit --no-translator --locale=$$lang --input=$@ --output-file=$$PO_FILE; \
|
||||
[ -f $$PO_FILE ] && msgmerge --backup=off --lang=$$lang --update $$PO_FILE $@ || msginit --no-translator --locale=$$lang --input=$@ --output-file=$$PO_FILE; \
|
||||
msgattrib --no-wrap --no-obsolete -o $$PO_FILE $$PO_FILE; \
|
||||
done;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 9.9 KiB |
@@ -0,0 +1,15 @@
|
||||
import repository from '@/api/repository'
|
||||
|
||||
const resource = 'migrations'
|
||||
|
||||
export default {
|
||||
getMigrations (params) {
|
||||
return repository.get(`/${resource}/`, { params })
|
||||
},
|
||||
getMigration (slug, query) {
|
||||
return repository.get(`/${resource}/${slug}/`, query)
|
||||
},
|
||||
deleteMigration (slug) {
|
||||
return repository.delete(`/${resource}/${slug}/`)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
import repository from '@/api/repository'
|
||||
|
||||
const resource = 'email-providers'
|
||||
|
||||
export default {
|
||||
getProviders (params) {
|
||||
return repository.get(`/${resource}/`, { params })
|
||||
},
|
||||
getProvider (providerId) {
|
||||
return repository.get(`/${resource}/${providerId}/`)
|
||||
},
|
||||
createProvider (params) {
|
||||
return repository.post(`/${resource}/`, params)
|
||||
},
|
||||
updateProvider (slug, params) {
|
||||
return repository.put(`/${resource}/${slug}/`, params)
|
||||
},
|
||||
patchProvider (providerId, params) {
|
||||
return repository.patch(`/${resource}/${providerId}/`, params)
|
||||
},
|
||||
deleteProvider (slug) {
|
||||
return repository.delete(`/${resource}/${slug}/`)
|
||||
},
|
||||
checkProvider (params) {
|
||||
return repository.post(`/${resource}/check_connection/`, params)
|
||||
},
|
||||
checkAssociatedDomain (params) {
|
||||
return repository.post(`/${resource}/check_associated_domain/`, params)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
<template>
|
||||
<v-card class="mt-6">
|
||||
<v-toolbar flat>
|
||||
<v-menu offset-y>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn v-bind="attrs" v-on="on" small>
|
||||
Actions <v-icon right>mdi-chevron-down</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<v-list dense>
|
||||
</v-list>
|
||||
</v-menu>
|
||||
<v-spacer></v-spacer>
|
||||
<v-text-field
|
||||
v-model="search"
|
||||
prepend-inner-icon="mdi-magnify"
|
||||
placeholder="Search"
|
||||
filled
|
||||
outlined
|
||||
dense
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-toolbar>
|
||||
<v-data-table
|
||||
v-model="selected"
|
||||
:headers="headers"
|
||||
:items="migrations"
|
||||
:search="search"
|
||||
item-key="id"
|
||||
:options.sync="options"
|
||||
:server-items-length="totalMigrations"
|
||||
:loading="loading"
|
||||
class="elevation-1"
|
||||
show-select
|
||||
>
|
||||
<template v-slot:item.mailbox="{ item }">
|
||||
<router-link :to="{ name: 'AccountDetail', params: { id: item.mailbox.user } }">
|
||||
{{ item.mailbox.full_address }}
|
||||
</router-link>
|
||||
</template>
|
||||
<template v-slot:item.actions="{ item }">
|
||||
<v-menu offset-y>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn icon v-bind="attrs" v-on="on">
|
||||
<v-icon>mdi-dots-horizontal</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<menu-items :items="getMenuItems(item)" :object="item" />
|
||||
</v-menu>
|
||||
</template>
|
||||
</v-data-table>
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Migration from '@/api/imap_migration/migrations'
|
||||
import MenuItems from '@/components/tools/MenuItems'
|
||||
import { bus } from '@/main'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
MenuItems
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
migrations: [],
|
||||
headers: [
|
||||
{ text: this.$gettext('Provider'), value: 'provider.name' },
|
||||
{ text: this.$gettext('Old account'), value: 'username' },
|
||||
{ text: this.$gettext('New account'), value: 'mailbox' },
|
||||
{ text: this.$gettext('Actions'), value: 'actions', sortable: false, align: 'right' }
|
||||
|
||||
],
|
||||
selected: [],
|
||||
loading: true,
|
||||
search: '',
|
||||
options: {},
|
||||
totalMigrations: 0
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
deleteMigration (migration) {
|
||||
Migration.deleteMigration(migration.id).then(response => {
|
||||
bus.$emit('notification', { msg: this.$gettext('Migration deleted') })
|
||||
this.migrations = this.migrations.filter(item => {
|
||||
return item.id !== migration.id
|
||||
})
|
||||
})
|
||||
},
|
||||
getMigrations (filter) {
|
||||
this.loading = true
|
||||
let query = {}
|
||||
if (filter !== undefined) {
|
||||
query = { params: { search: filter } }
|
||||
}
|
||||
Migration.getMigrations(query).then(response => {
|
||||
this.migrations = response.data
|
||||
this.totalMigrations = this.migrations.length
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
getMenuItems (item) {
|
||||
const result = []
|
||||
result.push({
|
||||
label: this.$gettext('Delete'),
|
||||
icon: 'mdi-delete-outline',
|
||||
onClick: this.deleteMigration,
|
||||
color: 'red'
|
||||
})
|
||||
return result
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.getMigrations()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,143 @@
|
||||
<template>
|
||||
<validation-observer ref="observer">
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules=""
|
||||
vid="name"
|
||||
>
|
||||
<v-text-field
|
||||
ref="initialdomainField"
|
||||
v-model="domain.name"
|
||||
:error-messages="errors"
|
||||
:placeholder="'Name of the domain to migrate' | translate"
|
||||
outlined
|
||||
dense
|
||||
@input="update"
|
||||
@keydown="onKeyDown"
|
||||
/>
|
||||
</validation-provider>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules=""
|
||||
vid="new_domain"
|
||||
>
|
||||
<v-autocomplete
|
||||
v-model="domain.new_domain"
|
||||
:error-messages="errors"
|
||||
:label="'Local domain (optional)'|translate"
|
||||
:items="localDomains"
|
||||
item-text="name"
|
||||
return-object
|
||||
outlined
|
||||
dense
|
||||
@input="update"
|
||||
@keydown="onKeyDown"
|
||||
/>
|
||||
</validation-provider>
|
||||
<v-btn
|
||||
color="primary"
|
||||
@click="addDomain"
|
||||
>
|
||||
<v-icon>mdi-plus</v-icon>
|
||||
</v-btn>
|
||||
<v-spacer />
|
||||
<v-chip
|
||||
v-for="(domain, index) in domains"
|
||||
:key="index"
|
||||
class="mr-2 mt-2"
|
||||
close
|
||||
@click:close="removeDomain(index)"
|
||||
>
|
||||
<template v-if="domain.new_domain">
|
||||
{{domain.name}} --> {{domain.new_domain.name}}
|
||||
</template>
|
||||
<template v-else>
|
||||
{{domain.name}}
|
||||
</template>
|
||||
</v-chip>
|
||||
</validation-observer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import domainsApi from '@/api/domains'
|
||||
import providerApi from '@/api/imap_migration/providers'
|
||||
|
||||
export default {
|
||||
props: ['value'],
|
||||
data () {
|
||||
return {
|
||||
domains: [],
|
||||
domain: {
|
||||
name: '',
|
||||
new_domain: ''
|
||||
},
|
||||
localDomains: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
reset () {
|
||||
this.domains = []
|
||||
this.domain = {
|
||||
name: '',
|
||||
new_domain: ''
|
||||
}
|
||||
},
|
||||
async validateForm () {
|
||||
return await this.$refs.observer.validate()
|
||||
},
|
||||
update () {
|
||||
this.$emit('input', this.domains)
|
||||
},
|
||||
async addDomain () {
|
||||
if (await this.validateForm()) {
|
||||
providerApi.checkAssociatedDomain(this.domain).then(response => {
|
||||
if (response.status === 200) {
|
||||
this.domains.push({
|
||||
name: this.domain.name,
|
||||
new_domain: this.domain.new_domain
|
||||
})
|
||||
this.$refs.observer.reset()
|
||||
this.domain = {
|
||||
name: '',
|
||||
new_domain: ''
|
||||
}
|
||||
this.$emit('input', this.domains)
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$refs.observer.setErrors(error.response.data)
|
||||
})
|
||||
}
|
||||
},
|
||||
removeDomain (index) {
|
||||
this.domains.splice(index, 1)
|
||||
this.$emit('input', this.domains)
|
||||
},
|
||||
onKeyDown (e) {
|
||||
const keyCode = e.keyCode
|
||||
if (keyCode === 13 || keyCode === 9) {
|
||||
// on enter or tab
|
||||
this.addDomain()
|
||||
e.preventDefault()
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
domainsApi.getDomains().then(resp => {
|
||||
this.localDomains = resp.data
|
||||
})
|
||||
},
|
||||
watch: {
|
||||
value: {
|
||||
handler: function (newValue) {
|
||||
if (newValue) {
|
||||
this.domains = [...newValue]
|
||||
} else {
|
||||
this.domains = []
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,132 @@
|
||||
<template>
|
||||
<creation-form
|
||||
ref="form"
|
||||
:title="'New provider'|translate"
|
||||
:steps="steps"
|
||||
:form-observer-getter="getObserver"
|
||||
:form-getter="getForm"
|
||||
:validate-object="validateProvider"
|
||||
:summary-sections="summarySections"
|
||||
@close="close"
|
||||
@create="submit"
|
||||
>
|
||||
<template v-slot:form.general="{ step }">
|
||||
<provider-general-form :ref="`form_${step}`" v-model="provider" />
|
||||
</template>
|
||||
<template v-slot:form.associated="{ step }">
|
||||
<provider-associated-form :ref="`form_${step}`" v-model="provider.domains" />
|
||||
</template>
|
||||
</creation-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { bus } from '@/main'
|
||||
import CreationForm from '@/components/tools/CreationForm'
|
||||
import ProviderAssociatedForm from './ProviderAssociatedForm'
|
||||
import ProviderGeneralForm from './ProviderGeneralForm'
|
||||
|
||||
export default {
|
||||
props: ['value'],
|
||||
components: {
|
||||
CreationForm,
|
||||
'provider-associated-form': ProviderAssociatedForm,
|
||||
ProviderGeneralForm
|
||||
},
|
||||
computed: {
|
||||
associatedDomainsSummary () {
|
||||
const result = []
|
||||
for (const domain of this.provider.domains) {
|
||||
const value = domain.new_domain ? `${domain.name} => ${domain.new_domain.name}` : domain.name
|
||||
result.push(
|
||||
{ key: '', value }
|
||||
)
|
||||
}
|
||||
return result
|
||||
},
|
||||
summarySections () {
|
||||
const result = [
|
||||
{
|
||||
title: this.$gettext('General'),
|
||||
items: [
|
||||
{ key: this.$gettext('Name'), value: this.provider.name },
|
||||
{ key: this.$gettext('Address'), value: this.provider.address },
|
||||
{ key: this.$gettext('Port'), value: this.provider.port },
|
||||
{ key: this.$gettext('Secured'), value: this.provider.secured, type: 'yesno' }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: this.$gettext('Associated domains'),
|
||||
items: this.associatedDomainsSummary
|
||||
}
|
||||
]
|
||||
return result
|
||||
},
|
||||
steps () {
|
||||
return [
|
||||
{ name: 'general', title: this.$gettext('General') },
|
||||
{ name: 'associated', title: this.$gettext('Associated domains') }
|
||||
]
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
provider: {
|
||||
domains: []
|
||||
},
|
||||
formErrors: {}
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.initProvider()
|
||||
},
|
||||
methods: {
|
||||
initProvider () {
|
||||
this.provider = {
|
||||
name: '',
|
||||
address: '',
|
||||
port: 993,
|
||||
secured: true,
|
||||
domains: []
|
||||
}
|
||||
},
|
||||
close () {
|
||||
this.initProvider()
|
||||
this.$refs.form.resetForm()
|
||||
this.$emit('close')
|
||||
},
|
||||
getForm (step) {
|
||||
return this.$refs[`form_${step}`]
|
||||
},
|
||||
getObserver (step) {
|
||||
return this.$refs[`form_${step}`].$refs.observer
|
||||
},
|
||||
validateProvider () {
|
||||
|
||||
},
|
||||
submit () {
|
||||
const data = { ...this.provider }
|
||||
data.domains = []
|
||||
for (const domain of this.provider.domains) {
|
||||
if (domain.new_domain) {
|
||||
data.domains.push({
|
||||
name: domain.name,
|
||||
new_domain: domain.new_domain.pk
|
||||
})
|
||||
} else {
|
||||
data.domains.push(domain)
|
||||
}
|
||||
}
|
||||
this.$store.dispatch('providers/createProvider', data).then(() => {
|
||||
bus.$emit('notification', { msg: this.$gettext('Provider created') })
|
||||
this.close()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.highligth {
|
||||
background-color: #515D78;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,151 @@
|
||||
<template>
|
||||
<div>
|
||||
<v-expansion-panels v-model="panel">
|
||||
<v-expansion-panel>
|
||||
<v-expansion-panel-header v-slot="{ open }">
|
||||
<v-row no-gutters>
|
||||
<v-col cols="4">
|
||||
<translate>General</translate>
|
||||
</v-col>
|
||||
<v-col
|
||||
cols="8"
|
||||
class="text--secondary"
|
||||
>
|
||||
<v-fade-transition leave-absolute>
|
||||
<span v-if="open"></span>
|
||||
<v-row
|
||||
v-else
|
||||
no-gutters
|
||||
style="width: 100%"
|
||||
>
|
||||
<v-col cols="6">
|
||||
<translate>Name: </translate> {{ editedProvider.name }}
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-fade-transition>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-expansion-panel-header>
|
||||
<v-expansion-panel-content>
|
||||
<provider-general-form ref="generalForm" v-model="editedProvider" />
|
||||
</v-expansion-panel-content>
|
||||
</v-expansion-panel>
|
||||
<v-expansion-panel>
|
||||
<v-expansion-panel-header v-slot="{ open }">
|
||||
<v-row no-gutters>
|
||||
<v-col cols="4">
|
||||
<translate>Associated domains</translate>
|
||||
</v-col>
|
||||
<v-col
|
||||
cols="8"
|
||||
class="text--secondary"
|
||||
>
|
||||
<v-fade-transition leave-absolute>
|
||||
<span v-if="open"></span>
|
||||
<v-row
|
||||
v-else
|
||||
no-gutters
|
||||
style="width: 100%"
|
||||
>
|
||||
<v-col v-if="editedProvider.domains.length > 0" cols="6">
|
||||
<translate>Number of associated domains: </translate> {{ editedProvider.domains.length }}
|
||||
</v-col>
|
||||
<v-col v-else cols="6">
|
||||
<translate>No associated domains</translate>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-fade-transition>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-expansion-panel-header>
|
||||
<v-expansion-panel-content>
|
||||
<provider-associated-form ref="associatedForm" v-model="editedProvider.domains" />
|
||||
</v-expansion-panel-content>
|
||||
</v-expansion-panel>
|
||||
</v-expansion-panels>
|
||||
<div class="mt-4 d-flex justify-end">
|
||||
<v-btn @click="$router.go(-1)">
|
||||
<translate>Cancel</translate>
|
||||
</v-btn>
|
||||
<v-btn class="ml-4" color="primary darken-1" @click="save">
|
||||
<translate>Save</translate>
|
||||
</v-btn>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { bus } from '@/main'
|
||||
import providers from '@/api/imap_migration/providers'
|
||||
import ProviderGeneralForm from './ProviderGeneralForm'
|
||||
import ProviderAssociatedForm from './ProviderAssociatedForm'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
ProviderGeneralForm,
|
||||
ProviderAssociatedForm
|
||||
},
|
||||
props: ['provider'],
|
||||
data () {
|
||||
return {
|
||||
editedProvider: {},
|
||||
panel: 0
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async save () {
|
||||
if (this.$refs.generalForm !== undefined) {
|
||||
const valid = await this.$refs.generalForm.validateForm()
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
}
|
||||
if (this.$refs.associatedForm !== undefined) {
|
||||
const valid = await this.$refs.associatedForm.validateForm()
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
}
|
||||
try {
|
||||
const data = { ...this.editedProvider }
|
||||
data.domains = []
|
||||
for (const domain of this.editedProvider.domains) {
|
||||
if (domain.new_domain) {
|
||||
data.domains.push({
|
||||
name: domain.name,
|
||||
new_domain: domain.new_domain.pk || domain.new_domain.id
|
||||
})
|
||||
} else {
|
||||
data.domains.push(domain)
|
||||
}
|
||||
}
|
||||
await providers.patchProvider(this.editedProvider.id, data).then(() => {
|
||||
bus.$emit('notification', { msg: this.$gettext('Provider updated') })
|
||||
this.$store.dispatch('providers/getProviders')
|
||||
this.$router.push({ name: 'ProvidersList' })
|
||||
})
|
||||
} catch (error) {
|
||||
if (this.$refs.generalForm) {
|
||||
this.$refs.generalForm.$refs.observer.setErrors(error.response.data)
|
||||
}
|
||||
if (this.$refs.associatedForm) {
|
||||
this.$refs.associatedForm.$refs.observer.setErrors(error.response.data)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
provider: {
|
||||
handler: function (val) {
|
||||
if (val) {
|
||||
this.editedProvider = { ...val }
|
||||
if (!this.editedProvider.domains) {
|
||||
this.editedProvider.domains = []
|
||||
}
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,175 @@
|
||||
<template>
|
||||
<validation-observer ref="observer">
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required"
|
||||
>
|
||||
<v-text-field
|
||||
:label="'Provider name' | translate"
|
||||
v-model="form.name"
|
||||
:error-messages="errors"
|
||||
outlined
|
||||
@input="update"
|
||||
/>
|
||||
</validation-provider>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required"
|
||||
>
|
||||
<v-text-field
|
||||
:label="'Address (hostname or IP)' | translate"
|
||||
v-model="form.address"
|
||||
:error-messages="errors"
|
||||
outlined
|
||||
@input="update"
|
||||
/>
|
||||
</validation-provider>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required|portNumber"
|
||||
>
|
||||
<v-text-field
|
||||
:label="'IMAP Port' | translate"
|
||||
v-model="form.port"
|
||||
type="number"
|
||||
:error-messages="errors"
|
||||
outlined
|
||||
@input="update"
|
||||
/>
|
||||
</validation-provider>
|
||||
<v-switch
|
||||
:label="'Secured' | translate"
|
||||
v-model="form.secured"
|
||||
:hint="'Control if the IMAP is secured through SSL/TLS or Start SSL' | translate"
|
||||
persistent-hint
|
||||
@change="update"
|
||||
/>
|
||||
<div class="my-7">
|
||||
<v-btn
|
||||
:loading="loading"
|
||||
color="primary"
|
||||
@click="checkConnection"
|
||||
>
|
||||
<translate>Check connection: </translate>
|
||||
<v-icon
|
||||
v-if="connectionStatus === 0"
|
||||
color="blue-grey-darken-2"
|
||||
>
|
||||
mdi-help-circle-outline
|
||||
</v-icon>
|
||||
<v-icon
|
||||
v-else-if="connectionStatus === 1"
|
||||
color="success"
|
||||
>
|
||||
mdi-check-all
|
||||
</v-icon>
|
||||
<v-icon
|
||||
v-else
|
||||
color="warning"
|
||||
>
|
||||
mdi-alert-circle-outline
|
||||
</v-icon>
|
||||
<template v-slot:loader>
|
||||
<span class="custom-loader">
|
||||
<v-icon light>mdi-cached</v-icon>
|
||||
</span>
|
||||
</template>
|
||||
</v-btn>
|
||||
</div>
|
||||
</validation-observer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import Provider from '@/api/imap_migration/providers'
|
||||
|
||||
export default {
|
||||
props: ['value'],
|
||||
data () {
|
||||
return {
|
||||
form: {},
|
||||
connectionStatus: 0,
|
||||
loading: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
reset () {
|
||||
this.form = {}
|
||||
},
|
||||
async checkConnection () {
|
||||
if (await this.validateForm()) {
|
||||
this.loading = true
|
||||
const params = {
|
||||
address: this.form.address,
|
||||
port: this.form.port,
|
||||
secured: this.form.secured
|
||||
}
|
||||
console.error(params)
|
||||
Provider.checkProvider(params).then(response => {
|
||||
this.connectionStatus = 1
|
||||
this.loading = false
|
||||
}).catch(error => {
|
||||
console.log(error)
|
||||
this.loading = false
|
||||
this.connectionStatus = 2
|
||||
})
|
||||
}
|
||||
},
|
||||
async validateForm () {
|
||||
return await this.$refs.observer.validate()
|
||||
},
|
||||
update () {
|
||||
this.connectionStatus = 0
|
||||
console.log(this.form)
|
||||
this.$emit('input', this.form)
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
value: {
|
||||
handler (newValue) {
|
||||
this.form = { ...newValue }
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.custom-loader {
|
||||
animation: loader 1s infinite;
|
||||
display: flex;
|
||||
}
|
||||
@-moz-keyframes loader {
|
||||
from {
|
||||
transform: rotate(0);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes loader {
|
||||
from {
|
||||
transform: rotate(0);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@-o-keyframes loader {
|
||||
from {
|
||||
transform: rotate(0);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@keyframes loader {
|
||||
from {
|
||||
transform: rotate(0);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,154 @@
|
||||
<template>
|
||||
<v-card class="mt-6">
|
||||
<v-toolbar flat>
|
||||
<v-menu offset-y>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn v-bind="attrs" v-on="on" small>
|
||||
Actions <v-icon right>mdi-chevron-down</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<v-list dense>
|
||||
</v-list>
|
||||
</v-menu>
|
||||
<v-spacer></v-spacer>
|
||||
<v-text-field
|
||||
v-model="search"
|
||||
prepend-inner-icon="mdi-magnify"
|
||||
placeholder="Search"
|
||||
filled
|
||||
outlined
|
||||
dense
|
||||
hide-details
|
||||
></v-text-field>
|
||||
</v-toolbar>
|
||||
<v-data-table
|
||||
v-model="selected"
|
||||
:headers="headers"
|
||||
:items="providers"
|
||||
:search="search"
|
||||
item-key="name"
|
||||
single-expand
|
||||
:expanded.sync="expanded"
|
||||
class="elevation-1"
|
||||
show-select
|
||||
@click:row="(item, slot) => slot.expand(!slot.isExpanded)"
|
||||
>
|
||||
<template v-slot:item.secured="{ item }">
|
||||
<v-icon
|
||||
v-if="item.secured === true"
|
||||
color="green"
|
||||
>
|
||||
mdi-lock
|
||||
</v-icon>
|
||||
<v-icon
|
||||
color="red"
|
||||
v-else
|
||||
>
|
||||
mdi-lock-off
|
||||
</v-icon>
|
||||
</template>
|
||||
<template v-slot:item.domains="{ item }">
|
||||
<v-chip
|
||||
v-if="item.domains.length > 0"
|
||||
>
|
||||
{{item.domains.length}} associated domain(s)
|
||||
</v-chip>
|
||||
<v-chip
|
||||
v-else
|
||||
>
|
||||
No associated domain
|
||||
</v-chip>
|
||||
</template>
|
||||
<template v-slot:expanded-item="{ headers, item }">
|
||||
<td :colspan="headers.length">
|
||||
<v-chip
|
||||
v-for="(domain, index) in item.domains"
|
||||
:key="index"
|
||||
>
|
||||
<template v-if="domain.new_domain">
|
||||
{{domain.name}} --> {{domain.new_domain.name}}
|
||||
</template>
|
||||
<template v-else>
|
||||
{{domain.name}} --> {{domain.name}}
|
||||
</template>
|
||||
</v-chip>
|
||||
</td>
|
||||
</template>
|
||||
<template v-slot:item.actions="{ item }">
|
||||
<v-menu offset-y>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn icon v-bind="attrs" v-on="on">
|
||||
<v-icon>mdi-dots-horizontal</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<menu-items :items="getMenuItems(item)" :object="item" />
|
||||
</v-menu>
|
||||
</template>
|
||||
</v-data-table>
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import { mapGetters } from 'vuex'
|
||||
import { bus } from '@/main'
|
||||
import MenuItems from '@/components/tools/MenuItems'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
MenuItems
|
||||
},
|
||||
computed: mapGetters({
|
||||
providers: 'providers/providers'
|
||||
}),
|
||||
data () {
|
||||
return {
|
||||
headers: [
|
||||
{ text: this.$gettext('Name'), value: 'name' },
|
||||
{ text: this.$gettext('Address'), value: 'address' },
|
||||
{ text: this.$gettext('Port'), value: 'port' },
|
||||
{ text: this.$gettext('Secured'), value: 'secured' },
|
||||
{ text: this.$gettext('Associated domains'), value: 'domains' },
|
||||
{ text: this.$gettext('Actions'), value: 'actions', sortable: false, align: 'right' }
|
||||
],
|
||||
selected: [],
|
||||
search: '',
|
||||
expanded: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
deleteProvider (provider) {
|
||||
this.$store.dispatch('providers/deleteProvider', { id: provider.id }).then(resp => {
|
||||
bus.$emit('notification', { msg: this.$gettext('Provider deleted') })
|
||||
})
|
||||
},
|
||||
editProvider (provider) {
|
||||
this.$router.push({ name: 'ProviderEdit', params: { id: provider.id } })
|
||||
},
|
||||
loadAssociatedDomains ({ item, value }) {
|
||||
if (!value) {
|
||||
return
|
||||
}
|
||||
this.$set(this.item.domains)
|
||||
},
|
||||
getMenuItems (item) {
|
||||
const result = []
|
||||
result.push({
|
||||
label: this.$gettext('Delete'),
|
||||
icon: 'mdi-delete-outline',
|
||||
onClick: this.deleteProvider,
|
||||
color: 'red'
|
||||
})
|
||||
result.push({
|
||||
label: this.$gettext('Edit'),
|
||||
icon: 'mdi-circle-edit-outline',
|
||||
onClick: this.editProvider
|
||||
})
|
||||
return result
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.$store.dispatch('providers/getProviders')
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -114,6 +114,7 @@
|
||||
|
||||
<script>
|
||||
import parameters from '@/api/parameters'
|
||||
import { bus } from '@/main'
|
||||
import { mapGetters } from 'vuex'
|
||||
|
||||
export default {
|
||||
@@ -154,6 +155,7 @@ export default {
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
imapMigration: false,
|
||||
drawer: true,
|
||||
mainMenuItems: [
|
||||
{
|
||||
@@ -196,6 +198,23 @@ export default {
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
icon: 'mdi-email-sync-outline',
|
||||
text: this.$gettext('IMAP Migration'),
|
||||
roles: ['SuperAdmins', 'Resellers'],
|
||||
children: [
|
||||
{
|
||||
text: this.$gettext('Email providers'),
|
||||
to: { name: 'ProvidersList' },
|
||||
roles: ['SuperAdmins', 'Resellers']
|
||||
},
|
||||
{
|
||||
text: this.$gettext('Migrations'),
|
||||
to: { name: 'MigrationsList' },
|
||||
roles: ['Resellers', 'SuperAdmins']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
icon: 'mdi-cog',
|
||||
text: this.$gettext('Settings'),
|
||||
@@ -261,16 +280,25 @@ export default {
|
||||
created () {
|
||||
parameters.getApplications().then(response => {
|
||||
response.data.forEach(item => {
|
||||
this.mainMenuItems[5].children.push({
|
||||
this.mainMenuItems[6].children.push({
|
||||
text: item.label,
|
||||
to: { name: 'ParametersEdit', params: { app: item.name } }
|
||||
})
|
||||
})
|
||||
})
|
||||
parameters.getApplication('imap_migration').then(response => {
|
||||
this.imapMigration = response.data.params.enabled_imapmigration
|
||||
})
|
||||
bus.$on('imapSettingsChanged', (status) => { this.imapMigration = status })
|
||||
},
|
||||
methods: {
|
||||
displayMenuItem (item) {
|
||||
return (item.roles === undefined || item.roles.indexOf(this.authUser.role) !== -1) && (item.condition === undefined || item.condition())
|
||||
const condition = (item.roles === undefined || item.roles.indexOf(this.authUser.role) !== -1) && (item.condition === undefined || item.condition()) && (item.activated !== false)
|
||||
if (item.icon === 'mdi-email-sync-outline') {
|
||||
// For imapMigration
|
||||
return condition && this.imapMigration
|
||||
}
|
||||
return condition
|
||||
},
|
||||
logout () {
|
||||
this.$store.dispatch('auth/logout').then(() => {
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
v-model="parameters[param.name]"
|
||||
:label="param.label"
|
||||
:hint="param.help_text"
|
||||
:error="formErrors[param.name] !== undefined"
|
||||
:error-messages="formErrors[param.name]"
|
||||
persistent-hint
|
||||
v-if="param.widget === 'BooleanField'"
|
||||
/>
|
||||
@@ -136,6 +138,9 @@ export default {
|
||||
this.formErrors = {}
|
||||
parameters.saveApplication(this.$route.params.app, this.parameters).then(() => {
|
||||
bus.$emit('notification', { msg: this.$gettext('Parameters updated') })
|
||||
if (this.$route.params.app === 'imap_migration') {
|
||||
bus.$emit('imapSettingsChanged', this.parameters.enabled_imapmigration)
|
||||
}
|
||||
}).catch(error => {
|
||||
this.formErrors = error.response.data
|
||||
})
|
||||
|
||||
@@ -36,6 +36,15 @@ extend('validPassword', {
|
||||
},
|
||||
message: $gettext('Invalid password')
|
||||
})
|
||||
extend('portNumber', {
|
||||
validate: async (value) => {
|
||||
if (value < 0 || value > 65535) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
message: $gettext('Specify a valid port number')
|
||||
})
|
||||
|
||||
// Register components globally
|
||||
Vue.component('ValidationObserver', ValidationObserver)
|
||||
|
||||
@@ -56,6 +56,33 @@ const routes = [
|
||||
allowedRoles: ['DomainAdmins', 'Resellers', 'SuperAdmins']
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/imap_migration/migrations',
|
||||
name: 'MigrationsList',
|
||||
component: () => import('../components/imap_migration/MigrationsList.vue'),
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
allowedRoles: ['Resellers', 'SuperAdmins']
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/imap_migration/providers',
|
||||
name: 'ProvidersList',
|
||||
component: () => import('../views/imap_migration/Providers.vue'),
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
allowedRoles: ['Resellers', 'SuperAdmins']
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/imap_migration/providers/:id/edit',
|
||||
name: 'ProviderEdit',
|
||||
component: () => import('../views/imap_migration/ProviderEdit.vue'),
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
allowedRoles: ['Resellers', 'SuperAdmins']
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/identities',
|
||||
name: 'Identities',
|
||||
|
||||
@@ -4,6 +4,7 @@ import Vuex from 'vuex'
|
||||
import auth from '@/store/modules/auth'
|
||||
import domains from '@/store/modules/domains'
|
||||
import identities from '@/store/modules/identities'
|
||||
import providers from '@/store/modules/providers'
|
||||
|
||||
Vue.use(Vuex)
|
||||
|
||||
@@ -11,7 +12,8 @@ export default new Vuex.Store({
|
||||
modules: {
|
||||
auth,
|
||||
domains,
|
||||
identities
|
||||
identities,
|
||||
providers
|
||||
},
|
||||
strict: process.env.NODE_ENV !== 'production'
|
||||
})
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
import Vue from 'vue'
|
||||
import providerApi from '@/api/imap_migration/providers'
|
||||
|
||||
// mutation types
|
||||
export const ADD_PROVIDER = 'ADD_PROVIDER'
|
||||
export const UPDATE_PROVIDER = 'SET_PROVIDER'
|
||||
export const SET_PROVIDERS = 'SET_PROVIDERS'
|
||||
export const DELETE_PROVIDER = 'DELETE_PROVIDER'
|
||||
|
||||
const state = {
|
||||
providersLoaded: false,
|
||||
providers: []
|
||||
}
|
||||
|
||||
const getters = {
|
||||
providers: state => state.providers
|
||||
}
|
||||
|
||||
const actions = {
|
||||
getProviders ({ commit }, params) {
|
||||
return providerApi.getProviders(params).then(response => {
|
||||
commit(SET_PROVIDERS, { providers: response.data })
|
||||
})
|
||||
},
|
||||
createProvider ({ commit }, data) {
|
||||
return new Promise((resolve, reject) => {
|
||||
providerApi.createProvider(data).then(response => {
|
||||
commit(ADD_PROVIDER, { provider: response.data })
|
||||
resolve(response)
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
updateProvider ({ commit }, data) {
|
||||
return providerApi.updateProvider(data.id, data).then(response => {
|
||||
commit(UPDATE_PROVIDER, { provider: response.data })
|
||||
})
|
||||
},
|
||||
deleteProvider ({ commit }, data) {
|
||||
return providerApi.deleteProvider(data.id).then(response => {
|
||||
commit(DELETE_PROVIDER, data)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const mutations = {
|
||||
[SET_PROVIDERS] (state, { providers }) {
|
||||
state.providersLoaded = true
|
||||
state.providers = providers
|
||||
},
|
||||
[ADD_PROVIDER] (state, { provider }) {
|
||||
state.providers.push(provider)
|
||||
},
|
||||
[UPDATE_PROVIDER] (state, { provider }) {
|
||||
state.providers.forEach(function (item, pos) {
|
||||
if (item.pk === provider.pk) {
|
||||
Vue.set(state.providers, pos, provider)
|
||||
}
|
||||
})
|
||||
},
|
||||
[DELETE_PROVIDER] (state, data) {
|
||||
state.providers = state.providers.filter(item => item.id !== data.id)
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state,
|
||||
getters,
|
||||
actions,
|
||||
mutations
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -33,6 +33,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { bus } from '@/main'
|
||||
import accounts from '@/api/accounts'
|
||||
import AccountAliases from '@/components/identities/AccountAliases'
|
||||
import AccountSenderAddresses from '@/components/identities/AccountSenderAddresses'
|
||||
@@ -58,6 +59,11 @@ export default {
|
||||
mounted () {
|
||||
accounts.get(this.$route.params.id).then(resp => {
|
||||
this.account = resp.data
|
||||
}).catch(error => {
|
||||
if (error.response.status === 404) {
|
||||
bus.$emit('notification', { msg: this.$gettext('Account not found!'), type: 'error' })
|
||||
this.$router.push({ name: 'Identities' })
|
||||
}
|
||||
})
|
||||
parameters.getApplication('limits').then(resp => {
|
||||
this.limitsConfig = resp.data
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<div>
|
||||
<span class="text-h4"><translate>Edit provider</translate></span>
|
||||
<div class="mt-4" />
|
||||
<provider-form :provider="provider" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import providers from '@/api/imap_migration/providers'
|
||||
import ProviderForm from '@/components/imap_migration/ProviderForm'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
ProviderForm
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
provider: {}
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
providers.getProvider(this.$route.params.id).then(resp => {
|
||||
this.provider = resp.data
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,56 @@
|
||||
<template>
|
||||
<div>
|
||||
<v-toolbar flat>
|
||||
<v-toolbar-title><translate>Providers</translate></v-toolbar-title>
|
||||
<v-spacer />
|
||||
<v-btn
|
||||
offset-y
|
||||
color="primary"
|
||||
@click="showProviderWizard = true"
|
||||
>
|
||||
<v-icon left>mdi-plus</v-icon>
|
||||
<translate>New</translate>
|
||||
</v-btn>
|
||||
</v-toolbar>
|
||||
<providers-list />
|
||||
|
||||
<v-dialog
|
||||
v-model="showProviderWizard"
|
||||
fullscreen
|
||||
scrollable
|
||||
transition="dialog-bottom-transition"
|
||||
>
|
||||
<provider-creation-form @close="showProviderWizard = false" />
|
||||
<template v-slot:help>
|
||||
<ul>
|
||||
<li><em>domain; name; quota; default mailbox quota; enabled</em></li>
|
||||
<li><em>domainalias; name; targeted domain; enabled</em></li>
|
||||
</ul>
|
||||
</template>
|
||||
</v-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ProviderCreationForm from '@/components/imap_migration/ProviderCreationForm'
|
||||
import ProvidersList from '@/components/imap_migration/ProvidersList'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
ProviderCreationForm,
|
||||
ProvidersList
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
showProviderWizard: false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.v-toolbar {
|
||||
background-color: #f7f8fa !important;
|
||||
}
|
||||
</style>
|
||||
@@ -116,9 +116,6 @@ class DomainAliasSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = admin_models.DomainAlias
|
||||
fields = ("pk", "name", "target", "enabled", )
|
||||
expandable_fields = {
|
||||
"target": DomainSerializer
|
||||
}
|
||||
|
||||
def validate_target(self, value):
|
||||
"""Check target domain."""
|
||||
|
||||
@@ -252,6 +252,18 @@ class AdminGlobalParametersSerializer(serializers.Serializer):
|
||||
)
|
||||
return value
|
||||
|
||||
def validate_auto_create_domain_and_mailbox(self, value):
|
||||
"""
|
||||
Make sure the option does not get deactivated
|
||||
while imap migration is enabled.
|
||||
"""
|
||||
if not value and param_tools.get_global_parameter("enabled_imapmigration",
|
||||
"imap_migration"):
|
||||
raise serializers.ValidationError(
|
||||
_("Please disable imap migration before disabling this option.")
|
||||
)
|
||||
return value
|
||||
|
||||
def validate(self, data):
|
||||
"""Check MX options."""
|
||||
condition = (
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,68 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Breton (https://www.transifex.com/tonio/teams/13749/br/)\n"
|
||||
"Language: br\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\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"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Domani ebet ken da ziskouez"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Na zilamit ket ar c'havlec'h domanioù"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "An oberiadenn-mañ a zilamo an HOLL roadennoù stag ouzh an domani-mañ."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"An oberiadenn-mañ a zilamo an HOLL roadennoù stag ouzh an domani-mañ, paneve "
|
||||
"ar c'hontoù."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Kota ebet ken da ziskouez"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Kota ebet ken da ziskouez"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Merour domani ebet termenet"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Identelezh ebet ken da ziskouez"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Na zilamit ket kavlec'h ar voest-posteloù"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,65 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Czech (Czech Republic) (https://www.transifex.com/tonio/"
|
||||
"teams/13749/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=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
|
||||
"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Žádná další doména k zobrazení"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Nemazat adresář domény"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Tento krok odstraní VŠECHNA data související s touto doménou."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Tento krok odstraní VŠECHNA data související s touto doménou, vyjma účtů."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Žádná další kvóta k zobrazení"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Žádná další kvóta k zobrazení"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Není určen správce domény"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Žádná další identita k zobrazení"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Nemazat adresář schránky"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,64 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: German (https://www.transifex.com/tonio/teams/13749/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"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Keine weiteren Domains"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Verzeichnis der Domain nicht löschen"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Diese Aktion wird ALLE mit der Domain verbundenen Daten löschen."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Diese Aktion wird ALLE mit der Domain verbundenen Daten, außer Mailkonten, "
|
||||
"löschen."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Keine weiteren Quotas"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Keine weiteren Quotas"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Domain-Administrator fehlt"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Keine weiteren Identitäten"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Verzeichnis der Mailbox nicht löschen"
|
||||
@@ -1,59 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Translators:
|
||||
# bdaniel93, 2023
|
||||
# Boris Andratzek <BAndratzek@LBV-net.de>, 2018
|
||||
# Patrice K <patricekopp2@web.de>, 2019
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Modoboa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2015-06-03 15:50+0000\n"
|
||||
"Last-Translator: bdaniel93, 2023\n"
|
||||
"Language-Team: German (Germany) (http://www.transifex.com/tonio/modoboa/language/de_DE/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de_DE\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Keine weitere Domäne anzuzeigen"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Domänenverzeichnis nicht löschen"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Dieser Vorgang wird ALLE Daten löschen, die mit dieser Domäne verknüpft sind."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr "Dieser Vorgang wird alle Daten löschen, die mit dieser Domäne verknüpft sind, bis auf Konten"
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Kein Kontingent zum anzeigen"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
msgid "No more log to show"
|
||||
msgstr "Kein Protokoll mehr zum Anzeigen"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Kein Domänenadministrator definiert"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Keine weitere Identität anzuzeigen"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Postfachverzeichnis nicht löschen"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,67 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Greek (Greece) (https://www.transifex.com/tonio/teams/13749/"
|
||||
"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"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Δεν υπάρχουν άλλα domains για εμφάνιση"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Να μην διαγραφεί ο κατάλογος αρχείων του domain "
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr ""
|
||||
"Αυτή η λειτουργία θα καταργήσει ΟΛΑ τα δεδομένα που σχετίζονται με αυτό το "
|
||||
"domain."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Αυτή η λειτουργία θα καταργήσει όλα τα δεδομένα που σχετίζονται με αυτό το "
|
||||
"domain, εκτός από τους λογαριασμούς χρηστών."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Δεν υπάρχει κανένα quota"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Δεν υπάρχει κανένα quota"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Δεν έχει οριστεί διαχειριστής domain"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Δεν υπάρχουν άλλες ταυτότητες για εμφάνιση"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Να μην διαγραφεί ο κατάλογος αρχείων του γραμματοκιβωτίου "
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,56 +0,0 @@
|
||||
# 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: 2023-02-22 18:52+0100\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"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr ""
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr ""
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr ""
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr ""
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
msgid "No more log to show"
|
||||
msgstr ""
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr ""
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr ""
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr ""
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,65 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/tonio/teams/13749/es/)\n"
|
||||
"Language: es\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 != 0 && n % 1000000 == 0 ? "
|
||||
"1 : 2;\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Sin dominios que mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "No eleminar el directorio del dominio"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Esta operación eliminará TODOS los datos asociados a este dominio."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Esta operación eliminará todos los datos asociados a este dominio, excepto "
|
||||
"las cuentas."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Sin cuota para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Sin cuota para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "No hay un administrador de dominio definido"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Sin identidades que mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "No eliminar el directorio del mailbox"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,55 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-17 16:48+0100\n"
|
||||
"PO-Revision-Date: 2023-02-17 20:10+0200\n"
|
||||
"Last-Translator: Ossi Mantylahti <ossiman@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: fi\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
|
||||
#: admin/static/admin/js/admin.js:129 admin/static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Ei enää verkkotunnusta näytettäväksi"
|
||||
|
||||
#: admin/static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Älä poista verkkotunnuksen hakemistoa"
|
||||
|
||||
#: admin/static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr ""
|
||||
"Tämä toiminto poistaa KAIKKI tähän verkkotunnukseen liittyvät tiedot."
|
||||
|
||||
#: admin/static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Tämä toiminto poistaa kaikki tähän verkkotunnukseen liittyvät tiedot "
|
||||
"lukuun ottamatta tilejä."
|
||||
|
||||
#: admin/static/admin/js/admin.js:177 admin/static/admin/js/admin.js:433
|
||||
msgid "No more quota to show"
|
||||
msgstr "Ei enää kiintiöitä näytettäväksi"
|
||||
|
||||
#: admin/static/admin/js/admin.js:306
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Verkkotunnuksen ylläpitäjää ei ole määritetty"
|
||||
|
||||
#: admin/static/admin/js/admin.js:362 admin/static/admin/js/admin.js:430
|
||||
msgid "No more identity to show"
|
||||
msgstr "Ei enää identiteettiä näytettäväksi"
|
||||
|
||||
#: admin/static/admin/js/admin.js:404
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Älä poista postilaatikkohakemistoa"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,58 +0,0 @@
|
||||
# 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>, 2023
|
||||
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Modoboa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2015-06-03 15:50+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\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=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Plus de domaine à afficher"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Ne pas supprimer le répertoire du domaine"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Cette opération supprimera TOUTES les données associées à ce domaine."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr "Cette opération supprimera toutes les données associées à ce domaine à l'exception des comptes."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Plus de quota à afficher"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
msgid "No more log to show"
|
||||
msgstr "Plus aucun journal à afficher"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Aucun administrateur de domaine défini"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Plus d'identité à afficher"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Ne pas supprimer le répertoire de la boite aux lettres"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,65 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Italian (https://www.transifex.com/tonio/teams/13749/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=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
|
||||
"1 : 2;\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Non ci sono altri domini da mostrare"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Non eliminare la cartella dei domini"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Questa operazione eliminerà TUTTI i dati associati a questo dominio."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Questa operazione eliminerà tutti i dati associati a questo dominio tranne "
|
||||
"gli account"
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Non ci sono altre quote da mostrare"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Non ci sono altre quote da mostrare"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Non è stato definito un amministratore di dominio"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Non ci sono altre identità da mostrare"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Non eliminare la cartella della casella posta"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,65 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Japanese (Japan) (https://www.transifex.com/tonio/teams/13749/"
|
||||
"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"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "表示するドメインはありません。"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "ドメインディレクトリを削除しないでください"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "この操作は、このドメインに関連するすべてのデータを削除します。"
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"この操作は、アカウントを除いたこのドメインに関連するすべてのデータを削除しま"
|
||||
"す。"
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "表示するクォータはありません"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "表示するクォータはありません"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "ドメイン管理者が指定されていません"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "表示する ID はありません"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "メールボックスディレクトリを削除しないでください"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,60 +0,0 @@
|
||||
# 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
|
||||
# J Rosier <vertalen@tagora.nl>, 2023
|
||||
# TuxBrother <vrijwilligerswerk@wij.rs>, 2014
|
||||
# Tuxis Internet Engineering V.O.F. <info@tuxis.nl>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Modoboa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2015-06-03 15:50+0000\n"
|
||||
"Last-Translator: J Rosier <vertalen@tagora.nl>, 2023\n"
|
||||
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/tonio/modoboa/language/nl_NL/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: nl_NL\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Geen domeinen meer om weer te geven"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "De map van dit domein niet verwijderen"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Deze actie zal ALLE data verwijderen die bij dit domein hoort."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr "Deze actie zal alle data die bij dit domein hoort verwijderen, behalve de accounts."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Geen quotum meer om weer te geven"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
msgid "No more log to show"
|
||||
msgstr "Geen logbestand meer om weer te geven"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Geen domeinbeheerder toegewezen"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Geen identiteiten meer om weer te geven"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Verwijder de map van deze mailbox niet"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,66 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Polish (Poland) (https://www.transifex.com/tonio/teams/13749/"
|
||||
"pl_PL/)\n"
|
||||
"Language: pl_PL\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
|
||||
"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
|
||||
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Brak domen do pokazania"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Nie usuwaj katalogu domeny"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Ta operacja usunie WSZYSTKIE dane powiązane z tą domeną."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Ta operacja usunie wszystkie dane powiązana z tą domeną za wyjątkiem kont."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Brak limitów do wyświetlenia"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Brak limitów do wyświetlenia"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Nie zdefiniowano administratora domeny"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Brak tożsamości do wyświetlenia"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Nie usuwaj katalogu skrzynki pocztowej"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,66 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/tonio/"
|
||||
"teams/13749/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=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
|
||||
"1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Nenhum domínio a mais para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Não remova o diretório de domínio"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Esta operação removerá TODOS os dados associados com este domínio."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Esta operação removerá todos os dados associados com este domínio, exceto "
|
||||
"contas."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Nenhuma quota a mais para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Nenhuma quota a mais para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Nenhum administrador de domínio definido"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Nenhuma identidade a mais para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Não remova o diretório de caixas de mensagens"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,66 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Portuguese (Portugal) (https://www.transifex.com/tonio/"
|
||||
"teams/13749/pt_PT/)\n"
|
||||
"Language: pt_PT\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 == 0 || n == 1) ? 0 : n != 0 && n % "
|
||||
"1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Não existem mais dominios para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Não excluir o diretório do domínio"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Esta operação irá remover TODOS os dados associados a este domínio."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Esta operação irá remover TODOS os dados associados a este domínio, excepto "
|
||||
"as contas."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Não existem mais quotas para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Não existem mais quotas para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Não está definido nenhum administrador para o domínio"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Não existem mais identidades para mostrar"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Não excluir o diretório da caixa de correio"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,67 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Romanian (Romania) (https://www.transifex.com/tonio/"
|
||||
"teams/13749/ro_RO/)\n"
|
||||
"Language: ro_RO\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%100>19)||((n%100==0)&&(n!=0)))?"
|
||||
"2:1));\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Nu mai sunt domenii de afișat"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Nu sterge directorul pentru domeniu"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr ""
|
||||
"Această operațiune va șterge toată informația asociată cu acest domeniu."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Această operațiune va șterge toată informația asociată cu acest domeniu, cu "
|
||||
"excepția conturilor."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Nu mai există cote de afișat"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Nu mai există cote de afișat"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Nu există configurat un administartor de domeniu"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Nu mai sunt identități de afișat"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Nu sterge directorul mailbox"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,59 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Translators:
|
||||
# guard43ru <guard43ru@gmail.com>, 2023
|
||||
# Ravil Kadyrbayev, 2015
|
||||
# Yuriy Matskanyuk <umackanuk@gmail.com>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Modoboa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2015-06-03 15:50+0000\n"
|
||||
"Last-Translator: guard43ru <guard43ru@gmail.com>, 2023\n"
|
||||
"Language-Team: Russian (http://www.transifex.com/tonio/modoboa/language/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ru\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Нет больше доменов для показа"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Не удаляйте каталог домена"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Эта операция удалит ВСЕ данные, связанные с этим доменом."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr "Эта операция удалит ВСЕ данные, связанные с этим доменом, за исключением аккаунтов."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Нет больше квоты для показа"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
msgid "No more log to show"
|
||||
msgstr "Нет больше логов для отображения"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Не указан администратор домена"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Нет личности для показа"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Не удаляйте каталог почтовых ящиков"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,58 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Translators:
|
||||
# Joaquim Homrighausen <joho@boojam.se>, 2023
|
||||
# Olle Gustafsson <olle@dalnix.se>, 2013,2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Modoboa\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2015-06-03 15:50+0000\n"
|
||||
"Last-Translator: Joaquim Homrighausen <joho@boojam.se>, 2023\n"
|
||||
"Language-Team: Swedish (http://www.transifex.com/tonio/modoboa/language/sv/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: sv\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Inga fler domäner att visa"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Radera inte domän katalog"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Denna åtgärd kommer radera ALL data associerad med den här domänen."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr "Den här operationen raderar all data som är associerad med denna domän, förutom konton."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Ingen mer kvota att visa"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
msgid "No more log to show"
|
||||
msgstr "Inga fler logghändelser finns att visa"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "Ingen domänadministratör definierad"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Inga fler konton att visa"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Radera inte brevlådans katalog"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,63 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Turkish (Turkey) (https://www.transifex.com/tonio/teams/13749/"
|
||||
"tr_TR/)\n"
|
||||
"Language: tr_TR\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"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "Gösterilecek başka domain yok"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "Domain dizini silmeyin"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "Bu işlem, bu domain ilişkili TÜM verileri kaldıracaktır."
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr "Bu işlem hesap dışında bu domain ilişkili tüm verileri kaldıracaktır."
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "Gösterilecek kota yok"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "Gösterilecek kota yok"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "domain yöneticisi tanımlanmadı"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "Gösterilecek daha fazla kimlik yok"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "Posta kutusu dizini silmeyin"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,63 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Translators:
|
||||
# Antoine Nguyen <tonio@ngyn.org>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-22 18:52+0100\n"
|
||||
"PO-Revision-Date: 2023-02-22 16:16+0000\n"
|
||||
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>, 2023\n"
|
||||
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/tonio/teams/13749/"
|
||||
"zh_TW/)\n"
|
||||
"Language: zh_TW\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"
|
||||
|
||||
#: static/admin/js/admin.js:129 static/admin/js/admin.js:174
|
||||
msgid "No more domain to show"
|
||||
msgstr "無更多網域可展示"
|
||||
|
||||
#: static/admin/js/admin.js:149
|
||||
msgid "Do not delete domain directory"
|
||||
msgstr "不可以刪除網域目錄"
|
||||
|
||||
#: static/admin/js/admin.js:151
|
||||
msgid "This operation will remove ALL data associated to this domain."
|
||||
msgstr "這個操作將會刪除所有這個網域有關的資料。"
|
||||
|
||||
#: static/admin/js/admin.js:152
|
||||
msgid ""
|
||||
"This operation will remove all data associated to this domain, excepting "
|
||||
"accounts."
|
||||
msgstr "這個操作將會刪除所有這個網域有關的資料,除了帳號。"
|
||||
|
||||
#: static/admin/js/admin.js:177 static/admin/js/admin.js:436
|
||||
msgid "No more quota to show"
|
||||
msgstr "沒有配額可能顯示"
|
||||
|
||||
#: static/admin/js/admin.js:180
|
||||
#, fuzzy
|
||||
#| msgid "No more quota to show"
|
||||
msgid "No more log to show"
|
||||
msgstr "沒有配額可能顯示"
|
||||
|
||||
#: static/admin/js/admin.js:309
|
||||
msgid "No domain administrator defined"
|
||||
msgstr "網域管理員未指定"
|
||||
|
||||
#: static/admin/js/admin.js:365 static/admin/js/admin.js:433
|
||||
msgid "No more identity to show"
|
||||
msgstr "沒有身份可以顯示"
|
||||
|
||||
#: static/admin/js/admin.js:407
|
||||
msgid "Do not delete mailbox directory"
|
||||
msgstr "不可能刪除郵件目錄"
|
||||
@@ -69,6 +69,7 @@ INSTALLED_APPS = (
|
||||
'django_otp',
|
||||
'django_otp.plugins.otp_totp',
|
||||
'django_otp.plugins.otp_static',
|
||||
'django_rename_app',
|
||||
{% if devmode %} 'djangobower',{% endif %}
|
||||
)
|
||||
|
||||
@@ -89,6 +90,7 @@ MODOBOA_APPS = (
|
||||
'modoboa.maillog',
|
||||
'modoboa.pdfcredentials',
|
||||
'modoboa.dmarc',
|
||||
'modoboa.imap_migration',
|
||||
# Modoboa extensions here.
|
||||
{% for extension in extensions %} '{{ extension }}',
|
||||
{% endfor %}
|
||||
@@ -119,6 +121,7 @@ AUTHENTICATION_BACKENDS = (
|
||||
#'modoboa.lib.authbackends.LDAPBackend',
|
||||
#'modoboa.lib.authbackends.SMTPBackend',
|
||||
'django.contrib.auth.backends.ModelBackend',
|
||||
'modoboa.imap_migration.auth_backends.IMAPBackend',
|
||||
)
|
||||
|
||||
# SMTP authentication
|
||||
|
||||
@@ -109,6 +109,9 @@ SETTINGS_SAMPLE = {
|
||||
"pdfcredentials-imap_server_port": 667,
|
||||
"pdfcredentials-imap_connection_security": "starttls",
|
||||
"dmarc-enable_rlookups": False,
|
||||
"imap_migration-enabled_imapmigration": True,
|
||||
"imap_migration-max_sync_accounts": 2,
|
||||
"imap_migration-create_folders": True,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -70,5 +70,6 @@ def load_settings():
|
||||
param_tools.registry.add2(
|
||||
"global", "dmarc", _("DMARC"),
|
||||
GLOBAL_PARAMETERS_STRUCT,
|
||||
serializers.DmarcGlobalParametersSerializer
|
||||
serializers.DmarcGlobalParametersSerializer,
|
||||
True
|
||||
)
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,139 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,139 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,140 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,137 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,138 +0,0 @@
|
||||
# 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"
|
||||
@@ -1,139 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,139 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,141 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,139 +0,0 @@
|
||||
# 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 ""
|
||||
@@ -1,139 +0,0 @@
|
||||
# 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,33 @@
|
||||
# Generated by Django 3.2.17 on 2023-04-18 12:01
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dmarc', '0004_auto_20220926_0913'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='record',
|
||||
name='id',
|
||||
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='report',
|
||||
name='id',
|
||||
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='reporter',
|
||||
name='id',
|
||||
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='result',
|
||||
name='id',
|
||||
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user