Compare commits

..

51 Commits

Author SHA1 Message Date
eitchtee
99c85a56bb chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-22 20:16:36 +00:00
Herculino Trotta
ab1c074f27 Merge pull request #343
feat(sidebar): add button to keep it open
2025-08-22 17:15:55 -03:00
Herculino Trotta
abf3a148cc feat(sidebar): add button to keep it open 2025-08-22 17:15:32 -03:00
Herculino Trotta
2733c92da5 style(sidebar): truncate e-mail if it's too long 2025-08-22 13:14:47 -03:00
eitchtee
9bfbe54ed5 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-19 17:03:42 +00:00
Herculino Trotta
5b27dea07c Merge pull request #340
feat: turn filter, order and search into a single bar
2025-08-19 14:02:06 -03:00
Herculino Trotta
791e1000a3 feat(all-transactions): turn filter, order and search into a single bar 2025-08-19 14:01:35 -03:00
Herculino Trotta
7301d9f475 feat(monthly): turn filter, order and search into a single bar 2025-08-19 13:39:57 -03:00
sorcierwax
47a44e96f8 locale(French): update translation
Currently translated at 100.0% (685 of 685 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-08-18 08:17:42 +00:00
Herculino Trotta
7d247eb737 locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (685 of 685 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-08-17 08:17:42 +00:00
Dimitri Decrock
373616e7bb locale(Dutch): update translation
Currently translated at 100.0% (685 of 685 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-08-17 08:17:42 +00:00
eitchtee
bf3c11d582 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-17 06:55:57 +00:00
Herculino Trotta
b4b1c10db9 Merge pull request #338
refactor(currencies): DEPRECATE SYNTH FINANCE
2025-08-17 03:54:28 -03:00
Herculino Trotta
5ca531f47d refactor(currencies): DEPRECATE SYNTH FINANCE 2025-08-17 03:54:10 -03:00
eitchtee
07673cb528 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-17 06:23:31 +00:00
Herculino Trotta
67c6d81897 Merge pull request #337
feat(currencies): add TwelveData and TwelveDataMarkets as providers
2025-08-17 03:22:11 -03:00
Herculino Trotta
3c85da46b0 feat(currencies): add TwelveData and TwelveDataMarkets as providers 2025-08-17 03:21:55 -03:00
eitchtee
d263936be7 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-17 03:51:16 +00:00
Herculino Trotta
1524063d5a Merge pull request #336
feat(currencies): add Frankfurter as an Exchange Rate provider
2025-08-17 00:49:54 -03:00
Herculino Trotta
c3a403b8f0 feat(currencies): add Frankfurter as an Exchange Rate provider 2025-08-17 00:49:32 -03:00
eitchtee
1c1018adae chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-16 20:41:25 +00:00
Herculino Trotta
350d5adf25 Merge pull request #335
refactor: remove debug prints
2025-08-16 17:38:44 -03:00
Herculino Trotta
7e4defb9cc refactor: remove debug prints 2025-08-16 17:38:22 -03:00
Herculino Trotta
7121e4bc09 Merge pull request #334
fix(tooltips): sometimes not getting created on htmx swap
2025-08-16 17:37:53 -03:00
Herculino Trotta
4540e48fe5 fix(tooltips): sometimes not getting created on htmx swap 2025-08-16 17:37:27 -03:00
Herculino Trotta
d06b51421f Merge pull request #333
feat(insights:category-overview): display entities on table
2025-08-16 17:37:15 -03:00
Herculino Trotta
e096912e41 feat(insights:category-overview): display entities on table 2025-08-16 17:36:19 -03:00
Dimitri Decrock
f0ad6e16fe locale(Dutch): update translation
Currently translated at 100.0% (684 of 684 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-08-16 11:17:42 +00:00
Herculino Trotta
734a302fa7 locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (684 of 684 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-08-16 04:17:41 +00:00
eitchtee
89b1b7bcb7 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-16 01:55:05 +00:00
Herculino Trotta
37b40f89bb Merge pull request #332
feat: add today button to MonthYearPicker
2025-08-15 22:54:21 -03:00
Herculino Trotta
0c63552d1b feat: add today button to MonthYearPicker 2025-08-15 22:54:04 -03:00
Herculino Trotta
7db517e848 Merge pull request #331
feat(export): improve export flow by using HTMX
2025-08-15 22:40:00 -03:00
Herculino Trotta
7e3ed6cf94 feat(export): improve export flow by using HTMX 2025-08-15 22:39:18 -03:00
Herculino Trotta
e10a88c00e Merge pull request #330
fix(sidebar): management menu not scroll correctly
2025-08-15 12:53:01 -03:00
Herculino Trotta
b912a33b93 fix(sidebar): management menu not scroll correctly 2025-08-15 12:49:14 -03:00
eitchtee
d9fb3627cc chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-15 15:31:23 +00:00
Herculino Trotta
78ffa68ba4 Merge pull request #329
feat(transactions): filter for unset category/tag/entity
2025-08-15 12:30:14 -03:00
Herculino Trotta
37f4ead058 feat(transactions): filter for unset category/tag/entity
implements #327
2025-08-15 12:29:32 -03:00
Herculino Trotta
61630fca5b locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (680 of 680 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-08-12 22:17:41 +00:00
sorcierwax
910d4c84a3 locale(French): update translation
Currently translated at 99.1% (674 of 680 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-08-12 13:07:17 +00:00
sorcierwax
be1f29d8c1 locale(French): update translation
Currently translated at 99.1% (674 of 680 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-08-12 11:17:42 +00:00
sorcierwax
9784d840cc locale(French): update translation
Currently translated at 83.3% (567 of 680 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-08-12 09:47:01 +00:00
sorcierwax
db5ce13ff3 locale(French): update translation
Currently translated at 76.3% (519 of 680 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-08-12 09:25:38 +00:00
sorcierwax
a2b943d949 locale(French): update translation
Currently translated at 62.0% (422 of 680 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-08-12 08:45:52 +00:00
eitchtee
d8098b4486 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-10 15:35:43 +00:00
Herculino Trotta
f8cff6623f Merge pull request #324
feat(locale): add space-dot and space-comma number formatting options, where the thousand separator is a space
2025-08-10 12:34:59 -03:00
Herculino Trotta
74899f63ab Merge pull request #323
fix(locale): get_format doesn't override number formatting if use_l10n is None
2025-08-10 12:24:37 -03:00
Dimitri Decrock
e0ab32ec03 locale(Dutch): update translation
Currently translated at 100.0% (680 of 680 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-08-09 10:17:41 +00:00
eitchtee
a912e4a511 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-09 06:57:32 +00:00
Herculino Trotta
57ba672c91 Merge pull request #321
feat(accounts): add option for untracking accounts on a per user basis
2025-08-09 03:55:59 -03:00
42 changed files with 3793 additions and 2491 deletions

View File

@@ -379,7 +379,7 @@ DEBUG_TOOLBAR_PANELS = [
"debug_toolbar.panels.signals.SignalsPanel",
"debug_toolbar.panels.redirects.RedirectsPanel",
"debug_toolbar.panels.profiling.ProfilingPanel",
"cachalot.panels.CachalotPanel",
# "cachalot.panels.CachalotPanel",
]
INTERNAL_IPS = [
"127.0.0.1",

View File

@@ -139,7 +139,6 @@ class DynamicModelMultipleChoiceField(forms.ModelMultipleChoiceField):
instance.save()
return instance
except Exception as e:
print(e)
raise ValidationError(_("Error creating new instance"))
def clean(self, value):

View File

@@ -91,6 +91,12 @@ def month_year_picker(request):
for date in all_months
]
today_url = (
reverse(url, kwargs={"month": current_date.month, "year": current_date.year})
if url
else ""
)
return render(
request,
"common/fragments/month_year_picker.html",
@@ -98,6 +104,7 @@ def month_year_picker(request):
"month_year_data": result,
"current_month": current_month,
"current_year": current_year,
"today_url": today_url,
},
)

View File

@@ -4,13 +4,7 @@ from datetime import timedelta
from django.db.models import QuerySet
from django.utils import timezone
from apps.currencies.exchange_rates.providers import (
SynthFinanceProvider,
SynthFinanceStockProvider,
CoinGeckoFreeProvider,
CoinGeckoProProvider,
TransitiveRateProvider,
)
import apps.currencies.exchange_rates.providers as providers
from apps.currencies.models import ExchangeRateService, ExchangeRate, Currency
logger = logging.getLogger(__name__)
@@ -18,11 +12,12 @@ logger = logging.getLogger(__name__)
# Map service types to provider classes
PROVIDER_MAPPING = {
"synth_finance": SynthFinanceProvider,
"synth_finance_stock": SynthFinanceStockProvider,
"coingecko_free": CoinGeckoFreeProvider,
"coingecko_pro": CoinGeckoProProvider,
"transitive": TransitiveRateProvider,
"coingecko_free": providers.CoinGeckoFreeProvider,
"coingecko_pro": providers.CoinGeckoProProvider,
"transitive": providers.TransitiveRateProvider,
"frankfurter": providers.FrankfurterProvider,
"twelvedata": providers.TwelveDataProvider,
"twelvedatamarkets": providers.TwelveDataMarketsProvider,
}

View File

@@ -13,70 +13,6 @@ from apps.currencies.exchange_rates.base import ExchangeRateProvider
logger = logging.getLogger(__name__)
class SynthFinanceProvider(ExchangeRateProvider):
"""Implementation for Synth Finance API (synthfinance.com)"""
BASE_URL = "https://api.synthfinance.com/rates/live"
rates_inverted = False # SynthFinance returns non-inverted rates
def __init__(self, api_key: str = None):
super().__init__(api_key)
self.session = requests.Session()
self.session.headers.update({"Authorization": f"Bearer {self.api_key}"})
def get_rates(
self, target_currencies: QuerySet, exchange_currencies: set
) -> List[Tuple[Currency, Currency, Decimal]]:
results = []
currency_groups = {}
for currency in target_currencies:
if currency.exchange_currency in exchange_currencies:
group = currency_groups.setdefault(currency.exchange_currency.code, [])
group.append(currency)
for base_currency, currencies in currency_groups.items():
try:
to_currencies = ",".join(
currency.code
for currency in currencies
if currency.code != base_currency
)
response = self.session.get(
f"{self.BASE_URL}",
params={"from": base_currency, "to": to_currencies},
)
response.raise_for_status()
data = response.json()
rates = data["data"]["rates"]
for currency in currencies:
if currency.code == base_currency:
rate = Decimal("1")
else:
rate = Decimal(str(rates[currency.code]))
# Return the rate as is, without inversion
results.append((currency.exchange_currency, currency, rate))
credits_used = data["meta"]["credits_used"]
credits_remaining = data["meta"]["credits_remaining"]
logger.info(
f"Synth Finance API call: {credits_used} credits used, {credits_remaining} remaining"
)
except requests.RequestException as e:
logger.error(
f"Error fetching rates from Synth Finance API for base {base_currency}: {e}"
)
except KeyError as e:
logger.error(
f"Unexpected response structure from Synth Finance API for base {base_currency}: {e}"
)
except Exception as e:
logger.error(
f"Unexpected error processing Synth Finance data for base {base_currency}: {e}"
)
return results
class CoinGeckoFreeProvider(ExchangeRateProvider):
"""Implementation for CoinGecko Free API"""
@@ -152,71 +88,6 @@ class CoinGeckoProProvider(CoinGeckoFreeProvider):
self.session.headers.update({"x-cg-pro-api-key": api_key})
class SynthFinanceStockProvider(ExchangeRateProvider):
"""Implementation for Synth Finance API Real-Time Prices endpoint (synthfinance.com)"""
BASE_URL = "https://api.synthfinance.com/tickers"
rates_inverted = True
def __init__(self, api_key: str = None):
super().__init__(api_key)
self.session = requests.Session()
self.session.headers.update(
{"Authorization": f"Bearer {self.api_key}", "accept": "application/json"}
)
def get_rates(
self, target_currencies: QuerySet, exchange_currencies: set
) -> List[Tuple[Currency, Currency, Decimal]]:
results = []
for currency in target_currencies:
if currency.exchange_currency not in exchange_currencies:
continue
try:
# Same currency has rate of 1
if currency.code == currency.exchange_currency.code:
rate = Decimal("1")
results.append((currency.exchange_currency, currency, rate))
continue
# Fetch real-time price for this ticker
response = self.session.get(
f"{self.BASE_URL}/{currency.code}/real-time"
)
response.raise_for_status()
data = response.json()
# Use fair market value as the rate
rate = Decimal(data["data"]["fair_market_value"])
results.append((currency.exchange_currency, currency, rate))
# Log API usage
credits_used = data["meta"]["credits_used"]
credits_remaining = data["meta"]["credits_remaining"]
logger.info(
f"Synth Finance API call for {currency.code}: {credits_used} credits used, {credits_remaining} remaining"
)
except requests.RequestException as e:
logger.error(
f"Error fetching rate from Synth Finance API for ticker {currency.code}: {e}",
exc_info=True,
)
except KeyError as e:
logger.error(
f"Unexpected response structure from Synth Finance API for ticker {currency.code}: {e}",
exc_info=True,
)
except Exception as e:
logger.error(
f"Unexpected error processing Synth Finance data for ticker {currency.code}: {e}",
exc_info=True,
)
return results
class TransitiveRateProvider(ExchangeRateProvider):
"""Calculates exchange rates through paths of existing rates"""
@@ -306,3 +177,329 @@ class TransitiveRateProvider(ExchangeRateProvider):
queue.append((neighbor, path + [neighbor], current_rate * rate))
return None, None
class FrankfurterProvider(ExchangeRateProvider):
"""Implementation for the Frankfurter API (frankfurter.dev)"""
BASE_URL = "https://api.frankfurter.dev/v1/latest"
rates_inverted = (
False # Frankfurter returns non-inverted rates (e.g., 1 EUR = 1.1 USD)
)
def __init__(self, api_key: str = None):
"""
Initializes the provider. The Frankfurter API does not require an API key,
so the api_key parameter is ignored.
"""
super().__init__(api_key)
self.session = requests.Session()
@classmethod
def requires_api_key(cls) -> bool:
return False
def get_rates(
self, target_currencies: QuerySet, exchange_currencies: set
) -> List[Tuple[Currency, Currency, Decimal]]:
results = []
currency_groups = {}
# Group target currencies by their exchange (base) currency to minimize API calls
for currency in target_currencies:
if currency.exchange_currency in exchange_currencies:
group = currency_groups.setdefault(currency.exchange_currency.code, [])
group.append(currency)
# Make one API call for each base currency
for base_currency, currencies in currency_groups.items():
try:
# Create a comma-separated list of target currency codes
to_currencies = ",".join(
currency.code
for currency in currencies
if currency.code != base_currency
)
# If there are no target currencies other than the base, skip the API call
if not to_currencies:
# Handle the case where the only request is for the base rate (e.g., USD to USD)
for currency in currencies:
if currency.code == base_currency:
results.append(
(currency.exchange_currency, currency, Decimal("1"))
)
continue
response = self.session.get(
self.BASE_URL,
params={"base": base_currency, "symbols": to_currencies},
)
response.raise_for_status()
data = response.json()
rates = data["rates"]
# Process the returned rates
for currency in currencies:
if currency.code == base_currency:
# The rate for the base currency to itself is always 1
rate = Decimal("1")
else:
rate = Decimal(str(rates[currency.code]))
results.append((currency.exchange_currency, currency, rate))
except requests.RequestException as e:
logger.error(
f"Error fetching rates from Frankfurter API for base {base_currency}: {e}"
)
except KeyError as e:
logger.error(
f"Unexpected response structure from Frankfurter API for base {base_currency}: {e}"
)
except Exception as e:
logger.error(
f"Unexpected error processing Frankfurter data for base {base_currency}: {e}"
)
return results
class TwelveDataProvider(ExchangeRateProvider):
"""Implementation for the Twelve Data API (twelvedata.com)"""
BASE_URL = "https://api.twelvedata.com/exchange_rate"
rates_inverted = (
False # The API returns direct rates, e.g., for EUR/USD it's 1 EUR = X USD
)
def __init__(self, api_key: str):
"""
Initializes the provider with an API key and a requests session.
"""
super().__init__(api_key)
self.session = requests.Session()
@classmethod
def requires_api_key(cls) -> bool:
"""This provider requires an API key."""
return True
def get_rates(
self, target_currencies: QuerySet, exchange_currencies: set
) -> List[Tuple[Currency, Currency, Decimal]]:
"""
Fetches exchange rates from the Twelve Data API for the given currency pairs.
This provider makes one API call for each requested currency pair.
"""
results = []
for target_currency in target_currencies:
# Ensure the target currency's exchange currency is one we're interested in
if target_currency.exchange_currency not in exchange_currencies:
continue
base_currency = target_currency.exchange_currency
# The exchange rate for the same currency is always 1
if base_currency.code == target_currency.code:
rate = Decimal("1")
results.append((base_currency, target_currency, rate))
continue
# Construct the symbol in the format "BASE/TARGET", e.g., "EUR/USD"
symbol = f"{base_currency.code}/{target_currency.code}"
try:
params = {
"symbol": symbol,
"apikey": self.api_key,
}
response = self.session.get(self.BASE_URL, params=params)
response.raise_for_status() # Raise an HTTPError for bad responses (4xx or 5xx)
data = response.json()
# The API may return an error message in a JSON object
if "rate" not in data:
error_message = data.get("message", "Rate not found in response.")
logger.error(
f"Could not fetch rate for {symbol} from Twelve Data: {error_message}"
)
continue
# Convert the rate to a Decimal for precision
rate = Decimal(str(data["rate"]))
results.append((base_currency, target_currency, rate))
logger.info(f"Successfully fetched rate for {symbol} from Twelve Data.")
time.sleep(
60
) # We sleep every pair as to not step over TwelveData's minute limit
except requests.RequestException as e:
logger.error(
f"Error fetching rate from Twelve Data API for symbol {symbol}: {e}"
)
except KeyError as e:
logger.error(
f"Unexpected response structure from Twelve Data API for symbol {symbol}: Missing key {e}"
)
except Exception as e:
logger.error(
f"An unexpected error occurred while processing Twelve Data for {symbol}: {e}"
)
return results
class TwelveDataMarketsProvider(ExchangeRateProvider):
"""
Provides prices for market instruments (stocks, ETFs, etc.) using the Twelve Data API.
This provider performs a multi-step process:
1. Parses instrument codes which can be symbols, FIGI, CUSIP, or ISIN.
2. For CUSIPs, it defaults the currency to USD. For all others, it searches
for the instrument to determine its native trading currency.
3. Fetches the latest price for the instrument in its native currency.
4. Converts the price to the requested target exchange currency.
"""
SYMBOL_SEARCH_URL = "https://api.twelvedata.com/symbol_search"
PRICE_URL = "https://api.twelvedata.com/price"
EXCHANGE_RATE_URL = "https://api.twelvedata.com/exchange_rate"
rates_inverted = True
def __init__(self, api_key: str):
super().__init__(api_key)
self.session = requests.Session()
@classmethod
def requires_api_key(cls) -> bool:
return True
def _parse_code(self, raw_code: str) -> Tuple[str, str]:
"""Parses the raw code to determine its type and value."""
if raw_code.startswith("figi:"):
return "figi", raw_code.removeprefix("figi:")
if raw_code.startswith("cusip:"):
return "cusip", raw_code.removeprefix("cusip:")
if raw_code.startswith("isin:"):
return "isin", raw_code.removeprefix("isin:")
return "symbol", raw_code
def get_rates(
self, target_currencies: QuerySet, exchange_currencies: set
) -> List[Tuple[Currency, Currency, Decimal]]:
results = []
for asset in target_currencies:
if asset.exchange_currency not in exchange_currencies:
continue
code_type, code_value = self._parse_code(asset.code)
original_currency_code = None
try:
# Determine the instrument's native currency
if code_type == "cusip":
# CUSIP codes always default to USD
original_currency_code = "USD"
logger.info(f"Defaulting CUSIP {code_value} to USD currency.")
else:
# For all other types, find currency via symbol search
search_params = {"symbol": code_value, "apikey": "demo"}
search_res = self.session.get(
self.SYMBOL_SEARCH_URL, params=search_params
)
search_res.raise_for_status()
search_data = search_res.json()
if not search_data.get("data"):
logger.warning(
f"TwelveDataMarkets: Symbol search for '{code_value}' returned no results."
)
continue
instrument_data = search_data["data"][0]
original_currency_code = instrument_data.get("currency")
if not original_currency_code:
logger.error(
f"TwelveDataMarkets: Could not determine original currency for '{code_value}'."
)
continue
# Get the instrument's price in its native currency
price_params = {code_type: code_value, "apikey": self.api_key}
price_res = self.session.get(self.PRICE_URL, params=price_params)
price_res.raise_for_status()
price_data = price_res.json()
if "price" not in price_data:
error_message = price_data.get(
"message", "Price key not found in response"
)
logger.error(
f"TwelveDataMarkets: Could not get price for {code_type} '{code_value}': {error_message}"
)
continue
price_in_original_currency = Decimal(price_data["price"])
# Convert price to the target exchange currency
target_exchange_currency = asset.exchange_currency
if (
original_currency_code.upper()
== target_exchange_currency.code.upper()
):
final_price = price_in_original_currency
else:
rate_symbol = (
f"{original_currency_code}/{target_exchange_currency.code}"
)
rate_params = {"symbol": rate_symbol, "apikey": self.api_key}
rate_res = self.session.get(
self.EXCHANGE_RATE_URL, params=rate_params
)
rate_res.raise_for_status()
rate_data = rate_res.json()
if "rate" not in rate_data:
error_message = rate_data.get(
"message", "Rate key not found in response"
)
logger.error(
f"TwelveDataMarkets: Could not get conversion rate for '{rate_symbol}': {error_message}"
)
continue
conversion_rate = Decimal(str(rate_data["rate"]))
final_price = price_in_original_currency * conversion_rate
results.append((target_exchange_currency, asset, final_price))
logger.info(
f"Successfully processed price for {asset.code} as {final_price} {target_exchange_currency.code}"
)
time.sleep(
60
) # We sleep every pair as to not step over TwelveData's minute limit
except requests.RequestException as e:
logger.error(
f"TwelveDataMarkets: API request failed for {code_value}: {e}"
)
except (KeyError, IndexError) as e:
logger.error(
f"TwelveDataMarkets: Error processing API response for {code_value}: {e}"
)
except Exception as e:
logger.error(
f"TwelveDataMarkets: An unexpected error occurred for {code_value}: {e}"
)
return results

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.5 on 2025-08-16 22:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('currencies', '0016_alter_exchangerate_automatic'),
]
operations = [
migrations.AlterField(
model_name='exchangerateservice',
name='service_type',
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter')], max_length=255, verbose_name='Service Type'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.5 on 2025-08-17 03:54
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('currencies', '0017_alter_exchangerateservice_service_type'),
]
operations = [
migrations.AlterField(
model_name='exchangerateservice',
name='service_type',
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData')], max_length=255, verbose_name='Service Type'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.5 on 2025-08-17 06:01
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('currencies', '0018_alter_exchangerateservice_service_type'),
]
operations = [
migrations.AlterField(
model_name='exchangerateservice',
name='service_type',
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData'), ('twelvedatamarkets', 'TwelveData Markets')], max_length=255, verbose_name='Service Type'),
),
]

View File

@@ -0,0 +1,51 @@
# Generated by Django 5.2.5 on 2025-08-17 06:25
from django.db import migrations
# The new value we are migrating to
NEW_SERVICE_TYPE = "frankfurter"
# The old values we are deprecating
OLD_SERVICE_TYPE_TO_UPDATE = "synth_finance"
OLD_SERVICE_TYPE_TO_DELETE = "synth_finance_stock"
def forwards_func(apps, schema_editor):
"""
Forward migration:
- Deletes all ExchangeRateService instances with service_type 'synth_finance_stock'.
- Updates all ExchangeRateService instances with service_type 'synth_finance' to 'frankfurter'.
"""
ExchangeRateService = apps.get_model("currencies", "ExchangeRateService")
db_alias = schema_editor.connection.alias
# 1. Delete the SYNTH_FINANCE_STOCK entries
ExchangeRateService.objects.using(db_alias).filter(
service_type=OLD_SERVICE_TYPE_TO_DELETE
).delete()
# 2. Update the SYNTH_FINANCE entries to FRANKFURTER
ExchangeRateService.objects.using(db_alias).filter(
service_type=OLD_SERVICE_TYPE_TO_UPDATE
).update(service_type=NEW_SERVICE_TYPE, api_key=None)
def backwards_func(apps, schema_editor):
"""
Backward migration: This operation is not safely reversible.
- We cannot know which 'frankfurter' services were originally 'synth_finance'.
- The deleted 'synth_finance_stock' services cannot be recovered.
We will leave this function empty to allow migrating backwards without doing anything.
"""
pass
class Migration(migrations.Migration):
dependencies = [
# Add the previous migration file here
("currencies", "0019_alter_exchangerateservice_service_type"),
]
operations = [
migrations.RunPython(forwards_func, reverse_code=backwards_func),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.5 on 2025-08-17 06:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('currencies', '0020_migrate_synth_finance_services'),
]
operations = [
migrations.AlterField(
model_name='exchangerateservice',
name='service_type',
field=models.CharField(choices=[('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData'), ('twelvedatamarkets', 'TwelveData Markets')], max_length=255, verbose_name='Service Type'),
),
]

View File

@@ -94,11 +94,12 @@ class ExchangeRateService(models.Model):
"""Configuration for exchange rate services"""
class ServiceType(models.TextChoices):
SYNTH_FINANCE = "synth_finance", "Synth Finance"
SYNTH_FINANCE_STOCK = "synth_finance_stock", "Synth Finance Stock"
COINGECKO_FREE = "coingecko_free", "CoinGecko (Demo/Free)"
COINGECKO_PRO = "coingecko_pro", "CoinGecko (Pro)"
TRANSITIVE = "transitive", "Transitive (Calculated from Existing Rates)"
FRANKFURTER = "frankfurter", "Frankfurter"
TWELVEDATA = "twelvedata", "TwelveData"
TWELVEDATA_MARKETS = "twelvedatamarkets", "TwelveData Markets"
class IntervalType(models.TextChoices):
ON = "on", _("On")

View File

@@ -9,7 +9,9 @@ from apps.currencies.models import Currency
from apps.currencies.utils.convert import convert
def get_categories_totals(transactions_queryset, ignore_empty=False):
def get_categories_totals(
transactions_queryset, ignore_empty=False, show_entities=False
):
# First get the category totals as before
category_currency_metrics = (
transactions_queryset.values(
@@ -240,6 +242,7 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
result[category_id]["tags"][tag_key] = {
"name": tag_name,
"currencies": {},
"entities": {},
}
currency_id = tag_metric["account__currency"]
@@ -319,4 +322,173 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
currency_id
] = tag_currency_data
if show_entities:
entity_metrics = transactions_queryset.values(
"category",
"tags",
"entities",
"entities__name",
"account__currency",
"account__currency__code",
"account__currency__name",
"account__currency__decimal_places",
"account__currency__prefix",
"account__currency__suffix",
"account__currency__exchange_currency",
).annotate(
expense_current=Coalesce(
Sum(
Case(
When(
type=Transaction.Type.EXPENSE, is_paid=True, then="amount"
),
default=Value(0),
output_field=models.DecimalField(),
)
),
Decimal("0"),
),
expense_projected=Coalesce(
Sum(
Case(
When(
type=Transaction.Type.EXPENSE, is_paid=False, then="amount"
),
default=Value(0),
output_field=models.DecimalField(),
)
),
Decimal("0"),
),
income_current=Coalesce(
Sum(
Case(
When(type=Transaction.Type.INCOME, is_paid=True, then="amount"),
default=Value(0),
output_field=models.DecimalField(),
)
),
Decimal("0"),
),
income_projected=Coalesce(
Sum(
Case(
When(
type=Transaction.Type.INCOME, is_paid=False, then="amount"
),
default=Value(0),
output_field=models.DecimalField(),
)
),
Decimal("0"),
),
)
for entity_metric in entity_metrics:
category_id = entity_metric["category"]
tag_id = entity_metric["tags"]
entity_id = entity_metric["entities"]
if not entity_id:
continue
if category_id in result:
tag_key = tag_id if tag_id is not None else "untagged"
if tag_key in result[category_id]["tags"]:
entity_key = entity_id
entity_name = entity_metric["entities__name"]
if "entities" not in result[category_id]["tags"][tag_key]:
result[category_id]["tags"][tag_key]["entities"] = {}
if (
entity_key
not in result[category_id]["tags"][tag_key]["entities"]
):
result[category_id]["tags"][tag_key]["entities"][entity_key] = {
"name": entity_name,
"currencies": {},
}
currency_id = entity_metric["account__currency"]
entity_total_current = (
entity_metric["income_current"]
- entity_metric["expense_current"]
)
entity_total_projected = (
entity_metric["income_projected"]
- entity_metric["expense_projected"]
)
entity_total_income = (
entity_metric["income_current"]
+ entity_metric["income_projected"]
)
entity_total_expense = (
entity_metric["expense_current"]
+ entity_metric["expense_projected"]
)
entity_total_final = entity_total_current + entity_total_projected
entity_currency_data = {
"currency": {
"code": entity_metric["account__currency__code"],
"name": entity_metric["account__currency__name"],
"decimal_places": entity_metric[
"account__currency__decimal_places"
],
"prefix": entity_metric["account__currency__prefix"],
"suffix": entity_metric["account__currency__suffix"],
},
"expense_current": entity_metric["expense_current"],
"expense_projected": entity_metric["expense_projected"],
"total_expense": entity_total_expense,
"income_current": entity_metric["income_current"],
"income_projected": entity_metric["income_projected"],
"total_income": entity_total_income,
"total_current": entity_total_current,
"total_projected": entity_total_projected,
"total_final": entity_total_final,
}
if entity_metric["account__currency__exchange_currency"]:
from_currency = Currency.objects.get(id=currency_id)
exchange_currency = Currency.objects.get(
id=entity_metric["account__currency__exchange_currency"]
)
exchanged = {}
for field in [
"expense_current",
"expense_projected",
"income_current",
"income_projected",
"total_income",
"total_expense",
"total_current",
"total_projected",
"total_final",
]:
amount, prefix, suffix, decimal_places = convert(
amount=entity_currency_data[field],
from_currency=from_currency,
to_currency=exchange_currency,
)
if amount is not None:
exchanged[field] = amount
if "currency" not in exchanged:
exchanged["currency"] = {
"prefix": prefix,
"suffix": suffix,
"decimal_places": decimal_places,
"code": exchange_currency.code,
"name": exchange_currency.name,
}
if exchanged:
entity_currency_data["exchanged"] = exchanged
result[category_id]["tags"][tag_key]["entities"][entity_key][
"currencies"
][currency_id] = entity_currency_data
return result

View File

@@ -180,6 +180,14 @@ def category_overview(request):
else:
show_tags = request.session.get("insights_category_explorer_show_tags", True)
if "show_entities" in request.GET:
show_entities = request.GET["show_entities"] == "on"
request.session["insights_category_explorer_show_entities"] = show_entities
else:
show_entities = request.session.get(
"insights_category_explorer_show_entities", False
)
if "showing" in request.GET:
showing = request.GET["showing"]
request.session["insights_category_explorer_showing"] = showing
@@ -190,7 +198,9 @@ def category_overview(request):
transactions = get_transactions(request, include_silent=True)
total_table = get_categories_totals(
transactions_queryset=transactions, ignore_empty=False
transactions_queryset=transactions,
ignore_empty=False,
show_entities=show_entities,
)
return render(
@@ -200,6 +210,7 @@ def category_overview(request):
"total_table": total_table,
"view_type": view_type,
"show_tags": show_tags,
"show_entities": show_entities,
"showing": showing,
},
)

View File

@@ -20,7 +20,6 @@ from apps.transactions.utils.calculations import (
@require_http_methods(["GET"])
def net_worth(request):
if "view_type" in request.GET:
print(request.GET["view_type"])
view_type = request.GET["view_type"]
request.session["networth_view_type"] = view_type
else:

View File

@@ -60,26 +60,20 @@ class TransactionsFilter(django_filters.FilterSet):
label=_("Currencies"),
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
)
category = django_filters.ModelMultipleChoiceFilter(
field_name="category__name",
queryset=TransactionCategory.objects.all(),
to_field_name="name",
category = django_filters.MultipleChoiceFilter(
label=_("Categories"),
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
method="filter_category",
)
tags = django_filters.ModelMultipleChoiceFilter(
field_name="tags__name",
queryset=TransactionTag.objects.all(),
to_field_name="name",
tags = django_filters.MultipleChoiceFilter(
label=_("Tags"),
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
method="filter_tags",
)
entities = django_filters.ModelMultipleChoiceFilter(
field_name="entities__name",
queryset=TransactionEntity.objects.all(),
to_field_name="name",
entities = django_filters.MultipleChoiceFilter(
label=_("Entities"),
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
method="filter_entities",
)
is_paid = django_filters.MultipleChoiceFilter(
choices=SITUACAO_CHOICES,
@@ -125,6 +119,7 @@ class TransactionsFilter(django_filters.FilterSet):
"is_paid",
"category",
"tags",
"entities",
"date_start",
"date_end",
"reference_date_start",
@@ -186,6 +181,93 @@ class TransactionsFilter(django_filters.FilterSet):
self.form.fields["date_end"].widget = AirDatePickerInput()
self.form.fields["account"].queryset = Account.objects.all()
self.form.fields["category"].queryset = TransactionCategory.objects.all()
self.form.fields["tags"].queryset = TransactionTag.objects.all()
self.form.fields["entities"].queryset = TransactionEntity.objects.all()
category_choices = list(
TransactionCategory.objects.values_list("name", "name").order_by("name")
)
custom_choices = [
("any", _("Categorized")),
("uncategorized", _("Uncategorized")),
]
self.form.fields["category"].choices = custom_choices + category_choices
tag_choices = list(
TransactionTag.objects.values_list("name", "name").order_by("name")
)
custom_tag_choices = [("any", _("Tagged")), ("untagged", _("Untagged"))]
self.form.fields["tags"].choices = custom_tag_choices + tag_choices
entity_choices = list(
TransactionEntity.objects.values_list("name", "name").order_by("name")
)
custom_entity_choices = [
("any", _("Any entity")),
("no_entity", _("No entity")),
]
self.form.fields["entities"].choices = custom_entity_choices + entity_choices
@staticmethod
def filter_category(queryset, name, value):
if not value:
return queryset
value = list(value)
if "any" in value:
return queryset.filter(category__isnull=False)
q = Q()
if "uncategorized" in value:
q |= Q(category__isnull=True)
value.remove("uncategorized")
if value:
q |= Q(category__name__in=value)
if q.children:
return queryset.filter(q)
return queryset
@staticmethod
def filter_tags(queryset, name, value):
if not value:
return queryset
value = list(value)
if "any" in value:
return queryset.filter(tags__isnull=False).distinct()
q = Q()
if "untagged" in value:
q |= Q(tags__isnull=True)
value.remove("untagged")
if value:
q |= Q(tags__name__in=value)
if q.children:
return queryset.filter(q).distinct()
return queryset
@staticmethod
def filter_entities(queryset, name, value):
if not value:
return queryset
value = list(value)
if "any" in value:
return queryset.filter(entities__isnull=False).distinct()
q = Q()
if "no_entity" in value:
q |= Q(entities__isnull=True)
value.remove("no_entity")
if value:
q |= Q(entities__name__in=value)
if q.children:
return queryset.filter(q).distinct()
return queryset

View File

@@ -17,6 +17,11 @@ urlpatterns = [
views.toggle_sound_playing,
name="toggle_sound_playing",
),
path(
"user/toggle-sidebar/",
views.toggle_sidebar_status,
name="toggle_sidebar_status",
),
path(
"user/settings/",
views.update_settings,

View File

@@ -116,6 +116,21 @@ def update_settings(request):
return render(request, "users/fragments/user_settings.html", {"form": form})
@only_htmx
@htmx_login_required
def toggle_sidebar_status(request):
if request.session["sidebar_status"] == "floating":
request.session["sidebar_status"] = "fixed"
elif request.session["sidebar_status"] == "fixed":
request.session["sidebar_status"] = "floating"
else:
request.session["sidebar_status"] = "fixed"
return HttpResponse(
status=204,
)
@htmx_login_required
@is_superuser
@require_http_methods(["GET"])

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
"PO-Revision-Date: 2025-07-22 06:17+0000\n"
"Last-Translator: seraphblade2010 <marc.butenhoff@web.de>\n"
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
@@ -31,8 +31,8 @@ msgstr "Gruppe Name"
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:377
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
#: apps/users/forms.py:379
msgid "Update"
msgstr "Aktualisierung"
@@ -45,7 +45,7 @@ msgstr "Aktualisierung"
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
#: apps/users/forms.py:223 apps/users/forms.py:385
#: apps/users/forms.py:225 apps/users/forms.py:387
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Neuer Saldo"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:419
#: templates/insights/fragments/category_overview/index.html:78
#: templates/insights/fragments/category_overview/index.html:528
msgid "Category"
msgstr "Kategorie"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/rules/models.py:290 apps/transactions/filters.py:69
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
#: templates/insights/fragments/category_overview/index.html:35
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Tags"
@@ -128,7 +128,7 @@ msgstr "Kontengruppe"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
msgid "Account Groups"
msgstr "Kontengruppen"
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
msgstr ""
"Archivierte Konten werden weder angezeigt, noch zum Nettovermögen gezählt"
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -185,19 +185,19 @@ msgstr ""
msgid "Account"
msgstr "Konto"
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Konten"
#: apps/accounts/models.py:84
#: apps/accounts/models.py:93
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr ""
"Die Umrechnungs-Währung darf nicht mit der Haupt-Währung des Kontos "
@@ -235,7 +235,7 @@ msgid "Account Group deleted successfully"
msgstr "Kontengruppe erfolgreich gelöscht"
#: apps/accounts/views/account_groups.py:135
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully"
@@ -260,6 +260,14 @@ msgstr "Konto erfolgreich aktualisiert"
msgid "Account deleted successfully"
msgstr "Konto erfolgreich gelöscht"
#: apps/accounts/views/accounts.py:165
msgid "Account is now tracked"
msgstr ""
#: apps/accounts/views/accounts.py:168
msgid "Account is now untracked"
msgstr ""
#: apps/accounts/views/balance.py:77
msgid "Balance reconciliation"
msgstr "Saldenaktualisierung"
@@ -311,7 +319,7 @@ msgid "Shared with users"
msgstr "Mit Nutzern geteilt"
#: apps/common/fields/forms/dynamic_select.py:71
#: apps/common/fields/forms/dynamic_select.py:143
#: apps/common/fields/forms/dynamic_select.py:142
msgid "Error creating new instance"
msgstr "Fehler bei der Erstellung einer neuen Instanz"
@@ -356,7 +364,7 @@ msgstr ""
"Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: "
"Sichtbar für alle Nutzer. Nur bearbeitbar durch Besitzer."
#: apps/common/forms.py:80 apps/users/forms.py:140
#: apps/common/forms.py:80 apps/users/forms.py:142
msgid "Save"
msgstr "Speichern"
@@ -451,12 +459,13 @@ msgstr "Fehler"
msgid "Info"
msgstr "Info"
#: apps/common/views.py:111
#: apps/common/views.py:118
msgid "Cache cleared successfully"
msgstr "Cache erfolgreich geleert"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today"
msgstr "Heute"
@@ -470,8 +479,10 @@ msgstr "Löschen"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Zurücksetzen"
@@ -513,11 +524,11 @@ msgstr "Dezimalstellen"
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
msgid "Currencies"
msgstr "Währungen"
@@ -549,7 +560,7 @@ msgstr "Automatisch"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
msgid "Exchange Rates"
msgstr "Umrechnungskurse"
@@ -557,27 +568,27 @@ msgstr "Umrechnungskurse"
msgid "From and To currencies cannot be the same."
msgstr "Start- und Zielwährung dürfen nicht identisch sein."
#: apps/currencies/models.py:104
#: apps/currencies/models.py:105
msgid "On"
msgstr "An"
#: apps/currencies/models.py:105
#: apps/currencies/models.py:106
msgid "Every X hours"
msgstr "Alle X Stunden"
#: apps/currencies/models.py:106
#: apps/currencies/models.py:107
msgid "Not on"
msgstr "Nicht an"
#: apps/currencies/models.py:108
#: apps/currencies/models.py:109
msgid "Service Name"
msgstr "Dienstname"
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "Service Type"
msgstr "Diensttyp"
#: apps/currencies/models.py:112 apps/transactions/models.py:214
#: apps/currencies/models.py:113 apps/transactions/models.py:214
#: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
@@ -586,31 +597,31 @@ msgstr "Diensttyp"
msgid "Active"
msgstr "Aktiv"
#: apps/currencies/models.py:117
#: apps/currencies/models.py:118
msgid "API Key"
msgstr "API-Schlüssel"
#: apps/currencies/models.py:118
#: apps/currencies/models.py:119
msgid "API key for the service (if required)"
msgstr "API-Schlüssel für den Dienst (falls benötigt)"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "Interval Type"
msgstr "Intervalltyp"
#: apps/currencies/models.py:127
#: apps/currencies/models.py:128
msgid "Interval"
msgstr "Intervall"
#: apps/currencies/models.py:130
#: apps/currencies/models.py:131
msgid "Last Successful Fetch"
msgstr "Letzter erfolgreicher Abruf"
#: apps/currencies/models.py:135
#: apps/currencies/models.py:136
msgid "Target Currencies"
msgstr "Zielwährungen"
#: apps/currencies/models.py:137
#: apps/currencies/models.py:138
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
@@ -618,11 +629,11 @@ msgstr ""
"Währung auswählen, dessen Umrechnungskurs abgerufen werden sollen. Für jede "
"Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
#: apps/currencies/models.py:145
#: apps/currencies/models.py:146
msgid "Target Accounts"
msgstr "Zielkonten"
#: apps/currencies/models.py:147
#: apps/currencies/models.py:148
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
@@ -630,33 +641,33 @@ msgstr ""
"Konten auswählen, für die Umrechungskurse abgerufen werden solen. Für jedes "
"Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
#: apps/currencies/models.py:154
#: apps/currencies/models.py:155
#, fuzzy
#| msgid "Edit exchange rate"
msgid "Single exchange rate"
msgstr "Umrechnungskurs bearbeiten"
#: apps/currencies/models.py:157
#: apps/currencies/models.py:158
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Exchange Rate Service"
msgstr "Umrechnungskurs-Dienst"
#: apps/currencies/models.py:163
#: apps/currencies/models.py:164
msgid "Exchange Rate Services"
msgstr "Umrechnungskurs-Dienste"
#: apps/currencies/models.py:215
#: apps/currencies/models.py:216
msgid "'Every X hours' interval type requires a positive integer."
msgstr "\"Jede X Stunden\"-Intervalltyp benötigt eine positive Ganzzahl."
#: apps/currencies/models.py:224
#: apps/currencies/models.py:225
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen."
#: apps/currencies/models.py:238
#: apps/currencies/models.py:239
msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')."
@@ -664,7 +675,7 @@ msgstr ""
"Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder "
"Zeiträume (z.B. \"1-5,8,10-12\")."
#: apps/currencies/models.py:249
#: apps/currencies/models.py:250
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -825,15 +836,15 @@ msgid "Entry deleted successfully"
msgstr "Eintrag erfolgreich gelöscht"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr "Nutzer"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -841,28 +852,29 @@ msgid "Transactions"
msgstr "Transaktionen"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr "Kategorien"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/rules/models.py:282 apps/transactions/filters.py:74
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Entitäten"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -870,7 +882,7 @@ msgstr "Wiederkehrende Transaktionen"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -879,12 +891,12 @@ msgstr "Ratenzahlungs-Pläne"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr "Automatische Umrechnungskurse"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr "Regeln"
@@ -924,7 +936,7 @@ msgstr "Aktion der Transaktions-Regel bearbeiten"
msgid "Update or create transaction actions"
msgstr "Aktualisierung oder Erstellung von Transaktions-Aktionen"
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -956,7 +968,7 @@ msgstr "Datei auswählen"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr "Import"
@@ -1025,10 +1037,10 @@ msgid "Run deleted successfully"
msgstr "Vorgang erfolgreich gelöscht"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:313
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
#: templates/insights/fragments/category_overview/index.html:88
#: templates/insights/fragments/category_overview/index.html:393
#: templates/insights/fragments/category_overview/index.html:422
msgid "Uncategorized"
msgstr "Unkategorisiert"
@@ -1293,7 +1305,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:46
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1308,26 +1320,55 @@ msgstr "Inhalt"
msgid "Transaction Type"
msgstr "Transaktionstyp"
#: apps/transactions/filters.py:91
#: apps/transactions/filters.py:85
msgid "Date from"
msgstr "Datum von"
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
msgid "Until"
msgstr "Bis"
#: apps/transactions/filters.py:101
#: apps/transactions/filters.py:95
msgid "Reference date from"
msgstr "Referenzdatum von"
#: apps/transactions/filters.py:111
#: apps/transactions/filters.py:105
msgid "Amount min"
msgstr "Betrag Minimum"
#: apps/transactions/filters.py:116
#: apps/transactions/filters.py:110
msgid "Amount max"
msgstr "Betrag Maximum"
#: apps/transactions/filters.py:188
#, fuzzy
#| msgid "Categories"
msgid "Categorized"
msgstr "Kategorien"
#: apps/transactions/filters.py:195
#, fuzzy
#| msgid "Untagged"
msgid "Tagged"
msgstr "Unmarkiert"
#: apps/transactions/filters.py:195
#: templates/insights/fragments/category_overview/index.html:181
msgid "Untagged"
msgstr "Unmarkiert"
#: apps/transactions/filters.py:201
#, fuzzy
#| msgid "Add entity"
msgid "Any entity"
msgstr "Entität hinzufügen"
#: apps/transactions/filters.py:202
#, fuzzy
#| msgid "No entities"
msgid "No entity"
msgstr "Keine Entitäten"
#: apps/transactions/forms.py:173
msgid "More"
msgstr "Mehr"
@@ -1439,7 +1480,7 @@ msgstr "Entität"
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.html:10
#: templates/insights/fragments/category_overview/index.html:64
#: templates/insights/fragments/category_overview/index.html:79
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Einnahme"
@@ -1451,7 +1492,7 @@ msgstr "Einnahme"
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19
#: templates/insights/fragments/category_overview/index.html:65
#: templates/insights/fragments/category_overview/index.html:80
msgid "Expense"
msgstr "Ausgabe"
@@ -1487,12 +1528,12 @@ msgstr "Keine Kategorie"
msgid "No description"
msgstr "Keine Beschreibung"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr "Jährlich"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr "Monatlich"
@@ -1592,7 +1633,7 @@ msgid "Quick Transaction"
msgstr "Schnelle Transaktion"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1684,11 +1725,11 @@ msgid "Installment Plan deleted successfully"
msgstr "Ratenzahlungs-Plan erfolgreich gelöscht"
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
msgid "Item added successfully"
msgstr "Objekt erfolgreich hinzugefügt"
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
msgid "Item updated successfully"
msgstr "Objekt erfolgreich aktualisiert"
@@ -1803,24 +1844,26 @@ msgid "This account is deactivated"
msgstr "Dieses Konto ist deaktiviert"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr "Standard"
#: apps/users/forms.py:95 apps/users/models.py:484
#: apps/users/forms.py:97 apps/users/models.py:484
msgid "Date Format"
msgstr "Datumsformat"
#: apps/users/forms.py:100 apps/users/models.py:489
#: apps/users/forms.py:102 apps/users/models.py:489
msgid "Datetime Format"
msgstr "Datums- und Zeitformat"
#: apps/users/forms.py:106 apps/users/models.py:492
#: apps/users/forms.py:108 apps/users/models.py:492
msgid "Number Format"
msgstr "Zahlenformat"
#: apps/users/forms.py:146
#: apps/users/forms.py:148
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1831,25 +1874,25 @@ msgstr ""
"angezeigt werden.\n"
"Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s"
#: apps/users/forms.py:155
#: apps/users/forms.py:157
msgid "New Password"
msgstr "Neues Passwort"
#: apps/users/forms.py:158
#: apps/users/forms.py:160
msgid "Leave blank to keep the current password."
msgstr "Leer lassen um Passwort zu belassen."
#: apps/users/forms.py:161
#: apps/users/forms.py:163
msgid "Confirm New Password"
msgstr "Bestätige das neue Passwort"
#: apps/users/forms.py:173 apps/users/forms.py:334
#: apps/users/forms.py:175 apps/users/forms.py:336
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr "Abwählen um den Nutzer zu deaktivieren. Besser als gleich zu löschen."
#: apps/users/forms.py:176 apps/users/forms.py:337
#: apps/users/forms.py:178 apps/users/forms.py:339
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
@@ -1857,35 +1900,35 @@ msgstr ""
"Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit "
"hinzuzufügen."
#: apps/users/forms.py:247
#: apps/users/forms.py:249
msgid "This email address is already in use by another account."
msgstr "Diese E-Mail-Adresse wird bereits von jemand anders benutzt."
#: apps/users/forms.py:255
#: apps/users/forms.py:257
msgid "The two password fields didn't match."
msgstr "Die eingegebenen Passwörter stimmen nicht überein."
#: apps/users/forms.py:257
#: apps/users/forms.py:259
msgid "Please confirm your new password."
msgstr "Bitte bestätige dein neues Passwort."
#: apps/users/forms.py:259
#: apps/users/forms.py:261
msgid "Please enter the new password first."
msgstr "Bitte gebe erst dein neues Passwort ein."
#: apps/users/forms.py:279
#: apps/users/forms.py:281
msgid "You cannot deactivate your own account using this form."
msgstr "Du kannst deinen Nutzer nicht hier deaktivieren."
#: apps/users/forms.py:292
#: apps/users/forms.py:294
msgid "Cannot remove status from the last superuser."
msgstr "Sie können die Adminberechtigungen nicht vom letzten Admin entfernen."
#: apps/users/forms.py:298
#: apps/users/forms.py:300
msgid "You cannot remove your own superuser status using this form."
msgstr "Du kannst deinen eigenen Superuser-Status nicht hier entfernen."
#: apps/users/forms.py:395
#: apps/users/forms.py:397
msgid "A user with this email address already exists."
msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits."
@@ -1910,7 +1953,7 @@ msgid "All Transactions"
msgstr "Alle Transaktionen"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr "Kalender"
@@ -2005,7 +2048,7 @@ msgstr "Bearbeiten"
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:182
#: templates/cotton/transaction/item.html:192
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44
@@ -2032,7 +2075,7 @@ msgstr "Löschen"
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:186
#: templates/cotton/transaction/item.html:196
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48
@@ -2062,7 +2105,7 @@ msgstr "Bist du sicher?"
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:187
#: templates/cotton/transaction/item.html:197
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49
@@ -2084,7 +2127,7 @@ msgstr "Dies kann nicht rückgängig gemacht werden!"
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:188
#: templates/cotton/transaction/item.html:198
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2165,7 +2208,15 @@ msgstr "Konto bearbeiten"
msgid "Is Asset"
msgstr "Ist Vermögenswert"
#: templates/accounts/fragments/list.html:87
#: templates/accounts/fragments/list.html:78
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts"
msgstr "Keine Konten"
@@ -2223,7 +2274,7 @@ msgid "Muted"
msgstr "Ausgeblendet"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:429
#: templates/insights/fragments/category_overview/index.html:538
msgid "No categories"
msgstr "Keine Kategorien"
@@ -2232,13 +2283,14 @@ msgid "Pick a month"
msgstr "Monat auswählen"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr "Schließen"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr "Suche"
@@ -2247,35 +2299,42 @@ msgid "Select"
msgstr "Auswahl"
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries"
msgstr "Anzeigen auf Zusammenfassungen"
#: templates/cotton/transaction/item.html:155
#, fuzzy
#| msgid "Controlled by category"
msgid "Controlled by account"
msgstr "Gesteuert durch Kategorie"
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category"
msgstr "Gesteuert durch Kategorie"
#: templates/cotton/transaction/item.html:162
#: templates/cotton/transaction/item.html:172
msgid "Hide from summaries"
msgstr "Verstecken bei Zusammenfassungen"
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:174
msgid "Add as quick transaction"
msgstr "Als schnelle Transaktion hinzufügen"
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:176
msgid "Move to previous month"
msgstr ""
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:177
msgid "Move to next month"
msgstr ""
#: templates/cotton/transaction/item.html:168
#: templates/cotton/transaction/item.html:178
msgid "Move to today"
msgstr ""
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:180
#: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate"
msgstr "Duplikat"
@@ -2456,7 +2515,7 @@ msgstr "Keine Einträge für diesen DCA"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr "Versuche einen hinzuzufügen"
@@ -2559,7 +2618,7 @@ msgid "Edit exchange rate"
msgstr "Umrechnungskurs bearbeiten"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2583,7 +2642,7 @@ msgstr "Kein Umrechnungskurs"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr "Seitennavigation"
@@ -2616,7 +2675,7 @@ msgid "No services configured"
msgstr "Keine Dienste konfiguriert"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr "Exportieren und Wiederherstellen"
@@ -2714,72 +2773,72 @@ msgstr "Navigation umschalten"
msgid "Overview"
msgstr "Übersicht"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr "Nettovermögen"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:50
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
msgid "Current"
msgstr "Aktuell"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Einblicke"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr "Papierkorb"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr "Tools"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr "\"Dollar Cost Average\"-Tracker"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Einzelpreis-Rechner"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Währungs-Umrechner"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr "Verwaltung"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr "Automatisierung"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr "Admin"
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr "Nur benutzen, wenn du weißt was du tust"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr "Rechner"
@@ -2856,7 +2915,7 @@ msgstr "Tabelle"
msgid "Bars"
msgstr "Balken"
#: templates/insights/fragments/category_overview/index.html:38
#: templates/insights/fragments/category_overview/index.html:39
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
@@ -2864,22 +2923,30 @@ msgstr ""
"Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden "
"Tag einmal gezählt"
#: templates/insights/fragments/category_overview/index.html:54
#: templates/insights/fragments/category_overview/index.html:52
#, fuzzy
#| msgid ""
#| "Transaction amounts associated with multiple tags will be counted once "
#| "for each tag"
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
"Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden "
"Tag einmal gezählt"
#: templates/insights/fragments/category_overview/index.html:69
#, fuzzy
#| msgid "final total"
msgid "Final total"
msgstr "Gesamtbilanz"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/insights/fragments/category_overview/index.html:81
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr "Gesamt"
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr "Unmarkiert"
#: templates/insights/fragments/category_overview/index.html:406
#: templates/insights/fragments/category_overview/index.html:515
#, fuzzy
#| msgid "final total"
msgid "Final Total"
@@ -3089,26 +3156,30 @@ msgstr "Verteilung"
msgid "Summary"
msgstr "Zusammenfassung"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Transaktionen filtern"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Sortieren nach"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Älteste zuerst"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Neueste zuerst"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Transaktionen filtern"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Sortieren nach"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3324,7 +3395,7 @@ msgstr "Bearbeitung"
msgid "transactions"
msgstr "Transaktionen"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr "Keine Transaktionen gefunden"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,8 +30,8 @@ msgstr ""
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:377
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
#: apps/users/forms.py:379
msgid "Update"
msgstr ""
@@ -44,7 +44,7 @@ msgstr ""
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
#: apps/users/forms.py:223 apps/users/forms.py:385
#: apps/users/forms.py:225 apps/users/forms.py:387
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -81,22 +81,22 @@ msgstr ""
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:419
#: templates/insights/fragments/category_overview/index.html:78
#: templates/insights/fragments/category_overview/index.html:528
msgid "Category"
msgstr ""
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/rules/models.py:290 apps/transactions/filters.py:69
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
#: templates/insights/fragments/category_overview/index.html:35
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr ""
@@ -127,7 +127,7 @@ msgstr ""
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
msgid "Account Groups"
msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
msgid "Archived accounts don't show up nor count towards your net worth"
msgstr ""
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -181,19 +181,19 @@ msgstr ""
msgid "Account"
msgstr ""
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr ""
#: apps/accounts/models.py:84
#: apps/accounts/models.py:93
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr ""
@@ -229,7 +229,7 @@ msgid "Account Group deleted successfully"
msgstr ""
#: apps/accounts/views/account_groups.py:135
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully"
@@ -254,6 +254,14 @@ msgstr ""
msgid "Account deleted successfully"
msgstr ""
#: apps/accounts/views/accounts.py:165
msgid "Account is now tracked"
msgstr ""
#: apps/accounts/views/accounts.py:168
msgid "Account is now untracked"
msgstr ""
#: apps/accounts/views/balance.py:77
msgid "Balance reconciliation"
msgstr ""
@@ -303,7 +311,7 @@ msgid "Shared with users"
msgstr ""
#: apps/common/fields/forms/dynamic_select.py:71
#: apps/common/fields/forms/dynamic_select.py:143
#: apps/common/fields/forms/dynamic_select.py:142
msgid "Error creating new instance"
msgstr ""
@@ -344,7 +352,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr ""
#: apps/common/forms.py:80 apps/users/forms.py:140
#: apps/common/forms.py:80 apps/users/forms.py:142
msgid "Save"
msgstr ""
@@ -439,12 +447,13 @@ msgstr ""
msgid "Info"
msgstr ""
#: apps/common/views.py:111
#: apps/common/views.py:118
msgid "Cache cleared successfully"
msgstr ""
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today"
msgstr ""
@@ -458,8 +467,10 @@ msgstr ""
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr ""
@@ -501,11 +512,11 @@ msgstr ""
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
msgid "Currencies"
msgstr ""
@@ -537,7 +548,7 @@ msgstr ""
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
msgid "Exchange Rates"
msgstr ""
@@ -545,27 +556,27 @@ msgstr ""
msgid "From and To currencies cannot be the same."
msgstr ""
#: apps/currencies/models.py:104
#: apps/currencies/models.py:105
msgid "On"
msgstr ""
#: apps/currencies/models.py:105
#: apps/currencies/models.py:106
msgid "Every X hours"
msgstr ""
#: apps/currencies/models.py:106
#: apps/currencies/models.py:107
msgid "Not on"
msgstr ""
#: apps/currencies/models.py:108
#: apps/currencies/models.py:109
msgid "Service Name"
msgstr ""
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "Service Type"
msgstr ""
#: apps/currencies/models.py:112 apps/transactions/models.py:214
#: apps/currencies/models.py:113 apps/transactions/models.py:214
#: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
@@ -574,77 +585,77 @@ msgstr ""
msgid "Active"
msgstr ""
#: apps/currencies/models.py:117
#: apps/currencies/models.py:118
msgid "API Key"
msgstr ""
#: apps/currencies/models.py:118
#: apps/currencies/models.py:119
msgid "API key for the service (if required)"
msgstr ""
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "Interval Type"
msgstr ""
#: apps/currencies/models.py:127
#: apps/currencies/models.py:128
msgid "Interval"
msgstr ""
#: apps/currencies/models.py:130
#: apps/currencies/models.py:131
msgid "Last Successful Fetch"
msgstr ""
#: apps/currencies/models.py:135
#: apps/currencies/models.py:136
msgid "Target Currencies"
msgstr ""
#: apps/currencies/models.py:137
#: apps/currencies/models.py:138
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:145
#: apps/currencies/models.py:146
msgid "Target Accounts"
msgstr ""
#: apps/currencies/models.py:147
#: apps/currencies/models.py:148
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:154
#: apps/currencies/models.py:155
msgid "Single exchange rate"
msgstr ""
#: apps/currencies/models.py:157
#: apps/currencies/models.py:158
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Exchange Rate Service"
msgstr ""
#: apps/currencies/models.py:163
#: apps/currencies/models.py:164
msgid "Exchange Rate Services"
msgstr ""
#: apps/currencies/models.py:215
#: apps/currencies/models.py:216
msgid "'Every X hours' interval type requires a positive integer."
msgstr ""
#: apps/currencies/models.py:224
#: apps/currencies/models.py:225
msgid "'Every X hours' interval must be between 1 and 24."
msgstr ""
#: apps/currencies/models.py:238
#: apps/currencies/models.py:239
msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')."
msgstr ""
#: apps/currencies/models.py:249
#: apps/currencies/models.py:250
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -801,15 +812,15 @@ msgid "Entry deleted successfully"
msgstr ""
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -817,28 +828,29 @@ msgid "Transactions"
msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr ""
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/rules/models.py:282 apps/transactions/filters.py:74
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -846,7 +858,7 @@ msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -855,12 +867,12 @@ msgstr ""
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr ""
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr ""
@@ -900,7 +912,7 @@ msgstr ""
msgid "Update or create transaction actions"
msgstr ""
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -930,7 +942,7 @@ msgstr ""
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr ""
@@ -999,10 +1011,10 @@ msgid "Run deleted successfully"
msgstr ""
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:313
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
#: templates/insights/fragments/category_overview/index.html:88
#: templates/insights/fragments/category_overview/index.html:393
#: templates/insights/fragments/category_overview/index.html:422
msgid "Uncategorized"
msgstr ""
@@ -1260,7 +1272,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:46
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1275,26 +1287,47 @@ msgstr ""
msgid "Transaction Type"
msgstr ""
#: apps/transactions/filters.py:91
#: apps/transactions/filters.py:85
msgid "Date from"
msgstr ""
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
msgid "Until"
msgstr ""
#: apps/transactions/filters.py:101
#: apps/transactions/filters.py:95
msgid "Reference date from"
msgstr ""
#: apps/transactions/filters.py:111
#: apps/transactions/filters.py:105
msgid "Amount min"
msgstr ""
#: apps/transactions/filters.py:116
#: apps/transactions/filters.py:110
msgid "Amount max"
msgstr ""
#: apps/transactions/filters.py:188
msgid "Categorized"
msgstr ""
#: apps/transactions/filters.py:195
msgid "Tagged"
msgstr ""
#: apps/transactions/filters.py:195
#: templates/insights/fragments/category_overview/index.html:181
msgid "Untagged"
msgstr ""
#: apps/transactions/filters.py:201
msgid "Any entity"
msgstr ""
#: apps/transactions/filters.py:202
msgid "No entity"
msgstr ""
#: apps/transactions/forms.py:173
msgid "More"
msgstr ""
@@ -1394,7 +1427,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.html:10
#: templates/insights/fragments/category_overview/index.html:64
#: templates/insights/fragments/category_overview/index.html:79
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr ""
@@ -1406,7 +1439,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19
#: templates/insights/fragments/category_overview/index.html:65
#: templates/insights/fragments/category_overview/index.html:80
msgid "Expense"
msgstr ""
@@ -1442,12 +1475,12 @@ msgstr ""
msgid "No description"
msgstr ""
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr ""
@@ -1546,7 +1579,7 @@ msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1638,11 +1671,11 @@ msgid "Installment Plan deleted successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
msgid "Item added successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
msgid "Item updated successfully"
msgstr ""
@@ -1757,24 +1790,26 @@ msgid "This account is deactivated"
msgstr ""
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr ""
#: apps/users/forms.py:95 apps/users/models.py:484
#: apps/users/forms.py:97 apps/users/models.py:484
msgid "Date Format"
msgstr ""
#: apps/users/forms.py:100 apps/users/models.py:489
#: apps/users/forms.py:102 apps/users/models.py:489
msgid "Datetime Format"
msgstr ""
#: apps/users/forms.py:106 apps/users/models.py:492
#: apps/users/forms.py:108 apps/users/models.py:492
msgid "Number Format"
msgstr ""
#: apps/users/forms.py:146
#: apps/users/forms.py:148
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1782,59 +1817,59 @@ msgid ""
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr ""
#: apps/users/forms.py:155
#: apps/users/forms.py:157
msgid "New Password"
msgstr ""
#: apps/users/forms.py:158
#: apps/users/forms.py:160
msgid "Leave blank to keep the current password."
msgstr ""
#: apps/users/forms.py:161
#: apps/users/forms.py:163
msgid "Confirm New Password"
msgstr ""
#: apps/users/forms.py:173 apps/users/forms.py:334
#: apps/users/forms.py:175 apps/users/forms.py:336
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
#: apps/users/forms.py:176 apps/users/forms.py:337
#: apps/users/forms.py:178 apps/users/forms.py:339
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
#: apps/users/forms.py:247
#: apps/users/forms.py:249
msgid "This email address is already in use by another account."
msgstr ""
#: apps/users/forms.py:255
#: apps/users/forms.py:257
msgid "The two password fields didn't match."
msgstr ""
#: apps/users/forms.py:257
#: apps/users/forms.py:259
msgid "Please confirm your new password."
msgstr ""
#: apps/users/forms.py:259
#: apps/users/forms.py:261
msgid "Please enter the new password first."
msgstr ""
#: apps/users/forms.py:279
#: apps/users/forms.py:281
msgid "You cannot deactivate your own account using this form."
msgstr ""
#: apps/users/forms.py:292
#: apps/users/forms.py:294
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:298
#: apps/users/forms.py:300
msgid "You cannot remove your own superuser status using this form."
msgstr ""
#: apps/users/forms.py:395
#: apps/users/forms.py:397
msgid "A user with this email address already exists."
msgstr ""
@@ -1859,7 +1894,7 @@ msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr ""
@@ -1954,7 +1989,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:182
#: templates/cotton/transaction/item.html:192
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44
@@ -1981,7 +2016,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:186
#: templates/cotton/transaction/item.html:196
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48
@@ -2011,7 +2046,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:187
#: templates/cotton/transaction/item.html:197
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49
@@ -2033,7 +2068,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:188
#: templates/cotton/transaction/item.html:198
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2114,7 +2149,15 @@ msgstr ""
msgid "Is Asset"
msgstr ""
#: templates/accounts/fragments/list.html:87
#: templates/accounts/fragments/list.html:78
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts"
msgstr ""
@@ -2172,7 +2215,7 @@ msgid "Muted"
msgstr ""
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:429
#: templates/insights/fragments/category_overview/index.html:538
msgid "No categories"
msgstr ""
@@ -2181,13 +2224,14 @@ msgid "Pick a month"
msgstr ""
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr ""
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr ""
@@ -2196,35 +2240,40 @@ msgid "Select"
msgstr ""
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr ""
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category"
msgstr ""
#: templates/cotton/transaction/item.html:162
#: templates/cotton/transaction/item.html:172
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:174
msgid "Add as quick transaction"
msgstr ""
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:176
msgid "Move to previous month"
msgstr ""
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:177
msgid "Move to next month"
msgstr ""
#: templates/cotton/transaction/item.html:168
#: templates/cotton/transaction/item.html:178
msgid "Move to today"
msgstr ""
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:180
#: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate"
msgstr ""
@@ -2405,7 +2454,7 @@ msgstr ""
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr ""
@@ -2507,7 +2556,7 @@ msgid "Edit exchange rate"
msgstr ""
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2531,7 +2580,7 @@ msgstr ""
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr ""
@@ -2564,7 +2613,7 @@ msgid "No services configured"
msgstr ""
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr ""
@@ -2660,72 +2709,72 @@ msgstr ""
msgid "Overview"
msgstr ""
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr ""
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:50
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
msgid "Current"
msgstr ""
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr ""
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr ""
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr ""
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr ""
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr ""
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr ""
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr ""
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr ""
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr ""
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr ""
@@ -2799,26 +2848,28 @@ msgstr ""
msgid "Bars"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:38
#: templates/insights/fragments/category_overview/index.html:39
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:54
#: templates/insights/fragments/category_overview/index.html:52
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:66
#: templates/insights/fragments/category_overview/index.html:81
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:406
#: templates/insights/fragments/category_overview/index.html:515
msgid "Final Total"
msgstr ""
@@ -3023,26 +3074,30 @@ msgstr ""
msgid "Summary"
msgstr ""
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr ""
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3250,7 +3305,7 @@ msgstr ""
msgid "transactions"
msgstr ""
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
"PO-Revision-Date: 2025-08-08 06:17+0000\n"
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
"PO-Revision-Date: 2025-08-17 08:17+0000\n"
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
"app/nl/>\n"
@@ -31,8 +31,8 @@ msgstr "Groepsnaam"
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:377
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
#: apps/users/forms.py:379
msgid "Update"
msgstr "Bijwerken"
@@ -45,7 +45,7 @@ msgstr "Bijwerken"
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
#: apps/users/forms.py:223 apps/users/forms.py:385
#: apps/users/forms.py:225 apps/users/forms.py:387
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Nieuw saldo"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:419
#: templates/insights/fragments/category_overview/index.html:78
#: templates/insights/fragments/category_overview/index.html:528
msgid "Category"
msgstr "Categorie"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/rules/models.py:290 apps/transactions/filters.py:69
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
#: templates/insights/fragments/category_overview/index.html:35
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Labels"
@@ -128,7 +128,7 @@ msgstr "Accountgroep"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
msgid "Account Groups"
msgstr "Accountgroepen"
@@ -172,7 +172,7 @@ msgstr ""
"Gearchiveerde rekeningen worden niet weergegeven en tellen niet mee voor je "
"\"Netto Waarde\""
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -186,19 +186,19 @@ msgstr ""
msgid "Account"
msgstr "Rekening"
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Rekeningen"
#: apps/accounts/models.py:84
#: apps/accounts/models.py:93
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr ""
"Eenheid wisselgeld kan niet dezelfde zijn als de munteenheid van de rekening."
@@ -235,7 +235,7 @@ msgid "Account Group deleted successfully"
msgstr "Rekeninggroep succesvol verwijderd"
#: apps/accounts/views/account_groups.py:135
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully"
@@ -260,6 +260,14 @@ msgstr "Rekening succesvol bijgewerkt"
msgid "Account deleted successfully"
msgstr "Rekening succesvol verwijderd"
#: apps/accounts/views/accounts.py:165
msgid "Account is now tracked"
msgstr "Account wordt nu bijgehouden"
#: apps/accounts/views/accounts.py:168
msgid "Account is now untracked"
msgstr "Account wordt nu niet meer bijgehouden"
#: apps/accounts/views/balance.py:77
msgid "Balance reconciliation"
msgstr "Saldi afstemming"
@@ -309,7 +317,7 @@ msgid "Shared with users"
msgstr "Gedeeld met gebruikers"
#: apps/common/fields/forms/dynamic_select.py:71
#: apps/common/fields/forms/dynamic_select.py:143
#: apps/common/fields/forms/dynamic_select.py:142
msgid "Error creating new instance"
msgstr "Fout bij het aanmaken van een nieuwe instantie"
@@ -355,7 +363,7 @@ msgstr ""
"bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. "
"Alleen bewerkbaar door de eigenaar."
#: apps/common/forms.py:80 apps/users/forms.py:140
#: apps/common/forms.py:80 apps/users/forms.py:142
msgid "Save"
msgstr "Opslaan"
@@ -450,12 +458,13 @@ msgstr "Fout"
msgid "Info"
msgstr "Info"
#: apps/common/views.py:111
#: apps/common/views.py:118
msgid "Cache cleared successfully"
msgstr "Cache succesvol gewist"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today"
msgstr "Vandaag"
@@ -469,8 +478,10 @@ msgstr "Verwijder"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Leegmaken"
@@ -512,11 +523,11 @@ msgstr "Cijfers na de komma"
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
msgid "Currencies"
msgstr "Munteenheden"
@@ -548,7 +559,7 @@ msgstr "Automatisch"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
msgid "Exchange Rates"
msgstr "Wisselkoersen"
@@ -556,27 +567,27 @@ msgstr "Wisselkoersen"
msgid "From and To currencies cannot be the same."
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
#: apps/currencies/models.py:104
#: apps/currencies/models.py:105
msgid "On"
msgstr "Op"
#: apps/currencies/models.py:105
#: apps/currencies/models.py:106
msgid "Every X hours"
msgstr "Elke X Uren"
#: apps/currencies/models.py:106
#: apps/currencies/models.py:107
msgid "Not on"
msgstr "Niet op"
#: apps/currencies/models.py:108
#: apps/currencies/models.py:109
msgid "Service Name"
msgstr "Dienstnaam"
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "Service Type"
msgstr "Soort Dienst"
#: apps/currencies/models.py:112 apps/transactions/models.py:214
#: apps/currencies/models.py:113 apps/transactions/models.py:214
#: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
@@ -585,31 +596,31 @@ msgstr "Soort Dienst"
msgid "Active"
msgstr "Actief"
#: apps/currencies/models.py:117
#: apps/currencies/models.py:118
msgid "API Key"
msgstr "API Sleutel"
#: apps/currencies/models.py:118
#: apps/currencies/models.py:119
msgid "API key for the service (if required)"
msgstr "API sleutel voor de dienst (indien verplicht)"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "Interval Type"
msgstr "Soort Interval"
#: apps/currencies/models.py:127
#: apps/currencies/models.py:128
msgid "Interval"
msgstr "Interval"
#: apps/currencies/models.py:130
#: apps/currencies/models.py:131
msgid "Last Successful Fetch"
msgstr "Laatste Succesvolle Ophaling"
#: apps/currencies/models.py:135
#: apps/currencies/models.py:136
msgid "Target Currencies"
msgstr "Doel Munteenheden"
#: apps/currencies/models.py:137
#: apps/currencies/models.py:138
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
@@ -617,11 +628,11 @@ msgstr ""
"Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden "
"voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers."
#: apps/currencies/models.py:145
#: apps/currencies/models.py:146
msgid "Target Accounts"
msgstr "Naar rekeningen"
#: apps/currencies/models.py:147
#: apps/currencies/models.py:148
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
@@ -630,33 +641,33 @@ msgstr ""
"opgehaald voor de munteenheid van elke rekening ten opzichte van de "
"ingestelde wisselkoers."
#: apps/currencies/models.py:154
#, fuzzy
#| msgid "Edit exchange rate"
#: apps/currencies/models.py:155
msgid "Single exchange rate"
msgstr "Wisselkoers bewerken"
msgstr "Enkele Wisselkoers"
#: apps/currencies/models.py:157
#: apps/currencies/models.py:158
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Maak één wisselkoers aan en houd deze bijgewerkt. Voorkomt een overvolle "
"database."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Exchange Rate Service"
msgstr "Wisselkoersdienst"
#: apps/currencies/models.py:163
#: apps/currencies/models.py:164
msgid "Exchange Rate Services"
msgstr "Wisselkoersdiensten"
#: apps/currencies/models.py:215
#: apps/currencies/models.py:216
msgid "'Every X hours' interval type requires a positive integer."
msgstr "Voor het intervaltype Elke X uur is een positief geheel getal nodig."
#: apps/currencies/models.py:224
#: apps/currencies/models.py:225
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Het interval Elke X uur moet tussen 1 en 24 liggen."
#: apps/currencies/models.py:238
#: apps/currencies/models.py:239
msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')."
@@ -664,7 +675,7 @@ msgstr ""
"Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of "
"reeksen (bijv. 1-5,8,10-12)."
#: apps/currencies/models.py:249
#: apps/currencies/models.py:250
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -824,15 +835,15 @@ msgid "Entry deleted successfully"
msgstr "Invoer succesvol verwijderd"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr "Gebruikers"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -840,28 +851,29 @@ msgid "Transactions"
msgstr "Verrichtingen"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr "Categorieën"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/rules/models.py:282 apps/transactions/filters.py:74
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Bedrijven"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -869,7 +881,7 @@ msgstr "Terugkerende Verrichtingen"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -878,12 +890,12 @@ msgstr "Afbetalingsplannen"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr "Automatische Wisselkoersen"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr "Regels"
@@ -923,7 +935,7 @@ msgstr "Bewerk verrichtingsactie"
msgid "Update or create transaction actions"
msgstr "Bewerk of maak verrichtingsregel acties"
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -955,7 +967,7 @@ msgstr "Selecteer een bestand"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr "Importeer"
@@ -1024,10 +1036,10 @@ msgid "Run deleted successfully"
msgstr "Run met succes verwijderd"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:313
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
#: templates/insights/fragments/category_overview/index.html:88
#: templates/insights/fragments/category_overview/index.html:393
#: templates/insights/fragments/category_overview/index.html:422
msgid "Uncategorized"
msgstr "Ongecategoriseerd"
@@ -1287,7 +1299,7 @@ msgstr "Verrichting Bijwerken Of Maken succesvol verwijderd"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:46
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1302,26 +1314,47 @@ msgstr "Inhoud"
msgid "Transaction Type"
msgstr "Soort transactie"
#: apps/transactions/filters.py:91
#: apps/transactions/filters.py:85
msgid "Date from"
msgstr "Datum vanaf"
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
msgid "Until"
msgstr "Tot"
#: apps/transactions/filters.py:101
#: apps/transactions/filters.py:95
msgid "Reference date from"
msgstr "Referentiedatum vanaf"
#: apps/transactions/filters.py:111
#: apps/transactions/filters.py:105
msgid "Amount min"
msgstr "Minimum bedrag"
#: apps/transactions/filters.py:116
#: apps/transactions/filters.py:110
msgid "Amount max"
msgstr "Maximaal bedrag"
#: apps/transactions/filters.py:188
msgid "Categorized"
msgstr "Gecategoriseerd"
#: apps/transactions/filters.py:195
msgid "Tagged"
msgstr "Gelabeld"
#: apps/transactions/filters.py:195
#: templates/insights/fragments/category_overview/index.html:181
msgid "Untagged"
msgstr "Niet gelabeld"
#: apps/transactions/filters.py:201
msgid "Any entity"
msgstr "Elk bedrijf"
#: apps/transactions/filters.py:202
msgid "No entity"
msgstr "Geen bedrijf"
#: apps/transactions/forms.py:173
msgid "More"
msgstr "Meer"
@@ -1427,7 +1460,7 @@ msgstr "Bedrijf"
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.html:10
#: templates/insights/fragments/category_overview/index.html:64
#: templates/insights/fragments/category_overview/index.html:79
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Ontvangsten Transactie"
@@ -1439,7 +1472,7 @@ msgstr "Ontvangsten Transactie"
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19
#: templates/insights/fragments/category_overview/index.html:65
#: templates/insights/fragments/category_overview/index.html:80
msgid "Expense"
msgstr "Uitgave"
@@ -1475,12 +1508,12 @@ msgstr "Geen categorie"
msgid "No description"
msgstr "Geen Beschrijving"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr "Jaarlijks"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr "Maandelijks"
@@ -1579,7 +1612,7 @@ msgid "Quick Transaction"
msgstr "Snelle verrichting"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1671,11 +1704,11 @@ msgid "Installment Plan deleted successfully"
msgstr "Afbetalingsplan succesvol verwijderd"
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
msgid "Item added successfully"
msgstr "Item succesvol toegevoegd"
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
msgid "Item updated successfully"
msgstr "Item succesvol bijgewerkt"
@@ -1790,24 +1823,26 @@ msgid "This account is deactivated"
msgstr "Deze gebruiker is gedeactiveerd"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr "Standaard"
#: apps/users/forms.py:95 apps/users/models.py:484
#: apps/users/forms.py:97 apps/users/models.py:484
msgid "Date Format"
msgstr "Datumnotatie"
#: apps/users/forms.py:100 apps/users/models.py:489
#: apps/users/forms.py:102 apps/users/models.py:489
msgid "Datetime Format"
msgstr "Tijdsnotatie"
#: apps/users/forms.py:106 apps/users/models.py:492
#: apps/users/forms.py:108 apps/users/models.py:492
msgid "Number Format"
msgstr "Schrijfwijze Nummers"
#: apps/users/forms.py:146
#: apps/users/forms.py:148
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1818,19 +1853,19 @@ msgstr ""
"weergegeven\n"
"Overweeg om WYGIWYH te helpen vertalen naar jouw taal op %(translation_link)s"
#: apps/users/forms.py:155
#: apps/users/forms.py:157
msgid "New Password"
msgstr "Nieuw Wachtwoord"
#: apps/users/forms.py:158
#: apps/users/forms.py:160
msgid "Leave blank to keep the current password."
msgstr "Laat leeg om het huidige wachtwoord te behouden."
#: apps/users/forms.py:161
#: apps/users/forms.py:163
msgid "Confirm New Password"
msgstr "Bevestig Nieuw Wachtwoord"
#: apps/users/forms.py:173 apps/users/forms.py:334
#: apps/users/forms.py:175 apps/users/forms.py:336
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
@@ -1838,7 +1873,7 @@ msgstr ""
"Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer "
"dit in plaats van accounts te verwijderen."
#: apps/users/forms.py:176 apps/users/forms.py:337
#: apps/users/forms.py:178 apps/users/forms.py:339
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
@@ -1846,35 +1881,35 @@ msgstr ""
"Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te "
"kennen."
#: apps/users/forms.py:247
#: apps/users/forms.py:249
msgid "This email address is already in use by another account."
msgstr "Dit e-mailadres wordt al gebruikt door een ander account."
#: apps/users/forms.py:255
#: apps/users/forms.py:257
msgid "The two password fields didn't match."
msgstr "De twee wachtwoordvelden komen niet overeen."
#: apps/users/forms.py:257
#: apps/users/forms.py:259
msgid "Please confirm your new password."
msgstr "Bevestig je nieuwe wachtwoord."
#: apps/users/forms.py:259
#: apps/users/forms.py:261
msgid "Please enter the new password first."
msgstr "Geef eerst het nieuwe wachtwoord op."
#: apps/users/forms.py:279
#: apps/users/forms.py:281
msgid "You cannot deactivate your own account using this form."
msgstr "Je kunt je eigen account niet deactiveren met dit formulier."
#: apps/users/forms.py:292
#: apps/users/forms.py:294
msgid "Cannot remove status from the last superuser."
msgstr "Kan de status van de laatste Hoofdadmin niet verwijderen."
#: apps/users/forms.py:298
#: apps/users/forms.py:300
msgid "You cannot remove your own superuser status using this form."
msgstr "Je kunt je eigen hoofdadminrechten niet verwijderen met dit formulier."
#: apps/users/forms.py:395
#: apps/users/forms.py:397
msgid "A user with this email address already exists."
msgstr "Er bestaat al een gebruiker met dit e-mailadres."
@@ -1899,7 +1934,7 @@ msgid "All Transactions"
msgstr "Alle Verrichtingen"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr "Kalender"
@@ -1994,7 +2029,7 @@ msgstr "Bewerken"
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:182
#: templates/cotton/transaction/item.html:192
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44
@@ -2021,7 +2056,7 @@ msgstr "Verwijderen"
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:186
#: templates/cotton/transaction/item.html:196
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48
@@ -2051,7 +2086,7 @@ msgstr "Weet je het zeker?"
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:187
#: templates/cotton/transaction/item.html:197
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49
@@ -2073,7 +2108,7 @@ msgstr "Je kunt dit niet meer terugdraaien!"
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:188
#: templates/cotton/transaction/item.html:198
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2154,7 +2189,15 @@ msgstr "Rekening bewerken"
msgid "Is Asset"
msgstr "Is Vermogen"
#: templates/accounts/fragments/list.html:87
#: templates/accounts/fragments/list.html:78
msgid "Track"
msgstr "Gevolgd"
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr "Niet gevolgd"
#: templates/accounts/fragments/list.html:98
msgid "No accounts"
msgstr "Geen rekeningen"
@@ -2212,7 +2255,7 @@ msgid "Muted"
msgstr "Gedempt"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:429
#: templates/insights/fragments/category_overview/index.html:538
msgid "No categories"
msgstr "Geen categorieën"
@@ -2221,13 +2264,14 @@ msgid "Pick a month"
msgstr "Kies een maand"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr "Sluiten"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr "Zoeken"
@@ -2236,35 +2280,40 @@ msgid "Select"
msgstr "Selecteer"
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries"
msgstr "Toon op samenvattingen"
#: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr "Gecontroleerd door account"
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category"
msgstr "Gecontroleerd door categorie"
#: templates/cotton/transaction/item.html:162
#: templates/cotton/transaction/item.html:172
msgid "Hide from summaries"
msgstr "Verbergen in samenvattingen"
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:174
msgid "Add as quick transaction"
msgstr "Toevoegen als snelle transactie"
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:176
msgid "Move to previous month"
msgstr "Ga naar vorige maand"
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:177
msgid "Move to next month"
msgstr "Ga naar volgende maand"
#: templates/cotton/transaction/item.html:168
#: templates/cotton/transaction/item.html:178
msgid "Move to today"
msgstr "Ga naar vandaag"
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:180
#: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate"
msgstr "Dupliceren"
@@ -2445,7 +2494,7 @@ msgstr "Geen idems in deze DCA"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr "Probeer er een toe te voegen"
@@ -2547,7 +2596,7 @@ msgid "Edit exchange rate"
msgstr "Wisselkoers bewerken"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2571,7 +2620,7 @@ msgstr "Geen wisselkoersen"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr "Paginanavigatie"
@@ -2604,7 +2653,7 @@ msgid "No services configured"
msgstr "Geen diensten ingesteld"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr "Exporteren en Herstellen"
@@ -2701,72 +2750,72 @@ msgstr "Navigatie Knop"
msgid "Overview"
msgstr "Overzicht"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr "Netto Waarde"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:50
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
msgid "Current"
msgstr "Huidige"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Inzichten"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr "Prullenbak"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr "Hulpmiddelen"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr "Dollar Kostgemiddelde Tracker"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Eenheidsprijs berekenen"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Valuta omrekenen"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr "Beheer"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr "Automatisatie"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr "Admin"
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr "Gebruik dit alleen als je weet wat je doet"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr "Django Beheerder"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr "is beschikbaar"
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr "Rekenmachine"
@@ -2844,7 +2893,7 @@ msgstr "Tabel"
msgid "Bars"
msgstr "Balken"
#: templates/insights/fragments/category_overview/index.html:38
#: templates/insights/fragments/category_overview/index.html:39
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
@@ -2852,20 +2901,24 @@ msgstr ""
"Transactiebedragen die gekoppeld zijn aan meerdere tags worden één keer "
"geteld voor elke tag"
#: templates/insights/fragments/category_overview/index.html:54
#: templates/insights/fragments/category_overview/index.html:52
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
"Transactiebedragen die gekoppeld zijn aan meerdere tags en bedrijven worden "
"één keer geteld voor elke tag"
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total"
msgstr "Eindtotaal"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/insights/fragments/category_overview/index.html:81
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr "Totaal"
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr "Niet gelabeld"
#: templates/insights/fragments/category_overview/index.html:406
#: templates/insights/fragments/category_overview/index.html:515
msgid "Final Total"
msgstr "Eindtotaal"
@@ -3073,26 +3126,30 @@ msgstr "Verdeling"
msgid "Summary"
msgstr "Samenvatting"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Filter verrichtingen"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Sorteer op"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Oudste eerst"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Nieuwste eerst"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Filter verrichtingen"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Sorteer op"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3306,7 +3363,7 @@ msgstr "Bewerking"
msgid "transactions"
msgstr "verrichtingen"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr "Geen Verrichtingen gevonden"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
"PO-Revision-Date: 2025-04-13 08:16+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese <https://translations.herculino.com/projects/"
@@ -31,8 +31,8 @@ msgstr "Nome do grupo"
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:377
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
#: apps/users/forms.py:379
msgid "Update"
msgstr "Atualizar"
@@ -45,7 +45,7 @@ msgstr "Atualizar"
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
#: apps/users/forms.py:223 apps/users/forms.py:385
#: apps/users/forms.py:225 apps/users/forms.py:387
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Novo saldo"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:419
#: templates/insights/fragments/category_overview/index.html:78
#: templates/insights/fragments/category_overview/index.html:528
msgid "Category"
msgstr "Categoria"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/rules/models.py:290 apps/transactions/filters.py:69
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
#: templates/insights/fragments/category_overview/index.html:35
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Tags"
@@ -128,7 +128,7 @@ msgstr "Grupo da Conta"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
msgid "Account Groups"
msgstr "Grupos da Conta"
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
msgstr ""
"Contas arquivadas não aparecem nem contam para o seu patrimônio líquido"
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -185,19 +185,19 @@ msgstr ""
msgid "Account"
msgstr "Conta"
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Contas"
#: apps/accounts/models.py:84
#: apps/accounts/models.py:93
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "A moeda de câmbio não pode ser a mesma que a moeda principal da conta."
@@ -233,7 +233,7 @@ msgid "Account Group deleted successfully"
msgstr "Grupo de Conta apagado com sucesso"
#: apps/accounts/views/account_groups.py:135
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully"
@@ -258,6 +258,14 @@ msgstr "Conta atualizada com sucesso"
msgid "Account deleted successfully"
msgstr "Conta apagada com sucesso"
#: apps/accounts/views/accounts.py:165
msgid "Account is now tracked"
msgstr ""
#: apps/accounts/views/accounts.py:168
msgid "Account is now untracked"
msgstr ""
#: apps/accounts/views/balance.py:77
msgid "Balance reconciliation"
msgstr "Reconciliação do saldo"
@@ -309,7 +317,7 @@ msgid "Shared with users"
msgstr "Compartilhado com os usuários"
#: apps/common/fields/forms/dynamic_select.py:71
#: apps/common/fields/forms/dynamic_select.py:143
#: apps/common/fields/forms/dynamic_select.py:142
msgid "Error creating new instance"
msgstr "Erro criando nova instância"
@@ -355,7 +363,7 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário."
#: apps/common/forms.py:80 apps/users/forms.py:140
#: apps/common/forms.py:80 apps/users/forms.py:142
msgid "Save"
msgstr "Salvar"
@@ -450,12 +458,13 @@ msgstr "Erro"
msgid "Info"
msgstr "Informação"
#: apps/common/views.py:111
#: apps/common/views.py:118
msgid "Cache cleared successfully"
msgstr "Cache limpo com sucesso"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today"
msgstr "Hoje"
@@ -469,8 +478,10 @@ msgstr "Remover"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Limpar"
@@ -512,11 +523,11 @@ msgstr "Casas Decimais"
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
msgid "Currencies"
msgstr "Moedas"
@@ -548,7 +559,7 @@ msgstr "Automático"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
msgid "Exchange Rates"
msgstr "Taxas de Câmbio"
@@ -556,27 +567,27 @@ msgstr "Taxas de Câmbio"
msgid "From and To currencies cannot be the same."
msgstr "As moedas De e Para não podem ser as mesmas."
#: apps/currencies/models.py:104
#: apps/currencies/models.py:105
msgid "On"
msgstr "Em"
#: apps/currencies/models.py:105
#: apps/currencies/models.py:106
msgid "Every X hours"
msgstr "A cada X horas"
#: apps/currencies/models.py:106
#: apps/currencies/models.py:107
msgid "Not on"
msgstr "Não em"
#: apps/currencies/models.py:108
#: apps/currencies/models.py:109
msgid "Service Name"
msgstr "Nome do Serviço"
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "Service Type"
msgstr "Tipo de Serviço"
#: apps/currencies/models.py:112 apps/transactions/models.py:214
#: apps/currencies/models.py:113 apps/transactions/models.py:214
#: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
@@ -585,31 +596,31 @@ msgstr "Tipo de Serviço"
msgid "Active"
msgstr "Ativo"
#: apps/currencies/models.py:117
#: apps/currencies/models.py:118
msgid "API Key"
msgstr "Chave de API"
#: apps/currencies/models.py:118
#: apps/currencies/models.py:119
msgid "API key for the service (if required)"
msgstr "Chave de API para o serviço (se necessário)"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "Interval Type"
msgstr "Tipo de Intervalo"
#: apps/currencies/models.py:127
#: apps/currencies/models.py:128
msgid "Interval"
msgstr "Intervalo"
#: apps/currencies/models.py:130
#: apps/currencies/models.py:131
msgid "Last Successful Fetch"
msgstr "Última execução bem-sucedida"
#: apps/currencies/models.py:135
#: apps/currencies/models.py:136
msgid "Target Currencies"
msgstr "Moedas-alvo"
#: apps/currencies/models.py:137
#: apps/currencies/models.py:138
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
@@ -617,11 +628,11 @@ msgstr ""
"Selecione as moedas para as quais deseja obter as taxas de câmbio. As taxas "
"serão obtidas para cada moeda em relação à moeda de câmbio definida."
#: apps/currencies/models.py:145
#: apps/currencies/models.py:146
msgid "Target Accounts"
msgstr "Contas-alvo"
#: apps/currencies/models.py:147
#: apps/currencies/models.py:148
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
@@ -630,34 +641,34 @@ msgstr ""
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
"definida."
#: apps/currencies/models.py:154
#: apps/currencies/models.py:155
#, fuzzy
#| msgid "Edit exchange rate"
msgid "Single exchange rate"
msgstr "Editar taxa de câmbio"
#: apps/currencies/models.py:157
#: apps/currencies/models.py:158
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Exchange Rate Service"
msgstr "Serviço de Taxa de Câmbio"
#: apps/currencies/models.py:163
#: apps/currencies/models.py:164
msgid "Exchange Rate Services"
msgstr "Serviços de Taxa de Câmbio"
#: apps/currencies/models.py:215
#: apps/currencies/models.py:216
msgid "'Every X hours' interval type requires a positive integer."
msgstr ""
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
#: apps/currencies/models.py:224
#: apps/currencies/models.py:225
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
#: apps/currencies/models.py:238
#: apps/currencies/models.py:239
msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')."
@@ -665,7 +676,7 @@ msgstr ""
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
#: apps/currencies/models.py:249
#: apps/currencies/models.py:250
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -824,15 +835,15 @@ msgid "Entry deleted successfully"
msgstr "Entrada apagada com sucesso"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr "Usuários"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -840,28 +851,29 @@ msgid "Transactions"
msgstr "Transações"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr "Categorias"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/rules/models.py:282 apps/transactions/filters.py:74
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Entidades"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -869,7 +881,7 @@ msgstr "Transações Recorrentes"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -878,12 +890,12 @@ msgstr "Parcelamentos"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr "Taxas de Câmbio Automáticas"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr "Regras"
@@ -923,7 +935,7 @@ msgstr "Ação de editar de transação"
msgid "Update or create transaction actions"
msgstr "Ações de atualizar ou criar transação"
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -955,7 +967,7 @@ msgstr "Selecione um arquivo"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr "Importar"
@@ -1024,10 +1036,10 @@ msgid "Run deleted successfully"
msgstr "Importação apagada com sucesso"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:313
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
#: templates/insights/fragments/category_overview/index.html:88
#: templates/insights/fragments/category_overview/index.html:393
#: templates/insights/fragments/category_overview/index.html:422
msgid "Uncategorized"
msgstr "Sem categoria"
@@ -1287,7 +1299,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:46
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1302,26 +1314,53 @@ msgstr "Conteúdo"
msgid "Transaction Type"
msgstr "Tipo de Transação"
#: apps/transactions/filters.py:91
#: apps/transactions/filters.py:85
msgid "Date from"
msgstr "Data de"
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
msgid "Until"
msgstr "Até"
#: apps/transactions/filters.py:101
#: apps/transactions/filters.py:95
msgid "Reference date from"
msgstr "Data de Referência de"
#: apps/transactions/filters.py:111
#: apps/transactions/filters.py:105
msgid "Amount min"
msgstr "Quantia miníma"
#: apps/transactions/filters.py:116
#: apps/transactions/filters.py:110
msgid "Amount max"
msgstr "Quantia máxima"
#: apps/transactions/filters.py:188
#, fuzzy
#| msgid "Categories"
msgid "Categorized"
msgstr "Categorias"
#: apps/transactions/filters.py:195
msgid "Tagged"
msgstr ""
#: apps/transactions/filters.py:195
#: templates/insights/fragments/category_overview/index.html:181
msgid "Untagged"
msgstr ""
#: apps/transactions/filters.py:201
#, fuzzy
#| msgid "Add entity"
msgid "Any entity"
msgstr "Adicionar entidade"
#: apps/transactions/filters.py:202
#, fuzzy
#| msgid "No entities"
msgid "No entity"
msgstr "Sem entidades"
#: apps/transactions/forms.py:173
msgid "More"
msgstr "Mais"
@@ -1430,7 +1469,7 @@ msgstr "Entidade"
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.html:10
#: templates/insights/fragments/category_overview/index.html:64
#: templates/insights/fragments/category_overview/index.html:79
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Renda"
@@ -1442,7 +1481,7 @@ msgstr "Renda"
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19
#: templates/insights/fragments/category_overview/index.html:65
#: templates/insights/fragments/category_overview/index.html:80
msgid "Expense"
msgstr "Despesa"
@@ -1478,12 +1517,12 @@ msgstr "Sem categoria"
msgid "No description"
msgstr "Sem descrição"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr "Mensal"
@@ -1584,7 +1623,7 @@ msgid "Quick Transaction"
msgstr "Editar Transação"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
#, fuzzy
@@ -1678,13 +1717,13 @@ msgid "Installment Plan deleted successfully"
msgstr "Parcelamento apagado com sucesso"
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
#, fuzzy
#| msgid "Rule added successfully"
msgid "Item added successfully"
msgstr "Regra adicionada com sucesso"
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
#, fuzzy
#| msgid "Rule updated successfully"
msgid "Item updated successfully"
@@ -1803,24 +1842,26 @@ msgid "This account is deactivated"
msgstr "Essa conta está desativada"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr "Padrão"
#: apps/users/forms.py:95 apps/users/models.py:484
#: apps/users/forms.py:97 apps/users/models.py:484
msgid "Date Format"
msgstr "Formato de Data"
#: apps/users/forms.py:100 apps/users/models.py:489
#: apps/users/forms.py:102 apps/users/models.py:489
msgid "Datetime Format"
msgstr "Formato de Data e Hora"
#: apps/users/forms.py:106 apps/users/models.py:492
#: apps/users/forms.py:108 apps/users/models.py:492
msgid "Number Format"
msgstr "Formato de Número"
#: apps/users/forms.py:146
#: apps/users/forms.py:148
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1831,61 +1872,61 @@ msgstr ""
"são exibidos\n"
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
#: apps/users/forms.py:155
#: apps/users/forms.py:157
#, fuzzy
#| msgid "Password"
msgid "New Password"
msgstr "Senha"
#: apps/users/forms.py:158
#: apps/users/forms.py:160
msgid "Leave blank to keep the current password."
msgstr ""
#: apps/users/forms.py:161
#: apps/users/forms.py:163
msgid "Confirm New Password"
msgstr ""
#: apps/users/forms.py:173 apps/users/forms.py:334
#: apps/users/forms.py:175 apps/users/forms.py:336
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
#: apps/users/forms.py:176 apps/users/forms.py:337
#: apps/users/forms.py:178 apps/users/forms.py:339
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
#: apps/users/forms.py:247
#: apps/users/forms.py:249
msgid "This email address is already in use by another account."
msgstr ""
#: apps/users/forms.py:255
#: apps/users/forms.py:257
msgid "The two password fields didn't match."
msgstr ""
#: apps/users/forms.py:257
#: apps/users/forms.py:259
msgid "Please confirm your new password."
msgstr ""
#: apps/users/forms.py:259
#: apps/users/forms.py:261
msgid "Please enter the new password first."
msgstr ""
#: apps/users/forms.py:279
#: apps/users/forms.py:281
msgid "You cannot deactivate your own account using this form."
msgstr ""
#: apps/users/forms.py:292
#: apps/users/forms.py:294
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:298
#: apps/users/forms.py:300
msgid "You cannot remove your own superuser status using this form."
msgstr ""
#: apps/users/forms.py:395
#: apps/users/forms.py:397
#, fuzzy
#| msgid "A value for this field already exists in the rule."
msgid "A user with this email address already exists."
@@ -1912,7 +1953,7 @@ msgid "All Transactions"
msgstr "Todas as transações"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr "Calendário"
@@ -2007,7 +2048,7 @@ msgstr "Editar"
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:182
#: templates/cotton/transaction/item.html:192
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44
@@ -2034,7 +2075,7 @@ msgstr "Apagar"
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:186
#: templates/cotton/transaction/item.html:196
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48
@@ -2064,7 +2105,7 @@ msgstr "Tem certeza?"
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:187
#: templates/cotton/transaction/item.html:197
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49
@@ -2086,7 +2127,7 @@ msgstr "Você não será capaz de reverter isso!"
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:188
#: templates/cotton/transaction/item.html:198
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2167,7 +2208,15 @@ msgstr "Editar conta"
msgid "Is Asset"
msgstr "É ativo"
#: templates/accounts/fragments/list.html:87
#: templates/accounts/fragments/list.html:78
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts"
msgstr "Nenhuma conta"
@@ -2225,7 +2274,7 @@ msgid "Muted"
msgstr "Silenciada"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:429
#: templates/insights/fragments/category_overview/index.html:538
msgid "No categories"
msgstr "Nenhum categoria"
@@ -2234,13 +2283,14 @@ msgid "Pick a month"
msgstr "Escolha um mês"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr "Fechar"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr "Buscar"
@@ -2249,39 +2299,46 @@ msgid "Select"
msgstr "Selecionar"
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
#, fuzzy
#| msgid "No category"
msgid "Controlled by account"
msgstr "Sem categoria"
#: templates/cotton/transaction/item.html:165
#, fuzzy
#| msgid "No category"
msgid "Controlled by category"
msgstr "Sem categoria"
#: templates/cotton/transaction/item.html:162
#: templates/cotton/transaction/item.html:172
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:174
#, fuzzy
#| msgid "Add recurring transaction"
msgid "Add as quick transaction"
msgstr "Adicionar transação recorrente"
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:176
msgid "Move to previous month"
msgstr ""
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:177
msgid "Move to next month"
msgstr ""
#: templates/cotton/transaction/item.html:168
#: templates/cotton/transaction/item.html:178
msgid "Move to today"
msgstr ""
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:180
#: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate"
msgstr "Duplicar"
@@ -2462,7 +2519,7 @@ msgstr "Nenhuma entrada neste CMP"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr "Tente adicionar uma"
@@ -2565,7 +2622,7 @@ msgid "Edit exchange rate"
msgstr "Editar taxa de câmbio"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2589,7 +2646,7 @@ msgstr "Nenhuma taxa de câmbio"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr "Navegação por página"
@@ -2622,7 +2679,7 @@ msgid "No services configured"
msgstr "Nenhum serviço configurado"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr "Exportar e Restaurar"
@@ -2720,72 +2777,72 @@ msgstr "Alternar navegação"
msgid "Overview"
msgstr "Visão Geral"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr "Patrimônio"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:50
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
msgid "Current"
msgstr "Atual"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Insights"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr "Lixeira"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr "Ferramentas"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr "Rastreador de Custo Médio Ponderado"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Calculadora de preço unitário"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Conversor de Moeda"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr "Gerenciar"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr "Automação"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr "Só use isso se você souber o que está fazendo"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr "Calculadora"
@@ -2863,28 +2920,30 @@ msgstr ""
msgid "Bars"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:38
#: templates/insights/fragments/category_overview/index.html:39
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:54
#: templates/insights/fragments/category_overview/index.html:52
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
#, fuzzy
#| msgid "final total"
msgid "Final total"
msgstr "total final"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/insights/fragments/category_overview/index.html:81
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr "Total"
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:406
#: templates/insights/fragments/category_overview/index.html:515
msgid "Final Total"
msgstr "Total Final"
@@ -3092,26 +3151,30 @@ msgstr "Distribuição"
msgid "Summary"
msgstr "Resumo"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Filtrar transações"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Ordernar por"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Mais antigas primeiro"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Mais novas primeiro"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Filtrar transações"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Ordernar por"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3328,7 +3391,7 @@ msgstr "Editando"
msgid "transactions"
msgstr "transações"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr "Nenhuma transação encontrada"

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
"PO-Revision-Date: 2025-08-08 04:17+0000\n"
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
"PO-Revision-Date: 2025-08-17 08:17+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/"
"projects/wygiwyh/app/pt_BR/>\n"
@@ -31,8 +31,8 @@ msgstr "Nome do grupo"
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:377
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
#: apps/users/forms.py:379
msgid "Update"
msgstr "Atualizar"
@@ -45,7 +45,7 @@ msgstr "Atualizar"
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
#: apps/users/forms.py:223 apps/users/forms.py:385
#: apps/users/forms.py:225 apps/users/forms.py:387
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Novo saldo"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:419
#: templates/insights/fragments/category_overview/index.html:78
#: templates/insights/fragments/category_overview/index.html:528
msgid "Category"
msgstr "Categoria"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/rules/models.py:290 apps/transactions/filters.py:69
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
#: templates/insights/fragments/category_overview/index.html:35
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Tags"
@@ -128,7 +128,7 @@ msgstr "Grupo da Conta"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
msgid "Account Groups"
msgstr "Grupos da Conta"
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
msgstr ""
"Contas arquivadas não aparecem nem contam para o seu patrimônio líquido"
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -185,19 +185,19 @@ msgstr ""
msgid "Account"
msgstr "Conta"
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Contas"
#: apps/accounts/models.py:84
#: apps/accounts/models.py:93
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "A moeda de câmbio não pode ser a mesma que a moeda principal da conta."
@@ -233,7 +233,7 @@ msgid "Account Group deleted successfully"
msgstr "Grupo de Conta apagado com sucesso"
#: apps/accounts/views/account_groups.py:135
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully"
@@ -258,6 +258,14 @@ msgstr "Conta atualizada com sucesso"
msgid "Account deleted successfully"
msgstr "Conta apagada com sucesso"
#: apps/accounts/views/accounts.py:165
msgid "Account is now tracked"
msgstr "A conta agora está sendo acompanhada"
#: apps/accounts/views/accounts.py:168
msgid "Account is now untracked"
msgstr "A conta agora não está mais sendo acompanhada"
#: apps/accounts/views/balance.py:77
msgid "Balance reconciliation"
msgstr "Reconciliação do saldo"
@@ -307,7 +315,7 @@ msgid "Shared with users"
msgstr "Compartilhado com os usuários"
#: apps/common/fields/forms/dynamic_select.py:71
#: apps/common/fields/forms/dynamic_select.py:143
#: apps/common/fields/forms/dynamic_select.py:142
msgid "Error creating new instance"
msgstr "Erro criando nova instância"
@@ -353,7 +361,7 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário."
#: apps/common/forms.py:80 apps/users/forms.py:140
#: apps/common/forms.py:80 apps/users/forms.py:142
msgid "Save"
msgstr "Salvar"
@@ -448,12 +456,13 @@ msgstr "Erro"
msgid "Info"
msgstr "Informação"
#: apps/common/views.py:111
#: apps/common/views.py:118
msgid "Cache cleared successfully"
msgstr "Cache limpo com sucesso"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today"
msgstr "Hoje"
@@ -467,8 +476,10 @@ msgstr "Remover"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Limpar"
@@ -510,11 +521,11 @@ msgstr "Casas Decimais"
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
msgid "Currencies"
msgstr "Moedas"
@@ -546,7 +557,7 @@ msgstr "Automático"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
msgid "Exchange Rates"
msgstr "Taxas de Câmbio"
@@ -554,27 +565,27 @@ msgstr "Taxas de Câmbio"
msgid "From and To currencies cannot be the same."
msgstr "As moedas De e Para não podem ser as mesmas."
#: apps/currencies/models.py:104
#: apps/currencies/models.py:105
msgid "On"
msgstr "Em"
#: apps/currencies/models.py:105
#: apps/currencies/models.py:106
msgid "Every X hours"
msgstr "A cada X horas"
#: apps/currencies/models.py:106
#: apps/currencies/models.py:107
msgid "Not on"
msgstr "Não em"
#: apps/currencies/models.py:108
#: apps/currencies/models.py:109
msgid "Service Name"
msgstr "Nome do Serviço"
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "Service Type"
msgstr "Tipo de Serviço"
#: apps/currencies/models.py:112 apps/transactions/models.py:214
#: apps/currencies/models.py:113 apps/transactions/models.py:214
#: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
@@ -583,31 +594,31 @@ msgstr "Tipo de Serviço"
msgid "Active"
msgstr "Ativo"
#: apps/currencies/models.py:117
#: apps/currencies/models.py:118
msgid "API Key"
msgstr "Chave de API"
#: apps/currencies/models.py:118
#: apps/currencies/models.py:119
msgid "API key for the service (if required)"
msgstr "Chave de API para o serviço (se necessário)"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "Interval Type"
msgstr "Tipo de Intervalo"
#: apps/currencies/models.py:127
#: apps/currencies/models.py:128
msgid "Interval"
msgstr "Intervalo"
#: apps/currencies/models.py:130
#: apps/currencies/models.py:131
msgid "Last Successful Fetch"
msgstr "Última execução bem-sucedida"
#: apps/currencies/models.py:135
#: apps/currencies/models.py:136
msgid "Target Currencies"
msgstr "Moedas-alvo"
#: apps/currencies/models.py:137
#: apps/currencies/models.py:138
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
@@ -615,11 +626,11 @@ msgstr ""
"Selecione as moedas para as quais deseja obter as taxas de câmbio. As taxas "
"serão obtidas para cada moeda em relação à moeda de câmbio definida."
#: apps/currencies/models.py:145
#: apps/currencies/models.py:146
msgid "Target Accounts"
msgstr "Contas-alvo"
#: apps/currencies/models.py:147
#: apps/currencies/models.py:148
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
@@ -628,34 +639,34 @@ msgstr ""
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
"definida."
#: apps/currencies/models.py:154
#: apps/currencies/models.py:155
msgid "Single exchange rate"
msgstr "Taxa de câmbio única"
#: apps/currencies/models.py:157
#: apps/currencies/models.py:158
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Cria uma taxa de câmbio e mantenha-a atualizada. Evita a poluição do banco "
"de dados."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Exchange Rate Service"
msgstr "Serviço de Taxa de Câmbio"
#: apps/currencies/models.py:163
#: apps/currencies/models.py:164
msgid "Exchange Rate Services"
msgstr "Serviços de Taxa de Câmbio"
#: apps/currencies/models.py:215
#: apps/currencies/models.py:216
msgid "'Every X hours' interval type requires a positive integer."
msgstr ""
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
#: apps/currencies/models.py:224
#: apps/currencies/models.py:225
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
#: apps/currencies/models.py:238
#: apps/currencies/models.py:239
msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')."
@@ -663,7 +674,7 @@ msgstr ""
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
#: apps/currencies/models.py:249
#: apps/currencies/models.py:250
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -822,15 +833,15 @@ msgid "Entry deleted successfully"
msgstr "Entrada apagada com sucesso"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr "Usuários"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -838,28 +849,29 @@ msgid "Transactions"
msgstr "Transações"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr "Categorias"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/rules/models.py:282 apps/transactions/filters.py:74
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Entidades"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -867,7 +879,7 @@ msgstr "Transações Recorrentes"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -876,12 +888,12 @@ msgstr "Parcelamentos"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr "Taxas de Câmbio Automáticas"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr "Regras"
@@ -921,7 +933,7 @@ msgstr "Ação de editar de transação"
msgid "Update or create transaction actions"
msgstr "Ações de atualizar ou criar transação"
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -953,7 +965,7 @@ msgstr "Selecione um arquivo"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr "Importar"
@@ -1022,10 +1034,10 @@ msgid "Run deleted successfully"
msgstr "Importação apagada com sucesso"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:313
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
#: templates/insights/fragments/category_overview/index.html:88
#: templates/insights/fragments/category_overview/index.html:393
#: templates/insights/fragments/category_overview/index.html:422
msgid "Uncategorized"
msgstr "Sem categoria"
@@ -1285,7 +1297,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:46
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1300,26 +1312,47 @@ msgstr "Conteúdo"
msgid "Transaction Type"
msgstr "Tipo de Transação"
#: apps/transactions/filters.py:91
#: apps/transactions/filters.py:85
msgid "Date from"
msgstr "Data de"
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
msgid "Until"
msgstr "Até"
#: apps/transactions/filters.py:101
#: apps/transactions/filters.py:95
msgid "Reference date from"
msgstr "Data de Referência de"
#: apps/transactions/filters.py:111
#: apps/transactions/filters.py:105
msgid "Amount min"
msgstr "Quantia miníma"
#: apps/transactions/filters.py:116
#: apps/transactions/filters.py:110
msgid "Amount max"
msgstr "Quantia máxima"
#: apps/transactions/filters.py:188
msgid "Categorized"
msgstr "Categorizada"
#: apps/transactions/filters.py:195
msgid "Tagged"
msgstr "Com tag"
#: apps/transactions/filters.py:195
#: templates/insights/fragments/category_overview/index.html:181
msgid "Untagged"
msgstr "Sem tag"
#: apps/transactions/filters.py:201
msgid "Any entity"
msgstr "Qualquer entidade"
#: apps/transactions/filters.py:202
msgid "No entity"
msgstr "Sem entidade"
#: apps/transactions/forms.py:173
msgid "More"
msgstr "Mais"
@@ -1424,7 +1457,7 @@ msgstr "Entidade"
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.html:10
#: templates/insights/fragments/category_overview/index.html:64
#: templates/insights/fragments/category_overview/index.html:79
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Renda"
@@ -1436,7 +1469,7 @@ msgstr "Renda"
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19
#: templates/insights/fragments/category_overview/index.html:65
#: templates/insights/fragments/category_overview/index.html:80
msgid "Expense"
msgstr "Despesa"
@@ -1472,12 +1505,12 @@ msgstr "Sem categoria"
msgid "No description"
msgstr "Sem descrição"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr "Mensal"
@@ -1576,7 +1609,7 @@ msgid "Quick Transaction"
msgstr "Transação Rápida"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1668,11 +1701,11 @@ msgid "Installment Plan deleted successfully"
msgstr "Parcelamento apagado com sucesso"
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
msgid "Item added successfully"
msgstr "Item adicionado com sucesso"
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
msgid "Item updated successfully"
msgstr "Item atualizado com sucesso"
@@ -1787,24 +1820,26 @@ msgid "This account is deactivated"
msgstr "Essa conta está desativada"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr "Padrão"
#: apps/users/forms.py:95 apps/users/models.py:484
#: apps/users/forms.py:97 apps/users/models.py:484
msgid "Date Format"
msgstr "Formato de Data"
#: apps/users/forms.py:100 apps/users/models.py:489
#: apps/users/forms.py:102 apps/users/models.py:489
msgid "Datetime Format"
msgstr "Formato de Data e Hora"
#: apps/users/forms.py:106 apps/users/models.py:492
#: apps/users/forms.py:108 apps/users/models.py:492
msgid "Number Format"
msgstr "Formato de Número"
#: apps/users/forms.py:146
#: apps/users/forms.py:148
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1815,19 +1850,19 @@ msgstr ""
"são exibidos\n"
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
#: apps/users/forms.py:155
#: apps/users/forms.py:157
msgid "New Password"
msgstr "Nova senha"
#: apps/users/forms.py:158
#: apps/users/forms.py:160
msgid "Leave blank to keep the current password."
msgstr "Deixe em branco para usar a senha atual."
#: apps/users/forms.py:161
#: apps/users/forms.py:163
msgid "Confirm New Password"
msgstr "Confirmar nova senha"
#: apps/users/forms.py:173 apps/users/forms.py:334
#: apps/users/forms.py:175 apps/users/forms.py:336
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
@@ -1835,7 +1870,7 @@ msgstr ""
"Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em "
"vez de excluir usuários."
#: apps/users/forms.py:176 apps/users/forms.py:337
#: apps/users/forms.py:178 apps/users/forms.py:339
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
@@ -1843,37 +1878,37 @@ msgstr ""
"Designa que esse usuário tem todas as permissões sem atribuí-las "
"explicitamente."
#: apps/users/forms.py:247
#: apps/users/forms.py:249
msgid "This email address is already in use by another account."
msgstr "Esse endereço de e-mail já está sendo usado por outra conta."
#: apps/users/forms.py:255
#: apps/users/forms.py:257
msgid "The two password fields didn't match."
msgstr "Os dois campos de senha não coincidem."
#: apps/users/forms.py:257
#: apps/users/forms.py:259
msgid "Please confirm your new password."
msgstr "Confirme sua nova senha."
#: apps/users/forms.py:259
#: apps/users/forms.py:261
msgid "Please enter the new password first."
msgstr "Digite a nova senha primeiro."
#: apps/users/forms.py:279
#: apps/users/forms.py:281
msgid "You cannot deactivate your own account using this form."
msgstr "Não é possível desativar sua própria conta usando esse formulário."
#: apps/users/forms.py:292
#: apps/users/forms.py:294
msgid "Cannot remove status from the last superuser."
msgstr "Não é possível remover o status do último superusuário."
#: apps/users/forms.py:298
#: apps/users/forms.py:300
msgid "You cannot remove your own superuser status using this form."
msgstr ""
"Não é possível remover seu próprio status de superusuário usando esse "
"formulário."
#: apps/users/forms.py:395
#: apps/users/forms.py:397
msgid "A user with this email address already exists."
msgstr "Já existe um usuário com esse endereço de e-mail."
@@ -1898,7 +1933,7 @@ msgid "All Transactions"
msgstr "Todas as transações"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr "Calendário"
@@ -1993,7 +2028,7 @@ msgstr "Editar"
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:182
#: templates/cotton/transaction/item.html:192
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44
@@ -2020,7 +2055,7 @@ msgstr "Apagar"
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:186
#: templates/cotton/transaction/item.html:196
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48
@@ -2050,7 +2085,7 @@ msgstr "Tem certeza?"
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:187
#: templates/cotton/transaction/item.html:197
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49
@@ -2072,7 +2107,7 @@ msgstr "Você não será capaz de reverter isso!"
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:188
#: templates/cotton/transaction/item.html:198
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2153,7 +2188,15 @@ msgstr "Editar conta"
msgid "Is Asset"
msgstr "É ativo"
#: templates/accounts/fragments/list.html:87
#: templates/accounts/fragments/list.html:78
msgid "Track"
msgstr "Acompanhar"
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr "Parar de acompanhar"
#: templates/accounts/fragments/list.html:98
msgid "No accounts"
msgstr "Nenhuma conta"
@@ -2211,7 +2254,7 @@ msgid "Muted"
msgstr "Silenciada"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:429
#: templates/insights/fragments/category_overview/index.html:538
msgid "No categories"
msgstr "Nenhum categoria"
@@ -2220,13 +2263,14 @@ msgid "Pick a month"
msgstr "Escolha um mês"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr "Fechar"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr "Buscar"
@@ -2235,35 +2279,40 @@ msgid "Select"
msgstr "Selecionar"
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries"
msgstr "Mostrar nos sumários"
#: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr "Controlado pela conta"
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category"
msgstr "Controlado pela categoria"
#: templates/cotton/transaction/item.html:162
#: templates/cotton/transaction/item.html:172
msgid "Hide from summaries"
msgstr "Esconder dos sumários"
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:174
msgid "Add as quick transaction"
msgstr "Adicionar como transação rápida"
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:176
msgid "Move to previous month"
msgstr "Mover para o mês anterior"
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:177
msgid "Move to next month"
msgstr "Mover para o mês seguinte"
#: templates/cotton/transaction/item.html:168
#: templates/cotton/transaction/item.html:178
msgid "Move to today"
msgstr "Mover para hoje"
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:180
#: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate"
msgstr "Duplicar"
@@ -2444,7 +2493,7 @@ msgstr "Nenhuma entrada neste CMP"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr "Tente adicionar uma"
@@ -2547,7 +2596,7 @@ msgid "Edit exchange rate"
msgstr "Editar taxa de câmbio"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2571,7 +2620,7 @@ msgstr "Nenhuma taxa de câmbio"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr "Navegação por página"
@@ -2604,7 +2653,7 @@ msgid "No services configured"
msgstr "Nenhum serviço configurado"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr "Exportar e Restaurar"
@@ -2702,72 +2751,72 @@ msgstr "Alternar navegação"
msgid "Overview"
msgstr "Visão Geral"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr "Patrimônio"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:50
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
msgid "Current"
msgstr "Atual"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Insights"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr "Lixeira"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr "Ferramentas"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr "Rastreador de Custo Médio Ponderado"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Calculadora de preço unitário"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Conversor de Moeda"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr "Gerenciar"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr "Automação"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr "Admin"
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr "Só use isso se você souber o que está fazendo"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr "está disponível"
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr "Calculadora"
@@ -2843,7 +2892,7 @@ msgstr "Tabela"
msgid "Bars"
msgstr "Barras"
#: templates/insights/fragments/category_overview/index.html:38
#: templates/insights/fragments/category_overview/index.html:39
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
@@ -2851,20 +2900,24 @@ msgstr ""
"Os valores das transações associadas a várias tags serão contados uma vez "
"para cada tag"
#: templates/insights/fragments/category_overview/index.html:54
#: templates/insights/fragments/category_overview/index.html:52
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
"Os valores das transações associadas a várias tags e entidades serão "
"contados uma vez para cada tag"
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total"
msgstr "Total final"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/insights/fragments/category_overview/index.html:81
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr "Total"
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr "Sem tag"
#: templates/insights/fragments/category_overview/index.html:406
#: templates/insights/fragments/category_overview/index.html:515
msgid "Final Total"
msgstr "Total Final"
@@ -3072,26 +3125,30 @@ msgstr "Distribuição"
msgid "Summary"
msgstr "Resumo"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Filtrar transações"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Ordernar por"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Mais antigas primeiro"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Mais novas primeiro"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Filtrar transações"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Ordernar por"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3302,7 +3359,7 @@ msgstr "Editando"
msgid "transactions"
msgstr "transações"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr "Nenhuma transação encontrada"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
"PO-Revision-Date: 2025-04-14 06:16+0000\n"
"Last-Translator: Emil <emil.bjorkroth@gmail.com>\n"
"Language-Team: Swedish <https://translations.herculino.com/projects/wygiwyh/"
@@ -31,8 +31,8 @@ msgstr ""
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:377
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
#: apps/users/forms.py:379
msgid "Update"
msgstr "Uppdatera"
@@ -45,7 +45,7 @@ msgstr "Uppdatera"
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
#: apps/users/forms.py:223 apps/users/forms.py:385
#: apps/users/forms.py:225 apps/users/forms.py:387
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr ""
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:419
#: templates/insights/fragments/category_overview/index.html:78
#: templates/insights/fragments/category_overview/index.html:528
msgid "Category"
msgstr ""
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/rules/models.py:290 apps/transactions/filters.py:69
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
#: templates/insights/fragments/category_overview/index.html:35
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr ""
@@ -128,7 +128,7 @@ msgstr ""
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
msgid "Account Groups"
msgstr ""
@@ -168,7 +168,7 @@ msgstr ""
msgid "Archived accounts don't show up nor count towards your net worth"
msgstr ""
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -182,19 +182,19 @@ msgstr ""
msgid "Account"
msgstr ""
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr ""
#: apps/accounts/models.py:84
#: apps/accounts/models.py:93
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr ""
@@ -230,7 +230,7 @@ msgid "Account Group deleted successfully"
msgstr ""
#: apps/accounts/views/account_groups.py:135
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully"
@@ -255,6 +255,14 @@ msgstr ""
msgid "Account deleted successfully"
msgstr ""
#: apps/accounts/views/accounts.py:165
msgid "Account is now tracked"
msgstr ""
#: apps/accounts/views/accounts.py:168
msgid "Account is now untracked"
msgstr ""
#: apps/accounts/views/balance.py:77
msgid "Balance reconciliation"
msgstr ""
@@ -304,7 +312,7 @@ msgid "Shared with users"
msgstr ""
#: apps/common/fields/forms/dynamic_select.py:71
#: apps/common/fields/forms/dynamic_select.py:143
#: apps/common/fields/forms/dynamic_select.py:142
msgid "Error creating new instance"
msgstr ""
@@ -345,7 +353,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr ""
#: apps/common/forms.py:80 apps/users/forms.py:140
#: apps/common/forms.py:80 apps/users/forms.py:142
msgid "Save"
msgstr ""
@@ -440,12 +448,13 @@ msgstr ""
msgid "Info"
msgstr ""
#: apps/common/views.py:111
#: apps/common/views.py:118
msgid "Cache cleared successfully"
msgstr ""
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today"
msgstr ""
@@ -459,8 +468,10 @@ msgstr ""
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr ""
@@ -502,11 +513,11 @@ msgstr ""
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
msgid "Currencies"
msgstr ""
@@ -538,7 +549,7 @@ msgstr ""
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
msgid "Exchange Rates"
msgstr ""
@@ -546,27 +557,27 @@ msgstr ""
msgid "From and To currencies cannot be the same."
msgstr ""
#: apps/currencies/models.py:104
#: apps/currencies/models.py:105
msgid "On"
msgstr ""
#: apps/currencies/models.py:105
#: apps/currencies/models.py:106
msgid "Every X hours"
msgstr ""
#: apps/currencies/models.py:106
#: apps/currencies/models.py:107
msgid "Not on"
msgstr ""
#: apps/currencies/models.py:108
#: apps/currencies/models.py:109
msgid "Service Name"
msgstr ""
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "Service Type"
msgstr ""
#: apps/currencies/models.py:112 apps/transactions/models.py:214
#: apps/currencies/models.py:113 apps/transactions/models.py:214
#: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
@@ -575,77 +586,77 @@ msgstr ""
msgid "Active"
msgstr ""
#: apps/currencies/models.py:117
#: apps/currencies/models.py:118
msgid "API Key"
msgstr ""
#: apps/currencies/models.py:118
#: apps/currencies/models.py:119
msgid "API key for the service (if required)"
msgstr ""
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "Interval Type"
msgstr ""
#: apps/currencies/models.py:127
#: apps/currencies/models.py:128
msgid "Interval"
msgstr ""
#: apps/currencies/models.py:130
#: apps/currencies/models.py:131
msgid "Last Successful Fetch"
msgstr ""
#: apps/currencies/models.py:135
#: apps/currencies/models.py:136
msgid "Target Currencies"
msgstr ""
#: apps/currencies/models.py:137
#: apps/currencies/models.py:138
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:145
#: apps/currencies/models.py:146
msgid "Target Accounts"
msgstr ""
#: apps/currencies/models.py:147
#: apps/currencies/models.py:148
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:154
#: apps/currencies/models.py:155
msgid "Single exchange rate"
msgstr ""
#: apps/currencies/models.py:157
#: apps/currencies/models.py:158
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Exchange Rate Service"
msgstr ""
#: apps/currencies/models.py:163
#: apps/currencies/models.py:164
msgid "Exchange Rate Services"
msgstr ""
#: apps/currencies/models.py:215
#: apps/currencies/models.py:216
msgid "'Every X hours' interval type requires a positive integer."
msgstr ""
#: apps/currencies/models.py:224
#: apps/currencies/models.py:225
msgid "'Every X hours' interval must be between 1 and 24."
msgstr ""
#: apps/currencies/models.py:238
#: apps/currencies/models.py:239
msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')."
msgstr ""
#: apps/currencies/models.py:249
#: apps/currencies/models.py:250
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -802,15 +813,15 @@ msgid "Entry deleted successfully"
msgstr ""
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -818,28 +829,29 @@ msgid "Transactions"
msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr ""
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/rules/models.py:282 apps/transactions/filters.py:74
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -847,7 +859,7 @@ msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -856,12 +868,12 @@ msgstr ""
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr ""
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr ""
@@ -901,7 +913,7 @@ msgstr ""
msgid "Update or create transaction actions"
msgstr ""
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -931,7 +943,7 @@ msgstr ""
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr ""
@@ -1000,10 +1012,10 @@ msgid "Run deleted successfully"
msgstr ""
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:313
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
#: templates/insights/fragments/category_overview/index.html:88
#: templates/insights/fragments/category_overview/index.html:393
#: templates/insights/fragments/category_overview/index.html:422
msgid "Uncategorized"
msgstr ""
@@ -1261,7 +1273,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:46
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1276,26 +1288,47 @@ msgstr ""
msgid "Transaction Type"
msgstr ""
#: apps/transactions/filters.py:91
#: apps/transactions/filters.py:85
msgid "Date from"
msgstr ""
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
msgid "Until"
msgstr ""
#: apps/transactions/filters.py:101
#: apps/transactions/filters.py:95
msgid "Reference date from"
msgstr ""
#: apps/transactions/filters.py:111
#: apps/transactions/filters.py:105
msgid "Amount min"
msgstr ""
#: apps/transactions/filters.py:116
#: apps/transactions/filters.py:110
msgid "Amount max"
msgstr ""
#: apps/transactions/filters.py:188
msgid "Categorized"
msgstr ""
#: apps/transactions/filters.py:195
msgid "Tagged"
msgstr ""
#: apps/transactions/filters.py:195
#: templates/insights/fragments/category_overview/index.html:181
msgid "Untagged"
msgstr ""
#: apps/transactions/filters.py:201
msgid "Any entity"
msgstr ""
#: apps/transactions/filters.py:202
msgid "No entity"
msgstr ""
#: apps/transactions/forms.py:173
msgid "More"
msgstr ""
@@ -1395,7 +1428,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.html:10
#: templates/insights/fragments/category_overview/index.html:64
#: templates/insights/fragments/category_overview/index.html:79
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr ""
@@ -1407,7 +1440,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19
#: templates/insights/fragments/category_overview/index.html:65
#: templates/insights/fragments/category_overview/index.html:80
msgid "Expense"
msgstr ""
@@ -1443,12 +1476,12 @@ msgstr ""
msgid "No description"
msgstr ""
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr ""
@@ -1547,7 +1580,7 @@ msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1639,11 +1672,11 @@ msgid "Installment Plan deleted successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
msgid "Item added successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
msgid "Item updated successfully"
msgstr ""
@@ -1758,24 +1791,26 @@ msgid "This account is deactivated"
msgstr ""
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr ""
#: apps/users/forms.py:95 apps/users/models.py:484
#: apps/users/forms.py:97 apps/users/models.py:484
msgid "Date Format"
msgstr ""
#: apps/users/forms.py:100 apps/users/models.py:489
#: apps/users/forms.py:102 apps/users/models.py:489
msgid "Datetime Format"
msgstr ""
#: apps/users/forms.py:106 apps/users/models.py:492
#: apps/users/forms.py:108 apps/users/models.py:492
msgid "Number Format"
msgstr ""
#: apps/users/forms.py:146
#: apps/users/forms.py:148
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1783,59 +1818,59 @@ msgid ""
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr ""
#: apps/users/forms.py:155
#: apps/users/forms.py:157
msgid "New Password"
msgstr ""
#: apps/users/forms.py:158
#: apps/users/forms.py:160
msgid "Leave blank to keep the current password."
msgstr ""
#: apps/users/forms.py:161
#: apps/users/forms.py:163
msgid "Confirm New Password"
msgstr ""
#: apps/users/forms.py:173 apps/users/forms.py:334
#: apps/users/forms.py:175 apps/users/forms.py:336
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
#: apps/users/forms.py:176 apps/users/forms.py:337
#: apps/users/forms.py:178 apps/users/forms.py:339
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
#: apps/users/forms.py:247
#: apps/users/forms.py:249
msgid "This email address is already in use by another account."
msgstr ""
#: apps/users/forms.py:255
#: apps/users/forms.py:257
msgid "The two password fields didn't match."
msgstr ""
#: apps/users/forms.py:257
#: apps/users/forms.py:259
msgid "Please confirm your new password."
msgstr ""
#: apps/users/forms.py:259
#: apps/users/forms.py:261
msgid "Please enter the new password first."
msgstr ""
#: apps/users/forms.py:279
#: apps/users/forms.py:281
msgid "You cannot deactivate your own account using this form."
msgstr ""
#: apps/users/forms.py:292
#: apps/users/forms.py:294
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:298
#: apps/users/forms.py:300
msgid "You cannot remove your own superuser status using this form."
msgstr ""
#: apps/users/forms.py:395
#: apps/users/forms.py:397
msgid "A user with this email address already exists."
msgstr ""
@@ -1860,7 +1895,7 @@ msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr ""
@@ -1955,7 +1990,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:182
#: templates/cotton/transaction/item.html:192
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44
@@ -1982,7 +2017,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:186
#: templates/cotton/transaction/item.html:196
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48
@@ -2012,7 +2047,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:187
#: templates/cotton/transaction/item.html:197
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49
@@ -2034,7 +2069,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:188
#: templates/cotton/transaction/item.html:198
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2115,7 +2150,15 @@ msgstr ""
msgid "Is Asset"
msgstr ""
#: templates/accounts/fragments/list.html:87
#: templates/accounts/fragments/list.html:78
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts"
msgstr ""
@@ -2173,7 +2216,7 @@ msgid "Muted"
msgstr ""
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:429
#: templates/insights/fragments/category_overview/index.html:538
msgid "No categories"
msgstr ""
@@ -2182,13 +2225,14 @@ msgid "Pick a month"
msgstr ""
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr ""
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr ""
@@ -2197,35 +2241,40 @@ msgid "Select"
msgstr ""
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr ""
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category"
msgstr ""
#: templates/cotton/transaction/item.html:162
#: templates/cotton/transaction/item.html:172
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:174
msgid "Add as quick transaction"
msgstr ""
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:176
msgid "Move to previous month"
msgstr ""
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:177
msgid "Move to next month"
msgstr ""
#: templates/cotton/transaction/item.html:168
#: templates/cotton/transaction/item.html:178
msgid "Move to today"
msgstr ""
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:180
#: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate"
msgstr ""
@@ -2406,7 +2455,7 @@ msgstr ""
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr ""
@@ -2508,7 +2557,7 @@ msgid "Edit exchange rate"
msgstr ""
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2532,7 +2581,7 @@ msgstr ""
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr ""
@@ -2565,7 +2614,7 @@ msgid "No services configured"
msgstr ""
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr ""
@@ -2661,72 +2710,72 @@ msgstr ""
msgid "Overview"
msgstr ""
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr ""
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:50
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
msgid "Current"
msgstr ""
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr ""
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr ""
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr ""
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr ""
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr ""
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr ""
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr ""
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr ""
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr ""
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr ""
@@ -2800,26 +2849,28 @@ msgstr ""
msgid "Bars"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:38
#: templates/insights/fragments/category_overview/index.html:39
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:54
#: templates/insights/fragments/category_overview/index.html:52
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:66
#: templates/insights/fragments/category_overview/index.html:81
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:406
#: templates/insights/fragments/category_overview/index.html:515
msgid "Final Total"
msgstr ""
@@ -3024,26 +3075,30 @@ msgstr ""
msgid "Summary"
msgstr ""
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr ""
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3251,7 +3306,7 @@ msgstr ""
msgid "transactions"
msgstr ""
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr ""

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
"PO-Revision-Date: 2025-05-12 14:16+0000\n"
"Last-Translator: Felix <xnovaua@gmail.com>\n"
"Language-Team: Ukrainian <https://translations.herculino.com/projects/"
@@ -32,8 +32,8 @@ msgstr "Назва групи"
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:377
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
#: apps/users/forms.py:379
msgid "Update"
msgstr "Оновлення"
@@ -46,7 +46,7 @@ msgstr "Оновлення"
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
#: apps/users/forms.py:223 apps/users/forms.py:385
#: apps/users/forms.py:225 apps/users/forms.py:387
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -83,22 +83,22 @@ msgstr "Новий баланс"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:419
#: templates/insights/fragments/category_overview/index.html:78
#: templates/insights/fragments/category_overview/index.html:528
msgid "Category"
msgstr "Категорія"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/rules/models.py:290 apps/transactions/filters.py:69
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
#: templates/insights/fragments/category_overview/index.html:35
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Мітки"
@@ -129,7 +129,7 @@ msgstr "Група рахунків"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
msgid "Account Groups"
msgstr "Групи рахунків"
@@ -172,7 +172,7 @@ msgstr ""
"Заархівовані рахунки не відображаються і не враховуються у вашій чистій "
"вартості"
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -186,19 +186,19 @@ msgstr ""
msgid "Account"
msgstr "Рахунок"
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Рахунки"
#: apps/accounts/models.py:84
#: apps/accounts/models.py:93
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "Валюта обміну не може збігатися з основною валютою рахунку."
@@ -234,7 +234,7 @@ msgid "Account Group deleted successfully"
msgstr "Групу рахунків успішно видалено"
#: apps/accounts/views/account_groups.py:135
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully"
@@ -259,6 +259,14 @@ msgstr "Рахунок успішно оновлено"
msgid "Account deleted successfully"
msgstr "Рахунок успішно видалено"
#: apps/accounts/views/accounts.py:165
msgid "Account is now tracked"
msgstr ""
#: apps/accounts/views/accounts.py:168
msgid "Account is now untracked"
msgstr ""
#: apps/accounts/views/balance.py:77
msgid "Balance reconciliation"
msgstr "Звірка балансу"
@@ -310,7 +318,7 @@ msgid "Shared with users"
msgstr "Поділитися з користувачами"
#: apps/common/fields/forms/dynamic_select.py:71
#: apps/common/fields/forms/dynamic_select.py:143
#: apps/common/fields/forms/dynamic_select.py:142
msgid "Error creating new instance"
msgstr "Помилка створення нового екземпляра"
@@ -356,7 +364,7 @@ msgstr ""
"доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх "
"користувачів. Редагувати може лише власник."
#: apps/common/forms.py:80 apps/users/forms.py:140
#: apps/common/forms.py:80 apps/users/forms.py:142
msgid "Save"
msgstr "Зберегти"
@@ -455,12 +463,13 @@ msgstr "Помилка"
msgid "Info"
msgstr "Info"
#: apps/common/views.py:111
#: apps/common/views.py:118
msgid "Cache cleared successfully"
msgstr "Кеш успішно очищено"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today"
msgstr "Сьогодні"
@@ -474,8 +483,10 @@ msgstr "Видалити"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Чисто"
@@ -517,11 +528,11 @@ msgstr "Десяткові знаки"
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
msgid "Currencies"
msgstr "Валюти"
@@ -553,7 +564,7 @@ msgstr ""
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
msgid "Exchange Rates"
msgstr "Обмінні курси"
@@ -561,27 +572,27 @@ msgstr "Обмінні курси"
msgid "From and To currencies cannot be the same."
msgstr "Валюти «Від» і «До» не можуть бути однаковими."
#: apps/currencies/models.py:104
#: apps/currencies/models.py:105
msgid "On"
msgstr "On"
#: apps/currencies/models.py:105
#: apps/currencies/models.py:106
msgid "Every X hours"
msgstr "Кожні Х годин"
#: apps/currencies/models.py:106
#: apps/currencies/models.py:107
msgid "Not on"
msgstr "Not on"
#: apps/currencies/models.py:108
#: apps/currencies/models.py:109
msgid "Service Name"
msgstr "Назва сервісу"
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "Service Type"
msgstr "Тип сервісу"
#: apps/currencies/models.py:112 apps/transactions/models.py:214
#: apps/currencies/models.py:113 apps/transactions/models.py:214
#: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
@@ -590,79 +601,79 @@ msgstr "Тип сервісу"
msgid "Active"
msgstr "Активний"
#: apps/currencies/models.py:117
#: apps/currencies/models.py:118
msgid "API Key"
msgstr "Ключ API"
#: apps/currencies/models.py:118
#: apps/currencies/models.py:119
msgid "API key for the service (if required)"
msgstr "API-ключ для сервісу (якщо потрібно)"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "Interval Type"
msgstr "Тип інтервалу"
#: apps/currencies/models.py:127
#: apps/currencies/models.py:128
msgid "Interval"
msgstr "Інтервал"
#: apps/currencies/models.py:130
#: apps/currencies/models.py:131
msgid "Last Successful Fetch"
msgstr "Остання успішна вибірка"
#: apps/currencies/models.py:135
#: apps/currencies/models.py:136
msgid "Target Currencies"
msgstr ""
#: apps/currencies/models.py:137
#: apps/currencies/models.py:138
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:145
#: apps/currencies/models.py:146
msgid "Target Accounts"
msgstr ""
#: apps/currencies/models.py:147
#: apps/currencies/models.py:148
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:154
#: apps/currencies/models.py:155
#, fuzzy
#| msgid "Exchange Rate"
msgid "Single exchange rate"
msgstr "Обмінний курс"
#: apps/currencies/models.py:157
#: apps/currencies/models.py:158
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Exchange Rate Service"
msgstr ""
#: apps/currencies/models.py:163
#: apps/currencies/models.py:164
msgid "Exchange Rate Services"
msgstr ""
#: apps/currencies/models.py:215
#: apps/currencies/models.py:216
msgid "'Every X hours' interval type requires a positive integer."
msgstr ""
#: apps/currencies/models.py:224
#: apps/currencies/models.py:225
msgid "'Every X hours' interval must be between 1 and 24."
msgstr ""
#: apps/currencies/models.py:238
#: apps/currencies/models.py:239
msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')."
msgstr ""
#: apps/currencies/models.py:249
#: apps/currencies/models.py:250
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -819,15 +830,15 @@ msgid "Entry deleted successfully"
msgstr ""
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -835,28 +846,29 @@ msgid "Transactions"
msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr ""
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/rules/models.py:282 apps/transactions/filters.py:74
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -864,7 +876,7 @@ msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -873,12 +885,12 @@ msgstr ""
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr ""
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr ""
@@ -918,7 +930,7 @@ msgstr ""
msgid "Update or create transaction actions"
msgstr ""
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -948,7 +960,7 @@ msgstr ""
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr ""
@@ -1017,10 +1029,10 @@ msgid "Run deleted successfully"
msgstr ""
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:313
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
#: templates/insights/fragments/category_overview/index.html:88
#: templates/insights/fragments/category_overview/index.html:393
#: templates/insights/fragments/category_overview/index.html:422
msgid "Uncategorized"
msgstr ""
@@ -1278,7 +1290,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:46
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1293,26 +1305,49 @@ msgstr ""
msgid "Transaction Type"
msgstr ""
#: apps/transactions/filters.py:91
#: apps/transactions/filters.py:85
msgid "Date from"
msgstr ""
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
msgid "Until"
msgstr ""
#: apps/transactions/filters.py:101
#: apps/transactions/filters.py:95
msgid "Reference date from"
msgstr ""
#: apps/transactions/filters.py:111
#: apps/transactions/filters.py:105
msgid "Amount min"
msgstr ""
#: apps/transactions/filters.py:116
#: apps/transactions/filters.py:110
msgid "Amount max"
msgstr ""
#: apps/transactions/filters.py:188
#, fuzzy
#| msgid "Category"
msgid "Categorized"
msgstr "Категорія"
#: apps/transactions/filters.py:195
msgid "Tagged"
msgstr ""
#: apps/transactions/filters.py:195
#: templates/insights/fragments/category_overview/index.html:181
msgid "Untagged"
msgstr ""
#: apps/transactions/filters.py:201
msgid "Any entity"
msgstr ""
#: apps/transactions/filters.py:202
msgid "No entity"
msgstr ""
#: apps/transactions/forms.py:173
msgid "More"
msgstr ""
@@ -1412,7 +1447,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.html:10
#: templates/insights/fragments/category_overview/index.html:64
#: templates/insights/fragments/category_overview/index.html:79
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr ""
@@ -1424,7 +1459,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19
#: templates/insights/fragments/category_overview/index.html:65
#: templates/insights/fragments/category_overview/index.html:80
msgid "Expense"
msgstr ""
@@ -1460,12 +1495,12 @@ msgstr ""
msgid "No description"
msgstr ""
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr ""
@@ -1564,7 +1599,7 @@ msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1656,11 +1691,11 @@ msgid "Installment Plan deleted successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
msgid "Item added successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
msgid "Item updated successfully"
msgstr ""
@@ -1777,24 +1812,26 @@ msgid "This account is deactivated"
msgstr ""
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr ""
#: apps/users/forms.py:95 apps/users/models.py:484
#: apps/users/forms.py:97 apps/users/models.py:484
msgid "Date Format"
msgstr ""
#: apps/users/forms.py:100 apps/users/models.py:489
#: apps/users/forms.py:102 apps/users/models.py:489
msgid "Datetime Format"
msgstr ""
#: apps/users/forms.py:106 apps/users/models.py:492
#: apps/users/forms.py:108 apps/users/models.py:492
msgid "Number Format"
msgstr ""
#: apps/users/forms.py:146
#: apps/users/forms.py:148
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1802,59 +1839,59 @@ msgid ""
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr ""
#: apps/users/forms.py:155
#: apps/users/forms.py:157
msgid "New Password"
msgstr ""
#: apps/users/forms.py:158
#: apps/users/forms.py:160
msgid "Leave blank to keep the current password."
msgstr ""
#: apps/users/forms.py:161
#: apps/users/forms.py:163
msgid "Confirm New Password"
msgstr ""
#: apps/users/forms.py:173 apps/users/forms.py:334
#: apps/users/forms.py:175 apps/users/forms.py:336
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
#: apps/users/forms.py:176 apps/users/forms.py:337
#: apps/users/forms.py:178 apps/users/forms.py:339
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
#: apps/users/forms.py:247
#: apps/users/forms.py:249
msgid "This email address is already in use by another account."
msgstr ""
#: apps/users/forms.py:255
#: apps/users/forms.py:257
msgid "The two password fields didn't match."
msgstr ""
#: apps/users/forms.py:257
#: apps/users/forms.py:259
msgid "Please confirm your new password."
msgstr ""
#: apps/users/forms.py:259
#: apps/users/forms.py:261
msgid "Please enter the new password first."
msgstr ""
#: apps/users/forms.py:279
#: apps/users/forms.py:281
msgid "You cannot deactivate your own account using this form."
msgstr ""
#: apps/users/forms.py:292
#: apps/users/forms.py:294
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:298
#: apps/users/forms.py:300
msgid "You cannot remove your own superuser status using this form."
msgstr ""
#: apps/users/forms.py:395
#: apps/users/forms.py:397
msgid "A user with this email address already exists."
msgstr ""
@@ -1879,7 +1916,7 @@ msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr ""
@@ -1974,7 +2011,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:182
#: templates/cotton/transaction/item.html:192
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44
@@ -2001,7 +2038,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:186
#: templates/cotton/transaction/item.html:196
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48
@@ -2031,7 +2068,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:187
#: templates/cotton/transaction/item.html:197
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49
@@ -2053,7 +2090,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:188
#: templates/cotton/transaction/item.html:198
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2134,7 +2171,15 @@ msgstr ""
msgid "Is Asset"
msgstr ""
#: templates/accounts/fragments/list.html:87
#: templates/accounts/fragments/list.html:78
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts"
msgstr ""
@@ -2192,7 +2237,7 @@ msgid "Muted"
msgstr ""
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:429
#: templates/insights/fragments/category_overview/index.html:538
msgid "No categories"
msgstr ""
@@ -2201,13 +2246,14 @@ msgid "Pick a month"
msgstr ""
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr ""
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr ""
@@ -2216,35 +2262,40 @@ msgid "Select"
msgstr ""
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr ""
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category"
msgstr ""
#: templates/cotton/transaction/item.html:162
#: templates/cotton/transaction/item.html:172
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
#: templates/cotton/transaction/item.html:174
msgid "Add as quick transaction"
msgstr ""
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:176
msgid "Move to previous month"
msgstr ""
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:177
msgid "Move to next month"
msgstr ""
#: templates/cotton/transaction/item.html:168
#: templates/cotton/transaction/item.html:178
msgid "Move to today"
msgstr ""
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:180
#: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate"
msgstr ""
@@ -2425,7 +2476,7 @@ msgstr ""
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr ""
@@ -2527,7 +2578,7 @@ msgid "Edit exchange rate"
msgstr ""
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2551,7 +2602,7 @@ msgstr ""
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr ""
@@ -2584,7 +2635,7 @@ msgid "No services configured"
msgstr ""
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr ""
@@ -2680,72 +2731,72 @@ msgstr ""
msgid "Overview"
msgstr ""
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr ""
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:50
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
msgid "Current"
msgstr ""
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr ""
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr ""
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr ""
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr ""
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr ""
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr ""
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr ""
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr ""
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr ""
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr ""
@@ -2819,26 +2870,28 @@ msgstr ""
msgid "Bars"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:38
#: templates/insights/fragments/category_overview/index.html:39
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:54
#: templates/insights/fragments/category_overview/index.html:52
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:66
#: templates/insights/fragments/category_overview/index.html:81
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:406
#: templates/insights/fragments/category_overview/index.html:515
msgid "Final Total"
msgstr ""
@@ -3043,26 +3096,30 @@ msgstr ""
msgid "Summary"
msgstr ""
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr ""
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3270,7 +3327,7 @@ msgstr ""
msgid "transactions"
msgstr ""
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr ""

View File

@@ -5,47 +5,51 @@
{% block title %}{% translate 'Pick a month' %}{% endblock %}
{% block body %}
{% regroup month_year_data by year as years_list %}
{% regroup month_year_data by year as years_list %}
<ul class="nav nav-pills nav-fill" id="yearTabs" role="tablist">
{% for x in years_list %}
<li class="nav-item" role="presentation">
<button class="nav-link{% if x.grouper == current_year %} active{% endif %}"
id="{{ x.grouper }}"
data-bs-toggle="tab"
data-bs-target="#{{ x.grouper }}-pane"
type="button"
role="tab"
aria-controls="{{ x.grouper }}-pane"
aria-selected="{% if x.grouper == current_year %}true{% else %}false{% endif %}">
{{ x.grouper }}
</button>
</li>
{% endfor %}
</ul>
<div class="tab-content" id="yearTabsContent" hx-boost="true">
{% for x in years_list %}
<div class="tab-pane fade{% if x.grouper == current_year %} show active{% endif %} mt-2"
id="{{ x.grouper }}-pane"
role="tabpanel"
aria-labelledby="{{ x.grouper }}"
tabindex="0">
<ul class="list-group list-group-flush" id="month-year-list">
{% for month_data in x.list %}
<li class="list-group-item tw:hover:bg-zinc-900
{% if month_data.month == current_month and month_data.year == current_year %} disabled bg-primary{% endif %}"
{% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}>
<div class="d-flex justify-content-between">
<a class="text-decoration-none stretched-link {% if month_data.month == current_month and month_data.year == current_year %} text-black{% endif %}"
href={{ month_data.url }}>
{{ month_data.month|month_name }}</a>
<span class="badge text-bg-secondary">{{ month_data.transaction_count }}</span>
</div>
<ul class="nav nav-pills nav-fill" id="yearTabs" role="tablist">
{% for x in years_list %}
<li class="nav-item" role="presentation">
<button class="nav-link{% if x.grouper == current_year %} active{% endif %}"
id="{{ x.grouper }}"
data-bs-toggle="tab"
data-bs-target="#{{ x.grouper }}-pane"
type="button"
role="tab"
aria-controls="{{ x.grouper }}-pane"
aria-selected="{% if x.grouper == current_year %}true{% else %}false{% endif %}">
{{ x.grouper }}
</button>
</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
<div class="tab-content" id="yearTabsContent" hx-boost="true">
{% for x in years_list %}
<div class="tab-pane fade{% if x.grouper == current_year %} show active{% endif %} mt-2"
id="{{ x.grouper }}-pane"
role="tabpanel"
aria-labelledby="{{ x.grouper }}"
tabindex="0">
<ul class="list-group list-group-flush" id="month-year-list">
{% for month_data in x.list %}
<li class="list-group-item tw:hover:bg-zinc-900
{% if month_data.month == current_month and month_data.year == current_year %} disabled bg-primary{% endif %}"
{% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}>
<div class="d-flex justify-content-between">
<a class="text-decoration-none stretched-link {% if month_data.month == current_month and month_data.year == current_year %} text-black{% endif %}"
href={{ month_data.url }}>
{{ month_data.month|month_name }}</a>
<span class="badge text-bg-secondary">{{ month_data.transaction_count }}</span>
</div>
</li>
{% endfor %}
</ul>
</div>
{% endfor %}
</div>
<hr>
<div class="w-full text-end">
<a class="btn btn-outline-primary btn-sm" href="{{ today_url }}" role="button" hx-boost="true">{% trans 'Today' %}</a>
</div>
{% endfor %}
</div>
{% endblock %}

View File

@@ -0,0 +1,3 @@
{#This is here so we can add dynamic Tailwind classes that will be required via JS/hyperscript but Tailwind has no knowledge of#}
<div class="tw:lg:w-[15vw]"></div>
<div class="tw:lg:ml-[16vw]"></div>

View File

@@ -1,6 +1,6 @@
<li>
<div class="d-flex align-items-center">
<span class="text-muted small fw-bold text-uppercase tw:lg:hidden tw:lg:group-hover:inline me-2">{{ title }}</span>
<span class="sidebar-menu-header text-muted small fw-bold text-uppercase me-2">{{ title }}</span>
<hr class="flex-grow-1"/>
</div>
</li>

View File

@@ -1,7 +1,7 @@
{% load active_link %}
<li>
<a href="{% url url %}"
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
class="tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
{% if tooltip %}
data-bs-placement="right"
data-bs-toggle="tooltip"
@@ -9,6 +9,6 @@
{% endif %}>
<i class="{{ icon }} fa-fw"></i>
<span
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
</a>
</li>

View File

@@ -2,7 +2,7 @@
<li>
<a href="{{ url }}"
hx-boost="false"
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
class="tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
{% if tooltip %}
data-bs-placement="right"
data-bs-toggle="tooltip"
@@ -11,6 +11,6 @@
<i class="{{ icon }} fa-fw"></i>
<span
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
</a>
</li>

View File

@@ -6,7 +6,7 @@
{% block body %}
<div class="container p-3">
<form method="post" action="{% url 'export_form' %}" id="export-form" class="show-loading px-1" _="on submit trigger hide_offcanvas" target="_blank">
<form hx-post="{% url 'export_form' %}" hx-ext="htmx-download" hx-swap="none" id="export-form" class="show-loading px-1" target="_blank">
{% crispy form %}
</form>
</div>

View File

@@ -11,7 +11,7 @@ init
end
on htmx:afterSettle
call initTooltips(event.detail.target)
call initTooltips(body)
end
on tooltips

View File

@@ -5,31 +5,56 @@
{% load static %}
<div
class="tw:group tw:lg:w-16 tw:lg:hover:w-112 tw:transition-all tw:duration-100 tw:fixed tw:top-0 tw:start-0 tw:h-full tw:z-1020">
class="sidebar {% if request.session.sidebar_status == 'floating' %}tw:group sidebar-floating{% elif request.session.sidebar_status == 'fixed' %}sidebar-fixed{% else %}tw:group sidebar-floating{% endif %}"
id="sidebar-container">
<nav
id="sidebar"
hx-boost="true"
data-bs-scroll="true"
class="offcanvas-lg offcanvas-start d-lg-flex flex-column position-fixed top-0 start-0 h-100 bg-body-tertiary shadow-sm tw:z-1020 tw:lg:w-16 tw:lg:group-hover:w-104 tw:transition-all tw:duration-100 tw:overflow-hidden">
<div
class="tw:hidden tw:lg:group-hover:block tw:absolute tw:top-0 tw:left-104 tw:w-8 tw:h-full tw:bg-transparent tw:pointer-events-auto tw:z-10"></div>
class="offcanvas-lg offcanvas-start d-lg-flex flex-column position-fixed top-0 start-0 h-100 bg-body-tertiary shadow-sm tw:z-1020">
<a href="{% url 'index' %}" class="d-none d-lg-flex tw:justify-start p-3 text-decoration-none">
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
<span class="fs-4 fw-bold ms-3 tw:lg:invisible tw:lg:group-hover:visible">WYGIWYH</span>
</a>
{# <div>#}
{# <a href="{% url 'index' %}" class="d-none d-lg-flex tw:justify-start p-3 text-decoration-none sidebar-title">#}
{# <img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>#}
{# <span class="fs-4 fw-bold ms-3">WYGIWYH</span>#}
{# </a>#}
{##}
{##}
{# </div>#}
<div class="d-none d-lg-flex tw:justify-between tw:items-center tw:border-b tw:border-gray-600 tw:lg:flex">
<a href="{% url 'index' %}" class="m-0 d-none d-lg-flex tw:justify-start p-3 text-decoration-none sidebar-title">
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
<span class="fs-4 fw-bold ms-3">WYGIWYH</span>
</a>
<button
id="sidebar-toggle-btn"
class="text-secondary-emphasis tw:rounded-full tw:w-12 tw:h-12 tw:flex tw:items-center tw:justify-center tw:transition-all tw:duration-300"
hx-get="{% url 'toggle_sidebar_status' %}"
_="on click
toggle .sidebar-floating on #sidebar-container
toggle .tw\:group on #sidebar-container
toggle .sidebar-fixed on #sidebar-container
end
"
>
<i class="fa-solid fa-thumbtack fa-sm"></i>
<i class="fa-solid fa-thumbtack-slash fa-sm"></i>
</button>
</div>
<div class="offcanvas-header">
<a href="{% url 'index' %}" class="offcanvas-title d-flex tw:justify-start text-decoration-none">
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
<span class="fs-4 fw-bold ms-3 tw:lg:invisible tw:lg:group-hover:visible">WYGIWYH</span>
<span class="fs-4 fw-bold ms-3">WYGIWYH</span>
</a>
<button type="button" class="btn-close" data-bs-target="#sidebar" data-bs-dismiss="offcanvas"
aria-label={% translate 'Close' %}></button>
</div>
<hr class="m-0">
<ul class="list-unstyled p-3 d-flex flex-column gap-0 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
<ul class="list-unstyled p-3 d-flex flex-column gap-0 tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
style="animation-duration: 100ms">
<c-components.sidebar-menu-item
@@ -127,10 +152,10 @@
data-bs-target="#collapsible-panel"
aria-expanded="false"
aria-controls="collapsible-panel"
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' css_class="sidebar-active" %}">
class="sidebar-menu-item tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' css_class="sidebar-active" %}">
<i class="fa-solid fa-toolbox fa-fw"></i>
<span
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">
{% translate 'Management' %}
</span>
</div>
@@ -138,16 +163,15 @@
<div class="mt-auto p-2 w-100">
<div id="collapsible-panel"
class="p-0 collapse tw:absolute tw:bottom-0 tw:left-0 tw:w-full tw:z-30 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:max-h-dvh">
<div class="tw:h-dvh tw:backdrop-blur-3xl">
<!-- Header -->
class="p-0 collapse tw:absolute tw:bottom-0 tw:left-0 tw:w-full tw:z-30 tw:max-h-dvh">
<div class="tw:h-dvh tw:backdrop-blur-3xl tw:flex tw:flex-col">
<div
class="tw:flex tw:justify-between tw:items-center tw:p-4 tw:border-b tw:border-gray-600 tw:lg:hidden tw:lg:group-hover:flex">
<h5 class="tw:text-lg tw:font-semibold tw:text-gray-800 tw:lg:invisible tw:lg:group-hover:visible">
class="tw:justify-between tw:items-center tw:p-4 tw:border-b tw:border-gray-600 sidebar-submenu-header">
<h5 class="tw:text-lg tw:font-semibold tw:text-gray-800 m-0">
{% trans 'Management' %}
</h5>
<button type="button" class="btn-close tw:lg:hidden tw:lg:group-hover:inline" aria-label="Close"
<button type="button" class="btn-close" aria-label="Close"
data-bs-toggle="collapse"
data-bs-target="#collapsible-panel"
aria-expanded="true"
@@ -155,7 +179,7 @@
</button>
</div>
<ul class="list-unstyled p-3 d-flex flex-column gap-1 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
<ul class="list-unstyled p-3 d-flex flex-column gap-1 tw:lg:group-hover:animate-[disable-pointer-events] tw:flex-1"
style="animation-duration: 100ms">
<c-components.sidebar-menu-header title="{% translate 'Transactions' %}"></c-components.sidebar-menu-header>
<c-components.sidebar-menu-item
@@ -261,7 +285,7 @@
</div>
{% endif %}
<div class="btn-group w-100" role="group">
<div class="btn-group w-100 sidebar-item" role="group">
<button type="button" class="btn btn-secondary btn-sm" data-bs-toggle="tooltip"
data-bs-title="{% trans "Calculator" %}"
_="on click trigger show on #calculator">
@@ -273,17 +297,24 @@
<div>
<hr class="my-1">
<div
class="ps-4 pe-2 py-2 d-flex align-items-center text-body-secondary text-decoration-none justify-content-between tw:text-wrap tw:lg:text-nowrap">
<div>
<i class="fa-solid fa-circle-user"></i>
<strong class="ms-2 tw:lg:invisible tw:lg:group-hover:visible">{{ user.email }}</strong>
class="ps-4 pe-2 py-2 d-flex align-items-center text-decoration-none justify-content-between">
<div class="d-flex align-items-center" style="min-width: 0;">
<i class="fa-solid fa-circle-user text-body-secondary"></i>
<strong class="mx-2 text-body-secondary text-truncate sidebar-invisible">
{{ user.email }}
</strong>
</div>
<div class="tw:lg:invisible tw:lg:group-hover:visible">
<div class="sidebar-invisible">
{% include 'includes/navbar/user_menu.html' %}
</div>
</div>
</div>
</nav>
<div
class="tw:hidden tw:lg:group-hover:block tw:absolute tw:top-0 tw:left-104 tw:w-16 tw:h-full tw:bg-transparent"></div>
</div>

View File

@@ -1,7 +1,7 @@
{% load i18n %}
<div hx-get="{% url 'category_overview' %}" hx-trigger="updated from:window" class="show-loading" hx-swap="outerHTML"
hx-include="#picker-form, #picker-type, #view-type, #show-tags, #showing">
hx-include="#picker-form, #picker-type, #view-type, #show-tags, #showing, #show-entities">
<div class="h-100 text-center mb-4">
<div class="btn-group gap-3" role="group" id="view-type" _="on change trigger updated">
<input type="radio" class="btn-check"
@@ -25,19 +25,34 @@
</div>
</div>
<div class="mt-3 mb-1 d-flex flex-column flex-md-row justify-content-between">
<div class="form-check form-switch" id="show-tags">
<div class="d-flex gap-4">
{% if view_type == 'table' %}
<input type="hidden" name="show_tags" value="off">
<input class="form-check-input" type="checkbox" role="switch" id="show-tags-switch" name="show_tags"
_="on change trigger updated" {% if show_tags %}checked{% endif %}>
{% spaceless %}
<label class="form-check-label" for="show-tags-switch">
{% trans 'Tags' %}
</label>
<c-ui.help-icon
content="{% trans 'Transaction amounts associated with multiple tags will be counted once for each tag' %}"
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
{% endspaceless %}
<div class="form-check form-switch" id="show-tags">
<input type="hidden" name="show_tags" value="off">
<input class="form-check-input" type="checkbox" role="switch" id="show-tags-switch" name="show_tags"
_="on change trigger updated" {% if show_tags %}checked{% endif %}>
{% spaceless %}
<label class="form-check-label" for="show-tags-switch">
{% trans 'Tags' %}
</label>
<c-ui.help-icon
content="{% trans 'Transaction amounts associated with multiple tags will be counted once for each tag' %}"
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
{% endspaceless %}
</div>
<div class="form-check form-switch" id="show-entities" {% if not show_tags %}style="display: none;"{% endif %}>
<input type="hidden" name="show_entities" value="off">
<input class="form-check-input" type="checkbox" role="switch" id="show-entities-switch" name="show_entities"
_="on change trigger updated" {% if show_entities %}checked{% endif %}>
{% spaceless %}
<label class="form-check-label" for="show-entities-switch">
{% trans 'Entities' %}
</label>
<c-ui.help-icon
content="{% trans 'Transaction amounts associated with multiple tags and entities will be counted once for each tag' %}"
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
{% endspaceless %}
</div>
{% endif %}
</div>
<div class="btn-group btn-group-sm" role="group" id="showing" _="on change trigger updated">
@@ -250,6 +265,100 @@
{% endfor %}
</td>
</tr>
<!-- Entity rows -->
{% if show_entities %}
{% for entity_id, entity in tag.entities.items %}
<tr class="table-row-nested-2">
<td class="ps-5">
<i class="fa-solid fa-user-group fa-fw me-2 text-muted"></i>{{ entity.name }}
</td>
<td>
{% for currency in entity.currencies.values %}
{% if showing == 'current' and currency.income_current != 0 %}
<c-amount.display
:amount="currency.income_current"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="green"></c-amount.display>
{% elif showing == 'projected' and currency.income_projected != 0 %}
<c-amount.display
:amount="currency.income_projected"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="green"></c-amount.display>
{% elif showing == 'final' and currency.total_income != 0 %}
<c-amount.display
:amount="currency.total_income"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="green"></c-amount.display>
{% else %}
<div>-</div>
{% endif %}
{% endfor %}
</td>
<td>
{% for currency in entity.currencies.values %}
{% if showing == 'current' and currency.expense_current != 0 %}
<c-amount.display
:amount="currency.expense_current"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="red"></c-amount.display>
{% elif showing == 'projected' and currency.expense_projected != 0 %}
<c-amount.display
:amount="currency.expense_projected"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="red"></c-amount.display>
{% elif showing == 'final' and currency.total_expense != 0 %}
<c-amount.display
:amount="currency.total_expense"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="red"></c-amount.display>
{% else %}
<div>-</div>
{% endif %}
{% endfor %}
</td>
<td>
{% for currency in entity.currencies.values %}
{% if showing == 'current' and currency.total_current != 0 %}
<c-amount.display
:amount="currency.total_current"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
{% elif showing == 'projected' and currency.total_projected != 0 %}
<c-amount.display
:amount="currency.total_projected"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
{% elif showing == 'final' and currency.total_final != 0 %}
<c-amount.display
:amount="currency.total_final"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
{% else %}
<div>-</div>
{% endif %}
{% endfor %}
</td>
</tr>
{% endfor %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}

View File

@@ -35,7 +35,7 @@
{% include 'includes/mobile_navbar.html' %}
{% include 'includes/sidebar.html' %}
<main class="tw:p-4 tw:lg:ml-16">
<main class="tw:p-4">
{% settings "DEMO" as demo_mode %}
{% if demo_mode %}
<div class="px-3 m-0" id="demo-mode-alert" hx-preserve>

View File

@@ -44,12 +44,12 @@
</div>
</div>
{# Action buttons#}
{# <div class="col-12 col-xl-8">#}
{# <c-ui.quick-transactions-buttons#}
{# :year="year"#}
{# :month="month"#}
{# ></c-ui.quick-transactions-buttons>#}
{# </div>#}
{# <div class="col-12 col-xl-8">#}
{# <c-ui.quick-transactions-buttons#}
{# :year="year"#}
{# :month="month"#}
{# ></c-ui.quick-transactions-buttons>#}
{# </div>#}
</div>
{# Monthly summary#}
<div class="row gx-xl-4 gy-3">
@@ -133,59 +133,101 @@
</div>
<div class="col-12 col-xl-8 order-2 order-xl-1">
<div class="row mb-1">
<div class="col-sm-6 col-12">
{# Filter transactions button #}
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse-filter" aria-expanded="false"
aria-controls="collapse-filter">
<i class="fa-solid fa-filter fa-fw me-2"></i>{% translate 'Filter transactions' %}
<div class="my-3">
{# Hidden select to hold the order value and preserve the original update trigger #}
<select name="order" id="order" class="d-none" _="on change trigger updated on window">
<option value="default" {% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
<option value="older" {% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
<option value="newer" {% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
</select>
{# Main control bar with filter, search, and ordering #}
<div class="input-group">
<button class="btn btn-secondary position-relative" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse-filter"
aria-expanded="false" aria-controls="collapse-filter" id="filter-button" hx-preserve
title="{% translate 'Filter transactions' %}">
<i class="fa-solid fa-filter fa-fw"></i>
</button>
</div>
{# Ordering button#}
<div class="col-sm-6 col-12 tw:content-center my-3 my-sm-0">
<div class="text-sm-end" _="on change trigger updated on window">
<label for="order">{% translate "Order by" %}</label>
<select
class="tw:border-0 tw:focus-visible:outline-0 w-full pe-2 tw:leading-normal text-bg-tertiary tw:font-medium rounded bg-body text-body"
name="order" id="order">
<option value="default"
{% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
<option value="older"
{% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
<option value="newer"
{% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
</select>
</div>
</div>
</div>
{# Filter transactions form#}
<div class="collapse" id="collapse-filter" hx-preserve>
<div class="card card-body">
<form _="on change or submit or search trigger updated on window end
install init_tom_select
install init_datepicker"
id="filter">
{% crispy filter.form %}
</form>
<button class="btn btn-outline-danger btn-sm"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
</div>
<div id="search" class="my-3">
<label class="w-100">
<input type="search" class="form-control" placeholder="{% translate 'Search' %}" hx-preserve
{# Search box #}
<label for="quick-search">
</label>
<input type="search"
class="form-control"
placeholder="{% translate 'Search' %}"
hx-preserve
id="quick-search"
_="on input or search or htmx:afterSwap from window
if my value is empty
trigger toggle on <.transactions-divider-collapse/>
else
trigger show on <.transactions-divider-collapse/>
end
show <.transactions-divider-title/> when my value is empty
show <.transaction/> in <#transactions-list/>
when its textContent.toLowerCase() contains my value.toLowerCase()">
</label>
if my value is empty
trigger toggle on <.transactions-divider-collapse/>
else
trigger show on <.transactions-divider-collapse/>
end
show <.transactions-divider-title/> when my value is empty
show <.transaction/> in <#transactions-list/>
when its textContent.toLowerCase() contains my value.toLowerCase()">
{# Order by icon dropdown #}
<button class="btn btn-secondary dropdown-toggle dropdown-toggle-no-icon" type="button"
data-bs-toggle="dropdown" aria-expanded="false"
title="{% translate 'Order by' %}">
<i class="fa-solid fa-sort fa-fw"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<button class="dropdown-item {% if order == 'default' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'default'
then trigger change on #order">
{% translate 'Default' %}
</button>
</li>
<li>
<button class="dropdown-item {% if order == 'older' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'older'
then trigger change on #order">
{% translate 'Oldest first' %}
</button>
</li>
<li>
<button class="dropdown-item {% if order == 'newer' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'newer'
then trigger change on #order">
{% translate 'Newest first' %}
</button>
</li>
</ul>
</div>
{# Filter transactions form #}
<div class="collapse" id="collapse-filter" hx-preserve>
<div class="card card-body">
<div class="text-end">
<button class="btn btn-outline-danger btn-sm tw:w-fit"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
<form _="on change or submit or search trigger updated on window
install init_tom_select
install init_datepicker"
id="filter" class="mt-3">
{% crispy filter.form %}
</form>
<div class="text-end">
<button class="btn btn-outline-danger btn-sm tw:w-fit"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
</div>
</div>
</div>
{# Transactions list#}
<div id="transactions"

View File

@@ -5,121 +5,128 @@
<div id="transactions-list">
{% for x in transactions_by_date %}
<div id="{{ x.grouper|slugify }}"
_="on htmx:afterSettle from #transactions if sessionStorage.getItem(my id) is null then sessionStorage.setItem(my id, 'true')">
<div class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body">
<div id="{{ x.grouper|slugify }}" class="transactions-divider"
_="on htmx:afterSwap from #transactions if sessionStorage.getItem(my id) is null then sessionStorage.setItem(my id, 'true')">
<div class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body transactions-divider-title">
<a class="text-decoration-none d-inline-block w-100"
role="button"
data-bs-toggle="collapse"
data-bs-target="#c-{{ x.grouper|slugify }}-collapse"
id="c-{{ x.grouper|slugify }}-collapsible"
aria-expanded="true"
aria-expanded="false"
aria-controls="c-{{ x.grouper|slugify }}-collapse">
{{ x.grouper }}
</a>
</div>
<div class="collapse" id="c-{{ x.grouper|slugify }}-collapse"
<div class="collapse transactions-divider-collapse" id="c-{{ x.grouper|slugify }}-collapse"
_="on shown.bs.collapse sessionStorage.setItem(the closest parent @id, 'true')
on hidden.bs.collapse sessionStorage.setItem(the closest parent @id, 'false')
on htmx:afterSettle from #transactions
on htmx:afterSettle from #transactions or toggle
set state to sessionStorage.getItem(the closest parent @id)
if state is 'true' or state is null
add .show to me
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to true
end">
else
remove .show from me
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to false
end
on show
add .show to me
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to true">
<div class="d-flex flex-column">
{% for transaction in x.list %}
<c-transaction.item :transaction="transaction"></c-transaction.item>
<c-transaction.item
:transaction="transaction"></c-transaction.item>
{% endfor %}
</div>
</div>
</div>
{% empty %}
<c-msg.empty
title="{% translate "No transactions found" %}"
subtitle="{% translate "Try adding one" %}"></c-msg.empty>
{% endfor %}
title="{% translate "No transactions found" %}"
subtitle="{% translate "Try adding one" %}"></c-msg.empty>
{% endfor %}
{% if page_obj.has_other_pages %}
<div class="mt-auto">
<input value="{{ page_obj.number }}" name="page" type="hidden" id="page">
<div class="mt-auto">
<input value="{{ page_obj.number }}" name="page" type="hidden" id="page">
<nav aria-label="{% translate 'Page navigation' %}">
<ul class="pagination justify-content-center mt-5">
<li class="page-item">
<a class="page-link tw:cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
hx-get="{% if page_obj.has_previous %}{% url 'transactions_all_list' %}{% endif %}"
hx-vals='{"page": 1}'
hx-include="#filter, #order"
hx-target="#transactions-list"
aria-label="Primeira página"
hx-swap="show:top">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{% for page_number in page_obj.paginator.page_range %}
{% comment %}
<nav aria-label="{% translate 'Page navigation' %}">
<ul class="pagination justify-content-center mt-5">
<li class="page-item">
<a class="page-link tw:cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
hx-get="{% if page_obj.has_previous %}{% url 'transactions_all_list' %}{% endif %}"
hx-vals='{"page": 1}'
hx-include="#filter, #order"
hx-target="#transactions-list"
aria-label="Primeira página"
hx-swap="show:top">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{% for page_number in page_obj.paginator.page_range %}
{% comment %}
This conditional allows us to display up to 3 pages before and after the current page
If you decide to remove this conditional, all the pages will be displayed
You can change the 3 to any number you want e.g
To display only 5 pagination items, change the 3 to 2 (2 before and 2 after the current page)
{% endcomment %}
{% if page_number <= page_obj.number|add:3 and page_number >= page_obj.number|add:-3 %}
{% if page_obj.number == page_number %}
<li class="page-item active">
<a class="page-link tw:cursor-pointer">
{{ page_number }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}"
hx-vals='{"page": {{ page_number }}}'
hx-include="#filter, #order"
hx-target="#transactions-list"
hx-swap="show:top">
{{ page_number }}
</a>
</li>
{% endif %}
{% if page_number <= page_obj.number|add:3 and page_number >= page_obj.number|add:-3 %}
{% if page_obj.number == page_number %}
<li class="page-item active">
<a class="page-link tw:cursor-pointer">
{{ page_number }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}"
hx-vals='{"page": {{ page_number }}}'
hx-include="#filter, #order"
hx-target="#transactions-list"
hx-swap="show:top">
{{ page_number }}
</a>
</li>
{% endif %}
{% endfor %}
{% if page_obj.number|add:3 < page_obj.paginator.num_pages %}
<li class="page-item">
<a class="page-link disabled"
aria-label="...">
<span aria-hidden="true">...</span>
</a>
</li>
<li class="page-item">
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}" hx-target="#transactions-list"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
hx-include="#filter, #order"
hx-swap="show:top"
aria-label="Última página">
<span aria-hidden="true">{{ page_obj.paginator.num_pages }}</span>
</a>
</li>
{% endif %}
<li class="page-item">
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw:cursor-pointer"
hx-get="{% if page_obj.has_next %}{% url 'transactions_all_list' %}{% endif %}"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
hx-include="#filter, #order"
hx-swap="show:top"
hx-target="#transactions-list"
aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>
</div>
{% endif %}
{% endfor %}
{% if page_obj.number|add:3 < page_obj.paginator.num_pages %}
<li class="page-item">
<a class="page-link disabled"
aria-label="...">
<span aria-hidden="true">...</span>
</a>
</li>
<li class="page-item">
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}" hx-target="#transactions-list"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
hx-include="#filter, #order"
hx-swap="show:top"
aria-label="Última página">
<span aria-hidden="true">{{ page_obj.paginator.num_pages }}</span>
</a>
</li>
{% endif %}
<li class="page-item">
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw:cursor-pointer"
hx-get="{% if page_obj.has_next %}{% url 'transactions_all_list' %}{% endif %}"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
hx-include="#filter, #order"
hx-swap="show:top"
hx-target="#transactions-list"
aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>
</div>
{% endif %}
{# Floating bar#}
{# Floating bar#}
<c-ui.transactions-action-bar></c-ui.transactions-action-bar>
</div>

View File

@@ -8,45 +8,101 @@
<div class="container px-md-3 py-3 column-gap-5">
<div class="row gx-xl-4 gy-3">
<div class="col-12 col-xl-8 order-2 order-xl-1">
<div class="row mb-1">
<div class="col-sm-6 col-12">
{# Filter transactions button #}
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse-filter" aria-expanded="false"
aria-controls="collapse-filter">
<i class="fa-solid fa-filter fa-fw me-2"></i>{% translate 'Filter transactions' %}
<div class="mb-3">
{# Hidden select to hold the order value and preserve the original update trigger #}
<select name="order" id="order" class="d-none" _="on change trigger updated on window">
<option value="default" {% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
<option value="older" {% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
<option value="newer" {% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
</select>
{# Main control bar with filter, search, and ordering #}
<div class="input-group">
<button class="btn btn-secondary position-relative" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse-filter"
aria-expanded="false" aria-controls="collapse-filter" id="filter-button" hx-preserve
title="{% translate 'Filter transactions' %}">
<i class="fa-solid fa-filter fa-fw"></i>
</button>
{# Search box #}
<label for="quick-search">
</label>
<input type="search"
class="form-control"
placeholder="{% translate 'Search' %}"
hx-preserve
id="quick-search"
_="on input or search or htmx:afterSwap from window
if my value is empty
trigger toggle on <.transactions-divider-collapse/>
else
trigger show on <.transactions-divider-collapse/>
end
show <.transactions-divider-title/> when my value is empty
show <.transaction/> in <#transactions-list/>
when its textContent.toLowerCase() contains my value.toLowerCase()">
{# Order by icon dropdown #}
<button class="btn btn-secondary dropdown-toggle dropdown-toggle-no-icon" type="button"
data-bs-toggle="dropdown" aria-expanded="false"
title="{% translate 'Order by' %}">
<i class="fa-solid fa-sort fa-fw"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<button class="dropdown-item {% if order == 'default' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'default'
then trigger change on #order">
{% translate 'Default' %}
</button>
</li>
<li>
<button class="dropdown-item {% if order == 'older' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'older'
then trigger change on #order">
{% translate 'Oldest first' %}
</button>
</li>
<li>
<button class="dropdown-item {% if order == 'newer' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'newer'
then trigger change on #order">
{% translate 'Newest first' %}
</button>
</li>
</ul>
</div>
{# Ordering button#}
<div class="col-sm-6 col-12 tw:content-center my-3 my-sm-0">
<div class="text-sm-end" _="on change trigger updated on window">
<label for="order">{% translate "Order by" %}</label>
<select
class="tw:border-0 tw:focus-visible:outline-0 w-full pe-2 tw:leading-normal text-bg-tertiary tw:font-medium rounded bg-body text-body"
name="order" id="order">
<option value="default"
{% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
<option value="older"
{% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
<option value="newer"
{% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
</select>
{# Filter transactions form #}
<div class="collapse" id="collapse-filter" hx-preserve>
<div class="card card-body">
<div class="text-end">
<button class="btn btn-outline-danger btn-sm tw:w-fit"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
<form _="on change or submit or search trigger updated on window
install init_tom_select
install init_datepicker"
id="filter" class="mt-3">
{% crispy filter.form %}
</form>
<div class="text-end">
<button class="btn btn-outline-danger btn-sm tw:w-fit"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
</div>
</div>
</div>
{# Filter transactions form#}
<div class="collapse" id="collapse-filter">
<div class="card card-body">
<form _="on change or submit or search trigger updated on window end
install init_tom_select
install init_datepicker"
id="filter">
{% crispy filter.form %}
</form>
<button class="btn btn-outline-danger btn-sm"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
</div>
<div id="transactions"
class="show-loading"
hx-get="{% url 'transactions_all_list' %}"

View File

@@ -1,2 +1,66 @@
import htmx from "htmx.org";
window.htmx = htmx;
htmx.defineExtension('htmx-download', {
onEvent: function (name, evt) {
if (name === 'htmx:beforeRequest') {
// Set the responseType to 'arraybuffer' to handle binary data
evt.detail.xhr.responseType = 'arraybuffer';
}
if (name === 'htmx:beforeSwap') {
const xhr = evt.detail.xhr;
if (xhr.status === 200) {
// Parse headers
const headers = {};
const headerStr = xhr.getAllResponseHeaders();
const headerArr = headerStr.trim().split(/[\r\n]+/);
headerArr.forEach((line) => {
const parts = line.split(": ");
const header = parts.shift().toLowerCase();
const value = parts.join(": ");
headers[header] = value;
});
// Extract filename
let filename = 'downloaded_file.xlsx';
if (headers['content-disposition']) {
const filenameMatch = headers['content-disposition'].match(/filename\*?=(?:UTF-8'')?"?([^;\n"]+)/i);
if (filenameMatch && filenameMatch[1]) {
filename = decodeURIComponent(filenameMatch[1].replace(/['"]/g, ''));
}
}
// Determine MIME type
const mimetype = headers['content-type'] || 'application/octet-stream';
// Create Blob
const blob = new Blob([xhr.response], {type: mimetype});
const url = URL.createObjectURL(blob);
// Trigger download
const link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
// Cleanup
setTimeout(() => {
URL.revokeObjectURL(url);
link.remove();
}, 100);
} else {
console.warn(`[htmx-download] Unexpected response status: ${xhr.status}`);
}
// Prevent htmx from swapping content
evt.detail.shouldSwap = false;
}
},
});

View File

@@ -49,3 +49,7 @@ $theme-colors: map.merge(
.offcanvas-size-sm {
--#{$prefix}offcanvas-width: min(95vw, 250px) !important;
}
.dropdown-toggle.dropdown-toggle-no-icon::after {
display:none;
}

View File

@@ -3,9 +3,139 @@
@custom-variant hover (&:hover);
.sidebar-active {
@apply tw:bg-gray-700 tw:text-white;
@apply tw:bg-gray-700 tw:text-white;
}
.sidebar-item:not(.sidebar-active) {
@apply tw:text-gray-300 tw:hover:text-white;
}
@layer components {
.sidebar {
@apply tw:z-1020 tw:fixed tw:top-0 tw:start-0 tw:h-full tw:transition-all tw:duration-100;
}
.sidebar-floating {
/* Establishes the hover group and sets the collapsed/hover widths for the container */
@apply tw:lg:w-16 tw:lg:hover:w-112;
}
.sidebar-floating #sidebar {
/* Sets the collapsed/hover widths for the inner navigation element */
@apply tw:lg:w-16 tw:lg:group-hover:w-104 tw:transition-all tw:duration-100 tw:overflow-hidden;
}
.sidebar-floating + main {
/* Adjusts the main content margin to account for the collapsed sidebar */
@apply tw:lg:ml-16 tw:transition-all tw:duration-100;
}
.sidebar-floating .sidebar-item span {
/* Hides the text labels and reveals them only on hover */
@apply tw:lg:invisible tw:lg:group-hover:visible;
}
.sidebar-floating .sidebar-invisible {
/* Hides the text labels and reveals them only on hover */
@apply tw:lg:invisible tw:lg:group-hover:visible;
}
.sidebar-floating .sidebar-menu-header {
/* Hides the menu headers and reveals them only on hover */
@apply tw:lg:hidden tw:lg:group-hover:inline;
}
.sidebar-floating #sidebar-toggle-btn .fa-thumbtack-slash {
/* Hides the 'pin' icon in the floating state */
@apply tw:hidden!;
}
.sidebar-floating #sidebar-toggle-btn .fa-thumbtack {
/* Shows the 'expand' icon in the floating state */
@apply tw:inline-block!;
}
.sidebar-floating .sidebar-title span {
@apply tw:lg:invisible tw:lg:group-hover:visible
}
.sidebar-submenu-header {
@apply tw:flex;
}
.sidebar-floating .sidebar-submenu-header {
@apply tw:lg:hidden tw:lg:group-hover:flex;
}
.sidebar-floating .sidebar-submenu-header h5 {
@apply tw:lg:invisible tw:lg:group-hover:visible;
}
.sidebar-floating .sidebar-submenu-header button {
@apply tw:lg:hidden tw:lg:group-hover:inline;
}
.sidebar-floating .list-unstyled {
@apply tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden;
}
.sidebar-floating .sidebar-item {
@apply tw:text-wrap tw:lg:text-nowrap ;
}
/* --- STATE 2: Fixed (Permanently Expanded) --- */
.sidebar-fixed {
/* Sets the fixed, expanded width for the container */
@apply tw:lg:w-[17%] tw:transition-all tw:duration-100;
}
.sidebar-fixed #sidebar {
/* Sets the fixed, expanded width for the inner navigation */
@apply tw:lg:w-[17%] tw:transition-all tw:duration-100;
}
.sidebar-fixed + main {
/* Adjusts the main content margin to account for the expanded sidebar */
@apply tw:lg:ml-[17%] tw:transition-all tw:duration-100;
/* Using 16vw to account for padding/margins */
}
.sidebar-fixed .sidebar-item {
@apply tw:text-wrap;
}
.sidebar-fixed .sidebar-item span {
/* Ensures text labels are always visible */
@apply tw:lg:visible;
}
.sidebar-fixed .sidebar-menu-header {
/* Ensures menu headers are always visible */
@apply tw:lg:inline;
}
.sidebar-fixed #sidebar-toggle-btn .fa-thumbtack-slash {
/* Shows the 'pin' icon in the fixed state */
@apply tw:inline-block!;
}
.sidebar-fixed #sidebar-toggle-btn .fa-thumbtack {
/* Hides the 'expand' icon in the fixed state */
@apply tw:hidden!;
}
.sidebar-fixed .sidebar-title span {
@apply tw:lg:visible;
}
.sidebar-fixed .sidebar-submenu-header {
/* Ensures menu headers are always visible */
@apply tw:lg:flex;
}
.sidebar-fixed .list-unstyled {
@apply tw:overflow-y-auto tw:overflow-x-hidden;
}
}