From 1664625bc596daa78896bd7a80305b44a1682409 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Sat, 27 Jun 2026 23:10:06 +0200 Subject: [PATCH] feat(translations): add "Help translate" link to the Weblate engage page Invite community translations: a new Settings > Help translate row (next to App language) opens the project's Weblate engage page, plus a Translations section in the README. Documented in the 2.11.0 changelog. Co-Authored-By: Claude Opus 4.8 (1M context) --- CHANGELOG.md | 3 +++ README.md | 14 +++++++++++++- .../calendula/ui/settings/SettingsScreen.kt | 16 ++++++++++++++++ app/src/main/res/values/strings.xml | 3 +++ .../metadata/android/en-US/changelogs/21100.txt | 3 +++ 5 files changed, 38 insertions(+), 1 deletion(-) 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,