diff --git a/CHANGELOG.md b/CHANGELOG.md
index c12bce5..7f79839 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -39,6 +39,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Field icons in the event-form settings. Each optional-field toggle (Settings →
Event form) now shows the same icon the field uses in the new-event form, so
the list is easier to scan.
+- Help translate Calendula. A new **Settings → Help translate** link opens the
+ project's Weblate, where you can add or improve a language in your browser — no
+ coding needed. Contributions in any language are welcome.
### Changed
- Tidied **Settings → Appearance** into clearer groups (theme & colour, calendar,
diff --git a/README.md b/README.md
index 994ecd2..e6d4b2e 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,8 @@ database, no sync stack reinvented.
- Real Material 3 Expressive throughout — dynamic color (Android 12+),
expressive motion and shapes, light/dark theme
-- German and English UI, per-app language setting
+- German and English UI, per-app language setting — and [open to community
+ translations](#-translations)
- **Zero telemetry, zero analytics, no internet permission** — your data
never leaves the device
@@ -108,6 +109,17 @@ without reinstalling. Or build from source — see below.
- **[Architecture](docs/ARCHITECTURE.md)** — the layered design and key pipelines
- **[Roadmap](.planning/ROADMAP.md)** — what's shipped and what's next
+## 🌍 Translations
+
+Calendula ships in German and English, and you're warmly invited to add your
+language. Translations are managed on a self-hosted **Weblate**:
+
+**→ [Help translate Calendula](https://weblate.dev.jeanlucmakiola.de/engage/calendula/)**
+
+No coding needed — register on the Weblate server, pick (or request) a language,
+and translate the strings in your browser. You can also reach this link in the
+app under **Settings → Help translate**.
+
## 📜 License
[MIT](LICENSE) — Jean-Luc Makiola, 2026
diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsScreen.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsScreen.kt
index dab5958..c5e5c22 100644
--- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsScreen.kt
+++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/settings/SettingsScreen.kt
@@ -48,6 +48,7 @@ import androidx.compose.material.icons.filled.Gavel
import androidx.compose.material.icons.filled.Language
import androidx.compose.material.icons.filled.Notifications
import androidx.compose.material.icons.filled.Palette
+import androidx.compose.material.icons.filled.Translate
import androidx.compose.material.icons.filled.Tune
import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.Icon
@@ -223,6 +224,7 @@ private fun SettingsHub(
onClick = onManageCalendars,
)
LanguageRow(position = Position.Middle)
+ HelpTranslateRow(position = Position.Middle)
// One-tap add of the "New event" Quick Settings tile. The system prompt
// is API 33+; on older versions the tile is still addable manually from
// the QS editor, so the row simply doesn't appear here.
@@ -288,6 +290,20 @@ private fun QuickSettingsTileRow(position: Position) {
)
}
+/** Opens the project's Weblate engage page so users can contribute translations. */
+@Composable
+private fun HelpTranslateRow(position: Position) {
+ val context = LocalContext.current
+ val url = stringResource(R.string.about_translate_url)
+ GroupedRow(
+ title = stringResource(R.string.settings_translate),
+ summary = stringResource(R.string.settings_translate_hint),
+ position = position,
+ leading = { CategoryIcon(Icons.Default.Translate, ChipAccent.Neutral) },
+ onClick = { openUrl(context, url) },
+ )
+}
+
@Composable
private fun LanguageRow(position: Position) {
val context = LocalContext.current
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4a2331a..bf0b417 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -330,6 +330,8 @@
Language
App language
System default
+ Help translate
+ Add or improve a language on Weblate
Theme, default view, week start
Default fields for new events
@@ -436,6 +438,7 @@
https://gitea.jeanlucmakiola.de/makiolaj/calendula
https://gitea.jeanlucmakiola.de/makiolaj/calendula/src/branch/main/LICENSE
https://ko-fi.com/jeanlucmakiola
+ https://weblate.dev.jeanlucmakiola.de/engage/calendula/
diff --git a/fastlane/metadata/android/en-US/changelogs/21100.txt b/fastlane/metadata/android/en-US/changelogs/21100.txt
index c88ec41..a7dc625 100644
--- a/fastlane/metadata/android/en-US/changelogs/21100.txt
+++ b/fastlane/metadata/android/en-US/changelogs/21100.txt
@@ -30,6 +30,9 @@
- Field icons in the event-form settings. Each optional-field toggle (Settings →
Event form) now shows the same icon the field uses in the new-event form, so
the list is easier to scan.
+- Help translate Calendula. A new **Settings → Help translate** link opens the
+ project's Weblate, where you can add or improve a language in your browser — no
+ coding needed. Contributions in any language are welcome.
### Changed
- Tidied **Settings → Appearance** into clearer groups (theme & colour, calendar,