diff --git a/.gitignore b/.gitignore
index 6462551deb..1fdf61c98d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -87,3 +87,4 @@ temp/
.ssl-key
.ssl-dhparam
.ssl-csr
+ecosystem-sqlite-private.json
diff --git a/README.md b/README.md
index 4bcc5c3f9f..8eb901ff1b 100644
--- a/README.md
+++ b/README.md
@@ -181,7 +181,7 @@ Follow the [Deployment](#deployment) guide below for automatic provisioning and
vim .env.production
```
-5. Generate [pm2][] [ecosystem files][ecosystem-files] using our automatic template generator. We created an [ansible-playbook.js](ansible-playbook.js) which loads the `.env.production` environment variables rendered with [@ladjs/env][] into `process.env`, which then gets used in the playbooks. This is a superior, simple, and the only known dotenv approach we know of in Ansible. Newly created `ecosystem-api.json`, `ecosystem-bree.json`, `ecosystem-web.json`, `ecosystem-smtp.json`, and `ecosystem-imap.json` files will now be created for you in the root of the repository. If you ever more add or change IP addresses, you can simply re-run this command.
+5. Generate [pm2][] [ecosystem files][ecosystem-files] using our automatic template generator. We created an [ansible-playbook.js](ansible-playbook.js) which loads the `.env.production` environment variables rendered with [@ladjs/env][] into `process.env`, which then gets used in the playbooks. This is a superior, simple, and the only known dotenv approach we know of in Ansible. Newly created `ecosystem-api.json`, `ecosystem-bree.json`, `ecosystem-web.json`, `ecosystem-smtp.json`, `ecosystem-imap.json`, and `ecosystem-sqlite.json` files will now be created for you in the root of the repository. If you ever more add or change IP addresses, you can simply re-run this command.
```sh
node ansible-playbook ansible/playbooks/ecosystem.yml -l 'localhost'
@@ -253,6 +253,12 @@ Follow the [Deployment](#deployment) guide below for automatic provisioning and
pm2 deploy ecosystem-imap.json production setup
```
+ > NOTE: `ecosystem-sqlite-private.json` is ignored in `.gitignore` and not commited to repository as it contains the private IP of the SQLite server.
+
+ ```sh
+ pm2 deploy ecosystem-sqlite-private.json production setup
+ ```
+
13. Create a SSL certificate at [Namecheap][] (we recommend a 5 year wildcard certificate), set up the certificate, and download and extract the ZIP file with the certificate (emailed to you) to your computer. We do not recommend using tools like [LetsEncrypt][] and `certbot` due to complexity when you have (or scale to) a cluster of servers set up behind load balancers. In other words, we've tried approaches like `lsyncd` in combination with `crontab` for `certbot` renewals and automatic checking. Furthermore, using this exposes the server(s) to downtime as ports `80` and `443` may need to be shut down so that `certbot` can use them for certificate generation. This is not a reliable approach, and simply renewing certificates once a year is vastly simpler and also makes using load balancers trivial. Instead you can use a provider like [Namecheap][] to get a cheap SSL certificate, then run a few commands as we've documented below. This command will prompt you for an absolute file path to the certificates you downloaded. Renewed your certificate after 1 year? Simply follow this step again. Do not set a password on the certificate files. When using the `openssl` command (see Namecheap instructions), you need to use `*.example.com` with an asterisk followed by a period if you are registering a wildcard certificate.
```sh
@@ -270,6 +276,7 @@ Follow the [Deployment](#deployment) guide below for automatic provisioning and
pm2 deploy ecosystem-api.json production exec "pm2 reload all"
pm2 deploy ecosystem-smtp.json production exec "pm2 reload all"
pm2 deploy ecosystem-imap.json production exec "pm2 reload all"
+ pm2 deploy ecosystem-sqlite-private.json production exec "pm2 reload all"
```
14. (Optional) Create a Google application credentials profile file and store it locally. You only need this if you want to support automatic translation. The following command will prompt you for the absolute file path (e.g. `/path/to/client-profile.json`). See the [mandarin][] docs for more information.
@@ -306,6 +313,12 @@ Follow the [Deployment](#deployment) guide below for automatic provisioning and
pm2 deploy ecosystem-imap.json production
```
+ > NOTE: `ecosystem-sqlite-private.json` is ignored in `.gitignore` and not commited to repository as it contains the private IP of the SQLite server.
+
+ ```sh
+ pm2 deploy ecosystem-sqlite-private.json production
+ ```
+
17. Save the process list on the servers so when if the server were to reboot, it will automatically boot back up the processes:
```sh
@@ -328,6 +341,12 @@ Follow the [Deployment](#deployment) guide below for automatic provisioning and
pm2 deploy ecosystem-imap.json production exec "pm2 save"
```
+ > NOTE: `ecosystem-sqlite-private.json` is ignored in `.gitignore` and not commited to repository as it contains the private IP of the SQLite server.
+
+ ```sh
+ pm2 deploy ecosystem-sqlite-private.json production exec "pm2 save"
+ ```
+
18. Test by visiting your web and API server in your browser (click "proceed to unsafe" site and bypass certificate warning).
19. Configure your DNS records for the web and API server hostnames and respective IP addresses.
diff --git a/ansible/playbooks/security.yml b/ansible/playbooks/security.yml
index 2cf828875e..f926cc647a 100644
--- a/ansible/playbooks/security.yml
+++ b/ansible/playbooks/security.yml
@@ -22,6 +22,21 @@
* hard core 0
* soft core 0
+ # https://www.mongodb.com/docs/manual/tutorial/transparent-huge-pages/
+ # https://unix.stackexchange.com/questions/99154/disable-transparent-hugepages
+ # https://stackoverflow.com/questions/51246128/disabling-thp-transparent-hugepages-with-ansible-role
+ - name: "Disable Transparent Huge Pages (THP)"
+ template:
+ src: "{{ playbook_dir }}/templates/thp.j2"
+ dest: /etc/systemd/system/disable-transparent-huge-pages.service
+ owner: root
+ mode: "0644"
+ - name: "Enable THP Systemd Service"
+ service:
+ daemon_reload: yes
+ name: disable-transparent-huge-pages
+ enabled: true
+ state: started
- name: Ensure fs.suid_dumpable is set to 0 and added in sysctl
sysctl:
name: fs.suid_dumpable
diff --git a/ansible/playbooks/sqlite.yml b/ansible/playbooks/sqlite.yml
new file mode 100644
index 0000000000..d8db94a8bd
--- /dev/null
+++ b/ansible/playbooks/sqlite.yml
@@ -0,0 +1,43 @@
+# Copyright (c) Forward Email LLC
+# SPDX-License-Identifier: BUSL-1.1
+
+---
+- name: Import security playbook
+ ansible.builtin.import_playbook: security.yml
+- name: Import Node.js playbook
+ ansible.builtin.import_playbook: node.yml
+- name: Import SSH keys playbook
+ ansible.builtin.import_playbook: ssh-keys.yml
+
+- hosts: sqlite
+ name: SQLITE
+ become: true
+ become_user: root
+ # this was already defined in the ufw role
+ # https://github.com/Oefenweb/ansible-ufw/blob/master/handlers/main.yml
+ handlers:
+ - name: Reload UFW
+ ufw:
+ state: reloaded
+ tasks:
+ # ufw
+ - name: Enable ufw
+ ufw:
+ state: enabled
+ policy: deny
+ direction: incoming
+ - name: Limit ufw ssh
+ ufw:
+ rule: limit
+ port: 22
+ proto: tcp
+ - name: Allow ssh
+ ufw:
+ rule: allow
+ port: 22
+ proto: tcp
+ - name: Allow websocket port
+ ufw:
+ rule: allow
+ port: {{ lookup('env', 'SQLITE_WEBSOCKET_PORT' }}
+ proto: tcp
diff --git a/ansible/playbooks/templates/ecosystem-smtp.json.j2 b/ansible/playbooks/templates/ecosystem-smtp.json.j2
index d1cf5bd7dd..472ea8780b 100644
--- a/ansible/playbooks/templates/ecosystem-smtp.json.j2
+++ b/ansible/playbooks/templates/ecosystem-smtp.json.j2
@@ -1,50 +1,15 @@
{
"apps": [
{
- "name": "smtp-tls",
- "script": "smtp.js",
+ "name": "sqlite",
+ "script": "sqlite.js",
"exec_mode": "cluster",
"wait_ready": true,
"instances": "max",
"pmx": false,
- "env_production": {
- "NODE_ENV": "production",
- "SMTP_PORT": 2587
- }
- },
- {
- "name": "smtp-ssl",
- "script": "smtp.js",
- "exec_mode": "cluster",
- "wait_ready": true,
- "instances": "max",
- "pmx": false,
- "env_production": {
- "NODE_ENV": "production",
- "SMTP_PORT": 2465
- }
- },
- {
- "name": "smtp-bree",
- "script": "smtp-bree.js",
- "exec_mode": "fork",
- "wait_ready": true,
- "instances": "1",
- "pmx": false,
"env_production": {
"NODE_ENV": "production"
}
}
- ],
- "deploy": {
- "production": {
- "user": "deploy",
- "host": [{% for host in groups['smtp'] %}"{{ hostvars[host].ansible_host }}"{% if not loop.last %}, {% endif %}{% endfor %}],
- "ref": "origin/master",
- "repo": "{{ lookup('env', 'GITHUB_REPO') }}",
- "path": "/var/www/production",
- "pre-deploy": "git reset --hard",
- "post-deploy": "pnpm install && NODE_ENV=production npm start build && pm2 startOrGracefulReload ecosystem-smtp.json --env production --update-env"
- }
- }
+ ]
}
diff --git a/ansible/playbooks/templates/hosts.yml b/ansible/playbooks/templates/hosts.yml
index bfc79ee6cc..f8cca8ffcf 100644
--- a/ansible/playbooks/templates/hosts.yml
+++ b/ansible/playbooks/templates/hosts.yml
@@ -34,3 +34,7 @@ all:
ansible_host: 0.0.0.0
imap-do-am-nl:
ansible_host: 0.0.0.0
+ sqlite:
+ hosts:
+ sqlite-do-sf-ca:
+ ansible_host: 0.0.0.0
diff --git a/ansible/playbooks/templates/thp.j2 b/ansible/playbooks/templates/thp.j2
new file mode 100644
index 0000000000..e37e4f9e01
--- /dev/null
+++ b/ansible/playbooks/templates/thp.j2
@@ -0,0 +1,13 @@
+[Unit]
+Description=Disable Transparent Huge Pages (THP)
+DefaultDependencies=no
+After=sysinit.target local-fs.target
+Before=mongod.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
+ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null'
+
+[Install]
+WantedBy=multi-user.target
diff --git a/app/models/aliases.js b/app/models/aliases.js
index 922e78e2cd..a3d5bd8e7d 100644
--- a/app/models/aliases.js
+++ b/app/models/aliases.js
@@ -94,6 +94,13 @@ const Aliases = new mongoose.Schema({
type: Number,
default: 0
},
+ storageLocation: {
+ type: String,
+ default: 'storage_do_1',
+ enum: ['storage_do_1'],
+ trim: true,
+ lowercase: true
+ },
retention: {
type: Number,
default: 0,
@@ -601,15 +608,22 @@ async function getStorageUsed(wsp, session) {
i18n.translateError('DOMAIN_DOES_NOT_EXIST_ANYWHERE', 'en')
);
- const aliasIds = await this.distinct('id', {
+ const aliases = await this.find({
domain: { $in: domainIds }
- });
+ })
+ .select({
+ _id: -1,
+ id: 1,
+ storageLocation: 1
+ })
+ .lean()
+ .exec();
// now get all aliases that belong to any of these domains and sum the storageQuota
const size = await wsp.request({
action: 'size',
session: { user: session.user },
- alias_ids: aliasIds
+ aliases
});
return size;
diff --git a/app/views/about/index.md b/app/views/about/index.md
index a40fc4eb3a..900bf4f526 100644
--- a/app/views/about/index.md
+++ b/app/views/about/index.md
@@ -44,6 +44,8 @@ In March 2023, we released [Tangerine](https://github.com/forwardemail/tangerine
In April 2023, we implemented and automated entirely new infrastructure. Our entire service is now running on globally load-balanced and proximity-based DNS (with health checks and failover) using [Cloudflare](https://cloudflare.com) (before we were using round-robin DNS on Cloudflare). Additionally we switched to **bare metal servers** across multiple providers – which include [Vultr](https://www.vultr.com/?ref=7429848) and [Digital Ocean](https://m.do.co/c/a7fe489d1b27) (before we solely used Digital Ocean). Both of these providers are SOC 2 Type 2 compliant – see [Vultr's Compliance](https://www.vultr.com/legal/compliance/) and [Digital Ocean's Certifications](https://www.digitalocean.com/trust/certification-reports) for more insight. Furthermore, our MongoDB and Redis databases are now running on clusters with primary and standby nodes for high availability, end-to-end SSL encryption, encryption-at-rest, and point-in-time recovery (PITR).
-In May 2023, we launched our **outbound SMTP** add-on for [sending email with SMTP](/faq#do-you-support-sending-email-with-smtp) and [sending email with API](/faq#do-you-support-sending-email-with-api) requests. This feature has built-in safeguards to ensure high deliverability, a modern and robust queue and retry system, and [supports error logs in real-time](/faq#do-you-store-error-logs).
+In May 2023, we launched our **outbound SMTP** feature for [sending email with SMTP](/faq#do-you-support-sending-email-with-smtp) and [sending email with API](/faq#do-you-support-sending-email-with-api) requests. This feature has built-in safeguards to ensure high deliverability, a modern and robust queue and retry system, and [supports error logs in real-time](/faq#do-you-store-error-logs).
+
+In November 2023, we launched our [**encrypted mailbox storage**](/encrypted-email) feature for [IMAP suppport](/faq#do-you-support-receiving-email-with-imap).
[arc]: https://en.wikipedia.org/wiki/Authenticated_Received_Chain
diff --git a/app/views/encrypted-email/index.md b/app/views/encrypted-email/index.md
index 3e9fa5e2ef..3f07b861fd 100644
--- a/app/views/encrypted-email/index.md
+++ b/app/views/encrypted-email/index.md
@@ -10,7 +10,8 @@
* [Databases](#databases)
* [Security](#security)
* [Mailboxes](#mailboxes)
- * [Concurrency and Backups](#concurrency-and-backups)
+ * [Concurrency](#concurrency)
+ * [Backups](#backups)
* [Search](#search)
* [Projects](#projects)
* [Providers](#providers)
@@ -79,6 +80,7 @@ We are the only 100% open-source and privacy-focused email service provider that
```mermaid
sequenceDiagram
+ autonumber
actor Sender
Sender->>MX: Inbound message received for your alias (e.g. you@yourdomain.com).
MX->>SQLite: Message is stored in a temporary mailbox.
@@ -90,6 +92,7 @@ We are the only 100% open-source and privacy-focused email service provider that
```mermaid
sequenceDiagram
+ autonumber
actor You
You->>IMAP: You connect to IMAP server using an email client.
IMAP->>SQLite: Transfer message from temporary mailbox to your alias' mailbox.
@@ -143,7 +146,7 @@ We have fine-tuned SQLite with the following [PRAGMA](https://www.sqlite.org/pra
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `cipher=sqleet` | [ChaCha20-Poly1305 SQLite database encryption](https://utelle.github.io/SQLite3MultipleCiphers/docs/ciphers/cipher_chacha20/). Reference `better-sqlite3-multiple-ciphers` under [Projects](#projects) for more insight. |
| `key="****************"` | This is your decrypted in-memory only password that gets passed through your email client's IMAP connection to our server. New database instances are created and closed for each read and write session (in order to ensure sandboxing and isolation). |
-| `journal_model=WAL` | Write-ahead-log ("WAL") [which boosts performance and allows concurrent read access](https://litestream.io/tips/#wal-journal-mode). |
+| `journal_model=WAL` | Write-ahead-log ("[WAL](https://www.sqlite.org/wal.html)") [which boosts performance and allows concurrent read access](https://litestream.io/tips/#wal-journal-mode). |
| `busy_timeout=5000` | Prevents write-lock errors [while other writes are taking place](https://litestream.io/tips/#busy-timeout). |
| `synchronous=NORMAL` | Increases durability of transactions [without data corruption risk](https://litestream.io/tips/#synchronous-pragma). |
| `foreign_keys=ON` | Enforces that foreign key references (e.g. a relation from one table to another) are enforced. [By default this is not turned on in SQLite](https://www.sqlite.org/foreignkeys.html), but for validation and data integrity it should be enabled. |
@@ -151,26 +154,40 @@ We have fine-tuned SQLite with the following [PRAGMA](https://www.sqlite.org/pra
> All other defaults are from SQLite as specified from the [official PRAGMA documentation](https://www.sqlite.org/pragma.html#pragma_auto_vacuum).
-### Concurrency and Backups
+### Concurrency
-> **tldr;** We use `rclone` for concurrent reads to your mailbox throughout our IMAP servers and a primary server for writes.
+> **tldr;** We use `rclone` and `WebSocket` for concurrent reads and writes to your encrypted SQLite mailboxes.
-Your email client on your phone may resolve `imap.forwardemail.net` to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different provider altogether (such as Vultr).
+#### Reads
-In both cases, we want the connection to read from your database in real-time with 100% accuracy. This is accomplished by using `rclone` with `--vfs-cache-mode off` (the default). Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.
+Your email client on your phone may resolve `imap.forwardemail.net` to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different [provider](#providers) altogether.
-Each of our servers is configured to mount with consistency and alerts us in real-time of any errors.
+Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:
-Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default. We had explored options such as `litestream`, `rqlite`, and `dqlite` below – however none of these satisfied our requirements.
+* This is accomplished by using `rclone` with `--vfs-cache-mode off` (the default).
-To accomplish writes with write-ahead-logging ("WAL") enabled (which drastically speeds up concurrency and allows one writer and multiple readers) – we need to ensure that only one server ("Primary") is responsible for doing so. The Primary is running on the data servers with the mounted volumes containing terabytes of encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind `imap.forwardemail.net` to be secondary servers ("Secondary").
+* Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.
+
+* In the event that the local file cannot be found, this indicates that `rclone` failed to mount or has an issue. In this case we use a `WebSocket` fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).
+
+* Each of our servers is configured to mount with consistency and alerts us in real-time of any errors.
+
+#### Writes
+
+Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.
+
+We had explored options such as `litestream`, `rqlite`, and `dqlite` below – however none of these satisfied our requirements.
+
+To accomplish writes with write-ahead-logging ("[WAL](https://www.sqlite.org/wal.html)") enabled – we need to ensure that only one server ("Primary") is responsible for doing so. [WAL](https://www.sqlite.org/wal.html) drastically speeds up concurrency and allows one writer and multiple readers.
+
+The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind `imap.forwardemail.net` to be secondary servers ("Secondary").
We accomplish two-way communication with [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket):
* Primary servers use an instance of [ws](https://github.com/websockets/ws)'s `WebSocketServer` server.
* Secondary servers use an instance of [ws](https://github.com/websockets/ws)'s `WebSocket` client that is wrapped with [websocket-as-promised](https://github.com/vitalets/websocket-as-promised) and [reconnecting-websocket](https://github.com/pladaria/reconnecting-websocket). These two wrappers ensure that the `WebSocket` reconnects and can send and receive data for specific database writes.
-If for any reason the Secondary servers have read issues with `rclone` (e.g. the mount failed or the `*.sqlite` file for the given alias cannot be found) – then it will fallback to use the `WebSocket` connection for reads.
+### Backups
For backups, we simply run the SQLite `backup` command periodically, which leverages your encrypted password from an in-memory IMAP connection.
@@ -208,7 +225,7 @@ Here's a table outlining projects we use in our source code and development proc
| [Node.js](https://nodejs.org/en) | Node.js is the open-source, cross-platform JavaScript runtime environment which runs all of our server processes. |
| [Nodemailer](https://github.com/nodemailer/nodemailer) | Node.js package for sending emails, creating connections, and more. We are an official sponsor of this project. |
| [Redis](https://redis.io/) | In-memory database for caching, publish/subscribe channels, and DNS over HTTPS requests. |
-| [SQLite3MultipleCiphers](https://github.com/utelle/SQLite3MultipleCiphers) | Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log ("WAL"), journal, rollback, …). |
+| [SQLite3MultipleCiphers](https://github.com/utelle/SQLite3MultipleCiphers) | Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log ("[WAL](https://www.sqlite.org/wal.html)"), journal, rollback, …). |
| [SQLiteStudio](https://github.com/pawelsalawa/sqlitestudio) | Visual SQLite editor (which you could also use) to test, download, and view development mailboxes. |
| [SQLite](https://www.sqlite.org/about.html) | Embedded database layer for scalable, self-contained, fast, and resilient IMAP storage. |
| [Spam Scanner](https://github.com/spamscanner/spamscanner) | Node.js anti-spam, email filtering, and phishing prevention tool (our alternative to [Spam Assassin](https://spamassassin.apache.org/) and [rspamd](https://github.com/rspamd/rspamd)). |
@@ -263,7 +280,7 @@ That experiment led us to further understand and discover edge cases surrounding
* If you have multiple IMAP servers distributed globally, then the cache will be off across them unless you have a single writer and multiple listeners (e.g. a pub/sub approach).
* This is incredibly complex and adding any additional complexity like this will result in more single points of failure.
* S3-compatible storage providers do not support partial file changes – which means any change of the `.sqlite` file will result in a complete change and re-upload of the database.
- * Other solutions like `rsync` exist, but they are not focused on write-ahead-log ("WAL") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the WAL files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.
+ * Other solutions like `rsync` exist, but they are not focused on write-ahead-log ("[WAL](https://www.sqlite.org/wal.html)") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the [WAL](https://www.sqlite.org/wal.html) files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.
* Using this option of `--vfs-cache-mode writes` (the *only* way to use SQLite over `rclone` for writes) will attempt to copy the entire database from scratch in-memory – handling one 10 GB mailbox is OK, however handling multiple mailboxes with exceedingly high storage will cause the IMAP servers to run into memory limitations and `ENOMEM` errors, segmentation faults, and data corruption.
* If you attempt to use SQLite [Virtual Tables](https://www.sqlite.org/vtab.html) (e.g. using [s3db](https://github.com/jrhy/s3db)) in order to have data live on an S3-compatible storage layer, then you will run into several more issues:
* Read and writes will be extremely slow as S3 API endpoints will need to be hit with HTTP `GET`, `PUT`, `HEAD`, and `POST` methods.
diff --git a/app/views/faq/index.md b/app/views/faq/index.md
index 955bba406e..f3a09ca51a 100644
--- a/app/views/faq/index.md
+++ b/app/views/faq/index.md
@@ -815,7 +815,9 @@ In order to send outbound email with our API, you must use your API token availa
Yes, as of October 16, 2023 we support receiving email over IMAP as an add-on for all paid users.
-**Our Beta IMAP support is useful at the moment for storing Draft messages in your "Drafts" folder, copies of [Outbound SMTP](#do-you-support-sending-email-with-smtp) messages sent your "Sent Mail" folder, and for initial mailbox setup across mail clients such as Thunderbird, K-9 Mail, and Apple Mail.** There is a 1 GB storage limitation with 30 day retention – note that permanent storage tiers and more features will be available soon.
+**Please read our deep-dive article** on [how our encrypted SQLite mailbox storage feature works](/encrypted-emaill).
+
+**Our Beta IMAP support is useful at the moment for storing Draft messages in your "Drafts" folder, copies of [Outbound SMTP](#do-you-support-sending-email-with-smtp) messages sent your "Sent Mail" folder, and for initial mailbox setup across mail clients such as Thunderbird, K-9 Mail, and Apple Mail.** There is a 10 GB storage limitation (additional storage can be purchased with pay-as-you-go).
diff --git a/ecosystem-sqlite.json b/ecosystem-sqlite.json
index 698f1b07d5..472ea8780b 100644
--- a/ecosystem-sqlite.json
+++ b/ecosystem-sqlite.json
@@ -11,16 +11,5 @@
"NODE_ENV": "production"
}
}
- ],
- "deploy": {
- "production": {
- "user": "deploy",
- "host": [],
- "ref": "origin/master",
- "repo": "git@github.com:forwardemail/forwardemail.net.git",
- "path": "/var/www/production",
- "pre-deploy": "git reset --hard",
- "post-deploy": "pnpm install && NODE_ENV=production npm start build && pm2 startOrGracefulReload ecosystem-sqlite.json --env production --update-env"
- }
- }
+ ]
}
diff --git a/helpers/create-websocket-as-promised.js b/helpers/create-websocket-as-promised.js
index 5710274be7..e2baa9a696 100644
--- a/helpers/create-websocket-as-promised.js
+++ b/helpers/create-websocket-as-promised.js
@@ -10,8 +10,10 @@ const { randomUUID } = require('node:crypto');
const ReconnectingWebSocket = require('reconnecting-websocket');
const WebSocketAsPromised = require('websocket-as-promised');
+const mongoose = require('mongoose');
const ms = require('ms');
const pRetry = require('p-retry');
+const revHash = require('rev-hash');
const safeStringify = require('fast-safe-stringify');
const { WebSocket } = require('ws');
@@ -107,6 +109,12 @@ function createWebSocketAsPromised(options = {}) {
//
wsp.request = async function (data) {
try {
+ if (
+ typeof data?.session?.user?.alias_id !== 'string' ||
+ !mongoose.Types.ObjectId.isValid(data.session.user.alias_id)
+ )
+ throw new TypeError('Alias ID missing from session');
+
// will retry by default up to 10x with exponential backoff
if (!wsp.isOpened)
await pRetry(() => wsp.open(), {
@@ -116,13 +124,14 @@ function createWebSocketAsPromised(options = {}) {
}
});
- // TODO: turn this off for prod
// helper for debugging
- data.stack = new Error('stack').stack;
+ if (config.env !== 'production') data.stack = new Error('stack').stack;
const response = await wsp.sendRequest(data, {
timeout: ms('1m'),
- requestId: randomUUID()
+ requestId: `${revHash(data.session.user.alias_id)}:${revHash(
+ randomUUID()
+ )}`
});
if (
@@ -138,6 +147,7 @@ function createWebSocketAsPromised(options = {}) {
if (response.err) throw parseError(response.err);
return response.data;
} catch (err) {
+ logger.fatal(err);
err.isCodeBug = true;
throw err;
}
diff --git a/helpers/get-database.js b/helpers/get-database.js
index 51fe7ea88e..6e7d25898c 100644
--- a/helpers/get-database.js
+++ b/helpers/get-database.js
@@ -298,7 +298,7 @@ async function getDatabase(
// (e.g. `alias.bucket = 'production-xyz')
//
// const readmeFilePath = path.join(dir, readmeFileName);
- const dbFilePath = getPathToDatabase(alias.id);
+ const dbFilePath = getPathToDatabase(alias);
//
// NOTE: if readonly and database doesn't exist it will throw an error
diff --git a/helpers/get-path-to-database.js b/helpers/get-path-to-database.js
index 8de3f0ceea..0d36329d70 100644
--- a/helpers/get-path-to-database.js
+++ b/helpers/get-path-to-database.js
@@ -6,13 +6,30 @@
const os = require('node:os');
const path = require('node:path');
-//
-// NOTE: eventually this could be complex with multi server lookup
-// and if the server we're talking to doesn't have it mounted
-// then it would just not send a response (and another one would)
-//
-function getPathToDatabase(id) {
- return path.join(os.tmpdir(), `${id}.sqlite`);
+const mkdirp = require('mkdirp');
+const mongoose = require('mongoose');
+
+const config = require('#config');
+
+const tmpdir = os.tmpdir();
+
+function getPathToDatabase(alias) {
+ if (typeof alias !== 'object') throw new TypeError('Alias missing');
+ if (typeof alias?.storageLocation !== 'string')
+ throw new TypeError('Alias storage location missing');
+ if (typeof alias?.id !== 'string') throw new TypeError('Alias ID missing');
+ // validate that they are all object ids
+ if (!mongoose.Types.ObjectId.isValid(alias.id))
+ throw new TypeError('Invalid alias id');
+
+ const dir = path.join(
+ config.env === 'production' ? '/mnt' : tmpdir,
+ alias.storageLocation
+ );
+
+ if (config.env !== 'production') mkdirp.sync(dir);
+
+ return path.join(dir, `${alias.id}.sqlite`);
}
module.exports = getPathToDatabase;
diff --git a/helpers/on-auth.js b/helpers/on-auth.js
index c5f5e2b3be..ee654bab25 100644
--- a/helpers/on-auth.js
+++ b/helpers/on-auth.js
@@ -246,7 +246,8 @@ async function onAuth(auth, session, fn) {
domain_name: domain.name,
// TODO: we probably don't need to encrypt but just a safeguard
// (the `helpers/logger` already strips `session.user.password` from logs)
- password: encrypt(auth.password.trim())
+ password: encrypt(auth.password.trim()),
+ storage_location: alias.storageLocation
};
//
diff --git a/imap-server.js b/imap-server.js
index 1ecada43db..230e9f2986 100644
--- a/imap-server.js
+++ b/imap-server.js
@@ -36,35 +36,16 @@ const logger = require('#helpers/logger');
const onAuth = require('#helpers/on-auth');
const refreshSession = require('#helpers/refresh-session');
-// TODO: bind `db.wsp` to the WSP instance (and then remove the extra param wsp everywhere)
-// (note that we will need to rewrite our conditional checks for `if (db.wsp)` to something else like `if (!db.open)` or something)
+// TODO: use `session.db` and `session.wsp` everywhere (rewrite everything for less args)
// TODO: addEntries when MX server writes for temporary storage (e.g. alert existing IMAP connections)
// TODO: search filters like has:attachment
-//
-// TODO: mention in post about using
-//
-// instead of
-//
-// because the latter uses polling and ioredfour uses
-// redis pubsub so it's much faster
-//
// TODO: run validate() on all docs before 'update' and 'insert'
-// TODO: use transactions instead of iterator with unsafe mode and also for bulkWrite
// TODO: mx server forwarding (e.g. can forward to another mailserver such as gmail)
// TODO: auto-reply/vacation responder
// TODO: enforce maxDownload and maxUpload
// TODO: enforce 10-15 max connections per alias
-// TODO: disable transparent huge pages across all servers
-// fs.stat)
-// TODO: --allow-other and run as a different user for rclone
-// TODO: graceful needs to close all `db.close()` exposed that are open
// TODO: each R2 bucket seems like it's 18 TB max?
-// TODO: ensure licensing accurate on new files with sqlite/rclone
// TODO: future items
// - [ ] contacts
diff --git a/locales/ar.json b/locales/ar.json
index ae79140c10..8a2314ac66 100644
--- a/locales/ar.json
+++ b/locales/ar.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "إذا واجهت الخوادم الثانوية مشكلات في القراءة لأي سبب من الأسباب",
"(e.g. the mount failed or the": "(على سبيل المثال فشل التثبيت أو",
"file for the given alias cannot be found) – then it will fallback to use the": "لا يمكن العثور على الملف الخاص بالاسم المستعار المحدد) - عندها سيتم الرجوع لاستخدام الملف",
- "connection for reads.": "اتصال للقراءات."
+ "connection for reads.": "اتصال للقراءات.",
+ "feature for": "ميزة ل",
+ "In November 2023, we launched our": "في نوفمبر 2023، أطلقنا موقعنا",
+ "encrypted mailbox storage": "تخزين صندوق البريد المشفر",
+ "IMAP suppport": "دعم IMAP",
+ "Concurrency": "التزامن",
+ "Backups": "النسخ الاحتياطية",
+ "Interested in learning more? Read": "هل أنت مهتم بمعرفة المزيد؟ يقرأ",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "عندما يتم استلام بريد جديد لك من أحد المرسلين، تقوم خوادم تبادل البريد لدينا بالكتابة إلى صندوق بريد فردي ومؤقت ومشفر لك.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "يمكنه القراءة والكتابة في صندوق البريد الخاص بك عند الوصول إليه. في المرة التالية التي يحاول فيها برنامج البريد الإلكتروني الخاص بك استطلاع البريد أو المزامنة، سيتم نقل رسائلك الجديدة من صندوق البريد المؤقت هذا وتخزينها في ملف صندوق البريد الفعلي باستخدام كلمة المرور التي قدمتها. لاحظ أنه تتم إزالة صندوق البريد المؤقت هذا وحذفه بعد ذلك بحيث لا يحتوي على الرسائل سوى صندوق البريد المحمي بكلمة مرور.",
+ "Write-ahead-log (\"": "سجل الكتابة المسبقة (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "للقراءة والكتابة المتزامنة في صناديق بريد SQLite المشفرة الخاصة بك.",
+ "Reads": "يقرأ",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "إلى أحد عناوين IP الرقمية الخاصة بنا - وقد يقوم عميل سطح المكتب الخاص بك بحل عنوان IP منفصل من عنوان IP مختلف",
+ "provider": "مزود",
+ "altogether.": "كليا.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "بغض النظر عن خادم IMAP الذي يتصل به عميل البريد الإلكتروني الخاص بك، فإننا نريد أن تتم قراءة الاتصال من قاعدة بياناتك في الوقت الفعلي وبدقة 100%:",
+ "This is accomplished by using": "يتم تحقيق ذلك باستخدام",
+ "(the default).": "(الافتراضي).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "بدلاً من استخدام ذاكرة التخزين المؤقت على القرص المحلي، تتم قراءة ذاكرة التخزين المؤقت مباشرةً من التثبيت البعيد (قاعدة البيانات الخاصة بك) في الوقت الفعلي.",
+ "In the event that the local file cannot be found, this indicates that": "وفي حالة عدم العثور على الملف المحلي، فهذا يشير إلى ذلك",
+ "failed to mount or has an issue. In this case we use a": "فشل في التحميل أو لديه مشكلة. في هذه الحالة نستخدم أ",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "احتياطي للقراءات (مما يؤدي إلى انخفاض الأداء قليلاً، لكنه لا يزال يحافظ على سلامة الخدمة).",
+ "Writes": "يكتب",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "تختلف الكتابة إلى قاعدة البيانات الخاصة بك قليلًا – نظرًا لأن SQLite عبارة عن قاعدة بيانات مضمنة ويعيش صندوق البريد الخاص بك في ملف واحد افتراضيًا.",
+ "We had explored options such as": "لقد استكشفنا خيارات مثل",
+ "To accomplish writes with write-ahead-logging (\"": "لإنجاز عمليات الكتابة باستخدام تسجيل الكتابة المسبق (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") ممكّن - نحتاج إلى التأكد من أن خادمًا واحدًا فقط (\"الأساسي\") مسؤول عن القيام بذلك.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "يعمل على تسريع التزامن بشكل كبير ويسمح لكاتب واحد والعديد من القراء.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "يتم تشغيل الأساسي على خوادم البيانات مع وحدات التخزين المحملة التي تحتوي على صناديق البريد المشفرة. من وجهة نظر التوزيع، يمكنك مراعاة جميع خوادم IMAP الفردية الموجودة خلفها",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "ملحق التشفير لـ SQLite للسماح بتشفير ملفات قاعدة البيانات بأكملها (بما في ذلك سجل الكتابة المسبق (\"",
+ "\"), journal, rollback, …).": "\")، مجلة، التراجع، ...).",
+ "exist, but they are not focused on write-ahead-log (\"": "موجودة، لكنها لا تركز على سجل الكتابة المسبق (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") الدعم - لذلك انتهينا من مراجعة Litestream. ولحسن الحظ، فإن استخدام التشفير لدينا يقوم بالفعل بتشفير ملف",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "الملفات لنا، لذلك لا نحتاج إلى الاعتماد على Litestream لذلك. ومع ذلك، لم نكن واثقين بعد من استخدام Litestream في الإنتاج ولدينا بعض الملاحظات أدناه حول ذلك.",
+ "Please read our deep-dive article": "يرجى قراءة مقالنا العميق",
+ "on": "على",
+ "how our encrypted SQLite mailbox storage feature works": "كيف تعمل ميزة تخزين صندوق بريد SQLite المشفرة لدينا",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "قيود التخزين (يمكن شراء مساحة تخزين إضافية من خلال الدفع أولاً بأول)."
}
\ No newline at end of file
diff --git a/locales/cs.json b/locales/cs.json
index 765eebb2c4..7d3295cee8 100644
--- a/locales/cs.json
+++ b/locales/cs.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Pokud z nějakého důvodu sekundární servery mají problémy se čtením s",
"(e.g. the mount failed or the": "(např. montáž selhala nebo",
"file for the given alias cannot be found) – then it will fallback to use the": "soubor pro daný alias nelze nalézt) – pak se vrátí zpět k použití",
- "connection for reads.": "připojení pro čtení."
+ "connection for reads.": "připojení pro čtení.",
+ "feature for": "funkce pro",
+ "In November 2023, we launched our": "V listopadu 2023 jsme spustili naše",
+ "encrypted mailbox storage": "šifrované úložiště poštovních schránek",
+ "IMAP suppport": "podpora IMAP",
+ "Concurrency": "Konkurence",
+ "Backups": "Zálohy",
+ "Interested in learning more? Read": "Máte zájem dozvědět se více? Číst",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Když pro vás obdrží nový e-mail od odesílatele, naše servery pro výměnu pošty za vás zapíší do individuální, dočasné a šifrované poštovní schránky.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "můžete číst a psát do vaší poštovní schránky, když k ní přistupujete. Až se váš e-mailový klient příště pokusí požádat o poštu nebo synchronizovat, vaše nové zprávy budou přeneseny z této dočasné poštovní schránky a uloženy do vašeho skutečného souboru poštovní schránky pomocí vašeho dodaného hesla. Všimněte si, že tato dočasná poštovní schránka je poté vymazána a odstraněna, takže zprávy má pouze vaše poštovní schránka chráněná heslem.",
+ "Write-ahead-log (\"": "Write-ahead-log (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "pro souběžné čtení a zápisy do vašich šifrovaných schránek SQLite.",
+ "Reads": "Čte",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "na jednu z našich IP adres Digital Ocean – a váš počítačový klient může rozlišit oddělenou IP od jiné",
+ "provider": "poskytovatel",
+ "altogether.": "celkem.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Bez ohledu na to, ke kterému serveru IMAP se váš e-mailový klient připojuje, chceme, aby připojení načítalo z vaší databáze v reálném čase se 100% přesností:",
+ "This is accomplished by using": "Toho je dosaženo použitím",
+ "(the default).": "(výchozí).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Namísto použití místní diskové mezipaměti se mezipaměť čte přímo ze vzdáleného připojení (vaší databáze) v reálném čase.",
+ "In the event that the local file cannot be found, this indicates that": "V případě, že místní soubor nelze nalézt, znamená to",
+ "failed to mount or has an issue. In this case we use a": "se nepodařilo připojit nebo má problém. V tomto případě použijeme a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "záložní pro čtení (což mírně snižuje výkon, ale stále zachovává integritu služby).",
+ "Writes": "Píše",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Zápis do vaší databáze je trochu jiný – protože SQLite je vestavěná databáze a vaše poštovní schránka žije ve výchozím nastavení v jediném souboru.",
+ "We had explored options such as": "Zkoumali jsme možnosti jako např",
+ "To accomplish writes with write-ahead-logging (\"": "Chcete-li provést zápisy s protokolováním napřed (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") povoleno – musíme zajistit, aby za to odpovídal pouze jeden server (\"Primární\").",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "drasticky urychluje souběžnost a umožňuje jeden spisovatel a více čtenářů.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Primární běží na datových serverech s připojenými svazky obsahujícími šifrované poštovní schránky. Z hlediska distribuce byste mohli zvážit všechny jednotlivé servery IMAP za sebou",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Rozšíření šifrování pro SQLite, které umožňuje šifrování celých databázových souborů (včetně protokolu pro zápis dopředu (\"",
+ "\"), journal, rollback, …).": "\"), deník, návrat, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "existují, ale nezaměřují se na zápis napřed (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") podpora – takže jsme skončili u kontroly Litestreamu. Naštěstí naše použití šifrování již šifruje",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "soubory za nás, takže se v tom nemusíme spoléhat na Litestream. Nicméně jsme si ještě nebyli jisti Litestreamem pro produkční použití a máme k tomu několik poznámek níže.",
+ "Please read our deep-dive article": "Přečtěte si náš podrobný článek",
+ "on": "na",
+ "how our encrypted SQLite mailbox storage feature works": "jak funguje naše funkce úložiště šifrovaných schránek SQLite",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "omezení úložiště (další úložiště lze zakoupit s průběžným platem)."
}
\ No newline at end of file
diff --git a/locales/da.json b/locales/da.json
index 6b8846cdd0..519027c5a3 100644
--- a/locales/da.json
+++ b/locales/da.json
@@ -5130,5 +5130,43 @@
"If for any reason the Secondary servers have read issues with": "Hvis de sekundære servere af en eller anden grund har læst problemer med",
"(e.g. the mount failed or the": "(f.eks. fejlede monteringen eller",
"file for the given alias cannot be found) – then it will fallback to use the": "fil for det givne alias kan ikke findes) – så vil den gå tilbage til at bruge",
- "connection for reads.": "forbindelse til aflæsninger."
+ "connection for reads.": "forbindelse til aflæsninger.",
+ "feature for": "funktion til",
+ "In November 2023, we launched our": "I november 2023 lancerede vi vores",
+ "encrypted mailbox storage": "krypteret postkasseopbevaring",
+ "IMAP suppport": "IMAP-understøttelse",
+ "Concurrency": "Samtidighed",
+ "Backups": "Sikkerhedskopier",
+ "Interested in learning more? Read": "Interesseret i at lære mere? Læs",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Når der modtages ny mail til dig fra en afsender, skriver vores mailudvekslingsservere til en individuel, midlertidig og krypteret postkasse for dig.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "kan læse og skrive til din postkasse, når du tilgår den. Næste gang din e-mail-klient forsøger at polle efter e-mail eller synkronisere, vil dine nye meddelelser blive overført fra denne midlertidige postkasse og gemt i din faktiske postkassefil ved hjælp af din medfølgende adgangskode. Bemærk, at denne midlertidige postkasse renses og slettes efterfølgende, så kun din adgangskodebeskyttede postkasse har beskederne.",
+ "Write-ahead-log (\"": "Write-ahead-log (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "til samtidige læsninger og skrivninger til dine krypterede SQLite-postkasser.",
+ "Reads": "Læser",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "til en af vores Digital Ocean IP-adresser – og din desktop-klient kan løse en separat IP fra en anden",
+ "provider": "udbyder",
+ "altogether.": "i det hele taget.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Uanset hvilken IMAP-server din e-mail-klient forbinder til, ønsker vi, at forbindelsen læser fra din database i realtid med 100 % nøjagtighed:",
+ "This is accomplished by using": "Dette opnås ved at bruge",
+ "(the default).": "(standard).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "I stedet for at bruge lokal diskcache, læses cachen direkte fra fjernmonteringen (din database) i realtid.",
+ "In the event that the local file cannot be found, this indicates that": "I tilfælde af at den lokale fil ikke kan findes, indikerer dette det",
+ "failed to mount or has an issue. In this case we use a": "kunne ikke monteres eller har et problem. I dette tilfælde bruger vi en",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "fallback for læsninger (hvilket reducerer ydeevnen lidt, men stadig bevarer tjenestens integritet).",
+ "Writes": "Skriver",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "At skrive til din database er lidt anderledes – da SQLite er en indlejret database, og din postkasse som standard lever i en enkelt fil.",
+ "We had explored options such as": "Vi havde undersøgt muligheder som f.eks",
+ "To accomplish writes with write-ahead-logging (\"": "For at udføre skrivninger med write-ahead-logging (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") aktiveret – vi skal sikre, at kun én server (\"Primær\") er ansvarlig for at gøre det.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "fremskynder samtidighed drastisk og tillader én forfatter og flere læsere.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Den primære kører på dataserverne med de monterede volumener, der indeholder de krypterede postkasser. Fra et distributionssynspunkt kunne du overveje alle de individuelle IMAP-servere bagved",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Krypteringsudvidelse til SQLite for at tillade at hele databasefiler krypteres (inklusive skrive-ahead-loggen (\"",
+ "\"), journal, rollback, …).": "\"), journal, rollback, ...).",
+ "exist, but they are not focused on write-ahead-log (\"": "eksisterer, men de er ikke fokuseret på write-ahead-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") support – så vi endte med at gennemgå Litestream. Heldigvis krypterer vores krypteringsbrug allerede",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "filer for os, så vi behøver ikke at stole på Litestream for det. Men vi var endnu ikke sikre på Litestream til produktionsbrug og har et par bemærkninger nedenfor om det.",
+ "Please read our deep-dive article": "Læs venligst vores dybdegående artikel",
+ "on": "på",
+ "how our encrypted SQLite mailbox storage feature works": "hvordan vores krypterede SQLite-postkasseopbevaringsfunktion fungerer",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "lagerbegrænsning (yderligere lagerplads kan købes med pay-as-you-go)."
}
\ No newline at end of file
diff --git a/locales/de.json b/locales/de.json
index 53aa9fb2ba..50d703f434 100644
--- a/locales/de.json
+++ b/locales/de.json
@@ -4424,5 +4424,43 @@
"If for any reason the Secondary servers have read issues with": "Wenn aus irgendeinem Grund auf den sekundären Servern Leseprobleme auftreten",
"(e.g. the mount failed or the": "(z. B. der Mount ist fehlgeschlagen oder die",
"file for the given alias cannot be found) – then it will fallback to use the": "Die Datei für den angegebenen Alias kann nicht gefunden werden) – dann wird auf die zurückgegriffen",
- "connection for reads.": "Verbindung zum Lesen."
+ "connection for reads.": "Verbindung zum Lesen.",
+ "feature for": "Funktion für",
+ "In November 2023, we launched our": "Im November 2023 haben wir unsere gestartet",
+ "encrypted mailbox storage": "verschlüsselte Postfachspeicherung",
+ "IMAP suppport": "IMAP-Unterstützung",
+ "Concurrency": "Parallelität",
+ "Backups": "Backups",
+ "Interested in learning more? Read": "Möchten Sie mehr erfahren? Lesen",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Wenn für Sie neue E-Mails von einem Absender eingehen, schreiben unsere Mail-Exchange-Server für Sie in ein individuelles, temporäres und verschlüsseltes Postfach.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "Sie können Ihr Postfach lesen und darauf schreiben, wenn Sie darauf zugreifen. Wenn Ihr E-Mail-Client das nächste Mal versucht, E-Mails oder Synchronisierungen abzurufen, werden Ihre neuen Nachrichten aus diesem temporären Postfach übertragen und mit Ihrem angegebenen Passwort in Ihrer eigentlichen Postfachdatei gespeichert. Beachten Sie, dass dieses temporäre Postfach anschließend bereinigt und gelöscht wird, sodass nur Ihr passwortgeschütztes Postfach die Nachrichten enthält.",
+ "Write-ahead-log (\"": "Write-Ahead-Protokoll (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "für gleichzeitige Lese- und Schreibvorgänge in Ihren verschlüsselten SQLite-Postfächern.",
+ "Reads": "Liest",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "zu einer unserer Digital Ocean IP-Adressen – und Ihr Desktop-Client löst möglicherweise eine separate IP von einer anderen auf",
+ "provider": "Anbieter",
+ "altogether.": "insgesamt.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Unabhängig davon, mit welchem IMAP-Server Ihr E-Mail-Client eine Verbindung herstellt, möchten wir, dass die Verbindung in Echtzeit mit 100 %iger Genauigkeit aus Ihrer Datenbank liest:",
+ "This is accomplished by using": "Dies wird durch die Verwendung erreicht",
+ "(the default).": "(der Standard).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Anstatt den lokalen Festplatten-Cache zu verwenden, wird der Cache in Echtzeit direkt vom Remote-Mount (Ihrer Datenbank) gelesen.",
+ "In the event that the local file cannot be found, this indicates that": "Falls die lokale Datei nicht gefunden werden kann, weist dies darauf hin",
+ "failed to mount or has an issue. In this case we use a": "Die Bereitstellung ist fehlgeschlagen oder es liegt ein Problem vor. In diesem Fall verwenden wir a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "Fallback für Lesevorgänge (was die Leistung leicht verringert, aber dennoch die Integrität des Dienstes aufrechterhält).",
+ "Writes": "Schreibt",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Das Schreiben in Ihre Datenbank ist etwas anders – da SQLite eine eingebettete Datenbank ist und Ihr Postfach standardmäßig in einer einzigen Datei gespeichert ist.",
+ "We had explored options such as": "Wir hatten Optionen erkundet wie",
+ "To accomplish writes with write-ahead-logging (\"": "Um Schreibvorgänge mit Write-Ahead-Logging durchzuführen (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") aktiviert – wir müssen sicherstellen, dass nur ein Server (\"Primär\") dafür verantwortlich ist.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "beschleunigt die Parallelität drastisch und ermöglicht einen Autor und mehrere Leser.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Der Primärserver wird auf den Datenservern ausgeführt, wobei die bereitgestellten Volumes die verschlüsselten Postfächer enthalten. Aus Sicht der Verteilung könnten Sie alle einzelnen IMAP-Server dahinter berücksichtigen",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Verschlüsselungserweiterung für SQLite, um die Verschlüsselung ganzer Datenbankdateien zu ermöglichen (einschließlich des Write-Ahead-Protokolls (\"",
+ "\"), journal, rollback, …).": "\"), Journal, Rollback, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "existieren, aber sie konzentrieren sich nicht auf Write-Ahead-Log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\")-Unterstützung – also haben wir uns letztendlich für Litestream entschieden. Glücklicherweise verschlüsselt unsere Verschlüsselungsnutzung bereits die",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "Dateien für uns, sodass wir uns hierfür nicht auf Litestream verlassen müssen. Wir waren jedoch noch nicht davon überzeugt, dass Litestream für den Produktionseinsatz geeignet ist, und haben unten ein paar Anmerkungen dazu.",
+ "Please read our deep-dive article": "Bitte lesen Sie unseren ausführlichen Artikel",
+ "on": "An",
+ "how our encrypted SQLite mailbox storage feature works": "wie unsere verschlüsselte SQLite-Postfachspeicherfunktion funktioniert",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "Speicherbeschränkung (zusätzlicher Speicher kann mit nutzungsbasierter Bezahlung erworben werden)."
}
\ No newline at end of file
diff --git a/locales/en.json b/locales/en.json
index 1087abab00..be02e3d0f8 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -5164,5 +5164,43 @@
"If for any reason the Secondary servers have read issues with": "If for any reason the Secondary servers have read issues with",
"(e.g. the mount failed or the": "(e.g. the mount failed or the",
"file for the given alias cannot be found) – then it will fallback to use the": "file for the given alias cannot be found) – then it will fallback to use the",
- "connection for reads.": "connection for reads."
+ "connection for reads.": "connection for reads.",
+ "feature for": "feature for",
+ "In November 2023, we launched our": "In November 2023, we launched our",
+ "encrypted mailbox storage": "encrypted mailbox storage",
+ "IMAP suppport": "IMAP suppport",
+ "Concurrency": "Concurrency",
+ "Backups": "Backups",
+ "Interested in learning more? Read": "Interested in learning more? Read",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.",
+ "Write-ahead-log (\"": "Write-ahead-log (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "for concurrent reads and writes to your encrypted SQLite mailboxes.",
+ "Reads": "Reads",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different",
+ "provider": "provider",
+ "altogether.": "altogether.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:",
+ "This is accomplished by using": "This is accomplished by using",
+ "(the default).": "(the default).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.",
+ "In the event that the local file cannot be found, this indicates that": "In the event that the local file cannot be found, this indicates that",
+ "failed to mount or has an issue. In this case we use a": "failed to mount or has an issue. In this case we use a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).",
+ "Writes": "Writes",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.",
+ "We had explored options such as": "We had explored options such as",
+ "To accomplish writes with write-ahead-logging (\"": "To accomplish writes with write-ahead-logging (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "drastically speeds up concurrency and allows one writer and multiple readers.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"",
+ "\"), journal, rollback, …).": "\"), journal, rollback, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "exist, but they are not focused on write-ahead-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.",
+ "Please read our deep-dive article": "Please read our deep-dive article",
+ "on": "on",
+ "how our encrypted SQLite mailbox storage feature works": "how our encrypted SQLite mailbox storage feature works",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "storage limitation (additional storage can be purchased with pay-as-you-go)."
}
\ No newline at end of file
diff --git a/locales/es.json b/locales/es.json
index 78ac803ee8..607a761fff 100644
--- a/locales/es.json
+++ b/locales/es.json
@@ -5058,7 +5058,7 @@
"\"Available in MongoDB Enterprise only\"": "\"Disponible sólo en MongoDB Enterprise\"",
"❌ Relational database": "❌ Base de datos relacional",
"❌ AGPL and": "❌AGPL y",
- "rqlite": "rqlite",
+ "rqlite": "rqlita",
"Network only": "Sólo red",
"dqlite": "dqlite",
"Untested and not yet supported?": "¿No ha sido probado y aún no es compatible?",
@@ -5076,7 +5076,7 @@
"encryption-at-rest": "cifrado en reposo",
"encryption-in-transit": "cifrado en tránsito",
"(\"DoH\") using 🍊": "(\"DoH\") usando 🍊",
- "sqleet": "sqleet",
+ "sqleet": "cuadrilátero",
"encryption on mailboxes. Additionally we use token-based two-factor authentication (as opposed to SMS which is suspectible to": "cifrado en buzones de correo. Además, utilizamos autenticación de dos factores basada en tokens (a diferencia de SMS, que se sospecha que",
"man-in-the-middle-attacks": "ataques de hombre en el medio",
"), rotated SSH keys with root access disabled, exclusive access to servers through restricted IP addresses, and more.": "), claves SSH rotadas con acceso raíz deshabilitado, acceso exclusivo a servidores a través de direcciones IP restringidas y más.",
@@ -5392,5 +5392,43 @@
"If for any reason the Secondary servers have read issues with": "Si por alguna razón los servidores secundarios tienen problemas de lectura con",
"(e.g. the mount failed or the": "(por ejemplo, el montaje falló o el",
"file for the given alias cannot be found) – then it will fallback to use the": "no se puede encontrar el archivo para el alias dado) – entonces recurrirá para usar el",
- "connection for reads.": "conexión para lecturas."
+ "connection for reads.": "conexión para lecturas.",
+ "feature for": "característica para",
+ "In November 2023, we launched our": "En noviembre de 2023, lanzamos nuestro",
+ "encrypted mailbox storage": "almacenamiento de buzones de correo cifrado",
+ "IMAP suppport": "Soporte IMAP",
+ "Concurrency": "concurrencia",
+ "Backups": "Copias de seguridad",
+ "Interested in learning more? Read": "¿Interesado en aprender más? Leer",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Cuando se recibe correo nuevo de un remitente, nuestros servidores de intercambio de correo escriben en un buzón individual, temporal y cifrado para usted.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "Puede leer y escribir en su buzón cuando accede a él. La próxima vez que su cliente de correo electrónico intente buscar correo o sincronizaciones, sus nuevos mensajes se transferirán desde este buzón temporal y se almacenarán en el archivo de su buzón real utilizando la contraseña proporcionada. Tenga en cuenta que este buzón temporal se purga y elimina posteriormente para que solo su buzón protegido con contraseña tenga los mensajes.",
+ "Write-ahead-log (\"": "Registro de escritura anticipada (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "para lecturas y escrituras simultáneas en sus buzones de correo SQLite cifrados.",
+ "Reads": "Lee",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "a una de nuestras direcciones IP de Digital Ocean, y su cliente de escritorio puede resolver una IP separada desde una diferente",
+ "provider": "proveedor",
+ "altogether.": "en total.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Independientemente del servidor IMAP al que se conecte su cliente de correo electrónico, queremos que la conexión lea desde su base de datos en tiempo real con 100% de precisión:",
+ "This is accomplished by using": "Esto se logra utilizando",
+ "(the default).": "(el valor por defecto).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "En lugar de utilizar la memoria caché del disco local, la memoria caché se lee directamente desde el montaje remoto (su base de datos) en tiempo real.",
+ "In the event that the local file cannot be found, this indicates that": "En el caso de que no se pueda encontrar el archivo local, esto indica que",
+ "failed to mount or has an issue. In this case we use a": "No se pudo montar o tiene un problema. En este caso utilizamos un",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "respaldo para lecturas (que disminuye ligeramente el rendimiento, pero aún mantiene la integridad del servicio).",
+ "Writes": "escribe",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Escribir en su base de datos es un poco diferente, ya que SQLite es una base de datos integrada y su buzón de correo se encuentra en un solo archivo de forma predeterminada.",
+ "We had explored options such as": "Habíamos explorado opciones como",
+ "To accomplish writes with write-ahead-logging (\"": "Para realizar escrituras con registro de escritura anticipada (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") habilitado: debemos asegurarnos de que solo un servidor (\"Primario\") sea responsable de hacerlo.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "acelera drásticamente la concurrencia y permite un escritor y varios lectores.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "El primario se ejecuta en los servidores de datos con los volúmenes montados que contienen los buzones de correo cifrados. Desde el punto de vista de la distribución, podría considerar todos los servidores IMAP individuales detrás",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Extensión de cifrado para SQLite que permite cifrar archivos completos de bases de datos (incluido el registro de escritura anticipada (\"",
+ "\"), journal, rollback, …).": "\"), diario, reversión, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "existen, pero no se centran en el registro de escritura anticipada (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") soporte, así que terminamos revisando Litestream. Afortunadamente, nuestro uso de cifrado ya cifra el",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "archivos por nosotros, por lo que no necesitamos depender de Litestream para eso. Sin embargo, todavía no confiábamos en Litestream para uso en producción y tenemos algunas notas a continuación al respecto.",
+ "Please read our deep-dive article": "Lea nuestro artículo detallado",
+ "on": "en",
+ "how our encrypted SQLite mailbox storage feature works": "cómo funciona nuestra función de almacenamiento de buzones de correo SQLite cifrados",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "limitación de almacenamiento (se puede comprar almacenamiento adicional con pago por uso)."
}
\ No newline at end of file
diff --git a/locales/fi.json b/locales/fi.json
index f327c517df..3c8a340e5c 100644
--- a/locales/fi.json
+++ b/locales/fi.json
@@ -5239,5 +5239,43 @@
"If for any reason the Secondary servers have read issues with": "Jos toissijaisilla palvelimilla on jostain syystä lukuongelmia",
"(e.g. the mount failed or the": "(esim. kiinnitys epäonnistui tai",
"file for the given alias cannot be found) – then it will fallback to use the": "tiedostoa annetulle aliakselle ei löydy) – silloin se palaa käyttämään",
- "connection for reads.": "liitäntä lukemista varten."
+ "connection for reads.": "liitäntä lukemista varten.",
+ "feature for": "ominaisuus varten",
+ "In November 2023, we launched our": "Marraskuussa 2023 lanseerasimme meidän",
+ "encrypted mailbox storage": "salattu postilaatikon tallennustila",
+ "IMAP suppport": "IMAP-tuki",
+ "Concurrency": "Samanaikaisuus",
+ "Backups": "Varmuuskopiot",
+ "Interested in learning more? Read": "Oletko kiinnostunut oppimaan lisää? Lukea",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Kun sinulle saapuu uutta postia lähettäjältä, sähköpostinvaihtopalvelimemme kirjoittavat puolestasi yksittäiseen, väliaikaiseen ja salattuun postilaatikkoon.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "voi lukea postilaatikkoasi ja kirjoittaa siihen, kun käytät sitä. Kun sähköpostiohjelmasi yrittää seuraavan kerran pollata postia tai synkronoida, uudet viestisi siirretään tästä väliaikaisesta postilaatikosta ja tallennetaan todelliseen postilaatikkotiedostoosi antamaasi salasanalla. Huomaa, että tämä väliaikainen postilaatikko tyhjennetään ja poistetaan jälkeenpäin, joten vain salasanalla suojatussa postilaatikossasi on viestit.",
+ "Write-ahead-log (\"": "Kirjoita eteenpäin-loki (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "samanaikaista lukemista ja kirjoittamista varten salattuihin SQLite-postilaatikoihisi.",
+ "Reads": "Lukee",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "johonkin Digital Ocean IP-osoitteistamme – ja pöytätietokoneesi voi ratkaista erillisen IP-osoitteen toisesta",
+ "provider": "tarjoaja",
+ "altogether.": "yhteensä.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Riippumatta siitä, mihin IMAP-palvelimeen sähköpostiohjelmasi muodostaa yhteyden, haluamme yhteyden lukevan tietokannastasi reaaliajassa 100 %:n tarkkuudella:",
+ "This is accomplished by using": "Tämä saadaan aikaan käyttämällä",
+ "(the default).": "(oletusarvo).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Paikallisen levyvälimuistin sijaan välimuisti luetaan suoraan etäliitännästä (tietokannastasi) reaaliajassa.",
+ "In the event that the local file cannot be found, this indicates that": "Jos paikallista tiedostoa ei löydy, tämä osoittaa sen",
+ "failed to mount or has an issue. In this case we use a": "asennus epäonnistui tai siinä on ongelma. Tässä tapauksessa käytämme a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "varaluku lukuihin (joka heikentää hieman suorituskykyä, mutta säilyttää silti palvelun eheyden).",
+ "Writes": "Kirjoittaa",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Tietokantaan kirjoittaminen on hieman erilaista – koska SQLite on sulautettu tietokanta ja postilaatikkosi on oletuksena yhdessä tiedostossa.",
+ "We had explored options such as": "Pohdimme vaihtoehtoja mm",
+ "To accomplish writes with write-ahead-logging (\"": "Kirjoitusten suorittaminen eteenpäinkirjoituslokin avulla (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") käytössä – meidän on varmistettava, että vain yksi palvelin (\"Ensisijainen\") on vastuussa siitä.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "nopeuttaa dramaattisesti samanaikaisuutta ja sallii yhden kirjoittajan ja useita lukijoita.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Ensisijainen on käynnissä tietopalvelimissa, joissa on liitetyt taltiot, jotka sisältävät salatut postilaatikot. Jakelun näkökulmasta voit tarkastella kaikkia takana olevia yksittäisiä IMAP-palvelimia",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "SQLiten salauslaajennus mahdollistaa kokonaisten tietokantatiedostojen salaamisen (mukaan lukien eteenpäinkirjoitusloki (\"",
+ "\"), journal, rollback, …).": "\"), päiväkirja, palautus...).",
+ "exist, but they are not focused on write-ahead-log (\"": "olemassa, mutta ne eivät ole keskittyneet kirjoitus eteenpäin-lokiin (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") -tuki – joten päädyimme tarkistamaan Litestreamin. Onneksi salauskäyttömme salaa jo",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "tiedostot meille, joten meidän ei tarvitse luottaa Litestreamiin. Emme kuitenkaan olleet vielä varmoja Litestreamista tuotantokäyttöön, ja alla on muutamia huomautuksia siitä.",
+ "Please read our deep-dive article": "Lue syvällinen artikkelimme",
+ "on": "päällä",
+ "how our encrypted SQLite mailbox storage feature works": "miten salatun SQLite-postilaatikon tallennustoimintomme toimii",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "tallennustilarajoitus (lisätallennustilaa voi ostaa jakomaksulla)."
}
\ No newline at end of file
diff --git a/locales/fr.json b/locales/fr.json
index daf0c11fe4..dac72f6d42 100644
--- a/locales/fr.json
+++ b/locales/fr.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Si, pour une raison quelconque, les serveurs secondaires ont des problèmes de lecture avec",
"(e.g. the mount failed or the": "(par exemple, le montage a échoué ou le",
"file for the given alias cannot be found) – then it will fallback to use the": "le fichier pour l'alias donné est introuvable) – alors il faudra utiliser le",
- "connection for reads.": "connexion pour les lectures."
+ "connection for reads.": "connexion pour les lectures.",
+ "feature for": "fonctionnalité pour",
+ "In November 2023, we launched our": "En novembre 2023, nous avons lancé notre",
+ "encrypted mailbox storage": "stockage de boîte aux lettres crypté",
+ "IMAP suppport": "Prise en charge IMAP",
+ "Concurrency": "Concurrence",
+ "Backups": "Sauvegardes",
+ "Interested in learning more? Read": "Vous souhaitez en savoir plus ? Lire",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Lorsqu'un nouveau courrier vous est envoyé par un expéditeur, nos serveurs d'échange de courrier écrivent pour vous dans une boîte aux lettres individuelle, temporaire et cryptée.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "peut lire et écrire dans votre boîte aux lettres lorsque vous y accédez. La prochaine fois que votre client de messagerie tentera d'interroger du courrier ou de procéder à des synchronisations, vos nouveaux messages seront transférés depuis cette boîte aux lettres temporaire et stockés dans votre fichier de boîte aux lettres actuel à l'aide du mot de passe que vous avez fourni. Notez que cette boîte aux lettres temporaire est purgée et supprimée par la suite afin que seule votre boîte aux lettres protégée par mot de passe contienne les messages.",
+ "Write-ahead-log (\"": "Journal à écriture anticipée (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "pour les lectures et écritures simultanées dans vos boîtes aux lettres SQLite chiffrées.",
+ "Reads": "Lit",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "à l’une de nos adresses IP Digital Ocean – et votre client de bureau peut résoudre une adresse IP distincte à partir d’une autre",
+ "provider": "fournisseur",
+ "altogether.": "tout à fait.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Quel que soit le serveur IMAP auquel votre client de messagerie se connecte, nous souhaitons que la connexion lise votre base de données en temps réel avec une précision de 100 % :",
+ "This is accomplished by using": "Ceci est réalisé en utilisant",
+ "(the default).": "(le défaut).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Au lieu d'utiliser le cache disque local, le cache est lu directement à partir du montage distant (votre base de données) en temps réel.",
+ "In the event that the local file cannot be found, this indicates that": "Dans le cas où le fichier local est introuvable, cela indique que",
+ "failed to mount or has an issue. In this case we use a": "n'a pas réussi à monter ou a un problème. Dans ce cas, nous utilisons un",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "repli pour les lectures (ce qui diminue légèrement les performances, mais maintient toujours l'intégrité du service).",
+ "Writes": "Écrit",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "L'écriture dans votre base de données est un peu différente, puisque SQLite est une base de données intégrée et que votre boîte aux lettres réside par défaut dans un seul fichier.",
+ "We had explored options such as": "Nous avions exploré des options telles que",
+ "To accomplish writes with write-ahead-logging (\"": "Pour réaliser des écritures avec journalisation en écriture anticipée (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") activé – nous devons nous assurer qu'un seul serveur (\"Primaire\") est responsable de cela.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "accélère considérablement la concurrence et permet à un seul rédacteur et à plusieurs lecteurs.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Le primaire s'exécute sur les serveurs de données avec les volumes montés contenant les boîtes aux lettres chiffrées. Du point de vue de la distribution, vous pouvez considérer tous les serveurs IMAP individuels derrière",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Extension de chiffrement pour SQLite permettant de chiffrer des fichiers de base de données entiers (y compris le journal à écriture anticipée (\"",
+ "\"), journal, rollback, …).": "\"), journal, rollback, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "existent, mais ils ne sont pas axés sur le journal à écriture anticipée (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") support – nous avons donc fini par examiner Litestream. Heureusement, notre utilisation du cryptage crypte déjà le",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "fichiers pour nous, nous n'avons donc pas besoin de compter sur Litestream pour cela. Cependant, nous n'avions pas encore confiance dans Litestream pour une utilisation en production et nous avons quelques notes ci-dessous à ce sujet.",
+ "Please read our deep-dive article": "Veuillez lire notre article approfondi",
+ "on": "sur",
+ "how our encrypted SQLite mailbox storage feature works": "comment fonctionne notre fonctionnalité de stockage de boîte aux lettres SQLite cryptée",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "limitation de stockage (un espace de stockage supplémentaire peut être acheté avec paiement à l'utilisation)."
}
\ No newline at end of file
diff --git a/locales/he.json b/locales/he.json
index ddc883a22d..e21327cfe6 100644
--- a/locales/he.json
+++ b/locales/he.json
@@ -5013,7 +5013,7 @@
"Google": "גוגל",
"$7.20/mo": "$7.20 לחודש",
"30 GB pooled": "30 GB מאוחד",
- "Mailgun": "Mailgun",
+ "Mailgun": "דואר רובה",
"Microsoft 365": "Microsoft 365",
"$6/mo billed annually ($72/year)": "$6 לחודש מחויב בשנה ($72 לשנה)",
"1 TB pooled": "1 TB מאוחד",
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "אם מסיבה כלשהי לשרתים המשניים יש בעיות בקריאה עם",
"(e.g. the mount failed or the": "(למשל, ההר נכשל או ה",
"file for the given alias cannot be found) – then it will fallback to use the": "לא ניתן למצוא את הקובץ עבור הכינוי הנתון) - אז הוא יחזור להשתמש ב-",
- "connection for reads.": "חיבור לקריאה."
+ "connection for reads.": "חיבור לקריאה.",
+ "feature for": "תכונה עבור",
+ "In November 2023, we launched our": "בנובמבר 2023 השקנו את שלנו",
+ "encrypted mailbox storage": "אחסון תיבת דואר מוצפן",
+ "IMAP suppport": "תמיכה ב-IMAP",
+ "Concurrency": "במקביל",
+ "Backups": "גיבויים",
+ "Interested in learning more? Read": "מעוניינים ללמוד עוד? לקרוא",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "כאשר דואר חדש מתקבל עבורך משולח, שרתי חילופי הדואר שלנו כותבים לתיבת דואר בודדת, זמנית ומוצפנת עבורך.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "יכול לקרוא ולכתוב לתיבת הדואר שלך כאשר אתה ניגש אליה. בפעם הבאה שלקוח הדואר שלך ינסה לבצע סקר לאימייל או לסנכרן, ההודעות החדשות שלך יועברו מתיבת הדואר הזמנית הזו ויאוחסנו בקובץ תיבת הדואר האמיתי שלך באמצעות הסיסמה שסיפקת. שים לב שתיבת הדואר הזמנית הזו נמחקת ונמחקת לאחר מכן, כך שרק תיבת הדואר המוגנת בסיסמה שלך מכילה את ההודעות.",
+ "Write-ahead-log (\"": "Write-ahead-log (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "לקריאה וכתיבה במקביל לתיבות הדואר המוצפנות של SQLite.",
+ "Reads": "קורא",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "לאחת מכתובות ה-IP Digital Ocean שלנו - ולקוח שולחן העבודה שלך עשוי לפתור כתובת IP נפרדת משל אחרת",
+ "provider": "ספק",
+ "altogether.": "לְגַמרֵי.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "לא משנה לאיזה שרת IMAP מתחבר לקוח הדוא\"ל שלך, אנו רוצים שהחיבור יקרא ממסד הנתונים שלך בזמן אמת עם דיוק של 100%:",
+ "This is accomplished by using": "זה מושג על ידי שימוש",
+ "(the default).": "(ברירת המחדל).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "במקום להשתמש במטמון דיסק מקומי, המטמון נקרא ישירות מהרכיב המרוחק (בסיס הנתונים שלך) בזמן אמת.",
+ "In the event that the local file cannot be found, this indicates that": "במקרה שלא ניתן למצוא את הקובץ המקומי, זה מעיד על כך",
+ "failed to mount or has an issue. In this case we use a": "נכשל בהרכבה או שיש לו בעיה. במקרה זה אנו משתמשים ב-a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "חזרה לקריאה (שמפחיתה מעט את הביצועים, אך עדיין שומרת על שלמות השירות).",
+ "Writes": "כותב",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "הכתיבה למסד הנתונים שלך היא קצת שונה - מכיוון ש- SQLite הוא מסד נתונים משובץ ותיבת הדואר שלך חיה בקובץ בודד כברירת מחדל.",
+ "We had explored options such as": "בדקנו אפשרויות כגון",
+ "To accomplish writes with write-ahead-logging (\"": "כדי לבצע כתיבה עם רישום-לפני כן (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") מופעל - עלינו לוודא שרק שרת אחד (\"ראשי\") אחראי לעשות זאת.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "מאיץ בצורה דרסטית את המקבילות ומאפשר כותב אחד ומספר קוראים.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "ה-Primary פועל על שרתי הנתונים עם אמצעי האחסון המורכבים המכילים את תיבות הדואר המוצפנות. מנקודת מבט של הפצה, אתה יכול לשקול את כל שרתי ה-IMAP הבודדים שמאחוריהם",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "תוסף הצפנה עבור SQLite כדי לאפשר הצפנת קבצי מסד נתונים שלמים (כולל ה-write-ahead-log (\"",
+ "\"), journal, rollback, …).": "\"), יומן, חזרה לאחור, ...).",
+ "exist, but they are not focused on write-ahead-log (\"": "קיימים, אבל הם לא מתמקדים ב-write-ahead-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") תמיכה - אז בסופו של דבר בדקנו את Litestream. למרבה המזל, השימוש בהצפנה שלנו כבר מצפין את",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "קבצים עבורנו, אז אנחנו לא צריכים להסתמך על Litestream בשביל זה. עם זאת, עדיין לא היינו בטוחים ב-Litestream לשימוש בייצור ויש לנו כמה הערות בהמשך.",
+ "Please read our deep-dive article": "אנא קרא את מאמר הצלילה העמוקה שלנו",
+ "on": "עַל",
+ "how our encrypted SQLite mailbox storage feature works": "כיצד פועלת תכונת האחסון של תיבת הדואר של SQLite המוצפנת שלנו",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "מגבלת אחסון (ניתן לרכוש שטח אחסון נוסף עם תשלום לפי שימוש)."
}
\ No newline at end of file
diff --git a/locales/hu.json b/locales/hu.json
index 24087505fd..ab3ed8e05a 100644
--- a/locales/hu.json
+++ b/locales/hu.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Ha bármilyen okból a másodlagos kiszolgálóknak olvasási problémái vannak a",
"(e.g. the mount failed or the": "(pl. a mount nem sikerült vagy a",
"file for the given alias cannot be found) – then it will fallback to use the": "az adott álnévhez tartozó fájl nem található) – akkor visszavált a",
- "connection for reads.": "csatlakozás az olvasáshoz."
+ "connection for reads.": "csatlakozás az olvasáshoz.",
+ "feature for": "funkció számára",
+ "In November 2023, we launched our": "2023 novemberében indítottuk útjára",
+ "encrypted mailbox storage": "titkosított postafiók tárhely",
+ "IMAP suppport": "IMAP támogatás",
+ "Concurrency": "Egyidejűség",
+ "Backups": "Biztonsági mentések",
+ "Interested in learning more? Read": "Érdekel többet tanulni? Olvas",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Amikor új levelet kap egy feladótól, levelezőszervereink egyéni, ideiglenes és titkosított postafiókba írnak.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "olvashat és írhat a postafiókjába, amikor hozzáfér. A következő alkalommal, amikor az e-mail kliens megpróbálja lekérdezni a leveleket vagy szinkronizál, az új üzenetek átkerülnek ebből az ideiglenes postafiókból, és a megadott jelszavával a tényleges postafiókfájlban tárolódnak. Vegye figyelembe, hogy ezt az ideiglenes postafiókot utólag törli, így csak a jelszóval védett postafiókja tartalmazza az üzeneteket.",
+ "Write-ahead-log (\"": "Írás előre-napló (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "a titkosított SQLite-postafiókok egyidejű olvasásához és írásához.",
+ "Reads": "Olvas",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "az egyik Digital Ocean IP-címünkre – és az asztali kliens egy másik IP-címet oldhat fel",
+ "provider": "szolgáltató",
+ "altogether.": "teljesen.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Függetlenül attól, hogy az e-mail kliens melyik IMAP-kiszolgálóhoz csatlakozik, azt szeretnénk, hogy a kapcsolat valós időben, 100%-os pontossággal olvassa be az adatbázisát:",
+ "This is accomplished by using": "Ezt használatával érik el",
+ "(the default).": "(az alapértelmezett).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "A helyi lemezgyorsítótár használata helyett a gyorsítótár közvetlenül a távoli csatlakoztatásról (az adatbázisból) valós időben kerül beolvasásra.",
+ "In the event that the local file cannot be found, this indicates that": "Abban az esetben, ha a helyi fájl nem található, ez azt jelzi",
+ "failed to mount or has an issue. In this case we use a": "nem sikerült felszerelni, vagy probléma van. Ebben az esetben a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "tartalék az olvasáshoz (ami kissé csökkenti a teljesítményt, de továbbra is megőrzi a szolgáltatás integritását).",
+ "Writes": "Ír",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Az adatbázisba írás egy kicsit más – mivel az SQLite egy beágyazott adatbázis, és a postaládája alapértelmezés szerint egyetlen fájlban él.",
+ "We had explored options such as": "Olyan lehetőségeket vizsgáltunk, mint pl",
+ "To accomplish writes with write-ahead-logging (\"": "Írások végrehajtása előreírás-naplózással (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") engedélyezve – biztosítanunk kell, hogy csak egy szerver (\"Elsődleges\") legyen felelős ezért.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "drasztikusan felgyorsítja az egyidejűséget, és lehetővé teszi egy író és több olvasó számára.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Az Elsődleges az adatkiszolgálókon fut a titkosított postafiókokat tartalmazó csatolt kötetekkel. Elosztási szempontból figyelembe veheti az összes mögöttes IMAP-kiszolgálót",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Az SQLite titkosítási kiterjesztése, amely lehetővé teszi a teljes adatbázisfájlok titkosítását (beleértve az előreírási naplót (\"",
+ "\"), journal, rollback, …).": "\"), napló, visszaállítás, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "léteznek, de nem az előreírás-naplóra (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") támogatást – így végül megvizsgáltuk a Litestreamet. Szerencsére a titkosítási használatunk már titkosítja a",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "fájlokat nekünk, ezért nem kell a Litestream-re hagyatkoznunk. Azonban még nem voltunk biztosak a Litestream gyártási célú felhasználásában, és az alábbiakban néhány megjegyzést fűzünk ehhez.",
+ "Please read our deep-dive article": "Kérjük, olvassa el mélyreható cikkünket",
+ "on": "tovább",
+ "how our encrypted SQLite mailbox storage feature works": "hogyan működik a titkosított SQLite postafiók tárolási funkciónk",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "tárolási korlátozás (további tárhely vásárolható felosztó-kirovó fizetéssel)."
}
\ No newline at end of file
diff --git a/locales/id.json b/locales/id.json
index c63591d0a5..439f204222 100644
--- a/locales/id.json
+++ b/locales/id.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Jika karena alasan apa pun server Sekunder mengalami masalah pembacaan",
"(e.g. the mount failed or the": "(misalnya pemasangan gagal atau",
"file for the given alias cannot be found) – then it will fallback to use the": "file untuk alias yang diberikan tidak dapat ditemukan) – maka ia akan melakukan fallback untuk menggunakan",
- "connection for reads.": "koneksi untuk membaca."
+ "connection for reads.": "koneksi untuk membaca.",
+ "feature for": "fitur untuk",
+ "In November 2023, we launched our": "Pada bulan November 2023, kami meluncurkan",
+ "encrypted mailbox storage": "penyimpanan kotak surat terenkripsi",
+ "IMAP suppport": "dukungan IMAP",
+ "Concurrency": "Konkurensi",
+ "Backups": "Cadangan",
+ "Interested in learning more? Read": "Tertarik untuk mempelajari lebih lanjut? Membaca",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Ketika surat baru diterima untuk Anda dari pengirim, server pertukaran surat kami menulis ke kotak surat individual, sementara, dan terenkripsi untuk Anda.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "dapat membaca dan menulis ke kotak surat Anda saat Anda mengaksesnya. Saat berikutnya klien email Anda mencoba melakukan polling untuk email atau sinkronisasi, pesan baru Anda akan ditransfer dari kotak surat sementara ini dan disimpan dalam file kotak surat Anda yang sebenarnya menggunakan kata sandi yang Anda berikan. Perhatikan bahwa kotak surat sementara ini akan dibersihkan dan dihapus setelahnya sehingga hanya kotak surat Anda yang dilindungi kata sandi yang memiliki pesan-pesan tersebut.",
+ "Write-ahead-log (\"": "Tulis-depan-log (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "untuk membaca dan menulis secara bersamaan ke kotak surat SQLite terenkripsi Anda.",
+ "Reads": "Membaca",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "ke salah satu alamat IP Digital Ocean kami – dan klien desktop Anda dapat menentukan IP terpisah dari IP lain",
+ "provider": "pemberi",
+ "altogether.": "sama sekali.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Terlepas dari server IMAP mana yang terhubung dengan klien email Anda, kami ingin koneksi tersebut membaca dari database Anda secara real-time dengan akurasi 100%:",
+ "This is accomplished by using": "Hal ini dicapai dengan menggunakan",
+ "(the default).": "(standarnya).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Daripada menggunakan cache disk lokal, cache dibaca langsung dari remote mount (database Anda) secara real-time.",
+ "In the event that the local file cannot be found, this indicates that": "Jika file lokal tidak dapat ditemukan, ini menunjukkan hal itu",
+ "failed to mount or has an issue. In this case we use a": "gagal dipasang atau mengalami masalah. Dalam hal ini kita menggunakan a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "fallback untuk pembacaan (yang sedikit menurunkan kinerja, namun tetap menjaga integritas layanan).",
+ "Writes": "Menulis",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Menulis ke database Anda sedikit berbeda – karena SQLite adalah database tertanam dan kotak surat Anda berada dalam satu file secara default.",
+ "We had explored options such as": "Kami telah mengeksplorasi opsi seperti",
+ "To accomplish writes with write-ahead-logging (\"": "Untuk menyelesaikan penulisan dengan write-ahead-logging (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") diaktifkan – kita perlu memastikan bahwa hanya satu server (\"Utama\") yang bertanggung jawab untuk melakukannya.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "secara drastis mempercepat konkurensi dan memungkinkan satu penulis dan banyak pembaca.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Primer berjalan di server data dengan volume terpasang yang berisi kotak surat terenkripsi. Dari sudut pandang distribusi, Anda dapat mempertimbangkan semua server IMAP individual di belakangnya",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Ekstensi enkripsi untuk SQLite untuk memungkinkan seluruh file database dienkripsi (termasuk write-ahead-log (\"",
+ "\"), journal, rollback, …).": "\"), jurnal, kembalikan,…).",
+ "exist, but they are not focused on write-ahead-log (\"": "ada, tetapi mereka tidak fokus pada write-ahead-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") dukungan – jadi kami akhirnya meninjau Litestream. Untungnya penggunaan enkripsi kami sudah mengenkripsinya",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "file untuk kami, jadi kami tidak perlu bergantung pada Litestream untuk itu. Namun kami belum yakin dengan Litestream untuk penggunaan produksi dan memiliki beberapa catatan di bawah ini.",
+ "Please read our deep-dive article": "Silakan baca artikel mendalam kami",
+ "on": "pada",
+ "how our encrypted SQLite mailbox storage feature works": "cara kerja fitur penyimpanan kotak surat SQLite terenkripsi kami",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "batasan penyimpanan (penyimpanan tambahan dapat dibeli dengan bayar sesuai pemakaian)."
}
\ No newline at end of file
diff --git a/locales/it.json b/locales/it.json
index cf7a41a60c..ba0db4da29 100644
--- a/locales/it.json
+++ b/locales/it.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Se per qualsiasi motivo i server secondari hanno riscontrato problemi di lettura",
"(e.g. the mount failed or the": "(ad esempio il montaggio non è riuscito o il",
"file for the given alias cannot be found) – then it will fallback to use the": "impossibile trovare il file per l'alias specificato), quindi verrà utilizzato il fallback",
- "connection for reads.": "connessione per le letture."
+ "connection for reads.": "connessione per le letture.",
+ "feature for": "funzionalità per",
+ "In November 2023, we launched our": "Nel novembre 2023 abbiamo lanciato il nostro",
+ "encrypted mailbox storage": "archiviazione di cassette postali crittografate",
+ "IMAP suppport": "Supporto IMAP",
+ "Concurrency": "Concorrenza",
+ "Backups": "Backup",
+ "Interested in learning more? Read": "Interessato a saperne di più? Leggere",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Quando ricevi nuova posta da un mittente, i nostri server di scambio di posta scrivono per te in una casella di posta individuale, temporanea e crittografata.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "può leggere e scrivere nella tua casella di posta quando accedi ad essa. La prossima volta che il tuo client di posta tenta di eseguire il polling per la posta o sincronizzazioni, i tuoi nuovi messaggi verranno trasferiti da questa casella di posta temporanea e archiviati nel file della casella di posta reale utilizzando la password fornita. Tieni presente che questa casella di posta temporanea viene successivamente eliminata ed eliminata in modo che solo la tua casella di posta protetta da password contenga i messaggi.",
+ "Write-ahead-log (\"": "Registro write-ahead (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "per letture e scritture simultanee sulle tue caselle di posta SQLite crittografate.",
+ "Reads": "Legge",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "a uno dei nostri indirizzi IP Digital Ocean – e il tuo client desktop potrebbe risolvere un IP separato da un altro",
+ "provider": "fornitore",
+ "altogether.": "del tutto.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Indipendentemente dal server IMAP a cui si connette il tuo client di posta elettronica, vogliamo che la connessione legga dal tuo database in tempo reale con una precisione del 100%:",
+ "This is accomplished by using": "Ciò si ottiene utilizzando",
+ "(the default).": "(il predefinito).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Invece di utilizzare la cache del disco locale, la cache viene letta direttamente dal montaggio remoto (il tuo database) in tempo reale.",
+ "In the event that the local file cannot be found, this indicates that": "Nel caso in cui non sia possibile trovare il file locale, ciò lo indica",
+ "failed to mount or has an issue. In this case we use a": "impossibile montarlo o presenta un problema. In questo caso usiamo a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "fallback per le letture (che riduce leggermente le prestazioni, ma mantiene comunque l'integrità del servizio).",
+ "Writes": "Scrive",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Scrivere nel tuo database è leggermente diverso, poiché SQLite è un database incorporato e la tua casella di posta risiede in un singolo file per impostazione predefinita.",
+ "We had explored options such as": "Avevamo esplorato opzioni come",
+ "To accomplish writes with write-ahead-logging (\"": "Per eseguire scritture con registrazione write-ahead (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") abilitato: dobbiamo garantire che solo un server (\"Primario\") sia responsabile di ciò.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "accelera drasticamente la concorrenza e consente uno scrittore e più lettori.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Il Primario è in esecuzione sui server di dati con i volumi montati contenenti le caselle di posta crittografate. Dal punto di vista della distribuzione, potresti considerare tutti i singoli server IMAP dietro",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Estensione di crittografia per SQLite per consentire la crittografia di interi file di database (incluso il log write-ahead (\"",
+ "\"), journal, rollback, …).": "\"), diario, rollback, ...).",
+ "exist, but they are not focused on write-ahead-log (\"": "esistono, ma non sono focalizzati sul log write-ahead (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") supporto, quindi abbiamo finito per recensire Litestream. Fortunatamente il nostro utilizzo della crittografia crittografa già il file",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "file per noi, quindi non abbiamo bisogno di fare affidamento su Litestream per questo. Tuttavia non eravamo ancora sicuri di Litestream per l'uso in produzione e di seguito abbiamo alcune note al riguardo.",
+ "Please read our deep-dive article": "Si prega di leggere il nostro articolo di approfondimento",
+ "on": "SU",
+ "how our encrypted SQLite mailbox storage feature works": "come funziona la nostra funzionalità di archiviazione della casella di posta SQLite crittografata",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "limitazione dello spazio di archiviazione (è possibile acquistare spazio di archiviazione aggiuntivo con pagamento in base al consumo)."
}
\ No newline at end of file
diff --git a/locales/ja.json b/locales/ja.json
index 11808ca703..889a886f13 100644
--- a/locales/ja.json
+++ b/locales/ja.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "何らかの理由でセカンダリ サーバーで読み取りの問題が発生した場合",
"(e.g. the mount failed or the": "(例: マウントが失敗した、または",
"file for the given alias cannot be found) – then it will fallback to use the": "指定されたエイリアスのファイルが見つかりません) – その場合はフォールバックして、",
- "connection for reads.": "読み取り用の接続。"
+ "connection for reads.": "読み取り用の接続。",
+ "feature for": "の機能",
+ "In November 2023, we launched our": "2023 年 11 月に、",
+ "encrypted mailbox storage": "暗号化されたメールボックスストレージ",
+ "IMAP suppport": "IMAPのサポート",
+ "Concurrency": "同時実行性",
+ "Backups": "バックアップ",
+ "Interested in learning more? Read": "さらに詳しく知りたいですか?読む",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "送信者から新しいメールを受信すると、メール交換サーバーが個別の一時的な暗号化メールボックスに書き込みます。",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "メールボックスにアクセスすると、メールボックスの読み書きができます。次回、電子メール クライアントがメールまたは同期のポーリングを試行すると、新しいメッセージはこの一時メールボックスから転送され、指定されたパスワードを使用して実際のメールボックス ファイルに保存されます。この一時メールボックスは後でパージおよび削除されるため、パスワードで保護されたメールボックスのみにメッセージが保存されることに注意してください。",
+ "Write-ahead-log (\"": "先行書き込みログ (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "暗号化された SQLite メールボックスへの同時読み取りと書き込み用。",
+ "Reads": "読み取り",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "Digital Ocean IP アドレスの 1 つに接続します。デスクトップ クライアントは、別の IP アドレスから別の IP を解決する場合があります。",
+ "provider": "プロバイダー",
+ "altogether.": "全く。",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "電子メール クライアントがどの IMAP サーバーに接続するかに関係なく、接続ではデータベースから 100% の精度でリアルタイムに読み取りを行う必要があります。",
+ "This is accomplished by using": "これは次を使用して実現されます",
+ "(the default).": "(デフォルト)。",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "ローカル ディスク キャッシュを使用する代わりに、キャッシュはリモート マウント (データベース) からリアルタイムで直接読み取られます。",
+ "In the event that the local file cannot be found, this indicates that": "ローカル ファイルが見つからない場合は、次のことを示します。",
+ "failed to mount or has an issue. In this case we use a": "マウントに失敗したか、問題があります。この場合は、",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "読み取りのフォールバック (パフォーマンスはわずかに低下しますが、サービスの整合性は維持されます)。",
+ "Writes": "書き込みます",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "データベースへの書き込みは少し異なります。SQLite は組み込みデータベースであり、メールボックスはデフォルトで単一のファイル内に存在するためです。",
+ "We had explored options such as": "私たちは次のようなオプションを検討しました",
+ "To accomplish writes with write-ahead-logging (\"": "先行書き込みログを使用して書き込みを実行するには (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") が有効になっている – 1 つのサーバー (「プライマリ」) だけがこれを行う責任があることを確認する必要があります。",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "同時実行速度が大幅に向上し、1 人のライターと複数のリーダーが可能になります。",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "プライマリは、暗号化されたメールボックスを含むボリュームがマウントされたデータ サーバー上で実行されます。分散の観点からは、背後にあるすべての個別の IMAP サーバーを考慮することができます。",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "SQLite の暗号化拡張機能により、データベース ファイル全体 (先行書き込みログを含む) を暗号化できるようになります (\"",
+ "\"), journal, rollback, …).": "\")、ジャーナル、ロールバック、…)。",
+ "exist, but they are not focused on write-ahead-log (\"": "存在しますが、ログ先行書き込みには重点が置かれていません (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") サポート – そこで、最終的に Litestream をレビューすることになりました。幸いなことに、暗号化の使用により、すでに",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "ファイルを自動的に作成してくれるため、Litestream に依存する必要はありません。ただし、本番環境での Litestream にまだ自信がなかったので、それについて以下にいくつかのメモを記載します。",
+ "Please read our deep-dive article": "詳細な記事をお読みください",
+ "on": "の上",
+ "how our encrypted SQLite mailbox storage feature works": "暗号化された SQLite メールボックス ストレージ機能の仕組み",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "ストレージ制限 (追加のストレージは従量課金制で購入できます)。"
}
\ No newline at end of file
diff --git a/locales/ko.json b/locales/ko.json
index 2740521686..0d4b7fc2c5 100644
--- a/locales/ko.json
+++ b/locales/ko.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "어떤 이유로든 보조 서버에 읽기 문제가 있는 경우",
"(e.g. the mount failed or the": "(예: 마운트가 실패했거나",
"file for the given alias cannot be found) – then it will fallback to use the": "해당 별칭에 대한 파일을 찾을 수 없음) – 그런 다음 대체하여",
- "connection for reads.": "읽기를 위한 연결입니다."
+ "connection for reads.": "읽기를 위한 연결입니다.",
+ "feature for": "기능",
+ "In November 2023, we launched our": "2023년 11월에 우리는",
+ "encrypted mailbox storage": "암호화된 사서함 저장소",
+ "IMAP suppport": "IMAP 지원",
+ "Concurrency": "동시성",
+ "Backups": "백업",
+ "Interested in learning more? Read": "더 자세히 알고 싶으십니까? 읽다",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "보낸 사람으로부터 새 메일이 수신되면 당사의 메일 교환 서버는 귀하를 위해 개별적이고 임시이며 암호화된 사서함에 기록합니다.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "당신이 그것에 접근할 때 당신의 편지함에 읽고 쓸 수 있습니다. 다음에 이메일 클라이언트가 메일이나 동기화를 폴링하려고 시도하면 새 메시지가 이 임시 편지함에서 전송되고 제공된 비밀번호를 사용하여 실제 편지함 파일에 저장됩니다. 이 임시 사서함은 이후에 제거 및 삭제되므로 비밀번호로 보호된 사서함에만 메시지가 보관됩니다.",
+ "Write-ahead-log (\"": "미리 쓰기-로그(\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "암호화된 SQLite 메일박스에 대한 동시 읽기 및 쓰기를 위해.",
+ "Reads": "읽기",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "Digital Ocean IP 주소 중 하나로 연결되며 귀하의 데스크톱 클라이언트는 다른 IP 주소에서 별도의 IP를 확인할 수 있습니다.",
+ "provider": "공급자",
+ "altogether.": "전부.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "귀하의 이메일 클라이언트가 어떤 IMAP 서버에 연결되어 있는지에 관계없이 우리는 100% 정확도로 데이터베이스에서 연결을 실시간으로 읽기를 원합니다.",
+ "This is accomplished by using": "이는 다음을 사용하여 수행됩니다.",
+ "(the default).": "(기본값).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "로컬 디스크 캐시를 사용하는 대신 실시간으로 원격 마운트(데이터베이스)에서 직접 캐시를 읽습니다.",
+ "In the event that the local file cannot be found, this indicates that": "로컬 파일을 찾을 수 없는 경우 이는 다음을 나타냅니다.",
+ "failed to mount or has an issue. In this case we use a": "마운트하지 못했거나 문제가 있습니다. 이 경우 우리는",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "읽기 대체(성능이 약간 저하되지만 서비스 무결성은 유지됨)",
+ "Writes": "쓰기",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "데이터베이스에 쓰기는 약간 다릅니다. SQLite는 내장형 데이터베이스이고 사서함은 기본적으로 단일 파일에 있기 때문입니다.",
+ "We had explored options such as": "우리는 다음과 같은 옵션을 탐색했습니다.",
+ "To accomplish writes with write-ahead-logging (\"": "미리 쓰기 로깅(\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") 활성화 – 단 하나의 서버(\"기본\")만 해당 작업을 담당하도록 해야 합니다.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "동시성 속도를 크게 높이고 하나의 작성자와 여러 명의 판독기를 허용합니다.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "기본 서버는 암호화된 메일함을 포함하는 마운트된 볼륨이 있는 데이터 서버에서 실행됩니다. 배포 관점에서 보면 뒤에 있는 모든 개별 IMAP 서버를 고려할 수 있습니다.",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "전체 데이터베이스 파일을 암호화할 수 있도록 하는 SQLite용 암호화 확장(미리 쓰기 로그(\"",
+ "\"), journal, rollback, …).": "\"), 저널, 롤백, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "존재하지만 미리 쓰기 로그(\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") 지원 – 그래서 우리는 Litestream을 검토하게 되었습니다. 다행히도 우리의 암호화 사용은 이미",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "파일을 제공하므로 이를 위해 Litestream에 의존할 필요가 없습니다. 그러나 우리는 프로덕션 용도로 Litestream에 대해 아직 확신이 없었으며 이에 대한 몇 가지 참고 사항이 아래에 있습니다.",
+ "Please read our deep-dive article": "심층 기사를 읽어보세요.",
+ "on": "~에",
+ "how our encrypted SQLite mailbox storage feature works": "암호화된 SQLite 메일박스 저장 기능의 작동 방식",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "저장 용량 제한(추가 저장 용량은 종량제 결제로 구매 가능)"
}
\ No newline at end of file
diff --git a/locales/nl.json b/locales/nl.json
index 098df62260..9f188480e9 100644
--- a/locales/nl.json
+++ b/locales/nl.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Als om welke reden dan ook de secundaire servers leesproblemen hebben met",
"(e.g. the mount failed or the": "(bijvoorbeeld de mount is mislukt of de",
"file for the given alias cannot be found) – then it will fallback to use the": "bestand voor de gegeven alias kan niet worden gevonden) – dan zal het terugvallen op het gebruik van de",
- "connection for reads.": "aansluiting voor lezen."
+ "connection for reads.": "aansluiting voor lezen.",
+ "feature for": "functie voor",
+ "In November 2023, we launched our": "In november 2023 lanceerden we onze",
+ "encrypted mailbox storage": "gecodeerde mailboxopslag",
+ "IMAP suppport": "IMAP-ondersteuning",
+ "Concurrency": "Gelijktijdigheid",
+ "Backups": "Back-ups",
+ "Interested in learning more? Read": "Wilt u meer weten? Lezen",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Wanneer er nieuwe e-mail voor u wordt ontvangen van een afzender, schrijven onze mailuitwisselingsservers voor u naar een individuele, tijdelijke en gecodeerde mailbox.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "kunt lezen en schrijven naar uw mailbox wanneer u deze opent. De volgende keer dat uw e-mailclient probeert te peilen naar e-mail of synchronisaties, worden uw nieuwe berichten overgebracht vanuit deze tijdelijke mailbox en opgeslagen in uw daadwerkelijke mailboxbestand met behulp van het door u opgegeven wachtwoord. Houd er rekening mee dat deze tijdelijke mailbox achteraf wordt opgeschoond en verwijderd, zodat alleen uw met een wachtwoord beveiligde mailbox de berichten bevat.",
+ "Write-ahead-log (\"": "Vooruitschrijven-log (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "voor gelijktijdige lees- en schrijfbewerkingen naar uw gecodeerde SQLite-mailboxen.",
+ "Reads": "Leest",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "naar een van onze Digital Ocean IP-adressen – en uw desktopclient kan een afzonderlijk IP-adres van een ander IP-adres omzetten",
+ "provider": "aanbieder",
+ "altogether.": "allemaal samen.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Ongeacht met welke IMAP-server uw e-mailclient verbinding maakt, we willen dat de verbinding in realtime en met 100% nauwkeurigheid uit uw database leest:",
+ "This is accomplished by using": "Dit wordt bereikt door gebruik te maken van",
+ "(the default).": "(de standaard).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "In plaats van de lokale schijfcache te gebruiken, wordt de cache in realtime rechtstreeks vanaf de externe mount (uw database) gelezen.",
+ "In the event that the local file cannot be found, this indicates that": "In het geval dat het lokale bestand niet kan worden gevonden, geeft dit dat aan",
+ "failed to mount or has an issue. In this case we use a": "Kan niet worden geactiveerd of heeft een probleem. In dit geval gebruiken we een",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "fallback voor leesbewerkingen (waardoor de prestaties enigszins afnemen, maar nog steeds de integriteit van de service behouden blijft).",
+ "Writes": "Schrijft",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Schrijven naar uw database is een beetje anders – aangezien SQLite een ingebedde database is en uw mailbox standaard in één bestand staat.",
+ "We had explored options such as": "We hadden opties onderzocht zoals",
+ "To accomplish writes with write-ahead-logging (\"": "Om schrijfbewerkingen uit te voeren met write-ahead-logging (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") ingeschakeld – we moeten ervoor zorgen dat slechts één server (\"Primair\") hiervoor verantwoordelijk is.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "versnelt de gelijktijdigheid drastisch en maakt één schrijver en meerdere lezers mogelijk.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "De Primary draait op de dataservers met de gekoppelde volumes die de gecodeerde mailboxen bevatten. Vanuit distributieoogpunt zou je alle individuele IMAP-servers erachter kunnen overwegen",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Versleutelingsextensie voor SQLite waarmee volledige databasebestanden kunnen worden gecodeerd (inclusief het write-ahead-log (\"",
+ "\"), journal, rollback, …).": "\"), journaal, terugdraaien, ...).",
+ "exist, but they are not focused on write-ahead-log (\"": "bestaan, maar ze zijn niet gericht op write-ahead-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") ondersteuning – dus hebben we Litestream beoordeeld. Gelukkig codeert ons versleutelingsgebruik de",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "bestanden voor ons, dus daarvoor zijn we niet afhankelijk van Litestream. We hadden echter nog geen vertrouwen in Litestream voor productiegebruik en hebben daarover hieronder een paar opmerkingen.",
+ "Please read our deep-dive article": "Lees ons diepgaande artikel",
+ "on": "op",
+ "how our encrypted SQLite mailbox storage feature works": "hoe onze gecodeerde SQLite-mailboxopslagfunctie werkt",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "opslagbeperking (extra opslagruimte kan worden aangeschaft met pay-as-you-go)."
}
\ No newline at end of file
diff --git a/locales/no.json b/locales/no.json
index 5514f12c43..7696f2bb38 100644
--- a/locales/no.json
+++ b/locales/no.json
@@ -5399,5 +5399,43 @@
"If for any reason the Secondary servers have read issues with": "Hvis sekundærservere av en eller annen grunn har lest problemer med",
"(e.g. the mount failed or the": "(f.eks. feilet monteringen eller",
"file for the given alias cannot be found) – then it will fallback to use the": "filen for det gitte aliaset kan ikke bli funnet) – da vil den falle tilbake til å bruke",
- "connection for reads.": "tilkobling for lesninger."
+ "connection for reads.": "tilkobling for lesninger.",
+ "feature for": "funksjon for",
+ "In November 2023, we launched our": "I november 2023 lanserte vi vår",
+ "encrypted mailbox storage": "kryptert postkasselagring",
+ "IMAP suppport": "IMAP-støtte",
+ "Concurrency": "Samtidighet",
+ "Backups": "Sikkerhetskopier",
+ "Interested in learning more? Read": "Interessert i å lære mer? Lese",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Når ny e-post mottas for deg fra en avsender, skriver våre e-postutvekslingsservere til en individuell, midlertidig og kryptert postboks for deg.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "kan lese og skrive til postkassen når du har tilgang til den. Neste gang e-postklienten din prøver å spørre etter e-post eller synkroniseres, vil de nye meldingene dine bli overført fra denne midlertidige postkassen og lagret i den faktiske postkassefilen ved hjelp av passordet du har oppgitt. Merk at denne midlertidige postkassen blir tømt og slettet etterpå, slik at bare den passordbeskyttede postkassen din har meldingene.",
+ "Write-ahead-log (\"": "Write-ahead-log (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "for samtidig lesing og skriving til dine krypterte SQLite-postbokser.",
+ "Reads": "Leser",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "til en av våre Digital Ocean IP-adresser – og skrivebordsklienten din kan løse en separat IP fra en annen",
+ "provider": "forsørger",
+ "altogether.": "totalt.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Uansett hvilken IMAP-server e-postklienten din kobler til, vil vi at tilkoblingen skal lese fra databasen din i sanntid med 100 % nøyaktighet:",
+ "This is accomplished by using": "Dette oppnås ved å bruke",
+ "(the default).": "(Standaren).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "I stedet for å bruke lokal diskbuffer, leses hurtigbufferen direkte fra fjernmonteringen (databasen din) i sanntid.",
+ "In the event that the local file cannot be found, this indicates that": "I tilfelle den lokale filen ikke kan bli funnet, indikerer dette det",
+ "failed to mount or has an issue. In this case we use a": "kunne ikke montere eller har et problem. I dette tilfellet bruker vi en",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "fallback for lesninger (som reduserer ytelsen litt, men fortsatt opprettholder integriteten til tjenesten).",
+ "Writes": "Skriver",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Å skrive til databasen din er litt annerledes - siden SQLite er en innebygd database og postkassen din lever i en enkelt fil som standard.",
+ "We had explored options such as": "Vi hadde utforsket alternativer som f.eks",
+ "To accomplish writes with write-ahead-logging (\"": "For å få til skriving med forutgående logging (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") aktivert – vi må sørge for at bare én server (\"Primær\") er ansvarlig for å gjøre det.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "øker drastisk samtidighet og tillater én forfatter og flere lesere.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Primæren kjører på dataserverne med de monterte volumene som inneholder de krypterte postboksene. Fra et distribusjonssynspunkt kan du vurdere alle de individuelle IMAP-serverne bak",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Krypteringsutvidelse for SQLite for å tillate at hele databasefiler krypteres (inkludert skrive-ahead-loggen (\"",
+ "\"), journal, rollback, …).": "\"), journal, tilbakeføring, ...).",
+ "exist, but they are not focused on write-ahead-log (\"": "eksisterer, men de er ikke fokusert på write-ahead-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") støtte – så vi endte opp med å vurdere Litestream. Heldigvis krypterer krypteringsbruken vår allerede",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "filer for oss, så vi trenger ikke stole på Litestream for det. Imidlertid var vi ennå ikke sikre på Litestream for produksjonsbruk, og har noen merknader nedenfor om det.",
+ "Please read our deep-dive article": "Les vår dypdykkartikkel",
+ "on": "på",
+ "how our encrypted SQLite mailbox storage feature works": "hvordan vår krypterte SQLite postbokslagringsfunksjon fungerer",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "lagringsbegrensning (ytterligere lagringsplass kan kjøpes med pay-as-you-go)."
}
\ No newline at end of file
diff --git a/locales/pl.json b/locales/pl.json
index c3d20e16d5..09e48afc49 100644
--- a/locales/pl.json
+++ b/locales/pl.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Jeśli z jakiegoś powodu serwery pomocnicze mają problemy z odczytem",
"(e.g. the mount failed or the": "(np. montaż nie powiódł się lub",
"file for the given alias cannot be found) – then it will fallback to use the": "nie można znaleźć pliku dla danego aliasu) – wówczas nastąpi powrót do użycia pliku",
- "connection for reads.": "połączenie do odczytu."
+ "connection for reads.": "połączenie do odczytu.",
+ "feature for": "funkcja dla",
+ "In November 2023, we launched our": "W listopadzie 2023 roku uruchomiliśmy nasz",
+ "encrypted mailbox storage": "szyfrowane przechowywanie skrzynek pocztowych",
+ "IMAP suppport": "Obsługa protokołu IMAP",
+ "Concurrency": "Konkurencja",
+ "Backups": "Kopie zapasowe",
+ "Interested in learning more? Read": "Chcesz dowiedzieć się więcej? Czytać",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Po otrzymaniu nowej poczty od nadawcy nasze serwery wymiany poczty zapisują ją w indywidualnej, tymczasowej i zaszyfrowanej skrzynce pocztowej.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "może czytać i pisać w Twojej skrzynce pocztowej, gdy uzyskujesz do niej dostęp. Następnym razem, gdy Twój klient poczty e-mail będzie próbował odpytać pocztę lub przeprowadzić synchronizację, nowe wiadomości zostaną przeniesione z tymczasowej skrzynki pocztowej i zapisane w rzeczywistym pliku skrzynki pocztowej przy użyciu podanego hasła. Pamiętaj, że ta tymczasowa skrzynka pocztowa jest później czyszczona i usuwana, dzięki czemu wiadomości znajdują się tylko w Twojej skrzynce pocztowej chronionej hasłem.",
+ "Write-ahead-log (\"": "Dziennik zapisu z wyprzedzeniem („",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "do równoczesnych odczytów i zapisów w zaszyfrowanych skrzynkach pocztowych SQLite.",
+ "Reads": "Czyta",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "na jeden z naszych adresów IP Digital Ocean – a Twój klient stacjonarny może rozpoznać oddzielny adres IP od innego",
+ "provider": "dostawca",
+ "altogether.": "całkowicie.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Niezależnie od tego, z jakim serwerem IMAP łączy się Twój klient poczty e-mail, chcemy, aby połączenie odczytywało Twoją bazę danych w czasie rzeczywistym ze 100% dokładnością:",
+ "This is accomplished by using": "Osiąga się to za pomocą",
+ "(the default).": "(domyślny).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Zamiast korzystać z lokalnej pamięci podręcznej dysku, pamięć podręczna jest odczytywana bezpośrednio ze zdalnego podłączenia (twoja baza danych) w czasie rzeczywistym.",
+ "In the event that the local file cannot be found, this indicates that": "W przypadku, gdy nie można znaleźć pliku lokalnego, oznacza to, że",
+ "failed to mount or has an issue. In this case we use a": "nie udało się zamontować lub wystąpił problem. W tym przypadku używamy a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "rezerwa dla odczytów (co nieznacznie zmniejsza wydajność, ale nadal utrzymuje integralność usługi).",
+ "Writes": "Pisze",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Zapisywanie w bazie danych przebiega nieco inaczej – ponieważ SQLite jest wbudowaną bazą danych, a Twoja skrzynka pocztowa domyślnie znajduje się w jednym pliku.",
+ "We had explored options such as": "Rozważaliśmy opcje takie jak",
+ "To accomplish writes with write-ahead-logging (\"": "Aby wykonać zapisy z rejestrowaniem zapisu z wyprzedzeniem (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "„) włączone – musimy upewnić się, że tylko jeden serwer („Podstawowy”) jest za to odpowiedzialny.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "drastycznie przyspiesza współbieżność i umożliwia jednemu pisarzowi i wielu czytelnikom.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Jednostka podstawowa działa na serwerach danych z zamontowanymi woluminami zawierającymi zaszyfrowane skrzynki pocztowe. Z punktu widzenia dystrybucji można wziąć pod uwagę wszystkie pojedyncze serwery IMAP",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Rozszerzenie szyfrowania dla SQLite umożliwiające szyfrowanie całych plików bazy danych (w tym dziennika zapisu z wyprzedzeniem („",
+ "\"), journal, rollback, …).": "\"), dziennik, wycofanie, ...).",
+ "exist, but they are not focused on write-ahead-log (\"": "istnieją, ale nie skupiają się na dzienniku zapisu z wyprzedzeniem („",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") - więc ostatecznie sprawdziliśmy Litestream. Na szczęście nasze użycie szyfrowania już szyfruje",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "plików za nas, więc nie musimy w tym celu polegać na Litestream. Jednak nie byliśmy jeszcze pewni Litestream do użytku produkcyjnego i poniżej zamieszczamy kilka uwag na ten temat.",
+ "Please read our deep-dive article": "Przeczytaj nasz szczegółowy artykuł",
+ "on": "NA",
+ "how our encrypted SQLite mailbox storage feature works": "jak działa nasza funkcja przechowywania zaszyfrowanej skrzynki pocztowej SQLite",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "ograniczenie przestrzeni dyskowej (dodatkową przestrzeń dyskową można dokupić w ramach płatności zgodnie z rzeczywistym użyciem)."
}
\ No newline at end of file
diff --git a/locales/pt.json b/locales/pt.json
index 5cc08e2123..06532cf87c 100644
--- a/locales/pt.json
+++ b/locales/pt.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Se por algum motivo os servidores secundários tiverem problemas de leitura com",
"(e.g. the mount failed or the": "(por exemplo, a montagem falhou ou o",
"file for the given alias cannot be found) – then it will fallback to use the": "arquivo para o alias fornecido não pode ser encontrado) - então ele retornará para usar o",
- "connection for reads.": "conexão para leituras."
+ "connection for reads.": "conexão para leituras.",
+ "feature for": "recurso para",
+ "In November 2023, we launched our": "Em novembro de 2023, lançamos nosso",
+ "encrypted mailbox storage": "armazenamento de caixa de correio criptografado",
+ "IMAP suppport": "Suporte IMAP",
+ "Concurrency": "Simultaneidade",
+ "Backups": "Cópias de segurança",
+ "Interested in learning more? Read": "Interessado em aprender mais? Ler",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Quando novas mensagens são recebidas de um remetente, nossos servidores de troca de mensagens escrevem para você uma caixa de correio individual, temporária e criptografada.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "pode ler e escrever em sua caixa de correio quando você a acessa. Na próxima vez que seu cliente de e-mail tentar pesquisar e-mails ou sincronizar, suas novas mensagens serão transferidas desta caixa de correio temporária e armazenadas em seu arquivo de caixa de correio real usando a senha fornecida. Observe que esta caixa de correio temporária é limpa e excluída posteriormente, para que apenas sua caixa de correio protegida por senha tenha as mensagens.",
+ "Write-ahead-log (\"": "Registro de gravação antecipada (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "para leituras e gravações simultâneas em suas caixas de correio SQLite criptografadas.",
+ "Reads": "Lê",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "para um de nossos endereços IP da Digital Ocean – e seu cliente de desktop pode resolver um IP separado de um diferente",
+ "provider": "fornecedor",
+ "altogether.": "completamente.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Independentemente do servidor IMAP ao qual seu cliente de e-mail se conecta, queremos que a conexão leia seu banco de dados em tempo real com 100% de precisão:",
+ "This is accomplished by using": "Isto é conseguido usando",
+ "(the default).": "(o padrão).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Em vez de usar o cache de disco local, o cache é lido diretamente da montagem remota (seu banco de dados) em tempo real.",
+ "In the event that the local file cannot be found, this indicates that": "Caso o arquivo local não possa ser encontrado, isso indica que",
+ "failed to mount or has an issue. In this case we use a": "falhou ao montar ou tem um problema. Neste caso usamos um",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "fallback para leituras (que diminui ligeiramente o desempenho, mas ainda mantém a integridade do serviço).",
+ "Writes": "Escreve",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Escrever em seu banco de dados é um pouco diferente – já que SQLite é um banco de dados incorporado e sua caixa de correio reside em um único arquivo por padrão.",
+ "We had explored options such as": "Tínhamos explorado opções como",
+ "To accomplish writes with write-ahead-logging (\"": "Para realizar gravações com registro write-ahead (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") habilitado – precisamos garantir que apenas um servidor (\"Primário\") seja responsável por fazer isso.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "acelera drasticamente a simultaneidade e permite um escritor e vários leitores.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "O Primário está em execução nos servidores de dados com os volumes montados contendo as caixas de correio criptografadas. Do ponto de vista da distribuição, você poderia considerar todos os servidores IMAP individuais por trás",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Extensão de criptografia para SQLite para permitir que arquivos inteiros do banco de dados sejam criptografados (incluindo o log write-ahead (\"",
+ "\"), journal, rollback, …).": "\"), diário, reversão, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "existem, mas eles não estão focados em write-ahead-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") suporte – então acabamos analisando o Litestream. Felizmente, nosso uso de criptografia já criptografa o",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "arquivos para nós, então não precisamos depender do Litestream para isso. No entanto, ainda não estávamos confiantes no Litestream para uso em produção e temos algumas notas abaixo sobre isso.",
+ "Please read our deep-dive article": "Por favor, leia nosso artigo aprofundado",
+ "on": "sobre",
+ "how our encrypted SQLite mailbox storage feature works": "como funciona nosso recurso de armazenamento de caixa de correio SQLite criptografado",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "limitação de armazenamento (armazenamento adicional pode ser adquirido com pagamento conforme o uso)."
}
\ No newline at end of file
diff --git a/locales/ru.json b/locales/ru.json
index 7e27d3df23..2b8fea5af8 100644
--- a/locales/ru.json
+++ b/locales/ru.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Если по какой-либо причине на вторичных серверах возникли проблемы с чтением",
"(e.g. the mount failed or the": "(например, монтирование не удалось или",
"file for the given alias cannot be found) – then it will fallback to use the": "файл для данного псевдонима не может быть найден) – тогда он вернется к использованию",
- "connection for reads.": "соединение для чтения."
+ "connection for reads.": "соединение для чтения.",
+ "feature for": "функция для",
+ "In November 2023, we launched our": "В ноябре 2023 года мы запустили наш",
+ "encrypted mailbox storage": "зашифрованное хранилище почтовых ящиков",
+ "IMAP suppport": "Поддержка IMAP",
+ "Concurrency": "Параллелизм",
+ "Backups": "Резервные копии",
+ "Interested in learning more? Read": "Хотите узнать больше? Читать",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Когда для вас получено новое письмо от отправителя, наши серверы обмена почтой записывают для вас индивидуальный, временный и зашифрованный почтовый ящик.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "может читать и писать в ваш почтовый ящик, когда вы к нему получаете доступ. В следующий раз, когда ваш почтовый клиент попытается запросить почту или выполнить синхронизацию, ваши новые сообщения будут перенесены из этого временного почтового ящика и сохранены в вашем фактическом файле почтового ящика с использованием предоставленного вами пароля. Обратите внимание, что этот временный почтовый ящик впоследствии очищается и удаляется, поэтому сообщения будут храниться только в вашем почтовом ящике, защищенном паролем.",
+ "Write-ahead-log (\"": "Журнал упреждающей записи (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "для одновременного чтения и записи в ваши зашифрованные почтовые ящики SQLite.",
+ "Reads": "Читает",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "на один из наших IP-адресов Digital Ocean, и ваш настольный клиент может разрешить отдельный IP-адрес из другого",
+ "provider": "поставщик",
+ "altogether.": "вообще.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Независимо от того, к какому IMAP-серверу подключается ваш почтовый клиент, мы хотим, чтобы соединение считывало данные из вашей базы данных в режиме реального времени со 100% точностью:",
+ "This is accomplished by using": "Это достигается с помощью",
+ "(the default).": "(по умолчанию).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Вместо использования локального дискового кэша кеш считывается непосредственно с удаленного монтирования (вашей базы данных) в режиме реального времени.",
+ "In the event that the local file cannot be found, this indicates that": "Если локальный файл не найден, это означает, что",
+ "failed to mount or has an issue. In this case we use a": "не удалось смонтировать или возникла проблема. В этом случае мы используем",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "резервное копирование для чтения (что немного снижает производительность, но сохраняет целостность службы).",
+ "Writes": "Пишет",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Запись в вашу базу данных немного отличается — поскольку SQLite — это встроенная база данных, а ваш почтовый ящик по умолчанию находится в одном файле.",
+ "We had explored options such as": "Мы рассматривали такие варианты, как",
+ "To accomplish writes with write-ahead-logging (\"": "Для выполнения записи с упреждающей записью (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") включено — нам нужно убедиться, что за это отвечает только один сервер («Основной»).",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "радикально ускоряет параллелизм и позволяет одному писателю и нескольким читателям.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Основной работает на серверах данных с смонтированными томами, содержащими зашифрованные почтовые ящики. С точки зрения распространения вы можете рассмотреть все отдельные серверы IMAP, стоящие за",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Расширение шифрования для SQLite, позволяющее шифровать все файлы базы данных (включая журнал упреждающей записи (\"",
+ "\"), journal, rollback, …).": "\"), журнал, откат, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "существуют, но они не ориентированы на журнал упреждающей записи (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") - поэтому мы закончили обзор Litestream. К счастью, наше использование шифрования уже шифрует",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "файлы для нас, поэтому нам не нужно полагаться на Litestream для этого. Однако мы еще не были уверены в возможности Litestream для промышленного использования, и ниже у нас есть несколько примечаний по этому поводу.",
+ "Please read our deep-dive article": "Пожалуйста, прочитайте нашу подробную статью",
+ "on": "на",
+ "how our encrypted SQLite mailbox storage feature works": "как работает наша функция зашифрованного хранения почтовых ящиков SQLite",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "ограничение хранилища (дополнительное хранилище можно приобрести с оплатой по мере использования)."
}
\ No newline at end of file
diff --git a/locales/sv.json b/locales/sv.json
index 6e7bf0299e..d5e82c055b 100644
--- a/locales/sv.json
+++ b/locales/sv.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Om de sekundära servrarna av någon anledning har läsproblem med",
"(e.g. the mount failed or the": "(t.ex. monteringen misslyckades eller",
"file for the given alias cannot be found) – then it will fallback to use the": "filen för det givna aliaset kan inte hittas) – då faller den tillbaka för att använda",
- "connection for reads.": "anslutning för läsning."
+ "connection for reads.": "anslutning för läsning.",
+ "feature for": "funktion för",
+ "In November 2023, we launched our": "I november 2023 lanserade vi vår",
+ "encrypted mailbox storage": "krypterad postlådelagring",
+ "IMAP suppport": "IMAP-stöd",
+ "Concurrency": "Samtidighet",
+ "Backups": "Säkerhetskopieringar",
+ "Interested in learning more? Read": "Intresserad av att lära dig mer? Läsa",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "När ny e-post tas emot för dig från en avsändare, skriver våra e-postväxlingsservrar till en individuell, tillfällig och krypterad postlåda åt dig.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "kan läsa och skriva till din brevlåda när du kommer åt den. Nästa gång din e-postklient försöker polla efter e-post eller synkronisera, kommer dina nya meddelanden att överföras från denna tillfälliga brevlåda och lagras i din faktiska brevlådefil med ditt angivna lösenord. Observera att denna tillfälliga brevlåda rensas och raderas efteråt så att endast din lösenordsskyddade brevlåda har meddelandena.",
+ "Write-ahead-log (\"": "Write-ahead-log (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "för samtidiga läsningar och skrivningar till dina krypterade SQLite-postlådor.",
+ "Reads": "Läser",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "till en av våra Digital Ocean IP-adresser – och din stationära klient kan lösa en separat IP från en annan",
+ "provider": "leverantör",
+ "altogether.": "sammanlagt.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Oavsett vilken IMAP-server din e-postklient ansluter till vill vi att anslutningen ska läsas från din databas i realtid med 100 % noggrannhet:",
+ "This is accomplished by using": "Detta uppnås genom att använda",
+ "(the default).": "(standarden).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Istället för att använda lokal diskcache läses cachen direkt från fjärrmonteringen (din databas) i realtid.",
+ "In the event that the local file cannot be found, this indicates that": "I händelse av att den lokala filen inte kan hittas indikerar detta det",
+ "failed to mount or has an issue. In this case we use a": "kunde inte monteras eller har ett problem. I det här fallet använder vi en",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "reserv för läsningar (vilket minskar prestandan något, men ändå bibehåller tjänstens integritet).",
+ "Writes": "Skriver",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Att skriva till din databas är lite annorlunda – eftersom SQLite är en inbäddad databas och din brevlåda som standard finns i en enda fil.",
+ "We had explored options such as": "Vi hade utforskat alternativ som t.ex",
+ "To accomplish writes with write-ahead-logging (\"": "För att utföra skrivningar med write-ahead-logging (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") aktiverat – vi måste se till att endast en server (\"Primär\") är ansvarig för att göra det.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "påskyndar drastiskt samtidighet och tillåter en skribent och flera läsare.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Primären körs på dataservrarna med de monterade volymerna som innehåller de krypterade postlådorna. Ur distributionssynpunkt kan du överväga alla individuella IMAP-servrar bakom",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Krypteringstillägg för SQLite för att tillåta att hela databasfiler krypteras (inklusive write-ahead-loggen (\"",
+ "\"), journal, rollback, …).": "\"), journal, återställning, ...).",
+ "exist, but they are not focused on write-ahead-log (\"": "existerar, men de är inte fokuserade på write-ahead-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") support – så det slutade med att vi granskade Litestream. Lyckligtvis krypterar vår krypteringsanvändning redan",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "filer för oss, så vi behöver inte förlita oss på Litestream för det. Men vi var ännu inte säkra på Litestream för produktionsanvändning och har några anteckningar nedan om det.",
+ "Please read our deep-dive article": "Läs vår djupdykningsartikel",
+ "on": "på",
+ "how our encrypted SQLite mailbox storage feature works": "hur vår krypterade SQLite-postlådelagringsfunktion fungerar",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "lagringsbegränsning (ytterligare lagringsutrymme kan köpas med pay-as-you-go)."
}
\ No newline at end of file
diff --git a/locales/th.json b/locales/th.json
index 5d169bf971..8d5f51b896 100644
--- a/locales/th.json
+++ b/locales/th.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "หากเซิร์ฟเวอร์รองอ่านปัญหาไม่ว่าด้วยเหตุผลใดก็ตาม",
"(e.g. the mount failed or the": "(เช่น การเมานต์ล้มเหลว หรือ",
"file for the given alias cannot be found) – then it will fallback to use the": "ไม่พบไฟล์สำหรับนามแฝงที่ระบุ) จากนั้นระบบจะเลือกใช้ไฟล์",
- "connection for reads.": "การเชื่อมต่อสำหรับการอ่าน"
+ "connection for reads.": "การเชื่อมต่อสำหรับการอ่าน",
+ "feature for": "คุณสมบัติสำหรับ",
+ "In November 2023, we launched our": "ในเดือนพฤศจิกายน 2023 เราได้เปิดตัว",
+ "encrypted mailbox storage": "ที่เก็บข้อมูลกล่องจดหมายที่เข้ารหัส",
+ "IMAP suppport": "รองรับไอแมป",
+ "Concurrency": "เห็นพ้องต้องกัน",
+ "Backups": "การสำรองข้อมูล",
+ "Interested in learning more? Read": "สนใจที่จะเรียนรู้เพิ่มเติมหรือไม่? อ่าน",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "เมื่อได้รับจดหมายใหม่ถึงคุณจากผู้ส่ง เซิร์ฟเวอร์แลกเปลี่ยนจดหมายของเราจะเขียนไปยังกล่องจดหมายส่วนบุคคล ชั่วคราว และเข้ารหัสสำหรับคุณ",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "สามารถอ่านและเขียนไปยังกล่องจดหมายของคุณเมื่อคุณเข้าถึงได้ ครั้งถัดไปที่โปรแกรมรับส่งเมลของคุณพยายามสำรวจหาเมลหรือการซิงค์ ข้อความใหม่ของคุณจะถูกโอนจากกล่องจดหมายชั่วคราวนี้และจัดเก็บไว้ในไฟล์กล่องจดหมายจริงของคุณโดยใช้รหัสผ่านที่คุณให้มา โปรดทราบว่ากล่องจดหมายชั่วคราวนี้จะถูกล้างข้อมูลและลบหลังจากนั้น เพื่อให้มีเพียงกล่องจดหมายที่ป้องกันด้วยรหัสผ่านของคุณเท่านั้นที่มีข้อความ",
+ "Write-ahead-log (\"": "บันทึกการเขียนล่วงหน้า (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "สำหรับการอ่านและเขียนไปยังกล่องจดหมาย SQLite ที่เข้ารหัสของคุณพร้อมกัน",
+ "Reads": "อ่าน",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "ไปยังหนึ่งในที่อยู่ IP ของ Digital Ocean ของเรา และไคลเอนต์เดสก์ท็อปของคุณอาจแก้ไข IP ที่แยกจากที่อื่น",
+ "provider": "ผู้ให้บริการ",
+ "altogether.": "โดยสิ้นเชิง",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "ไม่ว่าไคลเอนต์อีเมลของคุณจะเชื่อมต่อเซิร์ฟเวอร์ IMAP ใด เราต้องการให้การเชื่อมต่ออ่านจากฐานข้อมูลของคุณแบบเรียลไทม์ด้วยความแม่นยำ 100%:",
+ "This is accomplished by using": "ทำได้โดยใช้",
+ "(the default).": "(ค่าเริ่มต้น)",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "แทนที่จะใช้ดิสก์แคชในเครื่อง แคชจะถูกอ่านโดยตรงจากการเมาท์ระยะไกล (ฐานข้อมูลของคุณ) ในแบบเรียลไทม์",
+ "In the event that the local file cannot be found, this indicates that": "ในกรณีที่ไม่พบไฟล์ในเครื่องแสดงว่าเป็นเช่นนั้น",
+ "failed to mount or has an issue. In this case we use a": "ไม่สามารถเมานต์หรือมีปัญหา ในกรณีนี้เราใช้ a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "ทางเลือกสำรองสำหรับการอ่าน (ซึ่งลดประสิทธิภาพเล็กน้อย แต่ยังคงรักษาความสมบูรณ์ของบริการ)",
+ "Writes": "เขียน",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "การเขียนไปยังฐานข้อมูลของคุณแตกต่างออกไปเล็กน้อย เนื่องจาก SQLite เป็นฐานข้อมูลแบบฝัง และกล่องจดหมายของคุณอยู่ในไฟล์เดียวตามค่าเริ่มต้น",
+ "We had explored options such as": "เราได้สำรวจตัวเลือกต่างๆ เช่น",
+ "To accomplish writes with write-ahead-logging (\"": "เพื่อให้การเขียนสำเร็จด้วยการบันทึกล่วงหน้า (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") เปิดใช้งานแล้ว – เราต้องแน่ใจว่ามีเพียงเซิร์ฟเวอร์เดียว (\"หลัก\") เท่านั้นที่รับผิดชอบในการดำเนินการดังกล่าว",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "เพิ่มความเร็วในการทำงานพร้อมกันอย่างมากและอนุญาตให้มีผู้เขียนหนึ่งคนและผู้อ่านหลายคนได้",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "ตัวหลักกำลังทำงานบนเซิร์ฟเวอร์ข้อมูลโดยมีไดรฟ์ข้อมูลที่ติดตั้งซึ่งมีกล่องจดหมายที่เข้ารหัส จากมุมมองของการเผยแพร่ คุณสามารถพิจารณาเซิร์ฟเวอร์ IMAP ทั้งหมดที่อยู่เบื้องหลังได้",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "ส่วนขยายการเข้ารหัสสำหรับ SQLite เพื่ออนุญาตให้ไฟล์ฐานข้อมูลทั้งหมดถูกเข้ารหัส (รวมถึงบันทึกการเขียนล่วงหน้า (\"",
+ "\"), journal, rollback, …).": "\"), บันทึกประจำวัน, การย้อนกลับ, …)",
+ "exist, but they are not focused on write-ahead-log (\"": "มีอยู่ แต่ไม่ได้มุ่งเน้นไปที่การบันทึกล่วงหน้า (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") การสนับสนุน – ดังนั้นเราจึงได้ตรวจสอบ Litestream โชคดีที่การใช้การเข้ารหัสของเราได้เข้ารหัสแล้ว",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "ไฟล์ให้เรา ดังนั้นเราจึงไม่จำเป็นต้องพึ่งพา Litestream สำหรับเรื่องนั้น อย่างไรก็ตาม เรายังไม่มั่นใจใน Litestream สำหรับการใช้งานจริง และมีหมายเหตุบางประการด้านล่างนี้",
+ "Please read our deep-dive article": "โปรดอ่านบทความเจาะลึกของเรา",
+ "on": "บน",
+ "how our encrypted SQLite mailbox storage feature works": "คุณลักษณะการจัดเก็บกล่องจดหมาย SQLite ที่เข้ารหัสของเราทำงานอย่างไร",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "ข้อจำกัดในการจัดเก็บข้อมูล (สามารถซื้อพื้นที่เก็บข้อมูลเพิ่มเติมได้โดยชำระเงินตามการใช้งาน)"
}
\ No newline at end of file
diff --git a/locales/tr.json b/locales/tr.json
index 212d8b3821..d16095e31e 100644
--- a/locales/tr.json
+++ b/locales/tr.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Herhangi bir nedenle İkincil sunucularda okuma sorunları varsa",
"(e.g. the mount failed or the": "(örneğin, montaj başarısız oldu veya",
"file for the given alias cannot be found) – then it will fallback to use the": "verilen takma ad için dosya bulunamıyor) - bu durumda,",
- "connection for reads.": "okumalar için bağlantı."
+ "connection for reads.": "okumalar için bağlantı.",
+ "feature for": "için özellik",
+ "In November 2023, we launched our": "Kasım 2023'te lansmanımızı yaptık.",
+ "encrypted mailbox storage": "şifreli posta kutusu depolama",
+ "IMAP suppport": "IMAP desteği",
+ "Concurrency": "Eşzamanlılık",
+ "Backups": "Yedeklemeler",
+ "Interested in learning more? Read": "Daha fazlasını öğrenmek ister misiniz? Okumak",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Bir göndericiden sizin için yeni posta alındığında, posta değişim sunucularımız sizin için bireysel, geçici ve şifreli bir posta kutusuna yazar.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "eriştiğinizde posta kutunuza okuyabilir ve yazabilirsiniz. E-posta istemcinizin bir daha posta veya senkronizasyon için yoklama girişiminde bulunması durumunda, yeni mesajlarınız bu geçici posta kutusundan aktarılacak ve sağladığınız şifre kullanılarak gerçek posta kutusu dosyanızda saklanacaktır. Bu geçici posta kutusunun daha sonra temizleneceğini ve silineceğini, böylece mesajların yalnızca şifre korumalı posta kutunuzda bulunacağını unutmayın.",
+ "Write-ahead-log (\"": "Önceden yazma günlüğü (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "şifrelenmiş SQLite posta kutularınıza eşzamanlı okuma ve yazma işlemleri için.",
+ "Reads": "Okur",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "Digital Ocean IP adreslerimizden birine; masaüstü istemciniz farklı bir IP'den ayrı bir IP'yi çözümleyebilir",
+ "provider": "Sağlayıcı",
+ "altogether.": "tamamen.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "E-posta istemcinizin hangi IMAP sunucusuna bağlandığına bakılmaksızın, bağlantının veritabanınızdan gerçek zamanlı olarak %100 doğrulukla okunmasını istiyoruz:",
+ "This is accomplished by using": "Bu kullanılarak gerçekleştirilir",
+ "(the default).": "(varsayılan).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Yerel disk önbelleğini kullanmak yerine, önbellek doğrudan uzak bağlantı noktasından (veritabanınız) gerçek zamanlı olarak okunur.",
+ "In the event that the local file cannot be found, this indicates that": "Yerel dosyanın bulunamaması durumunda bu şunu gösterir:",
+ "failed to mount or has an issue. In this case we use a": "yüklenemedi veya bir sorun var. Bu durumda bir kullanırız",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "okumalar için geri dönüş (bu, performansı biraz azaltır ancak yine de hizmetin bütünlüğünü korur).",
+ "Writes": "yazar",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Veritabanınıza yazmak biraz farklıdır; çünkü SQLite gömülü bir veritabanıdır ve posta kutunuz varsayılan olarak tek bir dosyada bulunur.",
+ "We had explored options such as": "gibi seçenekleri araştırdık.",
+ "To accomplish writes with write-ahead-logging (\"": "Yazma öncesi günlük kaydıyla yazma işlemlerini gerçekleştirmek için (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") etkin - bunu yapmaktan yalnızca bir sunucunun (\"Birincil\") sorumlu olduğundan emin olmamız gerekir.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "Eşzamanlılığı büyük ölçüde hızlandırır ve bir yazara ve birden fazla okuyucuya izin verir.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Birincil, şifrelenmiş posta kutularını içeren bağlı birimlerin bulunduğu veri sunucularında çalışıyor. Dağıtım açısından bakıldığında, arkadaki tüm bireysel IMAP sunucularını düşünebilirsiniz.",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Tüm veritabanı dosyalarının şifrelenmesine izin veren SQLite şifreleme uzantısı (önceden yazma günlüğü (\"",
+ "\"), journal, rollback, …).": "\"), günlük, geri alma,…).",
+ "exist, but they are not focused on write-ahead-log (\"": "var, ancak ön-günlüğe yazmaya odaklanmıyorlar (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") desteği – bu yüzden Litestream'i inceledik. Neyse ki şifreleme kullanımımız zaten",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "bizim için dosyalar olduğundan, bunun için Litestream'e güvenmemize gerek yok. Ancak üretimde kullanım açısından Litestream'e henüz güvenmiyorduk ve bu konuda aşağıda birkaç not vereceğiz.",
+ "Please read our deep-dive article": "Lütfen ayrıntılı makalemizi okuyun",
+ "on": "Açık",
+ "how our encrypted SQLite mailbox storage feature works": "şifrelenmiş SQLite posta kutusu depolama özelliğimiz nasıl çalışır?",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "depolama sınırlaması (kullandıkça öde seçeneğiyle ek depolama alanı satın alınabilir)."
}
\ No newline at end of file
diff --git a/locales/uk.json b/locales/uk.json
index d6902bd872..93fde89247 100644
--- a/locales/uk.json
+++ b/locales/uk.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Якщо з будь-якої причини вторинні сервери мають проблеми з читанням",
"(e.g. the mount failed or the": "(наприклад, не вдалося встановити кріплення або",
"file for the given alias cannot be found) – then it will fallback to use the": "файл для вказаного псевдоніма не знайдено) – тоді буде використано резервний файл",
- "connection for reads.": "підключення для читання."
+ "connection for reads.": "підключення для читання.",
+ "feature for": "функція для",
+ "In November 2023, we launched our": "У листопаді 2023 року ми запустили нашу",
+ "encrypted mailbox storage": "зашифроване сховище поштової скриньки",
+ "IMAP suppport": "Підтримка IMAP",
+ "Concurrency": "Паралелізм",
+ "Backups": "Резервні копії",
+ "Interested in learning more? Read": "Хочете дізнатися більше? Прочитайте",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Коли ви отримуєте нову пошту від відправника, наші сервери обміну поштою надсилають для вас окрему, тимчасову та зашифровану поштову скриньку.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "може читати та писати у вашу поштову скриньку, коли ви маєте до неї доступ. Наступного разу, коли ваш клієнт електронної пошти спробує отримати пошту або синхронізуватися, ваші нові повідомлення буде передано з цієї тимчасової поштової скриньки та збережено у файлі вашої фактичної поштової скриньки за допомогою наданого вами пароля. Зауважте, що ця тимчасова поштова скринька згодом очищається та видаляється, щоб повідомлення містилися лише у вашій захищеній паролем поштовій скриньці.",
+ "Write-ahead-log (\"": "Журнал попереднього запису (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "для одночасного читання та запису у ваші зашифровані поштові скриньки SQLite.",
+ "Reads": "Читає",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "на одну з наших IP-адрес Digital Ocean – і ваш настільний клієнт може розпізнати окрему IP-адресу з іншої",
+ "provider": "провайдер",
+ "altogether.": "взагалі.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Незалежно від того, до якого сервера IMAP підключається ваш клієнт електронної пошти, ми хочемо, щоб з’єднання читало вашу базу даних у режимі реального часу зі 100% точністю:",
+ "This is accomplished by using": "Це досягається за допомогою",
+ "(the default).": "(за замовчуванням).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Замість використання кешу локального диска, кеш зчитується безпосередньо з віддаленого монтування (вашої бази даних) у режимі реального часу.",
+ "In the event that the local file cannot be found, this indicates that": "Якщо локальний файл не знайдено, це означає, що",
+ "failed to mount or has an issue. In this case we use a": "не вдалося встановити або виникла проблема. У цьому випадку ми використовуємо a",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "запасний варіант для читання (що трохи знижує продуктивність, але все ще підтримує цілісність служби).",
+ "Writes": "Пише",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Запис у вашу базу даних дещо відрізняється, оскільки SQLite є вбудованою базою даних і ваша поштова скринька за замовчуванням знаходиться в одному файлі.",
+ "We had explored options such as": "Ми досліджували такі варіанти, як",
+ "To accomplish writes with write-ahead-logging (\"": "Для виконання запису за допомогою попереднього запису журналу (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") увімкнено – нам потрібно переконатися, що за це відповідає лише один сервер (\"Основний\").",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "суттєво прискорює паралелізм і дозволяє працювати одному автору та декільком читачам.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Основний працює на серверах даних із підключеними томами, що містять зашифровані поштові скриньки. З точки зору розповсюдження, ви можете розглянути всі окремі сервери IMAP",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Розширення шифрування для SQLite, яке дозволяє шифрувати цілі файли бази даних (включно з журналом попереднього запису (\"",
+ "\"), journal, rollback, …).": "»), журнал, відкат, …).",
+ "exist, but they are not focused on write-ahead-log (\"": "існують, але вони не зосереджені на попередньому записі журналу (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") підтримку – тому ми завершили перегляд Litestream. На щастя, наше використання шифрування вже шифрує",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "файли для нас, тому нам не потрібно покладатися на Litestream для цього. Однак ми ще не були впевнені в Litestream для використання у виробництві, і нижче є кілька приміток щодо цього.",
+ "Please read our deep-dive article": "Прочитайте нашу детальну статтю",
+ "on": "на",
+ "how our encrypted SQLite mailbox storage feature works": "як працює наша функція зберігання зашифрованої поштової скриньки SQLite",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "обмеження обсягу пам’яті (додатковий обсяг пам’яті можна придбати за принципом оплати за використання)."
}
\ No newline at end of file
diff --git a/locales/vi.json b/locales/vi.json
index ebf8286d06..a4841a0b24 100644
--- a/locales/vi.json
+++ b/locales/vi.json
@@ -5394,5 +5394,43 @@
"If for any reason the Secondary servers have read issues with": "Nếu vì bất kỳ lý do nào mà máy chủ phụ gặp vấn đề về đọc",
"(e.g. the mount failed or the": "(ví dụ: việc gắn kết không thành công hoặc",
"file for the given alias cannot be found) – then it will fallback to use the": "không thể tìm thấy tệp cho bí danh đã cho) - sau đó nó sẽ dự phòng để sử dụng",
- "connection for reads.": "kết nối để đọc."
+ "connection for reads.": "kết nối để đọc.",
+ "feature for": "tính năng cho",
+ "In November 2023, we launched our": "Vào tháng 11 năm 2023, chúng tôi đã ra mắt",
+ "encrypted mailbox storage": "lưu trữ hộp thư được mã hóa",
+ "IMAP suppport": "Hỗ trợ IMAP",
+ "Concurrency": "Đồng thời",
+ "Backups": "Sao lưu",
+ "Interested in learning more? Read": "Bạn muốn tìm hiểu thêm? Đọc",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "Khi người gửi nhận được thư mới cho bạn, máy chủ trao đổi thư của chúng tôi sẽ ghi vào hộp thư cá nhân, tạm thời và được mã hóa cho bạn.",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "có thể đọc và ghi vào hộp thư của bạn khi bạn truy cập vào nó. Lần tới khi ứng dụng email của bạn cố gắng thăm dò thư hoặc đồng bộ hóa, thư mới của bạn sẽ được chuyển từ hộp thư tạm thời này và được lưu trữ trong tệp hộp thư thực tế bằng mật khẩu bạn đã cung cấp. Lưu ý rằng hộp thư tạm thời này sẽ bị xóa sạch và xóa sau đó để chỉ hộp thư được bảo vệ bằng mật khẩu của bạn mới có thư.",
+ "Write-ahead-log (\"": "Viết trước-nhật ký (\"",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "để đọc và ghi đồng thời vào hộp thư SQLite được mã hóa của bạn.",
+ "Reads": "Đọc",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "tới một trong các địa chỉ IP Digital Ocean của chúng tôi - và máy khách để bàn của bạn có thể phân giải một IP riêng biệt từ một địa chỉ IP khác",
+ "provider": "các nhà cung cấp",
+ "altogether.": "toàn bộ.",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "Bất kể ứng dụng email khách của bạn kết nối với máy chủ IMAP nào, chúng tôi muốn kết nối đọc từ cơ sở dữ liệu của bạn trong thời gian thực với độ chính xác 100%:",
+ "This is accomplished by using": "Điều này được thực hiện bằng cách sử dụng",
+ "(the default).": "(mặc định).",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "Thay vì sử dụng bộ đệm đĩa cục bộ, bộ đệm được đọc trực tiếp từ thiết bị gắn từ xa (cơ sở dữ liệu của bạn) trong thời gian thực.",
+ "In the event that the local file cannot be found, this indicates that": "Trong trường hợp không thể tìm thấy tệp cục bộ, điều này cho biết rằng",
+ "failed to mount or has an issue. In this case we use a": "không gắn kết được hoặc có vấn đề. Trong trường hợp này chúng tôi sử dụng một",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "dự phòng cho các lần đọc (làm giảm hiệu suất một chút nhưng vẫn duy trì tính toàn vẹn của dịch vụ).",
+ "Writes": "Viết",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "Việc ghi vào cơ sở dữ liệu của bạn hơi khác một chút – vì SQLite là cơ sở dữ liệu được nhúng và hộp thư của bạn nằm trong một tệp duy nhất theo mặc định.",
+ "We had explored options such as": "Chúng tôi đã khám phá các lựa chọn như",
+ "To accomplish writes with write-ahead-logging (\"": "Để thực hiện việc ghi bằng cách ghi nhật ký ghi trước (\"",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") được bật – chúng tôi cần đảm bảo rằng chỉ có một máy chủ (\"Chính\") chịu trách nhiệm thực hiện việc đó.",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "tăng tốc đáng kể sự đồng thời và cho phép một người viết và nhiều người đọc.",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "Primary đang chạy trên các máy chủ dữ liệu với các ổ đĩa được gắn chứa các hộp thư được mã hóa. Từ quan điểm phân phối, bạn có thể xem xét tất cả các máy chủ IMAP riêng lẻ đằng sau",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "Tiện ích mở rộng mã hóa cho SQLite để cho phép mã hóa toàn bộ tệp cơ sở dữ liệu (bao gồm cả nhật ký ghi trước (\"",
+ "\"), journal, rollback, …).": "\"), nhật ký, khôi phục,…).",
+ "exist, but they are not focused on write-ahead-log (\"": "tồn tại, nhưng chúng không tập trung vào ghi-trước-log (\"",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "\") hỗ trợ – vì vậy cuối cùng chúng tôi đã xem xét Litestream. May mắn thay, việc sử dụng mã hóa của chúng tôi đã mã hóa",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "các tệp cho chúng tôi, vì vậy chúng tôi không cần phải dựa vào Litestream để làm việc đó. Tuy nhiên, chúng tôi chưa tin tưởng vào Litestream cho mục đích sử dụng sản xuất và có một số lưu ý bên dưới về điều đó.",
+ "Please read our deep-dive article": "Vui lòng đọc bài viết chuyên sâu của chúng tôi",
+ "on": "TRÊN",
+ "how our encrypted SQLite mailbox storage feature works": "cách hoạt động của tính năng lưu trữ hộp thư SQLite được mã hóa của chúng tôi",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "giới hạn dung lượng lưu trữ (có thể mua thêm dung lượng lưu trữ bằng hình thức trả tiền theo nhu cầu sử dụng)."
}
\ No newline at end of file
diff --git a/locales/zh.json b/locales/zh.json
index b6d65f228c..01be3bb7cd 100644
--- a/locales/zh.json
+++ b/locales/zh.json
@@ -5085,5 +5085,43 @@
"If for any reason the Secondary servers have read issues with": "如果由于任何原因辅助服务器读取了以下问题",
"(e.g. the mount failed or the": "(例如安装失败或",
"file for the given alias cannot be found) – then it will fallback to use the": "找不到给定别名的文件) – 那么它将回退到使用",
- "connection for reads.": "用于读取的连接。"
+ "connection for reads.": "用于读取的连接。",
+ "feature for": "特征为",
+ "In November 2023, we launched our": "2023 年 11 月,我们推出了",
+ "encrypted mailbox storage": "加密邮箱存储",
+ "IMAP suppport": "IMAP 支持",
+ "Concurrency": "并发性",
+ "Backups": "备份",
+ "Interested in learning more? Read": "有兴趣了解更多吗?读",
+ "When new mail is received for you from a sender, our mail exchange servers write to an individual, temporary, and encrypted mailbox for you.": "当您从发件人处收到新邮件时,我们的邮件交换服务器会写入您的个人临时加密邮箱。",
+ "can read and write to your mailbox when you are accessing it. The next time your email client attempts to poll for mail or syncs, your new messages will be transferred from this temporary mailbox and stored in your actual mailbox file using your supplied password. Note that this temporary mailbox is purged and deleted afterwards so that only your password protected mailbox has the messages.": "当您访问邮箱时可以读取和写入您的邮箱。下次您的电子邮件客户端尝试轮询邮件或同步时,您的新邮件将从该临时邮箱传输,并使用您提供的密码存储在您的实际邮箱文件中。请注意,此临时邮箱随后会被清除并删除,以便只有受密码保护的邮箱才会包含邮件。",
+ "Write-ahead-log (\"": "预写日志(“",
+ "for concurrent reads and writes to your encrypted SQLite mailboxes.": "用于并发读取和写入加密的 SQLite 邮箱。",
+ "Reads": "读",
+ "to one of our Digital Ocean IP addresses – and your desktop client may resolve a separate IP from a different": "到我们的 Digital Ocean IP 地址之一 – 您的桌面客户端可能会从不同的 IP 地址解析出单独的 IP",
+ "provider": "提供者",
+ "altogether.": "共。",
+ "Regardless of which IMAP server your email client connects to, we want the connection to read from your database in real-time with 100% accuracy:": "无论您的电子邮件客户端连接到哪个 IMAP 服务器,我们都希望该连接能够 100% 准确地实时读取您的数据库:",
+ "This is accomplished by using": "这是通过使用来完成的",
+ "(the default).": "(默认)。",
+ "Instead of using local disk cache, the cache is read directly from the remote mount (your database) in real-time.": "不使用本地磁盘缓存,而是直接从远程挂载(您的数据库)实时读取缓存。",
+ "In the event that the local file cannot be found, this indicates that": "如果找不到本地文件,则表明",
+ "failed to mount or has an issue. In this case we use a": "无法安装或有问题。在这种情况下我们使用",
+ "fallback for reads (which slightly decreases performance, but still maintains the integrity of the service).": "读取的回退(这会稍微降低性能,但仍保持服务的完整性)。",
+ "Writes": "写",
+ "Writing to your database is a bit different – since SQLite is an embedded database and your mailbox lives in a single file by default.": "写入数据库有点不同 - 因为 SQLite 是嵌入式数据库,并且默认情况下您的邮箱位于单个文件中。",
+ "We had explored options such as": "我们探索过诸如",
+ "To accomplish writes with write-ahead-logging (\"": "通过预写日志记录完成写入(“",
+ "\") enabled – we need to ensure that only one server (\"Primary\") is responsible for doing so.": "\") 启用 – 我们需要确保只有一台服务器(“主服务器”)负责执行此操作。",
+ "drastically speeds up concurrency and allows one writer and multiple readers.": "极大地加快了并发速度,并允许一名写入者和多名读取者。",
+ "The Primary is running on the data servers with the mounted volumes containing the encrypted mailboxes. From a distribution standpoint, you could consider all the individual IMAP servers behind": "主服务器在数据服务器上运行,并已安装包含加密邮箱的卷。从分发的角度来看,您可以考虑背后的所有单独的 IMAP 服务器",
+ "Encryption extension for SQLite to allow entire database files to be encrypted (including the write-ahead-log (\"": "SQLite 的加密扩展允许加密整个数据库文件(包括预写日志(“",
+ "\"), journal, rollback, …).": "\")、日志、回滚、...)。",
+ "exist, but they are not focused on write-ahead-log (\"": "存在,但它们并不专注于预写日志(“",
+ "\") support – so we ended up reviewing Litestream. Fortunately our encryption usage already encrypts the": "“)支持 - 所以我们最终审查了 Litestream。幸运的是,我们的加密使用已经加密了",
+ "files for us, so we do not need to rely on Litestream for that. However we weren't yet confident in Litestream for production-use and have a few notes below on that.": "文件,所以我们不需要依赖 Litestream。然而,我们对 Litestream 的生产用途还没有信心,下面对此有一些说明。",
+ "Please read our deep-dive article": "请阅读我们的深入文章",
+ "on": "在",
+ "how our encrypted SQLite mailbox storage feature works": "我们的加密 SQLite 邮箱存储功能如何工作",
+ "storage limitation (additional storage can be purchased with pay-as-you-go).": "存储限制(可以通过即用即付方式购买额外的存储空间)。"
}
\ No newline at end of file
diff --git a/package.json b/package.json
index b3b6ed264e..4bae9ebe71 100644
--- a/package.json
+++ b/package.json
@@ -123,7 +123,7 @@
"markdown-it-highlightjs": "4.0.1",
"markdown-it-task-checkbox": "1.0.6",
"memoizee": "0.4.15",
- "mermaid": "10.6.0",
+ "mermaid": "9",
"mkdirp": "3.0.1",
"mongodb-memory-server": "9.0.1",
"mongodb-query-parser": "3.1.3",
diff --git a/sqlite-server.js b/sqlite-server.js
index a2afffe7d6..e8e183bef6 100644
--- a/sqlite-server.js
+++ b/sqlite-server.js
@@ -165,8 +165,9 @@ class SQLite {
// id
//
- if (!uuidValidate(payload.id))
- throw new TypeError('Payload id missing or invalid UUID');
+ // if (!uuidValidate(payload.id))
+ // throw new TypeError('Payload id missing or invalid UUID');
+ if (!isSANB(payload.id)) throw new TypeError('Payload id missing');
// if lock was passed it must be valid
if (_.isPlainObject(payload.lock)) {
@@ -244,6 +245,10 @@ class SQLite {
if (!isSANB(payload.session.user.password))
throw new TypeError('Payload password missing');
+ // storage location
+ if (!isSANB(payload.session.user.storage_location))
+ throw new TypeError('Payload storage location missing');
+
//
// NOTE: we are relying on getDatabase to open the database successfully
// otherwise it was an invalid database or there wasn't a valid password
@@ -301,7 +306,8 @@ class SQLite {
this,
// alias
{
- id: payload.session.user.alias_id
+ id: payload.session.user.alias_id,
+ storageLocation: payload.session.user.storage_location
},
payload.session,
payload?.lock
@@ -322,20 +328,14 @@ class SQLite {
// storage quota
case 'size': {
- if (
- !_.isArray(payload.alias_ids) ||
- payload.alias_ids.length === 0
- )
- throw new TypeError('Alias ids missing');
+ if (!_.isArray(payload.aliases) || payload.aliases.length === 0)
+ throw new TypeError('Aliases missing');
let size = 0;
- for (const id of payload.alias_ids) {
- // validate that they are all object ids
- if (!mongoose.Types.ObjectId.isValid(id))
- throw new TypeError('Invalid alias id');
+ for (const alias of payload.aliases) {
try {
//
- const stats = fs.statSync(getPathToDatabase(id));
+ const stats = fs.statSync(getPathToDatabase(alias));
if (stats.isFile() && stats.size > 0) size += stats.size;
} catch (err) {
if (err.code !== 'ENOENT') throw err;
diff --git a/test.js b/test.js
index 1fcc556e75..f99ce1adf3 100644
--- a/test.js
+++ b/test.js
@@ -86,7 +86,8 @@ const { encrypt } = require('#helpers/encrypt-decrypt');
alias_name: alias.name,
domain_id: domain.id,
domain_name: domain.name,
- password: encrypt(pass)
+ password: encrypt(pass),
+ storage_location: alias.storageLocation
}
};
const db = await getDatabase(imap, alias, session);
diff --git a/test/imap/index.js b/test/imap/index.js
index 29a23c85e8..73b34ade49 100644
--- a/test/imap/index.js
+++ b/test/imap/index.js
@@ -121,7 +121,8 @@ test.beforeEach(async (t) => {
alias_name: alias.name,
domain_id: domain.id,
domain_name: domain.name,
- password: encrypt(pass)
+ password: encrypt(pass),
+ storage_location: alias.storageLocation
}
};
@@ -530,7 +531,8 @@ ZXhhbXBsZQo=
alias_name: alias.name,
domain_id: domain.id,
domain_name: domain.name,
- password: encrypt(pass)
+ password: encrypt(pass),
+ storage_location: alias.storageLocation
}
};