feat: i18n — translate Android app UI + pass device lang to server
- French (values-fr) and German (values-de) string resources for all app UI: settings dialog, errors, labels, buttons - getDeviceLang() detects Locale.getDefault().getLanguage() and maps to en/fr/de - loadUrl() now appends ?lang=XX to the base URL so the web app renders in the user's device language automatically - English remains the fallback for unsupported languages
This commit is contained in:
@@ -8,6 +8,7 @@ import android.net.ConnectivityManager;
|
|||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.http.SslError;
|
import android.net.http.SslError;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import java.util.Locale;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.webkit.CookieManager;
|
import android.webkit.CookieManager;
|
||||||
@@ -212,12 +213,21 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private void loadUrl(String url) {
|
private void loadUrl(String url) {
|
||||||
serverUrl = url;
|
serverUrl = url;
|
||||||
currentUrl = url;
|
// Append device language so the web app renders in the user's language
|
||||||
|
currentUrl = url + "?lang=" + getDeviceLang();
|
||||||
firstLoad = true;
|
firstLoad = true;
|
||||||
errorView.setVisibility(View.GONE);
|
errorView.setVisibility(View.GONE);
|
||||||
webView.setVisibility(View.VISIBLE);
|
webView.setVisibility(View.VISIBLE);
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
webView.loadUrl(url);
|
webView.loadUrl(currentUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Map the device's system language to one of the supported codes: en, fr, de. */
|
||||||
|
private String getDeviceLang() {
|
||||||
|
String lang = Locale.getDefault().getLanguage();
|
||||||
|
if ("fr".equals(lang)) return "fr";
|
||||||
|
if ("de".equals(lang)) return "de";
|
||||||
|
return "en";
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showSettingsDialog() {
|
private void showSettingsDialog() {
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">Mahlzeiten-Tracker</string>
|
||||||
|
<string name="refresh">Aktualisieren</string>
|
||||||
|
<string name="settings">Einstellungen</string>
|
||||||
|
<string name="settings_title">Server-Konfiguration</string>
|
||||||
|
<string name="url_label">Geben Sie die Basis-URL Ihres Mahlzeiten-Trackers ein:</string>
|
||||||
|
<string name="url_hint_text">Die Basisadresse Ihres Servers.\nBeispiel: https://mahlzeiten.beispiel.de</string>
|
||||||
|
<string name="save">Speichern</string>
|
||||||
|
<string name="cancel">Abbrechen</string>
|
||||||
|
<string name="clear_data">Daten löschen</string>
|
||||||
|
<string name="url_saved">Mit Server verbunden</string>
|
||||||
|
<string name="url_empty">Bitte geben Sie eine Basis-URL ein</string>
|
||||||
|
<string name="error_no_network">Keine Netzwerkverbindung.\nZum Wiederholen tippen.</string>
|
||||||
|
<string name="error_load_failed">Server nicht erreichbar.\nÜberprüfen Sie die URL und tippen Sie zum Wiederholen.\n\nTipp: Öffnen Sie die URL zuerst in einem Browser.</string>
|
||||||
|
<string name="error_http">Server antwortete mit HTTP %d.\nÜberprüfen Sie Ihre Basis-URL und wiederholen Sie.</string>
|
||||||
|
<string name="server_not_configured">Kein Server konfiguriert.\nTippen Sie auf ⚙, um Ihre Basis-URL einzugeben.</string>
|
||||||
|
<string name="data_cleared">Lokale Daten gelöscht</string>
|
||||||
|
<string name="ssl_error_title">⚠ Zertifikatwarnung</string>
|
||||||
|
<string name="ssl_error_msg">Der Server %1$s verwendet ein nicht vertrauenswürdiges Zertifikat (Fehler %2$d).\n\nDies ist bei selbst gehosteten Servern üblich. Nur fortfahren, wenn Sie diesem Server vertrauen.</string>
|
||||||
|
<string name="ssl_proceed">Fortfahren</string>
|
||||||
|
<string name="ssl_cancel">Abbrechen</string>
|
||||||
|
</resources>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">Suivi Repas</string>
|
||||||
|
<string name="refresh">Actualiser</string>
|
||||||
|
<string name="settings">Paramètres</string>
|
||||||
|
<string name="settings_title">Configuration du serveur</string>
|
||||||
|
<string name="url_label">Entrez l\'URL de base de votre Suivi Repas :</string>
|
||||||
|
<string name="url_hint_text">L\'adresse de base de votre serveur.\nExemple : https://repas.exemple.com</string>
|
||||||
|
<string name="save">Enregistrer</string>
|
||||||
|
<string name="cancel">Annuler</string>
|
||||||
|
<string name="clear_data">Effacer données</string>
|
||||||
|
<string name="url_saved">Connecté au serveur</string>
|
||||||
|
<string name="url_empty">Veuillez entrer une URL de base</string>
|
||||||
|
<string name="error_no_network">Pas de connexion réseau.\nAppuyez pour réessayer.</string>
|
||||||
|
<string name="error_load_failed">Impossible de joindre le serveur.\nVérifiez l\'URL et appuyez pour réessayer.\n\nConseil : vérifiez que l\'URL s\'ouvre d\'abord dans un navigateur.</string>
|
||||||
|
<string name="error_http">Le serveur a retourné HTTP %d.\nVérifiez votre URL de base et réessayez.</string>
|
||||||
|
<string name="server_not_configured">Aucun serveur configuré.\nAppuyez sur l\'icône ⚙ pour entrer votre URL de base.</string>
|
||||||
|
<string name="data_cleared">Données locales effacées</string>
|
||||||
|
<string name="ssl_error_title">⚠ Avertissement certificat</string>
|
||||||
|
<string name="ssl_error_msg">Le serveur %1$s utilise un certificat non fiable (erreur %2$d).\n\nC\'est fréquent pour les serveurs auto-hébergés. Continuez seulement si vous faites confiance à ce serveur.</string>
|
||||||
|
<string name="ssl_proceed">Continuer</string>
|
||||||
|
<string name="ssl_cancel">Annuler</string>
|
||||||
|
</resources>
|
||||||
Reference in New Issue
Block a user