Commit Graph

4 Commits

Author SHA1 Message Date
Brendon Scheiber
dce2213a98 feat: add Hungarian (hu) localization (#1677)
* Add Hungarian (hu) localization

Add complete Hungarian translation files and register hu locale

* Update hu.yml

* Hungarian locale: currency formatting & fixes
2026-05-06 22:38:51 +02:00
UberDudePL
cebdf1d4f7 Polish localization: complete translations, pluralization fixes, and reusable locale audit tooling (#1356)
* Add production-ready Polish localization and reusable locale audit tooling

- add and update Polish locale files across models, views, mailers, and shared translations
- add runtime rails-i18n dependency and Polish locale support in language helper
- add regression coverage for Polish pluralization and locale-aware money formatting
- introduce reusable locale audit script for any locale plus backward-compatible PL wrapper
- add localization audit docs and generated PL readiness/pluralization reports
- resolve one/few/many/other pluralization consistency for Polish locales

* Fix Polish locale review feedback

* Fix locale compatibility regressions

* Polish locale typo pass and wrapper cleanup

* Final language improvements and test isolation for Polish locales

- Improved partial_success wording in SnapTrade with proper noun inflection
- Fixed typos: Pomin → Pomiń in Mercury and LunchFlow items
- Isolated I18n backend state in polish_pluralization_test to prevent test coupling

* Fix code review comments in locale audit scripts

- Use RbConfig.ruby instead of 'ruby' to ensure consistent interpreter
- Remove Symbol from permitted_classes and explicitly allow CLDR plural symbols (one, few, many, other) in YAML loading

* Simplify i18n flow and align locale interpolation keys

* Remove locale audit scripts and localization docs
2026-04-07 11:55:58 +02:00
Jorge Victor Gamboa
745c804289 Update and add Portuguese translations for various features (#1344)
* feat: update translations for pt-BR

Add new translations and update existing ones

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Add Portuguese translations for admin invitations

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Add Portuguese translations for budget views

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Add unlock and protection messages in pt-BR.yml

Added unlock and protection messages in Portuguese.

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Fix translation key from 'provedores' to 'providers'

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Update config/locales/views/settings/pt-BR.yml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Translate account sharing strings to Portuguese

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Add Portuguese (Brazil) localization for components

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Add Portuguese translations for transaction model errors

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Translate user management strings to Portuguese

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Fix typo in Portuguese translation for 'member'

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Add appearance settings localization in pt-BR

Added localization for appearance settings and dashboard layout options in Portuguese.

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>

* Remove theme options from preferences in pt-BR localization, these keys were moved to appearances.show.

* Adds translations for financial reports and investment performance in Brazilian Portuguese.

* fix: Corrects Portuguese translations for 'vender' (to sell), 'neste período' (in this period), and adjusts the formatting of 'saques' (withdrawals) in investment performance.

* Fix: Corrects the indentation of the print section in the pt-BR translation file.

* Fix: Corrects the translation of 'this period' to 'este período' in the pt-BR localization file.

---------

Signed-off-by: Jorge Victor Gamboa <gamboajorge49@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-07 11:40:19 +02:00
Juan José Mata
02af8463f6 Administer invitations in /admin/users (#1185)
* Add invited users with delete button to admin users page

Shows pending invitations per family below active users in /admin/users/.
Each invitation row has a red Delete button aligned with the role column.
Alt/option-clicking any Delete button changes all invitation button labels
to "Delete All" and destroys all pending invitations for that family.

- Add admin routes: DELETE /admin/invitations/:id and DELETE /admin/families/:id/invitations
- Add Admin::InvitationsController with destroy and destroy_all actions
- Load pending invitations grouped by family in users controller index
- Render invitation rows in a dashed-border tbody below active user rows
- Add admin-invitation-delete Stimulus controller for alt-click behavior
- Add i18n strings for invitation UI and flash messages

https://claude.ai/code/session_01F8WaH5TmtdUWwhHnVoQ6Gm

* Fix destroy_all using params[:id] from member route

The member route /admin/families/:id/invitations sets params[:id],
not params[:family_id], so Family.find was always receiving nil.

https://claude.ai/code/session_01F8WaH5TmtdUWwhHnVoQ6Gm

* Fix translation key in destroy_all to match locale

t(".success_all") looked up a nonexistent key; the locale defines
admin.invitations.destroy_all.success, so t(".success") is correct.

https://claude.ai/code/session_01F8WaH5TmtdUWwhHnVoQ6Gm

* Scope bulk delete to pending invitations and allow re-inviting emails

- destroy_all now uses family.invitations.pending.destroy_all so accepted
  and expired invitation history is preserved
- Replace blanket email uniqueness validation with a custom check scoped
  to pending invitations only, so the same email can be invited again
  after an invitation is deleted or expires

https://claude.ai/code/session_01F8WaH5TmtdUWwhHnVoQ6Gm

* Drop unconditional unique DB index on invitations(email, family_id)

The model-level uniqueness check was already scoped to pending
invitations, but the blanket unique index on (email, family_id)
still caused ActiveRecord::RecordNotUnique when re-inviting an
email that had any historical invitation record in the same family
(e.g. after an accepted invite or after an account deletion).

Replace it with no DB-level unique constraint — the
no_duplicate_pending_invitation_in_family model validation is the
sole enforcer and correctly scopes uniqueness to pending rows only.

https://claude.ai/code/session_01F8WaH5TmtdUWwhHnVoQ6Gm

* Replace blanket unique index with partial unique index on pending invitations

Instead of dropping the DB-level uniqueness constraint entirely, replace
the unconditional unique index on (email, family_id) with a partial unique
index scoped to WHERE accepted_at IS NULL. This enforces the invariant at
the DB layer (no two non-accepted invitations for the same email in a
family) while allowing re-invites once a prior invitation has been accepted.

https://claude.ai/code/session_01F8WaH5TmtdUWwhHnVoQ6Gm

* Fix migration version and make remove_index reversible

- Change Migration[8.0] to Migration[7.2] to match the rest of the codebase
- Pass column names to remove_index so Rails can reconstruct the old index on rollback

https://claude.ai/code/session_01F8WaH5TmtdUWwhHnVoQ6Gm

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-14 11:32:33 +01:00