From 74634b2ece943afb3a7ca198b04cf59caece27f0 Mon Sep 17 00:00:00 2001 From: jameskokoska <50821962+jameskokoska@users.noreply.github.com> Date: Tue, 9 Jan 2024 21:08:07 -0500 Subject: [PATCH] Savings budgets Fixed title searching with category name when adding a transaction (title has priority) Fixed wallet details page swipe to dismiss header Installment payment setup button follows objective colorscheme Hex color picker fixes Removed ability to long press and set custom period for loan totals on all spending page that always show all time Removed bill splitter deleting item on edit page Fixed CSV import error always opening --- budget/assets/translations/generated/ar.json | 20 +- budget/assets/translations/generated/bg.json | 20 +- budget/assets/translations/generated/bn.json | 20 +- budget/assets/translations/generated/cs.json | 22 +- budget/assets/translations/generated/da.json | 20 +- budget/assets/translations/generated/de.json | 26 +- budget/assets/translations/generated/el.json | 20 +- budget/assets/translations/generated/en.json | 20 +- budget/assets/translations/generated/es.json | 20 +- budget/assets/translations/generated/fa.json | 20 +- budget/assets/translations/generated/fi.json | 20 +- budget/assets/translations/generated/fil.json | 20 +- budget/assets/translations/generated/fr.json | 20 +- budget/assets/translations/generated/gu.json | 20 +- budget/assets/translations/generated/he.json | 20 +- budget/assets/translations/generated/hi.json | 20 +- budget/assets/translations/generated/hu.json | 20 +- budget/assets/translations/generated/id.json | 20 +- budget/assets/translations/generated/it.json | 20 +- budget/assets/translations/generated/ja.json | 20 +- budget/assets/translations/generated/ko.json | 20 +- budget/assets/translations/generated/ml.json | 20 +- budget/assets/translations/generated/mr.json | 20 +- budget/assets/translations/generated/ms.json | 20 +- budget/assets/translations/generated/nl.json | 20 +- budget/assets/translations/generated/no.json | 20 +- budget/assets/translations/generated/pl.json | 20 +- budget/assets/translations/generated/pt.json | 20 +- budget/assets/translations/generated/ro.json | 20 +- budget/assets/translations/generated/ru.json | 20 +- budget/assets/translations/generated/sr.json | 20 +- budget/assets/translations/generated/sv.json | 20 +- budget/assets/translations/generated/sw.json | 20 +- budget/assets/translations/generated/ta.json | 20 +- budget/assets/translations/generated/te.json | 20 +- budget/assets/translations/generated/th.json | 20 +- budget/assets/translations/generated/tr.json | 20 +- budget/assets/translations/generated/uk.json | 22 +- budget/assets/translations/generated/ur.json | 20 +- budget/assets/translations/generated/vi.json | 20 +- .../translations/generated/zh-Hant.json | 20 +- budget/assets/translations/generated/zh.json | 20 +- budget/assets/translations/translations.csv | 30 ++- budget/lib/database/tables.dart | 58 +++-- budget/lib/pages/addBudgetPage.dart | 220 ++++++++++++---- budget/lib/pages/addTransactionPage.dart | 236 +++++------------- budget/lib/pages/billSplitter.dart | 23 -- budget/lib/pages/budgetPage.dart | 96 +++++-- budget/lib/pages/editBudgetLimitsPage.dart | 9 +- budget/lib/pages/objectivePage.dart | 25 +- budget/lib/pages/pastBudgetsPage.dart | 49 ++-- budget/lib/pages/walletDetailsPage.dart | 161 ++++++------ budget/lib/struct/spendingSummaryHelper.dart | 9 +- budget/lib/widgets/budgetContainer.dart | 41 +-- budget/lib/widgets/categoryEntry.dart | 20 +- budget/lib/widgets/categoryLimits.dart | 6 +- budget/lib/widgets/extraInfoBoxes.dart | 17 +- budget/lib/widgets/importCSV.dart | 2 +- budget/lib/widgets/selectColor.dart | 7 +- budget/lib/widgets/showChangelog.dart | 8 + budget/pubspec.yaml | 2 +- 61 files changed, 1370 insertions(+), 499 deletions(-) diff --git a/budget/assets/translations/generated/ar.json b/budget/assets/translations/generated/ar.json index 847da230..5feac4cf 100644 --- a/budget/assets/translations/generated/ar.json +++ b/budget/assets/translations/generated/ar.json @@ -1011,5 +1011,23 @@ "credit-payment": "دفعة ائتمانية", "add-payment": "أضف الدفع", "next-payment": "الدفعة التالية", - "next-payment-due": "الدفع التالي مستحق" + "next-payment-due": "الدفع التالي مستحق", + "no-categories": "لا فئات", + "saved-amount-of": "أنقذ", + "over-saved-amount-of": "أكثر من حفظ", + "of-saving": "من الادخار", + "set-saving-goals": "حدد أهداف توفير الفئة", + "edit-saving-goals": "تحرير الأهداف الادخار", + "saving-goals": "الأهداف الادخار", + "saving-limit-type": "توفير نوع الحد", + "category-saving-goals": "أهداف توفير الفئة", + "saving": "إنقاذ", + "spending": "الإنفاق", + "include-expense": "مصروف", + "include-expense-description-1": "سيتم تضمين معاملات الدخل في الميزانية", + "include-expense-description-2": "سوف ينخفض ​​إجمالي ميزانية الإنفاق مع الدخل", + "savings-budget": "ميزانية الادخار", + "expense-budget": "ميزانية المصاريف", + "savings-budget-description-1": "تتبع دخلك وميزانيتك مدخراتك", + "expense-budget-description-1": "تتبع نفقاتك وميزانيتك إنفاقك" } \ No newline at end of file diff --git a/budget/assets/translations/generated/bg.json b/budget/assets/translations/generated/bg.json index 982ca9ca..c6658137 100644 --- a/budget/assets/translations/generated/bg.json +++ b/budget/assets/translations/generated/bg.json @@ -1011,5 +1011,23 @@ "credit-payment": "Кредитно плащане", "add-payment": "Добавете плащане", "next-payment": "Следващо плащане", - "next-payment-due": "Следващото дължимо плащане" + "next-payment-due": "Следващото дължимо плащане", + "no-categories": "Няма категории", + "saved-amount-of": "Запазено от", + "over-saved-amount-of": "над спасен от", + "of-saving": "на спестяване", + "set-saving-goals": "Поставете целите за спестяване на категория", + "edit-saving-goals": "Редактиране на целите за запазване", + "saving-goals": "Спестяване на цели", + "saving-limit-type": "Тип лимит на спестяване", + "category-saving-goals": "Цели за спестяване на категория", + "saving": "Спестяване", + "spending": "Разходи", + "include-expense": "Разход", + "include-expense-description-1": "В бюджета ще бъдат включени сделки с доходи", + "include-expense-description-2": "Общият бюджет на разходите ще намалее с доходите", + "savings-budget": "Бюджет за спестявания", + "expense-budget": "Бюджет на разходите", + "savings-budget-description-1": "Проследете доходите и бюджета си вашите спестявания", + "expense-budget-description-1": "Проследявайте разходите си и бюджетирайте разходите си" } \ No newline at end of file diff --git a/budget/assets/translations/generated/bn.json b/budget/assets/translations/generated/bn.json index 3f290771..ba4b738b 100644 --- a/budget/assets/translations/generated/bn.json +++ b/budget/assets/translations/generated/bn.json @@ -1011,5 +1011,23 @@ "credit-payment": "ক্রেডিট পেমেন্ট", "add-payment": "অর্থ প্রদান যোগ করুন", "next-payment": "পরবর্তী অর্থ প্রদান", - "next-payment-due": "পরবর্তী অর্থ প্রদানের কারণে" + "next-payment-due": "পরবর্তী অর্থ প্রদানের কারণে", + "no-categories": "কোন বিভাগ নেই", + "saved-amount-of": "সংরক্ষণ", + "over-saved-amount-of": "ওভার সেভ", + "of-saving": "সংরক্ষণের", + "set-saving-goals": "বিভাগ সংরক্ষণের লক্ষ্য নির্ধারণ করুন", + "edit-saving-goals": "সংরক্ষণের লক্ষ্য সম্পাদনা করুন", + "saving-goals": "লক্ষ্য সংরক্ষণ করা", + "saving-limit-type": "সীমা প্রকার সংরক্ষণ", + "category-saving-goals": "বিভাগ সংরক্ষণ লক্ষ্য", + "saving": "সংরক্ষণ", + "spending": "ব্যয়", + "include-expense": "ব্যয়", + "include-expense-description-1": "আয়ের লেনদেন বাজেটে অন্তর্ভুক্ত করা হবে", + "include-expense-description-2": "ব্যয় বাজেটের মোট আয়ের সাথে হ্রাস পাবে", + "savings-budget": "সঞ্চয় বাজেট", + "expense-budget": "ব্যয় বাজেট", + "savings-budget-description-1": "আপনার আয় ট্র্যাক করুন এবং আপনার সঞ্চয় বাজেট করুন", + "expense-budget-description-1": "আপনার ব্যয় ট্র্যাক করুন এবং আপনার ব্যয় বাজেট করুন" } \ No newline at end of file diff --git a/budget/assets/translations/generated/cs.json b/budget/assets/translations/generated/cs.json index 0f19373a..b3e60bda 100644 --- a/budget/assets/translations/generated/cs.json +++ b/budget/assets/translations/generated/cs.json @@ -1008,8 +1008,26 @@ "view-all-spending-page-tip": "Zobrazení stránky „Všechny výdaje“ pro podrobné poruchy vašich financí v průběhu času.", "credit-limit": "Úvěrový limit", "due": "z důvodu", - "credit-payment": "Úvěrová platba", + "credit-payment": "Platba kreditu", "add-payment": "Přidejte platbu", "next-payment": "Další platba", - "next-payment-due": "Další splatná platba" + "next-payment-due": "Další splatná platba", + "no-categories": "Žádné kategorie", + "saved-amount-of": "zachráněno", + "over-saved-amount-of": "přes zachránit", + "of-saving": "úspory", + "set-saving-goals": "Stanovit cíle úspory kategorie", + "edit-saving-goals": "Upravit cíle úspory", + "saving-goals": "Ušetřit cíle", + "saving-limit-type": "Ukládání limitního typu", + "category-saving-goals": "Cíle úspory kategorie", + "saving": "Úspora", + "spending": "Výdaje", + "include-expense": "Výdaje", + "include-expense-description-1": "Transakce příjmů budou zahrnuty do rozpočtu", + "include-expense-description-2": "Celková částka výdajů se sníží s příjmy", + "savings-budget": "Úspora rozpočtu", + "expense-budget": "Rozpočet výdajů", + "savings-budget-description-1": "Sledujte svůj příjem a rozpočet vaše úspory", + "expense-budget-description-1": "Sledujte své výdaje a rozpočet na své výdaje" } \ No newline at end of file diff --git a/budget/assets/translations/generated/da.json b/budget/assets/translations/generated/da.json index 28543c77..2eb35c3f 100644 --- a/budget/assets/translations/generated/da.json +++ b/budget/assets/translations/generated/da.json @@ -1011,5 +1011,23 @@ "credit-payment": "Kreditbetaling", "add-payment": "Tilføj betaling", "next-payment": "Næste betaling", - "next-payment-due": "Næste betaling forfaldne" + "next-payment-due": "Næste betaling forfaldne", + "no-categories": "Ingen kategorier", + "saved-amount-of": "gemt af", + "over-saved-amount-of": "over gemt af", + "of-saving": "af at redde", + "set-saving-goals": "Sæt kategoribesparende mål", + "edit-saving-goals": "Rediger gemte mål", + "saving-goals": "Gemme mål", + "saving-limit-type": "Sparende grænsestype", + "category-saving-goals": "Kategoribesparende mål", + "saving": "Redning", + "spending": "Udgifter", + "include-expense": "Bekostning", + "include-expense-description-1": "Indkomsttransaktioner vil blive inkluderet i budgettet", + "include-expense-description-2": "Det samlede udgiftsbudget falder med indkomst", + "savings-budget": "Besparelsesbudget", + "expense-budget": "Udgiftsbudget", + "savings-budget-description-1": "Spor din indkomst og budgettere dine besparelser", + "expense-budget-description-1": "Spor dine udgifter og budgettere dine udgifter" } \ No newline at end of file diff --git a/budget/assets/translations/generated/de.json b/budget/assets/translations/generated/de.json index cea2402c..7be32d9e 100644 --- a/budget/assets/translations/generated/de.json +++ b/budget/assets/translations/generated/de.json @@ -20,7 +20,7 @@ "name-placeholder": "Name", "enter-name": "Name eingeben", "nickname-placeholder": "Spitzname", - "notes-placeholder": "Anmerkungen", + "notes-placeholder": "Notizen", "view-more": "Mehr sehen", "view-all-transactions": "Alle Transaktionen anzeigen", "expense": "Kosten", @@ -29,7 +29,7 @@ "notifications-disabled-description": "Tippen Sie hier, um Benachrichtigungen in den Telefon-Einstellungen zu aktivieren", "greetings-general-1": "Hallo", "greetings-general-2": "Hi", - "greetings-general-3": "Hallo", + "greetings-general-3": "Hi", "greetings-general-4": "Wie geht es dir", "greetings-general-5": "Was geht", "greetings-general-6": "Hallo", @@ -83,7 +83,7 @@ "theme": "Thema", "accent-color": "Akzentfarbe", "accent-color-description": "Wählen Sie ein Farbthema für die Schnittstelle aus", - "material-you": "Material You", + "material-you": "Dein Material", "material-you-description": "Verwenden Sie eine farbenfrohe ausdrucksstarke Schnittstelle", "theme-mode": "Themenmodus", "preferences": "Vorlieben", @@ -1011,5 +1011,23 @@ "credit-payment": "Kreditzahlung", "add-payment": "Zahlung hinzufügen", "next-payment": "Nächste Zahlung", - "next-payment-due": "Nächste Zahlung fällig" + "next-payment-due": "Nächste Zahlung fällig", + "no-categories": "Keine Kategorien", + "saved-amount-of": "gerettet von", + "over-saved-amount-of": "über gerettet von", + "of-saving": "von retten", + "set-saving-goals": "Setzen Sie die Kategorie -Sparenziele", + "edit-saving-goals": "Sparenziele bearbeiten", + "saving-goals": "Ziele sparen", + "saving-limit-type": "Sparlimittyp", + "category-saving-goals": "Kategoriesparenziele", + "saving": "Retten", + "spending": "Ausgaben", + "include-expense": "Kosten", + "include-expense-description-1": "Einkommenstransaktionen werden im Budget aufgenommen", + "include-expense-description-2": "Das Ausgabenbudget wird mit dem Einkommen sinken", + "savings-budget": "Sparbudget", + "expense-budget": "Ausgabenbudget", + "savings-budget-description-1": "Verfolgen Sie Ihr Einkommen und budgetieren Sie Ihre Einsparungen", + "expense-budget-description-1": "Verfolgen Sie Ihre Ausgaben und budgetieren Sie Ihre Ausgaben" } \ No newline at end of file diff --git a/budget/assets/translations/generated/el.json b/budget/assets/translations/generated/el.json index a5496988..df88a473 100644 --- a/budget/assets/translations/generated/el.json +++ b/budget/assets/translations/generated/el.json @@ -1011,5 +1011,23 @@ "credit-payment": "Πληρωμή πιστώσεων", "add-payment": "Προσθέστε πληρωμή", "next-payment": "Επόμενη πληρωμή", - "next-payment-due": "Επόμενη πληρωμή" + "next-payment-due": "Επόμενη πληρωμή", + "no-categories": "Χωρίς κατηγορίες", + "saved-amount-of": "αποθηκευμένος", + "over-saved-amount-of": "πάνω από αποθηκευμένο", + "of-saving": "εξοικονόμησης", + "set-saving-goals": "Ορίστε τους στόχους εξοικονόμησης κατηγορίας", + "edit-saving-goals": "Επεξεργασία στόχων εξοικονόμησης", + "saving-goals": "Εξοικονόμηση στόχων", + "saving-limit-type": "Τύπος ορίου εξοικονόμησης", + "category-saving-goals": "Στόχοι εξοικονόμησης κατηγορίας", + "saving": "Οικονομία", + "spending": "Δαπάνες", + "include-expense": "Δαπάνη", + "include-expense-description-1": "Οι συναλλαγές εισοδήματος θα συμπεριληφθούν στον προϋπολογισμό", + "include-expense-description-2": "Το σύνολο του προϋπολογισμού των δαπανών θα μειωθεί με το εισόδημα", + "savings-budget": "Προϋπολογισμός εξοικονόμησης", + "expense-budget": "Προϋπολογισμός δαπανών", + "savings-budget-description-1": "Παρακολουθήστε το εισόδημά σας και τον προϋπολογισμό σας για τις αποταμιεύσεις σας", + "expense-budget-description-1": "Παρακολουθήστε τα έξοδά σας και τον προϋπολογισμό των δαπανών σας" } \ No newline at end of file diff --git a/budget/assets/translations/generated/en.json b/budget/assets/translations/generated/en.json index ba6871cf..436c4ac4 100644 --- a/budget/assets/translations/generated/en.json +++ b/budget/assets/translations/generated/en.json @@ -1011,5 +1011,23 @@ "credit-payment": "Credit Payment", "add-payment": "Add Payment", "next-payment": "Next payment", - "next-payment-due": "Next Payment Due" + "next-payment-due": "Next Payment Due", + "no-categories": "No Categories", + "saved-amount-of": "saved of", + "over-saved-amount-of": "over saved of", + "of-saving": "of saving", + "set-saving-goals": "Set Category Saving Goals", + "edit-saving-goals": "Edit Saving Goals", + "saving-goals": "Saving Goals", + "saving-limit-type": "Saving Limit Type", + "category-saving-goals": "Category Saving Goals", + "saving": "Saving", + "spending": "Spending", + "include-expense": "Expense", + "include-expense-description-1": "Expense transactions will be included in the budget", + "include-expense-description-2": "The saving budget total will increase with expenses", + "savings-budget": "Savings budget", + "expense-budget": "Expense budget", + "savings-budget-description-1": "Track your income and budget your savings", + "expense-budget-description-1": "Track your expenses and budget your spending" } \ No newline at end of file diff --git a/budget/assets/translations/generated/es.json b/budget/assets/translations/generated/es.json index d847facd..e9a4acf7 100644 --- a/budget/assets/translations/generated/es.json +++ b/budget/assets/translations/generated/es.json @@ -1011,5 +1011,23 @@ "credit-payment": "Pago de crédito", "add-payment": "Agregar pago", "next-payment": "Siguiente pago", - "next-payment-due": "Siguiente pago adeudado" + "next-payment-due": "Siguiente pago adeudado", + "no-categories": "Sin categorías", + "saved-amount-of": "salvado de", + "over-saved-amount-of": "sobre salvado de", + "of-saving": "de ahorro", + "set-saving-goals": "Establecer objetivos de ahorro de categoría", + "edit-saving-goals": "Editar metas de ahorro", + "saving-goals": "Ahorrar objetivos", + "saving-limit-type": "Tipo de límite de ahorro", + "category-saving-goals": "Metas de ahorro de categoría", + "saving": "Ahorro", + "spending": "Gasto", + "include-expense": "Gastos", + "include-expense-description-1": "Las transacciones de ingresos se incluirán en el presupuesto", + "include-expense-description-2": "El total del presupuesto de gastos disminuirá con los ingresos", + "savings-budget": "Presupuesto de ahorro", + "expense-budget": "Presupuesto de gastos", + "savings-budget-description-1": "Rastree sus ingresos y presupueste sus ahorros", + "expense-budget-description-1": "Rastree sus gastos y presupueste sus gastos" } \ No newline at end of file diff --git a/budget/assets/translations/generated/fa.json b/budget/assets/translations/generated/fa.json index b07ed144..2b73a610 100644 --- a/budget/assets/translations/generated/fa.json +++ b/budget/assets/translations/generated/fa.json @@ -1011,5 +1011,23 @@ "credit-payment": "پرداخت اعتباری", "add-payment": "اضافه پرداخت", "next-payment": "پرداخت بعدی", - "next-payment-due": "پرداخت بعدی" + "next-payment-due": "پرداخت بعدی", + "no-categories": "بدون دسته بندی", + "saved-amount-of": "ذخیره شده از", + "over-saved-amount-of": "بیش از ذخیره شده از", + "of-saving": "صرفه جویی", + "set-saving-goals": "اهداف صرفه جویی در دسته را تعیین کنید", + "edit-saving-goals": "اهداف پس انداز را ویرایش کنید", + "saving-goals": "صرفه جویی در اهداف", + "saving-limit-type": "صرفه جویی در نوع حد", + "category-saving-goals": "اهداف صرفه جویی در دسته", + "saving": "صرفه جویی در", + "spending": "هزینه", + "include-expense": "هزینه", + "include-expense-description-1": "معاملات درآمد در بودجه گنجانده می شود", + "include-expense-description-2": "بودجه هزینه با درآمد کاهش می یابد", + "savings-budget": "بودجه پس انداز", + "expense-budget": "بودجه هزینه", + "savings-budget-description-1": "درآمد خود را پیگیری کنید و پس انداز خود را پس انداز کنید", + "expense-budget-description-1": "هزینه های خود را پیگیری کنید و هزینه های خود را بودجه خود را بودجه کنید" } \ No newline at end of file diff --git a/budget/assets/translations/generated/fi.json b/budget/assets/translations/generated/fi.json index eac2387b..7e404ed1 100644 --- a/budget/assets/translations/generated/fi.json +++ b/budget/assets/translations/generated/fi.json @@ -1011,5 +1011,23 @@ "credit-payment": "Luottomaksu", "add-payment": "Lisätä maksua", "next-payment": "Seuraava maksu", - "next-payment-due": "Seuraava maksu" + "next-payment-due": "Seuraava maksu", + "no-categories": "Ei luokkia", + "saved-amount-of": "pelastettu", + "over-saved-amount-of": "pelastettu", + "of-saving": "pelastaminen", + "set-saving-goals": "Aseta luokan säästötavoitteet", + "edit-saving-goals": "Muokkaa säästötavoitteita", + "saving-goals": "Tavoitteiden pelastaminen", + "saving-limit-type": "Säästäminen rajatyyppi", + "category-saving-goals": "Luokan säästötavoitteet", + "saving": "Tallentaa", + "spending": "Menot", + "include-expense": "Kulut", + "include-expense-description-1": "Tulot liiketoimet sisällytetään talousarvioon", + "include-expense-description-2": "Menobudjetin kokonaismäärä vähenee tulojen kanssa", + "savings-budget": "Säästöbudjetti", + "expense-budget": "Kustannusbudjetti", + "savings-budget-description-1": "Seuraa tulojasi ja budjetti säästöjäsi", + "expense-budget-description-1": "Seuraa kulut ja budjetti kulut" } \ No newline at end of file diff --git a/budget/assets/translations/generated/fil.json b/budget/assets/translations/generated/fil.json index 093b8780..71078f14 100644 --- a/budget/assets/translations/generated/fil.json +++ b/budget/assets/translations/generated/fil.json @@ -1011,5 +1011,23 @@ "credit-payment": "Pagbabayad ng kredito", "add-payment": "Magdagdag ng pagbabayad", "next-payment": "Susunod na pagbabayad", - "next-payment-due": "Susunod na pagbabayad" + "next-payment-due": "Susunod na pagbabayad", + "no-categories": "Walang mga kategorya", + "saved-amount-of": "nai -save ng", + "over-saved-amount-of": "higit sa nai -save ng", + "of-saving": "ng pag -save", + "set-saving-goals": "Itakda ang mga layunin sa pag -save ng kategorya", + "edit-saving-goals": "I -edit ang mga layunin sa pag -save", + "saving-goals": "Pag -save ng mga layunin", + "saving-limit-type": "Uri ng pag -save ng uri", + "category-saving-goals": "Mga layunin sa pag -save ng kategorya", + "saving": "Pag -save", + "spending": "Paggastos", + "include-expense": "Gastos", + "include-expense-description-1": "Ang mga transaksyon sa kita ay isasama sa badyet", + "include-expense-description-2": "Ang kabuuang badyet sa paggastos ay bababa sa kita", + "savings-budget": "Badyet ng pagtitipid", + "expense-budget": "Badyet sa gastos", + "savings-budget-description-1": "Subaybayan ang iyong kita at badyet ang iyong pagtitipid", + "expense-budget-description-1": "Subaybayan ang iyong mga gastos at badyet ang iyong paggasta" } \ No newline at end of file diff --git a/budget/assets/translations/generated/fr.json b/budget/assets/translations/generated/fr.json index 575f7477..f335ced4 100644 --- a/budget/assets/translations/generated/fr.json +++ b/budget/assets/translations/generated/fr.json @@ -1011,5 +1011,23 @@ "credit-payment": "Paiement de crédit", "add-payment": "Ajouter un paiement", "next-payment": "Prochain paiement", - "next-payment-due": "Paiement suivant dû" + "next-payment-due": "Paiement suivant dû", + "no-categories": "Pas de catégories", + "saved-amount-of": "sauvé de", + "over-saved-amount-of": "trop sauvé de", + "of-saving": "de sauvegarde", + "set-saving-goals": "Définir les objectifs d'économie de catégorie", + "edit-saving-goals": "Modifier les objectifs de sauvegarde", + "saving-goals": "Des objectifs d'épargne", + "saving-limit-type": "Type de limite de sauvegarde", + "category-saving-goals": "Catégorie des objectifs d'économie", + "saving": "Économie", + "spending": "Dépenses", + "include-expense": "Frais", + "include-expense-description-1": "Les transactions de revenus seront incluses dans le budget", + "include-expense-description-2": "Le total du budget des dépenses diminuera avec les revenus", + "savings-budget": "Budget d'épargne", + "expense-budget": "Budget des dépenses", + "savings-budget-description-1": "Suivez vos revenus et budgétisez votre épargne", + "expense-budget-description-1": "Suivez vos dépenses et budgétisé vos dépenses" } \ No newline at end of file diff --git a/budget/assets/translations/generated/gu.json b/budget/assets/translations/generated/gu.json index 1ae4d966..56468ec1 100644 --- a/budget/assets/translations/generated/gu.json +++ b/budget/assets/translations/generated/gu.json @@ -1011,5 +1011,23 @@ "credit-payment": "ઉદાર ચુકવણી", "add-payment": "ચુકવણી ઉમેરો", "next-payment": "આગામી ચુકવણી", - "next-payment-due": "બાકી ચૂકવણી" + "next-payment-due": "બાકી ચૂકવણી", + "no-categories": "કોઈ વર્ગો નથી", + "saved-amount-of": "ના બચાવેલા", + "over-saved-amount-of": "-ઉપર સાચવો", + "of-saving": "બચત", + "set-saving-goals": "કેટેગરી બચત લક્ષ્યો સેટ કરો", + "edit-saving-goals": "બચત લક્ષ્યો સંપાદિત કરો", + "saving-goals": "બચત ધ્યેયો", + "saving-limit-type": "બચત મર્યાદા પ્રકાર", + "category-saving-goals": "વર્ગ બચત લક્ષ્યો", + "saving": "બચત", + "spending": "ખર્ચ", + "include-expense": "ખર્ચ", + "include-expense-description-1": "આવક વ્યવહારો બજેટમાં શામેલ કરવામાં આવશે", + "include-expense-description-2": "ખર્ચ બજેટ કુલ આવક સાથે ઘટશે", + "savings-budget": "બચત અંદાજપત્ર", + "expense-budget": "ખર્ચ બજેટ", + "savings-budget-description-1": "તમારી આવક અને બજેટ તમારી બચતને ટ્ર track ક કરો", + "expense-budget-description-1": "તમારા ખર્ચ અને તમારા ખર્ચના બજેટને ટ્ર track ક કરો" } \ No newline at end of file diff --git a/budget/assets/translations/generated/he.json b/budget/assets/translations/generated/he.json index aa76db4d..80fc3994 100644 --- a/budget/assets/translations/generated/he.json +++ b/budget/assets/translations/generated/he.json @@ -1011,5 +1011,23 @@ "credit-payment": "תשלום אשראי", "add-payment": "הוסף תשלום", "next-payment": "התשלום הבא", - "next-payment-due": "התשלום הבא המגיע" + "next-payment-due": "התשלום הבא המגיע", + "no-categories": "אין קטגוריות", + "saved-amount-of": "נשמר מ", + "over-saved-amount-of": "נשמר יתר על המידה", + "of-saving": "לחסוך", + "set-saving-goals": "הגדר יעדים לחיסכון בקטגוריה", + "edit-saving-goals": "ערוך יעדים לחיסכון", + "saving-goals": "חוסך יעדים", + "saving-limit-type": "שמירת סוג גבול", + "category-saving-goals": "יעדים לחיסכון בקטגוריה", + "saving": "חִסָכוֹן", + "spending": "הוצאות", + "include-expense": "הוֹצָאָה", + "include-expense-description-1": "עסקאות הכנסה ייכללו בתקציב", + "include-expense-description-2": "סך תקציב ההוצאות יקטן עם ההכנסה", + "savings-budget": "תקציב חיסכון", + "expense-budget": "תקציב הוצאות", + "savings-budget-description-1": "עקוב אחר הכנסותיך ותקצב את החיסכון שלך", + "expense-budget-description-1": "עקוב אחר ההוצאות שלך ותקצב את ההוצאות שלך" } \ No newline at end of file diff --git a/budget/assets/translations/generated/hi.json b/budget/assets/translations/generated/hi.json index 7695b40f..365641d3 100644 --- a/budget/assets/translations/generated/hi.json +++ b/budget/assets/translations/generated/hi.json @@ -1011,5 +1011,23 @@ "credit-payment": "ऋण भुगतान", "add-payment": "भुगतान जोड़ें", "next-payment": "अगला भुगतान", - "next-payment-due": "अगला भुगतान देय" + "next-payment-due": "अगला भुगतान देय", + "no-categories": "कोई श्रेणियां नहीं", + "saved-amount-of": "बच गया", + "over-saved-amount-of": "की बचा हुआ", + "of-saving": "बचा हुआ", + "set-saving-goals": "श्रेणी बचत लक्ष्य निर्धारित करें", + "edit-saving-goals": "सेविंग लक्ष्यों को संपादित करें", + "saving-goals": "लक्ष्यों को बचाना", + "saving-limit-type": "बचत सीमा प्रकार", + "category-saving-goals": "श्रेणी बचत लक्ष्य", + "saving": "सहेजा जा रहा है", + "spending": "खर्च", + "include-expense": "व्यय", + "include-expense-description-1": "बजट में आय लेनदेन शामिल किया जाएगा", + "include-expense-description-2": "खर्च का बजट कुल आय के साथ कम हो जाएगा", + "savings-budget": "बचत बजट", + "expense-budget": "व्यय बजट", + "savings-budget-description-1": "अपनी आय को ट्रैक करें और अपनी बचत को बजट दें", + "expense-budget-description-1": "अपने खर्चों को ट्रैक करें और अपने खर्च को बजट दें" } \ No newline at end of file diff --git a/budget/assets/translations/generated/hu.json b/budget/assets/translations/generated/hu.json index a2ced22f..f58f4805 100644 --- a/budget/assets/translations/generated/hu.json +++ b/budget/assets/translations/generated/hu.json @@ -1011,5 +1011,23 @@ "credit-payment": "Hitelfizetés", "add-payment": "Fizetés adása", "next-payment": "Következő fizetés", - "next-payment-due": "Következő fizetés esedékes" + "next-payment-due": "Következő fizetés esedékes", + "no-categories": "Nincs kategória", + "saved-amount-of": "megmentett", + "over-saved-amount-of": "túlmentve", + "of-saving": "megtakarítás", + "set-saving-goals": "Állítsa be a kategória megtakarítási célokat", + "edit-saving-goals": "Szerkessze a megtakarítási célokat", + "saving-goals": "Célok megtakarítása", + "saving-limit-type": "Takarítás korlát típusa", + "category-saving-goals": "Kategória megtakarítási célok", + "saving": "Megtakarítás", + "spending": "Kiadások", + "include-expense": "Költség", + "include-expense-description-1": "A jövedelmi tranzakciókat a költségvetésbe foglalják", + "include-expense-description-2": "A kiadási költségvetés összege a jövedelemmel csökken", + "savings-budget": "Megtakarítási költségvetés", + "expense-budget": "Költség -költségvetés", + "savings-budget-description-1": "Kövesse nyomon a jövedelmét és a megtakarítások költségvetését", + "expense-budget-description-1": "Kövesse nyomon a költségeket és költségvetse ki a kiadásait" } \ No newline at end of file diff --git a/budget/assets/translations/generated/id.json b/budget/assets/translations/generated/id.json index dadee86f..2f34dbc6 100644 --- a/budget/assets/translations/generated/id.json +++ b/budget/assets/translations/generated/id.json @@ -1011,5 +1011,23 @@ "credit-payment": "Pembayaran kredit", "add-payment": "Tambahkan pembayaran", "next-payment": "Pembayaran selanjutnya", - "next-payment-due": "Pembayaran berikutnya jatuh tempo" + "next-payment-due": "Pembayaran berikutnya jatuh tempo", + "no-categories": "Tidak ada kategori", + "saved-amount-of": "disimpan", + "over-saved-amount-of": "lebih disimpan", + "of-saving": "menabung", + "set-saving-goals": "Tetapkan Tujuan Penghematan Kategori", + "edit-saving-goals": "Edit Simpan Sasaran", + "saving-goals": "Menghemat tujuan", + "saving-limit-type": "Menghemat jenis batas", + "category-saving-goals": "Kategori menghemat tujuan", + "saving": "Penghematan", + "spending": "Pengeluaran", + "include-expense": "Pengeluaran", + "include-expense-description-1": "Transaksi pendapatan akan dimasukkan dalam anggaran", + "include-expense-description-2": "Total anggaran pengeluaran akan berkurang dengan pendapatan", + "savings-budget": "Anggaran tabungan", + "expense-budget": "Anggaran pengeluaran", + "savings-budget-description-1": "Lacak Penghasilan Anda dan Anggarkan Tabungan Anda", + "expense-budget-description-1": "Lacak pengeluaran Anda dan anggarkan pengeluaran Anda" } \ No newline at end of file diff --git a/budget/assets/translations/generated/it.json b/budget/assets/translations/generated/it.json index f9b38d2d..ccb7478c 100644 --- a/budget/assets/translations/generated/it.json +++ b/budget/assets/translations/generated/it.json @@ -1011,5 +1011,23 @@ "credit-payment": "Pagamento del credito", "add-payment": "Aggiungi pagamento", "next-payment": "Pagamento successivo", - "next-payment-due": "Pagamento successivo dovuto" + "next-payment-due": "Pagamento successivo dovuto", + "no-categories": "Nessuna categorie", + "saved-amount-of": "salvato di", + "over-saved-amount-of": "over salvato di", + "of-saving": "di risparmio", + "set-saving-goals": "Imposta obiettivi di risparmio di categoria", + "edit-saving-goals": "Modifica obiettivi di salvataggio", + "saving-goals": "Obiettivi di salvataggio", + "saving-limit-type": "Tipo di limite di risparmio", + "category-saving-goals": "Obiettivi di risparmio di categoria", + "saving": "Salvataggio", + "spending": "Spesa", + "include-expense": "Spese", + "include-expense-description-1": "Le transazioni di reddito saranno incluse nel budget", + "include-expense-description-2": "Il totale del budget di spesa diminuirà con il reddito", + "savings-budget": "Budget di risparmio", + "expense-budget": "Budget di spesa", + "savings-budget-description-1": "Tieni traccia del tuo reddito e del tuo budget i tuoi risparmi", + "expense-budget-description-1": "Tieni traccia delle tue spese e budge al tuo budget della spesa" } \ No newline at end of file diff --git a/budget/assets/translations/generated/ja.json b/budget/assets/translations/generated/ja.json index 8d3977ef..e18bd41c 100644 --- a/budget/assets/translations/generated/ja.json +++ b/budget/assets/translations/generated/ja.json @@ -1011,5 +1011,23 @@ "credit-payment": "クレジット支払い", "add-payment": "支払いを追加します", "next-payment": "次の支払い", - "next-payment-due": "次の支払い期限" + "next-payment-due": "次の支払い期限", + "no-categories": "カテゴリはありません", + "saved-amount-of": "保存されています", + "over-saved-amount-of": "保存されています", + "of-saving": "保存の", + "set-saving-goals": "カテゴリの節約目標を設定します", + "edit-saving-goals": "保存目標を編集します", + "saving-goals": "目標を節約します", + "saving-limit-type": "節約型タイプ", + "category-saving-goals": "カテゴリの節約目標", + "saving": "節約", + "spending": "支出", + "include-expense": "費用", + "include-expense-description-1": "収入取引は予算に含まれます", + "include-expense-description-2": "支出予算の合計は収入とともに減少します", + "savings-budget": "節約予算", + "expense-budget": "費用予算", + "savings-budget-description-1": "収入を追跡し、貯蓄を予算化します", + "expense-budget-description-1": "費用を追跡し、支出を予算化します" } \ No newline at end of file diff --git a/budget/assets/translations/generated/ko.json b/budget/assets/translations/generated/ko.json index 49f30c77..56b18011 100644 --- a/budget/assets/translations/generated/ko.json +++ b/budget/assets/translations/generated/ko.json @@ -1011,5 +1011,23 @@ "credit-payment": "신용 지불", "add-payment": "지불을 추가하십시오", "next-payment": "다음 지불", - "next-payment-due": "다음 지불 마감" + "next-payment-due": "다음 지불 마감", + "no-categories": "카테고리가 없습니다", + "saved-amount-of": "저장", + "over-saved-amount-of": "과도하게 저축", + "of-saving": "저축의", + "set-saving-goals": "카테고리 저장 목표를 설정합니다", + "edit-saving-goals": "저축 목표를 편집합니다", + "saving-goals": "목표 저축", + "saving-limit-type": "제한 제한 유형 저장", + "category-saving-goals": "카테고리 저축 목표", + "saving": "절약", + "spending": "지출", + "include-expense": "비용", + "include-expense-description-1": "소득 거래는 예산에 포함됩니다", + "include-expense-description-2": "지출 예산 총계는 소득에 따라 감소 할 것입니다", + "savings-budget": "저축 예산", + "expense-budget": "비용 예산", + "savings-budget-description-1": "소득을 추적하고 저축을 예산하십시오", + "expense-budget-description-1": "비용을 추적하고 지출 예산을 책정하십시오" } \ No newline at end of file diff --git a/budget/assets/translations/generated/ml.json b/budget/assets/translations/generated/ml.json index b238f469..d170f8d9 100644 --- a/budget/assets/translations/generated/ml.json +++ b/budget/assets/translations/generated/ml.json @@ -1011,5 +1011,23 @@ "credit-payment": "ക്രെഡിറ്റ് പേയ്മെന്റ്", "add-payment": "പേയ്മെന്റ് ചേർക്കുക", "next-payment": "അടുത്ത പേയ്മെന്റ്", - "next-payment-due": "അടുത്ത പണമടയ്ക്കൽ" + "next-payment-due": "അടുത്ത പണമടയ്ക്കൽ", + "no-categories": "വിഭാഗങ്ങളൊന്നുമില്ല", + "saved-amount-of": "സംരക്ഷിച്ചു", + "over-saved-amount-of": "ലാഭിച്ചു", + "of-saving": "സംരക്ഷിക്കുന്നതിന്റെ", + "set-saving-goals": "കാറ്റഗറി സേവിംഗ് ലക്ഷ്യങ്ങൾ സജ്ജമാക്കുക", + "edit-saving-goals": "സേവിംഗ് ലക്ഷ്യങ്ങൾ എഡിറ്റുചെയ്യുക", + "saving-goals": "ലക്ഷ്യങ്ങൾ ലാഭിക്കുന്നു", + "saving-limit-type": "പരിധി തരം സംരക്ഷിക്കുന്നു", + "category-saving-goals": "കാറ്റഗറി സേവിംഗ് ലക്ഷ്യങ്ങൾ", + "saving": "സംരക്ഷിക്കുന്നത്", + "spending": "ചിലവഴിക്കുക", + "include-expense": "ചെലവ്", + "include-expense-description-1": "വരുമാന ഇടപാടുകൾ ബജറ്റിൽ ഉൾപ്പെടുത്തും", + "include-expense-description-2": "ചെലവ് ബജറ്റ് ആകെ വരുമാനം കുറയ്ക്കും", + "savings-budget": "സേവിംഗ്സ് ബജറ്റ്", + "expense-budget": "ചെലവ് ബജറ്റ്", + "savings-budget-description-1": "നിങ്ങളുടെ വരുമാനവും ബജറ്റും ട്രാക്കുചെയ്യുക", + "expense-budget-description-1": "നിങ്ങളുടെ ചെലവുകൾ നിങ്ങളുടെ ചെലവുകളും ബജറ്റിയും ട്രാക്കുചെയ്യുക" } \ No newline at end of file diff --git a/budget/assets/translations/generated/mr.json b/budget/assets/translations/generated/mr.json index 7c251ff3..adda642e 100644 --- a/budget/assets/translations/generated/mr.json +++ b/budget/assets/translations/generated/mr.json @@ -1011,5 +1011,23 @@ "credit-payment": "पत देयके", "add-payment": "देयक जोडा", "next-payment": "पुढील देयक", - "next-payment-due": "पुढील देय देय" + "next-payment-due": "पुढील देय देय", + "no-categories": "श्रेणी नाही", + "saved-amount-of": "जतन केले", + "over-saved-amount-of": "ओव्हर सेव्ह चे", + "of-saving": "बचत", + "set-saving-goals": "श्रेणी बचत गोल सेट करा", + "edit-saving-goals": "बचत ध्येय संपादित करा", + "saving-goals": "ध्येय जतन करणे", + "saving-limit-type": "बचत मर्यादा प्रकार", + "category-saving-goals": "श्रेणी बचत ध्येय", + "saving": "बचत", + "spending": "खर्च करणे", + "include-expense": "खर्च", + "include-expense-description-1": "अर्थसंकल्पात उत्पन्नाच्या व्यवहाराचा समावेश केला जाईल", + "include-expense-description-2": "खर्च बजेट एकूण उत्पन्नासह कमी होईल", + "savings-budget": "बचत बजेट", + "expense-budget": "खर्च बजेट", + "savings-budget-description-1": "आपल्या उत्पन्नाचा मागोवा घ्या आणि आपली बचत बजेट करा", + "expense-budget-description-1": "आपल्या खर्चाचा मागोवा घ्या आणि आपला खर्च बजेट करा" } \ No newline at end of file diff --git a/budget/assets/translations/generated/ms.json b/budget/assets/translations/generated/ms.json index 6c83bc03..bd37e8d1 100644 --- a/budget/assets/translations/generated/ms.json +++ b/budget/assets/translations/generated/ms.json @@ -1011,5 +1011,23 @@ "credit-payment": "Pembayaran kredit", "add-payment": "Tambah pembayaran", "next-payment": "Pembayaran seterusnya", - "next-payment-due": "Pembayaran seterusnya" + "next-payment-due": "Pembayaran seterusnya", + "no-categories": "Tiada kategori", + "saved-amount-of": "disimpan dari", + "over-saved-amount-of": "lebih disimpan", + "of-saving": "penjimatan", + "set-saving-goals": "Tetapkan Matlamat Penjimatan Kategori", + "edit-saving-goals": "Edit matlamat penjimatan", + "saving-goals": "Menjimatkan matlamat", + "saving-limit-type": "Jenis had penjimatan", + "category-saving-goals": "Matlamat penjimatan kategori", + "saving": "Penjimatan", + "spending": "Perbelanjaan", + "include-expense": "Perbelanjaan", + "include-expense-description-1": "Urus niaga pendapatan akan dimasukkan dalam belanjawan", + "include-expense-description-2": "Jumlah belanjawan perbelanjaan akan berkurang dengan pendapatan", + "savings-budget": "Belanjawan simpanan", + "expense-budget": "Belanjawan perbelanjaan", + "savings-budget-description-1": "Jejaki pendapatan dan anggaran simpanan anda", + "expense-budget-description-1": "Jejaki perbelanjaan dan anggaran perbelanjaan anda" } \ No newline at end of file diff --git a/budget/assets/translations/generated/nl.json b/budget/assets/translations/generated/nl.json index e485e69f..2b947652 100644 --- a/budget/assets/translations/generated/nl.json +++ b/budget/assets/translations/generated/nl.json @@ -1011,5 +1011,23 @@ "credit-payment": "Kredietbetaling", "add-payment": "Voeg betaling toe", "next-payment": "Volgende betaling", - "next-payment-due": "Volgende betaling verschuldigd" + "next-payment-due": "Volgende betaling verschuldigd", + "no-categories": "Geen categorieën", + "saved-amount-of": "gered van", + "over-saved-amount-of": "te bespaard van", + "of-saving": "van sparen", + "set-saving-goals": "Stel categoriebesparende doelen in", + "edit-saving-goals": "Bewerk sparende doelen", + "saving-goals": "Doelen redden", + "saving-limit-type": "Limiettype opslaan", + "category-saving-goals": "Categorie -spaardoelen", + "saving": "Besparing", + "spending": "Uitgaven", + "include-expense": "Kosten", + "include-expense-description-1": "Inkomstentransacties worden opgenomen in de begroting", + "include-expense-description-2": "Het totaal van de bestedingsbudget zal afnemen met inkomsten", + "savings-budget": "Spaarbudget", + "expense-budget": "Kostenbudget", + "savings-budget-description-1": "Volg uw inkomsten en budget uw spaargeld", + "expense-budget-description-1": "Volg uw uitgaven en budget uw uitgaven" } \ No newline at end of file diff --git a/budget/assets/translations/generated/no.json b/budget/assets/translations/generated/no.json index e4f00c24..caa6cbd2 100644 --- a/budget/assets/translations/generated/no.json +++ b/budget/assets/translations/generated/no.json @@ -1011,5 +1011,23 @@ "credit-payment": "Kredittbetaling", "add-payment": "Legg til betaling", "next-payment": "Neste betaling", - "next-payment-due": "Neste betaling forfaller" + "next-payment-due": "Neste betaling forfaller", + "no-categories": "Ingen kategorier", + "saved-amount-of": "lagret av", + "over-saved-amount-of": "over frelst av", + "of-saving": "av sparing", + "set-saving-goals": "Sett kategori Lagringsmål", + "edit-saving-goals": "Rediger lagringsmål", + "saving-goals": "Sparer mål", + "saving-limit-type": "Lagring av grensetype", + "category-saving-goals": "Kategori sparer mål", + "saving": "Sparer", + "spending": "Utgifter", + "include-expense": "Kostnader", + "include-expense-description-1": "Inntektstransaksjoner vil bli inkludert i budsjettet", + "include-expense-description-2": "Utgiftsbudsjettet totalt vil avta med inntekten", + "savings-budget": "Sparebudsjett", + "expense-budget": "Utgiftsbudsjett", + "savings-budget-description-1": "Spor inntekten og budsjettet sparepengene dine", + "expense-budget-description-1": "Spore utgiftene dine og budsjetter utgiftene dine" } \ No newline at end of file diff --git a/budget/assets/translations/generated/pl.json b/budget/assets/translations/generated/pl.json index 51081c13..416b6c6c 100644 --- a/budget/assets/translations/generated/pl.json +++ b/budget/assets/translations/generated/pl.json @@ -1011,5 +1011,23 @@ "credit-payment": "Płatność kredytowa", "add-payment": "Dodaj płatność", "next-payment": "Następna zapłata", - "next-payment-due": "Następna należna płatność" + "next-payment-due": "Następna należna płatność", + "no-categories": "Brak kategorii", + "saved-amount-of": "uratowany", + "over-saved-amount-of": "Over Saved of", + "of-saving": "oszczędzania", + "set-saving-goals": "Ustaw cele oszczędzania kategorii", + "edit-saving-goals": "Edytuj cele oszczędzające", + "saving-goals": "Oszczędzanie celów", + "saving-limit-type": "Oszczędzanie typu limitu", + "category-saving-goals": "Cele oszczędzające kategorię", + "saving": "Oszczędność", + "spending": "Wydatki", + "include-expense": "Koszt", + "include-expense-description-1": "Transakcje dochodowe zostaną uwzględnione w budżecie", + "include-expense-description-2": "Łączna liczba budżetu wydatków spadnie wraz z dochodami", + "savings-budget": "Budżet oszczędnościowy", + "expense-budget": "Budżet wydatków", + "savings-budget-description-1": "Śledź swoje dochody i budżet na swoje oszczędności", + "expense-budget-description-1": "Śledź swoje wydatki i budżet na wydatki" } \ No newline at end of file diff --git a/budget/assets/translations/generated/pt.json b/budget/assets/translations/generated/pt.json index dd77c044..32761110 100644 --- a/budget/assets/translations/generated/pt.json +++ b/budget/assets/translations/generated/pt.json @@ -1011,5 +1011,23 @@ "credit-payment": "Pagamento de crédito", "add-payment": "Adicione pagamento", "next-payment": "Próximo pagamento", - "next-payment-due": "Próximo pagamento devido" + "next-payment-due": "Próximo pagamento devido", + "no-categories": "Sem categorias", + "saved-amount-of": "salvo de", + "over-saved-amount-of": "excesso salvo de", + "of-saving": "de salvar", + "set-saving-goals": "Definir metas de economia de categoria", + "edit-saving-goals": "Editar metas de economia", + "saving-goals": "Economizando metas", + "saving-limit-type": "Tipo de limite de economia", + "category-saving-goals": "Metas de economia de categoria", + "saving": "Economizando", + "spending": "Gastos", + "include-expense": "Despesa", + "include-expense-description-1": "As transações de renda serão incluídas no orçamento", + "include-expense-description-2": "O total do orçamento de gastos diminuirá com a renda", + "savings-budget": "Orçamento de poupança", + "expense-budget": "Orçamento de despesa", + "savings-budget-description-1": "Rastreie sua renda e orçamento suas economias", + "expense-budget-description-1": "Acompanhe suas despesas e orçem seus gastos" } \ No newline at end of file diff --git a/budget/assets/translations/generated/ro.json b/budget/assets/translations/generated/ro.json index b967e889..3016b560 100644 --- a/budget/assets/translations/generated/ro.json +++ b/budget/assets/translations/generated/ro.json @@ -1011,5 +1011,23 @@ "credit-payment": "Plata creditului", "add-payment": "Adăugați plata", "next-payment": "Următoarea plată", - "next-payment-due": "Următoarea plată datorată" + "next-payment-due": "Următoarea plată datorată", + "no-categories": "Fără categorii", + "saved-amount-of": "salvat de", + "over-saved-amount-of": "peste salvat de", + "of-saving": "de economisire", + "set-saving-goals": "Stabiliți obiective de economisire a categoriei", + "edit-saving-goals": "Editați obiectivele de economisire", + "saving-goals": "Economisind obiective", + "saving-limit-type": "Economisirea tipului de limită", + "category-saving-goals": "Obiective de economisire a categoriilor", + "saving": "Economisire", + "spending": "Cheltuire", + "include-expense": "Cheltuieli", + "include-expense-description-1": "Tranzacțiile cu venituri vor fi incluse în buget", + "include-expense-description-2": "Totalul bugetului de cheltuieli va scădea odată cu veniturile", + "savings-budget": "Bugetul de economii", + "expense-budget": "Bugetul cheltuielilor", + "savings-budget-description-1": "Urmăriți -vă veniturile și bugetați -vă economiile", + "expense-budget-description-1": "Urmăriți -vă cheltuielile și bugetați -vă cheltuielile" } \ No newline at end of file diff --git a/budget/assets/translations/generated/ru.json b/budget/assets/translations/generated/ru.json index 32ec6550..900e5f53 100644 --- a/budget/assets/translations/generated/ru.json +++ b/budget/assets/translations/generated/ru.json @@ -1011,5 +1011,23 @@ "credit-payment": "Кредитный платеж", "add-payment": "Добавить оплату", "next-payment": "Следующий платеж", - "next-payment-due": "Следующий оплата причитается" + "next-payment-due": "Следующий оплата причитается", + "no-categories": "Нет категорий", + "saved-amount-of": "Сохраняется", + "over-saved-amount-of": "из -за спасения", + "of-saving": "сохранения", + "set-saving-goals": "Установка категории сохранения целей", + "edit-saving-goals": "Редактировать сохранение целей", + "saving-goals": "Экономия целей", + "saving-limit-type": "Сберегательный лимитный тип", + "category-saving-goals": "Категория экономит цели", + "saving": "Сохранение", + "spending": "Расходы", + "include-expense": "Расход", + "include-expense-description-1": "Сделки с доходами будут включены в бюджет", + "include-expense-description-2": "Общая сумма бюджета расходов уменьшится с доходом", + "savings-budget": "Сберегательный бюджет", + "expense-budget": "Бюджет расходов", + "savings-budget-description-1": "Отслеживайте свой доход и бюджет свои сбережения", + "expense-budget-description-1": "Отслеживайте свои расходы и бюджет ваши расходы" } \ No newline at end of file diff --git a/budget/assets/translations/generated/sr.json b/budget/assets/translations/generated/sr.json index 5afe40c9..da3b39ad 100644 --- a/budget/assets/translations/generated/sr.json +++ b/budget/assets/translations/generated/sr.json @@ -1011,5 +1011,23 @@ "credit-payment": "Плаћање кредита", "add-payment": "Додавање уплате", "next-payment": "Следеће плаћање", - "next-payment-due": "Следеће исплате" + "next-payment-due": "Следеће исплате", + "no-categories": "Нема категорија", + "saved-amount-of": "сачуван од", + "over-saved-amount-of": "преко сачуване", + "of-saving": "уштеде", + "set-saving-goals": "Подесите циљеве уштеде категорија", + "edit-saving-goals": "Уређивање циљева уштеде", + "saving-goals": "Спремање циљева", + "saving-limit-type": "Спремање граничног типа", + "category-saving-goals": "Циљеви уштеде категорија", + "saving": "Уштеда", + "spending": "Трошење", + "include-expense": "Трошак", + "include-expense-description-1": "Трансакције о приходима биће укључене у буџет", + "include-expense-description-2": "Потрошња буџет ће се смањити са приходима", + "savings-budget": "Буџет штедње", + "expense-budget": "Буџет за трошкове", + "savings-budget-description-1": "Пратите свој приход и буџет уштеде", + "expense-budget-description-1": "Пратите трошкове и буџет своје потрошње" } \ No newline at end of file diff --git a/budget/assets/translations/generated/sv.json b/budget/assets/translations/generated/sv.json index 7581adc5..3d183d91 100644 --- a/budget/assets/translations/generated/sv.json +++ b/budget/assets/translations/generated/sv.json @@ -1011,5 +1011,23 @@ "credit-payment": "Kreditbetalning", "add-payment": "Lägga till betalning", "next-payment": "Nästa betalning", - "next-payment-due": "Nästa betalning förfaller" + "next-payment-due": "Nästa betalning förfaller", + "no-categories": "Inga kategorier", + "saved-amount-of": "rädd för", + "over-saved-amount-of": "överkornad", + "of-saving": "sparande", + "set-saving-goals": "Uppsättning av kategorinbesparande mål", + "edit-saving-goals": "Redigera mål", + "saving-goals": "Spara mål", + "saving-limit-type": "Spara gränsstyp", + "category-saving-goals": "Kategoribesparande mål", + "saving": "Sparande", + "spending": "Utgifter", + "include-expense": "Bekostnad", + "include-expense-description-1": "Inkomsttransaktioner kommer att inkluderas i budgeten", + "include-expense-description-2": "Utgiftsbudgeten kommer att minska med inkomst", + "savings-budget": "Besparingsbudget", + "expense-budget": "Utgiftsbudget", + "savings-budget-description-1": "Spåra din inkomst och budgetera dina besparingar", + "expense-budget-description-1": "Spåra dina utgifter och budgetera dina utgifter" } \ No newline at end of file diff --git a/budget/assets/translations/generated/sw.json b/budget/assets/translations/generated/sw.json index c2bfc7f7..ad6d3cc5 100644 --- a/budget/assets/translations/generated/sw.json +++ b/budget/assets/translations/generated/sw.json @@ -1011,5 +1011,23 @@ "credit-payment": "Malipo ya mkopo", "add-payment": "Ongeza malipo", "next-payment": "Malipo yanayofuata", - "next-payment-due": "Malipo yanayofuata" + "next-payment-due": "Malipo yanayofuata", + "no-categories": "Hakuna kategoria", + "saved-amount-of": "kuokolewa", + "over-saved-amount-of": "zaidi ya kuokolewa", + "of-saving": "ya kuokoa", + "set-saving-goals": "Weka malengo ya kuokoa jamii", + "edit-saving-goals": "Hariri malengo ya kuokoa", + "saving-goals": "Kuokoa malengo", + "saving-limit-type": "Kuokoa aina ya kikomo", + "category-saving-goals": "Malengo ya kuokoa jamii", + "saving": "Kuokoa", + "spending": "Matumizi", + "include-expense": "Gharama", + "include-expense-description-1": "Uuzaji wa mapato utajumuishwa katika bajeti", + "include-expense-description-2": "Jumla ya bajeti ya matumizi itapungua na mapato", + "savings-budget": "Bajeti ya Akiba", + "expense-budget": "Bajeti ya gharama", + "savings-budget-description-1": "Fuatilia mapato yako na bajeti ya akiba yako", + "expense-budget-description-1": "Fuatilia gharama zako na bajeti matumizi yako" } \ No newline at end of file diff --git a/budget/assets/translations/generated/ta.json b/budget/assets/translations/generated/ta.json index 0c3f7ffe..e57aa334 100644 --- a/budget/assets/translations/generated/ta.json +++ b/budget/assets/translations/generated/ta.json @@ -1011,5 +1011,23 @@ "credit-payment": "கடன் கட்டணம்", "add-payment": "கட்டணத்தைச் சேர்க்கவும்", "next-payment": "அடுத்த கட்டணம்", - "next-payment-due": "அடுத்த கட்டணம் செலுத்த வேண்டும்" + "next-payment-due": "அடுத்த கட்டணம் செலுத்த வேண்டும்", + "no-categories": "வகைகள் இல்லை", + "saved-amount-of": "சேமிக்கப்பட்டது", + "over-saved-amount-of": "சேமிக்கப்பட்டதை விட", + "of-saving": "சேமிப்பு", + "set-saving-goals": "வகை சேமிப்பு இலக்குகளை அமைக்கவும்", + "edit-saving-goals": "சேமிப்பு இலக்குகளைத் திருத்தவும்", + "saving-goals": "இலக்குகளை மிச்சப்படுத்துகிறது", + "saving-limit-type": "வரம்பு வகை சேமிப்பு", + "category-saving-goals": "வகை சேமிப்பு இலக்குகள்", + "saving": "சேமிப்பு", + "spending": "செலவு", + "include-expense": "செலவு", + "include-expense-description-1": "வருமான பரிவர்த்தனைகள் பட்ஜெட்டில் சேர்க்கப்படும்", + "include-expense-description-2": "செலவு பட்ஜெட் மொத்தம் வருமானத்துடன் குறையும்", + "savings-budget": "சேமிப்பு பட்ஜெட்", + "expense-budget": "செலவு பட்ஜெட்", + "savings-budget-description-1": "உங்கள் வருமானம் மற்றும் பட்ஜெட்டில் உங்கள் சேமிப்பைக் கண்காணிக்கவும்", + "expense-budget-description-1": "உங்கள் செலவுகள் மற்றும் உங்கள் செலவினங்களைக் கண்காணிக்கவும்" } \ No newline at end of file diff --git a/budget/assets/translations/generated/te.json b/budget/assets/translations/generated/te.json index 67c95dda..19a8e8db 100644 --- a/budget/assets/translations/generated/te.json +++ b/budget/assets/translations/generated/te.json @@ -1011,5 +1011,23 @@ "credit-payment": "క్రెడిట్ చెల్లింపు", "add-payment": "చెల్లింపును జోడించండి", "next-payment": "తదుపరి చెల్లింపు", - "next-payment-due": "తదుపరి చెల్లింపు" + "next-payment-due": "తదుపరి చెల్లింపు చెల్లించాలి", + "no-categories": "వర్గాలు లేవు", + "saved-amount-of": "సేవ్ చేయబడింది", + "over-saved-amount-of": "ఓవర్ సేవ్", + "of-saving": "పొదుపు", + "set-saving-goals": "వర్గాన్ని సేవ్ చేసే లక్ష్యాలను సెట్ చేయండి", + "edit-saving-goals": "పొదుపు లక్ష్యాలను సవరించండి", + "saving-goals": "లక్ష్యాలను ఆదా చేస్తుంది", + "saving-limit-type": "పరిమితి రకాన్ని ఆదా చేస్తుంది", + "category-saving-goals": "వర్గం సేవింగ్ లక్ష్యాలు", + "saving": "సేవింగ్", + "spending": "ఖర్చు", + "include-expense": "ఖర్చు", + "include-expense-description-1": "ఆదాయ లావాదేవీలు బడ్జెట్‌లో చేర్చబడతాయి", + "include-expense-description-2": "ఖర్చు బడ్జెట్ మొత్తం ఆదాయంతో తగ్గుతుంది", + "savings-budget": "పొదుపు బడ్జెట్", + "expense-budget": "ఖర్చు బడ్జెట్", + "savings-budget-description-1": "మీ ఆదాయాన్ని ట్రాక్ చేయండి మరియు మీ పొదుపులను బడ్జెట్ చేయండి", + "expense-budget-description-1": "మీ ఖర్చులను ట్రాక్ చేయండి మరియు మీ ఖర్చును బడ్జెట్ చేయండి" } \ No newline at end of file diff --git a/budget/assets/translations/generated/th.json b/budget/assets/translations/generated/th.json index 33c21464..36b36d89 100644 --- a/budget/assets/translations/generated/th.json +++ b/budget/assets/translations/generated/th.json @@ -1011,5 +1011,23 @@ "credit-payment": "การชำระเครดิต", "add-payment": "เพิ่มการชำระเงิน", "next-payment": "การชำระเงินครั้งต่อไป", - "next-payment-due": "การชำระเงินครั้งต่อไปที่ครบกำหนด" + "next-payment-due": "การชำระเงินครั้งต่อไปที่ครบกำหนด", + "no-categories": "ไม่มีหมวดหมู่", + "saved-amount-of": "บันทึก", + "over-saved-amount-of": "เกิน", + "of-saving": "ของการออม", + "set-saving-goals": "กำหนดเป้าหมายการประหยัดหมวดหมู่", + "edit-saving-goals": "แก้ไขเป้าหมายการออม", + "saving-goals": "บันทึกเป้าหมาย", + "saving-limit-type": "ประเภทขีด จำกัด การออม", + "category-saving-goals": "หมวดหมู่เป้าหมายการออม", + "saving": "ประหยัด", + "spending": "การใช้จ่าย", + "include-expense": "ค่าใช้จ่าย", + "include-expense-description-1": "การทำธุรกรรมรายได้จะรวมอยู่ในงบประมาณ", + "include-expense-description-2": "ยอดรวมงบประมาณการใช้จ่ายจะลดลงด้วยรายได้", + "savings-budget": "งบประมาณการออม", + "expense-budget": "งบประมาณค่าใช้จ่าย", + "savings-budget-description-1": "ติดตามรายได้และงบประมาณการออมของคุณ", + "expense-budget-description-1": "ติดตามค่าใช้จ่ายและงบประมาณการใช้จ่ายของคุณ" } \ No newline at end of file diff --git a/budget/assets/translations/generated/tr.json b/budget/assets/translations/generated/tr.json index 39de1b07..11678684 100644 --- a/budget/assets/translations/generated/tr.json +++ b/budget/assets/translations/generated/tr.json @@ -1011,5 +1011,23 @@ "credit-payment": "Kredi ödeme", "add-payment": "Ödeme Ekle", "next-payment": "Sonraki ödeme", - "next-payment-due": "Sonraki Ödeme Sonu" + "next-payment-due": "Sonraki Ödeme Sonu", + "no-categories": "Kategori Yok", + "saved-amount-of": "kurtarılmış", + "over-saved-amount-of": "fazla kurtarıldı", + "of-saving": "kaydetme", + "set-saving-goals": "Kategori tasarrufu hedefleri belirleyin", + "edit-saving-goals": "Tasarruf Hedeflerini Düzenle", + "saving-goals": "Hedeflerden tasarruf etmek", + "saving-limit-type": "Tasarruf Limit Türü", + "category-saving-goals": "Kategori Tasarruf Hedefleri", + "saving": "Tasarruf", + "spending": "Harcama", + "include-expense": "Masraf", + "include-expense-description-1": "Gelir işlemleri bütçeye dahil edilecek", + "include-expense-description-2": "Harcama bütçesi toplamı gelirle azalacak", + "savings-budget": "Tasarruf Bütçesi", + "expense-budget": "Gider Bütçesi", + "savings-budget-description-1": "Gelirinizi izleyin ve tasarruflarınızı bütçeleyin", + "expense-budget-description-1": "Giderlerinizi takip edin ve harcamalarınızı bütçe" } \ No newline at end of file diff --git a/budget/assets/translations/generated/uk.json b/budget/assets/translations/generated/uk.json index 966a0cf4..30e7c476 100644 --- a/budget/assets/translations/generated/uk.json +++ b/budget/assets/translations/generated/uk.json @@ -377,7 +377,7 @@ "support-the-developer": "Підтримайте розробника", "support-the-developer-description": "Більше 2 років розвитку", "unlimited-budgets-and-goals": "Необмежені бюджети", - "unlimited-budgets-and-goals-description": "Створіть більше 1 бюджету, мети чи позики", + "unlimited-budgets-and-goals-description": "Створити більше 1 бюджету, мети чи позики", "past-budget-periods": "Минулі бюджетні періоди", "past-budget-periods-description": "Переглянути витрати на витрати на минулі періоди", "unlimited-color-picker": "Необмежений вибір кольору", @@ -1011,5 +1011,23 @@ "credit-payment": "Кредитний платіж", "add-payment": "Додати платіж", "next-payment": "Наступний платіж", - "next-payment-due": "Наступний платіж належне" + "next-payment-due": "Наступний платіж належне", + "no-categories": "Немає категорій", + "saved-amount-of": "врятований", + "over-saved-amount-of": "над збереженим", + "of-saving": "заощадження", + "set-saving-goals": "Встановити цілі економії категорії", + "edit-saving-goals": "Редагувати цілі збереження", + "saving-goals": "Збереження цілей", + "saving-limit-type": "Збереження типу межі", + "category-saving-goals": "Цілі економії категорії", + "saving": "Заощадження", + "spending": "Витрати", + "include-expense": "Витрата", + "include-expense-description-1": "Операції з доходів будуть включені в бюджет", + "include-expense-description-2": "Загальна сума бюджету витрат зменшиться з доходом", + "savings-budget": "Бюджет заощаджень", + "expense-budget": "Бюджет витрат", + "savings-budget-description-1": "Відстежуйте свій дохід та бюджет своїх заощаджень", + "expense-budget-description-1": "Відстежуйте свої витрати та бюджет" } \ No newline at end of file diff --git a/budget/assets/translations/generated/ur.json b/budget/assets/translations/generated/ur.json index c74fa981..0798b2f2 100644 --- a/budget/assets/translations/generated/ur.json +++ b/budget/assets/translations/generated/ur.json @@ -1011,5 +1011,23 @@ "credit-payment": "کریڈٹ ادائیگی", "add-payment": "ادائیگی شامل کریں", "next-payment": "اگلی ادائیگی", - "next-payment-due": "اگلی ادائیگی واجب الادا ہے" + "next-payment-due": "اگلی ادائیگی واجب الادا ہے", + "no-categories": "کوئی زمرہ نہیں ہے", + "saved-amount-of": "محفوظ", + "over-saved-amount-of": "سے زیادہ بچایا گیا", + "of-saving": "بچت کا", + "set-saving-goals": "زمرے کی بچت کے اہداف طے کریں", + "edit-saving-goals": "بچت کے اہداف میں ترمیم کریں", + "saving-goals": "اہداف کی بچت", + "saving-limit-type": "بچت کی حد کی قسم", + "category-saving-goals": "زمرہ کی بچت کے اہداف", + "saving": "بچت", + "spending": "خرچ کرنا", + "include-expense": "خرچہ", + "include-expense-description-1": "آمدنی کے لین دین کو بجٹ میں شامل کیا جائے گا", + "include-expense-description-2": "اخراجات کے بجٹ میں کل آمدنی میں کمی واقع ہوگی", + "savings-budget": "بچت کا بجٹ", + "expense-budget": "اخراجات کا بجٹ", + "savings-budget-description-1": "اپنی آمدنی کو ٹریک کریں اور اپنی بچت کو بجٹ دیں", + "expense-budget-description-1": "اپنے اخراجات کو ٹریک کریں اور اپنے اخراجات کو بجٹ دیں" } \ No newline at end of file diff --git a/budget/assets/translations/generated/vi.json b/budget/assets/translations/generated/vi.json index 03ef56cd..a921cb6c 100644 --- a/budget/assets/translations/generated/vi.json +++ b/budget/assets/translations/generated/vi.json @@ -1011,5 +1011,23 @@ "credit-payment": "Thanh toán tín dụng", "add-payment": "Thêm thanh toán", "next-payment": "Thanh toán tiếp theo", - "next-payment-due": "Thanh toán đến hạn tiếp theo" + "next-payment-due": "Thanh toán đến hạn tiếp theo", + "no-categories": "Không có loại", + "saved-amount-of": "được lưu", + "over-saved-amount-of": "được lưu quá nhiều", + "of-saving": "tiết kiệm", + "set-saving-goals": "Đặt mục tiêu tiết kiệm danh mục", + "edit-saving-goals": "Chỉnh sửa mục tiêu tiết kiệm", + "saving-goals": "Tiết kiệm mục tiêu", + "saving-limit-type": "Tiết kiệm loại giới hạn", + "category-saving-goals": "Mục tiêu tiết kiệm thể loại", + "saving": "Tiết kiệm", + "spending": "Chi tiêu", + "include-expense": "Chi phí", + "include-expense-description-1": "Giao dịch thu nhập sẽ được bao gồm trong ngân sách", + "include-expense-description-2": "Tổng ngân sách chi tiêu sẽ giảm theo thu nhập", + "savings-budget": "Ngân sách tiết kiệm", + "expense-budget": "Ngân sách chi phí", + "savings-budget-description-1": "Theo dõi thu nhập và ngân sách tiết kiệm của bạn", + "expense-budget-description-1": "Theo dõi chi phí của bạn và ngân sách chi tiêu của bạn" } \ No newline at end of file diff --git a/budget/assets/translations/generated/zh-Hant.json b/budget/assets/translations/generated/zh-Hant.json index 6047c4ec..28beaded 100644 --- a/budget/assets/translations/generated/zh-Hant.json +++ b/budget/assets/translations/generated/zh-Hant.json @@ -1011,5 +1011,23 @@ "credit-payment": "信用付款", "add-payment": "添加付款", "next-payment": "下一個付款", - "next-payment-due": "下一次付款應付" + "next-payment-due": "下一次付款應付", + "no-categories": "沒有類別", + "saved-amount-of": "保存", + "over-saved-amount-of": "過度保存", + "of-saving": "保存", + "set-saving-goals": "設置類別保存目標", + "edit-saving-goals": "編輯保存目標", + "saving-goals": "保存目標", + "saving-limit-type": "保存限制類型", + "category-saving-goals": "類別保存目標", + "saving": "保存", + "spending": "開支", + "include-expense": "費用", + "include-expense-description-1": "收入交易將包括在預算中", + "include-expense-description-2": "支出預算總計會隨收入而減少", + "savings-budget": "儲蓄預算", + "expense-budget": "費用預算", + "savings-budget-description-1": "跟踪您的收入並預算您的儲蓄", + "expense-budget-description-1": "跟踪您的費用並預算您的支出" } \ No newline at end of file diff --git a/budget/assets/translations/generated/zh.json b/budget/assets/translations/generated/zh.json index f3686f32..17c18326 100644 --- a/budget/assets/translations/generated/zh.json +++ b/budget/assets/translations/generated/zh.json @@ -1011,5 +1011,23 @@ "credit-payment": "信用付款", "add-payment": "添加付款", "next-payment": "下一个付款", - "next-payment-due": "下一次付款应付" + "next-payment-due": "下一次付款应付", + "no-categories": "没有类别", + "saved-amount-of": "保存", + "over-saved-amount-of": "过度保存", + "of-saving": "保存", + "set-saving-goals": "设置类别保存目标", + "edit-saving-goals": "编辑保存目标", + "saving-goals": "保存目标", + "saving-limit-type": "保存限制类型", + "category-saving-goals": "类别保存目标", + "saving": "保存", + "spending": "开支", + "include-expense": "费用", + "include-expense-description-1": "收入交易将被添加至该预算", + "include-expense-description-2": "支出预算统计将随收入减少", + "savings-budget": "储蓄预算", + "expense-budget": "费用预算", + "savings-budget-description-1": "跟踪您的收入并预算您的储蓄", + "expense-budget-description-1": "跟踪您的费用并预算您的支出" } \ No newline at end of file diff --git a/budget/assets/translations/translations.csv b/budget/assets/translations/translations.csv index 4363d04b..1697c5c6 100644 --- a/budget/assets/translations/translations.csv +++ b/budget/assets/translations/translations.csv @@ -21,7 +21,7 @@ "name-placeholder","Name","Nom","Nombre","名称","नाम","اسم","Nome","Имя","名前","Name","이름","İsim","Nome","Tên","Nazwa","Naam","ชื่อ","název","নাম","Nama","نام","పేరు","नाव","பெயர்","નામ","Назва","Pangalan","Nama","Nume","Név","Ονομα","namn","Navn","Navn","Nimi","שֵׁם","نام","പേര്","Назив","Jina","Име","姓名" "enter-name","Enter Name","Entrer le nom","Ingrese su nombre","输入名称","नाम दर्ज करें","أدخل الاسم","Insira o nome","Введите имя","名前を入力","Name eingeben","이름을 입력하시오","İsim giriniz","Inserisci il nome","Nhập tên","Wprowadź imię","Voer naam in","ใส่ชื่อ","Napište jméno","নাম লিখুন","Masukkan nama","نام درج کریں","పేరు నమోదు చేయండి","नाव प्रविष्ट करा","பெயரை உள்ளிடுக","નામ દાખલ કરવું","Введіть назву","Ilagay ang pangalan","Masukkan nama","Introdu numele","Írja be a nevét","Εισαγάγομαι","Skriv namn","Indtast navn","Skriv inn navn","Antaa nimi","הכנס שם","نام را وارد کنید","പേര് നൽകുക","Унесите наѕив","Ingiza Jina","Добави име","輸入名字" "nickname-placeholder","Nickname","Surnom","Apodo","昵称","उपनाम","كُنية","Apelido","Никнейм","ニックネーム","Spitzname","별명","Takma ad","Nickname","Biệt danh","Pseudonim","Bijnaam","ชื่อเล่น","Přezdívka","ডাকনাম","Nama panggilan","عرفی نام","మారుపేరు","टोपणनाव","புனைப்பெயர்","ઉપનામ","Прізвисько","Palayaw","Nama samaran","Poreclă","Becenév","Παρατσούκλι","Smeknamn","Kælenavn","Kallenavn","Nimimerkki","כינוי","نام مستعار","വിളിപ്പേര്","Надимак","Jina la utani","Прякор","暱稱" -"notes-placeholder","Notes","Remarques","Notas","备注","टिप्पणियाँ","ملاحظات","Notas","Примечания","ノート","Anmerkungen","노트","Notalar","Appunti","Ghi chú","Notatki","Aantekeningen","หมายเหตุ","Poznámky","মন্তব্য","Catatan","نوٹ","గమనికలు","नोट्स","குறிப்புகள்","નોંધ","Нотатки","Mga Tala","Nota","Note","Jegyzet","Σημειώσεις","Anteckningar","Noter","Merknader","Muistiinpanot","הערות","یادداشت","കുറിപ്പുകൾ","Белешке","Vidokezo","Бележки","筆記" +"notes-placeholder","Notes","Remarques","Notas","备注","टिप्पणियाँ","ملاحظات","Notas","Примечания","ノート","Notizen","노트","Notalar","Appunti","Ghi chú","Notatki","Aantekeningen","หมายเหตุ","Poznámky","মন্তব্য","Catatan","نوٹ","గమనికలు","नोट्स","குறிப்புகள்","નોંધ","Нотатки","Mga Tala","Nota","Note","Jegyzet","Σημειώσεις","Anteckningar","Noter","Merknader","Muistiinpanot","הערות","یادداشت","കുറിപ്പുകൾ","Белешке","Vidokezo","Бележки","筆記" "view-more","View More","Voir plus","Ver más","查看更多","और देखें","عرض المزيد","Ver mais","Просмотреть больше","もっと見る","Mehr sehen","더보기","Daha fazla göster","Mostra di più","Xem thêm","Zobacz więcej","Bekijk meer","ดูเพิ่มเติม","Ukázat více","আরো দেখুন","Lihat lebih banyak","مزید دیکھیں","మరిన్ని చూడండి","अधिक प i हा","மேலும் பார்க்க","વધુ જોવો","Дивитись більше","Tingnan pa","Lihat lebih lanjut","Vezi mai mult","Mutass többet","Δείτε περισσότερα","Visa mer","Se mere","Se mer","Katso lisää","ראה עוד","بیشتر ببینید","കൂടുതൽ കാണു","Погледај још","Ona zaidi","Виж повече","查看更多" "view-all-transactions","View All Transactions","Afficher toutes les transactions","Ver todas las transacciones","查看所有交易","सभी लेनदेन देखें","عرض جميع المعاملات","Ver todas as transações","Просмотреть все транзакции","すべてのトランザクションを表示します","Alle Transaktionen anzeigen","모든 트랜잭션을보십시오","Tüm işlemleri görüntüle","Mostra tutte le transazioni","Xem tất cả giao dịch","Zobacz wszystkie transakcje","Bekijk alle transacties","ดูธุรกรรมทั้งหมด","Zobrazit všechny transakce","সমস্ত লেনদেন দেখুন","Lihat semua transaksi","تمام لین دین دیکھیں","అన్ని లావాదేవీలను చూడండి","सर्व व्यवहार पहा","அனைத்து பரிவர்த்தனைகளையும் காண்க","બધા વ્યવહાર જુઓ","Переглянути всі трансакції","Tingnan ang lahat ng mga transaksyon","Lihat semua urus niaga","Vizualizați toate tranzacțiile","Az összes tranzakció megtekintése","Προβολή όλων των συναλλαγών","Visa alla transaktioner","Se alle transaktioner","Se alle transaksjoner","Katso kaikki tapahtumat","צפה בכל העסקאות","مشاهده همه معاملات","എല്ലാ ഇടപാടുകളും കാണുക","Погледај све трансакције","Tazama Miamalazote","Виж всички трансакции","查看所有交易" "expense","Expense","Dépenses","Gasto","支出","व्यय","مصروف","Despesa","Расход","費用","Kosten","비용","Masraf","Spesa","Chi phí","Koszt","Kosten","ค่าใช้จ่าย","Výdaje","ব্যয়","Pengeluaran","خرچہ","ఖర్చు","खर्च","செலவு","ખર્ચ","Витрата","Gastos","Perbelanjaan","Cheltuieli","Költség","Δαπάνη","Bekostnad","Bekostning","Kostnader","Kulut","הוֹצָאָה","هزینه","ചെലവ്","Трошак","Gharama","Разход","支出" @@ -30,7 +30,7 @@ "notifications-disabled-description","Tap here to enable notifications in your device's settings page","Appuyer ici pour activer les notifications sur la page des paramètres du téléphone","Toque aquí para habilitar notificaciones en la página de configuración del teléfono","点击此处以在手机设置页面中启用通知","फोन के सेटिंग पेज में सूचनाओं को सक्षम करने के लिए यहां टैप करें","اضغط هنا لتمكين الإخطارات في صفحة إعدادات الهاتف","Toque aqui para ativar as notificações na página de configurações do telefone","Нажмите здесь, чтобы включить уведомления","ここをタップして、電話の設定ページで通知を有効にします","Tippen Sie hier, um Benachrichtigungen in den Telefon-Einstellungen zu aktivieren","전화 설정 페이지에서 알림을 활성화하려면 여기를 누릅니다.","Telefonun Ayarları sayfasındaki bildirimleri etkinleştirmek için buraya dokunun","Tocca qui per abilitare le notifiche nella pagina delle impostazioni del telefono","Nhấn vào đây để bật thông báo trong trang thiết đặt điện thoại","Stuknij tutaj, aby włączyć powiadomienia na stronie Ustawienia telefonu","Tik hier om meldingen in te schakelen op de pagina Instellingen van de telefoon","แตะที่นี่เพื่อเปิดใช้งานการแจ้งเตือนในหน้าการตั้งค่าของโทรศัพท์","Klepnutím zde povolíte oznámení na stránce Nastavení telefonu","ফোনের সেটিংস পৃষ্ঠায় বিজ্ঞপ্তিগুলি সক্ষম করতে এখানে আলতো চাপুন","Ketuk di sini untuk mengaktifkan pemberitahuan di halaman Pengaturan Telepon","فون کے ترتیبات کے صفحے میں اطلاعات کو فعال کرنے کے لئے یہاں ٹیپ کریں","ఫోన్ సెట్టింగుల పేజీలో నోటిఫికేషన్‌లను ప్రారంభించడానికి ఇక్కడ నొక్కండి","फोनच्या सेटिंग्ज पृष्ठावरील सूचना सक्षम करण्यासाठी येथे टॅप करा","தொலைபேசியின் அமைப்புகள் பக்கத்தில் அறிவிப்புகளை இயக்க இங்கே தட்டவும்","ફોનના સેટિંગ્સ પૃષ્ઠમાં સૂચનાઓ સક્ષમ કરવા માટે અહીં ટેપ કરો","Натисніть тут, щоб увімкнути сповіщення на сторінці налаштувань телефону","Tapikin dito upang paganahin ang mga abiso sa pahina ng Mga Setting ng Telepono","Ketik di sini untuk membolehkan pemberitahuan di halaman Tetapan Telefon","Atingeți aici pentru a activa notificările din pagina de setări a telefonului","Érintse meg itt az értesítések engedélyezéséhez a telefon beállításainak oldalán","Πατήστε εδώ για να ενεργοποιήσετε τις ειδοποιήσεις στη σελίδα ρυθμίσεων του τηλεφώνου","Tryck här för att aktivera aviseringar på sidan av telefonens inställningar","Tryk her for at aktivere meddelelser på telefonens indstillinger","Trykk her for å aktivere varsler i telefonens innstillingsside","Napauta TÄSTÄ ottaaksesi käyttöön ilmoitukset puhelimen asetussivulla","הקש כאן כדי לאפשר התראות בדף ההגדרות של הטלפון","برای فعال کردن اعلان ها در صفحه تنظیمات تلفن در اینجا ضربه بزنید","ഫോണിന്റെ ക്രമീകരണ പേജിലെ അറിയിപ്പുകൾ പ്രാപ്തമാക്കുന്നതിന് ഇവിടെ ടാപ്പുചെയ്യുക","Додирните овде да бисте омогућили обавештења у страници поставки телефона","bonyeza hapa ili kuwezesha arifa kwenye ukurasa wa Mipangilio ya Simu","Докоснете тук, за да активирате известията в настройките на телефона","點擊此處以在手機設置頁面中啟用通知" "greetings-general-1","Hello","Bonjour","Hola","你好","नमस्ते","مرحبًا","Olá","Привет","こんにちは","Hallo","안녕하세요","Merhaba","Ciao","Xin chào","Cześć","Hallo","สวัสดี","Ahoj","হ্যালো","Halo","ہیلو","హలో","नमस्कार","வணக்கம்","નમસ્તે","Привіт","Kamusta","Helo","Buna ziua","Helló","Γειά σου","Hallå","Hej","Hallo","Hei","שלום","سلام","ഹലോ","Здраво","Hello","Здравей","你好" "greetings-general-2","Hi there","Bonjour à tous","Hola","你好呀","नमस्ते","أهلاً","Olá","Приветствую","やあ","Hi","안녕하세요","Merhaba","Ciao","Chào ấy","Cześć","Hoi","สวัสดี","Ahoj","হাই আছে","Hai, yang di sana","ہیلو وہاں","హాయ్","नमस्कार","ஹாய்","હાય ત્યાં","Привіт","Kumusta","Hai sana","Bună","Szia","Γεια σου","Hallå där","Hej","Hei der","Hei siellä","שלום שם","سلام","ഹേയ്, അവിടെയുണ്ടോ","здраво","habari","Здрасти","你好呀" -"greetings-general-3","Hi","Salut","Hola","你好","नमस्ते","أهلاً","Oi","Как настроение?","やあ","Hallo","안녕","MERHABA","Ciao","Chào","Cześć","Hoi","สวัสดี","Ahoj","ওহে","Hai","ہائے","హాయ్","हाय","வணக்கம்","એક મહાન","Привіт","Hi","Hai","Bună","Szia","γεια","Hej","Hej","Hei","Hei","היי","سلام","ധികം","Здраво","Hi","Здрасти","你好" +"greetings-general-3","Hi","Salut","Hola","你好","नमस्ते","أهلاً","Oi","Как настроение?","やあ","Hi","안녕","MERHABA","Ciao","Chào","Cześć","Hoi","สวัสดี","Ahoj","ওহে","Hai","ہائے","హాయ్","हाय","வணக்கம்","એક મહાન","Привіт","Hi","Hai","Bună","Szia","γεια","Hej","Hej","Hei","Hei","היי","سلام","ധികം","Здраво","Hi","Здрасти","你好" "greetings-general-4","How are you","Comment allez-vous","Cómo estás","你好吗","आप कैसे हैं","كيف حالك","Como vai você?","Как дела?","元気ですか","Wie geht es dir","어떻게 지내세요","Nasılsın","Come stai","Bạn có khỏe không","Jak się masz","Hoe is het","คุณเป็นอย่างไร","Jak se máte","আপনি কেমন আছেন","Apa kabarmu","آپ کیسے ہو","మీరు ఎలా ఉన్నారు","तू कसा आहेस","எப்படி இருக்கிறீர்கள்","તમે કેમ છો","Як справи","Kamusta ka","Apa khabar","Ce mai faci","Hogy vagy","Πώς είσαι","Hur mår du","Hvordan har du det","Hvordan har du det","Mitä kuuluu","מה שלומך","چطور هستید","സുഖമാണോ","Како си","Habari yako","Как си","你好嗎" "greetings-general-5","What's up","Quoi de neuf","Qué pasa","你还好吗","क्या चल रहा है","ما الجديد ؟","E aí","Как жизнь?","どうしたの","Was geht","무슨 일이야","Naber","Come stai","Có gì mới không","Co słychać","Wat is er","ว่าไง","Co se děje","কি খবর","Ada apa","کیا چل رہا ہے","ఏమిటి సంగతులు","काय चालले आहे","என்ன விஷயம்","શું છે","Як справи","Anong meron","Apa khabar","Care-i treaba","Mi a helyzet","Ποια είναι τα νέα σου","Vad händer","Hvad så","Hva skjer","Miten menee","מה קורה","چه خبر","എന്തുണ്ട് വിശേഷം","Шта има","Vipi","Как е","這是怎麼回事" "greetings-general-6","Hello there","Bonjour","Hola","你好呀","नमस्ते","أهلاً بك","Olá","Как ваши дела?","こんにちは","Hallo","안녕","Selamlar","Ciao","Xin chào ấy","Witaj","Hallo daar","สวัสดี","Ahoj","হ্যালো","Halo","سنو ذرا","ఉన్నారా","नमस्कार","வணக்கம்","ત્યાં","Привіт","Hello there","apa khabar di sana","Salutare","Szia","Γειά σου","Hej där","Hej med dig","Hei der","Hei siellä","שלום לך","سلام","നീ അവിടെയുണ്ടോ","Поздрав","habari","Здравей","你好呀" @@ -84,7 +84,7 @@ "theme","Theme","Thème","Tema","主题","थीम","سمة","Tema","Тема","テーマ","Thema","주제","Tema","Tema","Chủ đề","Motyw","Thema","ธีม","Téma","থিম","Tema","خیالیہ","థీమ్","थीम","தீம்","વિષય","Тема","Tema","Tema","Temă","Téma","Θέμα","Tema","Tema","Tema","Teema","נושא","موضوع","പതിപാദം","Тема","Mada","Тема","主題" "accent-color","Accent Color","Couleur d'accentuation","Acentuar el color","强调色","विशेष रंग","لون لهجة","Cor de destaque","Акцентный цвет","アクセントの色","Akzentfarbe","악센트 색상","Aksan rengi","Colore accento","Màu nhấn","Akcent koloru","Accent kleur","สีเน้น","Accent Color","সুরের ধাপের রঙ","Aksen warna","لہجہ رنگ","యాస రంగు","उच्चारण रंग","உச்சரிப்பு நிறம்","ઉચ્ચારણ રંગ","Акцентний колір","Kulay ng accent","Warna aksen","Culoare de accent","Akcentus szín","Έμφαση στο χρώμα","Accentfärg","Accentfarve","Aksentfarge","Korostusväri","צבע הדגשה","رنگ لهجه","ആക്സന്റ് നിറം","Боја нагласности","Rangi ya lafudhi","Цвят на акцент","強調色" "accent-color-description","Select a color theme for the interface","Sélectionnez un thème de couleur pour l'interface","Seleccione un tema de color para la interfaz","选择一种界面色彩主题","इंटरफ़ेस के लिए एक रंग का चयन करें","حدد سمة ملونة للواجهة","Selecione um tema de cor para a interface","Выберите цветную тему для интерфейса","インターフェイスのカラーテーマを選択します","Wählen Sie ein Farbthema für die Schnittstelle aus","인터페이스의 색상 테마를 선택하십시오","Arayüz için bir renk teması seçin","Seleziona un tema del colore per l'interfaccia","Chọn một chủ đề màu cho giao diện","Wybierz kolor motywu dla interfejsu","Selecteer een kleurenthema voor de interface","เลือกธีมสีสำหรับอินเทอร์เฟซ","Vyberte barevné téma pro rozhraní","ইন্টারফেসের জন্য একটি রঙ থিম নির্বাচন করুন","Pilih tema warna untuk antarmuka","انٹرفیس کے لئے رنگین تھیم منتخب کریں","ఇంటర్ఫేస్ కోసం రంగు థీమ్‌ను ఎంచుకోండి","इंटरफेससाठी रंग थीम निवडा","இடைமுகத்திற்கான வண்ண தீம் தேர்ந்தெடுக்கவும்","ઇન્ટરફેસ માટે રંગ થીમ પસંદ કરો","Виберіть кольорову тему для інтерфейсу","Pumili ng isang tema ng kulay para sa interface","Pilih tema warna untuk antara muka","Selectați o temă de culoare pentru interfață","Válasszon egy színes témát az interfészhez","Επιλέξτε ένα θέμα χρώματος για τη διεπαφή","Välj ett färgtema för gränssnittet","Vælg et farvetema for grænsefladen","Velg et fargetema for grensesnittet","Valitse rajapinnan väriteema","בחר נושא צבע לממשק","یک موضوع رنگی را برای رابط انتخاب کنید","ഇന്റർഫേസിനായി ഒരു കളർ തീം തിരഞ്ഞെടുക്കുക","Изаберите тему боја за интерфејс","Chagua mandhari ya rangi kwa interface","Изберете цветна тема за интерфейса","選擇一個顏色主題" -"material-you","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Материјал ти","Nyenzo wewe","Материал ти","Material You" +"material-you","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Dein Material","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Material You","Материјал ти","Nyenzo wewe","Материал ти","Material You" "material-you-description","Use a colorful expressive interface","Utilisez une interface expressive colorée","Use una interfaz expresiva colorida","让界面变得多彩而有表现力","एक रंगीन अभिव्यंजक इंटरफ़ेस का उपयोग करें","استخدم واجهة تعبيرية ملونة","Use uma interface expressiva colorida","Используйте красивый, выразительный интерфейс","カラフルな表現力のあるインターフェイスを使用します","Verwenden Sie eine farbenfrohe ausdrucksstarke Schnittstelle","다채로운 표현 인터페이스를 사용하십시오","Renkli bir etkileyici arayüz kullanın","Usa un'interfaccia espressiva colorata","Sử dụng giao diện biểu cảm đầy màu sắc","Użyj kolorowego ekspresyjnego interfejsu","Gebruik een kleurrijke expressieve interface","ใช้อินเทอร์เฟซที่แสดงออกสีสันสดใส","Použijte barevné expresivní rozhraní","একটি রঙিন অভিব্যক্তিপূর্ণ ইন্টারফেস ব্যবহার করুন","Gunakan antarmuka ekspresif yang penuh warna","رنگین اظہار خیال انٹرفیس استعمال کریں","రంగురంగుల వ్యక్తీకరణ ఇంటర్ఫేస్ ఉపయోగించండి","रंगीबेरंगी अर्थपूर्ण इंटरफेस वापरा","வண்ணமயமான வெளிப்படையான இடைமுகத்தைப் பயன்படுத்தவும்","રંગબેરંગી અર્થસભર ઇન્ટરફેસનો ઉપયોગ કરો","Використовувати виразний колір інтерфейсу","Gumamit ng isang makukulay na interface na nagpapahayag","Gunakan antara muka ekspresif yang berwarna -warni","Folosiți o interfață expresivă colorată","Használjon színes kifejező felületet","Χρησιμοποιήστε ένα πολύχρωμο εκφραστικό περιβάλλον","Använd ett färgstarkt uttrycksfullt gränssnitt","Brug en farverig ekspressiv grænseflade","Bruk et fargerikt ekspressivt grensesnitt","Käytä värikkäitä ilmeikäs käyttöliittymä","השתמש בממשק אקספרסיבי צבעוני","از یک رابط اکسپرس رنگارنگ استفاده کنید","വർണ്ണാഭമായ പ്രകടന ഇന്റർഫേസ് ഉപയോഗിക്കുക","Користите живописни експресивни интерфејс","Tumia interface ya kupendeza ya kupendeza","Използвайте цветен експресивен интерфейс","使用彩色界面" "theme-mode","Theme Mode","Mode thème","Modo de tema","主题模式","थीम मोड","وضع الموضوع","Modo de tema","Тема приложения","テーマモード","Themenmodus","테마 모드","Tema modu","Modalità tema","Chế độ chủ đề","Tryb motywu","Themamodus","โหมดธีม","Režim motivu","থিম মোড","Mode tema","تھیم موڈ","థీమ్ మోడ్","थीम मोड","தீம் பயன்முறை","વિષય -દર","Тема","Mode ng tema","Mod tema","Mod tematic","Témamódolás","Λειτουργία θεμάτων","Temaläge","Tema -tilstand","Temamodus","Teematila","מצב נושא","حالت تم","തീം മോഡ്","Режим теме","Njia ya mandhari","Тематичен режим","主題模式" "preferences","Preferences","Préférences","Preferencias","偏好设置","पसंद","التفضيلات","Preferências","Предпочтения","環境設定","Vorlieben","선호도","Tercihler","Preferenze","Sở thích","Preferencje","Voorkeuren","การตั้งค่า","Preference","পছন্দসমূহ","Preferensi","ترجیحات","ప్రాధాన్యతలు","प्राधान्ये","விருப்பத்தேர்வுகள்","અગ્રતા","Уподобання","Kagustuhan","Keutamaan","Preferințe","preferenciák","Προτιμήσεις","Inställningar","Præferencer","Preferanser","Mieltymykset","העדפות","اولویت ها","മുൻഗണനകൾ","Преференција","Upendeleo","Предпочитания","編好設定" @@ -378,7 +378,7 @@ "support-the-developer","Support the developer","Soutenir le développeur","Apoyar al desarrollador","支持开发人员","डेवलपर का समर्थन करें","دعم المطور","Apoie o desenvolvedor","Поддержите разработчика","開発者をサポートします","Unterstützen Sie den Entwickler","개발자를 지원하십시오","Geliştiriciyi destekleyin","Supportare lo sviluppatore","Hỗ trợ nhà phát triển","Wspieraj programistę","Steun de ontwikkelaar","สนับสนุนนักพัฒนา","Podpořte vývojáře","বিকাশকারীকে সমর্থন করুন","Mendukung pengembang","ڈویلپر کی حمایت کریں","డెవలపర్‌కు మద్దతు ఇవ్వండి","विकसकास समर्थन द्या","டெவலப்பரை ஆதரிக்கவும்","વિકાસકર્તાને ટેકો આપો","Підтримайте розробника","Suportahan ang developer","Menyokong pemaju","Sprijină dezvoltatorul","Támogassa a fejlesztőt","Υποστήριξη του προγραμματιστή","Stödja utvecklaren","Støtt udvikleren","Støtt utvikleren","Tukea kehittäjää","תמכו במפתח","از توسعه دهنده پشتیبانی کنید","ഡവലപ്പറിനെ പിന്തുണയ്ക്കുക","Подржати програмера","Kusaidia msanidi programu","Подкрепете разработчика","支持開發人員" "support-the-developer-description","More than 2 years of development","Plus de 2 ans de développement","Más de 2 años de desarrollo","开发历时 2 年多","2 साल से अधिक विकास","أكثر من عامين من التنمية","Mais de 2 anos de desenvolvimento","Более 2 лет развития","2年以上の開発","Mehr als 2 Jahre Entwicklung","2 년 이상의 개발","2 yıldan fazla gelişme","Più di 2 anni di sviluppo","Hơn 2 năm phát triển","Ponad 2 lata rozwoju","Meer dan 2 jaar ontwikkeling","การพัฒนามากกว่า 2 ปี","Více než 2 roky vývoje","উন্নয়নের 2 বছরেরও বেশি সময়","Lebih dari 2 tahun pembangunan","ترقی کے 2 سال سے زیادہ","2 సంవత్సరాల అభివృద్ధికి పైగా","2 वर्षांहून अधिक विकास","2 ஆண்டுகளுக்கும் மேலான வளர்ச்சி","વિકાસના 2 વર્ષથી વધુ","Більше 2 років розвитку","Higit sa 2 taon ng pag -unlad","Lebih dari 2 tahun pembangunan","Mai mult de 2 ani de dezvoltare","Több mint 2 éves fejlesztés","Περισσότερα από 2 χρόνια ανάπτυξης","Mer än 2 års utveckling","Mere end 2 års udvikling","Mer enn 2 års utvikling","Yli 2 vuoden kehitys","יותר משנתיים של פיתוח","بیش از 2 سال توسعه","2 വർഷത്തിലധികം വികസനത്തിന്","Више од 2 године развоја","Zaidi ya miaka 2 ya maendeleo","Повече от 2 години развитие","超過2年的發展" "unlimited-budgets-and-goals","Unlimited budgets","Budgets illimités","Presupuestos ilimitados","无限制的预算数量","असीमित बजट","ميزانيات غير محدودة","Orçamentos ilimitados","Неограниченные бюджеты","無制限の予算","Unbegrenzte Budgets","무제한 예산","Sınırsız Bütçeler","Budget illimitati","Ngân sách không giới hạn","Nieograniczone budżety","Onbeperkte budgetten","งบประมาณไม่ จำกัด","Neomezené rozpočty","সীমাহীন বাজেট","Anggaran yang tidak terbatas","لامحدود بجٹ","అపరిమిత బడ్జెట్లు","अमर्यादित बजेट","வரம்பற்ற வரவு செலவுத் திட்டங்கள்","અમર્યાદિત બજેટ","Необмежені бюджети","Walang limitasyong mga badyet","Belanjawan tanpa had","Bugete nelimitate","Korlátlan költségvetés","Απεριόριστοι προϋπολογισμοί","Obegränsade budgetar","Ubegrænsede budgetter","Ubegrensede budsjetter","Rajoittamaton budjetti","תקציבים בלתי מוגבלים","بودجه نامحدود","പരിധിയില്ലാത്ത ബജറ്റുകൾ","Неограничени буџети","Bajeti zisizo na kikomo","Неограничени бюджети","無限預算" -"unlimited-budgets-and-goals-description","Create more than 1 budget, goal, or loan","Créer plus d'un budget, un objectif ou un prêt","Crear más de 1 presupuesto, objetivo o préstamo","创建超过1个预算,目标或贷款","1 से अधिक बजट, लक्ष्य या ऋण बनाएं","قم بإنشاء أكثر من 1 ميزانية أو هدف أو قرض","Crie mais de 1 orçamento, objetivo ou empréstimo","Создать более 1 бюджета, цели или займа","1つ以上の予算、目標、またはローンを作成する","Erstellen Sie mehr als 1 Budget, Ziel oder Darlehen","예산, 목표 또는 대출 이상 생성","1'den fazla bütçe, hedef veya kredi oluşturun","Creare più di 1 budget, obiettivo o prestito","Tạo nhiều hơn 1 ngân sách, mục tiêu hoặc khoản vay","Utwórz więcej niż 1 budżet, cel lub pożyczkę","Maak meer dan 1 budget, doel of lening","สร้างมากกว่า 1 งบประมาณเป้าหมายหรือเงินกู้","Vytvořte více než 1 rozpočet, cíl nebo půjčku","1 টিরও বেশি বাজেট, লক্ষ্য বা loan ণ তৈরি করুন","Ciptakan lebih dari 1 anggaran, tujuan, atau pinjaman","1 سے زیادہ بجٹ ، گول ، یا قرض بنائیں","1 కంటే ఎక్కువ బడ్జెట్, లక్ష్యం లేదా రుణాన్ని సృష్టించండి","1 हून अधिक अर्थसंकल्प, ध्येय किंवा कर्ज तयार करा","1 க்கும் மேற்பட்ட பட்ஜெட், இலக்கு அல்லது கடனை உருவாக்கவும்","1 થી વધુ બજેટ, ધ્યેય અથવા લોન બનાવો","Створіть більше 1 бюджету, мети чи позики","Lumikha ng higit sa 1 badyet, layunin, o pautang","Buat lebih daripada 1 anggaran, matlamat, atau pinjaman","Creați mai mult de 1 buget, obiectiv sau împrumut","Hozzon létre több mint 1 költségvetést, célt vagy kölcsönt","Δημιουργήστε περισσότερους από 1 προϋπολογισμό, στόχο ή δάνειο","Skapa mer än 1 budget, mål eller lån","Opret mere end 1 budget, mål eller lån","Lag mer enn 1 budsjett, mål eller lån","Luo enemmän kuin yksi budjetti, tavoite tai laina","צור יותר מ- 1 תקציב, יעד או הלוואה","بیش از 1 بودجه ، هدف یا وام ایجاد کنید","1 ബജറ്റ്, ലക്ഷ്യം, വായ്പ എന്നിവ സൃഷ്ടിക്കുക","Створите више од 1 буџета, циља или кредита","Unda zaidi ya bajeti 1, lengo, au mkopo","Създайте повече от 1 бюджет, цел или заем","創建超過1個預算,目標或貸款" +"unlimited-budgets-and-goals-description","Create more than 1 budget, goal, or loan","Créer plus d'un budget, un objectif ou un prêt","Crear más de 1 presupuesto, objetivo o préstamo","创建超过1个预算,目标或贷款","1 से अधिक बजट, लक्ष्य या ऋण बनाएं","قم بإنشاء أكثر من 1 ميزانية أو هدف أو قرض","Crie mais de 1 orçamento, objetivo ou empréstimo","Создать более 1 бюджета, цели или займа","1つ以上の予算、目標、またはローンを作成する","Erstellen Sie mehr als 1 Budget, Ziel oder Darlehen","예산, 목표 또는 대출 이상 생성","1'den fazla bütçe, hedef veya kredi oluşturun","Creare più di 1 budget, obiettivo o prestito","Tạo nhiều hơn 1 ngân sách, mục tiêu hoặc khoản vay","Utwórz więcej niż 1 budżet, cel lub pożyczkę","Maak meer dan 1 budget, doel of lening","สร้างมากกว่า 1 งบประมาณเป้าหมายหรือเงินกู้","Vytvořte více než 1 rozpočet, cíl nebo půjčku","1 টিরও বেশি বাজেট, লক্ষ্য বা loan ণ তৈরি করুন","Ciptakan lebih dari 1 anggaran, tujuan, atau pinjaman","1 سے زیادہ بجٹ ، گول ، یا قرض بنائیں","1 కంటే ఎక్కువ బడ్జెట్, లక్ష్యం లేదా రుణాన్ని సృష్టించండి","1 हून अधिक अर्थसंकल्प, ध्येय किंवा कर्ज तयार करा","1 க்கும் மேற்பட்ட பட்ஜெட், இலக்கு அல்லது கடனை உருவாக்கவும்","1 થી વધુ બજેટ, ધ્યેય અથવા લોન બનાવો","Створити більше 1 бюджету, мети чи позики","Lumikha ng higit sa 1 badyet, layunin, o pautang","Buat lebih daripada 1 anggaran, matlamat, atau pinjaman","Creați mai mult de 1 buget, obiectiv sau împrumut","Hozzon létre több mint 1 költségvetést, célt vagy kölcsönt","Δημιουργήστε περισσότερους από 1 προϋπολογισμό, στόχο ή δάνειο","Skapa mer än 1 budget, mål eller lån","Opret mere end 1 budget, mål eller lån","Lag mer enn 1 budsjett, mål eller lån","Luo enemmän kuin yksi budjetti, tavoite tai laina","צור יותר מ- 1 תקציב, יעד או הלוואה","بیش از 1 بودجه ، هدف یا وام ایجاد کنید","1 ബജറ്റ്, ലക്ഷ്യം, വായ്പ എന്നിവ സൃഷ്ടിക്കുക","Створите више од 1 буџета, циља или кредита","Unda zaidi ya bajeti 1, lengo, au mkopo","Създайте повече от 1 бюджет, цел или заем","創建超過1個預算,目標或貸款" "past-budget-periods","Past budget periods","Périodes budgétaires passées","Períodos presupuestarios pasados","过往预算周期","पिछले बजट अवधि","فترات الميزانية السابقة","Períodos orçamentários anteriores","Прошлые бюджетные периоды","過去の予算期間","Vergangene Haushaltszeiten","과거 예산 기간","Geçmiş bütçe dönemleri","Periodi di bilancio passati","Các chu kỳ ngân sách trước đây","Okresy budżetowe","Verleden budgetperioden","ระยะเวลางบประมาณที่ผ่านมา","Minulá rozpočtová období","অতীত বাজেটের সময়কাল","Periode anggaran sebelumnya","گذشتہ بجٹ کے ادوار","గత బడ్జెట్ కాలాలు","मागील बजेट कालावधी","கடந்த பட்ஜெட் காலங்கள்","પાછલો અંદાજપત્ર","Минулі бюджетні періоди","Mga nakaraang panahon ng badyet","Tempoh belanjawan yang lalu","Perioade bugetare trecute","A múlt költségvetési periódusai","Προηγούμενες περιόδους προϋπολογισμού","Tidigare budgetperioder","Tidligere budgetperioder","Tidligere budsjettperioder","Aikaisemmat budjettijaksot","תקופות תקציב בעבר","دوره بودجه گذشته","കഴിഞ്ഞ ബജറ്റ് കാലയളവുകൾ","Прошли буџетски периоди","Vipindi vya bajeti vya zamani","Минали бюджетни периоди","過去的預算期" "past-budget-periods-description","View spending breakdowns of past periods","Voir les répartitions de dépenses des périodes passées","Ver desgloses de gastos de períodos pasados","查看过去周期的消费解析","पिछले अवधियों के खर्च के टूटने को देखें","عرض انتفاخات الإنفاق من الفترات الماضية","Ver quebras de gastos dos períodos anteriores","Просмотреть описание прошлых бюджетных периодов","過去の期間の支出の内訳を表示します","Zeigen Sie Ausgabenausgaben in den vergangenen Perioden an","과거 기간의 지출 붕괴를 봅니다","Geçmiş dönemlerin harcama arızalarını görüntüleyin","Visualizzare le ripartizioni di spesa dei periodi passati","Xem sự cố chi tiêu của các giai đoạn trong quá khứ","Zobacz załamania wydatków z poprzednich okresów","Bekijk het uitgeven van afbraak van afgelopen periodes","ดูการใช้จ่ายในช่วงเวลาที่ผ่านมา","Zobrazit poruchy výdajů minulých období","বিগত পিরিয়ডের ব্যয় ব্রেকডাউনগুলি দেখুন","Lihat perincian pengeluaran dari periode masa lalu","گذشتہ ادوار کے اخراجات میں خرابی دیکھیں","గత కాలాల ఖర్చు విచ్ఛిన్నతను చూడండి","मागील कालावधीचे खर्च ब्रेकडाउन पहा","கடந்த காலங்களின் செலவு முறிவுகளைக் காண்க","પાછલા સમયગાળાના ખર્ચના ભંગાણ જુઓ","Переглянути витрати на витрати на минулі періоди","Tingnan ang mga pagbagsak ng paggastos ng mga nakaraang panahon","Lihat perbelanjaan kerosakan pada masa lalu","Vizualizați defalcările de cheltuieli ale perioadelor trecute","Tekintse meg az elmúlt időszakok kiadásának bontását","Προβολή κατανομής δαπανών των προηγούμενων περιόδων","Visa utgifter för utgifter från tidigare perioder","Se udgifter til nedbrydninger af tidligere perioder","Se forkoblinger av tidligere perioder","Näytä menojen jakautumiset menneistä ajanjaksoista","צפה בהוצאות התקלות של תקופות עבר","مشاهده خریدهای مربوط به دوره های گذشته","കഴിഞ്ഞ കാലഘട്ടങ്ങളുടെ ചെലവ് തകരുകൾ കാണുക","Погледајте пробијање прошлих прометних периода","Angalia matumizi ya kuvunjika kwa vipindi vya zamani","Преглед на разрушаването на разходите от минали периоди","查看過去時期的支出分解" "unlimited-color-picker","Unlimited color picker","Choix de couleurs illimité","Seleccionador de color ilimitado","无限制的色彩选择器","असीमित रंग पिकर","منتقي ألوان غير محدود","Seletor de cores ilimitado","Неограниченный выбор цвета","無制限のカラーピッカー","Unbegrenzter Farbwähler","무제한 컬러 피커","Sınırsız Renk Seçici","Selettore di colori illimitato","Bộ chọn màu không giới hạn","Nieograniczony wybór kolorów","Onbeperkte kleurenkiezer","ตัวเลือกสีไม่ จำกัด","Neomezený výběr barev","সীমাহীন রঙ বাছাইকারী","Pemetik warna yang tidak terbatas","لامحدود رنگ چننے والا","అపరిమిత కలర్ పికర్","अमर्यादित रंग निवडी","வரம்பற்ற வண்ண தேர்வாளர்","અમર્યાદિત રંગ પીકર","Необмежений вибір кольору","Walang limitasyong picker ng kulay","Pemetik warna tanpa had","Picker de culori nelimitat","Korlátlan színválasztó","Απεριόριστος επιλογέας χρωμάτων","Obegränsad färgväljare","Ubegrænset farvevælger","Ubegrenset fargeplukker","Rajoittamaton värivalitsija","בוחר צבע ללא הגבלה","انتخاب نامحدود رنگ","പരിധിയില്ലാത്ത കളർ പിക്കർ","Неограничен виљушкар у боји","Picker ya rangi isiyo na kikomo","Неограничен избор на цвят","無限的彩色選擇器" @@ -1009,7 +1009,25 @@ "view-all-spending-page-tip","View the 'All Spending' page for a detailed breakdown of your finances over time.","Consultez la page «toutes dépenses» pour une ventilation détaillée de vos finances au fil du temps.","Vea la página 'All gasto' para un desglose detallado de sus finanzas con el tiempo.","查看“所有支出”页面,以详细介绍您的财务时间。","समय के साथ अपने वित्त के विस्तृत टूटने के लिए 'सभी खर्च' पृष्ठ देखें।","عرض صفحة ""كل الإنفاق"" للحصول على تفصيل مفصل لأموالك مع مرور الوقت.","Veja a página de 'todos os gastos' para obter um detalhamento detalhado de suas finanças ao longo do tempo.","Посмотреть страницу «Все расходы» для подробного разбивки ваших финансов с течением времени.","「すべての支出」ページを表示して、時間の経過とともに財務の詳細な内訳をご覧ください。","Sehen Sie sich die Seite ""Alle Ausgaben"" für eine detaillierte Aufschlüsselung Ihrer Finanzen im Laufe der Zeit an.","시간이 지남에 따라 재무에 대한 자세한 내용을 보려면 '모든 지출'페이지를 참조하십시오.","Mali durumunuzun zaman içinde ayrıntılı olarak dökümü için 'All Harcanma' sayfasını görüntüleyin.","Visualizza la pagina ""All Spense"" per una rottura dettagliata delle tue finanze nel tempo.","Xem trang 'Tất cả chi tiêu' để biết phân tích chi tiết về tài chính của bạn theo thời gian.","Zobacz stronę „wszystkie wydatki”, aby uzyskać szczegółowy podział finansów w czasie.","Bekijk de pagina 'All uitgaven' voor een gedetailleerde uitsplitsing van uw financiën in de loop van de tijd.","ดูหน้า 'การใช้จ่ายทั้งหมด' สำหรับรายละเอียดรายละเอียดทางการเงินของคุณเมื่อเวลาผ่านไป","Zobrazení stránky „Všechny výdaje“ pro podrobné poruchy vašich financí v průběhu času.","সময়ের সাথে আপনার অর্থের বিশদ ভাঙ্গনের জন্য 'সমস্ত ব্যয়' পৃষ্ঠাটি দেখুন।","Lihat halaman 'Semua Pengeluaran' untuk rincian terperinci keuangan Anda dari waktu ke waktu.","وقت کے ساتھ اپنے مالی معاملات میں تفصیلی خرابی کے لئے 'تمام اخراجات' کا صفحہ دیکھیں۔","కాలక్రమేణా మీ ఆర్ధికవ్యవస్థ యొక్క వివరణాత్మక విచ్ఛిన్నం కోసం 'అన్ని ఖర్చు' పేజీని చూడండి.","वेळोवेळी आपल्या वित्तपुरवठ्याच्या तपशीलवार विघटनासाठी 'सर्व खर्च' पृष्ठ पहा.","காலப்போக்கில் உங்கள் நிதிகளின் விரிவான முறிவுக்கு 'அனைத்து செலவு' பக்கத்தையும் காண்க.","સમય જતાં તમારી નાણાકીય બાબતોના વિગતવાર ભંગાણ માટે 'ઓલ ખર્ચ' પૃષ્ઠ જુઓ.","Перегляньте сторінку ""всі витрати"" для детального розбиття ваших фінансів з часом.","Tingnan ang pahina ng 'All Spending' para sa isang detalyadong pagkasira ng iyong pananalapi sa paglipas ng panahon.","Lihat halaman 'semua perbelanjaan' untuk pecahan terperinci kewangan anda dari masa ke masa.","Vizualizați pagina „toate cheltuielile” pentru o defalcare detaliată a finanțelor dvs. în timp.","Tekintse meg az „összes kiadás” oldalt a pénzügyeinek részletes bontásához az idő múlásával.","Δείτε τη σελίδα ""Όλες οι δαπάνες"" για λεπτομερή κατανομή των οικονομικών σας με την πάροδο του χρόνου.","Visa sidan ""alla utgifter"" för en detaljerad uppdelning av din ekonomi över tid.","Se siden 'Alle udgifter' for en detaljeret sammenbrud af din økonomi over tid.","Se siden ""alle utgifter"" for en detaljert oversikt over økonomien din over tid.","Katso 'kaikki menot' -sivulle yksityiskohtainen jakautuminen taloudestasi ajan myötä.","צפה בדף 'כל ההוצאות' לפירוט מפורט של הכספים שלך לאורך זמן.","برای تفکیک دقیق امور مالی خود به مرور زمان ، صفحه ""همه هزینه ها"" را مشاهده کنید.","കാലക്രമേണ നിങ്ങളുടെ ധനകാര്യത്തിന്റെ വിശദമായ തകർച്ചയ്ക്കായി 'എല്ലാ ചെലവും' പേജ് കാണുക.","Погледајте страницу ""све потрошње"" за детаљни прекид својих финансија током времена.","Angalia ukurasa wa 'Matumizi yote' kwa kuvunjika kwa kina kwa fedha zako kwa wakati.","Вижте страницата „Всички разходи“ за подробна разбивка на вашите финанси във времето.","查看“所有支出”頁面,以詳細介紹您的財務時間。" "credit-limit","Credit Limit","Limite de crédit","Límite de crédito","信用额度","क्रेडिट सीमा","الحد الائتماني","Limite de crédito","Кредитный лимит","クレジット制限","Kreditlimit","신용 한도","Kredi limiti","Limite di credito","Giới hạn tín dụng","Limit kredytowy","Kredietlimiet","วงเงิน","Úvěrový limit","ক্রেডিট সীমা","Batas kredit","ادھار کی حد","క్రెడిట్ పరిమితి","पत मर्यादा","கடன் வரம்பு","શાખ -હદ","Кредитний ліміт","Limitasyon ng kredito","Had kredit","Limita de credit","Hitelkeret","Πιστωτικό όριο","Kreditgräns","Kredit grænse","Kredittgrense","Luottoraja","מסגרת אשראי","محدودیت اعتبار","ക്രെഡിറ്റ് പരിധി","Кредитни лимит","Kikomo cha mkopo","Кредитен лимит","信用額度" "due","due","exigible","pendiente","到期的","देय","حق","devido","должный","期限","fällig","~로 인한","vadesi dolmuş","dovuto","quá hạn","należny","vanwege","เนื่องจาก","z důvodu","বাকি","jatuh tempo","وجہ","గడువు","देय","காரணமாக","યોગ્ય","належить","Dahil sa","kerana","datorat","esedékes","λόγω","på grund av","på grund","forfaller","erääntyvä","נודע","ناشی از","കുടിശ്ശിക","доспев","kwa sababu","в следствие","到期的" -"credit-payment","Credit Payment","Paiement de crédit","Pago de crédito","信用付款","ऋण भुगतान","دفعة ائتمانية","Pagamento de crédito","Кредитный платеж","クレジット支払い","Kreditzahlung","신용 지불","Kredi ödeme","Pagamento del credito","Thanh toán tín dụng","Płatność kredytowa","Kredietbetaling","การชำระเครดิต","Úvěrová platba","ক্রেডিট পেমেন্ট","Pembayaran kredit","کریڈٹ ادائیگی","క్రెడిట్ చెల్లింపు","पत देयके","கடன் கட்டணம்","ઉદાર ચુકવણી","Кредитний платіж","Pagbabayad ng kredito","Pembayaran kredit","Plata creditului","Hitelfizetés","Πληρωμή πιστώσεων","Kreditbetalning","Kreditbetaling","Kredittbetaling","Luottomaksu","תשלום אשראי","پرداخت اعتباری","ക്രെഡിറ്റ് പേയ്മെന്റ്","Плаћање кредита","Malipo ya mkopo","Кредитно плащане","信用付款" +"credit-payment","Credit Payment","Paiement de crédit","Pago de crédito","信用付款","ऋण भुगतान","دفعة ائتمانية","Pagamento de crédito","Кредитный платеж","クレジット支払い","Kreditzahlung","신용 지불","Kredi ödeme","Pagamento del credito","Thanh toán tín dụng","Płatność kredytowa","Kredietbetaling","การชำระเครดิต","Platba kreditu","ক্রেডিট পেমেন্ট","Pembayaran kredit","کریڈٹ ادائیگی","క్రెడిట్ చెల్లింపు","पत देयके","கடன் கட்டணம்","ઉદાર ચુકવણી","Кредитний платіж","Pagbabayad ng kredito","Pembayaran kredit","Plata creditului","Hitelfizetés","Πληρωμή πιστώσεων","Kreditbetalning","Kreditbetaling","Kredittbetaling","Luottomaksu","תשלום אשראי","پرداخت اعتباری","ക്രെഡിറ്റ് പേയ്മെന്റ്","Плаћање кредита","Malipo ya mkopo","Кредитно плащане","信用付款" "add-payment","Add Payment","Ajouter un paiement","Agregar pago","添加付款","भुगतान जोड़ें","أضف الدفع","Adicione pagamento","Добавить оплату","支払いを追加します","Zahlung hinzufügen","지불을 추가하십시오","Ödeme Ekle","Aggiungi pagamento","Thêm thanh toán","Dodaj płatność","Voeg betaling toe","เพิ่มการชำระเงิน","Přidejte platbu","অর্থ প্রদান যোগ করুন","Tambahkan pembayaran","ادائیگی شامل کریں","చెల్లింపును జోడించండి","देयक जोडा","கட்டணத்தைச் சேர்க்கவும்","ચુકવણી ઉમેરો","Додати платіж","Magdagdag ng pagbabayad","Tambah pembayaran","Adăugați plata","Fizetés adása","Προσθέστε πληρωμή","Lägga till betalning","Tilføj betaling","Legg til betaling","Lisätä maksua","הוסף תשלום","اضافه پرداخت","പേയ്മെന്റ് ചേർക്കുക","Додавање уплате","Ongeza malipo","Добавете плащане","添加付款" "next-payment","Next payment","Prochain paiement","Siguiente pago","下一个付款","अगला भुगतान","الدفعة التالية","Próximo pagamento","Следующий платеж","次の支払い","Nächste Zahlung","다음 지불","Sonraki ödeme","Pagamento successivo","Thanh toán tiếp theo","Następna zapłata","Volgende betaling","การชำระเงินครั้งต่อไป","Další platba","পরবর্তী অর্থ প্রদান","Pembayaran selanjutnya","اگلی ادائیگی","తదుపరి చెల్లింపు","पुढील देयक","அடுத்த கட்டணம்","આગામી ચુકવણી","Наступний платіж","Susunod na pagbabayad","Pembayaran seterusnya","Următoarea plată","Következő fizetés","Επόμενη πληρωμή","Nästa betalning","Næste betaling","Neste betaling","Seuraava maksu","התשלום הבא","پرداخت بعدی","അടുത്ത പേയ്മെന്റ്","Следеће плаћање","Malipo yanayofuata","Следващо плащане","下一個付款" -"next-payment-due","Next Payment Due","Paiement suivant dû","Siguiente pago adeudado","下一次付款应付","अगला भुगतान देय","الدفع التالي مستحق","Próximo pagamento devido","Следующий оплата причитается","次の支払い期限","Nächste Zahlung fällig","다음 지불 마감","Sonraki Ödeme Sonu","Pagamento successivo dovuto","Thanh toán đến hạn tiếp theo","Następna należna płatność","Volgende betaling verschuldigd","การชำระเงินครั้งต่อไปที่ครบกำหนด","Další splatná platba","পরবর্তী অর্থ প্রদানের কারণে","Pembayaran berikutnya jatuh tempo","اگلی ادائیگی واجب الادا ہے","తదుపరి చెల్లింపు","पुढील देय देय","அடுத்த கட்டணம் செலுத்த வேண்டும்","બાકી ચૂકવણી","Наступний платіж належне","Susunod na pagbabayad","Pembayaran seterusnya","Următoarea plată datorată","Következő fizetés esedékes","Επόμενη πληρωμή","Nästa betalning förfaller","Næste betaling forfaldne","Neste betaling forfaller","Seuraava maksu","התשלום הבא המגיע","پرداخت بعدی","അടുത്ത പണമടയ്ക്കൽ","Следеће исплате","Malipo yanayofuata","Следващото дължимо плащане","下一次付款應付" \ No newline at end of file +"next-payment-due","Next Payment Due","Paiement suivant dû","Siguiente pago adeudado","下一次付款应付","अगला भुगतान देय","الدفع التالي مستحق","Próximo pagamento devido","Следующий оплата причитается","次の支払い期限","Nächste Zahlung fällig","다음 지불 마감","Sonraki Ödeme Sonu","Pagamento successivo dovuto","Thanh toán đến hạn tiếp theo","Następna należna płatność","Volgende betaling verschuldigd","การชำระเงินครั้งต่อไปที่ครบกำหนด","Další splatná platba","পরবর্তী অর্থ প্রদানের কারণে","Pembayaran berikutnya jatuh tempo","اگلی ادائیگی واجب الادا ہے","తదుపరి చెల్లింపు చెల్లించాలి","पुढील देय देय","அடுத்த கட்டணம் செலுத்த வேண்டும்","બાકી ચૂકવણી","Наступний платіж належне","Susunod na pagbabayad","Pembayaran seterusnya","Următoarea plată datorată","Következő fizetés esedékes","Επόμενη πληρωμή","Nästa betalning förfaller","Næste betaling forfaldne","Neste betaling forfaller","Seuraava maksu","התשלום הבא המגיע","پرداخت بعدی","അടുത്ത പണമടയ്ക്കൽ","Следеће исплате","Malipo yanayofuata","Следващото дължимо плащане","下一次付款應付" +"no-categories","No Categories","Pas de catégories","Sin categorías","没有类别","कोई श्रेणियां नहीं","لا فئات","Sem categorias","Нет категорий","カテゴリはありません","Keine Kategorien","카테고리가 없습니다","Kategori Yok","Nessuna categorie","Không có loại","Brak kategorii","Geen categorieën","ไม่มีหมวดหมู่","Žádné kategorie","কোন বিভাগ নেই","Tidak ada kategori","کوئی زمرہ نہیں ہے","వర్గాలు లేవు","श्रेणी नाही","வகைகள் இல்லை","કોઈ વર્ગો નથી","Немає категорій","Walang mga kategorya","Tiada kategori","Fără categorii","Nincs kategória","Χωρίς κατηγορίες","Inga kategorier","Ingen kategorier","Ingen kategorier","Ei luokkia","אין קטגוריות","بدون دسته بندی","വിഭാഗങ്ങളൊന്നുമില്ല","Нема категорија","Hakuna kategoria","Няма категории","沒有類別" +"saved-amount-of","saved of","sauvé de","salvado de","保存","बच गया","أنقذ","salvo de","Сохраняется","保存されています","gerettet von","저장","kurtarılmış","salvato di","được lưu","uratowany","gered van","บันทึก","zachráněno","সংরক্ষণ","disimpan","محفوظ","సేవ్ చేయబడింది","जतन केले","சேமிக்கப்பட்டது","ના બચાવેલા","врятований","nai -save ng","disimpan dari","salvat de","megmentett","αποθηκευμένος","rädd för","gemt af","lagret av","pelastettu","נשמר מ","ذخیره شده از","സംരക്ഷിച്ചു","сачуван од","kuokolewa","Запазено от","保存" +"over-saved-amount-of","over saved of","trop sauvé de","sobre salvado de","过度保存","की बचा हुआ","أكثر من حفظ","excesso salvo de","из -за спасения","保存されています","über gerettet von","과도하게 저축","fazla kurtarıldı","over salvato di","được lưu quá nhiều","Over Saved of","te bespaard van","เกิน","přes zachránit","ওভার সেভ","lebih disimpan","سے زیادہ بچایا گیا","ఓవర్ సేవ్","ओव्हर सेव्ह चे","சேமிக்கப்பட்டதை விட","-ઉપર સાચવો","над збереженим","higit sa nai -save ng","lebih disimpan","peste salvat de","túlmentve","πάνω από αποθηκευμένο","överkornad","over gemt af","over frelst av","pelastettu","נשמר יתר על המידה","بیش از ذخیره شده از","ലാഭിച്ചു","преко сачуване","zaidi ya kuokolewa","над спасен от","過度保存" +"of-saving","of saving","de sauvegarde","de ahorro","保存","बचा हुआ","من الادخار","de salvar","сохранения","保存の","von retten","저축의","kaydetme","di risparmio","tiết kiệm","oszczędzania","van sparen","ของการออม","úspory","সংরক্ষণের","menabung","بچت کا","పొదుపు","बचत","சேமிப்பு","બચત","заощадження","ng pag -save","penjimatan","de economisire","megtakarítás","εξοικονόμησης","sparande","af at redde","av sparing","pelastaminen","לחסוך","صرفه جویی","സംരക്ഷിക്കുന്നതിന്റെ","уштеде","ya kuokoa","на спестяване","保存" +"set-saving-goals","Set Category Saving Goals","Définir les objectifs d'économie de catégorie","Establecer objetivos de ahorro de categoría","设置类别保存目标","श्रेणी बचत लक्ष्य निर्धारित करें","حدد أهداف توفير الفئة","Definir metas de economia de categoria","Установка категории сохранения целей","カテゴリの節約目標を設定します","Setzen Sie die Kategorie -Sparenziele","카테고리 저장 목표를 설정합니다","Kategori tasarrufu hedefleri belirleyin","Imposta obiettivi di risparmio di categoria","Đặt mục tiêu tiết kiệm danh mục","Ustaw cele oszczędzania kategorii","Stel categoriebesparende doelen in","กำหนดเป้าหมายการประหยัดหมวดหมู่","Stanovit cíle úspory kategorie","বিভাগ সংরক্ষণের লক্ষ্য নির্ধারণ করুন","Tetapkan Tujuan Penghematan Kategori","زمرے کی بچت کے اہداف طے کریں","వర్గాన్ని సేవ్ చేసే లక్ష్యాలను సెట్ చేయండి","श्रेणी बचत गोल सेट करा","வகை சேமிப்பு இலக்குகளை அமைக்கவும்","કેટેગરી બચત લક્ષ્યો સેટ કરો","Встановити цілі економії категорії","Itakda ang mga layunin sa pag -save ng kategorya","Tetapkan Matlamat Penjimatan Kategori","Stabiliți obiective de economisire a categoriei","Állítsa be a kategória megtakarítási célokat","Ορίστε τους στόχους εξοικονόμησης κατηγορίας","Uppsättning av kategorinbesparande mål","Sæt kategoribesparende mål","Sett kategori Lagringsmål","Aseta luokan säästötavoitteet","הגדר יעדים לחיסכון בקטגוריה","اهداف صرفه جویی در دسته را تعیین کنید","കാറ്റഗറി സേവിംഗ് ലക്ഷ്യങ്ങൾ സജ്ജമാക്കുക","Подесите циљеве уштеде категорија","Weka malengo ya kuokoa jamii","Поставете целите за спестяване на категория","設置類別保存目標" +"edit-saving-goals","Edit Saving Goals","Modifier les objectifs de sauvegarde","Editar metas de ahorro","编辑保存目标","सेविंग लक्ष्यों को संपादित करें","تحرير الأهداف الادخار","Editar metas de economia","Редактировать сохранение целей","保存目標を編集します","Sparenziele bearbeiten","저축 목표를 편집합니다","Tasarruf Hedeflerini Düzenle","Modifica obiettivi di salvataggio","Chỉnh sửa mục tiêu tiết kiệm","Edytuj cele oszczędzające","Bewerk sparende doelen","แก้ไขเป้าหมายการออม","Upravit cíle úspory","সংরক্ষণের লক্ষ্য সম্পাদনা করুন","Edit Simpan Sasaran","بچت کے اہداف میں ترمیم کریں","పొదుపు లక్ష్యాలను సవరించండి","बचत ध्येय संपादित करा","சேமிப்பு இலக்குகளைத் திருத்தவும்","બચત લક્ષ્યો સંપાદિત કરો","Редагувати цілі збереження","I -edit ang mga layunin sa pag -save","Edit matlamat penjimatan","Editați obiectivele de economisire","Szerkessze a megtakarítási célokat","Επεξεργασία στόχων εξοικονόμησης","Redigera mål","Rediger gemte mål","Rediger lagringsmål","Muokkaa säästötavoitteita","ערוך יעדים לחיסכון","اهداف پس انداز را ویرایش کنید","സേവിംഗ് ലക്ഷ്യങ്ങൾ എഡിറ്റുചെയ്യുക","Уређивање циљева уштеде","Hariri malengo ya kuokoa","Редактиране на целите за запазване","編輯保存目標" +"saving-goals","Saving Goals","Des objectifs d'épargne","Ahorrar objetivos","保存目标","लक्ष्यों को बचाना","الأهداف الادخار","Economizando metas","Экономия целей","目標を節約します","Ziele sparen","목표 저축","Hedeflerden tasarruf etmek","Obiettivi di salvataggio","Tiết kiệm mục tiêu","Oszczędzanie celów","Doelen redden","บันทึกเป้าหมาย","Ušetřit cíle","লক্ষ্য সংরক্ষণ করা","Menghemat tujuan","اہداف کی بچت","లక్ష్యాలను ఆదా చేస్తుంది","ध्येय जतन करणे","இலக்குகளை மிச்சப்படுத்துகிறது","બચત ધ્યેયો","Збереження цілей","Pag -save ng mga layunin","Menjimatkan matlamat","Economisind obiective","Célok megtakarítása","Εξοικονόμηση στόχων","Spara mål","Gemme mål","Sparer mål","Tavoitteiden pelastaminen","חוסך יעדים","صرفه جویی در اهداف","ലക്ഷ്യങ്ങൾ ലാഭിക്കുന്നു","Спремање циљева","Kuokoa malengo","Спестяване на цели","保存目標" +"saving-limit-type","Saving Limit Type","Type de limite de sauvegarde","Tipo de límite de ahorro","保存限制类型","बचत सीमा प्रकार","توفير نوع الحد","Tipo de limite de economia","Сберегательный лимитный тип","節約型タイプ","Sparlimittyp","제한 제한 유형 저장","Tasarruf Limit Türü","Tipo di limite di risparmio","Tiết kiệm loại giới hạn","Oszczędzanie typu limitu","Limiettype opslaan","ประเภทขีด จำกัด การออม","Ukládání limitního typu","সীমা প্রকার সংরক্ষণ","Menghemat jenis batas","بچت کی حد کی قسم","పరిమితి రకాన్ని ఆదా చేస్తుంది","बचत मर्यादा प्रकार","வரம்பு வகை சேமிப்பு","બચત મર્યાદા પ્રકાર","Збереження типу межі","Uri ng pag -save ng uri","Jenis had penjimatan","Economisirea tipului de limită","Takarítás korlát típusa","Τύπος ορίου εξοικονόμησης","Spara gränsstyp","Sparende grænsestype","Lagring av grensetype","Säästäminen rajatyyppi","שמירת סוג גבול","صرفه جویی در نوع حد","പരിധി തരം സംരക്ഷിക്കുന്നു","Спремање граничног типа","Kuokoa aina ya kikomo","Тип лимит на спестяване","保存限制類型" +"category-saving-goals","Category Saving Goals","Catégorie des objectifs d'économie","Metas de ahorro de categoría","类别保存目标","श्रेणी बचत लक्ष्य","أهداف توفير الفئة","Metas de economia de categoria","Категория экономит цели","カテゴリの節約目標","Kategoriesparenziele","카테고리 저축 목표","Kategori Tasarruf Hedefleri","Obiettivi di risparmio di categoria","Mục tiêu tiết kiệm thể loại","Cele oszczędzające kategorię","Categorie -spaardoelen","หมวดหมู่เป้าหมายการออม","Cíle úspory kategorie","বিভাগ সংরক্ষণ লক্ষ্য","Kategori menghemat tujuan","زمرہ کی بچت کے اہداف","వర్గం సేవింగ్ లక్ష్యాలు","श्रेणी बचत ध्येय","வகை சேமிப்பு இலக்குகள்","વર્ગ બચત લક્ષ્યો","Цілі економії категорії","Mga layunin sa pag -save ng kategorya","Matlamat penjimatan kategori","Obiective de economisire a categoriilor","Kategória megtakarítási célok","Στόχοι εξοικονόμησης κατηγορίας","Kategoribesparande mål","Kategoribesparende mål","Kategori sparer mål","Luokan säästötavoitteet","יעדים לחיסכון בקטגוריה","اهداف صرفه جویی در دسته","കാറ്റഗറി സേവിംഗ് ലക്ഷ്യങ്ങൾ","Циљеви уштеде категорија","Malengo ya kuokoa jamii","Цели за спестяване на категория","類別保存目標" +"saving","Saving","Économie","Ahorro","保存","सहेजा जा रहा है","إنقاذ","Economizando","Сохранение","節約","Retten","절약","Tasarruf","Salvataggio","Tiết kiệm","Oszczędność","Besparing","ประหยัด","Úspora","সংরক্ষণ","Penghematan","بچت","సేవింగ్","बचत","சேமிப்பு","બચત","Заощадження","Pag -save","Penjimatan","Economisire","Megtakarítás","Οικονομία","Sparande","Redning","Sparer","Tallentaa","חִסָכוֹן","صرفه جویی در","സംരക്ഷിക്കുന്നത്","Уштеда","Kuokoa","Спестяване","保存" +"spending","Spending","Dépenses","Gasto","开支","खर्च","الإنفاق","Gastos","Расходы","支出","Ausgaben","지출","Harcama","Spesa","Chi tiêu","Wydatki","Uitgaven","การใช้จ่าย","Výdaje","ব্যয়","Pengeluaran","خرچ کرنا","ఖర్చు","खर्च करणे","செலவு","ખર્ચ","Витрати","Paggastos","Perbelanjaan","Cheltuire","Kiadások","Δαπάνες","Utgifter","Udgifter","Utgifter","Menot","הוצאות","هزینه","ചിലവഴിക്കുക","Трошење","Matumizi","Разходи","開支" +"include-expense","Expense","Frais","Gastos","费用","व्यय","مصروف","Despesa","Расход","費用","Kosten","비용","Masraf","Spese","Chi phí","Koszt","Kosten","ค่าใช้จ่าย","Výdaje","ব্যয়","Pengeluaran","خرچہ","ఖర్చు","खर्च","செலவு","ખર્ચ","Витрата","Gastos","Perbelanjaan","Cheltuieli","Költség","Δαπάνη","Bekostnad","Bekostning","Kostnader","Kulut","הוֹצָאָה","هزینه","ചെലവ്","Трошак","Gharama","Разход","費用" +"include-expense-description-1","Expense transactions will be included in the budget","Les transactions de revenus seront incluses dans le budget","Las transacciones de ingresos se incluirán en el presupuesto","收入交易将被添加至该预算","बजट में आय लेनदेन शामिल किया जाएगा","سيتم تضمين معاملات الدخل في الميزانية","As transações de renda serão incluídas no orçamento","Сделки с доходами будут включены в бюджет","収入取引は予算に含まれます","Einkommenstransaktionen werden im Budget aufgenommen","소득 거래는 예산에 포함됩니다","Gelir işlemleri bütçeye dahil edilecek","Le transazioni di reddito saranno incluse nel budget","Giao dịch thu nhập sẽ được bao gồm trong ngân sách","Transakcje dochodowe zostaną uwzględnione w budżecie","Inkomstentransacties worden opgenomen in de begroting","การทำธุรกรรมรายได้จะรวมอยู่ในงบประมาณ","Transakce příjmů budou zahrnuty do rozpočtu","আয়ের লেনদেন বাজেটে অন্তর্ভুক্ত করা হবে","Transaksi pendapatan akan dimasukkan dalam anggaran","آمدنی کے لین دین کو بجٹ میں شامل کیا جائے گا","ఆదాయ లావాదేవీలు బడ్జెట్‌లో చేర్చబడతాయి","अर्थसंकल्पात उत्पन्नाच्या व्यवहाराचा समावेश केला जाईल","வருமான பரிவர்த்தனைகள் பட்ஜெட்டில் சேர்க்கப்படும்","આવક વ્યવહારો બજેટમાં શામેલ કરવામાં આવશે","Операції з доходів будуть включені в бюджет","Ang mga transaksyon sa kita ay isasama sa badyet","Urus niaga pendapatan akan dimasukkan dalam belanjawan","Tranzacțiile cu venituri vor fi incluse în buget","A jövedelmi tranzakciókat a költségvetésbe foglalják","Οι συναλλαγές εισοδήματος θα συμπεριληφθούν στον προϋπολογισμό","Inkomsttransaktioner kommer att inkluderas i budgeten","Indkomsttransaktioner vil blive inkluderet i budgettet","Inntektstransaksjoner vil bli inkludert i budsjettet","Tulot liiketoimet sisällytetään talousarvioon","עסקאות הכנסה ייכללו בתקציב","معاملات درآمد در بودجه گنجانده می شود","വരുമാന ഇടപാടുകൾ ബജറ്റിൽ ഉൾപ്പെടുത്തും","Трансакције о приходима биће укључене у буџет","Uuzaji wa mapato utajumuishwa katika bajeti","В бюджета ще бъдат включени сделки с доходи","收入交易將包括在預算中" +"include-expense-description-2","The saving budget total will increase with expenses","Le total du budget des dépenses diminuera avec les revenus","El total del presupuesto de gastos disminuirá con los ingresos","支出预算统计将随收入减少","खर्च का बजट कुल आय के साथ कम हो जाएगा","سوف ينخفض ​​إجمالي ميزانية الإنفاق مع الدخل","O total do orçamento de gastos diminuirá com a renda","Общая сумма бюджета расходов уменьшится с доходом","支出予算の合計は収入とともに減少します","Das Ausgabenbudget wird mit dem Einkommen sinken","지출 예산 총계는 소득에 따라 감소 할 것입니다","Harcama bütçesi toplamı gelirle azalacak","Il totale del budget di spesa diminuirà con il reddito","Tổng ngân sách chi tiêu sẽ giảm theo thu nhập","Łączna liczba budżetu wydatków spadnie wraz z dochodami","Het totaal van de bestedingsbudget zal afnemen met inkomsten","ยอดรวมงบประมาณการใช้จ่ายจะลดลงด้วยรายได้","Celková částka výdajů se sníží s příjmy","ব্যয় বাজেটের মোট আয়ের সাথে হ্রাস পাবে","Total anggaran pengeluaran akan berkurang dengan pendapatan","اخراجات کے بجٹ میں کل آمدنی میں کمی واقع ہوگی","ఖర్చు బడ్జెట్ మొత్తం ఆదాయంతో తగ్గుతుంది","खर्च बजेट एकूण उत्पन्नासह कमी होईल","செலவு பட்ஜெட் மொத்தம் வருமானத்துடன் குறையும்","ખર્ચ બજેટ કુલ આવક સાથે ઘટશે","Загальна сума бюджету витрат зменшиться з доходом","Ang kabuuang badyet sa paggastos ay bababa sa kita","Jumlah belanjawan perbelanjaan akan berkurang dengan pendapatan","Totalul bugetului de cheltuieli va scădea odată cu veniturile","A kiadási költségvetés összege a jövedelemmel csökken","Το σύνολο του προϋπολογισμού των δαπανών θα μειωθεί με το εισόδημα","Utgiftsbudgeten kommer att minska med inkomst","Det samlede udgiftsbudget falder med indkomst","Utgiftsbudsjettet totalt vil avta med inntekten","Menobudjetin kokonaismäärä vähenee tulojen kanssa","סך תקציב ההוצאות יקטן עם ההכנסה","بودجه هزینه با درآمد کاهش می یابد","ചെലവ് ബജറ്റ് ആകെ വരുമാനം കുറയ്ക്കും","Потрошња буџет ће се смањити са приходима","Jumla ya bajeti ya matumizi itapungua na mapato","Общият бюджет на разходите ще намалее с доходите","支出預算總計會隨收入而減少" +"savings-budget","Savings budget","Budget d'épargne","Presupuesto de ahorro","储蓄预算","बचत बजट","ميزانية الادخار","Orçamento de poupança","Сберегательный бюджет","節約予算","Sparbudget","저축 예산","Tasarruf Bütçesi","Budget di risparmio","Ngân sách tiết kiệm","Budżet oszczędnościowy","Spaarbudget","งบประมาณการออม","Úspora rozpočtu","সঞ্চয় বাজেট","Anggaran tabungan","بچت کا بجٹ","పొదుపు బడ్జెట్","बचत बजेट","சேமிப்பு பட்ஜெட்","બચત અંદાજપત્ર","Бюджет заощаджень","Badyet ng pagtitipid","Belanjawan simpanan","Bugetul de economii","Megtakarítási költségvetés","Προϋπολογισμός εξοικονόμησης","Besparingsbudget","Besparelsesbudget","Sparebudsjett","Säästöbudjetti","תקציב חיסכון","بودجه پس انداز","സേവിംഗ്സ് ബജറ്റ്","Буџет штедње","Bajeti ya Akiba","Бюджет за спестявания","儲蓄預算" +"expense-budget","Expense budget","Budget des dépenses","Presupuesto de gastos","费用预算","व्यय बजट","ميزانية المصاريف","Orçamento de despesa","Бюджет расходов","費用予算","Ausgabenbudget","비용 예산","Gider Bütçesi","Budget di spesa","Ngân sách chi phí","Budżet wydatków","Kostenbudget","งบประมาณค่าใช้จ่าย","Rozpočet výdajů","ব্যয় বাজেট","Anggaran pengeluaran","اخراجات کا بجٹ","ఖర్చు బడ్జెట్","खर्च बजेट","செலவு பட்ஜெட்","ખર્ચ બજેટ","Бюджет витрат","Badyet sa gastos","Belanjawan perbelanjaan","Bugetul cheltuielilor","Költség -költségvetés","Προϋπολογισμός δαπανών","Utgiftsbudget","Udgiftsbudget","Utgiftsbudsjett","Kustannusbudjetti","תקציב הוצאות","بودجه هزینه","ചെലവ് ബജറ്റ്","Буџет за трошкове","Bajeti ya gharama","Бюджет на разходите","費用預算" +"savings-budget-description-1","Track your income and budget your savings","Suivez vos revenus et budgétisez votre épargne","Rastree sus ingresos y presupueste sus ahorros","跟踪您的收入并预算您的储蓄","अपनी आय को ट्रैक करें और अपनी बचत को बजट दें","تتبع دخلك وميزانيتك مدخراتك","Rastreie sua renda e orçamento suas economias","Отслеживайте свой доход и бюджет свои сбережения","収入を追跡し、貯蓄を予算化します","Verfolgen Sie Ihr Einkommen und budgetieren Sie Ihre Einsparungen","소득을 추적하고 저축을 예산하십시오","Gelirinizi izleyin ve tasarruflarınızı bütçeleyin","Tieni traccia del tuo reddito e del tuo budget i tuoi risparmi","Theo dõi thu nhập và ngân sách tiết kiệm của bạn","Śledź swoje dochody i budżet na swoje oszczędności","Volg uw inkomsten en budget uw spaargeld","ติดตามรายได้และงบประมาณการออมของคุณ","Sledujte svůj příjem a rozpočet vaše úspory","আপনার আয় ট্র্যাক করুন এবং আপনার সঞ্চয় বাজেট করুন","Lacak Penghasilan Anda dan Anggarkan Tabungan Anda","اپنی آمدنی کو ٹریک کریں اور اپنی بچت کو بجٹ دیں","మీ ఆదాయాన్ని ట్రాక్ చేయండి మరియు మీ పొదుపులను బడ్జెట్ చేయండి","आपल्या उत्पन्नाचा मागोवा घ्या आणि आपली बचत बजेट करा","உங்கள் வருமானம் மற்றும் பட்ஜெட்டில் உங்கள் சேமிப்பைக் கண்காணிக்கவும்","તમારી આવક અને બજેટ તમારી બચતને ટ્ર track ક કરો","Відстежуйте свій дохід та бюджет своїх заощаджень","Subaybayan ang iyong kita at badyet ang iyong pagtitipid","Jejaki pendapatan dan anggaran simpanan anda","Urmăriți -vă veniturile și bugetați -vă economiile","Kövesse nyomon a jövedelmét és a megtakarítások költségvetését","Παρακολουθήστε το εισόδημά σας και τον προϋπολογισμό σας για τις αποταμιεύσεις σας","Spåra din inkomst och budgetera dina besparingar","Spor din indkomst og budgettere dine besparelser","Spor inntekten og budsjettet sparepengene dine","Seuraa tulojasi ja budjetti säästöjäsi","עקוב אחר הכנסותיך ותקצב את החיסכון שלך","درآمد خود را پیگیری کنید و پس انداز خود را پس انداز کنید","നിങ്ങളുടെ വരുമാനവും ബജറ്റും ട്രാക്കുചെയ്യുക","Пратите свој приход и буџет уштеде","Fuatilia mapato yako na bajeti ya akiba yako","Проследете доходите и бюджета си вашите спестявания","跟踪您的收入並預算您的儲蓄" +"expense-budget-description-1","Track your expenses and budget your spending","Suivez vos dépenses et budgétisé vos dépenses","Rastree sus gastos y presupueste sus gastos","跟踪您的费用并预算您的支出","अपने खर्चों को ट्रैक करें और अपने खर्च को बजट दें","تتبع نفقاتك وميزانيتك إنفاقك","Acompanhe suas despesas e orçem seus gastos","Отслеживайте свои расходы и бюджет ваши расходы","費用を追跡し、支出を予算化します","Verfolgen Sie Ihre Ausgaben und budgetieren Sie Ihre Ausgaben","비용을 추적하고 지출 예산을 책정하십시오","Giderlerinizi takip edin ve harcamalarınızı bütçe","Tieni traccia delle tue spese e budge al tuo budget della spesa","Theo dõi chi phí của bạn và ngân sách chi tiêu của bạn","Śledź swoje wydatki i budżet na wydatki","Volg uw uitgaven en budget uw uitgaven","ติดตามค่าใช้จ่ายและงบประมาณการใช้จ่ายของคุณ","Sledujte své výdaje a rozpočet na své výdaje","আপনার ব্যয় ট্র্যাক করুন এবং আপনার ব্যয় বাজেট করুন","Lacak pengeluaran Anda dan anggarkan pengeluaran Anda","اپنے اخراجات کو ٹریک کریں اور اپنے اخراجات کو بجٹ دیں","మీ ఖర్చులను ట్రాక్ చేయండి మరియు మీ ఖర్చును బడ్జెట్ చేయండి","आपल्या खर्चाचा मागोवा घ्या आणि आपला खर्च बजेट करा","உங்கள் செலவுகள் மற்றும் உங்கள் செலவினங்களைக் கண்காணிக்கவும்","તમારા ખર્ચ અને તમારા ખર્ચના બજેટને ટ્ર track ક કરો","Відстежуйте свої витрати та бюджет","Subaybayan ang iyong mga gastos at badyet ang iyong paggasta","Jejaki perbelanjaan dan anggaran perbelanjaan anda","Urmăriți -vă cheltuielile și bugetați -vă cheltuielile","Kövesse nyomon a költségeket és költségvetse ki a kiadásait","Παρακολουθήστε τα έξοδά σας και τον προϋπολογισμό των δαπανών σας","Spåra dina utgifter och budgetera dina utgifter","Spor dine udgifter og budgettere dine udgifter","Spore utgiftene dine og budsjetter utgiftene dine","Seuraa kulut ja budjetti kulut","עקוב אחר ההוצאות שלך ותקצב את ההוצאות שלך","هزینه های خود را پیگیری کنید و هزینه های خود را بودجه خود را بودجه کنید","നിങ്ങളുടെ ചെലവുകൾ നിങ്ങളുടെ ചെലവുകളും ബജറ്റിയും ട്രാക്കുചെയ്യുക","Пратите трошкове и буџет своје потрошње","Fuatilia gharama zako na bajeti matumizi yako","Проследявайте разходите си и бюджетирайте разходите си","跟踪您的費用並預算您的支出" \ No newline at end of file diff --git a/budget/lib/database/tables.dart b/budget/lib/database/tables.dart index 338f29cd..2a157c18 100644 --- a/budget/lib/database/tables.dart +++ b/budget/lib/database/tables.dart @@ -1363,6 +1363,7 @@ class FinanceDatabase extends _$FinanceDatabase { joinedWithObjectives: true, ) & onlyShowIfFollowsFilters(transactions, + budget: budget, budgetTransactionFilters: budgetTransactionFilters, memberTransactionFilters: memberTransactionFilters) & (onlyShowBasedOnCategoryFks( @@ -1448,6 +1449,7 @@ class FinanceDatabase extends _$FinanceDatabase { joinedWithObjectives: true, ) & onlyShowIfFollowsFilters(transactions, + budget: budget, budgetTransactionFilters: budgetTransactionFilters, memberTransactionFilters: memberTransactionFilters) & onlyShowBasedOnTimeRange(transactions, start, end, budget) & @@ -1542,6 +1544,7 @@ class FinanceDatabase extends _$FinanceDatabase { joinedWithObjectives: false, ) & onlyShowIfFollowsFilters(transactions, + budget: budget, budgetTransactionFilters: budgetTransactionFilters, memberTransactionFilters: memberTransactionFilters) & onlyShowBasedOnTimeRange(transactions, startDate, endDate, budget) & @@ -2577,7 +2580,7 @@ class FinanceDatabase extends _$FinanceDatabase { .first; } - Future getRelatingAssociatedTitle( + Future getRelatingAssociatedTitle( String searchFor, {int? limit, int? offset}) async { @@ -2587,10 +2590,10 @@ class FinanceDatabase extends _$FinanceDatabase { // ..limit(limit ?? DEFAULT_LIMIT, offset: offset ?? DEFAULT_OFFSET) ) .get()) - .first; + .firstOrNull; } - Future getRelatingCategory(String searchFor, + Future getRelatingCategory(String searchFor, {int? limit, int? offset}) async { return (await (select(categories) ..where((c) => @@ -2598,7 +2601,7 @@ class FinanceDatabase extends _$FinanceDatabase { c.name.collate(Collate.noCase).like("%" + searchFor + "%")) ..limit(limit ?? DEFAULT_LIMIT, offset: offset ?? DEFAULT_OFFSET)) .get()) - .first; + .firstOrNull; } Stream> watchAllAssociatedTitlesInCategory( @@ -5039,6 +5042,7 @@ class FinanceDatabase extends _$FinanceDatabase { transactions, onlyShowTransactionsBelongingToBudgetPk) & transactions.walletFk.equals(wallet.walletPk) & onlyShowIfFollowsFilters(transactions, + budget: budget, budgetTransactionFilters: budgetTransactionFilters, memberTransactionFilters: memberTransactionFilters), )); @@ -5247,9 +5251,12 @@ class FinanceDatabase extends _$FinanceDatabase { tbl.note.collate(Collate.noCase).like("%" + searchQuery + "%"); } - Expression onlyShowIfFollowsFilters($TransactionsTable tbl, - {List? budgetTransactionFilters, - List? memberTransactionFilters}) { + Expression onlyShowIfFollowsFilters( + $TransactionsTable tbl, { + required Budget? budget, + required List? budgetTransactionFilters, + required List? memberTransactionFilters, + }) { Expression memberIncluded = memberTransactionFilters == null ? Constant(true) : (tbl.sharedKey.isNotNull() & @@ -5283,7 +5290,9 @@ class FinanceDatabase extends _$FinanceDatabase { isFilterSelectedWithDefaults(budgetTransactionFilters, BudgetTransactionFilters.includeIncome), ) | - (tbl.income.equals(false)) + (budget?.income == true + ? (tbl.income.equals(true)) + : (tbl.income.equals(false))) : Constant(true); Expression includeDebtAndCredit = budgetTransactionFilters @@ -5342,19 +5351,22 @@ class FinanceDatabase extends _$FinanceDatabase { List> mergedStreams = []; for (TransactionWallet wallet in allWallets.list) { final totalAmt = transactions.amount.sum(); - JoinedSelectStatement<$TransactionsTable, Transaction> query = - (selectOnly(transactions) - ..addColumns([totalAmt]) - ..where(transactions.paid.equals(true) & - //transactions.income.equals(false) & - transactions.walletFk.equals(wallet.walletPk) & - onlyShowBasedOnTimeRange( - transactions, startDate, endDate, null) & - onlyShowIfFollowsFilters(transactions, - memberTransactionFilters: [ - appStateSettings["currentUserEmail"] ?? "" - ]) & - transactions.sharedReferenceBudgetPk.equals(budgetPk))); + JoinedSelectStatement<$TransactionsTable, + Transaction> query = (selectOnly(transactions) + ..addColumns([totalAmt]) + ..where(transactions.paid.equals(true) & + //transactions.income.equals(false) & + transactions.walletFk.equals(wallet.walletPk) & + onlyShowBasedOnTimeRange(transactions, startDate, endDate, null) & + onlyShowIfFollowsFilters( + transactions, + budget: null, + budgetTransactionFilters: null, + memberTransactionFilters: [ + appStateSettings["currentUserEmail"] ?? "" + ], + ) & + transactions.sharedReferenceBudgetPk.equals(budgetPk))); mergedStreams.add(query .map(((row) => (row.read(totalAmt) ?? 0) * @@ -5719,6 +5731,7 @@ class FinanceDatabase extends _$FinanceDatabase { // evaluateIfNull(tbl.income.equals(income ?? false), income, true) & transactions.walletFk.equals(wallet.walletPk) & onlyShowIfFollowsFilters(transactions, + budget: budget, budgetTransactionFilters: budgetTransactionFilters, memberTransactionFilters: memberTransactionFilters) & onlyShowIfMember(transactions, member) & @@ -5805,6 +5818,7 @@ class FinanceDatabase extends _$FinanceDatabase { // evaluateIfNull(tbl.income.equals(income ?? false), income, true) & transactions.walletFk.equals(wallet.walletPk) & onlyShowIfFollowsFilters(tbl, + budget: budget, budgetTransactionFilters: budgetTransactionFilters, memberTransactionFilters: memberTransactionFilters) & onlyShowIfMember(tbl, member) & @@ -6250,6 +6264,7 @@ class FinanceDatabase extends _$FinanceDatabase { forcedDateTimeRange: forcedDateTimeRange, ) & onlyShowIfFollowsFilters(tbl, + budget: budget, budgetTransactionFilters: budgetTransactionFilters, memberTransactionFilters: memberTransactionFilters) & onlyShowBasedOnTimeRange(tbl, startDate, endDate, budget) & @@ -6364,6 +6379,7 @@ class FinanceDatabase extends _$FinanceDatabase { categoryFks.length <= 0 ? null : true, true) & evaluateIfNull(transactions.paid.equals(true), isPaidOnly, true) & onlyShowIfFollowsFilters(transactions, + budget: budget, budgetTransactionFilters: budgetTransactionFilters, memberTransactionFilters: memberTransactionFilters) & onlyShowBasedOnTimeRange(transactions, null, startDate, budget) & diff --git a/budget/lib/pages/addBudgetPage.dart b/budget/lib/pages/addBudgetPage.dart index edb17de0..49ad36f5 100644 --- a/budget/lib/pages/addBudgetPage.dart +++ b/budget/lib/pages/addBudgetPage.dart @@ -119,6 +119,7 @@ class _AddBudgetPageState extends State { String selectedRecurrence = "Monthly"; bool selectedPin = true; bool selectedShared = false; + bool selectedIncome = false; bool selectedAddedTransactionsOnly = false; List selectedBudgetTransactionFilters = [ BudgetTransactionFilters.defaultBudgetTransactionFilters @@ -153,6 +154,14 @@ class _AddBudgetPageState extends State { }); } + setSelectedIncome(bool income) { + setState(() { + selectedIncome = income; + }); + determineBottomButton(); + return; + } + setSelectedWalletPk(String walletPkPassed) { selectedWalletPk = walletPkPassed; } @@ -328,7 +337,7 @@ class _AddBudgetPageState extends State { : selectedMemberTransactionFilters, isAbsoluteSpendingLimit: currentInstance?.isAbsoluteSpendingLimit ?? false, - income: false, + income: selectedIncome, walletFks: selectedWalletFks, ); } @@ -359,17 +368,23 @@ class _AddBudgetPageState extends State { fullSnap: false, SelectBudgetTypePopup(setBudgetType: setSelectedBudgetType), ); - if (result == "All Transactions") { - await openBottomSheet( - context, - fullSnap: false, - ViewBudgetTransactionFilterInfo( - selectedBudgetFilters: selectedBudgetTransactionFilters, - setSelectedBudgetFilters: setSelectedBudgetFilters, - popOnDefault: true, - ), - ); - } + // if (result == "All Transactions") { + // await openBottomSheet( + // context, + // fullSnap: false, + // ViewBudgetTransactionFilterInfo( + // isIncomeBudget: selectedIncome, + // selectedBudgetFilters: selectedBudgetTransactionFilters, + // setSelectedBudgetFilters: setSelectedBudgetFilters, + // popOnDefault: true, + // ), + // ); + // } + dynamic result2 = await openBottomSheet( + context, + fullSnap: false, + SelectBudgetIncomeTypePopup(setBudgetIncome: setSelectedIncome), + ); } } @@ -384,6 +399,7 @@ class _AddBudgetPageState extends State { if (widget.budget != null) { //We are editing a budget //Fill in the information from the passed in budget + selectedIncome = widget.budget!.income; selectedTitle = widget.budget!.name; selectedPin = widget.budget!.pinned; selectedAmount = widget.budget!.amount; @@ -520,8 +536,10 @@ class _AddBudgetPageState extends State { context, fullSnap: false, ViewBudgetTransactionFilterInfo( - selectedBudgetFilters: selectedBudgetTransactionFilters, - setSelectedBudgetFilters: setSelectedBudgetFilters), + isIncomeBudget: selectedIncome, + selectedBudgetFilters: selectedBudgetTransactionFilters, + setSelectedBudgetFilters: setSelectedBudgetFilters, + ), ); }, onCancelLabel: "info".tr(), @@ -646,6 +664,17 @@ class _AddBudgetPageState extends State { ColumnSliver( centered: true, children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 13), + child: IncomeExpenseTabSelector( + onTabChanged: setSelectedIncome, + initialTabIsIncome: selectedIncome, + syncWithInitial: true, + hasBorderRadius: true, + incomeLabel: "savings-budget".tr(), + expenseLabel: "expense-budget".tr(), + ), + ), SizedBox(height: 4), Padding( padding: const EdgeInsets.symmetric(horizontal: 20), @@ -663,7 +692,7 @@ class _AddBudgetPageState extends State { padding: EdgeInsets.only(left: 7, right: 7), fontSize: 30, fontWeight: FontWeight.bold, - topContentPadding: 20, + topContentPadding: 18, ), ), ), @@ -765,7 +794,9 @@ class _AddBudgetPageState extends State { // ), // ); // }, - // title: "set-spending-goals".tr(), + // title: widget.budget?.income == true + // ? "set-saving-goals".tr() + // : "set-spending-goals".tr(), // icon: appStateSettings["outlinedIcons"] // ? Icons.fact_check_outlined // : Icons.fact_check_rounded, @@ -788,7 +819,9 @@ class _AddBudgetPageState extends State { icon: appStateSettings["outlinedIcons"] ? Icons.fact_check_outlined : Icons.fact_check_rounded, - label: "set-spending-goals".tr(), + label: widget.budget?.income == true + ? "set-saving-goals".tr() + : "set-spending-goals".tr(), onTap: () async { Budget budget = await createBudget(); pushRoute( @@ -942,10 +975,12 @@ class _AddBudgetPageState extends State { context, fullSnap: false, ViewBudgetTransactionFilterInfo( - selectedBudgetFilters: - selectedBudgetTransactionFilters, - setSelectedBudgetFilters: - setSelectedBudgetFilters), + isIncomeBudget: selectedIncome, + selectedBudgetFilters: + selectedBudgetTransactionFilters, + setSelectedBudgetFilters: + setSelectedBudgetFilters, + ), ); }, ), @@ -975,7 +1010,9 @@ class _AddBudgetPageState extends State { : item == BudgetTransactionFilters .includeIncome - ? "include-income".tr() + ? selectedIncome + ? "include-expense".tr() + : "include-income".tr() : item == BudgetTransactionFilters .addedToOtherBudget @@ -1250,7 +1287,8 @@ class _AddBudgetPageState extends State { ), SliverStickyLabelDivider( info: "select-exclude-categories".tr(), - extraInfo: getSelectedCategoriesText(selectedCategoryPksExclude), + extraInfo: getSelectedCategoriesText(selectedCategoryPksExclude, + defaultText: "no-categories".tr()), visible: !(selectedShared == true || selectedAddedTransactionsOnly) && ((widget.budget != null && @@ -1301,9 +1339,10 @@ class _AddBudgetPageState extends State { } } -String getSelectedCategoriesText(List? categoryFks) { +String getSelectedCategoriesText(List? categoryFks, + {String? defaultText}) { if (categoryFks == null || categoryFks.isEmpty == true) { - return "all-categories".tr(); + return defaultText ?? "all-categories".tr(); } else { if (categoryFks.length == 1) { return categoryFks.length.toString() + @@ -1801,6 +1840,79 @@ class _BudgetDetailsState extends State { } } +class SelectBudgetIncomeTypePopup extends StatelessWidget { + const SelectBudgetIncomeTypePopup({required this.setBudgetIncome, super.key}); + final Function(bool isIncome) setBudgetIncome; + + @override + Widget build(BuildContext context) { + return PopupFramework( + title: "select-budget-type".tr(), + child: Column( + children: [ + Row( + children: [ + Expanded( + child: OutlinedButtonStacked( + alignLeft: true, + alignBeside: true, + padding: EdgeInsets.symmetric(horizontal: 20, vertical: 20), + text: "savings-budget".tr(), + iconData: appStateSettings["outlinedIcons"] + ? Icons.savings_outlined + : Icons.savings_rounded, + onTap: () { + setBudgetIncome(true); + Navigator.pop(context); + }, + afterWidget: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ListItem( + "savings-budget-description-1".tr(), + ), + ], + ), + ), + ), + ], + ), + SizedBox(height: 13), + Row( + children: [ + Expanded( + child: OutlinedButtonStacked( + alignLeft: true, + alignBeside: true, + padding: EdgeInsets.symmetric(horizontal: 20, vertical: 20), + text: "expense-budget".tr(), + iconData: appStateSettings["outlinedIcons"] + ? Icons.request_quote_outlined + : Icons.request_quote_rounded, + onTap: () async { + setBudgetIncome(false); + Navigator.pop(context); + }, + afterWidget: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ListItem( + "expense-budget-description-1".tr(), + ), + ], + ), + ), + ), + ], + ), + ], + ), + ); + } +} + class SelectBudgetTypePopup extends StatelessWidget { const SelectBudgetTypePopup({ required this.setBudgetType, @@ -1899,12 +2011,14 @@ class SelectBudgetTypePopup extends StatelessWidget { class ViewBudgetTransactionFilterInfo extends StatefulWidget { const ViewBudgetTransactionFilterInfo({ + required this.isIncomeBudget, required this.selectedBudgetFilters, required this.setSelectedBudgetFilters, this.popOnDefault = false, super.key, }); + final bool isIncomeBudget; final List selectedBudgetFilters; final void Function(List) setSelectedBudgetFilters; final bool popOnDefault; @@ -1996,24 +2110,44 @@ class _ViewBudgetTransactionFilterInfoState ), ], ), - FilterTypeInfoEntry( - selectedBudgetFilters: selectedBudgetFilters, - setSelectedBudgetFilters: widget.setSelectedBudgetFilters, - budgetTransactionFilter: BudgetTransactionFilters.includeIncome, - title: "include-income".tr(), - childrenDescription: [ - ListItem( - "include-income-description-1".tr(), - ), - ListItem( - "include-income-description-2".tr(), - ), - ], - icon: appStateSettings["outlinedIcons"] - ? Icons.arrow_drop_up_outlined - : Icons.arrow_drop_up_rounded, - onTap: onTap, - ), + if (widget.isIncomeBudget == false) + FilterTypeInfoEntry( + selectedBudgetFilters: selectedBudgetFilters, + setSelectedBudgetFilters: widget.setSelectedBudgetFilters, + budgetTransactionFilter: BudgetTransactionFilters.includeIncome, + title: "include-income".tr(), + childrenDescription: [ + ListItem( + "include-income-description-1".tr(), + ), + ListItem( + "include-income-description-2".tr(), + ), + ], + icon: appStateSettings["outlinedIcons"] + ? Icons.arrow_drop_up_outlined + : Icons.arrow_drop_up_rounded, + onTap: onTap, + ), + if (widget.isIncomeBudget == true) + FilterTypeInfoEntry( + selectedBudgetFilters: selectedBudgetFilters, + setSelectedBudgetFilters: widget.setSelectedBudgetFilters, + budgetTransactionFilter: BudgetTransactionFilters.includeIncome, + title: "include-expense".tr(), + childrenDescription: [ + ListItem( + "include-expense-description-1".tr(), + ), + ListItem( + "include-expense-description-2".tr(), + ), + ], + icon: appStateSettings["outlinedIcons"] + ? Icons.arrow_drop_down_outlined + : Icons.arrow_drop_down_rounded, + onTap: onTap, + ), FilterTypeInfoEntry( selectedBudgetFilters: selectedBudgetFilters, setSelectedBudgetFilters: widget.setSelectedBudgetFilters, diff --git a/budget/lib/pages/addTransactionPage.dart b/budget/lib/pages/addTransactionPage.dart index 084aec2c..14ca19dd 100644 --- a/budget/lib/pages/addTransactionPage.dart +++ b/budget/lib/pages/addTransactionPage.dart @@ -740,7 +740,6 @@ class _AddTransactionPageState extends State selectedTitle: selectedTitle, setSelectedNote: setSelectedNoteController, setSelectedTitle: setSelectedTitleController, - selectedCategory: selectedCategory, setSelectedCategory: setSelectedCategory, next: () { afterSetTitle(); @@ -2254,7 +2253,6 @@ class SelectTitle extends StatefulWidget { Key? key, required this.setSelectedTitle, required this.setSelectedNote, - this.selectedCategory, required this.setSelectedCategory, this.selectedTitle, required this.noteInputController, @@ -2262,7 +2260,6 @@ class SelectTitle extends StatefulWidget { }) : super(key: key); final Function(String) setSelectedTitle; final Function(String) setSelectedNote; - final TransactionCategory? selectedCategory; final Function(TransactionCategory) setSelectedCategory; final String? selectedTitle; final TextEditingController noteInputController; @@ -2274,7 +2271,6 @@ class SelectTitle extends StatefulWidget { class _SelectTitleState extends State { int selectedIndex = 0; - String? input = ""; bool foundFromCategory = false; TransactionCategory? selectedCategory; TransactionAssociatedTitle? selectedAssociatedTitle; @@ -2282,22 +2278,36 @@ class _SelectTitleState extends State { @override void initState() { super.initState(); - selectedCategory = widget.selectedCategory; - input = widget.selectedTitle; } - void selectTitle() { - widget.setSelectedCategory(selectedCategory!); - if (foundFromCategory == false) - widget.setSelectedTitle(selectedAssociatedTitle?.title ?? ""); - else - widget.setSelectedTitle(""); + void selectTitle() async { + if (selectedCategory != null) { + widget.setSelectedCategory(selectedCategory!); + + if (foundFromCategory == false) + widget.setSelectedTitle(selectedAssociatedTitle?.title ?? ""); + else + widget.setSelectedTitle(""); + } + Navigator.pop(context); if (widget.next != null) { widget.next!(); } } + void resetTitleSearch() { + setState(() { + selectedCategory = null; + selectedAssociatedTitle = null; + foundFromCategory = false; + }); + // Update the size of the bottom sheet + Future.delayed(Duration(milliseconds: 300), () { + bottomSheetControllerGlobal.snapToExtent(0); + }); + } + @override Widget build(BuildContext context) { return PopupFramework( @@ -2315,43 +2325,39 @@ class _SelectTitleState extends State { : Icons.title_rounded, initialValue: widget.selectedTitle, autoFocus: true, - onEditingComplete: () { - //if selected a tag and a category is set, then go to enter amount - //else enter amount - if (selectedCategory?.name.toString().trim().toLowerCase() == - input?.toString().trim().toLowerCase()) { - widget.setSelectedTitle(""); - } else { - widget.setSelectedTitle( - selectedAssociatedTitle?.title ?? input ?? ""); - } + onEditingComplete: selectTitle, + onChanged: (text) async { + widget.setSelectedTitle(text.trim()); - if (selectedCategory != null) { - widget.setSelectedCategory(selectedCategory!); - } - Navigator.pop(context); - if (widget.next != null) { - widget.next!(); + if (text.trim() == "" || text.trim().length < 2) { + resetTitleSearch(); + return; } - }, - onChanged: (text) async { - input = text; - widget.setSelectedTitle(input!); - List result = await getRelatingAssociatedTitle(text); - TransactionAssociatedTitle? selectedTitleLocal = result[0]; - String? categoryFk = result[1]; - bool foundFromCategoryLocal = result[2]; + TransactionAssociatedTitle? selectedTitleLocal = + await getLikeAssociatedTitle(text); + bool foundFromCategoryLocal = false; if (selectedTitleLocal == null) { - selectedTitleLocal = await getLikeAssociatedTitle(text); - categoryFk = selectedTitleLocal?.categoryFk; - foundFromCategoryLocal = false; + TransactionCategory? selectedCategoryLocal = + await database.getRelatingCategory(text.trim()); + if (selectedCategoryLocal != null) { + selectedTitleLocal = TransactionAssociatedTitle( + associatedTitlePk: "-1", + categoryFk: selectedCategoryLocal.categoryPk, + title: selectedCategoryLocal.name, + dateCreated: selectedCategoryLocal.dateCreated, + order: -1, + isExactMatch: false, + ); + foundFromCategoryLocal = true; + } } - if (categoryFk != null) { - TransactionCategory? foundCategory = - await database.getCategoryInstance(categoryFk); + if (selectedTitleLocal != null) { + TransactionCategory? foundCategory = await database + .getCategoryInstanceOrNull(selectedTitleLocal.categoryFk); + // Update the size of the bottom sheet Future.delayed(Duration(milliseconds: 100), () { bottomSheetControllerGlobal.snapToExtent(0); @@ -2362,15 +2368,7 @@ class _SelectTitleState extends State { foundFromCategory = foundFromCategoryLocal; }); } else { - setState(() { - selectedCategory = null; - selectedAssociatedTitle = null; - foundFromCategory = foundFromCategoryLocal; - }); - // Update the size of the bottom sheet - Future.delayed(Duration(milliseconds: 300), () { - bottomSheetControllerGlobal.snapToExtent(0); - }); + resetTitleSearch(); } }, labelText: "title-placeholder".tr(), @@ -2380,7 +2378,7 @@ class _SelectTitleState extends State { AnimatedSizeSwitcher( sizeDuration: Duration(milliseconds: 400), sizeCurve: Curves.easeInOut, - child: selectedCategory == null + child: selectedAssociatedTitle == null ? Container( key: ValueKey(0), width: getWidthBottomSheet(context) - 36, @@ -2705,112 +2703,15 @@ class _EnterTextButtonState extends State { } } -getRelatingAssociatedTitleLimited(String text) async { - String? categoryFk; - bool foundFromCategoryLocal = false; - TransactionAssociatedTitle? selectedTitleLocal; - - TransactionAssociatedTitle relatingTitle; - try { - relatingTitle = await database.getRelatingAssociatedTitle(text); - categoryFk = relatingTitle.categoryFk; - selectedTitleLocal = relatingTitle; - } catch (e) { - print("No relating titles found!"); - } - - if (categoryFk == null) { - TransactionCategory relatingCategory; - try { - relatingCategory = await database.getRelatingCategory(text); - } catch (e) { - print("No category names found!"); - return [selectedTitleLocal, categoryFk, foundFromCategoryLocal]; - } - - TransactionCategory category = relatingCategory; - categoryFk = category.categoryPk; - selectedTitleLocal = TransactionAssociatedTitle( - associatedTitlePk: "-1", - title: category.name, - categoryFk: category.categoryPk, - dateCreated: category.dateCreated, - dateTimeModified: null, - order: category.order, - isExactMatch: false, - ); - foundFromCategoryLocal = true; - } - return [selectedTitleLocal, categoryFk, foundFromCategoryLocal]; -} - Future getLikeAssociatedTitle(String text) async { - if (text.trim() == "" || text.trim().length < 2) { - return null; - } List similarTitles = await database.getSimilarAssociatedTitles(title: text); return similarTitles.isEmpty ? null : similarTitles[0]; } -getRelatingAssociatedTitle(String text) async { - String? categoryFk = null; - TransactionAssociatedTitle? selectedTitleLocal; - - // getLikeAssociatedTitle is more efficient since it uses queries - // - // Alternative: - // be more efficient when finding - // lookup if title matches exactly category name in database - // then get list of all associated titles that contain that title in database - // then loop through those to see which match - // instead of getting all then looping - - // List allTitles = - // (await database.getAllAssociatedTitles()); - - // for (TransactionAssociatedTitle title in allTitles) { - // if (text.toLowerCase().contains(title.title.toLowerCase())) { - // categoryFk = title.categoryFk; - // selectedTitleLocal = title; - // break; - // } - // } - - bool foundFromCategoryLocal = false; - // if (categoryFk != null) { - // print("SEARCHING"); - List allCategories = (await database.getAllCategories()); - // print(allCategories); - for (TransactionCategory category in allCategories) { - if (text.toLowerCase().contains(category.name.toLowerCase())) { - categoryFk = category.categoryPk; - selectedTitleLocal = TransactionAssociatedTitle( - associatedTitlePk: "-1", - title: category.name, - categoryFk: category.categoryPk, - dateCreated: category.dateCreated, - dateTimeModified: null, - order: category.order, - isExactMatch: false, - ); - foundFromCategoryLocal = true; - - break; - } - } - // } - - return [selectedTitleLocal, categoryFk, foundFromCategoryLocal]; -} - Future addAssociatedTitles( String selectedTitle, TransactionCategory selectedCategory) async { if (appStateSettings["autoAddAssociatedTitles"]) { - List result = await getRelatingAssociatedTitle(selectedTitle); - TransactionAssociatedTitle? foundTitle = result[0]; - int length = await database.getAmountOfAssociatedTitles(); - try { // Should this check be moved directly into createOrUpdateAssociatedTitle? TransactionAssociatedTitle checkIfAlreadyExists = @@ -2828,31 +2729,20 @@ Future addAssociatedTitles( print(e.toString()); } - if (foundTitle == null || - (foundTitle.categoryFk != selectedCategory.categoryPk || - foundTitle.title.trim() != selectedTitle.trim()) && - !(foundTitle.categoryFk == selectedCategory.categoryPk && - foundTitle.title.trim() == selectedTitle.trim())) { - //Should just add to the end but be sorted in opposite direction on edit titles page - //Also when it loops through getRelatingAssociatedTitle it should reverse the order - // It's way faster to avoid pushing elements all down by 1 spot - // I think it also fixes race conditions when writing quickly to the db - // print("successfully added title " + selectedTitle); - //it makes sense to add a new title if the exisitng one is from a different category, it will bump this one down and take priority + int length = await database.getAmountOfAssociatedTitles(); - await database.createOrUpdateAssociatedTitle( - insert: true, - TransactionAssociatedTitle( - associatedTitlePk: "-1", - categoryFk: selectedCategory.categoryPk, - isExactMatch: false, - title: selectedTitle.trim(), - dateCreated: DateTime.now(), - dateTimeModified: null, - order: length, - ), - ); - } + await database.createOrUpdateAssociatedTitle( + insert: true, + TransactionAssociatedTitle( + associatedTitlePk: "-1", + categoryFk: selectedCategory.categoryPk, + isExactMatch: false, + title: selectedTitle.trim(), + dateCreated: DateTime.now(), + dateTimeModified: null, + order: length, + ), + ); } return true; } diff --git a/budget/lib/pages/billSplitter.dart b/budget/lib/pages/billSplitter.dart index 7d5e042e..f0a4682d 100644 --- a/budget/lib/pages/billSplitter.dart +++ b/budget/lib/pages/billSplitter.dart @@ -253,7 +253,6 @@ class _BillSplitterState extends State { openPage: AddBillItemPage( splitPersons: splitPersons, addBillSplitterItem: addBillSplitterItem, - deleteBillSplitterItem: deleteBillSplitterItem, updateBillSplitterItem: updateBillSplitterItem, addPerson: addPerson, deletePerson: deletePerson, @@ -616,7 +615,6 @@ class BillSplitterItemEntry extends StatelessWidget { billSplitterItem: billSplitterItem, billSplitterItemIndex: billSplitterItemIndex, addBillSplitterItem: addBillSplitterItem, - deleteBillSplitterItem: deleteBillSplitterItem, updateBillSplitterItem: updateBillSplitterItem, addPerson: addPerson, deletePerson: deletePerson, @@ -807,7 +805,6 @@ class AddBillItemPage extends StatefulWidget { this.billSplitterItem, this.billSplitterItemIndex, required this.addBillSplitterItem, - required this.deleteBillSplitterItem, required this.updateBillSplitterItem, required this.addPerson, required this.deletePerson, @@ -819,8 +816,6 @@ class AddBillItemPage extends StatefulWidget { final BillSplitterItem? billSplitterItem; final int? billSplitterItemIndex; final Function(BillSplitterItem) addBillSplitterItem; - final Future Function(BillSplitterItem) - deleteBillSplitterItem; final bool Function(SplitPerson) addPerson; final Function(SplitPerson) deletePerson; final Function(BillSplitterItem, int? index) updateBillSplitterItem; @@ -939,24 +934,6 @@ class _AddBillItemPageState extends State { : "edit-item".tr(), dragDownToDismiss: true, horizontalPadding: getHorizontalPaddingConstrained(context) + 13, - actions: [ - widget.billSplitterItem != null - ? IconButton( - padding: EdgeInsets.all(15), - tooltip: "delete-item", - onPressed: () async { - if (await widget - .deleteBillSplitterItem(billSplitterItem) == - DeletePopupAction.Delete) { - Navigator.pop(context); - } - }, - icon: Icon(appStateSettings["outlinedIcons"] - ? Icons.delete_outlined - : Icons.delete_rounded), - ) - : SizedBox.shrink(), - ], listWidgets: [ Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/budget/lib/pages/budgetPage.dart b/budget/lib/pages/budgetPage.dart index 2ad6bc55..2a1d33d1 100644 --- a/budget/lib/pages/budgetPage.dart +++ b/budget/lib/pages/budgetPage.dart @@ -170,6 +170,7 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { ), ), PieChartOptions( + isIncomeBudget: widget.budget.income == true, hasSubCategories: hasSubCategories, selectedCategory: selectedCategory, onClearSelection: () { @@ -265,7 +266,8 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { snapshot.data!.forEach((category) { totalSpent = totalSpent + category.total; }); - totalSpent = totalSpent * -1; + totalSpent = + totalSpent * determineBudgetPolarity(widget.budget); } if (snapshot.hasData) { @@ -337,7 +339,9 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { ), // DropdownItemMenu( // id: "spending-goals", - // label: "spending-goals".tr(), + // label: widget.budget.income == true + // ? "saving-goals".tr() + // : "spending-goals".tr(), // icon: appStateSettings["outlinedIcons"] // ? Icons.fact_check_outlined // : Icons.fact_check_rounded, @@ -388,15 +392,29 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { if (snapshot.hasData) { TotalSpentCategoriesSummary s = watchTotalSpentInTimeRangeHelper( - dataInput: snapshot.data ?? [], - showAllSubcategories: showAllSubcategories); + dataInput: snapshot.data ?? [], + showAllSubcategories: showAllSubcategories, + multiplyTotalBy: determineBudgetPolarity(widget.budget), + ); List categoryEntries = []; snapshot.data!.asMap().forEach( (index, category) { categoryEntries.add( CategoryEntry( - isForBudget: true, + getPercentageAfterText: (double categorySpent) { + if (widget.budget.income == true) { + return categorySpent < 0 && + showIncomeExpenseIcons + ? "of-total".tr() + : "of-saving".tr(); + } else { + return categorySpent > 0 && + showIncomeExpenseIcons + ? "of-total".tr() + : "of-spending".tr(); + } + }, selectedSubCategoryPk: selectedCategory?.categoryPk, expandSubcategories: showAllSubcategories || category.category.categoryPk == @@ -406,11 +424,9 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { subcategoriesWithTotalMap: s.subCategorySpendingIndexedByMainCategoryPk, todayPercent: todayPercent, - overSpentColor: showIncomeExpenseIcons - ? category.total > 0 - ? getColor(context, "incomeAmount") - : getColor(context, "expenseAmount") - : null, + overSpentColor: category.total > 0 + ? getColor(context, "incomeAmount") + : getColor(context, "expenseAmount"), showIncomeExpenseIcons: showIncomeExpenseIcons, onLongPress: (TransactionCategory category, CategoryBudgetLimit? categoryBudgetLimit) { @@ -556,7 +572,10 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { : todayPercent, ghostPercent: budgetAmount == 0 ? 0 - : (((snapshot.data ?? 0) * -1) / + : (((snapshot.data ?? 0) * + determineBudgetPolarity( + widget + .budget)) / budgetAmount) * 100, ); @@ -703,6 +722,10 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { PastBudgetsPage(budgetPk: widget.budget.budgetPk), ); }, + text: "view-previous-budget-periods".tr(), + icon: appStateSettings["outlinedIcons"] + ? Icons.history_outlined + : Icons.history_rounded, color: dynamicPastel( context, budgetColorScheme.secondaryContainer, @@ -711,9 +734,6 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { amountDark: appStateSettings["materialYou"] ? 0.4 : 0.55, ), - icon: appStateSettings["outlinedIcons"] - ? Icons.history_outlined - : Icons.history_rounded, buttonIconColor: dynamicPastel( context, HexColor(widget.budget.colour, @@ -727,7 +747,6 @@ class _BudgetPageContentState extends State<_BudgetPageContent> { Theme.of(context).colorScheme.primary), amount: 0.7, inverse: true), - text: "view-previous-budget-periods".tr(), ), ) : SizedBox.shrink(), @@ -962,7 +981,8 @@ class _BudgetLineGraphState extends State { allWallets: Provider.of(context, listen: false), showCumulativeSpending: appStateSettings["showCumulativeSpending"], - invertPolarity: true, + invertPolarity: + determineBudgetPolarity(widget.budget) == -1 ? true : false, appStateSettingsPassed: appStateSettings, ); List points = calculatePoints(p); @@ -1157,9 +1177,7 @@ class _TotalSpentState extends State { Container( padding: const EdgeInsets.only(bottom: 1.5), child: TextFont( - text: (showTotalSpent - ? " " + "spent-amount-of".tr() + " " - : " " + "remaining-amount-of".tr() + " ") + + text: getBudgetSpentText(widget.budget.income) + convertToMoney( Provider.of(context), budgetAmount), fontSize: 15, @@ -1178,7 +1196,7 @@ class _TotalSpentState extends State { child: CountNumber( count: showTotalSpent ? widget.totalSpent - : -1 * (budgetAmount - widget.totalSpent), + : widget.totalSpent - budgetAmount, duration: Duration(milliseconds: 400), initialCount: (0), textBuilder: (number) { @@ -1187,7 +1205,7 @@ class _TotalSpentState extends State { Provider.of(context), number, finalNumber: showTotalSpent ? widget.totalSpent - : -1 * (budgetAmount - widget.totalSpent)), + : widget.totalSpent - budgetAmount), fontSize: 22, textAlign: TextAlign.left, fontWeight: FontWeight.bold, @@ -1200,9 +1218,7 @@ class _TotalSpentState extends State { Container( padding: const EdgeInsets.only(bottom: 1.5), child: TextFont( - text: (showTotalSpent - ? " " + "spent-amount-of".tr() + " " - : " " + "overspent-amount-of".tr() + " ") + + text: getBudgetOverSpentText(widget.budget.income) + convertToMoney( Provider.of(context), budgetAmount), fontSize: 15, @@ -1218,3 +1234,35 @@ class _TotalSpentState extends State { ); } } + +String getBudgetSpentText(bool isIncome) { + if (isIncome == false) { + return (appStateSettings["showTotalSpentForBudget"] + ? " " + "spent-amount-of".tr() + " " + : " " + "remaining-amount-of".tr() + " "); + } else { + return (appStateSettings["showTotalSpentForBudget"] + ? " " + "saved-amount-of".tr() + " " + : " " + "remaining-amount-of".tr() + " "); + } +} + +String getBudgetOverSpentText(bool isIncome) { + if (isIncome == false) { + return (appStateSettings["showTotalSpentForBudget"] + ? " " + "spent-amount-of".tr() + " " + : " " + "overspent-amount-of".tr() + " "); + } else { + return (appStateSettings["showTotalSpentForBudget"] + ? " " + "saved-amount-of".tr() + " " + : " " + "over-saved-amount-of".tr() + " "); + } +} + +int determineBudgetPolarity(Budget budget) { + if (budget.income == true) { + return 1; + } else { + return -1; + } +} diff --git a/budget/lib/pages/editBudgetLimitsPage.dart b/budget/lib/pages/editBudgetLimitsPage.dart index 4a1e2cfe..85c62199 100644 --- a/budget/lib/pages/editBudgetLimitsPage.dart +++ b/budget/lib/pages/editBudgetLimitsPage.dart @@ -45,14 +45,18 @@ class _EditBudgetLimitsPageState extends State { return PageFramework( dragDownToDismiss: true, - title: "spending-goals".tr(), + title: widget.budget.income == true + ? "saving-goals".tr() + : "spending-goals".tr(), slivers: [ SliverToBoxAdapter( child: Padding( padding: EdgeInsets.symmetric( horizontal: getHorizontalPaddingConstrained(context)), child: SettingsContainerDropdown( - title: "spending-limit-type".tr(), + title: widget.budget.income == true + ? "saving-limit-type".tr() + : "spending-limit-type".tr(), icon: appStateSettings["outlinedIcons"] ? Icons.confirmation_num_outlined : Icons.confirmation_num_rounded, @@ -83,6 +87,7 @@ class _EditBudgetLimitsPageState extends State { ), ), CategoryLimits( + isIncomeBudget: widget.budget.income, isAbsoluteSpendingLimit: selectedIsAbsoluteSpendingLimit, categoryFks: widget.budget.categoryFks, categoryFksExclude: widget.budget.categoryFksExclude, diff --git a/budget/lib/pages/objectivePage.dart b/budget/lib/pages/objectivePage.dart index dd264b6d..19e180e3 100644 --- a/budget/lib/pages/objectivePage.dart +++ b/budget/lib/pages/objectivePage.dart @@ -555,14 +555,31 @@ class _ObjectivePageContentState extends State<_ObjectivePageContent> { context: context, initialObjective: widget.objective); }, - color: Theme.of(context) - .colorScheme - .secondaryContainer - .withOpacity(0.4), icon: appStateSettings["outlinedIcons"] ? Icons.punch_clock_outlined : Icons.punch_clock_rounded, text: "setup-installment-payments".tr(), + color: dynamicPastel( + context, + objectiveColorScheme.secondaryContainer, + amountLight: + appStateSettings["materialYou"] ? 0.25 : 0.4, + amountDark: + appStateSettings["materialYou"] ? 0.4 : 0.55, + ), + buttonIconColor: dynamicPastel( + context, + HexColor(widget.objective.colour, + defaultColor: + Theme.of(context).colorScheme.primary), + amount: 0.5), + buttonIconColorIcon: dynamicPastel( + context, + HexColor(widget.objective.colour, + defaultColor: + Theme.of(context).colorScheme.primary), + amount: 0.7, + inverse: true), ) : SizedBox.shrink(), ), diff --git a/budget/lib/pages/pastBudgetsPage.dart b/budget/lib/pages/pastBudgetsPage.dart index 956dda2c..3f69f1ac 100644 --- a/budget/lib/pages/pastBudgetsPage.dart +++ b/budget/lib/pages/pastBudgetsPage.dart @@ -365,13 +365,21 @@ class __PastBudgetsPageContentState extends State<_PastBudgetsPageContent> { for (int i = snapshot.data!.length - 1; i >= 0; i--) { - if ((snapshot.data![i] ?? 0) * -1 < + if ((snapshot.data![i] ?? 0) * + determineBudgetPolarity( + widget.budget) < minY) { - minY = (snapshot.data![i] ?? 0) * -1; + minY = (snapshot.data![i] ?? 0) * + determineBudgetPolarity( + widget.budget); } - if ((snapshot.data![i] ?? 0) * -1 > + if ((snapshot.data![i] ?? 0) * + determineBudgetPolarity( + widget.budget) > maxY) { - maxY = (snapshot.data![i] ?? 0) * -1; + maxY = (snapshot.data![i] ?? 0) * + determineBudgetPolarity( + widget.budget); } spots.add(FlSpot( snapshot.data!.length - @@ -379,7 +387,9 @@ class __PastBudgetsPageContentState extends State<_PastBudgetsPageContent> { i.toDouble(), (snapshot.data![i] ?? 0).abs() == 0 ? 0.00000000001 - : (snapshot.data![i] ?? 0) * -1, + : (snapshot.data![i] ?? 0) * + determineBudgetPolarity( + widget.budget), )); } // print(minY); @@ -1015,7 +1025,7 @@ class PastBudgetContainer extends StatelessWidget { snapshot.data!.forEach((category) { totalSpent = totalSpent + category.total; }); - totalSpent = totalSpent * -1; + totalSpent = totalSpent * determineBudgetPolarity(budget); if (totalSpent == -0) { totalSpent = 0; } @@ -1101,15 +1111,8 @@ class PastBudgetContainer extends StatelessWidget { const EdgeInsets.only(bottom: 0.5), child: Container( child: TextFont( - text: (appStateSettings[ - "showTotalSpentForBudget"] - ? " " + - "spent-amount-of".tr() + - " " - : " " + - "remaining-amount-of" - .tr() + - " ") + + text: getBudgetSpentText( + budget.income) + convertToMoney( Provider.of( context), @@ -1131,7 +1134,7 @@ class PastBudgetContainer extends StatelessWidget { count: appStateSettings[ "showTotalSpentForBudget"] ? totalSpent - : -1 * (budgetAmount - totalSpent), + : totalSpent - budgetAmount, duration: Duration(milliseconds: 700), initialCount: (0), textBuilder: (number) { @@ -1142,9 +1145,7 @@ class PastBudgetContainer extends StatelessWidget { finalNumber: appStateSettings[ "showTotalSpentForBudget"] ? totalSpent - : -1 * - (budgetAmount - - totalSpent)), + : totalSpent - budgetAmount), fontSize: 16, textAlign: TextAlign.left, fontWeight: FontWeight.bold, @@ -1156,14 +1157,8 @@ class PastBudgetContainer extends StatelessWidget { child: Container( padding: const EdgeInsets.only(bottom: 0), child: TextFont( - text: (appStateSettings[ - "showTotalSpentForBudget"] - ? " " + - "spent-amount-of".tr() + - " " - : " " + - "overspent-amount-of".tr() + - " ") + + text: getBudgetOverSpentText( + budget.income) + convertToMoney( Provider.of( context), diff --git a/budget/lib/pages/walletDetailsPage.dart b/budget/lib/pages/walletDetailsPage.dart index 59cb68b4..7bd69e3d 100644 --- a/budget/lib/pages/walletDetailsPage.dart +++ b/budget/lib/pages/walletDetailsPage.dart @@ -619,75 +619,72 @@ class _WalletDetailsPageState extends State ) : SizedBox.shrink(); + Widget totalNetContainer = Padding( + padding: const EdgeInsets.symmetric(horizontal: 13), + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: getHorizontalPaddingConstrained( + context, + enabled: + enableDoubleColumn(context) == false && widget.wallet == null, + )), + child: TransactionsAmountBox( + onLongPress: () { + if (widget.wallet == null) { + selectAllSpendingPeriod(); + } + }, + label: + widget.wallet != null ? "account-total".tr() : "net-total".tr(), + absolute: false, + currencyKey: Provider.of(context) + .indexedByPk[appStateSettings["selectedWalletPk"]] + ?.currency, + totalWithCountStream: database.watchTotalWithCountOfWallet( + isIncome: null, + allWallets: Provider.of(context), + cycleSettingsExtension: "", + // When wallet type is normal, forcefully show all time for net-spending + followCustomPeriodCycle: widget.wallet == null ? true : false, + searchFilters: widget.wallet != null + ? SearchFilters().copyWith(walletPks: walletPks) + : (searchFilters ?? SearchFilters()) + .copyWith(walletPks: walletPks), + forcedDateTimeRange: selectedDateTimeRange, + ), + textColor: getColor(context, "black"), + openPage: TransactionsSearchPage( + initialFilters: widget.wallet != null + ? SearchFilters().copyWith(walletPks: walletPks) + : (searchFilters == null ? SearchFilters() : searchFilters) + ?.copyWith( + dateTimeRange: getDateTimeRangeForPassedSearchFilters( + cycleSettingsExtension: "", + selectedDateTimeRange: selectedDateTimeRange, + ), + walletPks: walletPks, + ), + ), + ), + ), + ); + List currentTabPage = [ SliverToBoxAdapter( child: Column( children: [ SizedBox(height: 10), - Padding( - padding: const EdgeInsets.only(bottom: 13, left: 13, right: 13), - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: getHorizontalPaddingConstrained( - context, - enabled: enableDoubleColumn(context) == false && - widget.wallet == null, - )), + if (widget.wallet == null) + Padding( + padding: const EdgeInsets.only(bottom: 13), child: Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ - Expanded( - child: TransactionsAmountBox( - onLongPress: () { - if (widget.wallet == null) { - selectAllSpendingPeriod(); - } - }, - label: widget.wallet != null - ? "account-total".tr() - : "net-total".tr(), - absolute: false, - currencyKey: Provider.of(context) - .indexedByPk[appStateSettings["selectedWalletPk"]] - ?.currency, - totalWithCountStream: - database.watchTotalWithCountOfWallet( - isIncome: null, - allWallets: Provider.of(context), - - cycleSettingsExtension: "", - // When wallet type is normal, forcefully show all time for net-spending - followCustomPeriodCycle: true, - searchFilters: widget.wallet != null - ? SearchFilters().copyWith(walletPks: walletPks) - : (searchFilters ?? SearchFilters()) - .copyWith(walletPks: walletPks), - forcedDateTimeRange: selectedDateTimeRange, - ), - textColor: getColor(context, "black"), - openPage: TransactionsSearchPage( - initialFilters: widget.wallet != null - ? SearchFilters().copyWith(walletPks: walletPks) - : (searchFilters == null - ? SearchFilters() - : searchFilters) - ?.copyWith( - dateTimeRange: - getDateTimeRangeForPassedSearchFilters( - cycleSettingsExtension: "", - selectedDateTimeRange: - selectedDateTimeRange, - ), - walletPks: walletPks, - ), - ), - ), - ), + Expanded(child: totalNetContainer), ], ), ), - ), if (widget.wallet != null) Padding( padding: const EdgeInsets.symmetric(horizontal: 13), @@ -697,19 +694,19 @@ class _WalletDetailsPageState extends State padding: const EdgeInsets.only(bottom: 13), child: selectedTabCurrent, ), - TipBox( - padding: const EdgeInsets.only(bottom: 13), - onTap: () { - pushRoute( - context, - WalletDetailsPage( - wallet: null, - ), - ); - }, - text: "view-all-spending-page-tip".tr(), - settingsString: "allSpendingPageTip", - ), + // TipBox( + // padding: const EdgeInsets.only(bottom: 13), + // onTap: () { + // pushRoute( + // context, + // WalletDetailsPage( + // wallet: null, + // ), + // ); + // }, + // text: "view-all-spending-page-tip".tr(), + // settingsString: "allSpendingPageTip", + // ), ], ), ), @@ -871,7 +868,8 @@ class _WalletDetailsPageState extends State selectedTab: null, ), onLongPress: () { - selectAllSpendingPeriod(); + // Since always all time, disable long press custom period for these rows + //selectAllSpendingPeriod(); }, ), AmountSpentEntryRow( @@ -899,7 +897,8 @@ class _WalletDetailsPageState extends State selectedTab: null, ), onLongPress: () { - selectAllSpendingPeriod(); + // Since always all time, disable long press custom period for these rows + //selectAllSpendingPeriod(); }, ), SizedBox(height: 10), @@ -1329,6 +1328,12 @@ class _WalletDetailsPageState extends State sliver: MultiSliver( children: [ sliverAppBar, + if (widget.wallet != null) + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.only(top: 8), + child: totalNetContainer, + )), if (widget.wallet == null) SliverToBoxAdapter( child: tabDateFilterSelectorHeader), @@ -1842,8 +1847,10 @@ class _WalletCategoryPieChartState extends State { builder: (context, snapshot) { if (snapshot.hasData) { TotalSpentCategoriesSummary s = watchTotalSpentInTimeRangeHelper( - dataInput: snapshot.data ?? [], - showAllSubcategories: showAllSubcategories); + dataInput: snapshot.data ?? [], + showAllSubcategories: showAllSubcategories, + multiplyTotalBy: -1, + ); // print(s.totalSpent); List categoryEntries = []; snapshot.data!.asMap().forEach((index, category) { @@ -1901,6 +1908,11 @@ class _WalletCategoryPieChartState extends State { category.category.categoryPk, allSelected: selectedCategory == null, showIncomeExpenseIcons: true, + getPercentageAfterText: (double categorySpent) { + return categorySpent > 0 + ? "of-incoming".tr() + : "of-outgoing".tr(); + }, ), ); }); @@ -1920,6 +1932,7 @@ class _WalletCategoryPieChartState extends State { }, ), PieChartOptions( + isIncomeBudget: false, hasSubCategories: s.hasSubCategories, selectedCategory: selectedCategory, onClearSelection: () { diff --git a/budget/lib/struct/spendingSummaryHelper.dart b/budget/lib/struct/spendingSummaryHelper.dart index 11b4660e..f547244f 100644 --- a/budget/lib/struct/spendingSummaryHelper.dart +++ b/budget/lib/struct/spendingSummaryHelper.dart @@ -47,6 +47,7 @@ class TotalSpentCategoriesSummary { TotalSpentCategoriesSummary watchTotalSpentInTimeRangeHelper({ required List dataInput, required bool showAllSubcategories, + required int multiplyTotalBy, }) { TotalSpentCategoriesSummary s = TotalSpentCategoriesSummary(); @@ -115,13 +116,14 @@ TotalSpentCategoriesSummary watchTotalSpentInTimeRangeHelper({ s.hasSubCategories = s.subCategorySpendingIndexedByMainCategoryPk.isNotEmpty; - s.totalSpent = s.totalSpent * -1; + s.totalSpent = s.totalSpent * multiplyTotalBy; return s; } class PieChartOptions extends StatelessWidget { const PieChartOptions({ + required this.isIncomeBudget, required this.hasSubCategories, required this.selectedCategory, required this.onClearSelection, @@ -132,6 +134,7 @@ class PieChartOptions extends StatelessWidget { this.useHorizontalPaddingConstrained = true, super.key, }); + final bool isIncomeBudget; final bool hasSubCategories; final TransactionCategory? selectedCategory; final VoidCallback onClearSelection; @@ -205,7 +208,9 @@ class PieChartOptions extends StatelessWidget { ), if (onEditSpendingGoals != null) Tooltip( - message: "edit-spending-goals".tr(), + message: isIncomeBudget + ? "edit-saving-goals".tr() + : "edit-spending-goals".tr(), child: IconButton( padding: EdgeInsets.all(15), onPressed: onEditSpendingGoals, diff --git a/budget/lib/widgets/budgetContainer.dart b/budget/lib/widgets/budgetContainer.dart index 25b08060..8910d41f 100644 --- a/budget/lib/widgets/budgetContainer.dart +++ b/budget/lib/widgets/budgetContainer.dart @@ -78,7 +78,7 @@ class BudgetContainer extends StatelessWidget { snapshot.data!.forEach((category) { totalSpent = totalSpent + category.total; }); - totalSpent = totalSpent * -1; + totalSpent = totalSpent * determineBudgetPolarity(budget); return Container( // height: height, child: ClipRRect( @@ -150,16 +150,8 @@ class BudgetContainer extends StatelessWidget { bottom: 1.4), child: Container( child: TextFont( - text: (appStateSettings[ - "showTotalSpentForBudget"] - ? " " + - "spent-amount-of" - .tr() + - " " - : " " + - "remaining-amount-of" - .tr() + - " ") + + text: getBudgetSpentText( + budget.income) + convertToMoney( Provider.of( context), @@ -181,8 +173,7 @@ class BudgetContainer extends StatelessWidget { count: appStateSettings[ "showTotalSpentForBudget"] ? totalSpent - : -1 * - (budgetAmount - totalSpent), + : totalSpent - budgetAmount, duration: Duration(milliseconds: 700), initialCount: (0), textBuilder: (number) { @@ -194,9 +185,8 @@ class BudgetContainer extends StatelessWidget { finalNumber: appStateSettings[ "showTotalSpentForBudget"] ? totalSpent - : -1 * - (budgetAmount - - totalSpent)), + : totalSpent - + budgetAmount), fontSize: 18, textAlign: TextAlign.left, fontWeight: FontWeight.bold, @@ -209,15 +199,8 @@ class BudgetContainer extends StatelessWidget { padding: const EdgeInsets.only( bottom: 1.4), child: TextFont( - text: (appStateSettings[ - "showTotalSpentForBudget"] - ? " " + - "spent-amount-of".tr() + - " " - : " " + - "overspent-amount-of" - .tr() + - " ") + + text: getBudgetOverSpentText( + budget.income) + convertToMoney( Provider.of( context), @@ -320,7 +303,9 @@ class BudgetContainer extends StatelessWidget { dateForRange: dateForRangeLocal, ghostPercent: budgetAmount == 0 ? 0 - : (((snapshot.data ?? 0) * -1) / budgetAmount) * + : (((snapshot.data ?? 0) * + determineBudgetPolarity(budget)) / + budgetAmount) * 100, ); }), @@ -452,8 +437,8 @@ class DaySpending extends StatelessWidget { ) .inDays + 1; - double amount = - ((totalAmount - budgetAmount) / remainingDays) * -1; + double amount = ((totalAmount - budgetAmount) / remainingDays) * + determineBudgetPolarity(budget); return TextFont( textColor: getColor(context, "black").withAlpha(80), text: isOutOfRange diff --git a/budget/lib/widgets/categoryEntry.dart b/budget/lib/widgets/categoryEntry.dart index b9239080..477d62a1 100644 --- a/budget/lib/widgets/categoryEntry.dart +++ b/budget/lib/widgets/categoryEntry.dart @@ -45,7 +45,7 @@ class CategoryEntry extends StatelessWidget { this.isSubcategory = false, this.mainCategorySpentIfSubcategory = 0, this.useHorizontalPaddingConstrained = true, - this.isForBudget = false, + this.getPercentageAfterText, }) : super(key: key); final TransactionCategory category; @@ -73,7 +73,7 @@ class CategoryEntry extends StatelessWidget { final bool isSubcategory; final double mainCategorySpentIfSubcategory; final bool useHorizontalPaddingConstrained; - final bool isForBudget; + final String Function(double categorySpent)? getPercentageAfterText; @override Widget build(BuildContext context) { @@ -120,8 +120,8 @@ class CategoryEntry extends StatelessWidget { bool isOverspent = categoryBudgetLimit == null ? false : isAbsoluteSpendingLimit - ? categorySpent > categoryLimitAmount - : categorySpent > (categoryLimitAmount / 100 * budgetLimit); + ? categorySpent.abs() > categoryLimitAmount + : categorySpent.abs() > (categoryLimitAmount / 100 * budgetLimit); component = Padding( padding: EdgeInsets.symmetric( horizontal: isSubcategory == false @@ -283,14 +283,10 @@ class CategoryEntry extends StatelessWidget { " " + (isSubcategory ? "of-subcategory".tr() - : showIncomeExpenseIcons && - categorySpent > 0 - ? isForBudget - ? "of-total".tr() - : "of-incoming".tr() - : isForBudget - ? "of-spending".tr() - : "of-outgoing".tr()); + : getPercentageAfterText == null + ? "" + : getPercentageAfterText!( + categorySpent)); return TextFont( text: text, diff --git a/budget/lib/widgets/categoryLimits.dart b/budget/lib/widgets/categoryLimits.dart index 3c8432df..80c27ff0 100644 --- a/budget/lib/widgets/categoryLimits.dart +++ b/budget/lib/widgets/categoryLimits.dart @@ -25,6 +25,7 @@ import 'tappableTextEntry.dart'; class CategoryLimits extends StatefulWidget { const CategoryLimits({ + required this.isIncomeBudget, required this.budgetPk, required this.budgetLimit, required this.categoryFks, @@ -33,6 +34,7 @@ class CategoryLimits extends StatefulWidget { required this.isAbsoluteSpendingLimit, super.key, }); + final bool isIncomeBudget; final String budgetPk; final List? categoryFks; final List? categoryFksExclude; @@ -55,7 +57,9 @@ class _CategoryLimitsState extends State { builder: (context, snapshot) { if (snapshot.hasData && snapshot.data != null) { return SliverStickyLabelDivider( - info: "category-spending-goals".tr(), + info: widget.isIncomeBudget + ? "category-saving-goals".tr() + : "category-spending-goals".tr(), extraInfoWidget: StreamBuilder( stream: database.watchTotalOfCategoryLimitsInBudgetWithCategories( diff --git a/budget/lib/widgets/extraInfoBoxes.dart b/budget/lib/widgets/extraInfoBoxes.dart index 5bbac2bc..e61e7dbc 100644 --- a/budget/lib/widgets/extraInfoBoxes.dart +++ b/budget/lib/widgets/extraInfoBoxes.dart @@ -102,14 +102,15 @@ class _TipBoxState extends State { } class ExtraInfoButton extends StatelessWidget { - const ExtraInfoButton( - {required this.onTap, - required this.color, - required this.icon, - required this.text, - this.buttonIconColor, - this.buttonIconColorIcon, - super.key}); + const ExtraInfoButton({ + required this.onTap, + required this.color, + required this.icon, + required this.text, + this.buttonIconColor, + this.buttonIconColorIcon, + super.key, + }); final VoidCallback onTap; final Color color; final IconData icon; diff --git a/budget/lib/widgets/importCSV.dart b/budget/lib/widgets/importCSV.dart index 324ad136..572aa751 100644 --- a/budget/lib/widgets/importCSV.dart +++ b/budget/lib/widgets/importCSV.dart @@ -1121,7 +1121,7 @@ class _ImportingEntriesPopupState extends State { await database.createBatchAssociatedTitlesOnly(filteredList); await database.fixOrderAssociatedTitles(); - if (skippedError.length >= 0) { + if (skippedError.length > 0) { await openPopup( context, title: "csv-error".tr(), diff --git a/budget/lib/widgets/selectColor.dart b/budget/lib/widgets/selectColor.dart index 6a54920b..0b480cd0 100644 --- a/budget/lib/widgets/selectColor.dart +++ b/budget/lib/widgets/selectColor.dart @@ -419,8 +419,11 @@ class _ColorIconCustomState extends State { onPressed: () async { enterColorCodeBottomSheet( context, - initialSelectedColor: widget.initialSelectedColor, - setSelectedColor: widget.onTap, + initialSelectedColor: selectedColor, + setSelectedColor: (Color color) { + widget.onTap(color); + selectedColor = color; + }, ); }, ), diff --git a/budget/lib/widgets/showChangelog.dart b/budget/lib/widgets/showChangelog.dart index 1370746f..8c2f18ce 100644 --- a/budget/lib/widgets/showChangelog.dart +++ b/budget/lib/widgets/showChangelog.dart @@ -26,6 +26,14 @@ import 'listItem.dart'; String getChangelogString() { return """ + < 5.1.5 + Fixed title searching with category name when adding a transaction (title has priority) + Fixed wallet details page swipe to dismiss header + Installment payment setup button follows objective colorscheme + Hex color picker fixes + Removed ability to long press and set custom period for loan totals on all spending page that always show all time + Removed bill splitter deleting item on edit page + Fixed CSV import error always opening < 5.1.4 Selecting account shows total amount in the account Time and period range in wallet details page diff --git a/budget/pubspec.yaml b/budget/pubspec.yaml index 5e6971dd..18bd5efa 100644 --- a/budget/pubspec.yaml +++ b/budget/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 5.1.4+297 +version: 5.1.5+298 environment: sdk: ">= 3.0.0"