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

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

View File

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

View File

@@ -345,18 +345,18 @@
<span v-if="props.option.type === 'card'">
{{
formatMessage(messages.paymentMethodCardDisplay, {
formatMessage(paymentMethodMessages.paymentMethodCardDisplay, {
card_brand:
formatMessage(paymentMethodTypes[props.option.card.brand]) ??
formatMessage(paymentMethodTypes.unknown),
formatMessage(paymentMethodMessages[props.option.card.brand]) ??
formatMessage(paymentMethodMessages.unknown),
last_four: props.option.card.last4,
})
}}
</span>
<template v-else>
{{
formatMessage(paymentMethodTypes[props.option.type]) ??
formatMessage(paymentMethodTypes.unknown)
formatMessage(paymentMethodMessages[props.option.type]) ??
formatMessage(paymentMethodMessages.unknown)
}}
</template>
@@ -382,18 +382,18 @@
<span v-if="props.option.type === 'card'">
{{
formatMessage(messages.paymentMethodCardDisplay, {
formatMessage(paymentMethodMessages.paymentMethodCardDisplay, {
card_brand:
formatMessage(paymentMethodTypes[props.option.card.brand]) ??
formatMessage(paymentMethodTypes.unknown),
formatMessage(paymentMethodMessages[props.option.card.brand]) ??
formatMessage(paymentMethodMessages.unknown),
last_four: props.option.card.last4,
})
}}
</span>
<template v-else>
{{
formatMessage(paymentMethodTypes[props.option.type]) ??
formatMessage(paymentMethodTypes.unknown)
formatMessage(paymentMethodMessages[props.option.type]) ??
formatMessage(paymentMethodMessages.unknown)
}}
</template>
@@ -546,7 +546,8 @@ import dayjs from 'dayjs'
import { computed, nextTick, reactive, ref, watch } from 'vue'
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 Checkbox from '../base/Checkbox.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 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 elements = null

View File

@@ -1,6 +1,6 @@
<template>
<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>
<BookTextIcon aria-hidden="true" />
@@ -70,6 +70,7 @@ import { computed } from 'vue'
import { useRelativeTime } from '../../composables'
import { defineMessages, useVIntl } from '../../composables/i18n'
import { commonMessages } from '../../utils/common-messages'
const { formatMessage } = useVIntl()
const formatRelativeTime = useRelativeTime()
@@ -117,10 +118,6 @@ const licenseIdDisplay = computed(() => {
})
const messages = defineMessages({
title: {
id: 'project.about.details.title',
defaultMessage: 'Details',
},
licensed: {
id: 'project.about.details.licensed',
defaultMessage: 'Licensed {license}',

View File

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

View File

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

View File

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