Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ gem "faraday-multipart"
gem "inline_svg"
gem "octokit"
gem "pagy"
gem "rails-i18n"
gem "rails-settings-cached"
gem "tzinfo-data", platforms: %i[windows jruby]
gem "csv"
Expand Down
1 change: 1 addition & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -841,6 +841,7 @@ DEPENDENCIES
rack-cors
rack-mini-profiler
rails (~> 7.2.2)
rails-i18n
rails-settings-cached
rchardet
redcarpet
Expand Down
15 changes: 13 additions & 2 deletions app/controllers/snaptrade_items_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -221,8 +221,19 @@ def complete_account_setup

if errors.any?
# Partial success - some linked, some failed
redirect_to accounts_path, notice: t(".partial_success", linked: linked_count, failed: errors.size,
default: "Linked #{linked_count} account(s). #{errors.size} failed to link.")
linked_message = if I18n.exists?("#{controller_path.tr('/', '.')}.#{action_name}.partial_success_linked", I18n.locale)
t(".partial_success_linked", count: linked_count)
else
linked_count
end
failed_message = if I18n.exists?("#{controller_path.tr('/', '.')}.#{action_name}.partial_success_failed", I18n.locale)
t(".partial_success_failed", count: errors.size)
else
errors.size
end
redirect_to accounts_path,
notice: t(".partial_success", linked: linked_message, failed: failed_message,
default: "Linked #{linked_count} account(s). #{errors.size} failed to link.")
else
redirect_to accounts_path, notice: t(".success", count: linked_count, default: "Successfully linked #{linked_count} account(s).")
end
Expand Down
25 changes: 13 additions & 12 deletions app/helpers/languages_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -155,18 +155,19 @@ module LanguagesHelper

# Locales with complete/extensive translations
SUPPORTED_LOCALES = [
"en", # English - 71 translation files
"fr", # French - 61 translation files
"de", # German - 62 translation files
"es", # Spanish - 61 translation files
"tr", # Turkish - 58 translation files
"nb", # Norwegian Bokmål - 57 translation files
"ca", # Catalan - 57 translation files
"ro", # Romanian - 62 translation files
"pt-BR", # Brazilian Portuguese - 60 translation files
"zh-CN", # Chinese (Simplified) - 59 translation files
"zh-TW", # Chinese (Traditional) - 63 translation files
"nl" # Dutch - 73 translation files
"en", # English
"fr", # French
"de", # German
"es", # Spanish
"tr", # Turkish
"nb", # Norwegian Bokmål
"ca", # Catalan
"ro", # Romanian
"pl", # Polish
"pt-BR", # Brazilian Portuguese
"zh-CN", # Chinese (Simplified)
"zh-TW", # Chinese (Traditional)
"nl" # Dutch
].freeze

