diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 28eea257a..4cf8375ad 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,15 +1,25 @@ -# Proposed Changes +## Description (Proposed Changes) +(Please try to mention in bullet points.) -- - - -Related Issues (if applicable) +## Link to the issue : -- +(Add link of the issue you have proposed changes to) + +- Link : + +## Tests + +Please make sure to add tests when implementing new features. + +## Checklist -## Please check that the PR fulfills these requirements +Please check that the PR fulfills all requirements listed below by checking the relevant checkboxes (`[x]`). This will ensure a smooth and quick review process. - [ ] Set a 100 character limit in your editor/IDE to avoid white space diffs in the PR - [ ] Tests for the changes have been added (for bug fixes / features) - [ ] Added yourself to AUTHORS.md +- [ ] Updated/added relevant documentation (doc comments with `///`). +- [ ] Added relevant reviewers. diff --git a/AUTHORS.md b/AUTHORS.md index 4c2d018fc..cbcbda3e7 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -22,6 +22,7 @@ - Miroslav Mazel - - artchiee - - Tejas Bir Singh - +- Abhishek Saini - ## Translators diff --git a/README.md b/README.md index dc5e37fb7..0e22ef2db 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,13 @@ height="80">](https://f-droid.org/packages/de.wger.flutter/) Install the [wger server](https://github.com/wger-project/wger), the easiest way is to start the development docker-compose: -Alternatively, you can use one of our test servers, just ask us for access. +Alternatively, you can use the test server (the db is reset every day): + +* URL: `https://wger-master.rge.uber.space` +* username: `user` +* password: `flutteruser` +* API key: `31e2ea0322c07b9df583a9b6d1e794f7139e78d4` + ### 2 diff --git a/fastlane/metadata/android/el-GR/full_description.txt b/fastlane/metadata/android/el-GR/full_description.txt new file mode 100644 index 000000000..23adcc0e3 --- /dev/null +++ b/fastlane/metadata/android/el-GR/full_description.txt @@ -0,0 +1,39 @@ +Από λάτρεις της γυμναστικής σε λάτρεις της γυμναστικής – οργανώστε την υγεία σας με το WGER, τον Προπονητή σας! + +Έχετε ήδη βρει την #1 εφαρμογή γυμναστικής σας και σας αρέσει να δημιουργείτε τις δικές σας αθλητικές ρουτίνες; Ανεξάρτητα από το είδος του σπορ θηρίου που είστε – όλοι έχουμε κάτι κοινό: Μας αρέσει να παρακολουθούμε τα δεδομένα υγείας μας <3 + +Επομένως, δεν σας κρίνουμε επειδή εξακολουθείτε να διαχειρίζεστε το ταξίδι σας στη φυσική κατάσταση με το εύχρηστο μικρό ημερολόγιο προπόνησης, αλλά καλώς ήρθατε στο 2021! + +Έχουμε αναπτύξει μια 100% δωρεάν ψηφιακή εφαρμογή παρακολούθησης υγείας και φυσικής κατάστασης για εσάς, με μέγεθος στις πιο σχετικές λειτουργίες για να διευκολύνει τη ζωή σας. Ξεκινήστε, συνεχίστε την προπόνηση και γιορτάστε την πρόοδό σας! + +Το wger είναι ένα έργο ανοιχτού κώδικα και όλα σχετικά με: +* Το σώμα σας +* Τις προπονήσεις σας +* Τη πρόοδό σας +* Τα δεδομένα σας + +Το σώμα σας: +Δεν χρειάζεται να ψάχνετε στο google τα συστατικά των αγαπημένων σας λιχουδιών – επιλέξτε τα καθημερινά σας γεύματα από περισσότερα από 78000 προϊόντα και δείτε τις θρεπτικές αξίες. Προσθέστε γεύματα στο διατροφικό πρόγραμμα και κρατήστε μια επισκόπηση της διατροφής σας στο ημερολόγιο + +Τις προπονήσεις σας: +Ξέρετε τι είναι καλύτερο για το σώμα σας. Δημιουργήστε τις δικές σας προπονήσεις μέσα από μια αυξανόμενη ποικιλία από 200 διαφορετικές ασκήσεις. Στη συνέχεια, χρησιμοποιήστε τη λειτουργία γυμναστικής για να σας καθοδηγήσει στην προπόνηση ενώ καταγράφετε τα βάρη σας με ένα πάτημα + +Τη πρόοδός σας: +Μην χάνετε ποτέ τους στόχους σας. Παρακολουθήστε το βάρος σας και κρατήστε τα στατιστικά σας. + +Τα δεδομένα σας: +Το wger είναι το εξατομικευμένο ημερολόγιο γυμναστικής σας – αλλά εσείς κατέχετε τα δεδομένα σας. Χρησιμοποιήστε το REST API για να αποκτήσετε πρόσβαση και να κάνετε εκπληκτικά πράγματα με αυτό. + +Σημείωση: Αυτή η δωρεάν εφαρμογή δεν βασίζεται σε πρόσθετους πόρους και δεν σας ζητάμε να δωρίσετε χρήματα. Περισσότερο από αυτό είναι ένα κοινοτικό έργο που αυξάνεται συνεχώς. Ετοιμαστείτε λοιπόν για νέα χαρακτηριστικά ανά πάσα στιγμή! + +#ΑνοιχτόςΚώδικας – τι σημαίνει αυτό; + +Ανοιχτός κώδικας σημαίνει ότι ολόκληρος ο πηγαίος κώδικας για αυτήν την εφαρμογή και τον διακομιστή στον οποίο συνομιλεί είναι δωρεάν και διαθέσιμος σε οποιονδήποτε: +* Θέλετε να εκτελέσετε το wger στον δικό σας διακομιστή για εσάς ή το τοπικό σας γυμναστήριο; Προχώρα! +* Σας λείπει ένα χαρακτηριστικό και θέλετε να το εφαρμόσετε; Ξεκίνα τώρα! +* Θέλετε να ελέγξετε ότι δεν αποστέλλεται τίποτα πουθενά; Μπορείς! + +Γίνετε μέλος της κοινότητάς μας και γίνετε μέρος των λάτρεις του αθλητισμού και των geeks της πληροφορικής από όλο τον κόσμο. Συνεχίζουμε να εργαζόμαστε για την προσαρμογή και τη βελτιστοποίηση της εφαρμογής προσαρμοσμένης στις ανάγκες μας. Μας αρέσει η συμβολή σας, γι' αυτό μη διστάσετε να μπείτε ανά πάσα στιγμή και να συνεισφέρετε τις επιθυμίες και τις ιδέες σας! + +-> βρείτε τον πηγαίο κώδικα στο https://github.com/wger-project +-> κάντε τις ερωτήσεις σας ή απλώς πείτε ένα γεια στον διακομιστή discord μας https://discord.gg/rPWFv6W diff --git a/fastlane/metadata/android/el-GR/short_description.txt b/fastlane/metadata/android/el-GR/short_description.txt new file mode 100644 index 000000000..ba2a2768b --- /dev/null +++ b/fastlane/metadata/android/el-GR/short_description.txt @@ -0,0 +1 @@ +Καταγραφή φυσικής κατάστασης/προπόνησης, διατροφής και βάρους diff --git a/fastlane/metadata/android/hr/full_description.txt b/fastlane/metadata/android/hr/full_description.txt index 2fe31212a..e6b7b8e45 100644 --- a/fastlane/metadata/android/hr/full_description.txt +++ b/fastlane/metadata/android/hr/full_description.txt @@ -1,4 +1,4 @@ -Od ljubitelja fitnessa za ljubitelja fitnessa – organiziraj svoje zdravlje s WGER, tvojim upravljaöem treninga! +Od ljubitelja fitnessa za ljubitelje fitnessa – organiziraj svoje zdravlje s WGER, tvojim upravljačem treninga! Već si pronašao/la omiljeni program za fitness i voliš stvarati vlastite sportske rutine? Bez obzira na vrstu sportske zvijeri – svi imamo nešto zajedničko: Volimo pratiti naše zdravstvene podatke <3 @@ -22,7 +22,7 @@ Tvoj napredak: Nikada ne gubi iz vida svoje ciljeve. Prati svoju težinu i vodi statistiku. Tvoji podaci: -wger je tvoj personalizirani dnevnik fitnessa – ali ti posjeduješ svoje podatke. Koristi REST API za pristup i obavi s njim nevjerojatnih stvari. +wger je tvoj personalizirani dnevnik fitnessa – ali ti posjeduješ svoje podatke. Koristi REST API za pristup i obavi s njim nevjerojatne stvari. Napomena: Ovaj besplatni program ne temelji se na dodatnim sredstvima i ne tražimo da doniraš novac. Više od toga, ovo je projekt zajednice koji stalno raste. Stoga budi spreman/na za nove funkcije u bilo kojem trenutku! diff --git a/lib/helpers/i18n.dart b/lib/helpers/i18n.dart index fc19f5e94..21fc03f2e 100644 --- a/lib/helpers/i18n.dart +++ b/lib/helpers/i18n.dart @@ -70,6 +70,9 @@ String getTranslation(String value, BuildContext context) { case 'Legs': return AppLocalizations.of(context).legs; + case 'Lower back': + return AppLocalizations.of(context).lower_back; + case 'Max Reps': return AppLocalizations.of(context).max_reps; diff --git a/lib/l10n/app_cs.arb b/lib/l10n/app_cs.arb index 17f186a33..8bc66347f 100644 --- a/lib/l10n/app_cs.arb +++ b/lib/l10n/app_cs.arb @@ -553,5 +553,68 @@ "description": "Header label for dialog when product is found with barcode" }, "appUpdateContent": "Tato verze aplikace není kompatibilní se serverem, aktualizujte prosím svou aplikaci.", - "@appUpdateContent": {} + "@appUpdateContent": {}, + "add_exercise_image_license": "Obrázky musí být licencovány pod CC BY SA licencí. Pokud si nejste jisti, nahrávejte pouze fotky které jste sami pořídili", + "@add_exercise_image_license": {}, + "verify": "Ověřit", + "@verify": {}, + "alternativeNames": "Alternativní jména", + "@alternativeNames": {}, + "oneNamePerLine": "Jedno jméno na jeden řádek", + "@oneNamePerLine": {}, + "whatVariationsExist": "Existují nějaké varianty tohoto cviku?", + "@whatVariationsExist": {}, + "previous": "Předešlé", + "@previous": {}, + "next": "Další", + "@next": {}, + "addExercise": "Přidat cvik", + "@addExercise": {}, + "translation": "Překlad", + "@translation": {}, + "baseData": "Základy v angličtině", + "@baseData": { + "description": "The base data for an exercise such as category, trained muscles, etc." + }, + "productFoundDescription": "Čárový kód náleží tomuto produktu: {productName}. Chcete pokračovat?", + "@productFoundDescription": { + "description": "Dialog info when product is found with barcode", + "type": "text", + "placeholders": { + "productName": {} + } + }, + "scanBarcode": "Naskenovat čárový kód", + "@scanBarcode": { + "description": "Label for scan barcode button" + }, + "productNotFound": "Produkt nenalezen", + "@productNotFound": { + "description": "Header label for dialog when product is not found with barcode" + }, + "images": "Obrázky", + "@images": {}, + "language": "Jazyk", + "@language": {}, + "aboutPageTitle": "O Wger", + "@aboutPageTitle": {}, + "contributeExercise": "Přispějte cvik", + "@contributeExercise": {}, + "setUnitsAndRir": "Upravte jednotky a OvR", + "@setUnitsAndRir": { + "description": "Label shown on the slider where the user can toggle showing units and RiR", + "type": "text" + }, + "close": "Zavřít", + "@close": { + "description": "Translation for close" + }, + "productNotFoundDescription": "Produkt s naskenovaným čárovým kódem {barcode} nebyl nalezen v databázi wger", + "@productNotFoundDescription": { + "description": "Dialog info when product is not found with barcode", + "type": "text", + "placeholders": { + "barcode": {} + } + } } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 43b35d5be..6dc0eb90c 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -730,5 +730,23 @@ "swiss_ball": "Gymnastikball", "@swiss_ball": {}, "none__bodyweight_exercise_": "keine (Körpergewichtsübung)", - "@none__bodyweight_exercise_": {} + "@none__bodyweight_exercise_": {}, + "body_weight": "Körpergewicht", + "@body_weight": { + "description": "Generated entry for translation for server strings" + }, + "kg": "kg", + "@kg": { + "description": "Generated entry for translation for server strings" + }, + "kilometers_per_hour": "Kilometer pro Stunde", + "@kilometers_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "miles_per_hour": "Meilen pro Stunde", + "@miles_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "verify": "Verifizieren", + "@verify": {} } diff --git a/lib/l10n/app_el.arb b/lib/l10n/app_el.arb new file mode 100644 index 000000000..afbf83238 --- /dev/null +++ b/lib/l10n/app_el.arb @@ -0,0 +1,158 @@ +{ + "useDefaultServer": "Χρήση προεπιλεγμένου διακομιστή", + "@useDefaultServer": { + "description": "Toggle button allowing users to switch between the default and a custom wger server" + }, + "labelBottomNavWorkout": "Προπόνηση", + "@labelBottomNavWorkout": { + "description": "Label used in bottom navigation, use a short word" + }, + "reset": "Επαναφορά", + "@reset": { + "description": "Button text allowing the user to reset the entered values to the default" + }, + "kg": "kg", + "@kg": { + "description": "Generated entry for translation for server strings" + }, + "password": "Κωδικός", + "@password": {}, + "nutritionalPlan": "Διατροφικό σχέδιο", + "@nutritionalPlan": {}, + "invalidUsername": "Παρακαλώ εισάγετε ένα έγκυρο όνομα χρήστη", + "@invalidUsername": { + "description": "Error message when the user enters an invalid username" + }, + "next": "Επόμενο", + "@next": {}, + "date": "Ημερομηνία", + "@date": { + "description": "The date of a workout log or body weight entry" + }, + "loginInstead": "Έχετε ήδη λογαριασμό; Σύνδεση", + "@loginInstead": {}, + "passwordTooShort": "Ο κωδικός πρόσβασης είναι πολύ σύντομος", + "@passwordTooShort": { + "description": "Error message when the user a password that is too short" + }, + "email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου", + "@email": {}, + "edit": "Επεξεργασία", + "@edit": {}, + "username": "Όνομα χρήστη", + "@username": {}, + "value": "Αξία", + "@value": { + "description": "The value of a measurement entry" + }, + "customServerHint": "Εισάγετε τη διεύθυνση του δικού σας διακομιστή, διαφορετικά θα χρησιμοποιηθεί η προεπιλεγμένη", + "@customServerHint": { + "description": "Hint text for the form where the users can enter their own wger instance" + }, + "useCustomServer": "Χρήση προσαρμοσμένου διακομιστή", + "@useCustomServer": { + "description": "Toggle button allowing users to switch between the default and a custom wger server" + }, + "delete": "Διαγραφή", + "@delete": {}, + "notes": "Σημειώσεις", + "@notes": { + "description": "Personal notes, e.g. for a workout session" + }, + "difference": "Διαφορά", + "@difference": {}, + "register": "Εγγραφή", + "@register": { + "description": "Text for registration button" + }, + "registerInstead": "Δεν έχετε λογαριασμό; Εγγραφείτε τώρα", + "@registerInstead": {}, + "usernameValidChars": "Ένα όνομα χρήστη μπορεί να περιέχει μόνο γράμματα, ψηφία και τους χαρακτήρες @, +, ., - και _", + "@usernameValidChars": { + "description": "Error message when the user tries to register a username with forbidden characters" + }, + "labelWorkoutPlans": "Προγράμματα προπόνησης", + "@labelWorkoutPlans": { + "description": "Title for screen workout plans" + }, + "previous": "Προηγούμενο", + "@previous": {}, + "userProfile": "Το προφίλ σας", + "@userProfile": {}, + "lb": "lb", + "@lb": { + "description": "Generated entry for translation for server strings" + }, + "labelWorkoutLogs": "Ημερολόγια προπόνησης", + "@labelWorkoutLogs": { + "description": "(Workout) logs" + }, + "kJ": "kJ", + "@kJ": { + "description": "Energy in a meal in kilo joules, kJ" + }, + "labelBottomNavNutrition": "Διατροφή", + "@labelBottomNavNutrition": { + "description": "Label used in bottom navigation, use a short word" + }, + "invalidUrl": "Παρακαλώ εισάγετε ένα έγκυρο URL", + "@invalidUrl": { + "description": "Error message when the user enters an invalid URL, e.g. in the login form" + }, + "kcal": "kcal", + "@kcal": { + "description": "Energy in a meal in kilocalories, kcal" + }, + "g": "γρ", + "@g": { + "description": "Abbreviation for gram" + }, + "logout": "Αποσύνδεση", + "@logout": { + "description": "Text for logout button" + }, + "customServerUrl": "URL της περίπτωσης wger", + "@customServerUrl": { + "description": "Label in the form where the users can enter their own wger instance" + }, + "login": "Συνδεθείτε", + "@login": { + "description": "Text for login button" + }, + "unit": "Μονάδα", + "@unit": { + "description": "The unit used for a repetition (kg, time, etc.)" + }, + "passwordsDontMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν", + "@passwordsDontMatch": { + "description": "Error message when the user enters two different passwords during registration" + }, + "weight": "Βάρος", + "@weight": { + "description": "The weight of a workout log or body weight entry" + }, + "invalidEmail": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου", + "@invalidEmail": { + "description": "Error message when the user enters an invalid email" + }, + "confirmPassword": "Επιβεβαίωση κωδικού πρόσβασης", + "@confirmPassword": {}, + "images": "Εικόνες", + "@images": {}, + "save": "Αποθήκευση", + "@save": {}, + "description": "Περιγραφή", + "@description": {}, + "name": "Όνομα", + "@name": { + "description": "Name for a workout or nutritional plan" + }, + "translation": "Μετάφραση", + "@translation": {}, + "language": "Γλώσσα", + "@language": {}, + "category": "Κατηγορία", + "@category": { + "description": "Category for an exercise, ingredient, etc." + } +} diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index a5cc6fbf5..7c2e595ca 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -719,6 +719,10 @@ "@legs": { "description": "Generated entry for translation for server strings" }, + "lower_back": "Lower back", + "@lower_back": { + "description": "Generated entry for translation for server strings" + }, "max_reps": "Max Reps", "@max_reps": { "description": "Generated entry for translation for server strings" diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 18e53eade..b957f8db6 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -755,5 +755,11 @@ "description": "Generated entry for translation for server strings" }, "searchNamesInEnglish": "Chercher également en termes anglais", - "@searchNamesInEnglish": {} + "@searchNamesInEnglish": {}, + "max_reps": "Maximum de répétitions", + "@max_reps": { + "description": "Generated entry for translation for server strings" + }, + "verify": "Vérifier", + "@verify": {} } diff --git a/lib/l10n/app_hr.arb b/lib/l10n/app_hr.arb index e46493078..29975a6ed 100644 --- a/lib/l10n/app_hr.arb +++ b/lib/l10n/app_hr.arb @@ -91,7 +91,7 @@ "@exercise": { "description": "An exercise for a workout" }, - "logHelpEntriesUnits": "Imaj na umu da su ovdje ucrtani samo unosi s jedinicom težine (kg ili lb) i ponavljanjima, druge kombinacije kao što su vrijeme ili do neuspjeha se ovdje zanemaruju.", + "logHelpEntriesUnits": "Napomena: prikazuju se samo unosi s jedinicom težine (kg ili lb) i ponavljanja, druge kombinacije kao što su vrijeme ili do neuspjeha se ovdje zanemaruju.", "@logHelpEntriesUnits": {}, "description": "Opis", "@description": {}, @@ -807,5 +807,9 @@ "description": "Generated entry for translation for server strings" }, "verify": "Potvrdi", - "@verify": {} + "@verify": {}, + "lower_back": "Donji dio leđa", + "@lower_back": { + "description": "Generated entry for translation for server strings" + } } diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb index 986dfb29c..838b0fd13 100644 --- a/lib/l10n/app_pt_BR.arb +++ b/lib/l10n/app_pt_BR.arb @@ -40,5 +40,447 @@ "register": "Inscrever-se", "@register": { "description": "Text for registration button" - } + }, + "useDefaultServer": "Usar servidor padrão", + "@useDefaultServer": { + "description": "Toggle button allowing users to switch between the default and a custom wger server" + }, + "reset": "Redefinir", + "@reset": { + "description": "Button text allowing the user to reset the entered values to the default" + }, + "password": "Senha", + "@password": {}, + "invalidUsername": "Por favor insira um nome de usuário válido", + "@invalidUsername": { + "description": "Error message when the user enters an invalid username" + }, + "passwordTooShort": "A senha é muito curta", + "@passwordTooShort": { + "description": "Error message when the user a password that is too short" + }, + "email": "Endereço de email", + "@email": {}, + "username": "Usuário", + "@username": {}, + "customServerHint": "Digite o endereço do seu próprio servidor, caso contrário o padrão será usado", + "@customServerHint": { + "description": "Hint text for the form where the users can enter their own wger instance" + }, + "useCustomServer": "Usar servidor customizado", + "@useCustomServer": { + "description": "Toggle button allowing users to switch between the default and a custom wger server" + }, + "registerInstead": "Não tem uma conta? Registrar agora", + "@registerInstead": {}, + "usernameValidChars": "Um usuário deve apenas conter letras, digitos e os caracteres @, +, ., -, ou _", + "@usernameValidChars": { + "description": "Error message when the user tries to register a username with forbidden characters" + }, + "invalidUrl": "Por favor, digite uma URL válida", + "@invalidUrl": { + "description": "Error message when the user enters an invalid URL, e.g. in the login form" + }, + "customServerUrl": "URL da instância wger", + "@customServerUrl": { + "description": "Label in the form where the users can enter their own wger instance" + }, + "passwordsDontMatch": "As senhas não coincidem", + "@passwordsDontMatch": { + "description": "Error message when the user enters two different passwords during registration" + }, + "invalidEmail": "Por favor insira um endereço de e-mail válido", + "@invalidEmail": { + "description": "Error message when the user enters an invalid email" + }, + "confirmPassword": "Confirme sua senha", + "@confirmPassword": {}, + "comment": "Comente", + "@comment": { + "description": "Comment, additional information" + }, + "logIngredient": "Salvar no diário nutricional", + "@logIngredient": {}, + "equipment": "Equipamento", + "@equipment": { + "description": "Equipment needed to perform an exercise" + }, + "saturatedFat": "Gordura saturada", + "@saturatedFat": {}, + "mealLogged": "Refeição registrada no diário", + "@mealLogged": {}, + "images": "Imagens", + "@images": {}, + "close": "Fechar", + "@close": { + "description": "Translation for close" + }, + "successfullyDeleted": "Excluído", + "@successfullyDeleted": { + "description": "Message when an item was successfully deleted" + }, + "save": "Salvar", + "@save": {}, + "goToToday": "Vá para hoje", + "@goToToday": { + "description": "Label on button to jump back to 'today' in the calendar widget" + }, + "enterRepetitionsOrWeight": "Por favor preencha as repetições ou o peso para pelo menos uma das séries", + "@enterRepetitionsOrWeight": { + "description": "Error message when the user hasn't filled in the forms for exercise sets" + }, + "set": "Definir", + "@set": { + "description": "A set in a workout plan" + }, + "noMeasurementEntries": "Você não tem entradas de medição", + "@noMeasurementEntries": {}, + "newSet": "Novo conjunto", + "@newSet": { + "description": "Header when adding a new set to a workout day" + }, + "impression": "Impressão", + "@impression": { + "description": "General impression (e.g. for a workout session) such as good, bad, etc." + }, + "plateCalculator": "Pratos", + "@plateCalculator": { + "description": "Label used for the plate calculator in the gym mode" + }, + "newNutritionalPlan": "Novo plano nutricional", + "@newNutritionalPlan": {}, + "setNr": "Definir {nr}", + "@setNr": { + "description": "Header in form indicating the number of the current set. Can also be translated as something like 'Set Nr. xy'.", + "type": "text", + "placeholders": { + "nr": {} + } + }, + "fat": "Gordura", + "@fat": {}, + "timeStartAhead": "O horário de início não pode ser anterior ao horário de término", + "@timeStartAhead": {}, + "carbohydrates": "Carboidratos", + "@carbohydrates": {}, + "noWorkoutPlans": "Você não tem planos de treino", + "@noWorkoutPlans": { + "description": "Message shown when the user has no workout plans" + }, + "aboutTranslationTitle": "Tradução", + "@aboutTranslationTitle": { + "description": "Title for translation section in the about dialog" + }, + "muscles": "Músculos", + "@muscles": { + "description": "(main) muscles trained by an exercise" + }, + "total": "Total", + "@total": { + "description": "Label used for total sums of e.g. calories or similar" + }, + "dayDescriptionHelp": "Uma descrição do que é feito neste dia (por exemplo, 'dia de puxar') ou quais partes do corpo são treinadas (por exemplo, 'peito e ombros')", + "@dayDescriptionHelp": {}, + "gymMode": "Modo Gym", + "@gymMode": { + "description": "Label when starting the gym mode" + }, + "logged": "Desconectar", + "@logged": { + "description": "Header for the column of 'logged' nutritional values, i.e. what was eaten" + }, + "amount": "Quantia", + "@amount": { + "description": "The amount (e.g. in grams) of an ingredient in a meal" + }, + "loginInstead": "Já tem uma conta ? Entre", + "@loginInstead": {}, + "pause": "Pausar", + "@pause": { + "description": "Noun, not an imperative! Label used for the pause when using the gym mode" + }, + "success": "Sucesso", + "@success": { + "description": "Message when an action completed successfully, usually used as a heading" + }, + "repetitionUnit": "Unidade de repetição", + "@repetitionUnit": {}, + "weightUnit": "Unidade de peso", + "@weightUnit": {}, + "searchIngredient": "Pesquisar Ingrediente", + "@searchIngredient": { + "description": "Label on ingredient search form" + }, + "aboutBugsText": "Entre em contato se algo não se comportou conforme o esperado ou se houver algum recurso que você acha que está faltando.", + "@aboutBugsText": { + "description": "Text for bugs section in the about dialog" + }, + "anErrorOccurred": "Ocorreu um erro!", + "@anErrorOccurred": {}, + "aboutContactUsTitle": "Diga oi!", + "@aboutContactUsTitle": { + "description": "Title for contact us section in the about dialog" + }, + "enterValue": "por favor insira um valor", + "@enterValue": { + "description": "Error message when the user hasn't entered a value on a required field" + }, + "logMeal": "Registrar esta refeição", + "@logMeal": {}, + "newEntry": "Nova entrada", + "@newEntry": { + "description": "Title when adding a new entry such as a weight or log entry" + }, + "addSet": "Adicionar set", + "@addSet": { + "description": "Label for the button that adds a set (to a workout day)" + }, + "newWorkout": "Novo plano de treino", + "@newWorkout": { + "description": "Header when adding a new workout" + }, + "energyShort": "E", + "@energyShort": { + "description": "The first letter or short name of the word 'Energy', used in overviews" + }, + "name": "Nome", + "@name": { + "description": "Name for a workout or nutritional plan" + }, + "percentEnergy": "Porcentagem de energia", + "@percentEnergy": {}, + "searchNamesInEnglish": "Pesquise também por nomes em inglês", + "@searchNamesInEnglish": {}, + "exercise": "Exercício", + "@exercise": { + "description": "An exercise for a workout" + }, + "addIngredient": "Adicionar ingrediente", + "@addIngredient": {}, + "fatShort": "G", + "@fatShort": { + "description": "The first letter or short name of the word 'Fat', used in overviews" + }, + "start": "Começar", + "@start": { + "description": "Label on button to start the gym mode (i.e., an imperative)" + }, + "jumpTo": "Pule para", + "@jumpTo": { + "description": "Imperative. Label used in popup allowing the user to jump to a specific exercise while in the gym mode" + }, + "difference": "Diferença", + "@difference": {}, + "fibres": "Fibra", + "@fibres": {}, + "aboutDescription": "Obrigado por usar o Wger! Wger é um projeto colaborativo de código aberto, feito por entusiastas do fitness de todo o mundo.", + "@aboutDescription": { + "description": "Text in the about dialog" + }, + "timeStart": "Hora de início", + "@timeStart": { + "description": "The starting time of a workout" + }, + "searchExercise": "Exercício de pesquisa para adicionar", + "@searchExercise": { + "description": "Label on set form. Selected exercises are added to the set" + }, + "moreMeasurementEntries": "Adicionar nova medição", + "@moreMeasurementEntries": { + "description": "Message shown when the user wants to add new measurement" + }, + "loadingText": "Carregando...", + "@loadingText": { + "description": "Text to show when entries are being loaded in the background: Loading..." + }, + "selectExercises": "Se quiser fazer um superset você pode procurar vários exercícios, eles estarão agrupados", + "@selectExercises": {}, + "nutritionalDiary": "Diário nutricional", + "@nutritionalDiary": {}, + "protein": "Proteína", + "@protein": {}, + "labelWorkoutPlans": "Planos de treino", + "@labelWorkoutPlans": { + "description": "Title for screen workout plans" + }, + "proteinShort": "P", + "@proteinShort": { + "description": "The first letter or short name of the word 'Protein', used in overviews" + }, + "noWeightEntries": "Você não tem entradas de peso", + "@noWeightEntries": { + "description": "Message shown when the user has no logged weight entries" + }, + "noNutritionalPlans": "Você não tem planos nutricionais", + "@noNutritionalPlans": { + "description": "Message shown when the user has no nutritional plans" + }, + "goToDetailPage": "Ir para a página de detalhes", + "@goToDetailPage": {}, + "labelWorkoutLogs": "Registros de treinos", + "@labelWorkoutLogs": { + "description": "(Workout) logs" + }, + "aboutTranslationText": "Este aplicativo está traduzido no weblate. Se você também quiser ajudar, clique no link e comece a traduzir", + "@aboutTranslationText": { + "description": "Text for translation section in the about dialog" + }, + "ingredient": "Ingrediente", + "@ingredient": {}, + "measurementCategoriesHelpText": "Categoria de medição, como 'bíceps' ou 'gordura corporal'", + "@measurementCategoriesHelpText": {}, + "rirNotUsed": "RiR não usado", + "@rirNotUsed": { + "description": "Label used in RiR slider when the RiR value is not used/saved for the current setting or log" + }, + "todaysWorkout": "Seu treino hoje", + "@todaysWorkout": {}, + "aboutSourceText": "Obtenha o código fonte deste aplicativo e seu servidor no github", + "@aboutSourceText": { + "description": "Text for source code section in the about dialog" + }, + "kJ": "kJ", + "@kJ": { + "description": "Energy in a meal in kilo joules, kJ" + }, + "sodium": "Sódio", + "@sodium": {}, + "translation": "Tradução", + "@translation": {}, + "successfullySaved": "Salvo", + "@successfullySaved": { + "description": "Message when an item was successfully saved" + }, + "exerciseList": "Lista de exercícios", + "@exerciseList": {}, + "energy": "Energia", + "@energy": { + "description": "Energy in a meal, ingredient etc. e.g. in kJ" + }, + "newDay": "Novo dia", + "@newDay": {}, + "toggleDetails": "Alterar detalhes", + "@toggleDetails": { + "description": "Switch to toggle detail / overview" + }, + "musclesSecondary": "Músculos secundários", + "@musclesSecondary": { + "description": "secondary muscles trained by an exercise" + }, + "aboutContactUsText": "Se você quiser bater um papo conosco, entre no servidor Discord e entre em contato", + "@aboutContactUsText": { + "description": "Text for contact us section in the about dialog" + }, + "labelDashboard": "Painel", + "@labelDashboard": { + "description": "Title for screen dashboard" + }, + "timeEnd": "Fim do tempo", + "@timeEnd": { + "description": "The end time of a workout" + }, + "planned": "Planejado", + "@planned": { + "description": "Header for the column of 'planned' nutritional values, i.e. what should be eaten" + }, + "logHelpEntries": "Se em um mesmo dia houver mais de uma inscrição com o mesmo número de repetições, mas pesos diferentes, apenas a inscrição com maior peso será mostrada no diagrama.", + "@logHelpEntries": {}, + "exerciseName": "Nome do exercício", + "@exerciseName": { + "description": "Label for the name of a workout exercise" + }, + "labelBottomNavNutrition": "Nutrição", + "@labelBottomNavNutrition": { + "description": "Label used in bottom navigation, use a short word" + }, + "language": "Linguagem", + "@language": {}, + "nutritionalPlans": "Planos nutricionais", + "@nutritionalPlans": {}, + "kcal": "kcal", + "@kcal": { + "description": "Energy in a meal in kilocalories, kcal" + }, + "g": "g", + "@g": { + "description": "Abbreviation for gram" + }, + "addMeal": "Adicionar refeição", + "@addMeal": {}, + "sameRepetitions": "Se você fizer as mesmas repetições e peso para todas as séries, poderá preencher apenas uma linha. Por exemplo, para 4 séries basta inserir 10 para as repetições, isso automaticamente se torna \"4 x 10\".", + "@sameRepetitions": {}, + "measurementEntriesHelpText": "A unidade usada para medir a categoria, como 'cm' ou '%'", + "@measurementEntriesHelpText": {}, + "supersetWith": "superset com", + "@supersetWith": { + "description": "Text used between exercise cards when adding a new set. Translate as something like 'in a superset with'" + }, + "sugars": "Açúcar", + "@sugars": {}, + "aboutBugsTitle": "Tem um problema ou ideia?", + "@aboutBugsTitle": { + "description": "Title for bugs section in the about dialog" + }, + "carbohydratesShort": "C", + "@carbohydratesShort": { + "description": "The first letter or short name of the word 'Carbohydrates', used in overviews" + }, + "measurements": "Medidas", + "@measurements": { + "description": "Categories for the measurements such as biceps size, body fat, etc." + }, + "macronutrients": "Macronutrientes", + "@macronutrients": {}, + "plateCalculatorNotDivisible": "Não é possível atingir o peso com os pratos disponíveis", + "@plateCalculatorNotDivisible": { + "description": "Error message when the current weight is not reachable with plates (e.g. 33.1 kg)" + }, + "confirmDelete": "Tem certeza de que deseja excluir '{toDelete}'?", + "@confirmDelete": { + "description": "Confirmation text before the user deletes an object", + "type": "text", + "placeholders": { + "toDelete": {} + } + }, + "gPerBodyKg": "g por kg corporal", + "@gPerBodyKg": { + "description": "Label used for total sums of e.g. calories or similar in grams per Kg of body weight" + }, + "weekAverage": "Média de 7 dias", + "@weekAverage": { + "description": "Header for the column of '7 day average' nutritional values, i.e. what was logged last week" + }, + "labelWorkoutPlan": "Plano de treino", + "@labelWorkoutPlan": { + "description": "Title for screen workout plan" + }, + "category": "Categoria", + "@category": { + "description": "Category for an exercise, ingredient, etc." + }, + "exercises": "Exercícios", + "@exercises": { + "description": "Multiple exercises for a workout" + }, + "time": "Tempo", + "@time": { + "description": "The time of a meal or workout" + }, + "calendar": "Calendário", + "@calendar": {}, + "verify": "Verificar", + "@verify": {}, + "workoutSession": "Sessão de treino", + "@workoutSession": { + "description": "A (logged) workout session" + }, + "logHelpEntriesUnits": "Observe que apenas as entradas com uma unidade de peso (kg ou lb) e repetições são registradas; outras combinações, como tempo ou até a falha, são ignoradas aqui.", + "@logHelpEntriesUnits": {}, + "aboutSourceTitle": "Código fonte", + "@aboutSourceTitle": { + "description": "Title for source code section in the about dialog" + }, + "measurement": "Medição", + "@measurement": {} } diff --git a/lib/providers/workout_plans.dart b/lib/providers/workout_plans.dart index 47dcea351..664468850 100644 --- a/lib/providers/workout_plans.dart +++ b/lib/providers/workout_plans.dart @@ -349,7 +349,6 @@ class WorkoutPlansProvider with ChangeNotifier { 'weightUnit': _weightUnits.map((e) => e.toJson()).toList(), }; prefs.setString('workoutUnits', json.encode(exerciseData)); - log(json.encode(exerciseData)); notifyListeners(); } diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index fa46ecee3..3de627737 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -13,7 +13,7 @@ import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) - FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) + FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) RivePlugin.register(with: registry.registrar(forPlugin: "RivePlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) diff --git a/pubspec.lock b/pubspec.lock index c8ad57ecc..bb6195bfe 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -495,10 +495,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4" + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" flutter_localizations: dependency: "direct main" description: flutter @@ -537,10 +537,10 @@ packages: dependency: "direct main" description: name: flutter_typeahead - sha256: a3539f7a90246b152f569029dedcf0b842532d3f2a440701b520e0bf2acbcf42 + sha256: b9942bd5b7611a6ec3f0730c477146cffa4cd4b051077983ba67ddfc9e7ee818 url: "https://pub.dev" source: hosted - version: "4.6.2" + version: "4.8.0" flutter_web_plugins: dependency: transitive description: flutter @@ -880,10 +880,10 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: ceb027f6bc6a60674a233b4a90a7658af1aebdea833da0b5b53c1e9821a78c7b + sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.2.0" package_info_plus_platform_interface: dependency: transitive description: @@ -1064,10 +1064,10 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "0344316c947ffeb3a529eac929e1978fcd37c26be4e8468628bac399365a3ca1" + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.2" shared_preferences_android: dependency: transitive description: @@ -1373,10 +1373,10 @@ packages: dependency: "direct main" description: name: video_player - sha256: "3fd106c74da32f336dc7feb65021da9b0207cb3124392935f1552834f7cce822" + sha256: "74b86e63529cf5885130c639d74cd2f9232e7c8a66cbecbddd1dcb9dbd060d1e" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.7.2" video_player_android: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 6cc0c4e37..273a07a1a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,21 +39,21 @@ dependencies: equatable: ^2.0.5 flutter_calendar_carousel: ^2.4.1 flutter_html: ^3.0.0-beta.2 - flutter_typeahead: ^4.6.2 + flutter_typeahead: ^4.8.0 font_awesome_flutter: ^10.4.0 http: ^0.13.5 image_picker: ^0.8.9 intl: ^0.17.0 json_annotation: ^4.8.1 version: ^3.0.2 - package_info_plus: ^4.0.2 + package_info_plus: ^4.2.0 provider: ^6.0.5 rive: ^0.11.4 - shared_preferences: ^2.2.0 + shared_preferences: ^2.2.2 table_calendar: ^3.0.8 url_launcher: ^6.1.11 flutter_barcode_scanner: ^2.0.0 - video_player: ^2.7.0 + video_player: ^2.7.2 flutter_staggered_grid_view: ^0.7.0 carousel_slider: ^4.2.1 multi_select_flutter: ^4.1.3 @@ -71,7 +71,7 @@ dev_dependencies: json_serializable: ^6.6.2 mockito: ^5.4.0 network_image_mock: ^2.1.1 - flutter_lints: ^2.0.2 + flutter_lints: ^2.0.3 cider: ^0.1.6 flutter_icons: