From 68f29e6058939295988227e64618b992abfefe02 Mon Sep 17 00:00:00 2001 From: JohnBraham Date: Mon, 5 Oct 2026 12:45:06 +0100 Subject: [PATCH] Keep translations intact in Windows builds Use UTF-8 for archive filters and resource processing. Check every packaged language file against its source text before accepting a release jar. --- CHANGELOG.txt | 1 + build.gradle | 2 ++ gradle/release/artifacts.gradle | 11 +++++++++++ 3 files changed, 14 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 30584064..4e40f28d 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -22,6 +22,7 @@ Base Metals 3.0.1.114041 rules and their defaults are unchanged. - Split the longer build checks into focused scripts and retain ForgeGradle 7, reproducible archives, checked dependencies and isolated test launches. +- Keep translated text intact when building jars on Windows as well as Linux. Base Metals 3.0.1.113021 diff --git a/build.gradle b/build.gradle index f16d5bc9..310b2576 100644 --- a/build.gradle +++ b/build.gradle @@ -71,6 +71,7 @@ tasks.withType(Javadoc).configureEach { tasks.withType(AbstractArchiveTask).configureEach { preserveFileTimestamps = false reproducibleFileOrder = true + filteringCharset = 'UTF-8' filesMatching(['**/*.java', '**/*.js', '**/*.json', '**/*.toml', '**/*.mcmeta', '**/*.md', '**/*.txt', '**/*.html', '**/*.css', '**/*.properties', '**/element-list', '**/package-list']) { @@ -227,6 +228,7 @@ configurations.named('testRuntimeClasspath') { } tasks.named('processResources', ProcessResources) { + filteringCharset = 'UTF-8' def replaceProperties = [minecraft_version: minecraft_version, minecraft_version_range: minecraft_version_range, forge_version: forge_version, forge_version_range: forge_version_range, loader_version_range: loader_version_range, diff --git a/gradle/release/artifacts.gradle b/gradle/release/artifacts.gradle index 1af220d3..be1a161a 100644 --- a/gradle/release/artifacts.gradle +++ b/gradle/release/artifacts.gradle @@ -270,6 +270,17 @@ tasks.register('verifyReleaseArtifacts') { if (locales.size() != 18) { throw new GradleException("Release jar must contain all 18 language files, found ${locales.size()}") } + locales.each { locale -> + File source = sourceSets.main.resources.srcDirs.collect { new File(it, locale) } + .find { it.isFile() } + if (source == null) throw new GradleException("Language source is missing: ${locale}") + def expectedText = new JsonSlurper().parse(source, 'UTF-8') + def packagedText = new JsonSlurper().parseText( + zip.getInputStream(zip.getEntry(locale)).getText('UTF-8')) + if (packagedText != expectedText) { + throw new GradleException("Release jar changed the translations in ${locale}") + } + } } } }