COUNTRY_MAPPING = {
Expand Down
2 changes: 1 addition & 1 deletion app/views/import/confirms/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
<%= t(".#{step_mapping_class.name.demodulize.underscore}_title", import_type: @import.type.underscore.humanize) %>
</h1>
<p class="text-secondary text-sm">
<%= t(".#{step_mapping_class.name.demodulize.underscore}_description", import_type: @import.type.underscore.humanize, product_name: product_name) %>
<%= t(".#{step_mapping_class.name.demodulize.underscore}_description", import_type: @import.type.underscore.humanize, product: product_name, product_name: product_name) %>
</p>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/views/pdf_import_mailer/next_steps.html.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<h1><%= t(".greeting", name: @user.display_name) %></h1>

<p><%= t(".intro", product: product_name) %></p>
<p><%= t(".intro", product_name: product_name, product: product_name) %></p>

<h2><%= t(".document_type_label") %></h2>
<p><strong><%= @pdf_import.document_type.present? ? t("imports.document_types.#{@pdf_import.document_type}") : t("imports.document_types.other") %></strong></p>
Expand Down
2 changes: 1 addition & 1 deletion app/views/pdf_import_mailer/next_steps.text.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<%= t(".greeting", name: @user.display_name) %>

<%= t(".intro", product: product_name) %>
<%= t(".intro", product_name: product_name, product: product_name) %>

<%= t(".document_type_label") %>
<%= @pdf_import.document_type ? t("imports.document_types.#{@pdf_import.document_type}") : t("imports.document_types.unknown") %>
Expand Down
2 changes: 1 addition & 1 deletion app/views/subscriptions/upgrade.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<%= image_tag "logo-color.png", class: "w-16 mb-6" %>

<% if Current.family.trialing? %>
<p class="text-xl lg:text-3xl text-primary font-display font-medium"><%= t("subscriptions.upgrade.trialing", days: Current.family.days_left_in_trial) %></p>
<p class="text-xl lg:text-3xl text-primary font-display font-medium"><%= t("subscriptions.upgrade.trialing", count: Current.family.days_left_in_trial, days: Current.family.days_left_in_trial) %></p>
<% else %>
<p class="text-xl lg:text-3xl text-primary font-display font-medium"><%= t("subscriptions.upgrade.trial_over") %></p>
<% end %>
Expand Down
6 changes: 6 additions & 0 deletions config/locales/breadcrumbs/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
pl:
breadcrumbs:
exports: Eksporty
home: Strona główna
imports: Importy
153 changes: 153 additions & 0 deletions config/locales/doorkeeper.pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
pl:
activerecord:
attributes:
doorkeeper/application:
name: "Nazwa"
redirect_uri: "URI przekierowania"
errors:
models:
doorkeeper/application:
attributes:
redirect_uri:
fragment_present: "nie może zawierać fragmentu."
invalid_uri: "musi być poprawnym URI."
unspecified_scheme: "musi określać schemat."
relative_uri: "musi być bezwzględnym URI."
secured_uri: "musi być URI HTTPS/SSL."
forbidden_uri: "jest zabronione przez serwer."
scopes:
not_match_configured: "nie odpowiada zakresom skonfigurowanym na serwerze."

doorkeeper:
applications:
confirmations:
destroy: "Czy na pewno?"
buttons:
edit: "Edytuj"
destroy: "Usuń"
submit: "Zapisz"
cancel: "Anuluj"
authorize: "Autoryzuj"
form:
error: "Ups! Sprawdź formularz pod kątem możliwych błędów"
help:
confidential: "Aplikacja będzie używana tam, gdzie sekret klienta może pozostać poufny. Natywne aplikacje mobilne i aplikacje Single Page App są uznawane za niepoufne."
redirect_uri: "Użyj jednej linii dla każdego URI"
blank_redirect_uri: "Pozostaw puste, jeśli skonfigurowano dostawcę do użycia Client Credentials, Resource Owner Password Credentials lub innego typu grant, który nie wymaga URI przekierowania."
scopes: "Oddzielaj zakresy spacjami. Pozostaw puste, aby użyć domyślnych zakresów."
edit:
title: "Edytuj aplikację"
index:
title: "Twoje aplikacje"
new: "Nowa aplikacja"
name: "Nazwa"
callback_url: "URL callback"
confidential: "Poufna?"
actions: "Akcje"
confidentiality:
"yes": "Tak"
"no": "Nie"
new:
title: "Nowa aplikacja"
show:
title: "Aplikacja: %{name}"
application_id: "UID"
secret: "Sekret"
secret_hashed: "Zahaszowany sekret"
scopes: "Zakresy"
confidential: "Poufna"
callback_urls: "URL-e callback"
actions: "Akcje"
not_defined: "Nie zdefiniowano"

authorizations:
buttons:
authorize: "Autoryzuj"
deny: "Odmów"
error:
title: "Wystąpił błąd"
new:
title: "Wymagana autoryzacja"
prompt: "Zezwolić aplikacji %{client_name} na użycie Twojego konta?"
able_to: "Ta aplikacja będzie mogła"
show:
title: "Kod autoryzacyjny"
form_post:
title: "Wyślij ten formularz"

authorized_applications:
confirmations:
revoke: "Czy na pewno?"
buttons:
revoke: "Cofnij"
index:
title: "Twoje autoryzowane aplikacje"
application: "Aplikacja"
created_at: "Utworzono"
date_format: "%Y-%m-%d %H:%M:%S"

pre_authorization:
status: "Wstępna autoryzacja"

errors:
messages:
invalid_request:
unknown: "Żądanie nie zawiera wymaganego parametru, zawiera nieobsługiwaną wartość parametru lub jest nieprawidłowo sformułowane."
missing_param: "Brakuje wymaganego parametru: %{value}."
request_not_authorized: "Żądanie wymaga autoryzacji. Wymagany parametr autoryzacji jest brakujący lub nieprawidłowy."
invalid_code_challenge: "Code challenge jest wymagany."
invalid_redirect_uri: "Żądany URI przekierowania jest nieprawidłowy lub nie zgadza się z URI przekierowania klienta."
unauthorized_client: "Klient nie ma uprawnień do wykonania tego żądania tą metodą."
access_denied: "Właściciel zasobu lub serwer autoryzacji odrzucił żądanie."
invalid_scope: "Żądany zakres jest nieprawidłowy, nieznany lub błędnie sformułowany."
invalid_code_challenge_method:
zero: "Serwer autoryzacji nie obsługuje PKCE, ponieważ brak akceptowanych wartości code_challenge_method."
one: "code_challenge_method musi mieć wartość %{challenge_methods}."
few: "code_challenge_method musi mieć jedną z wartości: %{challenge_methods}."
many: "code_challenge_method musi mieć jedną z wartości: %{challenge_methods}."
other: "code_challenge_method musi mieć jedną z wartości: %{challenge_methods}."
server_error: "Serwer autoryzacji napotkał nieoczekiwany warunek, który uniemożliwił realizację żądania."
temporarily_unavailable: "Serwer autoryzacji jest chwilowo niedostępny z powodu przeciążenia lub prac serwisowych."

credential_flow_not_configured: "Przepływ Resource Owner Password Credentials zakończył się niepowodzeniem, ponieważ Doorkeeper.configure.resource_owner_from_credentials nie jest skonfigurowany."
resource_owner_authenticator_not_configured: "Wyszukiwanie właściciela zasobu zakończyło się niepowodzeniem, ponieważ Doorkeeper.configure.resource_owner_authenticator nie jest skonfigurowany."
admin_authenticator_not_configured: "Dostęp do panelu administratora jest zabroniony, ponieważ Doorkeeper.configure.admin_authenticator nie jest skonfigurowany."

unsupported_response_type: "Serwer autoryzacji nie obsługuje tego typu odpowiedzi."
unsupported_response_mode: "Serwer autoryzacji nie obsługuje tego trybu odpowiedzi."

invalid_client: "Uwierzytelnienie klienta nie powiodło się z powodu nieznanego klienta, braku uwierzytelnienia klienta lub nieobsługiwanej metody uwierzytelnienia."
invalid_grant: "Podany grant autoryzacyjny jest nieprawidłowy, wygasł, został cofnięty, nie odpowiada URI przekierowania użytemu w żądaniu autoryzacji lub został wydany innemu klientowi."
unsupported_grant_type: "Typ grantu autoryzacyjnego nie jest obsługiwany przez serwer autoryzacji."

invalid_token:
revoked: "Token dostępu został cofnięty"
expired: "Token dostępu wygasł"
unknown: "Token dostępu jest nieprawidłowy"
revoke:
unauthorized: "Nie masz uprawnień do cofnięcia tego tokenu"

forbidden_token:
missing_scope: "Dostęp do tego zasobu wymaga zakresu \"%{oauth_scopes}\"."

flash:
applications:
create:
notice: "Aplikacja została utworzona."
destroy:
notice: "Aplikacja została usunięta."
update:
notice: "Aplikacja została zaktualizowana."
authorized_applications:
destroy:
notice: "Autoryzacja aplikacji została cofnięta."

layouts:
admin:
title: "Doorkeeper"
nav:
oauth2_provider: "Dostawca OAuth2"
applications: "Aplikacje"
home: "Strona główna"
application:
title: "Wymagana autoryzacja OAuth"
5 changes: 5 additions & 0 deletions config/locales/mailers/invitation_mailer/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
pl:
invitation_mailer:
invite_email:
subject: "%{inviter} zaprosił(a) Cię do dołączenia do swojego gospodarstwa domowego w %{product_name}!"
5 changes: 5 additions & 0 deletions config/locales/mailers/pdf_import_mailer/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
pl:
pdf_import_mailer:
next_steps:
subject: "Twój dokument PDF został przeanalizowany - %{product_name}"
23 changes: 23 additions & 0 deletions config/locales/models/account/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
pl:
activerecord:
attributes:
account:
balance: Saldo
currency: Waluta
family: "%{moniker}"
family_id: "%{moniker}"
name: Nazwa
subtype: Podtyp
models:
account: Konto
account/bond: Obligacje
account/credit_card: Karta kredytowa
account/crypto: Kryptowaluty
account/depository: Konto bankowe
account/investment: Inwestycje
account/loan: Pożyczka
account/other_asset: Inne aktywa
account/other_liability: Inne zobowiązania
account/property: Nieruchomość
account/vehicle: Pojazd
Comment thread
coderabbitai[bot] marked this conversation as resolved.
11 changes: 11 additions & 0 deletions config/locales/models/address/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
pl:
address:
attributes:
country: Kraj
line1: Ulica i numer
line2: Numer mieszkania (opcjonalnie)
locality: Miejscowość
postal_code: Kod pocztowy
region: Województwo/Region
format: "%{line1} %{line2}, %{locality}, %{region} %{postal_code} %{country}"
7 changes: 7 additions & 0 deletions config/locales/models/category/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
pl:
models:
category:
uncategorized: Bez kategorii
other_investments: Inne inwestycje
investment_contributions: Wpłaty inwestycyjne
5 changes: 5 additions & 0 deletions config/locales/models/coinbase_account/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
pl:
coinbase:
processor:
paid_via: Zapłacono przez %{method}
14 changes: 14 additions & 0 deletions config/locales/models/coinstats_item/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
pl:
models:
coinstats_item:
syncer:
importing_wallets: Importowanie portfeli z CoinStats...
checking_configuration: Sprawdzanie konfiguracji portfela...
wallets_need_setup:
one: "%{count} portfel wymaga konfiguracji..."
few: "%{count} portfele wymagają konfiguracji..."
many: "%{count} portfeli wymaga konfiguracji..."
other: "%{count} portfela wymaga konfiguracji..."
processing_holdings: Przetwarzanie posiadanych aktywów...
calculating_balances: Obliczanie sald...
9 changes: 9 additions & 0 deletions config/locales/models/entry/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
pl:
activerecord:
errors:
models:
entry:
attributes:
base:
invalid_sell_quantity: nie można sprzedać %{sell_qty} udziałów %{ticker}, ponieważ posiadasz tylko %{current_qty} udziałów
13 changes: 13 additions & 0 deletions config/locales/models/import/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
pl:
activerecord:
attributes:
import:
currency: Waluta
number_format: Format liczby
errors:
models:
import:
attributes:
raw_file_str:
invalid_csv_format: nie jest prawidłowym formatem CSV
4 changes: 4 additions & 0 deletions config/locales/models/provider_warnings/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
pl:
provider_warnings:
limited_investment_data: Dane inwestycyjne od tego dostawcy są ograniczone. Etykiety transakcji (Kupno, Sprzedaż, Dywidenda) są niedostępne, co może wpłynąć na dokładność budżetu. Rozważ tworzenie reguł wykluczenia lub kategoryzacji transakcji inwestycyjnych.
9 changes: 9 additions & 0 deletions config/locales/models/time_series/value/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
pl:
activemodel:
errors:
models:
time_series/value:
attributes:
value:
must_be_a_money_or_numeric: musi być typu Money lub Numeric
11 changes: 11 additions & 0 deletions config/locales/models/transaction/pl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
pl:
activerecord:
errors:
models:
transaction:
attributes:
attachments:
too_many: nie może przekraczać %{max} plików na transakcję
too_large: plik %{index} jest zbyt duży (maksymalnie %{max_mb}MB)
invalid_format: plik %{index} ma nieobsługiwany format (%{file_format})
Loading
Loading