diff --git a/.env.production.example b/.env.production.example index c07d9e292..dcfe5afeb 100644 --- a/.env.production.example +++ b/.env.production.example @@ -50,6 +50,19 @@ API_TOKEN_HMAC_KEY="" # WHOOP_WEBHOOK_SECRET="" # WHOOP_REDIRECT_URI="" +# ----------------------------------------------------------------------------- +# Fitbit -- optional integration (classic Web API, per-user BYO-keys) +# ----------------------------------------------------------------------------- +# Each user registers their own app at https://dev.fitbit.com (self-serve, no +# brand verification) and pastes the OAuth Client ID + Client Secret into +# Settings (stored encrypted in the DB). There is therefore no +# FITBIT_CLIENT_ID/SECRET here. The OAuth flow uses Authorization Code + PKCE. +# +# FITBIT_REDIRECT_URI overrides the derived +# `${NEXT_PUBLIC_APP_URL}/api/fitbit/callback` when the public URL differs; it +# must exactly match the Callback URL registered in the dev.fitbit.com app. +# FITBIT_REDIRECT_URI="" + # ----------------------------------------------------------------------------- # Polar AccessLink -- optional integration (full OAuth, shared app from env) # ----------------------------------------------------------------------------- diff --git a/messages/de.json b/messages/de.json index e5629cc51..8b5ee78b3 100644 --- a/messages/de.json +++ b/messages/de.json @@ -4454,9 +4454,9 @@ "token": "Der Token-Austausch mit WHOOP ist fehlgeschlagen. Bitte starte die Verbindung erneut.", "generic": "Unbekannter Fehler bei der Verbindung. Bitte starte die Verbindung erneut." }, - "fitbit": "Google Health", + "fitbit": "Fitbit", "fitbitTag": "Fitbit & Pixel", - "fitbitDescription": "Verbinde Google Health, um deine Fitbit- und Pixel-Watch-Werte zu synchronisieren — Gewicht, Herzfrequenz und mehr.", + "fitbitDescription": "Verbinde Fitbit, um deine Fitbit- und Pixel-Watch-Werte zu synchronisieren — Gewicht, Herzfrequenz und mehr.", "fitbitExperimentalBadge": "Experimentell", "fitbitCredentials": "API-Zugangsdaten", "fitbitClientId": "Client-ID", @@ -4468,26 +4468,26 @@ "fitbitSync": "Jetzt synchronisieren", "fitbitFullSync": "Alle Daten synchronisieren", "fitbitFullSyncTitle": "Vollständige Synchronisierung?", - "fitbitFullSyncDescription": "Der gesamte verfügbare Google-Health-Verlauf wird vollständig synchronisiert. Das kann je nach Umfang deines Verlaufs einige Zeit dauern.", + "fitbitFullSyncDescription": "Der gesamte verfügbare Fitbit-Verlauf wird vollständig synchronisiert. Das kann je nach Umfang deines Verlaufs einige Zeit dauern.", "fitbitSyncResult": "{count} Messungen synchronisiert", "fitbitSyncFailed": "Synchronisierung fehlgeschlagen", "fitbitSynchronize": "Synchronisieren", "fitbitDisconnect": "Trennen", - "fitbitDisconnectTitle": "Google Health trennen?", - "fitbitDisconnectDescription": "Die Verbindung zu Google Health wird getrennt. Zuvor synchronisierte Daten bleiben erhalten.", - "fitbitConnect": "Mit Google Health verbinden", - "fitbitNoCredentials": "Bitte gib oben deine API-Zugangsdaten ein, um Google Health zu verbinden.", - "fitbitBackfillInProgress": "Dein Google-Health-Verlauf wird im Hintergrund importiert…", - "fitbitOauthConnected": "Google Health verbunden — die erste Synchronisierung startet im Hintergrund.", - "fitbitOauthFailed": "Google-Health-Verbindung fehlgeschlagen", + "fitbitDisconnectTitle": "Fitbit trennen?", + "fitbitDisconnectDescription": "Die Verbindung zu Fitbit wird getrennt. Zuvor synchronisierte Daten bleiben erhalten.", + "fitbitConnect": "Mit Fitbit verbinden", + "fitbitNoCredentials": "Bitte gib oben deine API-Zugangsdaten ein, um Fitbit zu verbinden.", + "fitbitBackfillInProgress": "Dein Fitbit-Verlauf wird im Hintergrund importiert…", + "fitbitOauthConnected": "Fitbit verbunden — die erste Synchronisierung startet im Hintergrund.", + "fitbitOauthFailed": "Fitbit-Verbindung fehlgeschlagen", "fitbitOauthError": { "csrf1": "Die Sicherheitsprüfung ist fehlgeschlagen, weil das Browser-Cookie fehlte. Bitte starte die Verbindung im selben Browser erneut.", - "state": "Die Antwort von Google passte zu keiner offenen Verbindungsanfrage. Bitte starte die Verbindung erneut.", + "state": "Die Antwort von Fitbit passte zu keiner offenen Verbindungsanfrage. Bitte starte die Verbindung erneut.", "expired": "Die Verbindungsanfrage ist abgelaufen, bevor sie abgeschlossen wurde. Bitte starte die Verbindung erneut.", "cross_user": "Die Antwort gehört zu einer Anfrage eines anderen Kontos. Bitte starte die Verbindung aus deinem eigenen Konto erneut.", - "nocode": "Google hat keinen Autorisierungscode zurückgegeben. Versuche es erneut und erlaube den Zugriff im Google-Dialog.", - "nocreds": "Google Health ist nicht konfiguriert. Hinterlege oben deine Google-OAuth-Zugangsdaten und versuche es erneut.", - "token": "Der Token-Austausch mit Google ist fehlgeschlagen. Bitte starte die Verbindung erneut.", + "nocode": "Fitbit hat keinen Autorisierungscode zurückgegeben. Versuche es erneut und erlaube den Zugriff im Fitbit-Dialog.", + "nocreds": "Fitbit ist nicht konfiguriert. Hinterlege oben deine Fitbit-OAuth-Zugangsdaten und versuche es erneut.", + "token": "Der Token-Austausch mit Fitbit ist fehlgeschlagen. Bitte starte die Verbindung erneut.", "generic": "Unbekannter Fehler bei der Verbindung. Bitte starte die Verbindung erneut." }, "integrations": { diff --git a/messages/en.json b/messages/en.json index a44932a9f..d35328c08 100644 --- a/messages/en.json +++ b/messages/en.json @@ -4454,9 +4454,9 @@ "token": "The token exchange with WHOOP failed. Please start the connection again.", "generic": "Unknown error while connecting. Please start the connection again." }, - "fitbit": "Google Health", + "fitbit": "Fitbit", "fitbitTag": "Fitbit & Pixel", - "fitbitDescription": "Connect Google Health to sync your Fitbit and Pixel Watch vitals — weight, heart rate, and more.", + "fitbitDescription": "Connect Fitbit to sync your Fitbit and Pixel Watch vitals — weight, heart rate, and more.", "fitbitExperimentalBadge": "Experimental", "fitbitCredentials": "API Credentials", "fitbitClientId": "Client ID", @@ -4468,26 +4468,26 @@ "fitbitSync": "Sync now", "fitbitFullSync": "Sync all data", "fitbitFullSyncTitle": "Full synchronization?", - "fitbitFullSyncDescription": "All available Google Health history will be fully synchronized. This may take some time depending on your history.", + "fitbitFullSyncDescription": "All available Fitbit history will be fully synchronized. This may take some time depending on your history.", "fitbitSyncResult": "{count} measurements synchronized", "fitbitSyncFailed": "Sync failed", "fitbitSynchronize": "Synchronize", "fitbitDisconnect": "Disconnect", - "fitbitDisconnectTitle": "Disconnect Google Health?", - "fitbitDisconnectDescription": "The connection to Google Health will be disconnected. Previously synced data will be preserved.", - "fitbitConnect": "Connect with Google Health", - "fitbitNoCredentials": "Please enter your API credentials above to connect Google Health.", - "fitbitBackfillInProgress": "Importing your Google Health history in the background…", - "fitbitOauthConnected": "Google Health connected — the first sync starts in the background.", - "fitbitOauthFailed": "Google Health connection failed", + "fitbitDisconnectTitle": "Disconnect Fitbit?", + "fitbitDisconnectDescription": "The connection to Fitbit will be disconnected. Previously synced data will be preserved.", + "fitbitConnect": "Connect with Fitbit", + "fitbitNoCredentials": "Please enter your API credentials above to connect Fitbit.", + "fitbitBackfillInProgress": "Importing your Fitbit history in the background…", + "fitbitOauthConnected": "Fitbit connected — the first sync starts in the background.", + "fitbitOauthFailed": "Fitbit connection failed", "fitbitOauthError": { "csrf1": "The security check failed because the browser cookie was missing. Please start the connection again in the same browser.", - "state": "The response from Google did not match any open connection request. Please start the connection again.", + "state": "The response from Fitbit did not match any open connection request. Please start the connection again.", "expired": "The connection request expired before it completed. Please start the connection again.", "cross_user": "The response belongs to a request from a different account. Please restart the connection from your own account.", - "nocode": "Google did not return an authorization code. Try again and allow access in the Google dialog.", - "nocreds": "Google Health is not configured. Add your Google OAuth credentials above and try again.", - "token": "The token exchange with Google failed. Please start the connection again.", + "nocode": "Fitbit did not return an authorization code. Try again and allow access in the Fitbit dialog.", + "nocreds": "Fitbit is not configured. Add your Fitbit OAuth credentials above and try again.", + "token": "The token exchange with Fitbit failed. Please start the connection again.", "generic": "Unknown error while connecting. Please start the connection again." }, "integrations": { diff --git a/messages/es.json b/messages/es.json index e8f6b9456..37aa16366 100644 --- a/messages/es.json +++ b/messages/es.json @@ -4454,9 +4454,9 @@ "token": "El intercambio de token con WHOOP falló. Inicia la conexión de nuevo.", "generic": "Error desconocido al conectar. Inicia la conexión de nuevo." }, - "fitbit": "Google Health", + "fitbit": "Fitbit", "fitbitTag": "Fitbit y Pixel", - "fitbitDescription": "Conecta Google Health para sincronizar tus datos de Fitbit y Pixel Watch — peso, frecuencia cardíaca y más.", + "fitbitDescription": "Conecta Fitbit para sincronizar tus datos de Fitbit y Pixel Watch — peso, frecuencia cardíaca y más.", "fitbitExperimentalBadge": "Experimental", "fitbitCredentials": "Credenciales de API", "fitbitClientId": "Client ID", @@ -4468,26 +4468,26 @@ "fitbitSync": "Sincronizar ahora", "fitbitFullSync": "Sincronizar todos los datos", "fitbitFullSyncTitle": "¿Sincronización completa?", - "fitbitFullSyncDescription": "Se sincronizará por completo todo el historial disponible de Google Health. Esto puede tardar un tiempo según tu historial.", + "fitbitFullSyncDescription": "Se sincronizará por completo todo el historial disponible de Fitbit. Esto puede tardar un tiempo según tu historial.", "fitbitSyncResult": "{count} mediciones sincronizadas", "fitbitSyncFailed": "Error de sincronización", "fitbitSynchronize": "Sincronizar", "fitbitDisconnect": "Desconectar", - "fitbitDisconnectTitle": "¿Desconectar Google Health?", - "fitbitDisconnectDescription": "Se desconectará la conexión con Google Health. Los datos sincronizados previamente se conservarán.", - "fitbitConnect": "Conectar con Google Health", - "fitbitNoCredentials": "Introduce tus credenciales de API arriba para conectar Google Health.", - "fitbitBackfillInProgress": "Importando tu historial de Google Health en segundo plano…", - "fitbitOauthConnected": "Google Health conectado: la primera sincronización empieza en segundo plano.", - "fitbitOauthFailed": "Error al conectar con Google Health", + "fitbitDisconnectTitle": "¿Desconectar Fitbit?", + "fitbitDisconnectDescription": "Se desconectará la conexión con Fitbit. Los datos sincronizados previamente se conservarán.", + "fitbitConnect": "Conectar con Fitbit", + "fitbitNoCredentials": "Introduce tus credenciales de API arriba para conectar Fitbit.", + "fitbitBackfillInProgress": "Importando tu historial de Fitbit en segundo plano…", + "fitbitOauthConnected": "Fitbit conectado: la primera sincronización empieza en segundo plano.", + "fitbitOauthFailed": "Error al conectar con Fitbit", "fitbitOauthError": { "csrf1": "La verificación de seguridad falló porque faltaba la cookie del navegador. Inicia la conexión de nuevo en el mismo navegador.", - "state": "La respuesta de Google no coincidió con ninguna solicitud de conexión abierta. Inicia la conexión de nuevo.", + "state": "La respuesta de Fitbit no coincidió con ninguna solicitud de conexión abierta. Inicia la conexión de nuevo.", "expired": "La solicitud de conexión caducó antes de completarse. Inicia la conexión de nuevo.", "cross_user": "La respuesta pertenece a una solicitud de otra cuenta. Reinicia la conexión desde tu propia cuenta.", - "nocode": "Google no devolvió un código de autorización. Inténtalo de nuevo y permite el acceso en el diálogo de Google.", - "nocreds": "Google Health no está configurado. Añade tus credenciales OAuth de Google arriba e inténtalo de nuevo.", - "token": "El intercambio de token con Google falló. Inicia la conexión de nuevo.", + "nocode": "Fitbit no devolvió un código de autorización. Inténtalo de nuevo y permite el acceso en el diálogo de Fitbit.", + "nocreds": "Fitbit no está configurado. Añade tus credenciales OAuth de Fitbit arriba e inténtalo de nuevo.", + "token": "El intercambio de token con Fitbit falló. Inicia la conexión de nuevo.", "generic": "Error desconocido al conectar. Inicia la conexión de nuevo." }, "integrations": { diff --git a/messages/fr.json b/messages/fr.json index 1c58b4827..619b87a1a 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -4454,9 +4454,9 @@ "token": "L'échange de jeton avec WHOOP a échoué. Veuillez relancer la connexion.", "generic": "Erreur inconnue lors de la connexion. Veuillez relancer la connexion." }, - "fitbit": "Google Health", + "fitbit": "Fitbit", "fitbitTag": "Fitbit et Pixel", - "fitbitDescription": "Connecte Google Health pour synchroniser tes données Fitbit et Pixel Watch — poids, fréquence cardiaque et plus.", + "fitbitDescription": "Connecte Fitbit pour synchroniser tes données Fitbit et Pixel Watch — poids, fréquence cardiaque et plus.", "fitbitExperimentalBadge": "Expérimental", "fitbitCredentials": "Identifiants d'API", "fitbitClientId": "Client ID", @@ -4468,26 +4468,26 @@ "fitbitSync": "Synchroniser maintenant", "fitbitFullSync": "Tout synchroniser", "fitbitFullSyncTitle": "Synchronisation complète ?", - "fitbitFullSyncDescription": "Tout l'historique Google Health disponible sera entièrement synchronisé. Cela peut prendre un certain temps selon votre historique.", + "fitbitFullSyncDescription": "Tout l'historique Fitbit disponible sera entièrement synchronisé. Cela peut prendre un certain temps selon votre historique.", "fitbitSyncResult": "{count} mesures synchronisées", "fitbitSyncFailed": "Échec de la synchronisation", "fitbitSynchronize": "Synchroniser", "fitbitDisconnect": "Déconnecter", - "fitbitDisconnectTitle": "Déconnecter Google Health ?", - "fitbitDisconnectDescription": "La connexion à Google Health sera déconnectée. Les données déjà synchronisées seront conservées.", - "fitbitConnect": "Se connecter à Google Health", - "fitbitNoCredentials": "Veuillez saisir vos identifiants d'API ci-dessus pour connecter Google Health.", - "fitbitBackfillInProgress": "Importation de votre historique Google Health en arrière-plan…", - "fitbitOauthConnected": "Google Health connecté — la première synchronisation démarre en arrière-plan.", - "fitbitOauthFailed": "Échec de la connexion à Google Health", + "fitbitDisconnectTitle": "Déconnecter Fitbit ?", + "fitbitDisconnectDescription": "La connexion à Fitbit sera déconnectée. Les données déjà synchronisées seront conservées.", + "fitbitConnect": "Se connecter à Fitbit", + "fitbitNoCredentials": "Veuillez saisir vos identifiants d'API ci-dessus pour connecter Fitbit.", + "fitbitBackfillInProgress": "Importation de votre historique Fitbit en arrière-plan…", + "fitbitOauthConnected": "Fitbit connecté — la première synchronisation démarre en arrière-plan.", + "fitbitOauthFailed": "Échec de la connexion à Fitbit", "fitbitOauthError": { "csrf1": "La vérification de sécurité a échoué car le cookie du navigateur était absent. Veuillez relancer la connexion dans le même navigateur.", - "state": "La réponse de Google ne correspondait à aucune demande de connexion en cours. Veuillez relancer la connexion.", + "state": "La réponse de Fitbit ne correspondait à aucune demande de connexion en cours. Veuillez relancer la connexion.", "expired": "La demande de connexion a expiré avant d'aboutir. Veuillez relancer la connexion.", "cross_user": "La réponse appartient à une demande d'un autre compte. Veuillez relancer la connexion depuis votre propre compte.", - "nocode": "Google n'a pas renvoyé de code d'autorisation. Réessayez et autorisez l'accès dans la fenêtre Google.", - "nocreds": "Google Health n'est pas configuré. Ajoutez vos identifiants OAuth Google ci-dessus et réessayez.", - "token": "L'échange de jeton avec Google a échoué. Veuillez relancer la connexion.", + "nocode": "Fitbit n'a pas renvoyé de code d'autorisation. Réessayez et autorisez l'accès dans la fenêtre Fitbit.", + "nocreds": "Fitbit n'est pas configuré. Ajoutez vos identifiants OAuth Fitbit ci-dessus et réessayez.", + "token": "L'échange de jeton avec Fitbit a échoué. Veuillez relancer la connexion.", "generic": "Erreur inconnue lors de la connexion. Veuillez relancer la connexion." }, "integrations": { diff --git a/messages/it.json b/messages/it.json index 6778c0ec7..7b175c0eb 100644 --- a/messages/it.json +++ b/messages/it.json @@ -4454,9 +4454,9 @@ "token": "Lo scambio del token con WHOOP è fallito. Riavvia la connessione.", "generic": "Errore sconosciuto durante la connessione. Riavvia la connessione." }, - "fitbit": "Google Health", + "fitbit": "Fitbit", "fitbitTag": "Fitbit e Pixel", - "fitbitDescription": "Collega Google Health per sincronizzare i dati di Fitbit e Pixel Watch — peso, frequenza cardiaca e altro.", + "fitbitDescription": "Collega Fitbit per sincronizzare i dati di Fitbit e Pixel Watch — peso, frequenza cardiaca e altro.", "fitbitExperimentalBadge": "Sperimentale", "fitbitCredentials": "Credenziali API", "fitbitClientId": "Client ID", @@ -4468,26 +4468,26 @@ "fitbitSync": "Sincronizza ora", "fitbitFullSync": "Sincronizza tutti i dati", "fitbitFullSyncTitle": "Sincronizzazione completa?", - "fitbitFullSyncDescription": "Tutto lo storico disponibile di Google Health verrà sincronizzato completamente. L'operazione può richiedere del tempo a seconda del tuo storico.", + "fitbitFullSyncDescription": "Tutto lo storico disponibile di Fitbit verrà sincronizzato completamente. L'operazione può richiedere del tempo a seconda del tuo storico.", "fitbitSyncResult": "{count} misurazioni sincronizzate", "fitbitSyncFailed": "Sincronizzazione non riuscita", "fitbitSynchronize": "Sincronizza", "fitbitDisconnect": "Disconnetti", - "fitbitDisconnectTitle": "Disconnettere Google Health?", - "fitbitDisconnectDescription": "La connessione a Google Health verrà disconnessa. I dati già sincronizzati saranno conservati.", - "fitbitConnect": "Connetti con Google Health", - "fitbitNoCredentials": "Inserisci le tue credenziali API qui sopra per connettere Google Health.", - "fitbitBackfillInProgress": "Importazione dello storico Google Health in background…", - "fitbitOauthConnected": "Google Health collegato — la prima sincronizzazione parte in background.", - "fitbitOauthFailed": "Connessione a Google Health non riuscita", + "fitbitDisconnectTitle": "Disconnettere Fitbit?", + "fitbitDisconnectDescription": "La connessione a Fitbit verrà disconnessa. I dati già sincronizzati saranno conservati.", + "fitbitConnect": "Connetti con Fitbit", + "fitbitNoCredentials": "Inserisci le tue credenziali API qui sopra per connettere Fitbit.", + "fitbitBackfillInProgress": "Importazione dello storico Fitbit in background…", + "fitbitOauthConnected": "Fitbit collegato — la prima sincronizzazione parte in background.", + "fitbitOauthFailed": "Connessione a Fitbit non riuscita", "fitbitOauthError": { "csrf1": "Il controllo di sicurezza è fallito perché il cookie del browser era assente. Riavvia la connessione nello stesso browser.", - "state": "La risposta di Google non corrispondeva a nessuna richiesta di connessione aperta. Riavvia la connessione.", + "state": "La risposta di Fitbit non corrispondeva a nessuna richiesta di connessione aperta. Riavvia la connessione.", "expired": "La richiesta di connessione è scaduta prima di completarsi. Riavvia la connessione.", "cross_user": "La risposta appartiene a una richiesta di un altro account. Riavvia la connessione dal tuo account.", - "nocode": "Google non ha restituito un codice di autorizzazione. Riprova e concedi l'accesso nella finestra di Google.", - "nocreds": "Google Health non è configurato. Aggiungi le tue credenziali OAuth di Google qui sopra e riprova.", - "token": "Lo scambio del token con Google è fallito. Riavvia la connessione.", + "nocode": "Fitbit non ha restituito un codice di autorizzazione. Riprova e concedi l'accesso nella finestra di Fitbit.", + "nocreds": "Fitbit non è configurato. Aggiungi le tue credenziali OAuth di Fitbit qui sopra e riprova.", + "token": "Lo scambio del token con Fitbit è fallito. Riavvia la connessione.", "generic": "Errore sconosciuto durante la connessione. Riavvia la connessione." }, "integrations": { diff --git a/messages/pl.json b/messages/pl.json index 638f8a520..aca2120ae 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -4454,9 +4454,9 @@ "token": "Wymiana tokena z WHOOP nie powiodła się. Rozpocznij połączenie ponownie.", "generic": "Nieznany błąd podczas łączenia. Rozpocznij połączenie ponownie." }, - "fitbit": "Google Health", + "fitbit": "Fitbit", "fitbitTag": "Fitbit i Pixel", - "fitbitDescription": "Połącz Google Health, aby synchronizować dane z Fitbit i Pixel Watch — wagę, tętno i więcej.", + "fitbitDescription": "Połącz Fitbit, aby synchronizować dane z Fitbit i Pixel Watch — wagę, tętno i więcej.", "fitbitExperimentalBadge": "Eksperymentalne", "fitbitCredentials": "Dane uwierzytelniające API", "fitbitClientId": "Client ID", @@ -4468,26 +4468,26 @@ "fitbitSync": "Synchronizuj teraz", "fitbitFullSync": "Synchronizuj wszystkie dane", "fitbitFullSyncTitle": "Pełna synchronizacja?", - "fitbitFullSyncDescription": "Cała dostępna historia Google Health zostanie w pełni zsynchronizowana. W zależności od historii może to chwilę potrwać.", + "fitbitFullSyncDescription": "Cała dostępna historia Fitbit zostanie w pełni zsynchronizowana. W zależności od historii może to chwilę potrwać.", "fitbitSyncResult": "Zsynchronizowano {count} pomiarów", "fitbitSyncFailed": "Synchronizacja nie powiodła się", "fitbitSynchronize": "Synchronizuj", "fitbitDisconnect": "Rozłącz", - "fitbitDisconnectTitle": "Rozłączyć Google Health?", - "fitbitDisconnectDescription": "Połączenie z Google Health zostanie rozłączone. Wcześniej zsynchronizowane dane zostaną zachowane.", - "fitbitConnect": "Połącz z Google Health", - "fitbitNoCredentials": "Wprowadź powyżej swoje dane uwierzytelniające API, aby połączyć Google Health.", - "fitbitBackfillInProgress": "Importowanie historii Google Health w tle…", - "fitbitOauthConnected": "Google Health połączony — pierwsza synchronizacja startuje w tle.", - "fitbitOauthFailed": "Połączenie z Google Health nie powiodło się", + "fitbitDisconnectTitle": "Rozłączyć Fitbit?", + "fitbitDisconnectDescription": "Połączenie z Fitbit zostanie rozłączone. Wcześniej zsynchronizowane dane zostaną zachowane.", + "fitbitConnect": "Połącz z Fitbit", + "fitbitNoCredentials": "Wprowadź powyżej swoje dane uwierzytelniające API, aby połączyć Fitbit.", + "fitbitBackfillInProgress": "Importowanie historii Fitbit w tle…", + "fitbitOauthConnected": "Fitbit połączony — pierwsza synchronizacja startuje w tle.", + "fitbitOauthFailed": "Połączenie z Fitbit nie powiodło się", "fitbitOauthError": { "csrf1": "Kontrola bezpieczeństwa nie powiodła się, ponieważ brakowało pliku cookie przeglądarki. Rozpocznij połączenie ponownie w tej samej przeglądarce.", - "state": "Odpowiedź z Google nie pasowała do żadnego otwartego żądania połączenia. Rozpocznij połączenie ponownie.", + "state": "Odpowiedź z Fitbit nie pasowała do żadnego otwartego żądania połączenia. Rozpocznij połączenie ponownie.", "expired": "Żądanie połączenia wygasło przed zakończeniem. Rozpocznij połączenie ponownie.", "cross_user": "Odpowiedź należy do żądania z innego konta. Rozpocznij połączenie ponownie z własnego konta.", - "nocode": "Google nie zwrócił kodu autoryzacji. Spróbuj ponownie i zezwól na dostęp w oknie Google.", - "nocreds": "Google Health nie jest skonfigurowany. Dodaj powyżej swoje dane OAuth Google i spróbuj ponownie.", - "token": "Wymiana tokena z Google nie powiodła się. Rozpocznij połączenie ponownie.", + "nocode": "Fitbit nie zwrócił kodu autoryzacji. Spróbuj ponownie i zezwól na dostęp w oknie Fitbit.", + "nocreds": "Fitbit nie jest skonfigurowany. Dodaj powyżej swoje dane OAuth Fitbit i spróbuj ponownie.", + "token": "Wymiana tokena z Fitbit nie powiodła się. Rozpocznij połączenie ponownie.", "generic": "Nieznany błąd podczas łączenia. Rozpocznij połączenie ponownie." }, "integrations": {