- If you have [SRV records]
- , you do not need to add a port. Otherwise if you have a port which isn't 25565, you
- can include it as :12345
+
+
+
@@ -127,15 +135,17 @@
contact support.",
+ },
+ srvRecordsHint: {
+ id: 'project.settings.server.srv-records-hint',
+ defaultMessage:
+ "If you have [SRV records], you do not need to add a port. Otherwise if you have a port which isn't 25565, you can include it as :12345",
+ },
+ srvRecordsTooltip: {
+ id: 'project.settings.server.srv-records-tooltip',
+ defaultMessage:
+ 'The address you enter here may have DNS SRV records _minecraft._tcp.(your domain) which point to your Minecraft server address and port.',
+ },
+ bedrockAddressLabel: {
+ id: 'project.settings.server.bedrock-address-label',
+ defaultMessage: 'Bedrock address',
+ },
+ cannotSaveTitle: {
+ id: 'project.settings.server.cannot-save-title',
+ defaultMessage: 'Cannot save',
+ },
+ cannotSaveText: {
+ id: 'project.settings.server.cannot-save-text',
+ defaultMessage:
+ 'The Java server must be reachable before saving. Please ensure the ping succeeds.',
+ },
+})
+
const client = injectModrinthClient()
const { addNotification } = injectNotificationManager()
const { projectV3, currentMember, patchProjectV3 } = injectProjectPageContext()
@@ -391,8 +479,8 @@ function resetChanges() {
async function handleSave() {
if (javaAddress.value.trim() && !javaPingResult.value?.online) {
addNotification({
- title: 'Cannot save',
- text: 'The Java server must be reachable before saving. Please ensure the ping succeeds.',
+ title: formatMessage(messages.cannotSaveTitle),
+ text: formatMessage(messages.cannotSaveText),
type: 'error',
})
return
diff --git a/apps/frontend/src/pages/[type]/[project]/settings/tags.vue b/apps/frontend/src/pages/[type]/[project]/settings/tags.vue
index 93d4f1f0fc..77acc7d932 100644
--- a/apps/frontend/src/pages/[type]/[project]/settings/tags.vue
+++ b/apps/frontend/src/pages/[type]/[project]/settings/tags.vue
@@ -4,7 +4,7 @@
- Tags
+ {{ formatMessage(messages.tagsTitle) }}
@@ -27,16 +27,18 @@
- Accurate tagging is important to help people find your
- {{ formatProjectType(project.project_type).toLowerCase() }}. Make sure to select all tags
- that apply.
+ {{
+ formatMessage(messages.taggingImportanceDescription, {
+ type: formatProjectType(project.project_type).toLowerCase(),
+ })
+ }}
- Please upload a version first in order to select tags!
+ {{ formatMessage(messages.uploadVersionFirst) }}
@@ -46,22 +48,32 @@
- Select all categories that reflect the themes or function of your
- {{ formatProjectType(project.project_type).toLowerCase() }}.
+ {{
+ formatMessage(messages.categoriesDescription, {
+ type: formatProjectType(project.project_type).toLowerCase(),
+ })
+ }}
- Select all of the features that your
- {{ formatProjectType(project.project_type).toLowerCase() }} makes use of.
+ {{
+ formatMessage(messages.featuresDescription, {
+ type: formatProjectType(project.project_type).toLowerCase(),
+ })
+ }}
- Select the resolution(s) of textures in your
- {{ formatProjectType(project.project_type).toLowerCase() }}.
+ {{
+ formatMessage(messages.resolutionsDescription, {
+ type: formatProjectType(project.project_type).toLowerCase(),
+ })
+ }}
- Select the realistic performance impact of your
- {{ formatProjectType(project.project_type).toLowerCase() }}. Select multiple if the
- {{ formatProjectType(project.project_type).toLowerCase() }} is configurable to
- different levels of performance impact.
+ {{
+ formatMessage(messages.performanceImpactDescription, {
+ type: formatProjectType(project.project_type).toLowerCase(),
+ })
+ }}
@@ -90,15 +102,16 @@
- Featured tags
+ {{ formatMessage(messages.featuredTags) }}
-
- You can feature up to 3 of your most relevant tags. Other tags may be promoted to
- featured if you do not select all 3.
-
+ {{
+ formatMessage(messages.featuredTagsDescription)
+ }}
- Select at least one category in order to feature a category.
+ {{ formatMessage(messages.selectAtLeastOneCategory) }}
{
@@ -268,12 +353,12 @@ const tooManyTagsWarning = computed(() => {
const tagCount = current.value.selectedTags.length
if (projectV3?.value?.minecraft_server != null) {
if (tagCount > 18) {
- return `You've selected ${tagCount} tags. Please reduce to 18 or fewer to keep your server focused and easier to discover.`
+ return formatMessage(messages.tooManyTagsServerHardWarning, { count: tagCount })
} else if (tagCount > 12) {
- return `You've selected ${tagCount} tags. Consider reducing to 12 or fewer to keep your server focused and easier to discover.`
+ return formatMessage(messages.tooManyTagsServerSoftWarning, { count: tagCount })
}
} else if (tagCount > 8) {
- return `You've selected ${tagCount} tags. Consider reducing to 8 or fewer to keep your project focused and easier to discover.`
+ return formatMessage(messages.tooManyTagsProjectWarning, { count: tagCount })
}
return null
})
@@ -286,14 +371,15 @@ const multipleResolutionTagsWarning = computed(() => {
)
if (resolutionTags.length > 1) {
- return `You've selected ${resolutionTags.length} resolution tags (${resolutionTags
+ const tagsList = resolutionTags
.map((t) => t.name)
.join(', ')
.replace('8x-', '8x or lower')
- .replace(
- '512x+',
- '512x or higher',
- )}). Resource packs should typically only have one resolution tag.`
+ .replace('512x+', '512x or higher')
+ return formatMessage(messages.multipleResolutionTagsWarning, {
+ count: resolutionTags.length,
+ tags: tagsList,
+ })
}
return null
})
@@ -310,7 +396,9 @@ const allTagsSelectedWarning = computed(() => {
totalSelectedTags === categoriesForProjectType.length &&
categoriesForProjectType.length > 0
) {
- return `You've selected all ${categoriesForProjectType.length} available tags. Please select only the tags that truly apply to your project.`
+ return formatMessage(messages.allTagsSelectedWarning, {
+ count: categoriesForProjectType.length,
+ })
}
return null
})
diff --git a/apps/frontend/src/pages/[type]/[project]/settings/versions.vue b/apps/frontend/src/pages/[type]/[project]/settings/versions.vue
index a0b65d5f01..a0f385a639 100644
--- a/apps/frontend/src/pages/[type]/[project]/settings/versions.vue
+++ b/apps/frontend/src/pages/[type]/[project]/settings/versions.vue
@@ -8,10 +8,10 @@
- Edit files
+ {{ formatMessage(messages.editFilesOption) }}
- Edit details
+ {{ formatMessage(messages.editDetailsOption) }}
- Edit metadata
+ {{ formatMessage(messages.editMetadataOption) }}
- Download
+ {{ formatMessage(commonMessages.downloadButton) }}
- Open in new tab
+ {{ formatMessage(messages.openInNewTabOption) }}
- Copy link
+ {{ formatMessage(messages.copyLinkOption) }}
- Share
+ {{ formatMessage(messages.shareOption) }}
- Report
+ {{ formatMessage(commonMessages.reportButton) }}
- Edit files
+ {{ formatMessage(messages.editFilesOption) }}
- Edit details
+ {{ formatMessage(messages.editDetailsOption) }}
- Edit metadata
+ {{ formatMessage(messages.editMetadataOption) }}
- Delete
+ {{ formatMessage(commonMessages.deleteLabel) }}
- Copy ID
+ {{ formatMessage(messages.copyIdOption) }}
- Copy Maven coordinates
+ {{ formatMessage(messages.copyMavenCoordinatesOption) }}
@@ -336,6 +336,7 @@ import {
import {
Admonition,
ButtonStyled,
+ commonMessages,
commonProjectSettingsMessages,
ConfirmModal,
defineMessages,
@@ -444,13 +445,13 @@ async function deleteVersion() {
await client.labrinth.versions_v3.deleteVersion(id)
addNotification({
- title: 'Version deleted',
- text: 'The version has been successfully deleted.',
+ title: formatMessage(messages.versionDeletedTitle),
+ text: formatMessage(messages.versionDeletedText),
type: 'success',
})
} catch (err: any) {
addNotification({
- title: 'An error occurred',
+ title: formatMessage(commonMessages.errorNotificationTitle),
text: err.data ? err.data.description : err,
type: 'error',
})
@@ -477,5 +478,61 @@ const messages = defineMessages({
defaultMessage:
'{count, plural, one {This version is} other {These versions are}} currently withheld and not publicly listed. Please provide proof that you have permission to redistribute certain files included in the modpack {count, plural, one {version} other {versions}}.',
},
+ deleteVersionConfirmTitle: {
+ id: 'project.versions.delete-confirm.title',
+ defaultMessage: 'Are you sure you want to delete this version?',
+ },
+ deleteVersionConfirmDescription: {
+ id: 'project.versions.delete-confirm.description',
+ defaultMessage: 'This will remove this version forever (like really forever).',
+ },
+ deleteButton: {
+ id: 'project.versions.delete-button',
+ defaultMessage: 'Delete',
+ },
+ editVersionTooltip: {
+ id: 'project.versions.edit-version-tooltip',
+ defaultMessage: 'Edit version',
+ },
+ editFilesOption: {
+ id: 'project.versions.edit-files-option',
+ defaultMessage: 'Edit files',
+ },
+ editDetailsOption: {
+ id: 'project.versions.edit-details-option',
+ defaultMessage: 'Edit details',
+ },
+ editMetadataOption: {
+ id: 'project.versions.edit-metadata-option',
+ defaultMessage: 'Edit metadata',
+ },
+ openInNewTabOption: {
+ id: 'project.versions.open-in-new-tab-option',
+ defaultMessage: 'Open in new tab',
+ },
+ copyLinkOption: {
+ id: 'project.versions.copy-link-option',
+ defaultMessage: 'Copy link',
+ },
+ shareOption: {
+ id: 'project.versions.share-option',
+ defaultMessage: 'Share',
+ },
+ copyIdOption: {
+ id: 'project.versions.copy-id-option',
+ defaultMessage: 'Copy ID',
+ },
+ copyMavenCoordinatesOption: {
+ id: 'project.versions.copy-maven-coordinates-option',
+ defaultMessage: 'Copy Maven coordinates',
+ },
+ versionDeletedTitle: {
+ id: 'project.versions.version-deleted-title',
+ defaultMessage: 'Version deleted',
+ },
+ versionDeletedText: {
+ id: 'project.versions.version-deleted-text',
+ defaultMessage: 'The version has been successfully deleted.',
+ },
})
diff --git a/apps/frontend/src/pages/[type]/[project]/version/[version].vue b/apps/frontend/src/pages/[type]/[project]/version/[version].vue
index 004360791c..5facef220d 100644
--- a/apps/frontend/src/pages/[type]/[project]/version/[version].vue
+++ b/apps/frontend/src/pages/[type]/[project]/version/[version].vue
@@ -832,8 +832,8 @@ const deleteVersionMutation = useMutation({
mutationFn: () => client.labrinth.versions_v3.deleteVersion(version.value!.id),
onSuccess: async () => {
addNotification({
- title: 'Version deleted',
- text: 'The version has been successfully deleted.',
+ title: formatMessage(messages.versionDeletedTitle),
+ text: formatMessage(messages.versionDeletedText),
type: 'success',
})
await invalidate()
@@ -841,7 +841,7 @@ const deleteVersionMutation = useMutation({
},
onError: (err: { data?: { description?: string } }) => {
addNotification({
- title: 'An error occurred',
+ title: formatMessage(commonMessages.errorNotificationTitle),
text: err.data?.description ?? String(err),
type: 'error',
})
@@ -894,8 +894,8 @@ const createDataPackVersionMutation = useMutation({
packageModal.value?.hide()
addNotification({
- title: 'Packaging Success',
- text: 'Your data pack was successfully packaged as a mod! Make sure to playtest to check for errors.',
+ title: formatMessage(messages.packagingSuccessTitle),
+ text: formatMessage(messages.packagingSuccessText),
type: 'success',
})
@@ -906,7 +906,7 @@ const createDataPackVersionMutation = useMutation({
},
onError: (err: { data?: { description?: string } }) => {
addNotification({
- title: 'An error occurred',
+ title: formatMessage(commonMessages.errorNotificationTitle),
text: err.data?.description ?? String(err),
type: 'error',
})
@@ -939,6 +939,23 @@ const messages = defineMessages({
id: 'version.download.no-primary-file',
defaultMessage: 'Error: No primary file found',
},
+ versionDeletedTitle: {
+ id: 'version.notification.deleted-title',
+ defaultMessage: 'Version deleted',
+ },
+ versionDeletedText: {
+ id: 'version.notification.deleted-text',
+ defaultMessage: 'The version has been successfully deleted.',
+ },
+ packagingSuccessTitle: {
+ id: 'version.notification.packaging-success-title',
+ defaultMessage: 'Packaging Success',
+ },
+ packagingSuccessText: {
+ id: 'version.notification.packaging-success-text',
+ defaultMessage:
+ 'Your data pack was successfully packaged as a mod! Make sure to playtest to check for errors.',
+ },
downloadVersion: {
id: 'version.download.version',
defaultMessage: 'Download {version} ({size})',
diff --git a/apps/frontend/src/pages/collection/[collection].vue b/apps/frontend/src/pages/collection/[collection].vue
index cc181c17b7..db4424666e 100644
--- a/apps/frontend/src/pages/collection/[collection].vue
+++ b/apps/frontend/src/pages/collection/[collection].vue
@@ -72,7 +72,7 @@
:show-icon="false"
accept="image/png,image/jpeg,image/gif,image/webp"
class="hidden"
- aria-label="Upload icon"
+ :aria-label="formatMessage(messages.uploadIconAriaLabel)"
@change="showPreviewImage"
/>