Skip to content

Commit 5fd181d

Browse files
refactor(frontend): unify mailbox terminology
Closes #1129
1 parent 70206c6 commit 5fd181d

24 files changed

Lines changed: 319 additions & 272 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
### Improvements
2525

26+
- fix: |Frontend| 统一邮箱、邮箱地址、用户账号与管理后台的核心界面术语,并补齐附加语言缺失的邮件状态与远程图片文案(issue #1129
2627
- feat: |发信页面| 优化用户和 Admin 发信页面的信息层级与响应式布局,增加正文格式工具栏、草稿状态、底部发送操作区及隔离的 HTML 预览
2728

2829
### Testing

CHANGELOG_EN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
### Improvements
2525

26+
- fix: |Frontend| Unify core mailbox, email-address, user-account, and Admin Console terminology, and fill missing additional-locale strings for mail status and remote images (issue #1129)
2627
- feat: |Send Mail| Improve the information hierarchy and responsive layout of the user and Admin composers, with a content-format toolbar, draft status, bottom send-action area, and isolated HTML preview
2728

2829
### Testing

e2e/tests/browser/custom-subdomain.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ test('create an address with a custom subdomain from the UI', async ({ page, req
66

77
try {
88
await page.goto(`${FRONTEND_URL}/en/`);
9-
await page.getByRole('button', { name: 'Create New Email' }).click();
9+
await page.getByRole('button', { name: 'Create Email Address' }).click();
1010

1111
const name = `subui${Date.now()}`;
1212
const createForm = page.locator('.n-tab-pane:visible form');
@@ -36,7 +36,7 @@ test('create an address with a custom subdomain from the UI', async ({ page, req
3636
await createForm.getByText('Use Custom Subdomain', { exact: true }).click();
3737
await createForm.locator('.n-input-group:visible .n-input input').last().fill('team');
3838

39-
await createForm.getByRole('button', { name: 'Create New Email' }).click();
39+
await createForm.getByRole('button', { name: 'Create Email Address' }).click();
4040

4141
const domain = `team.${TEST_DOMAIN}`;
4242
const address = `tmp${name}@${domain}`;

e2e/tests/browser/user-address-pagination.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ test.describe('User address pagination browser flow', () => {
100100
return url.pathname === '/user_api/bind_address'
101101
&& url.searchParams.get('limit') === '100';
102102
});
103-
await page.getByText('Mail Box', { exact: true }).click();
103+
await page.getByText('Inbox', { exact: true }).click();
104104
const initialMailboxResponse = await initialMailboxAddressesResponse;
105105
expect(initialMailboxResponse.ok()).toBe(true);
106106
const mailboxAddressSelect = page.locator('.n-input-group .n-select').first();

frontend/src/components/AddressSelect.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ const refreshAddressOptions = async () => {
153153
if (userJwt.value) {
154154
const userChildren = await buildUserOptions();
155155
if (userChildren.length > 0) {
156-
groups.push({ type: 'group', label: t('userAddresses'), children: userChildren });
156+
groups.push({ type: 'group', label: t('linkedMailboxes'), children: userChildren });
157157
}
158158
const userAddressSet = new Set(userChildren.map((item) => item.address));
159159
const localChildren = buildLocalOptions(userAddressSet);
@@ -215,7 +215,7 @@ watch([userJwt, isTelegram, () => settings.value.address], async () => {
215215
<template>
216216
<n-flex class="address-row" align="center" justify="center" :wrap="true">
217217
<n-select v-model:value="addressValue" :options="addressOptions" :size="size" filterable
218-
:loading="addressLoading" :placeholder="t('address')" @update:value="onAddressChange"
218+
:loading="addressLoading" :placeholder="t('selectMailbox')" @update:value="onAddressChange"
219219
class="address-select" />
220220
<slot name="actions" />
221221
<n-button v-if="showCopy" class="address-copy" @click="copy" :size="size" tertiary type="primary">

frontend/src/i18n/locales/source/de.ts

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,12 @@ export const deMessages = {
3333
"views.Index.about": "Über",
3434
"views.Admin.about": "Über",
3535
"views.Header.accessHeader": "Zugangspasswort",
36-
"views.Admin.account": "Konto",
37-
"views.Index.accountSettings": "E-Mail-Einstellungen",
38-
"views.Admin.account_settings": "Kontoeinstellungen",
39-
"views.index.SimpleIndex.accountSettings": "E-Mail-Einstellungen",
36+
"views.Header.admin": "Admin-Konsole",
37+
"views.Admin.mailbox_management": "Postfachverwaltung",
38+
"views.Admin.mailbox_list": "Postfächer",
39+
"views.Index.mailboxSettings": "Postfacheinstellungen",
40+
"views.Admin.mailbox_settings": "Globale Postfacheinstellungen",
41+
"views.index.SimpleIndex.mailboxSettings": "Postfacheinstellungen",
4042
"views.index.Attachment.action": "Aktion",
4143
"views.admin.SenderAccess.action": "Aktion",
4244
"views.user.UserSettings.actions": "Aktionen",
@@ -50,7 +52,7 @@ export const deMessages = {
5052
"views.admin.Maintenance.customSqlTip": "Füge benutzerdefinierte DELETE-SQL-Anweisungen für die geplante Bereinigung hinzu. Pro Eintrag ist nur eine DELETE-Anweisung erlaubt.",
5153
"views.admin.Maintenance.addCustomSql": "Benutzerdefinierte SQL hinzufügen",
5254
"views.admin.UserOauth2Settings.addOauth2": "Oauth2 hinzufügen",
53-
"components.AddressSelect.address": "Adresse",
55+
"components.AddressSelect.selectMailbox": "Postfach auswählen",
5456
"views.user.AddressManagement.address": "Adresse",
5557
"views.index.TelegramAddress.address": "Adresse",
5658
"views.admin.SenderAccess.address": "Adresse",
@@ -86,7 +88,7 @@ export const deMessages = {
8688
"views.admin.Account.clearSentItemsTip": "Möchtest du wirklich die gesendeten Elemente dieser E-Mail-Adresse leeren?",
8789
"views.admin.Account.multiDeleteTip": "Möchtest du wirklich die ausgewählten Adressen löschen?",
8890
"views.index.Attachment.deleteConfirm": "Möchtest du wirklich diesen Anhang löschen?",
89-
"views.admin.Account.deleteTip": "Möchtest du wirklich diese E-Mail löschen?",
91+
"views.admin.Account.deleteTip": "Möchtest du wirklich dieses Postfach löschen?",
9092
"views.admin.SenderAccess.deleteTip": "Möchtest du dies wirklich löschen?",
9193
"views.index.AccountSettings.deleteAccountConfirm": "Möchtest du diese E-Mail-Adresse und alle zugehörigen E-Mails wirklich löschen? Dein Benutzerkonto wird dabei nicht gelöscht.",
9294
"views.index.AccountSettings.logoutConfirm": "Möchtest du dich wirklich von der aktuellen E-Mail-Adresse abmelden?",
@@ -123,7 +125,7 @@ export const deMessages = {
123125
"views.admin.AccountSettings.cancel": "Abbrechen",
124126
"components.MailBox.cancelMultiAction": "Mehrfachaktion abbrechen",
125127
"components.SendBox.cancelMultiAction": "Mehrfachaktion abbrechen",
126-
"views.user.AddressManagement.changeMailAddress": "Adresse wechseln",
128+
"views.user.AddressManagement.openMailbox": "Postfach öffnen",
127129
"views.index.TelegramAddress.changeMailAddress": "Mailadresse ändern",
128130
"views.index.LocalAddress.changeMailAddress": "Mailadresse ändern",
129131
"views.index.AccountSettings.changePassword": "Adresspasswort ändern",
@@ -162,8 +164,8 @@ export const deMessages = {
162164
"views.index.SimpleIndex.copyAddress": "Kopieren",
163165
"components.AiExtractInfo.copyFailed": "Kopieren fehlgeschlagen",
164166
"views.Footer.copyright": "Urheberrecht",
165-
"views.Admin.account_create": "Konto erstellen",
166-
"views.admin.CreateAccount.creatNewEmail": "Neue E-Mail erstellen",
167+
"views.Admin.mailbox_create": "E-Mail-Adresse erstellen",
168+
"views.admin.CreateAccount.createEmailAddress": "E-Mail-Adresse erstellen",
167169
"views.common.Login.getNewEmail": "Neue E-Mail erstellen",
168170
"views.user.AddressManagement.create_or_bind": "Erstellen oder verknüpfen",
169171
"views.index.LocalAddress.create_or_bind": "Erstellen oder verknüpfen",
@@ -198,8 +200,8 @@ export const deMessages = {
198200
"views.admin.UserManagement.delete": "Löschen",
199201
"views.admin.AccountSettings.delete_rule": "Löschen",
200202
"views.admin.Maintenance.deleteCustomSql": "Löschen",
201-
"views.index.AccountSettings.deleteAccount": "E-Mail-Adresse löschen",
202-
"views.admin.Account.deleteAccount": "Konto löschen",
203+
"views.index.AccountSettings.deleteMailbox": "Postfach löschen",
204+
"views.admin.Account.deleteMailbox": "Postfach löschen",
203205
"views.user.UserSettings.deletePasskey": "Passkey löschen",
204206
"views.admin.AccountSettings.delete_success": "Erfolgreich gelöscht",
205207
"views.admin.UserManagement.deleteUser": "Benutzer löschen",
@@ -270,7 +272,7 @@ export const deMessages = {
270272
"views.admin.Telegram.globalMailPushList": "Globale Mail-Push-Chat-ID-Liste",
271273
"views.common.Appearance.globalTabplacement": "Globale Tab-Position",
272274
"views.common.Login.help": "Hilfe",
273-
"views.Header.home": "Startseite",
275+
"views.Header.mailbox": "Postfach",
274276
"views.index.SendMail.html": "HTML",
275277
"views.admin.SendMail.html": "HTML",
276278
"views.admin.UserOauth2Settings.icon": "Icon (SVG, bitte nur aus vertrauenswürdiger Quelle)",
@@ -319,7 +321,7 @@ export const deMessages = {
319321
"views.admin.Account.addressCredential": "E-Mail-Adresszugangsdaten",
320322
"views.admin.CreateAccount.addressCredential": "E-Mail-Adresszugangsdaten",
321323
"views.index.AddressBar.fetchAddressError": "Die E-Mail-Zugangsdaten sind ungültig oder das Konto existiert nicht. Es kann auch ein Netzwerkproblem sein. Bitte später erneut versuchen.",
322-
"views.Index.mailbox": "Posteingang",
324+
"views.Index.inbox": "Posteingang",
323325
"views.User.user_mail_box_tab": "Posteingang",
324326
"views.user.AddressManagement.mail_count": "E-Mail-Anzahl",
325327
"views.admin.Account.mail_count": "E-Mail-Anzahl",
@@ -349,11 +351,11 @@ export const deMessages = {
349351
"views.admin.Account.multiClearInbox": "Mehrere Posteingänge leeren",
350352
"views.admin.Account.multiClearSentItems": "Mehrere gesendete Elemente leeren",
351353
"views.admin.Account.multiDelete": "Mehrfach löschen",
352-
"views.user.AddressManagement.name": "Name",
354+
"views.user.AddressManagement.emailAddress": "E-Mail-Adresse",
353355
"views.index.AutoReply.name": "Name",
354-
"views.admin.Account.name": "Name",
356+
"views.admin.Account.emailAddress": "E-Mail-Adresse",
355357
"views.admin.UserOauth2Settings.name": "Name",
356-
"views.admin.UserAddressManagement.name": "Name",
358+
"views.admin.UserAddressManagement.emailAddress": "E-Mail-Adresse",
357359
"views.admin.Maintenance.sqlName": "Name",
358360
"views.index.AccountSettings.newPassword": "Neues Passwort",
359361
"views.admin.Account.newPassword": "Neues Passwort",
@@ -585,13 +587,13 @@ export const deMessages = {
585587
"views.admin.UserOauth2Settings.userEmailFormatTip": "Regex verwenden, um die E-Mail umzuwandeln. Beispiel: ^(.+)@old\\.com$ mit $1@new.com",
586588
"views.common.Appearance.useSimpleIndex": "Einfachen Index verwenden",
587589
"views.common.Appearance.useUTCDate": "UTC-Datum verwenden",
588-
"views.Header.user": "Benutzer",
590+
"views.Header.userCenter": "Benutzerbereich",
589591
"views.Admin.user": "Benutzer",
590-
"components.AddressSelect.userAddresses": "Benutzeradressen",
591-
"views.Admin.loginViaUserAdmin": "Benutzer-Admin-Berechtigung",
592+
"components.AddressSelect.linkedMailboxes": "Verknüpfte Postfächer",
593+
"views.Admin.loginViaUserAdmin": "Benutzerkonto (Administratorrolle)",
592594
"views.admin.Statistics.userCount": "Benutzeranzahl",
593595
"views.admin.UserManagement.user_email": "Benutzer-E-Mail",
594-
"views.index.AddressBar.userLogin": "Benutzeranmeldung",
596+
"views.index.AddressBar.userCenter": "Benutzerbereich",
595597
"views.Admin.user_management": "Benutzerverwaltung",
596598
"views.Admin.user_settings": "Benutzereinstellungen",
597599
"views.User.user_settings": "Benutzereinstellungen",
@@ -654,5 +656,12 @@ export const deMessages = {
654656
"components.AddressCredentialModal.username": "Benutzername",
655657
"views.User.send_mail": "E-Mail senden",
656658
"views.user.UserSendBox.noAddress": "Wähle eine verknüpfte E-Mail-Adresse aus",
657-
"views.user.UserSendBox.sendbox": "Gesendet"
659+
"views.user.UserSendBox.sendbox": "Gesendet",
660+
"components.MailContentRenderer.markAsRead": "Als gelesen markieren",
661+
"components.MailContentRenderer.markAsUnread": "Als ungelesen markieren",
662+
"components.MailContentRenderer.loadRemoteImages": "Bilder laden",
663+
"components.MailContentRenderer.remoteImagesBlocked": "{count} externe Ressourcen wurden zum Schutz deiner Privatsphäre blockiert",
664+
"views.user.AddressManagement.itemCount": "Gesamt",
665+
"views.index.SimpleIndex.readStatusUpdated": "Lesestatus aktualisiert",
666+
"views.common.Appearance.autoLoadRemoteImages": "Externe Bilder im E-Mail-Inhalt automatisch laden"
658667
}

0 commit comments

Comments
 (0)