diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index de99ad82a..dee997a09 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,6 +4,7 @@ image: eclipse-temurin:25
# all stages need to be defined here
stages:
+ - translations
- build
- api
- pages
@@ -32,6 +33,9 @@ variables:
build:
stage: build
+ needs:
+ - job: translations
+ artifacts: true
parallel:
matrix:
- MC_VER: [
@@ -102,3 +106,17 @@ pages:
- public
allow_failure: false
extends: .build_java
+
+translations:
+ stage: translations
+ needs: []
+ image: crowdin/cli:latest
+ script:
+ - if [ "$CI_COMMIT_BEFORE_SHA" = "0000000000000000000000000000000000000000" ] || git diff --name-only "$CI_COMMIT_BEFORE_SHA" "$CI_COMMIT_SHA" -- coreSubProjects/core/src/main/resources/assets/distanthorizons/lang | grep -q .; then crowdin upload sources; fi
+ - crowdin download --export-only-approved --skip-untranslated-files
+ - for f in coreSubProjects/core/src/main/resources/assets/distanthorizons/lang/*.json; do [ -e "$f" ] || continue; sed -i 's/\\\\n/\\n/g' "$f"; n="$(basename "$f" | tr '[:upper:]' '[:lower:]')"; [ "$(basename "$f")" = "$n" ] || mv "$f" "$(dirname "$f")/$n"; done
+ artifacts:
+ paths:
+ - coreSubProjects/core/src/main/resources/assets/distanthorizons/lang/**
+ expire_in: 1 day
+ when: always
diff --git a/Readme.md b/Readme.md
index 10bc40634..dd9b2a978 100644
--- a/Readme.md
+++ b/Readme.md
@@ -12,6 +12,11 @@ Below is a video demonstrating the system:

+## Translations
+
+[](https://crowdin.com/project/distant-horizons)\
+Crowdin Project: [Distant Horizons](https://crowdin.com/project/distant-horizons)\
+Guidelines: [translations.md](translations.md)
## Source Code Installation
diff --git a/contributing.md b/contributing.md
index 45e1b6118..69d0db944 100644
--- a/contributing.md
+++ b/contributing.md
@@ -4,7 +4,9 @@ Thanks for your interest in contributing to Distant Horizons!
Check out the [Core Wiki](https://gitlab.com/jeseibel/distant-horizons-core/-/wikis/home) for a rough overview of Distant Horizon's project structure.
+## Translations
+See [translations.md](translations.md) for the Crowdin workflow.
## Submitting a merge request
diff --git a/crowdin.yml b/crowdin.yml
new file mode 100644
index 000000000..83c9974e0
--- /dev/null
+++ b/crowdin.yml
@@ -0,0 +1,8 @@
+project_id_env: CROWDIN_PROJECT_ID
+api_token_env: CROWDIN_PERSONAL_TOKEN
+base_path: ./coreSubProjects/core/src/main/resources/assets/distanthorizons/lang
+preserve_hierarchy: true
+files:
+ - source: /en_us.json
+ translation: /%locale_with_underscore%.json
+ type: json
diff --git a/translations.md b/translations.md
new file mode 100644
index 000000000..2d0a9dd05
--- /dev/null
+++ b/translations.md
@@ -0,0 +1,16 @@
+Translations are managed via Crowdin: https://crowdin.com/project/distant-horizons
+
+## How to help:
+1. Create a Crowdin account
+2. Join the project
+3. Translate strings from `en_us.json`.
+
+## Notes:
+- Keys ending with `@tooltip` are tooltips.
+- Keep formatting codes intact, IE: `ยง`, `%s`, `%d`, `%1$s`.
+- For newlines, utilize **Shift + Enter** instead of `\n`.
+- Do not edit non-English files in pull requests.
+
+## To pull translations into the repo
+- Downlod the [Crowdin CLI](https://github.com/crowdin/crowdin-cli/releases)
+- Run `crowdin download --export-only-approved --skip-untranslated-files` in the project root.
\ No newline at end of file