You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+10-2Lines changed: 10 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -146,10 +146,18 @@ If you want to add a real linter (ktlint is the most popular choice) as a separa
146
146
147
147
## Translations / Localization
148
148
149
-
BoxViewer currently ships English (default) and German (`values-de/`) translations. New languages are welcome and much appreciated.
149
+
BoxViewer uses **POEditor** to collaboratively manage app translations. We welcome contributions for correcting existing strings or translating the app into new languages.
150
150
151
-
To add or improve a translation:
151
+
### ✍️ How to Contribute Translations
152
+
1.**Join the Translation Project**: Visit our public join portal on POEditor:
153
+
👉 **[Translate BoxViewer on POEditor](https://poeditor.com/join/project/3BO0G8m3BZ)**.
154
+
2.**Submit Translations**: You can suggest corrections or translate untranslated strings directly on the web interface.
155
+
3.**Adding a New Language**: You can suggest/request a new target language within the POEditor project portal. Once translations are complete, a developer will update the app's locale configuration and sync workflows to enable it.
156
+
4.**Moderation**: All submitted translations go through a moderation queue to ensure accuracy and prevent spam before they are merged.
152
157
158
+
*Alternatively, if you prefer editing XML resources directly, you can submit a Pull Request following the guidelines below:*
159
+
160
+
### 🛠️ Manual Translation Guidelines (via XML)
153
161
1.**Adding a new language:** copy `app/src/main/res/values/strings.xml` to `app/src/main/res/values-<lang>/strings.xml` (e.g., `values-fr/`, `values-es/`, `values-nl/`) and translate every string. The `<lang>` code follows Android's standard ISO 639-1 conventions. Do **not** add a new language by editing the existing `values-de/` directory.
154
162
2.**Improving an existing translation:** edit the file directly in the appropriate `values-<lang>/` directory.
155
163
3.**Do not translate keys, only values.** String keys (`R.string.dashboard_title`, etc.) are referenced from Kotlin code and must stay identical.
Copy file name to clipboardExpand all lines: README.md
+11-1Lines changed: 11 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -33,7 +33,7 @@ Crafted with **Kotlin** and **Jetpack Compose** following Material Design 3 guid
33
33
***📈 Rich Telemetry Analysis**: Deep telemetry streams visualization including units, last updated timestamps, coordinates, station type, and exposure type (indoor vs. outdoor).
34
34
***🔍 Smart Discovery Engine**: Locate public senseBoxes from the openSenseMap community using direct search by name/ID, location address auto-complete, or on-demand GPS discovery.
35
35
***🌡️ Local Unit Conversion**: Per-sensor unit switching for temperature (°C/°F/K), pressure (hPa/mbar/Pa/inHg/mmHg), and wind (m/s/km/h/mph/kn) performed entirely on-device.
36
-
***🌐 Multi-Language Support**: BoxViewer currently ships in English and German and is prepared for additional languages.
36
+
***🌐 Multi-Language Support**: BoxViewer currently ships in English and German and is prepared for additional languages (see below)
37
37
***🔗 Quick Sharing & Deep Linking**: Generate local QR codes to share senseBox stations. Recipients scan the code or open a sharing web link to view the station directly inside the BoxViewer app.
38
38
***🔋 Battery & API-Friendly**: Seamless local SQLite caching (`SensorCacheEntity`) and awake-on-unlock widget refresh logic ensure you get fresh data without draining your battery or hammering openSenseMap servers.
39
39
***🔒 Privacy-First & De-Googled Friendly**: 100% free of Google Play Services (GMS) dependencies in the app code. Core functionality relies on the native Android `LocationManager` and direct openSenseMap APIs. Address search and location labels may use the device’s native geocoder (ROM-dependent backend) or an OpenStreetMap-based fallback; see the Privacy Policy for details. Zero telemetry, analytics, or third-party trackers.
@@ -129,6 +129,16 @@ BoxViewer features a built-in Air Quality Index engine that supports six major i
129
129
130
130
---
131
131
132
+
## 🌐 Translation & Localization
133
+
134
+
Help make BoxViewer accessible to everyone! We collaboratively translate the app using **POEditor**. You can help translate the app, submit corrections, or suggest new languages on our POEditor project page:
135
+
136
+
👉 **[Help Translate BoxViewer on POEditor](https://poeditor.com/join/project/3BO0G8m3BZ)**
137
+
138
+
For more details on translating and how the sync workflow works, check our [CONTRIBUTING.md](./CONTRIBUTING.md#translations--localization).
0 commit comments