Deduplicate common strings in translation (#5085)

* deduplicate common strings, part 1

* deduplicate common strings, part 2

* typo and general import mess fixes

* detail common string

* fix lint

* fix lint TWO

* adress review concerns + lint

* app lint too

* actually leave privateLabel untouched

* lint fix THREE

* fix: broken msg

* fix: lint

---------

Co-authored-by: Calum H. <contact@cal.engineer>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
This commit is contained in:
lumiscosity
2026-01-28 19:10:50 +01:00
committed by GitHub
parent 400c571fe6
commit 6d68d50699
31 changed files with 279 additions and 624 deletions

View File

@@ -7,7 +7,14 @@ import {
MonitorIcon, MonitorIcon,
WrenchIcon, WrenchIcon,
} from '@modrinth/assets' } from '@modrinth/assets'
import { Avatar, defineMessage, TabbedModal, type TabbedModalTab, useVIntl } from '@modrinth/ui' import {
Avatar,
commonMessages,
defineMessage,
TabbedModal,
type TabbedModalTab,
useVIntl,
} from '@modrinth/ui'
import { convertFileSrc } from '@tauri-apps/api/core' import { convertFileSrc } from '@tauri-apps/api/core'
import { ref } from 'vue' import { ref } from 'vue'
@@ -74,11 +81,6 @@ function show() {
} }
defineExpose({ show }) defineExpose({ show })
const titleMessage = defineMessage({
id: 'instance.settings.title',
defaultMessage: 'Settings',
})
</script> </script>
<template> <template>
<ModalWrapper ref="modal"> <ModalWrapper ref="modal">
@@ -90,7 +92,9 @@ const titleMessage = defineMessage({
:tint-by="props.instance.path" :tint-by="props.instance.path"
/> />
{{ instance.name }} <ChevronRightIcon /> {{ instance.name }} <ChevronRightIcon />
<span class="font-extrabold text-contrast">{{ formatMessage(titleMessage) }}</span> <span class="font-extrabold text-contrast">{{
formatMessage(commonMessages.settingsLabel)
}}</span>
</span> </span>
</template> </template>

View File

@@ -476,9 +476,6 @@
"instance.settings.tabs.window.width.enter": { "instance.settings.tabs.window.width.enter": {
"message": "Enter width..." "message": "Enter width..."
}, },
"instance.settings.title": {
"message": "Settings"
},
"instance.worlds.a_minecraft_server": { "instance.worlds.a_minecraft_server": {
"message": "A Minecraft Server" "message": "A Minecraft Server"
}, },

View File

@@ -9,13 +9,13 @@
<ButtonStyled color="brand"> <ButtonStyled color="brand">
<button class="brand-button" @click="acceptInvite()"> <button class="brand-button" @click="acceptInvite()">
<CheckIcon /> <CheckIcon />
{{ getFormattedMessage(messages.accept) }} {{ getFormattedMessage(commonMessages.acceptButton) }}
</button> </button>
</ButtonStyled> </ButtonStyled>
<ButtonStyled color="red"> <ButtonStyled color="red">
<button @click="declineInvite"> <button @click="declineInvite">
<XIcon /> <XIcon />
{{ getFormattedMessage(messages.decline) }} {{ getFormattedMessage(commonMessages.declineButton) }}
</button> </button>
</ButtonStyled> </ButtonStyled>
</div> </div>
@@ -26,6 +26,7 @@
import { CheckIcon, XIcon } from '@modrinth/assets' import { CheckIcon, XIcon } from '@modrinth/assets'
import { import {
ButtonStyled, ButtonStyled,
commonMessages,
defineMessages, defineMessages,
injectNotificationManager, injectNotificationManager,
type MessageDescriptor, type MessageDescriptor,
@@ -81,14 +82,6 @@ const messages = defineMessages({
defaultMessage: defaultMessage:
"You've been invited to join this project. Please accept or decline the invitation.", "You've been invited to join this project. Please accept or decline the invitation.",
}, },
accept: {
id: 'project-member-header.accept',
defaultMessage: 'Accept',
},
decline: {
id: 'project-member-header.decline',
defaultMessage: 'Decline',
},
successJoin: { successJoin: {
id: 'project-member-header.success-join', id: 'project-member-header.success-join',
defaultMessage: 'You have joined the project team', defaultMessage: 'You have joined the project team',
@@ -105,14 +98,6 @@ const messages = defineMessages({
id: 'project-member-header.error-decline', id: 'project-member-header.error-decline',
defaultMessage: 'Failed to decline team invitation', defaultMessage: 'Failed to decline team invitation',
}, },
success: {
id: 'project-member-header.success',
defaultMessage: 'Success',
},
error: {
id: 'project-member-header.error',
defaultMessage: 'Error',
},
}) })
const { formatMessage } = useVIntl() const { formatMessage } = useVIntl()
@@ -171,13 +156,13 @@ async function acceptInvite(): Promise<void> {
await acceptTeamInvite(props.project.team) await acceptTeamInvite(props.project.team)
await handleUpdateMembers() await handleUpdateMembers()
addNotification({ addNotification({
title: formatMessage(messages.success), title: formatMessage(commonMessages.successLabel),
text: formatMessage(messages.successJoin), text: formatMessage(messages.successJoin),
type: 'success', type: 'success',
}) })
} catch { } catch {
addNotification({ addNotification({
title: formatMessage(messages.error), title: formatMessage(commonMessages.errorLabel),
text: formatMessage(messages.errorJoin), text: formatMessage(messages.errorJoin),
type: 'error', type: 'error',
}) })
@@ -192,13 +177,13 @@ async function declineInvite(): Promise<void> {
await removeTeamMember(props.project.team, props.auth.user.id) await removeTeamMember(props.project.team, props.auth.user.id)
await handleUpdateMembers() await handleUpdateMembers()
addNotification({ addNotification({
title: formatMessage(messages.success), title: formatMessage(commonMessages.successLabel),
text: formatMessage(messages.successDecline), text: formatMessage(messages.successDecline),
type: 'success', type: 'success',
}) })
} catch { } catch {
addNotification({ addNotification({
title: formatMessage(messages.error), title: formatMessage(commonMessages.errorLabel),
text: formatMessage(messages.errorDecline), text: formatMessage(messages.errorDecline),
type: 'error', type: 'error',
}) })

View File

@@ -43,7 +43,7 @@
<ButtonStyled class="w-24"> <ButtonStyled class="w-24">
<button @click="modal.hide()"> <button @click="modal.hide()">
<XIcon aria-hidden="true" /> <XIcon aria-hidden="true" />
{{ formatMessage(messages.cancel) }} {{ formatMessage(commonMessages.cancelButton) }}
</button> </button>
</ButtonStyled> </ButtonStyled>
<ButtonStyled color="brand" class="w-36"> <ButtonStyled color="brand" class="w-36">
@@ -60,6 +60,7 @@
import { PlusIcon, XIcon } from '@modrinth/assets' import { PlusIcon, XIcon } from '@modrinth/assets'
import { import {
ButtonStyled, ButtonStyled,
commonMessages,
defineMessages, defineMessages,
injectNotificationManager, injectNotificationManager,
NewModal, NewModal,
@@ -102,18 +103,10 @@ const messages = defineMessages({
defaultMessage: defaultMessage:
'Your new collection will be created as a public collection with {count, plural, =0 {no projects} one {# project} other {# projects}}.', 'Your new collection will be created as a public collection with {count, plural, =0 {no projects} one {# project} other {# projects}}.',
}, },
cancel: {
id: 'create.collection.cancel',
defaultMessage: 'Cancel',
},
createCollection: { createCollection: {
id: 'create.collection.create-collection', id: 'create.collection.create-collection',
defaultMessage: 'Create collection', defaultMessage: 'Create collection',
}, },
errorTitle: {
id: 'create.collection.error-title',
defaultMessage: 'An error occurred',
},
}) })
const name = ref('') const name = ref('')
@@ -150,7 +143,7 @@ async function create() {
await router.push(`/collection/${result.id}`) await router.push(`/collection/${result.id}`)
} catch (err) { } catch (err) {
addNotification({ addNotification({
title: formatMessage(messages.errorTitle), title: formatMessage(commonMessages.errorNotificationTitle),
text: err?.data?.description || err?.message || err, text: err?.data?.description || err?.message || err,
type: 'error', type: 'error',
}) })

View File

@@ -65,7 +65,7 @@
<ButtonStyled class="w-24"> <ButtonStyled class="w-24">
<button @click="hide"> <button @click="hide">
<XIcon aria-hidden="true" /> <XIcon aria-hidden="true" />
{{ formatMessage(messages.cancel) }} {{ formatMessage(commonMessages.cancelButton) }}
</button> </button>
</ButtonStyled> </ButtonStyled>
<ButtonStyled color="brand" class="w-40"> <ButtonStyled color="brand" class="w-40">
@@ -83,6 +83,7 @@
import { PlusIcon, XIcon } from '@modrinth/assets' import { PlusIcon, XIcon } from '@modrinth/assets'
import { import {
ButtonStyled, ButtonStyled,
commonMessages,
defineMessages, defineMessages,
injectNotificationManager, injectNotificationManager,
NewModal, NewModal,
@@ -130,18 +131,10 @@ const messages = defineMessages({
defaultMessage: defaultMessage:
'You will be the owner of this organization, but you can invite other members and transfer ownership at any time.', 'You will be the owner of this organization, but you can invite other members and transfer ownership at any time.',
}, },
cancel: {
id: 'create.organization.cancel',
defaultMessage: 'Cancel',
},
createOrganization: { createOrganization: {
id: 'create.organization.create-organization', id: 'create.organization.create-organization',
defaultMessage: 'Create organization', defaultMessage: 'Create organization',
}, },
errorTitle: {
id: 'create.organization.error-title',
defaultMessage: 'An error occurred',
},
}) })
const name = ref<string>('') const name = ref<string>('')
@@ -172,7 +165,7 @@ async function createOrganization(): Promise<void> {
} catch (err: any) { } catch (err: any) {
console.error(err) console.error(err)
addNotification({ addNotification({
title: formatMessage(messages.errorTitle), title: formatMessage(commonMessages.errorNotificationTitle),
text: err.data ? err.data.description : err, text: err.data ? err.data.description : err,
type: 'error', type: 'error',
}) })

View File

@@ -43,7 +43,7 @@
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<label for="visibility" class="flex flex-col gap-1"> <label for="visibility" class="flex flex-col gap-1">
<span class="text-lg font-semibold text-contrast"> <span class="text-lg font-semibold text-contrast">
{{ formatMessage(messages.visibilityLabel) }} {{ formatMessage(commonMessages.visibilityLabel) }}
<span class="text-brand-red">*</span> <span class="text-brand-red">*</span>
</span> </span>
<span>{{ formatMessage(messages.visibilityDescription) }}</span> <span>{{ formatMessage(messages.visibilityDescription) }}</span>
@@ -79,7 +79,7 @@
<ButtonStyled class="w-24"> <ButtonStyled class="w-24">
<button @click="cancel"> <button @click="cancel">
<XIcon aria-hidden="true" /> <XIcon aria-hidden="true" />
{{ formatMessage(messages.cancel) }} {{ formatMessage(commonMessages.cancelButton) }}
</button> </button>
</ButtonStyled> </ButtonStyled>
<ButtonStyled color="brand" class="w-32"> <ButtonStyled color="brand" class="w-32">
@@ -98,6 +98,7 @@ import { PlusIcon, XIcon } from '@modrinth/assets'
import { import {
ButtonStyled, ButtonStyled,
Chips, Chips,
commonMessages,
defineMessages, defineMessages,
injectNotificationManager, injectNotificationManager,
NewModal, NewModal,
@@ -127,10 +128,6 @@ const messages = defineMessages({
id: 'create.project.url-label', id: 'create.project.url-label',
defaultMessage: 'URL', defaultMessage: 'URL',
}, },
visibilityLabel: {
id: 'create.project.visibility-label',
defaultMessage: 'Visibility',
},
visibilityDescription: { visibilityDescription: {
id: 'create.project.visibility-description', id: 'create.project.visibility-description',
defaultMessage: 'The visibility of your project after it has been approved.', defaultMessage: 'The visibility of your project after it has been approved.',
@@ -147,18 +144,10 @@ const messages = defineMessages({
id: 'create.project.summary-placeholder', id: 'create.project.summary-placeholder',
defaultMessage: 'This project adds...', defaultMessage: 'This project adds...',
}, },
cancel: {
id: 'create.project.cancel',
defaultMessage: 'Cancel',
},
createProject: { createProject: {
id: 'create.project.create-project', id: 'create.project.create-project',
defaultMessage: 'Create project', defaultMessage: 'Create project',
}, },
errorTitle: {
id: 'create.project.error-title',
defaultMessage: 'An error occurred',
},
visibilityPublic: { visibilityPublic: {
id: 'create.project.visibility-public', id: 'create.project.visibility-public',
defaultMessage: 'Public', defaultMessage: 'Public',
@@ -256,7 +245,7 @@ async function createProject() {
await router.push(`/project/${slug.value}/settings`) await router.push(`/project/${slug.value}/settings`)
} catch (err) { } catch (err) {
addNotification({ addNotification({
title: formatMessage(messages.errorTitle), title: formatMessage(commonMessages.errorNotificationTitle),
text: err.data ? err.data.description : err, text: err.data ? err.data.description : err,
type: 'error', type: 'error',
}) })

View File

@@ -37,7 +37,10 @@
v-model="isUSCitizen" v-model="isUSCitizen"
:items="['yes', 'no']" :items="['yes', 'no']"
:format-label=" :format-label="
(item) => (item === 'yes' ? formatMessage(messages.yes) : formatMessage(messages.no)) (item) =>
item === 'yes'
? formatMessage(commonMessages.yesLabel)
: formatMessage(commonMessages.noLabel)
" "
:never-empty="false" :never-empty="false"
:capitalize="true" :capitalize="true"
@@ -162,6 +165,7 @@ import {
Admonition, Admonition,
ButtonStyled, ButtonStyled,
Chips, Chips,
commonMessages,
defineMessages, defineMessages,
injectNotificationManager, injectNotificationManager,
IntlFormatted, IntlFormatted,
@@ -228,8 +232,6 @@ const messages = defineMessages({
id: 'dashboard.creator-tax-form-modal.us-citizen.question', id: 'dashboard.creator-tax-form-modal.us-citizen.question',
defaultMessage: 'Are you a US citizen?', defaultMessage: 'Are you a US citizen?',
}, },
yes: { id: 'common.yes', defaultMessage: 'Yes' },
no: { id: 'common.no', defaultMessage: 'No' },
entityQuestion: { entityQuestion: {
id: 'dashboard.creator-tax-form-modal.entity.question', id: 'dashboard.creator-tax-form-modal.entity.question',
defaultMessage: 'Are you a private individual or part of a foreign entity?', defaultMessage: 'Are you a private individual or part of a foreign entity?',

View File

@@ -60,7 +60,7 @@
<div v-if="currentStage === 'completion'" class="mt-4 flex w-full gap-3"> <div v-if="currentStage === 'completion'" class="mt-4 flex w-full gap-3">
<ButtonStyled class="flex-1"> <ButtonStyled class="flex-1">
<button class="w-full text-contrast" @click="handleClose"> <button class="w-full text-contrast" @click="handleClose">
{{ formatMessage(messages.closeButton) }} {{ formatMessage(commonMessages.closeButton) }}
</button> </button>
</ButtonStyled> </ButtonStyled>
<ButtonStyled class="flex-1"> <ButtonStyled class="flex-1">
@@ -601,26 +601,10 @@ const messages = defineMessages({
id: 'dashboard.creator-withdraw-modal.stage.method-selection', id: 'dashboard.creator-withdraw-modal.stage.method-selection',
defaultMessage: 'Method', defaultMessage: 'Method',
}, },
tremendousDetailsStage: {
id: 'dashboard.creator-withdraw-modal.stage.tremendous-details',
defaultMessage: 'Details',
},
muralpayKycStage: {
id: 'dashboard.creator-withdraw-modal.stage.muralpay-kyc',
defaultMessage: 'Verification',
},
muralpayDetailsStage: {
id: 'dashboard.creator-withdraw-modal.stage.muralpay-details',
defaultMessage: 'Account Details',
},
completionStage: { completionStage: {
id: 'dashboard.creator-withdraw-modal.stage.completion', id: 'dashboard.creator-withdraw-modal.stage.completion',
defaultMessage: 'Complete', defaultMessage: 'Complete',
}, },
detailsLabel: {
id: 'dashboard.creator-withdraw-modal.details-label',
defaultMessage: 'Details',
},
completeTaxForm: { completeTaxForm: {
id: 'dashboard.creator-withdraw-modal.complete-tax-form', id: 'dashboard.creator-withdraw-modal.complete-tax-form',
defaultMessage: 'Complete tax form', defaultMessage: 'Complete tax form',
@@ -629,14 +613,14 @@ const messages = defineMessages({
id: 'dashboard.creator-withdraw-modal.continue-with-limit', id: 'dashboard.creator-withdraw-modal.continue-with-limit',
defaultMessage: 'Continue with limit', defaultMessage: 'Continue with limit',
}, },
detailsLabel: {
id: 'dashboard.creator-withdraw-modal.details-label',
defaultMessage: 'Details',
},
withdrawButton: { withdrawButton: {
id: 'dashboard.creator-withdraw-modal.withdraw-button', id: 'dashboard.creator-withdraw-modal.withdraw-button',
defaultMessage: 'Withdraw', defaultMessage: 'Withdraw',
}, },
closeButton: {
id: 'dashboard.withdraw.completion.close-button',
defaultMessage: 'Close',
},
transactionsButton: { transactionsButton: {
id: 'dashboard.withdraw.completion.transactions-button', id: 'dashboard.withdraw.completion.transactions-button',
defaultMessage: 'Transactions', defaultMessage: 'Transactions',

View File

@@ -287,13 +287,5 @@ const messages = defineMessages({
defaultMessage: defaultMessage:
"You'll receive an email at <b>{email}</b> with instructions to redeem your withdrawal.", "You'll receive an email at <b>{email}</b> with instructions to redeem your withdrawal.",
}, },
closeButton: {
id: 'dashboard.withdraw.completion.close-button',
defaultMessage: 'Close',
},
transactionsButton: {
id: 'dashboard.withdraw.completion.transactions-button',
defaultMessage: 'Transactions',
},
}) })
</script> </script>

View File

@@ -57,8 +57,8 @@
<SaveIcon v-else /> <SaveIcon v-else />
{{ {{
venmoSaveSuccess venmoSaveSuccess
? formatMessage(messages.savedButton) ? formatMessage(commonMessages.savedLabel)
: formatMessage(messages.saveButton) : formatMessage(commonMessages.saveButton)
}} }}
</button> </button>
</ButtonStyled> </ButtonStyled>
@@ -107,6 +107,7 @@ import { CheckIcon, PayPalColorIcon, SaveIcon, XIcon } from '@modrinth/assets'
import { import {
ButtonStyled, ButtonStyled,
Checkbox, Checkbox,
commonMessages,
defineMessages, defineMessages,
financialMessages, financialMessages,
formFieldLabels, formFieldLabels,
@@ -342,14 +343,6 @@ const messages = defineMessages({
id: 'dashboard.creator-withdraw-modal.paypal-details.disconnect-account', id: 'dashboard.creator-withdraw-modal.paypal-details.disconnect-account',
defaultMessage: 'Disconnect account', defaultMessage: 'Disconnect account',
}, },
saveButton: {
id: 'dashboard.creator-withdraw-modal.paypal-details.save-button',
defaultMessage: 'Save',
},
savedButton: {
id: 'dashboard.creator-withdraw-modal.paypal-details.saved-button',
defaultMessage: 'Saved',
},
saveSuccess: { saveSuccess: {
id: 'dashboard.creator-withdraw-modal.paypal-details.save-success', id: 'dashboard.creator-withdraw-modal.paypal-details.save-success',
defaultMessage: 'Venmo handle saved successfully!', defaultMessage: 'Venmo handle saved successfully!',

View File

@@ -470,7 +470,7 @@
<CurrencyIcon aria-hidden="true" /> {{ formatMessage(messages.revenue) }} <CurrencyIcon aria-hidden="true" /> {{ formatMessage(messages.revenue) }}
</template> </template>
<template #analytics> <template #analytics>
<ChartIcon aria-hidden="true" /> {{ formatMessage(messages.analytics) }} <ChartIcon aria-hidden="true" /> {{ formatMessage(commonMessages.analyticsButton) }}
</template> </template>
<template #moderation> <template #moderation>
<ScaleIcon aria-hidden="true" /> {{ formatMessage(commonMessages.moderationLabel) }} <ScaleIcon aria-hidden="true" /> {{ formatMessage(commonMessages.moderationLabel) }}
@@ -899,10 +899,6 @@ const messages = defineMessages({
id: 'layout.nav.revenue', id: 'layout.nav.revenue',
defaultMessage: 'Revenue', defaultMessage: 'Revenue',
}, },
analytics: {
id: 'layout.nav.analytics',
defaultMessage: 'Analytics',
},
activeReports: { activeReports: {
id: 'layout.nav.active-reports', id: 'layout.nav.active-reports',
defaultMessage: 'Active reports', defaultMessage: 'Active reports',

View File

@@ -230,12 +230,6 @@
"auth.reset-password.method-choice.description": { "auth.reset-password.method-choice.description": {
"message": "Enter your email below and we'll send a recovery link to allow you to recover your account." "message": "Enter your email below and we'll send a recovery link to allow you to recover your account."
}, },
"auth.reset-password.method-choice.email-username.label": {
"message": "Email or username"
},
"auth.reset-password.method-choice.email-username.placeholder": {
"message": "Email"
},
"auth.reset-password.notification.email-sent.text": { "auth.reset-password.notification.email-sent.text": {
"message": "An email with instructions has been sent to you if the email was previously saved on your account." "message": "An email with instructions has been sent to you if the email was previously saved on your account."
}, },
@@ -275,12 +269,6 @@
"auth.sign-in.additional-options": { "auth.sign-in.additional-options": {
"message": "<forgot-password-link>Forgot password?</forgot-password-link> • <create-account-link>Create an account</create-account-link>" "message": "<forgot-password-link>Forgot password?</forgot-password-link> • <create-account-link>Create an account</create-account-link>"
}, },
"auth.sign-in.email-username.label": {
"message": "Email or username"
},
"auth.sign-in.password.label": {
"message": "Password"
},
"auth.sign-in.sign-in-with": { "auth.sign-in.sign-in-with": {
"message": "Sign in with" "message": "Sign in with"
}, },
@@ -293,24 +281,12 @@
"auth.sign-up.action.create-account": { "auth.sign-up.action.create-account": {
"message": "Create account" "message": "Create account"
}, },
"auth.sign-up.confirm-password.label": {
"message": "Confirm password"
},
"auth.sign-up.email.label": {
"message": "Email"
},
"auth.sign-up.label.username": {
"message": "Username"
},
"auth.sign-up.legal-dislaimer": { "auth.sign-up.legal-dislaimer": {
"message": "By creating an account, you agree to Modrinth's <terms-link>Terms</terms-link> and <privacy-policy-link>Privacy Policy</privacy-policy-link>." "message": "By creating an account, you agree to Modrinth's <terms-link>Terms</terms-link> and <privacy-policy-link>Privacy Policy</privacy-policy-link>."
}, },
"auth.sign-up.notification.password-mismatch.text": { "auth.sign-up.notification.password-mismatch.text": {
"message": "Passwords do not match!" "message": "Passwords do not match!"
}, },
"auth.sign-up.password.label": {
"message": "Password"
},
"auth.sign-up.sign-in-option.title": { "auth.sign-up.sign-in-option.title": {
"message": "Already have an account?" "message": "Already have an account?"
}, },
@@ -329,9 +305,6 @@
"auth.verify-email.action.account-settings": { "auth.verify-email.action.account-settings": {
"message": "Account settings" "message": "Account settings"
}, },
"auth.verify-email.action.sign-in": {
"message": "Sign in"
},
"auth.verify-email.already-verified.description": { "auth.verify-email.already-verified.description": {
"message": "Your email is already verified!" "message": "Your email is already verified!"
}, },
@@ -416,12 +389,6 @@
"collection.label.curated-by": { "collection.label.curated-by": {
"message": "Curated by" "message": "Curated by"
}, },
"collection.label.description": {
"message": "Description"
},
"collection.label.details": {
"message": "Details"
},
"collection.label.no-projects": { "collection.label.no-projects": {
"message": "No projects in collection yet" "message": "No projects in collection yet"
}, },
@@ -440,27 +407,15 @@
"collection.title": { "collection.title": {
"message": "{name} - Collection" "message": "{name} - Collection"
}, },
"common.no": {
"message": "No"
},
"common.yes": {
"message": "Yes"
},
"create-project-version.create-modal.stage.add-files.admonition": { "create-project-version.create-modal.stage.add-files.admonition": {
"message": "Supplementary files are for supporting resources like source code, not for alternative versions or variants." "message": "Supplementary files are for supporting resources like source code, not for alternative versions or variants."
}, },
"create.collection.cancel": {
"message": "Cancel"
},
"create.collection.collection-info": { "create.collection.collection-info": {
"message": "Your new collection will be created as a public collection with {count, plural, =0 {no projects} one {# project} other {# projects}}." "message": "Your new collection will be created as a public collection with {count, plural, =0 {no projects} one {# project} other {# projects}}."
}, },
"create.collection.create-collection": { "create.collection.create-collection": {
"message": "Create collection" "message": "Create collection"
}, },
"create.collection.error-title": {
"message": "An error occurred"
},
"create.collection.name-label": { "create.collection.name-label": {
"message": "Name" "message": "Name"
}, },
@@ -512,15 +467,9 @@
"create.limit-alert.type-project": { "create.limit-alert.type-project": {
"message": "project" "message": "project"
}, },
"create.organization.cancel": {
"message": "Cancel"
},
"create.organization.create-organization": { "create.organization.create-organization": {
"message": "Create organization" "message": "Create organization"
}, },
"create.organization.error-title": {
"message": "An error occurred"
},
"create.organization.name-label": { "create.organization.name-label": {
"message": "Name" "message": "Name"
}, },
@@ -545,15 +494,9 @@
"create.organization.url-label": { "create.organization.url-label": {
"message": "URL" "message": "URL"
}, },
"create.project.cancel": {
"message": "Cancel"
},
"create.project.create-project": { "create.project.create-project": {
"message": "Create project" "message": "Create project"
}, },
"create.project.error-title": {
"message": "An error occurred"
},
"create.project.name-label": { "create.project.name-label": {
"message": "Name" "message": "Name"
}, },
@@ -578,9 +521,6 @@
"create.project.visibility-description": { "create.project.visibility-description": {
"message": "The visibility of your project after it has been approved." "message": "The visibility of your project after it has been approved."
}, },
"create.project.visibility-label": {
"message": "Visibility"
},
"create.project.visibility-private": { "create.project.visibility-private": {
"message": "Private" "message": "Private"
}, },
@@ -788,15 +728,9 @@
"dashboard.creator-withdraw-modal.paypal-details.paypal-auth-description": { "dashboard.creator-withdraw-modal.paypal-details.paypal-auth-description": {
"message": "Connect your PayPal account to receive payments directly." "message": "Connect your PayPal account to receive payments directly."
}, },
"dashboard.creator-withdraw-modal.paypal-details.save-button": {
"message": "Save"
},
"dashboard.creator-withdraw-modal.paypal-details.save-success": { "dashboard.creator-withdraw-modal.paypal-details.save-success": {
"message": "Venmo handle saved successfully!" "message": "Venmo handle saved successfully!"
}, },
"dashboard.creator-withdraw-modal.paypal-details.saved-button": {
"message": "Saved"
},
"dashboard.creator-withdraw-modal.paypal-details.sign-in-with-paypal": { "dashboard.creator-withdraw-modal.paypal-details.sign-in-with-paypal": {
"message": "Sign in with PayPal" "message": "Sign in with PayPal"
}, },
@@ -815,18 +749,9 @@
"dashboard.creator-withdraw-modal.stage.method-selection": { "dashboard.creator-withdraw-modal.stage.method-selection": {
"message": "Method" "message": "Method"
}, },
"dashboard.creator-withdraw-modal.stage.muralpay-details": {
"message": "Account Details"
},
"dashboard.creator-withdraw-modal.stage.muralpay-kyc": {
"message": "Verification"
},
"dashboard.creator-withdraw-modal.stage.tax-form": { "dashboard.creator-withdraw-modal.stage.tax-form": {
"message": "Tax form" "message": "Tax form"
}, },
"dashboard.creator-withdraw-modal.stage.tremendous-details": {
"message": "Details"
},
"dashboard.creator-withdraw-modal.tax-form-required.body": { "dashboard.creator-withdraw-modal.tax-form-required.body": {
"message": "To withdraw your full <b>{available}</b> available balance please complete the form below. It is required for tax reporting and only needs to be done once." "message": "To withdraw your full <b>{available}</b> available balance please complete the form below. It is required for tax reporting and only needs to be done once."
}, },
@@ -956,9 +881,6 @@
"dashboard.withdraw.completion.amount": { "dashboard.withdraw.completion.amount": {
"message": "Amount" "message": "Amount"
}, },
"dashboard.withdraw.completion.close-button": {
"message": "Close"
},
"dashboard.withdraw.completion.date": { "dashboard.withdraw.completion.date": {
"message": "Date" "message": "Date"
}, },
@@ -1469,15 +1391,6 @@
"landing.notifications.version-released": { "landing.notifications.version-released": {
"message": "Version {version} has been released for {gameVersion}" "message": "Version {version} has been released for {gameVersion}"
}, },
"landing.search.label": {
"message": "Search"
},
"landing.search.placeholder": {
"message": "Search..."
},
"landing.search.sort-by.label": {
"message": "Sort by"
},
"landing.section.for-creators.description": { "landing.section.for-creators.description": {
"message": "Give an online home to your creations and reach a massive audience of dedicated players." "message": "Give an online home to your creations and reach a massive audience of dedicated players."
}, },
@@ -1703,9 +1616,6 @@
"layout.nav.active-reports": { "layout.nav.active-reports": {
"message": "Active reports" "message": "Active reports"
}, },
"layout.nav.analytics": {
"message": "Analytics"
},
"layout.nav.discover": { "layout.nav.discover": {
"message": "Discover" "message": "Discover"
}, },
@@ -1754,9 +1664,6 @@
"layout.nav.upgrade-to-modrinth-plus": { "layout.nav.upgrade-to-modrinth-plus": {
"message": "Upgrade to Modrinth+" "message": "Upgrade to Modrinth+"
}, },
"moderation.filter.by": {
"message": "Filter by"
},
"moderation.moderate": { "moderation.moderate": {
"message": "Moderate" "message": "Moderate"
}, },
@@ -1769,12 +1676,6 @@
"moderation.page.technicalReview": { "moderation.page.technicalReview": {
"message": "Technical Review" "message": "Technical Review"
}, },
"moderation.search.placeholder": {
"message": "Search..."
},
"moderation.sort.by": {
"message": "Sort by"
},
"muralpay.account-type.checking": { "muralpay.account-type.checking": {
"message": "Checking" "message": "Checking"
}, },
@@ -2102,18 +2003,12 @@
"profile.label.collection": { "profile.label.collection": {
"message": "Collection" "message": "Collection"
}, },
"profile.label.details": {
"message": "Details"
},
"profile.label.downloads": { "profile.label.downloads": {
"message": "{count} {count, plural, one {download} other {downloads}}" "message": "{count} {count, plural, one {download} other {downloads}}"
}, },
"profile.label.joined": { "profile.label.joined": {
"message": "Joined" "message": "Joined"
}, },
"profile.label.no": {
"message": "No"
},
"profile.label.no-collections": { "profile.label.no-collections": {
"message": "This user has no collections!" "message": "This user has no collections!"
}, },
@@ -2135,9 +2030,6 @@
"profile.label.saving": { "profile.label.saving": {
"message": "Saving..." "message": "Saving..."
}, },
"profile.label.yes": {
"message": "Yes"
},
"profile.meta.description": { "profile.meta.description": {
"message": "Download {username}'s projects on Modrinth" "message": "Download {username}'s projects on Modrinth"
}, },
@@ -2150,15 +2042,6 @@
"profile.user-id": { "profile.user-id": {
"message": "User ID: {id}" "message": "User ID: {id}"
}, },
"project-member-header.accept": {
"message": "Accept"
},
"project-member-header.decline": {
"message": "Decline"
},
"project-member-header.error": {
"message": "Error"
},
"project-member-header.error-decline": { "project-member-header.error-decline": {
"message": "Failed to decline team invitation" "message": "Failed to decline team invitation"
}, },
@@ -2174,9 +2057,6 @@
"project-member-header.invitation-with-role": { "project-member-header.invitation-with-role": {
"message": "You've been invited to be a member of this project with the role of ''{role}''." "message": "You've been invited to be a member of this project with the role of ''{role}''."
}, },
"project-member-header.success": {
"message": "Success"
},
"project-member-header.success-decline": { "project-member-header.success-decline": {
"message": "You have declined the team invitation" "message": "You have declined the team invitation"
}, },
@@ -2891,9 +2771,6 @@
"settings.billing.payment_method.action.primary": { "settings.billing.payment_method.action.primary": {
"message": "Make primary" "message": "Make primary"
}, },
"settings.billing.payment_method.card_display": {
"message": "{card_brand} ending in {last_four}"
},
"settings.billing.payment_method.card_expiry": { "settings.billing.payment_method.card_expiry": {
"message": "Expires {month}/{year}" "message": "Expires {month}/{year}"
}, },
@@ -2906,42 +2783,6 @@
"settings.billing.payment_method.title": { "settings.billing.payment_method.title": {
"message": "Payment methods" "message": "Payment methods"
}, },
"settings.billing.payment_method_type.amazon_pay": {
"message": "Amazon Pay"
},
"settings.billing.payment_method_type.amex": {
"message": "American Express"
},
"settings.billing.payment_method_type.cashapp": {
"message": "Cash App"
},
"settings.billing.payment_method_type.diners": {
"message": "Diners Club"
},
"settings.billing.payment_method_type.discover": {
"message": "Discover"
},
"settings.billing.payment_method_type.eftpos": {
"message": "EFTPOS"
},
"settings.billing.payment_method_type.jcb": {
"message": "JCB"
},
"settings.billing.payment_method_type.mastercard": {
"message": "MasterCard"
},
"settings.billing.payment_method_type.paypal": {
"message": "PayPal"
},
"settings.billing.payment_method_type.unionpay": {
"message": "UnionPay"
},
"settings.billing.payment_method_type.unknown": {
"message": "Unknown payment method"
},
"settings.billing.payment_method_type.visa": {
"message": "Visa"
},
"settings.billing.pyro_subscription.description": { "settings.billing.pyro_subscription.description": {
"message": "Manage your Modrinth Server subscriptions." "message": "Manage your Modrinth Server subscriptions."
}, },
@@ -3095,18 +2936,12 @@
"settings.profile.profile-info": { "settings.profile.profile-info": {
"message": "Profile information" "message": "Profile information"
}, },
"settings.profile.profile-picture.reset": {
"message": "Reset"
},
"settings.profile.profile-picture.title": { "settings.profile.profile-picture.title": {
"message": "Profile picture" "message": "Profile picture"
}, },
"settings.profile.username.description": { "settings.profile.username.description": {
"message": "A unique case-insensitive name to identify your profile." "message": "A unique case-insensitive name to identify your profile."
}, },
"settings.profile.username.title": {
"message": "Username"
},
"settings.sessions.action.revoke-session": { "settings.sessions.action.revoke-session": {
"message": "Revoke session" "message": "Revoke session"
}, },

View File

@@ -9,7 +9,7 @@
<div class="iconified-input"> <div class="iconified-input">
<label for="email" hidden> <label for="email" hidden>
{{ formatMessage(methodChoiceMessages.emailUsernameLabel) }} {{ formatMessage(commonMessages.emailUsernameLabel) }}
</label> </label>
<MailIcon /> <MailIcon />
<input <input
@@ -18,7 +18,7 @@
type="text" type="text"
autocomplete="username" autocomplete="username"
class="auth-form__input" class="auth-form__input"
:placeholder="formatMessage(methodChoiceMessages.emailUsernamePlaceholder)" :placeholder="formatMessage(commonMessages.emailLabel)"
/> />
</div> </div>
@@ -81,14 +81,6 @@ const methodChoiceMessages = defineMessages({
defaultMessage: defaultMessage:
"Enter your email below and we'll send a recovery link to allow you to recover your account.", "Enter your email below and we'll send a recovery link to allow you to recover your account.",
}, },
emailUsernameLabel: {
id: 'auth.reset-password.method-choice.email-username.label',
defaultMessage: 'Email or username',
},
emailUsernamePlaceholder: {
id: 'auth.reset-password.method-choice.email-username.placeholder',
defaultMessage: 'Email',
},
action: { action: {
id: 'auth.reset-password.method-choice.action', id: 'auth.reset-password.method-choice.action',
defaultMessage: 'Send recovery email', defaultMessage: 'Send recovery email',

View File

@@ -63,7 +63,7 @@
<section class="auth-form"> <section class="auth-form">
<div class="iconified-input"> <div class="iconified-input">
<label for="email" hidden>{{ formatMessage(messages.emailUsernameLabel) }}</label> <label for="email" hidden>{{ formatMessage(commonMessages.emailUsernameLabel) }}</label>
<MailIcon /> <MailIcon />
<input <input
id="email" id="email"
@@ -72,12 +72,12 @@
inputmode="email" inputmode="email"
autocomplete="username" autocomplete="username"
class="auth-form__input" class="auth-form__input"
:placeholder="formatMessage(messages.emailUsernameLabel)" :placeholder="formatMessage(commonMessages.emailUsernameLabel)"
/> />
</div> </div>
<div class="iconified-input"> <div class="iconified-input">
<label for="password" hidden>{{ formatMessage(messages.passwordLabel) }}</label> <label for="password" hidden>{{ formatMessage(commonMessages.passwordLabel) }}</label>
<KeyIcon /> <KeyIcon />
<input <input
id="password" id="password"
@@ -85,7 +85,7 @@
type="password" type="password"
autocomplete="current-password" autocomplete="current-password"
class="auth-form__input" class="auth-form__input"
:placeholder="formatMessage(messages.passwordLabel)" :placeholder="formatMessage(commonMessages.passwordLabel)"
/> />
</div> </div>
@@ -162,14 +162,6 @@ const messages = defineMessages({
defaultMessage: defaultMessage:
'<forgot-password-link>Forgot password?</forgot-password-link> • <create-account-link>Create an account</create-account-link>', '<forgot-password-link>Forgot password?</forgot-password-link> • <create-account-link>Create an account</create-account-link>',
}, },
emailUsernameLabel: {
id: 'auth.sign-in.email-username.label',
defaultMessage: 'Email or username',
},
passwordLabel: {
id: 'auth.sign-in.password.label',
defaultMessage: 'Password',
},
signInWithLabel: { signInWithLabel: {
id: 'auth.sign-in.sign-in-with', id: 'auth.sign-in.sign-in-with',
defaultMessage: 'Sign in with', defaultMessage: 'Sign in with',

View File

@@ -33,7 +33,7 @@
<section class="auth-form"> <section class="auth-form">
<div class="iconified-input"> <div class="iconified-input">
<label for="email" hidden>{{ formatMessage(messages.emailLabel) }}</label> <label for="email" hidden>{{ formatMessage(commonMessages.emailLabel) }}</label>
<MailIcon /> <MailIcon />
<input <input
id="email" id="email"
@@ -41,12 +41,12 @@
type="email" type="email"
autocomplete="username" autocomplete="username"
class="auth-form__input" class="auth-form__input"
:placeholder="formatMessage(messages.emailLabel)" :placeholder="formatMessage(commonMessages.emailLabel)"
/> />
</div> </div>
<div class="iconified-input"> <div class="iconified-input">
<label for="username" hidden>{{ formatMessage(messages.usernameLabel) }}</label> <label for="username" hidden>{{ formatMessage(commonMessages.usernameLabel) }}</label>
<UserIcon /> <UserIcon />
<input <input
id="username" id="username"
@@ -54,12 +54,12 @@
type="text" type="text"
autocomplete="username" autocomplete="username"
class="auth-form__input" class="auth-form__input"
:placeholder="formatMessage(messages.usernameLabel)" :placeholder="formatMessage(commonMessages.usernameLabel)"
/> />
</div> </div>
<div class="iconified-input"> <div class="iconified-input">
<label for="password" hidden>{{ formatMessage(messages.passwordLabel) }}</label> <label for="password" hidden>{{ formatMessage(commonMessages.passwordLabel) }}</label>
<KeyIcon /> <KeyIcon />
<input <input
id="password" id="password"
@@ -67,12 +67,14 @@
class="auth-form__input" class="auth-form__input"
type="password" type="password"
autocomplete="new-password" autocomplete="new-password"
:placeholder="formatMessage(messages.passwordLabel)" :placeholder="formatMessage(commonMessages.passwordLabel)"
/> />
</div> </div>
<div class="iconified-input"> <div class="iconified-input">
<label for="confirm-password" hidden>{{ formatMessage(messages.passwordLabel) }}</label> <label for="confirm-password" hidden>{{
formatMessage(commonMessages.passwordLabel)
}}</label>
<KeyIcon /> <KeyIcon />
<input <input
id="confirm-password" id="confirm-password"
@@ -80,7 +82,7 @@
type="password" type="password"
autocomplete="new-password" autocomplete="new-password"
class="auth-form__input" class="auth-form__input"
:placeholder="formatMessage(messages.confirmPasswordLabel)" :placeholder="formatMessage(commonMessages.confirmPasswordLabel)"
/> />
</div> </div>
@@ -173,22 +175,6 @@ const messages = defineMessages({
id: 'auth.sign-up.title.create-account', id: 'auth.sign-up.title.create-account',
defaultMessage: 'Or create an account yourself', defaultMessage: 'Or create an account yourself',
}, },
emailLabel: {
id: 'auth.sign-up.email.label',
defaultMessage: 'Email',
},
usernameLabel: {
id: 'auth.sign-up.label.username',
defaultMessage: 'Username',
},
passwordLabel: {
id: 'auth.sign-up.password.label',
defaultMessage: 'Password',
},
confirmPasswordLabel: {
id: 'auth.sign-up.confirm-password.label',
defaultMessage: 'Confirm password',
},
subscribeLabel: { subscribeLabel: {
id: 'auth.sign-up.subscribe.label', id: 'auth.sign-up.subscribe.label',
defaultMessage: 'Subscribe to updates about Modrinth', defaultMessage: 'Subscribe to updates about Modrinth',

View File

@@ -25,7 +25,7 @@
</ButtonStyled> </ButtonStyled>
<ButtonStyled v-else> <ButtonStyled v-else>
<NuxtLink to="/auth/sign-in"> <NuxtLink to="/auth/sign-in">
{{ formatMessage(messages.signIn) }} {{ formatMessage(commonMessages.signInButton) }}
<RightArrowIcon /> <RightArrowIcon />
</NuxtLink> </NuxtLink>
</ButtonStyled> </ButtonStyled>
@@ -54,7 +54,7 @@
<ButtonStyled v-else color="brand"> <ButtonStyled v-else color="brand">
<NuxtLink to="/auth/sign-in"> <NuxtLink to="/auth/sign-in">
{{ formatMessage(messages.signIn) }} {{ formatMessage(commonMessages.signInButton) }}
<RightArrowIcon /> <RightArrowIcon />
</NuxtLink> </NuxtLink>
</ButtonStyled> </ButtonStyled>
@@ -64,7 +64,13 @@
</template> </template>
<script setup> <script setup>
import { RightArrowIcon, SettingsIcon } from '@modrinth/assets' import { RightArrowIcon, SettingsIcon } from '@modrinth/assets'
import { ButtonStyled, defineMessages, injectNotificationManager, useVIntl } from '@modrinth/ui' import {
ButtonStyled,
commonMessages,
defineMessages,
injectNotificationManager,
useVIntl,
} from '@modrinth/ui'
const { addNotification } = injectNotificationManager() const { addNotification } = injectNotificationManager()
const { formatMessage } = useVIntl() const { formatMessage } = useVIntl()
@@ -78,10 +84,6 @@ const messages = defineMessages({
id: 'auth.verify-email.action.account-settings', id: 'auth.verify-email.action.account-settings',
defaultMessage: 'Account settings', defaultMessage: 'Account settings',
}, },
signIn: {
id: 'auth.verify-email.action.sign-in',
defaultMessage: 'Sign in',
},
}) })
const alreadyVerifiedMessages = defineMessages({ const alreadyVerifiedMessages = defineMessages({

View File

@@ -237,7 +237,7 @@
<AdPlaceholder v-if="!auth.user" /> <AdPlaceholder v-if="!auth.user" />
<SidebarCard <SidebarCard
v-if="collection.id !== 'following'" v-if="collection.id !== 'following'"
:title="formatMessage(messages.detailsLabel)" :title="formatMessage(commonMessages.detailsLabel)"
> >
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<span <span
@@ -458,14 +458,6 @@ const messages = defineMessages({
id: 'collection.label.curated-by', id: 'collection.label.curated-by',
defaultMessage: 'Curated by', defaultMessage: 'Curated by',
}, },
descriptionLabel: {
id: 'collection.label.description',
defaultMessage: 'Description',
},
detailsLabel: {
id: 'collection.label.details',
defaultMessage: 'Details',
},
deleteModalDescription: { deleteModalDescription: {
id: 'collection.delete-modal.description', id: 'collection.delete-modal.description',
defaultMessage: 'This will permanently delete this collection. This action cannot be undone.', defaultMessage: 'This will permanently delete this collection. This action cannot be undone.',

View File

@@ -93,7 +93,7 @@
<div class="search-controls"> <div class="search-controls">
<div class="iconified-input"> <div class="iconified-input">
<label class="hidden" for="search">{{ <label class="hidden" for="search">{{
formatMessage(messages.searchLabel) formatMessage(commonMessages.searchLabel)
}}</label> }}</label>
<SearchIcon aria-hidden="true" /> <SearchIcon aria-hidden="true" />
<input <input
@@ -101,13 +101,13 @@
v-model="searchQuery" v-model="searchQuery"
type="search" type="search"
name="search" name="search"
:placeholder="formatMessage(messages.searchPlaceholder)" :placeholder="formatMessage(commonMessages.searchPlaceholder)"
autocomplete="off" autocomplete="off"
@input="updateSearchProjects" @input="updateSearchProjects"
/> />
</div> </div>
<div class="sort-by"> <div class="sort-by">
<span class="label">{{ formatMessage(messages.sortByLabel) }}</span> <span class="label">{{ formatMessage(commonMessages.sortByLabel) }}</span>
<Multiselect <Multiselect
v-model="sortType" v-model="sortType"
placeholder="Select one" placeholder="Select one"
@@ -155,7 +155,7 @@
</div> </div>
<div class="blob-demonstration gradient-border"> <div class="blob-demonstration gradient-border">
<div class="notifs-demo"> <div class="notifs-demo">
<h3>{{ formatMessage(messages.notificationsHeading) }}</h3> <h3>{{ formatMessage(commonMessages.notificationsLabel) }}</h3>
<div class="notifications"> <div class="notifications">
<div <div
v-for="(notification, index) in notifications" v-for="(notification, index) in notifications"
@@ -567,18 +567,6 @@ const messages = defineMessages({
defaultMessage: defaultMessage:
"Modrinth's open-source API lets launchers add deep integration with Modrinth. You can use Modrinth through <link>our own app</link> and some of the most popular launchers like ATLauncher, MultiMC, and Prism Launcher.", "Modrinth's open-source API lets launchers add deep integration with Modrinth. You can use Modrinth through <link>our own app</link> and some of the most popular launchers like ATLauncher, MultiMC, and Prism Launcher.",
}, },
searchPlaceholder: {
id: 'landing.search.placeholder',
defaultMessage: 'Search...',
},
searchLabel: {
id: 'landing.search.label',
defaultMessage: 'Search',
},
sortByLabel: {
id: 'landing.search.sort-by.label',
defaultMessage: 'Sort by',
},
notificationsHeading: { notificationsHeading: {
id: 'landing.notifications.heading', id: 'landing.notifications.heading',
defaultMessage: 'Notifications', defaultMessage: 'Notifications',

View File

@@ -9,7 +9,7 @@
autocomplete="off" autocomplete="off"
spellcheck="false" spellcheck="false"
type="text" type="text"
:placeholder="formatMessage(messages.searchPlaceholder)" :placeholder="formatMessage(commonMessages.searchPlaceholder)"
@input="goToPage(1)" @input="goToPage(1)"
/> />
<Button v-if="query" class="r-btn" @click="() => (query = '')"> <Button v-if="query" class="r-btn" @click="() => (query = '')">
@@ -28,7 +28,7 @@
v-model="currentFilterType" v-model="currentFilterType"
class="!w-full flex-grow sm:!w-[280px] sm:flex-grow-0 lg:!w-[280px]" class="!w-full flex-grow sm:!w-[280px] sm:flex-grow-0 lg:!w-[280px]"
:options="filterTypes" :options="filterTypes"
:placeholder="formatMessage(messages.filterBy)" :placeholder="formatMessage(commonMessages.filterByLabel)"
@select="goToPage(1)" @select="goToPage(1)"
> >
<template #selected> <template #selected>
@@ -45,7 +45,7 @@
v-model="currentSortType" v-model="currentSortType"
class="!w-full flex-grow sm:!w-[150px] sm:flex-grow-0 lg:!w-[150px]" class="!w-full flex-grow sm:!w-[150px] sm:flex-grow-0 lg:!w-[150px]"
:options="sortTypes" :options="sortTypes"
:placeholder="formatMessage(messages.sortBy)" :placeholder="formatMessage(commonMessages.sortByLabel)"
@select="goToPage(1)" @select="goToPage(1)"
> >
<template #selected> <template #selected>
@@ -112,6 +112,7 @@ import {
ButtonStyled, ButtonStyled,
Combobox, Combobox,
type ComboboxOption, type ComboboxOption,
commonMessages,
defineMessages, defineMessages,
injectNotificationManager, injectNotificationManager,
Pagination, Pagination,
@@ -145,18 +146,6 @@ if (import.meta.client && history && history.state && history.state.confetti) {
} }
const messages = defineMessages({ const messages = defineMessages({
searchPlaceholder: {
id: 'moderation.search.placeholder',
defaultMessage: 'Search...',
},
filterBy: {
id: 'moderation.filter.by',
defaultMessage: 'Filter by',
},
sortBy: {
id: 'moderation.sort.by',
defaultMessage: 'Sort by',
},
moderate: { moderate: {
id: 'moderation.moderate', id: 'moderation.moderate',
defaultMessage: 'Moderate', defaultMessage: 'Moderate',

View File

@@ -9,7 +9,7 @@
autocomplete="off" autocomplete="off"
spellcheck="false" spellcheck="false"
type="text" type="text"
:placeholder="formatMessage(messages.searchPlaceholder)" :placeholder="formatMessage(commonMessages.searchPlaceholder)"
@input="goToPage(1)" @input="goToPage(1)"
/> />
<Button v-if="query" class="r-btn" @click="() => (query = '')"> <Button v-if="query" class="r-btn" @click="() => (query = '')">
@@ -26,7 +26,7 @@
v-model="currentFilterType" v-model="currentFilterType"
class="!w-full flex-grow sm:!w-[280px] sm:flex-grow-0 lg:!w-[280px]" class="!w-full flex-grow sm:!w-[280px] sm:flex-grow-0 lg:!w-[280px]"
:options="filterTypes" :options="filterTypes"
:placeholder="formatMessage(messages.filterBy)" :placeholder="formatMessage(commonMessages.filterByLabel)"
@select="goToPage(1)" @select="goToPage(1)"
> >
<template #selected> <template #selected>
@@ -43,7 +43,7 @@
v-model="currentSortType" v-model="currentSortType"
class="!w-full flex-grow sm:!w-[150px] sm:flex-grow-0 lg:!w-[150px]" class="!w-full flex-grow sm:!w-[150px] sm:flex-grow-0 lg:!w-[150px]"
:options="sortTypes" :options="sortTypes"
:placeholder="formatMessage(messages.sortBy)" :placeholder="formatMessage(commonMessages.sortByLabel)"
@select="goToPage(1)" @select="goToPage(1)"
> >
<template #selected> <template #selected>
@@ -82,7 +82,7 @@ import {
Button, Button,
Combobox, Combobox,
type ComboboxOption, type ComboboxOption,
defineMessages, commonMessages,
Pagination, Pagination,
useVIntl, useVIntl,
} from '@modrinth/ui' } from '@modrinth/ui'
@@ -98,21 +98,6 @@ const { formatMessage } = useVIntl()
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const messages = defineMessages({
searchPlaceholder: {
id: 'moderation.search.placeholder',
defaultMessage: 'Search...',
},
filterBy: {
id: 'moderation.filter.by',
defaultMessage: 'Filter by',
},
sortBy: {
id: 'moderation.sort.by',
defaultMessage: 'Sort by',
},
})
const { data: allReports } = await useLazyAsyncData('new-moderation-reports', async () => { const { data: allReports } = await useLazyAsyncData('new-moderation-reports', async () => {
const startTime = performance.now() const startTime = performance.now()
let currentOffset = 0 let currentOffset = 0

View File

@@ -13,7 +13,7 @@ import {
Button, Button,
Combobox, Combobox,
type ComboboxOption, type ComboboxOption,
defineMessages, commonMessages,
FloatingPanel, FloatingPanel,
injectModrinthClient, injectModrinthClient,
Pagination, Pagination,
@@ -163,21 +163,6 @@ function handleLoadFileSources(reportId: string): void {
} }
} }
const messages = defineMessages({
searchPlaceholder: {
id: 'moderation.search.placeholder',
defaultMessage: 'Search...',
},
filterBy: {
id: 'moderation.filter.by',
defaultMessage: 'Filter by',
},
sortBy: {
id: 'moderation.sort.by',
defaultMessage: 'Sort by',
},
})
const query = ref(route.query.q?.toString() || '') const query = ref(route.query.q?.toString() || '')
watch( watch(
@@ -534,7 +519,7 @@ watch([currentSortType, currentResponseFilter, inOtherQueueFilter, currentFilter
autocomplete="off" autocomplete="off"
spellcheck="false" spellcheck="false"
type="text" type="text"
:placeholder="formatMessage(messages.searchPlaceholder)" :placeholder="formatMessage(commonMessages.searchPlaceholder)"
@input="goToPage(1)" @input="goToPage(1)"
/> />
<Button v-if="query" class="r-btn" @click="() => (query = '')"> <Button v-if="query" class="r-btn" @click="() => (query = '')">
@@ -572,7 +557,7 @@ watch([currentSortType, currentResponseFilter, inOtherQueueFilter, currentFilter
v-model="currentSortType" v-model="currentSortType"
class="!w-full flex-grow sm:!w-[215px] sm:flex-grow-0" class="!w-full flex-grow sm:!w-[215px] sm:flex-grow-0"
:options="sortTypes" :options="sortTypes"
:placeholder="formatMessage(messages.sortBy)" :placeholder="formatMessage(commonMessages.sortByLabel)"
> >
<template #selected> <template #selected>
<span class="flex flex-row gap-2 align-middle font-semibold"> <span class="flex flex-row gap-2 align-middle font-semibold">
@@ -602,7 +587,7 @@ watch([currentSortType, currentResponseFilter, inOtherQueueFilter, currentFilter
v-model="currentFilterType" v-model="currentFilterType"
class="!w-full" class="!w-full"
:options="filterTypes" :options="filterTypes"
:placeholder="formatMessage(messages.filterBy)" :placeholder="formatMessage(commonMessages.filterByLabel)"
searchable searchable
> >
<template #selected> <template #selected>

View File

@@ -516,18 +516,18 @@
<div class="font-bold text-contrast"> <div class="font-bold text-contrast">
<template v-if="method.type === 'card'"> <template v-if="method.type === 'card'">
{{ {{
formatMessage(messages.paymentMethodCardDisplay, { formatMessage(paymentMethodMessages.paymentMethodCardDisplay, {
card_brand: card_brand:
formatMessage(paymentMethodTypes[method.card.brand]) ?? formatMessage(paymentMethodMessages[method.card.brand]) ??
formatMessage(paymentMethodTypes.unknown), formatMessage(paymentMethodMessages.unknown),
last_four: method.card.last4, last_four: method.card.last4,
}) })
}} }}
</template> </template>
<template v-else> <template v-else>
{{ {{
formatMessage(paymentMethodTypes[method.type]) ?? formatMessage(paymentMethodMessages[method.type]) ??
formatMessage(paymentMethodTypes.unknown) formatMessage(paymentMethodMessages.unknown)
}} }}
</template> </template>
</div> </div>
@@ -621,6 +621,7 @@ import {
getPaymentMethodIcon, getPaymentMethodIcon,
injectNotificationManager, injectNotificationManager,
OverflowMenu, OverflowMenu,
paymentMethodMessages,
PurchaseModal, PurchaseModal,
ServerListing, ServerListing,
useVIntl, useVIntl,
@@ -721,10 +722,6 @@ const messages = defineMessages({
id: 'settings.billing.payment_method.action.primary', id: 'settings.billing.payment_method.action.primary',
defaultMessage: 'Make primary', defaultMessage: 'Make primary',
}, },
paymentMethodCardDisplay: {
id: 'settings.billing.payment_method.card_display',
defaultMessage: '{card_brand} ending in {last_four}',
},
paymentMethodCardExpiry: { paymentMethodCardExpiry: {
id: 'settings.billing.payment_method.card_expiry', id: 'settings.billing.payment_method.card_expiry',
defaultMessage: 'Expires {month}/{year}', defaultMessage: 'Expires {month}/{year}',
@@ -739,33 +736,6 @@ const messages = defineMessages({
}, },
}) })
const paymentMethodTypes = defineMessages({
visa: {
id: 'settings.billing.payment_method_type.visa',
defaultMessage: 'Visa',
},
amex: { id: 'settings.billing.payment_method_type.amex', defaultMessage: 'American Express' },
diners: { id: 'settings.billing.payment_method_type.diners', defaultMessage: 'Diners Club' },
discover: { id: 'settings.billing.payment_method_type.discover', defaultMessage: 'Discover' },
eftpos: { id: 'settings.billing.payment_method_type.eftpos', defaultMessage: 'EFTPOS' },
jcb: { id: 'settings.billing.payment_method_type.jcb', defaultMessage: 'JCB' },
mastercard: {
id: 'settings.billing.payment_method_type.mastercard',
defaultMessage: 'MasterCard',
},
unionpay: { id: 'settings.billing.payment_method_type.unionpay', defaultMessage: 'UnionPay' },
paypal: { id: 'settings.billing.payment_method_type.paypal', defaultMessage: 'PayPal' },
cashapp: { id: 'settings.billing.payment_method_type.cashapp', defaultMessage: 'Cash App' },
amazon_pay: {
id: 'settings.billing.payment_method_type.amazon_pay',
defaultMessage: 'Amazon Pay',
},
unknown: {
id: 'settings.billing.payment_method_type.unknown',
defaultMessage: 'Unknown payment method',
},
})
const [ const [
{ data: paymentMethods, refresh: refreshPaymentMethods }, { data: paymentMethods, refresh: refreshPaymentMethods },
{ data: charges, refresh: refreshCharges }, { data: charges, refresh: refreshCharges },

View File

@@ -46,12 +46,12 @@
" "
> >
<UndoIcon /> <UndoIcon />
{{ formatMessage(messages.profilePictureReset) }} {{ formatMessage(commonMessages.resetButton) }}
</Button> </Button>
</div> </div>
</div> </div>
<label for="username-field"> <label for="username-field">
<span class="label__title">{{ formatMessage(messages.usernameTitle) }}</span> <span class="label__title">{{ formatMessage(commonMessages.usernameLabel) }}</span>
<span class="label__description"> <span class="label__description">
{{ formatMessage(messages.usernameDescription) }} {{ formatMessage(messages.usernameDescription) }}
</span> </span>
@@ -120,14 +120,6 @@ const messages = defineMessages({
id: 'settings.profile.profile-picture.title', id: 'settings.profile.profile-picture.title',
defaultMessage: 'Profile picture', defaultMessage: 'Profile picture',
}, },
profilePictureReset: {
id: 'settings.profile.profile-picture.reset',
defaultMessage: 'Reset',
},
usernameTitle: {
id: 'settings.profile.username.title',
defaultMessage: 'Username',
},
usernameDescription: { usernameDescription: {
id: 'settings.profile.username.description', id: 'settings.profile.username.description',
defaultMessage: 'A unique case-insensitive name to identify your profile.', defaultMessage: 'A unique case-insensitive name to identify your profile.',

View File

@@ -34,7 +34,7 @@
<div class="flex flex-col gap-3"> <div class="flex flex-col gap-3">
<div v-if="isAdmin(auth.user)" class="flex flex-col gap-1"> <div v-if="isAdmin(auth.user)" class="flex flex-col gap-1">
<span class="text-lg font-bold text-primary">{{ <span class="text-lg font-bold text-primary">{{
formatMessage(messages.emailLabel) formatMessage(commonMessages.emailLabel)
}}</span> }}</span>
<div> <div>
<span <span
@@ -61,8 +61,8 @@
<XIcon v-else class="h-4 w-4 text-red" /> <XIcon v-else class="h-4 w-4 text-red" />
{{ {{
user.email_verified user.email_verified
? formatMessage(messages.yesLabel) ? formatMessage(commonMessages.yesLabel)
: formatMessage(messages.noLabel) : formatMessage(commonMessages.noLabel)
}} }}
</span> </span>
</div> </div>
@@ -97,7 +97,9 @@
}}</span> }}</span>
<span> <span>
{{ {{
user.has_password ? formatMessage(messages.yesLabel) : formatMessage(messages.noLabel) user.has_password
? formatMessage(commonMessages.yesLabel)
: formatMessage(commonMessages.noLabel)
}} }}
</span> </span>
</div> </div>
@@ -107,7 +109,11 @@
formatMessage(messages.hasTotpLabel) formatMessage(messages.hasTotpLabel)
}}</span> }}</span>
<span> <span>
{{ user.has_totp ? formatMessage(messages.yesLabel) : formatMessage(messages.noLabel) }} {{
user.has_totp
? formatMessage(commonMessages.yesLabel)
: formatMessage(commonMessages.noLabel)
}}
</span> </span>
</div> </div>
</div> </div>
@@ -575,14 +581,6 @@ const messages = defineMessages({
id: 'profile.details.label.has-totp', id: 'profile.details.label.has-totp',
defaultMessage: 'Has TOTP', defaultMessage: 'Has TOTP',
}, },
yesLabel: {
id: 'profile.label.yes',
defaultMessage: 'Yes',
},
noLabel: {
id: 'profile.label.no',
defaultMessage: 'No',
},
bioFallbackUser: { bioFallbackUser: {
id: 'profile.bio.fallback.user', id: 'profile.bio.fallback.user',
defaultMessage: 'A Modrinth user.', defaultMessage: 'A Modrinth user.',
@@ -604,10 +602,6 @@ const messages = defineMessages({
id: 'profile.user-id', id: 'profile.user-id',
defaultMessage: 'User ID: {id}', defaultMessage: 'User ID: {id}',
}, },
profileDetails: {
id: 'profile.label.details',
defaultMessage: 'Details',
},
profileOrganizations: { profileOrganizations: {
id: 'profile.label.organizations', id: 'profile.label.organizations',
defaultMessage: 'Organizations', defaultMessage: 'Organizations',

View File

@@ -3,7 +3,7 @@
<div class="flex flex-col"> <div class="flex flex-col">
<label v-if="showUserField" class="contents" for="create-affiliate-user-input"> <label v-if="showUserField" class="contents" for="create-affiliate-user-input">
<span class="text-lg font-semibold text-contrast mb-1"> <span class="text-lg font-semibold text-contrast mb-1">
{{ formatMessage(messages.createUserLabel) }} {{ formatMessage(commonMessages.usernameLabel) }}
</span> </span>
<span class="text-secondary mb-2">{{ formatMessage(messages.createUserDescription) }}</span> <span class="text-secondary mb-2">{{ formatMessage(messages.createUserDescription) }}</span>
</label> </label>
@@ -67,6 +67,7 @@ import { AffiliateIcon, PlusIcon, SpinnerIcon, UserIcon, XIcon } from '@modrinth
import { computed, ref, useTemplateRef } from 'vue' import { computed, ref, useTemplateRef } from 'vue'
import { defineMessages, useVIntl } from '../../composables/i18n' import { defineMessages, useVIntl } from '../../composables/i18n'
import { commonMessages } from '../../utils/common-messages'
import { AutoBrandIcon, Button, ButtonStyled, NewModal } from '../index' import { AutoBrandIcon, Button, ButtonStyled, NewModal } from '../index'
export type CreateAffiliateProps = { sourceName: string; username?: string } export type CreateAffiliateProps = { sourceName: string; username?: string }
@@ -141,10 +142,6 @@ const messages = defineMessages({
id: 'affiliate.create.title.placeholder', id: 'affiliate.create.title.placeholder',
defaultMessage: 'e.g. YouTube', defaultMessage: 'e.g. YouTube',
}, },
createUserLabel: {
id: 'affiliate.create.user.label',
defaultMessage: 'Username',
},
createUserDescription: { createUserDescription: {
id: 'affiliate.create.user.description', id: 'affiliate.create.user.description',
defaultMessage: 'The username of the user to create the affiliate code for', defaultMessage: 'The username of the user to create the affiliate code for',

View File

@@ -2,7 +2,7 @@
import type Stripe from 'stripe' import type Stripe from 'stripe'
import { useVIntl } from '../../composables/i18n' import { useVIntl } from '../../composables/i18n'
import { commonMessages, getPaymentMethodIcon, paymentMethodMessages } from '../../utils' import { getPaymentMethodIcon, paymentMethodMessages } from '../../utils'
const { formatMessage } = useVIntl() const { formatMessage } = useVIntl()
defineProps<{ defineProps<{
@@ -15,7 +15,7 @@ defineProps<{
<component :is="getPaymentMethodIcon(method.type)" class="size-[1.5em]" /> <component :is="getPaymentMethodIcon(method.type)" class="size-[1.5em]" />
<span v-if="method.type === 'card' && 'card' in method && method.card"> <span v-if="method.type === 'card' && 'card' in method && method.card">
{{ {{
formatMessage(commonMessages.paymentMethodCardDisplay, { formatMessage(paymentMethodMessages.paymentMethodCardDisplay, {
card_brand: card_brand:
formatMessage(paymentMethodMessages[method.card.brand]) ?? formatMessage(paymentMethodMessages[method.card.brand]) ??
formatMessage(paymentMethodMessages.unknown), formatMessage(paymentMethodMessages.unknown),

View File

@@ -345,18 +345,18 @@
<span v-if="props.option.type === 'card'"> <span v-if="props.option.type === 'card'">
{{ {{
formatMessage(messages.paymentMethodCardDisplay, { formatMessage(paymentMethodMessages.paymentMethodCardDisplay, {
card_brand: card_brand:
formatMessage(paymentMethodTypes[props.option.card.brand]) ?? formatMessage(paymentMethodMessages[props.option.card.brand]) ??
formatMessage(paymentMethodTypes.unknown), formatMessage(paymentMethodMessages.unknown),
last_four: props.option.card.last4, last_four: props.option.card.last4,
}) })
}} }}
</span> </span>
<template v-else> <template v-else>
{{ {{
formatMessage(paymentMethodTypes[props.option.type]) ?? formatMessage(paymentMethodMessages[props.option.type]) ??
formatMessage(paymentMethodTypes.unknown) formatMessage(paymentMethodMessages.unknown)
}} }}
</template> </template>
@@ -382,18 +382,18 @@
<span v-if="props.option.type === 'card'"> <span v-if="props.option.type === 'card'">
{{ {{
formatMessage(messages.paymentMethodCardDisplay, { formatMessage(paymentMethodMessages.paymentMethodCardDisplay, {
card_brand: card_brand:
formatMessage(paymentMethodTypes[props.option.card.brand]) ?? formatMessage(paymentMethodMessages[props.option.card.brand]) ??
formatMessage(paymentMethodTypes.unknown), formatMessage(paymentMethodMessages.unknown),
last_four: props.option.card.last4, last_four: props.option.card.last4,
}) })
}} }}
</span> </span>
<template v-else> <template v-else>
{{ {{
formatMessage(paymentMethodTypes[props.option.type]) ?? formatMessage(paymentMethodMessages[props.option.type]) ??
formatMessage(paymentMethodTypes.unknown) formatMessage(paymentMethodMessages.unknown)
}} }}
</template> </template>
@@ -546,7 +546,8 @@ import dayjs from 'dayjs'
import { computed, nextTick, reactive, ref, watch } from 'vue' import { computed, nextTick, reactive, ref, watch } from 'vue'
import { Multiselect } from 'vue-multiselect' import { Multiselect } from 'vue-multiselect'
import { defineMessages, useVIntl } from '../../composables/i18n' import { useVIntl } from '../../composables/i18n'
import { paymentMethodMessages } from '../../utils/common-messages'
import Admonition from '../base/Admonition.vue' import Admonition from '../base/Admonition.vue'
import Checkbox from '../base/Checkbox.vue' import Checkbox from '../base/Checkbox.vue'
import Slider from '../base/Slider.vue' import Slider from '../base/Slider.vue'
@@ -646,61 +647,6 @@ const props = defineProps({
const productType = computed(() => (props.customServer ? 'pyro' : props.product.metadata.type)) const productType = computed(() => (props.customServer ? 'pyro' : props.product.metadata.type))
const messages = defineMessages({
paymentMethodCardDisplay: {
id: 'omorphia.component.purchase_modal.payment_method_card_display',
defaultMessage: '{card_brand} ending in {last_four}',
},
})
const paymentMethodTypes = defineMessages({
visa: {
id: 'omorphia.component.purchase_modal.payment_method_type.visa',
defaultMessage: 'Visa',
},
amex: {
id: 'omorphia.component.purchase_modal.payment_method_type.amex',
defaultMessage: 'American Express',
},
diners: {
id: 'omorphia.component.purchase_modal.payment_method_type.diners',
defaultMessage: 'Diners Club',
},
discover: {
id: 'omorphia.component.purchase_modal.payment_method_type.discover',
defaultMessage: 'Discover',
},
eftpos: {
id: 'omorphia.component.purchase_modal.payment_method_type.eftpos',
defaultMessage: 'EFTPOS',
},
jcb: { id: 'omorphia.component.purchase_modal.payment_method_type.jcb', defaultMessage: 'JCB' },
mastercard: {
id: 'omorphia.component.purchase_modal.payment_method_type.mastercard',
defaultMessage: 'MasterCard',
},
unionpay: {
id: 'omorphia.component.purchase_modal.payment_method_type.unionpay',
defaultMessage: 'UnionPay',
},
paypal: {
id: 'omorphia.component.purchase_modal.payment_method_type.paypal',
defaultMessage: 'PayPal',
},
cashapp: {
id: 'omorphia.component.purchase_modal.payment_method_type.cashapp',
defaultMessage: 'Cash App',
},
amazon_pay: {
id: 'omorphia.component.purchase_modal.payment_method_type.amazon_pay',
defaultMessage: 'Amazon Pay',
},
unknown: {
id: 'omorphia.component.purchase_modal.payment_method_type.unknown',
defaultMessage: 'Unknown payment method',
},
})
let stripe = null let stripe = null
let elements = null let elements = null

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="flex flex-col gap-3"> <div class="flex flex-col gap-3">
<h2 class="text-lg m-0">{{ formatMessage(messages.title) }}</h2> <h2 class="text-lg m-0">{{ formatMessage(commonMessages.detailsLabel) }}</h2>
<div class="flex flex-col gap-3 font-semibold [&>div]:flex [&>div]:gap-2 [&>div]:items-center"> <div class="flex flex-col gap-3 font-semibold [&>div]:flex [&>div]:gap-2 [&>div]:items-center">
<div> <div>
<BookTextIcon aria-hidden="true" /> <BookTextIcon aria-hidden="true" />
@@ -70,6 +70,7 @@ import { computed } from 'vue'
import { useRelativeTime } from '../../composables' import { useRelativeTime } from '../../composables'
import { defineMessages, useVIntl } from '../../composables/i18n' import { defineMessages, useVIntl } from '../../composables/i18n'
import { commonMessages } from '../../utils/common-messages'
const { formatMessage } = useVIntl() const { formatMessage } = useVIntl()
const formatRelativeTime = useRelativeTime() const formatRelativeTime = useRelativeTime()
@@ -117,10 +118,6 @@ const licenseIdDisplay = computed(() => {
}) })
const messages = defineMessages({ const messages = defineMessages({
title: {
id: 'project.about.details.title',
defaultMessage: 'Details',
},
licensed: { licensed: {
id: 'project.about.details.licensed', id: 'project.about.details.licensed',
defaultMessage: 'Licensed {license}', defaultMessage: 'Licensed {license}',

View File

@@ -175,10 +175,6 @@ const messages = defineMessages({
id: 'servers.backups.item.manual-backup', id: 'servers.backups.item.manual-backup',
defaultMessage: 'Manual backup', defaultMessage: 'Manual backup',
}, },
retry: {
id: 'servers.backups.item.retry',
defaultMessage: 'Retry',
},
}) })
</script> </script>
<template> <template>
@@ -270,7 +266,7 @@ const messages = defineMessages({
<ButtonStyled> <ButtonStyled>
<button @click="() => emit('retry')"> <button @click="() => emit('retry')">
<RotateCounterClockwiseIcon class="size-5" /> <RotateCounterClockwiseIcon class="size-5" />
{{ formatMessage(messages.retry) }} {{ formatMessage(commonMessages.retryButton) }}
</button> </button>
</ButtonStyled> </ButtonStyled>
<ButtonStyled> <ButtonStyled>

View File

@@ -17,9 +17,6 @@
"affiliate.create.user.description": { "affiliate.create.user.description": {
"defaultMessage": "The username of the user to create the affiliate code for" "defaultMessage": "The username of the user to create the affiliate code for"
}, },
"affiliate.create.user.label": {
"defaultMessage": "Username"
},
"affiliate.create.user.placeholder": { "affiliate.create.user.placeholder": {
"defaultMessage": "Enter username..." "defaultMessage": "Enter username..."
}, },
@@ -44,6 +41,9 @@
"badge.new": { "badge.new": {
"defaultMessage": "New" "defaultMessage": "New"
}, },
"button.accept": {
"defaultMessage": "Accept"
},
"button.affiliate-links": { "button.affiliate-links": {
"defaultMessage": "Affiliate links" "defaultMessage": "Affiliate links"
}, },
@@ -74,6 +74,9 @@
"button.create-a-project": { "button.create-a-project": {
"defaultMessage": "Create a project" "defaultMessage": "Create a project"
}, },
"button.decline": {
"defaultMessage": "Decline"
},
"button.download": { "button.download": {
"defaultMessage": "Download" "defaultMessage": "Download"
}, },
@@ -116,6 +119,9 @@
"button.reset": { "button.reset": {
"defaultMessage": "Reset" "defaultMessage": "Reset"
}, },
"button.retry": {
"defaultMessage": "Retry"
},
"button.save": { "button.save": {
"defaultMessage": "Save" "defaultMessage": "Save"
}, },
@@ -158,7 +164,7 @@
"changelog.product.web": { "changelog.product.web": {
"defaultMessage": "Website" "defaultMessage": "Website"
}, },
"collection.label.private": { "collections.label.private": {
"defaultMessage": "Private" "defaultMessage": "Private"
}, },
"form.label.address-line": { "form.label.address-line": {
@@ -302,6 +308,9 @@
"label.collections": { "label.collections": {
"defaultMessage": "Collections" "defaultMessage": "Collections"
}, },
"label.confirm-password": {
"defaultMessage": "Confirm password"
},
"label.created-ago": { "label.created-ago": {
"defaultMessage": "Created {ago}" "defaultMessage": "Created {ago}"
}, },
@@ -314,9 +323,21 @@
"label.description": { "label.description": {
"defaultMessage": "Description" "defaultMessage": "Description"
}, },
"label.details": {
"defaultMessage": "Details"
},
"label.email": {
"defaultMessage": "Email"
},
"label.email-username": {
"defaultMessage": "Email or username"
},
"label.error": { "label.error": {
"defaultMessage": "Error" "defaultMessage": "Error"
}, },
"label.filter-by": {
"defaultMessage": "Filter by"
},
"label.followed-projects": { "label.followed-projects": {
"defaultMessage": "Followed projects" "defaultMessage": "Followed projects"
}, },
@@ -326,6 +347,9 @@
"label.moderation": { "label.moderation": {
"defaultMessage": "Moderation" "defaultMessage": "Moderation"
}, },
"label.no": {
"defaultMessage": "No"
},
"label.notifications": { "label.notifications": {
"defaultMessage": "Notifications" "defaultMessage": "Notifications"
}, },
@@ -353,6 +377,9 @@
"label.scopes": { "label.scopes": {
"defaultMessage": "Scopes" "defaultMessage": "Scopes"
}, },
"label.search": {
"defaultMessage": "Search"
},
"label.server": { "label.server": {
"defaultMessage": "Server" "defaultMessage": "Server"
}, },
@@ -365,18 +392,30 @@
"label.singleplayer": { "label.singleplayer": {
"defaultMessage": "Singleplayer" "defaultMessage": "Singleplayer"
}, },
"label.sort-by": {
"defaultMessage": "Sort by"
},
"label.success": {
"defaultMessage": "Success"
},
"label.title": { "label.title": {
"defaultMessage": "Title" "defaultMessage": "Title"
}, },
"label.unlisted": { "label.unlisted": {
"defaultMessage": "Unlisted" "defaultMessage": "Unlisted"
}, },
"label.username": {
"defaultMessage": "Username"
},
"label.visibility": { "label.visibility": {
"defaultMessage": "Visibility" "defaultMessage": "Visibility"
}, },
"label.visit-your-profile": { "label.visit-your-profile": {
"defaultMessage": "Visit your profile" "defaultMessage": "Visit your profile"
}, },
"label.yes": {
"defaultMessage": "Yes"
},
"modal.add-payment-method.action": { "modal.add-payment-method.action": {
"defaultMessage": "Add payment method" "defaultMessage": "Add payment method"
}, },
@@ -470,60 +509,57 @@
"omorphia.component.environment-indicator.label.unsupported": { "omorphia.component.environment-indicator.label.unsupported": {
"defaultMessage": "Unsupported" "defaultMessage": "Unsupported"
}, },
"omorphia.component.purchase_modal.payment_method_card_display": { "payment-method.amazon_pay": {
"defaultMessage": "{card_brand} ending in {last_four}"
},
"omorphia.component.purchase_modal.payment_method_type.amazon_pay": {
"defaultMessage": "Amazon Pay" "defaultMessage": "Amazon Pay"
}, },
"omorphia.component.purchase_modal.payment_method_type.amex": { "payment-method.amex": {
"defaultMessage": "American Express" "defaultMessage": "American Express"
}, },
"omorphia.component.purchase_modal.payment_method_type.cashapp": { "payment-method.card_display": {
"defaultMessage": "{card_brand} ending in {last_four}"
},
"payment-method.cashapp": {
"defaultMessage": "Cash App" "defaultMessage": "Cash App"
}, },
"omorphia.component.purchase_modal.payment_method_type.diners": {
"defaultMessage": "Diners Club"
},
"omorphia.component.purchase_modal.payment_method_type.discover": {
"defaultMessage": "Discover"
},
"omorphia.component.purchase_modal.payment_method_type.eftpos": {
"defaultMessage": "EFTPOS"
},
"omorphia.component.purchase_modal.payment_method_type.jcb": {
"defaultMessage": "JCB"
},
"omorphia.component.purchase_modal.payment_method_type.mastercard": {
"defaultMessage": "MasterCard"
},
"omorphia.component.purchase_modal.payment_method_type.paypal": {
"defaultMessage": "PayPal"
},
"omorphia.component.purchase_modal.payment_method_type.paypal_international": {
"defaultMessage": "PayPal International"
},
"omorphia.component.purchase_modal.payment_method_type.unionpay": {
"defaultMessage": "UnionPay"
},
"omorphia.component.purchase_modal.payment_method_type.unknown": {
"defaultMessage": "Unknown payment method"
},
"omorphia.component.purchase_modal.payment_method_type.visa": {
"defaultMessage": "Visa"
},
"payment-method.charity": { "payment-method.charity": {
"defaultMessage": "Charity" "defaultMessage": "Charity"
}, },
"payment-method.charity-plural": { "payment-method.charity-plural": {
"defaultMessage": "Charities" "defaultMessage": "Charities"
}, },
"payment-method.diners": {
"defaultMessage": "Diners Club"
},
"payment-method.discover": {
"defaultMessage": "Discover"
},
"payment-method.eftpos": {
"defaultMessage": "EFTPOS"
},
"payment-method.gift-card": { "payment-method.gift-card": {
"defaultMessage": "Gift card" "defaultMessage": "Gift card"
}, },
"payment-method.gift-card-plural": { "payment-method.gift-card-plural": {
"defaultMessage": "Gift cards" "defaultMessage": "Gift cards"
}, },
"payment-method.jcb": {
"defaultMessage": "JCB"
},
"payment-method.mastercard": {
"defaultMessage": "MasterCard"
},
"payment-method.paypal": {
"defaultMessage": "PayPal"
},
"payment-method.paypal_international": {
"defaultMessage": "PayPal International"
},
"payment-method.unionpay": {
"defaultMessage": "UnionPay"
},
"payment-method.unknown": {
"defaultMessage": "Unknown payment method"
},
"payment-method.venmo": { "payment-method.venmo": {
"defaultMessage": "Venmo" "defaultMessage": "Venmo"
}, },
@@ -533,6 +569,9 @@
"payment-method.virtual-visa-plural": { "payment-method.virtual-visa-plural": {
"defaultMessage": "Virtual Visas" "defaultMessage": "Virtual Visas"
}, },
"payment-method.visa": {
"defaultMessage": "Visa"
},
"project-type.all": { "project-type.all": {
"defaultMessage": "All" "defaultMessage": "All"
}, },
@@ -653,9 +692,6 @@
"project.about.details.submitted": { "project.about.details.submitted": {
"defaultMessage": "Submitted {date}" "defaultMessage": "Submitted {date}"
}, },
"project.about.details.title": {
"defaultMessage": "Details"
},
"project.about.details.updated": { "project.about.details.updated": {
"defaultMessage": "Updated {date}" "defaultMessage": "Updated {date}"
}, },
@@ -1022,9 +1058,6 @@
"servers.backups.item.restoring-backup": { "servers.backups.item.restoring-backup": {
"defaultMessage": "Restoring from backup..." "defaultMessage": "Restoring from backup..."
}, },
"servers.backups.item.retry": {
"defaultMessage": "Retry"
},
"servers.notice.dismiss": { "servers.notice.dismiss": {
"defaultMessage": "Dismiss" "defaultMessage": "Dismiss"
}, },

View File

@@ -1,6 +1,10 @@
import { defineMessages } from '../composables/i18n' import { defineMessages } from '../composables/i18n'
export const commonMessages = defineMessages({ export const commonMessages = defineMessages({
acceptButton: {
id: 'button.accept',
defaultMessage: 'Accept',
},
affiliateLinksButton: { affiliateLinksButton: {
id: 'button.affiliate-links', id: 'button.affiliate-links',
defaultMessage: 'Affiliate links', defaultMessage: 'Affiliate links',
@@ -45,6 +49,10 @@ export const commonMessages = defineMessages({
id: 'label.collections', id: 'label.collections',
defaultMessage: 'Collections', defaultMessage: 'Collections',
}, },
confirmPasswordLabel: {
id: 'label.confirm-password',
defaultMessage: 'Confirm password',
},
continueButton: { continueButton: {
id: 'button.continue', id: 'button.continue',
defaultMessage: 'Continue', defaultMessage: 'Continue',
@@ -73,6 +81,10 @@ export const commonMessages = defineMessages({
id: 'tooltip.date-at-time', id: 'tooltip.date-at-time',
defaultMessage: '{date, date, long} at {time, time, short}', defaultMessage: '{date, date, long} at {time, time, short}',
}, },
declineButton: {
id: 'button.decline',
defaultMessage: 'Decline',
},
deleteLabel: { deleteLabel: {
id: 'label.delete', id: 'label.delete',
defaultMessage: 'Delete', defaultMessage: 'Delete',
@@ -81,6 +93,10 @@ export const commonMessages = defineMessages({
id: 'label.description', id: 'label.description',
defaultMessage: 'Description', defaultMessage: 'Description',
}, },
detailsLabel: {
id: 'label.details',
defaultMessage: 'Details',
},
downloadButton: { downloadButton: {
id: 'button.download', id: 'button.download',
defaultMessage: 'Download', defaultMessage: 'Download',
@@ -93,6 +109,14 @@ export const commonMessages = defineMessages({
id: 'button.edit', id: 'button.edit',
defaultMessage: 'Edit', defaultMessage: 'Edit',
}, },
emailLabel: {
id: 'label.email',
defaultMessage: 'Email',
},
emailUsernameLabel: {
id: 'label.email-username',
defaultMessage: 'Email or username',
},
errorLabel: { errorLabel: {
id: 'label.error', id: 'label.error',
defaultMessage: 'Error', defaultMessage: 'Error',
@@ -101,6 +125,10 @@ export const commonMessages = defineMessages({
id: 'notification.error.title', id: 'notification.error.title',
defaultMessage: 'An error occurred', defaultMessage: 'An error occurred',
}, },
filterByLabel: {
id: 'label.filter-by',
defaultMessage: 'Filter by',
},
followButton: { followButton: {
id: 'button.follow', id: 'button.follow',
defaultMessage: 'Follow', defaultMessage: 'Follow',
@@ -125,6 +153,10 @@ export const commonMessages = defineMessages({
id: 'label.loading', id: 'label.loading',
defaultMessage: 'Loading...', defaultMessage: 'Loading...',
}, },
maxButton: {
id: 'button.max',
defaultMessage: 'Max',
},
moderationLabel: { moderationLabel: {
id: 'label.moderation', id: 'label.moderation',
defaultMessage: 'Moderation', defaultMessage: 'Moderation',
@@ -141,6 +173,10 @@ export const commonMessages = defineMessages({
id: 'button.next', id: 'button.next',
defaultMessage: 'Next', defaultMessage: 'Next',
}, },
noLabel: {
id: 'label.no',
defaultMessage: 'No',
},
notificationsLabel: { notificationsLabel: {
id: 'label.notifications', id: 'label.notifications',
defaultMessage: 'Notifications', defaultMessage: 'Notifications',
@@ -157,10 +193,6 @@ export const commonMessages = defineMessages({
id: 'label.password', id: 'label.password',
defaultMessage: 'Password', defaultMessage: 'Password',
}, },
paymentMethodCardDisplay: {
id: 'omorphia.component.purchase_modal.payment_method_card_display',
defaultMessage: '{card_brand} ending in {last_four}',
},
playButton: { playButton: {
id: 'button.play', id: 'button.play',
defaultMessage: 'Play', defaultMessage: 'Play',
@@ -170,7 +202,7 @@ export const commonMessages = defineMessages({
defaultMessage: 'Played {time}', defaultMessage: 'Played {time}',
}, },
privateLabel: { privateLabel: {
id: 'collection.label.private', id: 'collections.label.private',
defaultMessage: 'Private', defaultMessage: 'Private',
}, },
publicLabel: { publicLabel: {
@@ -201,6 +233,10 @@ export const commonMessages = defineMessages({
id: 'button.reset', id: 'button.reset',
defaultMessage: 'Reset', defaultMessage: 'Reset',
}, },
retryButton: {
id: 'button.retry',
defaultMessage: 'Retry',
},
saveButton: { saveButton: {
id: 'button.save', id: 'button.save',
defaultMessage: 'Save', defaultMessage: 'Save',
@@ -221,6 +257,10 @@ export const commonMessages = defineMessages({
id: 'label.scopes', id: 'label.scopes',
defaultMessage: 'Scopes', defaultMessage: 'Scopes',
}, },
searchLabel: {
id: 'label.search',
defaultMessage: 'Search',
},
searchPlaceholder: { searchPlaceholder: {
id: 'input.search.placeholder', id: 'input.search.placeholder',
defaultMessage: 'Search...', defaultMessage: 'Search...',
@@ -253,10 +293,18 @@ export const commonMessages = defineMessages({
id: 'label.singleplayer', id: 'label.singleplayer',
defaultMessage: 'Singleplayer', defaultMessage: 'Singleplayer',
}, },
sortByLabel: {
id: 'label.sort-by',
defaultMessage: 'Sort by',
},
stopButton: { stopButton: {
id: 'button.stop', id: 'button.stop',
defaultMessage: 'Stop', defaultMessage: 'Stop',
}, },
successLabel: {
id: 'label.success',
defaultMessage: 'Success',
},
titleLabel: { titleLabel: {
id: 'label.title', id: 'label.title',
defaultMessage: 'Title', defaultMessage: 'Title',
@@ -273,6 +321,10 @@ export const commonMessages = defineMessages({
id: 'button.upload-image', id: 'button.upload-image',
defaultMessage: 'Upload image', defaultMessage: 'Upload image',
}, },
usernameLabel: {
id: 'label.username',
defaultMessage: 'Username',
},
visibilityLabel: { visibilityLabel: {
id: 'label.visibility', id: 'label.visibility',
defaultMessage: 'Visibility', defaultMessage: 'Visibility',
@@ -281,9 +333,9 @@ export const commonMessages = defineMessages({
id: 'label.visit-your-profile', id: 'label.visit-your-profile',
defaultMessage: 'Visit your profile', defaultMessage: 'Visit your profile',
}, },
maxButton: { yesLabel: {
id: 'button.max', id: 'label.yes',
defaultMessage: 'Max', defaultMessage: 'Yes',
}, },
}) })
@@ -654,60 +706,64 @@ export const languageSelectorMessages = defineMessages({
}) })
export const paymentMethodMessages = defineMessages({ export const paymentMethodMessages = defineMessages({
paymentMethodCardDisplay: {
id: 'payment-method.card_display',
defaultMessage: '{card_brand} ending in {last_four}',
},
amazon_pay: { amazon_pay: {
id: 'omorphia.component.purchase_modal.payment_method_type.amazon_pay', id: 'payment-method.amazon_pay',
defaultMessage: 'Amazon Pay', defaultMessage: 'Amazon Pay',
}, },
amex: { amex: {
id: 'omorphia.component.purchase_modal.payment_method_type.amex', id: 'payment-method.amex',
defaultMessage: 'American Express', defaultMessage: 'American Express',
}, },
cashapp: { cashapp: {
id: 'omorphia.component.purchase_modal.payment_method_type.cashapp', id: 'payment-method.cashapp',
defaultMessage: 'Cash App', defaultMessage: 'Cash App',
}, },
diners: { diners: {
id: 'omorphia.component.purchase_modal.payment_method_type.diners', id: 'payment-method.diners',
defaultMessage: 'Diners Club', defaultMessage: 'Diners Club',
}, },
discover: { discover: {
id: 'omorphia.component.purchase_modal.payment_method_type.discover', id: 'payment-method.discover',
defaultMessage: 'Discover', defaultMessage: 'Discover',
}, },
eftpos: { eftpos: {
id: 'omorphia.component.purchase_modal.payment_method_type.eftpos', id: 'payment-method.eftpos',
defaultMessage: 'EFTPOS', defaultMessage: 'EFTPOS',
}, },
jcb: { jcb: {
id: 'omorphia.component.purchase_modal.payment_method_type.jcb', id: 'payment-method.jcb',
defaultMessage: 'JCB', defaultMessage: 'JCB',
}, },
mastercard: { mastercard: {
id: 'omorphia.component.purchase_modal.payment_method_type.mastercard', id: 'payment-method.mastercard',
defaultMessage: 'MasterCard', defaultMessage: 'MasterCard',
}, },
paypal: { paypal: {
id: 'omorphia.component.purchase_modal.payment_method_type.paypal', id: 'payment-method.paypal',
defaultMessage: 'PayPal', defaultMessage: 'PayPal',
}, },
paypalInternational: { paypalInternational: {
id: 'omorphia.component.purchase_modal.payment_method_type.paypal_international', id: 'payment-method.paypal_international',
defaultMessage: 'PayPal International', defaultMessage: 'PayPal International',
}, },
paypalUS: { paypalUS: {
id: 'omorphia.component.purchase_modal.payment_method_type.paypal', id: 'payment-method.paypal',
defaultMessage: 'PayPal', defaultMessage: 'PayPal',
}, },
unionpay: { unionpay: {
id: 'omorphia.component.purchase_modal.payment_method_type.unionpay', id: 'payment-method.unionpay',
defaultMessage: 'UnionPay', defaultMessage: 'UnionPay',
}, },
unknown: { unknown: {
id: 'omorphia.component.purchase_modal.payment_method_type.unknown', id: 'payment-method.unknown',
defaultMessage: 'Unknown payment method', defaultMessage: 'Unknown payment method',
}, },
visa: { visa: {
id: 'omorphia.component.purchase_modal.payment_method_type.visa', id: 'payment-method.visa',
defaultMessage: 'Visa', defaultMessage: 'Visa',
}, },
venmo: { venmo: {