mirror of
https://github.com/we-promise/sure.git
synced 2026-05-27 22:44:55 +00:00
* Extract hardcoded strings to i18n
Replace numerous hardcoded English strings with I18n lookups (t / I18n.t) across controllers, views, helpers, and components, and convert model validation error messages to symbol keys. Added multiple locale files under config/locales for models and views. This centralizes user-facing notices/alerts, UI text, import/validation messages, and prepares the app for localization and easier translation maintenance.
* Update en.yml
* Update preview-cleanup.yml
* Revert "Update preview-cleanup.yml"
This reverts commit 1ba6d3c34c.
* test: align i18n assertions with translated messages
* Standardize balance error key and tweak locales
Replace SophtronAccount's :requires_balance error key with :no_balance and update related locale strings for sophtron, plaid, and simplefin accounts to use the new key and clearer copy. Also switch the QIF upload redirect notice to use a relative translation key (t('.qif_uploaded')), remove an unused SSO providers help line, and fix a trailing-newline/whitespace issue in the subscriptions locale. These changes standardize validation keys and improve translation consistency and messaging.
---------
Co-authored-by: KiloClaw <kiloclaw@openclaw.ai>
108 lines
5.1 KiB
Plaintext
108 lines
5.1 KiB
Plaintext
<%= render DS::Dialog.new(frame: "drawer", responsive: true) do |dialog| %>
|
|
<% dialog.with_header(custom_header: true) do %>
|
|
<div class="flex items-start justify-between gap-4">
|
|
<div>
|
|
<h3 class="font-medium flex items-center gap-2">
|
|
<span class="text-2xl text-primary privacy-sensitive">
|
|
<%= format_money @transfer.amount_abs %>
|
|
</span>
|
|
<span class="text-lg text-secondary">
|
|
<%= @transfer.amount_abs.currency.iso_code %>
|
|
</span>
|
|
<%= icon "arrow-left-right", size: "sm", class: "text-secondary" %>
|
|
</h3>
|
|
<span class="text-sm text-secondary">
|
|
<%= @transfer.name %>
|
|
</span>
|
|
</div>
|
|
<%= dialog.close_button %>
|
|
</div>
|
|
<% end %>
|
|
<% dialog.with_body do %>
|
|
<% dialog.with_section(title: t(".overview"), open: true) do %>
|
|
<div class="pb-4 px-3 pt-2 text-sm space-y-3 text-primary">
|
|
<div class="space-y-3">
|
|
<dl class="flex items-center gap-2 justify-between">
|
|
<dt class="text-secondary"><%= t(".from") %></dt>
|
|
<dd class="flex items-center gap-2 font-medium">
|
|
<%= render "accounts/logo", account: @transfer.from_account, size: "sm" %>
|
|
<%= link_to @transfer.from_account.name, account_path(@transfer.from_account), data: { turbo_frame: "_top" } %>
|
|
</dd>
|
|
</dl>
|
|
<dl class="flex items-center gap-2 justify-between">
|
|
<dt class="text-secondary"><%= t(".date") %></dt>
|
|
<dd class="font-medium"><%= l(@transfer.outflow_transaction.entry.date, format: :long) %></dd>
|
|
</dl>
|
|
<dl class="flex items-center gap-2 justify-between">
|
|
<dt class="text-secondary"><%= t(".amount") %></dt>
|
|
<dd class="font-medium text-red-500 privacy-sensitive"><%= format_money @transfer.outflow_transaction.entry.amount_money * -1 %></dd>
|
|
</dl>
|
|
</div>
|
|
<%= render "shared/ruler", classes: "my-2" %>
|
|
<div class="space-y-3">
|
|
<dl class="flex items-center gap-2 justify-between">
|
|
<dt class="text-secondary"><%= t(".to") %></dt>
|
|
<dd class="flex items-center gap-2 font-medium">
|
|
<%= render "accounts/logo", account: @transfer.to_account, size: "sm" %>
|
|
<%= link_to @transfer.to_account.name, account_path(@transfer.to_account), data: { turbo_frame: "_top" } %>
|
|
</dd>
|
|
</dl>
|
|
<dl class="flex items-center gap-2 justify-between">
|
|
<dt class="text-secondary"><%= t(".date") %></dt>
|
|
<dd class="font-medium"><%= l(@transfer.inflow_transaction.entry.date, format: :long) %></dd>
|
|
</dl>
|
|
<dl class="flex items-center gap-2 justify-between">
|
|
<dt class="text-secondary"><%= t(".amount") %></dt>
|
|
<dd class="font-medium text-green-500 privacy-sensitive">+<%= format_money @transfer.inflow_transaction.entry.amount_money * -1 %></dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
<% dialog.with_section(title: t(".details")) do %>
|
|
<%= styled_form_with model: @transfer,
|
|
data: { controller: "auto-submit-form" }, class: "space-y-2" do |f| %>
|
|
<% if @transfer.categorizable? %>
|
|
<%= f.collection_select :category_id, @categories.alphabetically, :id, :name, { label: t(".category"), include_blank: t(".uncategorized"), selected: @transfer.outflow_transaction.category&.id }, "data-auto-submit-form-target": "auto" %>
|
|
<% end %>
|
|
<%= f.text_area :notes,
|
|
label: t(".note_label"),
|
|
placeholder: t(".note_placeholder"),
|
|
rows: 5,
|
|
"data-auto-submit-form-target": "auto" %>
|
|
<% end %>
|
|
<% end %>
|
|
<% dialog.with_section(title: t(".settings")) do %>
|
|
<div class="pb-4">
|
|
<% if @can_mark_as_recurring_transfer %>
|
|
<div class="flex items-center justify-between gap-2 p-3">
|
|
<div class="text-sm space-y-1">
|
|
<h4 class="text-primary"><%= t(".mark_recurring_title") %></h4>
|
|
<p class="text-secondary"><%= t(".mark_recurring_subtitle") %></p>
|
|
</div>
|
|
<%= render DS::Button.new(
|
|
text: t(".mark_recurring"),
|
|
variant: "outline",
|
|
icon: "repeat",
|
|
href: mark_as_recurring_transfer_path(@transfer),
|
|
method: :post,
|
|
frame: "_top"
|
|
) %>
|
|
</div>
|
|
<% end %>
|
|
<div class="flex items-center justify-between gap-2 p-3">
|
|
<div class="text-sm space-y-1">
|
|
<h4 class="text-primary"><%= t(".delete_title") %></h4>
|
|
<p class="text-secondary"><%= t(".delete_subtitle") %></p>
|
|
</div>
|
|
<%= button_to t(".delete"),
|
|
transfer_path(@transfer),
|
|
method: :delete,
|
|
class: "rounded-lg px-3 py-2 whitespace-nowrap text-red-500 text-sm
|
|
font-medium border border-secondary",
|
|
data: { turbo_confirm: true, turbo_frame: "_top" } %>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
<% end %>
|
|
<% end %>
|