Davide Ferrari 903e352687 feat: Add internationalization (i18n) support (#67)
* feat(i18n): add localization support for DashboardScreen

- Set up localization infrastructure with values-it, values-es, values-ca folders
- Extract all hardcoded strings from DashboardScreen to strings.xml
- Add Italian, Spanish, and Catalan translations
- Include contextual comments for translators

Supported languages: English (default), Italian, Spanish, Catalan

* feat(i18n): add localization for SettingsScreen

- Extract all hardcoded strings from SettingsScreen
- Add Italian, Spanish, and Catalan translations
- Include contextual comments for server settings, display settings,
  and advanced options

* feat(i18n): add localization for DrivesScreen

- Extract all hardcoded strings from DrivesScreen
- Add localized filter labels for date and distance filters
- Add Italian, Spanish, and Catalan translations for:
  - Screen title and navigation
  - Summary card labels
  - Drive stat labels
  - Chart titles (drives/time/distance/speed per day/week/month)
  - Filter chip labels

* feat(i18n): add localization for DriveDetailScreen

- Extract all hardcoded strings from DriveDetailScreen
- Add Italian, Spanish, and Catalan translations for:
  - Screen title and navigation
  - Route header (from/to, started/ended)
  - Stats section titles and labels
  - Chart titles (speed/power/battery/elevation profiles)

* feat(i18n): localize ChargesScreen strings

Extract and translate all user-facing strings from ChargesScreen:
- Screen title and section headers
- Summary card labels (Total Sessions, Total Energy, Total Cost, etc.)
- Charge item stat labels (Added, Duration, Cost, Battery)
- Empty state message
- Chart titles for energy/cost/charges per day/week/month
- Filter labels using helper functions for DateFilter and ChargeTypeFilter

Translations provided for Italian (it), Spanish (es), and Catalan (ca).

* feat(i18n): localize ChargeDetailScreen strings

Extract and translate all user-facing strings from ChargeDetailScreen:
- Screen title and header labels (Location, Started, Ended)
- Stats section titles (Energy, Battery, Power, Charger, Temperature, Cost)
- Stats labels (voltage/current max/min/avg, efficiency, etc.)
- Chart titles (Power Profile, Voltage Profile, Current Profile, Battery Level)
- Map marker title
- AC/DC badge text

Translations provided for Italian (it), Spanish (es), and Catalan (ca).

* feat(i18n): localize BatteryScreen strings

Extract and translate all user-facing strings from BatteryScreen:
- Screen titles (Battery Health, Battery Detail)
- Capacity section (Usable new/now, Rated)
- Degradation section (Estimated degradation, Loss kWh/%)
- Range section (Max Range new/now, Range loss)
- Current charge section
- Range information section (Estimated, Rated, Ideal ranges)
- Estimated total capacity section
- Info dialog titles and messages with explanatory content
- Common dialog button text (Got it)

Translations provided for Italian (it), Spanish (es), and Catalan (ca).

* feat(i18n): localize StatsScreen

- Add strings for stats title, sync messages, progress indicators
- Localize drives overview and charges overview sections
- Localize all record labels (longest drive, top speed, etc.)
- Add category names (Drives, Battery, Weather & Altitude, Distances)
- Localize temperature extremes and AC/DC ratio cards
- Add dialog strings for sync logs, gap records, range records
- Add translations for Italian, Spanish, and Catalan

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(i18n): localize MileageScreen

- Add strings for mileage title, chart titles (by year/month/day)
- Localize empty states (no data, no data for year)
- Add summary labels (Total, Avg/Year, Avg/Month, # of drives)
- Localize info dialog explaining average per year calculation
- Add "Recent trips" and "Drives" section headers
- Localize all "View details" content descriptions
- Add translations for Italian, Spanish, and Catalan

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(i18n): localize SoftwareVersionsScreen

- Add strings for software title, overview card labels
- Localize date filter labels (Last 6 months, Last year, All time)
- Add update history header and empty state message
- Localize version card labels (Current version, Installed, Days, Duration)
- Add strings for longest installed badge
- Localize chart title and format strings
- Add translations for Italian, Spanish, and Catalan

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(i18n): localize common components and weather card

- Add fullscreen/exit fullscreen content descriptions
- Localize WeatherAlongTheWayCard title, loading, and empty states
- Localize weather table headers (Time, Distance, Weather)
- Localize weather condition descriptions (Clear sky, Partly cloudy, etc.)
- Localize distance markers (Start, End)
- Add translations for Italian, Spanish, and Catalan

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: add localization instructions to DEVELOPMENT.md

- Document supported languages (English, Italian, Spanish, Catalan)
- Add string naming conventions (snake_case)
- Explain how to add new strings with context comments
- Document format strings with placeholders
- Add instructions for adding new languages
- Include testing tips for translations

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(i18n): enable per-app language selection (Android 13+)

- Add locale_config.xml declaring supported languages (en, it, es, ca)
- Reference locale config in AndroidManifest.xml
- Users can now change app language without changing system language

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(i18n): keep AC/DC untranslated in all languages

Technical terms AC (Alternating Current) and DC (Direct Current) are
universally understood and should not be translated to CA/CC.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* ci: add lint check for hardcoded strings

- Configure Android Lint to treat HardcodedText and SetTextI18n as errors
- Add CI workflow that runs lint on every push/PR to main
- Build job depends on lint passing
- Upload lint report as artifact on failure

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: add localization rules to CLAUDE.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* ci: combine lint and build into single job

Lint requires compilation anyway, so running them in one job allows
Gradle to reuse artifacts and is more efficient than two separate jobs.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: increase JVM heap to prevent OOM in CI

- Increase Gradle daemon heap from 2GB to 4GB
- Add HeapDumpOnOutOfMemoryError for debugging
- Set test JVM max heap to 1GB

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 19:03:30 +01:00
2025-12-22 13:41:40 +01:00
2026-01-17 11:17:02 +01:00

MateDroid

Get it on F-Droid

A native Android application for viewing Tesla vehicle data from your self-hosted Teslamate instance via the TeslamateApi.

DISCLAIMER: This app has been vibe-coded

Features

  • Dashboard - Real-time vehicle status at a glance with 3D car image matching your vehicle's color and wheels
  • Stats for Nerds - Tap car image for advanced statistics: records, extremes, AC/DC ratio and much more!
  • Charging History - View all charging sessions with statistics and charts
  • Charge Details - Interactive map and detailed power/voltage/temperature charts
  • Drive History - Track trips with efficiency metrics and route visualization
  • Battery Health - Monitor battery degradation over time
  • Software Updates - Track update history
  • Car color based themes - Light/dark themes with palette based on the car color

Main dashboard Battery health Mileage Software versions

Drives Drive details Charges Charge details Stats for nerds

Requirements

This projects needs Teslamate API to work, it will not work just with plan Teslamate. Please follow the Teslamate API instructions and make sure it is working as expected before opening any issue, thanks!

Installation

Download the latest APK from the Releases page and install it on your Android device.

Build from Source

Prerequisites

  • Java 17 or higher
  • Android SDK (API 35)
  • (Optional) Android Studio

Build Steps

# Clone the repository
git clone https://github.com/vide/matedroid.git
cd matedroid

# Build debug APK
./gradlew assembleDebug

# The APK will be at: app/build/outputs/apk/debug/app-debug.apk

# Or install directly to a connected device/emulator
./gradlew installDebug

Development

Please see DEVELOPMENT.md for more details on how this app was created and how to build and test it.

License

This project is licensed under the GNU General Public License v3.0. See LICENSE for details.

Acknowledgments

  • Teslamate - Self-hosted Tesla data logger
  • TeslamateApi - RESTful API for Teslamate
  • t-buddy - iOS app that triggered this development and was used as inspiration. Many kudos, it's a wonderful app and you should use it if you are on iOS!
Description
⚠️ ARCHIVED: Original GitHub repository no longer exists. Preserved as backup on 2026-01-19T21:11:53.274Z
Readme GPL-3.0 11 MiB
Languages
Kotlin 98.4%
Python 1.4%
Makefile 0.2%