Files
sure/app/views/pages/dashboard/_balance_sheet.html.erb
Brendon Scheiber 7411db5689 feat(i18n): add Hungarian translations for strings extracted in #1806 (#1817)
* add missing Hungarian translations for newly extracted strings

Replace hard-coded UI strings with I18n lookups across controllers, models and views (breadcrumbs, dashboard, reports, settings, transactions, balance sheet, MFA status). Update models to use translations for category defaults, account/display names, classification group and period labels; remove a few hardcoded display_name methods. Add and update numerous locale files (English and extensive Hungarian translations, plus model/view/doorkeeper entries) to provide the required keys. These changes centralize copy for localization and prepare the app for Hungarian/English UI text.

* Pluralize account type labels; tidy Crypto model

Update English locale account type labels to use plural forms for consistency (Investment(s), Properties, Vehicles, Other Assets, Credit Cards, Loans, Other Liabilities). Also remove an extra blank line in app/models/crypto.rb to tidy up formatting.

* Back to singular

* fix(i18n): separate singular and group account labels

* Update _accountable_group.html.erb

* Use I18n plural names for account types

Change Accountable#display_name to look up pluralized account type names via I18n (accounts.types_plural.<underscored_class>) with a fallback to the legacy display logic. Add legacy_display_name helper to preserve previous behavior (singular for Depository and Crypto, pluralized otherwise). Add corresponding types_plural entries in English and Hungarian locale files for various account types.

---------

Co-authored-by: Juan José Mata <jjmata@jjmata.com>
Co-authored-by: sure-admin <sure-admin@splashblot.com>
2026-05-18 20:49:28 +02:00

138 lines
6.1 KiB
Plaintext

<%# locals: (balance_sheet:, **args) %>
<div class="space-y-6" id="balance-sheet">
<% balance_sheet.classification_groups.each do |classification_group| %>
<div class="space-y-4 px-4">
<div class="flex items-center gap-2">
<h2 class="text-lg font-medium inline-flex items-center gap-1.5">
<span class="<%= "animate-pulse" if classification_group.syncing? %>">
<%= classification_group.name %>
</span>
<% if classification_group.account_groups.any? %>
<span class="text-secondary">&middot;</span>
<span class="text-secondary font-medium text-lg privacy-sensitive"><%= classification_group.total_money.format(precision: 0) %></span>
<% end %>
</h2>
</div>
<% if classification_group.account_groups.any? %>
<div class="space-y-4">
<div class="flex gap-1">
<% classification_group.account_groups.each do |account_group| %>
<div class="h-1.5 rounded-sm" style="width: <%= account_group.weight %>%; background-color: <%= account_group.color %>;"></div>
<% end %>
</div>
<div class="flex flex-wrap gap-4">
<% classification_group.account_groups.each do |account_group| %>
<div class="flex items-center gap-2 text-sm">
<div class="h-2.5 w-2.5 rounded-full" style="background-color: <%= account_group.color %>;"></div>
<p class="text-secondary"><%= account_group.name %></p>
<p class="text-primary font-mono privacy-sensitive"><%= number_to_percentage(account_group.weight, precision: 0) %></p>
</div>
<% end %>
</div>
</div>
<div class="bg-container-inset rounded-xl p-1 space-y-1 overflow-x-auto">
<div class="px-4 py-2 flex items-center uppercase text-xs font-medium text-secondary">
<div class="w-40 shrink-0"><%= t(".name") %></div>
<div class="ml-auto text-right flex items-center gap-2">
<div class="w-20 shrink-0">
<p><%= t(".weight") %></p>
</div>
<div class="w-24 shrink-0">
<p><%= t(".value") %></p>
</div>
</div>
</div>
<div class="rounded-lg bg-container font-medium text-sm min-w-fit">
<% classification_group.account_groups.each_with_index do |account_group, idx| %>
<details class="group open:bg-container
<%= idx == 0 ? "rounded-t-lg" : "" %>
<%= idx == classification_group.account_groups.size - 1 ? "rounded-b-lg" : "" %>
">
<summary class="cursor-pointer p-4 group-open:bg-container rounded-lg flex items-center justify-between">
<div class="w-40 shrink-0 flex items-center gap-1">
<%= icon("chevron-right", class: "group-open:rotate-90") %>
<p><%= account_group.name %></p>
</div>
<div class="flex items-center justify-between text-right gap-2">
<div class="w-20 shrink-0 flex items-center justify-end gap-2">
<%= render "pages/dashboard/group_weight", weight: account_group.weight, color: account_group.color %>
</div>
<div class="w-24 shrink-0">
<p class="privacy-sensitive"><%= format_money(account_group.total_money, precision: 0) %></p>
</div>
</div>
</summary>
<div>
<% account_group.accounts.each_with_index do |account, idx| %>
<div class="pl-7 pr-4 py-3 flex items-center justify-between text-sm font-medium">
<div class="flex items-center gap-2">
<%= render "accounts/logo", account: account, size: "sm", color: account_group.color %>
<%= link_to account.name, account_path(account) %>
</div>
<div class="ml-auto flex items-center text-right gap-2">
<div class="w-14 shrink-0 flex items-center justify-end gap-2">
<%
# Calculate weight as percentage of classification total
classification_total = classification_group.total_money.amount
account_weight = classification_total.zero? ? 0 : account.converted_balance / classification_total * 100
%>
<%= render "pages/dashboard/group_weight", weight: account_weight, color: account_group.color %>
</div>
<div class="w-24 shrink-0">
<p class="privacy-sensitive"><%= format_money(account.balance_money, precision: 0) %></p>
</div>
</div>
</div>
<% if idx < account_group.accounts.size - 1 %>
<%= render "shared/ruler", classes: "ml-21 mr-4" %>
<% end %>
<% end %>
</div>
</details>
<% unless idx == classification_group.account_groups.size - 1 %>
<%= render "shared/ruler", classes: "mx-4 group-ruler" %>
<% end %>
<% end %>
</div>
</div>
<% else %>
<div class="py-10 flex flex-col items-center">
<%= render DS::FilledIcon.new(
variant: :container,
icon: classification_group.icon,
) %>
<p class="text-primary text-sm font-medium mb-1 mt-4">
<%= t("pages.dashboard.balance_sheet.no_#{classification_group.classification}") %>
</p>
<p class="text-secondary text-sm text-center">
<%= t("pages.dashboard.balance_sheet.add_#{classification_group.classification}_accounts") %>
</p>
</div>
<% end %>
</div>
<% end %>
</div>
<%# Custom style for hiding ruler when details are open %>
<style>
details[open] + .group-ruler {
display: none;
}
</style>