Refactor settings to use common lang keys for titles (#1674)

This commit is contained in:
Prospector 2024-04-10 18:30:13 -07:00 committed by GitHub
parent 9c4421bfe0
commit 372d021062
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 82 additions and 103 deletions

View File

@ -88,7 +88,7 @@
<NuxtLink class="item button-transparent" :to="`/user/${auth.user.username}`"> <NuxtLink class="item button-transparent" :to="`/user/${auth.user.username}`">
<div class="title profile-link"> <div class="title profile-link">
<div class="username">@{{ auth.user.username }}</div> <div class="username">@{{ auth.user.username }}</div>
<div class="prompt">{{ formatMessage(messages.visitYourProfile) }}</div> <div class="prompt">{{ formatMessage(commonMessages.visitYourProfile) }}</div>
</div> </div>
</NuxtLink> </NuxtLink>
<hr class="divider" /> <hr class="divider" />
@ -492,10 +492,6 @@ const navMenuMessages = defineMessages({
}) })
const messages = defineMessages({ const messages = defineMessages({
visitYourProfile: {
id: 'layout.label.visit-your-profile',
defaultMessage: 'Visit your profile',
},
toggleMenu: { toggleMenu: {
id: 'layout.menu-toggle.action', id: 'layout.menu-toggle.action',
defaultMessage: 'Toggle menu', defaultMessage: 'Toggle menu',

View File

@ -344,6 +344,9 @@
"label.visibility": { "label.visibility": {
"message": "Visibility" "message": "Visibility"
}, },
"label.visit-your-profile": {
"message": "Visit your profile"
},
"layout.action.change-theme": { "layout.action.change-theme": {
"message": "Change theme" "message": "Change theme"
}, },
@ -410,9 +413,6 @@
"layout.footer.resources.title": { "layout.footer.resources.title": {
"message": "Resources" "message": "Resources"
}, },
"layout.label.visit-your-profile": {
"message": "Visit your profile"
},
"layout.menu-toggle.action": { "layout.menu-toggle.action": {
"message": "Toggle menu" "message": "Toggle menu"
}, },
@ -440,18 +440,9 @@
"profile.error.not-found": { "profile.error.not-found": {
"message": "User not found" "message": "User not found"
}, },
"profile.input.upload-avatar": {
"message": "Upload avatar"
},
"profile.joined-at": { "profile.joined-at": {
"message": "Joined {ago}" "message": "Joined {ago}"
}, },
"profile.label.edit-bio": {
"message": "Bio"
},
"profile.label.edit-username": {
"message": "Username"
},
"profile.label.no-collections": { "profile.label.no-collections": {
"message": "This user has no collections!" "message": "This user has no collections!"
}, },
@ -1019,9 +1010,6 @@
"settings.profile.username.title": { "settings.profile.username.title": {
"message": "Username" "message": "Username"
}, },
"settings.profile.visit-profile": {
"message": "Visit your profile"
},
"settings.sessions.action.revoke-session": { "settings.sessions.action.revoke-session": {
"message": "Revoke session" "message": "Revoke session"
}, },

View File

@ -8,45 +8,57 @@
<aside class="universal-card"> <aside class="universal-card">
<NavStack> <NavStack>
<h3>Display</h3> <h3>Display</h3>
<NavStackItem link="/settings" :label="formatMessage(messages.appearanceTitle)"> <NavStackItem
link="/settings"
:label="formatMessage(commonSettingsMessages.appearance)"
>
<PaintBrushIcon /> <PaintBrushIcon />
</NavStackItem> </NavStackItem>
<NavStackItem <NavStackItem
v-if="isStaging" v-if="isStaging"
link="/settings/language" link="/settings/language"
:label="formatMessage(messages.languageTitle)" :label="formatMessage(commonSettingsMessages.language)"
> >
<LanguagesIcon /> <LanguagesIcon />
</NavStackItem> </NavStackItem>
<template v-if="auth.user"> <template v-if="auth.user">
<h3>Account</h3> <h3>Account</h3>
<NavStackItem link="/settings/profile" :label="formatMessage(messages.profileTitle)"> <NavStackItem
link="/settings/profile"
:label="formatMessage(commonSettingsMessages.profile)"
>
<UserIcon /> <UserIcon />
</NavStackItem> </NavStackItem>
<NavStackItem link="/settings/account" :label="formatMessage(messages.accountTitle)"> <NavStackItem
link="/settings/account"
:label="formatMessage(commonSettingsMessages.account)"
>
<ShieldIcon /> <ShieldIcon />
</NavStackItem> </NavStackItem>
<NavStackItem <NavStackItem
link="/settings/authorizations" link="/settings/authorizations"
:label="formatMessage(messages.authorizedAppsTitle)" :label="formatMessage(commonSettingsMessages.authorizedApps)"
> >
<GridIcon /> <GridIcon />
</NavStackItem> </NavStackItem>
<NavStackItem <NavStackItem
link="/settings/sessions" link="/settings/sessions"
:label="formatMessage(messages.sessionsTitle)" :label="formatMessage(commonSettingsMessages.sessions)"
> >
<MonitorSmartphoneIcon /> <MonitorSmartphoneIcon />
</NavStackItem> </NavStackItem>
</template> </template>
<template v-if="auth.user"> <template v-if="auth.user">
<h3>Developer</h3> <h3>Developer</h3>
<NavStackItem link="/settings/pats" :label="formatMessage(messages.patsTitle)"> <NavStackItem
link="/settings/pats"
:label="formatMessage(commonSettingsMessages.pats)"
>
<KeyIcon /> <KeyIcon />
</NavStackItem> </NavStackItem>
<NavStackItem <NavStackItem
link="/settings/applications" link="/settings/applications"
:label="formatMessage(messages.applicationsTitle)" :label="formatMessage(commonSettingsMessages.applications)"
> >
<ServerIcon /> <ServerIcon />
</NavStackItem> </NavStackItem>
@ -62,7 +74,6 @@
</template> </template>
<script setup> <script setup>
import { import {
UsersIcon,
ServerIcon, ServerIcon,
GridIcon, GridIcon,
PaintBrushIcon, PaintBrushIcon,
@ -75,45 +86,10 @@ import NavStack from '~/components/ui/NavStack.vue'
import NavStackItem from '~/components/ui/NavStackItem.vue' import NavStackItem from '~/components/ui/NavStackItem.vue'
import MonitorSmartphoneIcon from '~/assets/images/utils/monitor-smartphone.svg' import MonitorSmartphoneIcon from '~/assets/images/utils/monitor-smartphone.svg'
import { commonMessages } from '~/utils/common-messages.ts' import { commonMessages, commonSettingsMessages } from '~/utils/common-messages.ts'
const { formatMessage } = useVIntl() const { formatMessage } = useVIntl()
const messages = defineMessages({
appearanceTitle: {
id: 'settings.appearance.title',
defaultMessage: 'Appearance',
},
languageTitle: {
id: 'settings.language.title',
defaultMessage: 'Language',
},
profileTitle: {
id: 'settings.profile.title',
defaultMessage: 'Public profile',
},
accountTitle: {
id: 'settings.account.title',
defaultMessage: 'Account and security',
},
authorizedAppsTitle: {
id: 'settings.authorized-apps.title',
defaultMessage: 'Authorized apps',
},
sessionsTitle: {
id: 'settings.sessions.title',
defaultMessage: 'Sessions',
},
patsTitle: {
id: 'settings.pats.title',
defaultMessage: 'Personal access tokens',
},
applicationsTitle: {
id: 'settings.applications.title',
defaultMessage: 'Your applications',
},
})
const route = useRoute() const route = useRoute()
const auth = await useAuth() const auth = await useAuth()
const isStaging = useRuntimeConfig().public.siteUrl !== 'https://modrinth.com' const isStaging = useRuntimeConfig().public.siteUrl !== 'https://modrinth.com'

View File

@ -128,7 +128,7 @@
<div class="header__row"> <div class="header__row">
<div class="header__title"> <div class="header__title">
<h2>Applications</h2> <h2>{{ formatMessage(commonSettingsMessages.applications) }}</h2>
</div> </div>
<button <button
class="btn btn-primary" class="btn btn-primary"
@ -238,6 +238,9 @@ import {
useScopes, useScopes,
getScopeValue, getScopeValue,
} from '~/composables/auth/scopes.ts' } from '~/composables/auth/scopes.ts'
import { commonSettingsMessages } from '~/utils/common-messages.ts'
const { formatMessage } = useVIntl()
definePageMeta({ definePageMeta({
middleware: 'auth', middleware: 'auth',

View File

@ -7,7 +7,7 @@
proceed-label="Revoke" proceed-label="Revoke"
@proceed="revokeApp(revokingId)" @proceed="revokeApp(revokingId)"
/> />
<h2>Authorizations</h2> <h2>{{ formatMessage(commonSettingsMessages.authorizedApps) }}</h2>
<p> <p>
When you authorize an application with your Modrinth account, you grant it access to your When you authorize an application with your Modrinth account, you grant it access to your
account. You can manage and review access to your account here at any time. account. You can manage and review access to your account here at any time.
@ -89,9 +89,11 @@
</template> </template>
<script setup> <script setup>
import { Button, TrashIcon, CheckIcon, ConfirmModal, Avatar } from 'omorphia' import { Button, TrashIcon, CheckIcon, ConfirmModal, Avatar } from 'omorphia'
import { commonSettingsMessages } from '~/utils/common-messages.ts'
import { useScopes } from '~/composables/auth/scopes.ts' import { useScopes } from '~/composables/auth/scopes.ts'
const { formatMessage } = useVIntl()
const { scopesToDefinitions } = useScopes() const { scopesToDefinitions } = useScopes()
const revokingId = ref(null) const revokingId = ref(null)

View File

@ -4,15 +4,12 @@ import RadioButtonIcon from '~/assets/images/utils/radio-button.svg'
import RadioButtonCheckedIcon from '~/assets/images/utils/radio-button-checked.svg' import RadioButtonCheckedIcon from '~/assets/images/utils/radio-button-checked.svg'
import WarningIcon from '~/assets/images/utils/issues.svg' import WarningIcon from '~/assets/images/utils/issues.svg'
import { isModifierKeyDown } from '~/helpers/events.ts' import { isModifierKeyDown } from '~/helpers/events.ts'
import { commonSettingsMessages } from '~/utils/common-messages.ts'
const vintl = useVIntl() const vintl = useVIntl()
const { formatMessage } = vintl const { formatMessage } = vintl
const messages = defineMessages({ const messages = defineMessages({
languagesTitle: {
id: 'settings.language.title',
defaultMessage: 'Language',
},
languagesDescription: { languagesDescription: {
id: 'settings.language.description', id: 'settings.language.description',
defaultMessage: defaultMessage:
@ -288,7 +285,7 @@ function getItemLabel(locale: Locale) {
<template> <template>
<div> <div>
<section class="universal-card"> <section class="universal-card">
<h2>{{ formatMessage(messages.languagesTitle) }}</h2> <h2>{{ formatMessage(commonSettingsMessages.language) }}</h2>
<div class="card-description"> <div class="card-description">
<IntlFormatted :message-id="messages.languagesDescription"> <IntlFormatted :message-id="messages.languagesDescription">

View File

@ -74,7 +74,7 @@
<div class="header__row"> <div class="header__row">
<div class="header__title"> <div class="header__title">
<h2>{{ formatMessage(messages.title) }}</h2> <h2>{{ formatMessage(commonSettingsMessages.pats) }}</h2>
</div> </div>
<button <button
class="btn btn-primary" class="btn btn-primary"
@ -204,6 +204,7 @@
<script setup> <script setup>
import { PlusIcon, XIcon, Checkbox, TrashIcon, EditIcon, SaveIcon, ConfirmModal } from 'omorphia' import { PlusIcon, XIcon, Checkbox, TrashIcon, EditIcon, SaveIcon, ConfirmModal } from 'omorphia'
import { commonSettingsMessages } from '~/utils/common-messages.ts'
import { import {
hasScope, hasScope,
scopeList, scopeList,
@ -262,10 +263,6 @@ const deleteModalMessages = defineMessages({
}) })
const messages = defineMessages({ const messages = defineMessages({
title: {
id: 'settings.pats.title',
defaultMessage: 'Personal access tokens',
},
description: { description: {
id: 'settings.pats.description', id: 'settings.pats.description',
defaultMessage: defaultMessage:

View File

@ -78,7 +78,7 @@
}} }}
</Button> </Button>
<Button :link="`/user/${auth.user.username}`"> <Button :link="`/user/${auth.user.username}`">
<UserIcon /> {{ formatMessage(messages.visitProfile) }} <UserIcon /> {{ formatMessage(commonMessages.visitYourProfile) }}
</Button> </Button>
</div> </div>
</section> </section>
@ -96,10 +96,10 @@ import {
UndoIcon, UndoIcon,
XIcon, XIcon,
} from 'omorphia' } from 'omorphia'
import { commonMessages } from '~/utils/common-messages' import { commonMessages } from '~/utils/common-messages.ts'
useHead({ useHead({
title: 'Account settings - Modrinth', title: 'Profile settings - Modrinth',
}) })
definePageMeta({ definePageMeta({
@ -142,10 +142,6 @@ const messages = defineMessages({
id: 'settings.profile.bio.description', id: 'settings.profile.bio.description',
defaultMessage: 'A short description to tell everyone a little bit about you.', defaultMessage: 'A short description to tell everyone a little bit about you.',
}, },
visitProfile: {
id: 'settings.profile.visit-profile',
defaultMessage: 'Visit your profile',
},
}) })
const auth = await useAuth() const auth = await useAuth()

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="universal-card"> <div class="universal-card">
<h2>{{ formatMessage(messages.sessionsTitle) }}</h2> <h2>{{ formatMessage(commonSettingsMessages.sessions) }}</h2>
<p class="preserve-lines"> <p class="preserve-lines">
{{ formatMessage(messages.sessionsDescription) }} {{ formatMessage(messages.sessionsDescription) }}
</p> </p>
@ -57,6 +57,7 @@
</template> </template>
<script setup> <script setup>
import { XIcon } from 'omorphia' import { XIcon } from 'omorphia'
import { commonSettingsMessages } from '~/utils/common-messages.ts'
definePageMeta({ definePageMeta({
middleware: 'auth', middleware: 'auth',
@ -87,10 +88,6 @@ const messages = defineMessages({
id: 'settings.sessions.last-accessed-ago', id: 'settings.sessions.last-accessed-ago',
defaultMessage: 'Last accessed {ago}', defaultMessage: 'Last accessed {ago}',
}, },
sessionsTitle: {
id: 'settings.sessions.title',
defaultMessage: 'Sessions',
},
unknownOsLabel: { unknownOsLabel: {
id: 'settings.sessions.unknown-os', id: 'settings.sessions.unknown-os',
defaultMessage: 'Unknown OS', defaultMessage: 'Unknown OS',
@ -102,7 +99,7 @@ const messages = defineMessages({
}) })
useHead({ useHead({
title: () => `${formatMessage(messages.sessionsTitle)} - Modrinth`, title: () => `${formatMessage(messages.sessions)} - Modrinth`,
}) })
const data = useNuxtApp() const data = useNuxtApp()

View File

@ -355,18 +355,6 @@ const messages = defineMessages({
id: 'profile.button.report', id: 'profile.button.report',
defaultMessage: 'Report', defaultMessage: 'Report',
}, },
profileUploadAvatarInput: {
id: 'profile.input.upload-avatar',
defaultMessage: 'Upload avatar',
},
profileEditUsernameLabel: {
id: 'profile.label.edit-username',
defaultMessage: 'Username',
},
profileEditBioLabel: {
id: 'profile.label.edit-bio',
defaultMessage: 'Bio',
},
profileNoProjectsLabel: { profileNoProjectsLabel: {
id: 'profile.label.no-projects', id: 'profile.label.no-projects',
defaultMessage: 'This user has no projects!', defaultMessage: 'This user has no projects!',

View File

@ -135,4 +135,43 @@ export const commonMessages = defineMessages({
id: 'label.visibility', id: 'label.visibility',
defaultMessage: 'Visibility', defaultMessage: 'Visibility',
}, },
visitYourProfile: {
id: 'label.visit-your-profile',
defaultMessage: 'Visit your profile',
},
})
export const commonSettingsMessages = defineMessages({
appearance: {
id: 'settings.appearance.title',
defaultMessage: 'Appearance',
},
language: {
id: 'settings.language.title',
defaultMessage: 'Language',
},
profile: {
id: 'settings.profile.title',
defaultMessage: 'Public profile',
},
account: {
id: 'settings.account.title',
defaultMessage: 'Account and security',
},
authorizedApps: {
id: 'settings.authorized-apps.title',
defaultMessage: 'Authorized apps',
},
sessions: {
id: 'settings.sessions.title',
defaultMessage: 'Sessions',
},
pats: {
id: 'settings.pats.title',
defaultMessage: 'Personal access tokens',
},
applications: {
id: 'settings.applications.title',
defaultMessage: 'Your applications',
},
}) })