Add localization for onboarding goals across multiple languages (#873)

* Add localization for onboarding goals across multiple languages

* Add password requirements localization for multiple languages

* Refactor localization keys for authentication messages

* Add `oidc` localization key for multiple languages

* Add OIDC account localization for multiple languages

* Add localization for trial and profile setup across multiple languages

* Refactor OIDC button label fallback to prioritize label presence over localization key

* Refactor onboarding tests to use I18n for text assertions and button labels

* Linter

* Last test fix?!?

* We keep both `oidc` and `openid_connect` due to contatenation issues

---------

Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
This commit is contained in:
tlink
2026-02-03 14:49:21 +01:00
committed by GitHub
parent 011957b4cb
commit 9a9ebb147b
60 changed files with 1220 additions and 383 deletions

View File

@@ -23,11 +23,11 @@
<% end %>
<% if controller_name == "sessions" %>
<p class="text-sm text-center hidden md:block">
<%= tag.span t(".no_account", product_name: product_name), class: "text-secondary" %> <%= link_to t(".sign_up"), new_registration_path, class: "font-medium text-primary hover:underline transition" %>
<%= tag.span t("layouts.auth.no_account", product_name: product_name), class: "text-secondary" %> <%= link_to t("layouts.auth.sign_up"), new_registration_path, class: "font-medium text-primary hover:underline transition" %>
</p>
<% elsif controller_name == "registrations" %>
<p class="text-sm text-center text-gray-600 hidden md:block">
<%= t(".existing_account") %> <%= link_to t(".sign_in"), new_session_path, class: "font-medium text-primary hover:underline transition" %>
<%= t("layouts.auth.existing_account") %> <%= link_to t("layouts.auth.sign_in"), new_session_path, class: "font-medium text-primary hover:underline transition" %>
</p>
<% end %>
</div>

View File

@@ -1,61 +1,60 @@
<%
header_title @user_exists ? "Link OIDC Account" : "Create Account"
header_title @user_exists ? t("oidc_accounts.link.title_link") : t("oidc_accounts.link.title_create")
%>
<% if @user_exists %>
<div class="mb-6 p-4 bg-yellow-50 border border-yellow-200 rounded-md">
<h3 class="text-sm font-medium text-yellow-800 mb-2">Verify Your Identity</h3>
<h3 class="text-sm font-medium text-yellow-800 mb-2"><%= t("oidc_accounts.link.verify_heading") %></h3>
<p class="text-sm text-yellow-700">
To link your <%= @pending_auth["provider"] %> account<% if @pending_auth["email"].present? %> (<%= @pending_auth["email"] %>)<% end %>,
please verify your identity by entering your password.
<% email_suffix = @pending_auth["email"].present? ? t("oidc_accounts.link.email_suffix_html", email: @pending_auth["email"]) : "" %>
<%= t("oidc_accounts.link.verify_description_html", provider: @pending_auth["provider"], email_suffix: email_suffix).html_safe %>
</p>
</div>
<%= styled_form_with url: create_link_oidc_account_path, class: "space-y-4", data: { turbo: false } do |form| %>
<%= form.email_field :email,
label: "Email",
autofocus: false,
autocomplete: "email",
required: "required",
placeholder: "Enter your email",
value: @email %>
label: t("oidc_accounts.link.email_label"),
autofocus: false,
autocomplete: "email",
required: "required",
placeholder: t("oidc_accounts.link.email_placeholder"),
value: @email %>
<%= form.password_field :password,
label: "Password",
required: "required",
placeholder: "Enter your password",
autocomplete: "current-password" %>
label: t("oidc_accounts.link.password_label"),
required: "required",
placeholder: t("oidc_accounts.link.password_placeholder"),
autocomplete: "current-password" %>
<div class="text-sm text-gray-600 mt-2">
<p>This helps ensure that only you can link external accounts to your profile.</p>
<p><%= t("oidc_accounts.link.verify_hint") %></p>
</div>
<%= form.submit "Link Account" %>
<%= form.submit t("oidc_accounts.link.submit_link") %>
<% end %>
<% else %>
<div class="mb-6 p-4 bg-blue-50 border border-blue-200 rounded-md">
<h3 class="text-sm font-medium text-blue-800 mb-2">Create New Account</h3>
<h3 class="text-sm font-medium text-blue-800 mb-2"><%= t("oidc_accounts.link.create_heading") %></h3>
<p class="text-sm text-blue-700">
No account found with the email <strong><%= @pending_auth["email"] %></strong>.
Click below to create a new account using your <%= @pending_auth["provider"] %> identity.
<%= t("oidc_accounts.link.create_description_html", email: @pending_auth["email"], provider: @pending_auth["provider"]).html_safe %>
</p>
</div>
<div class="space-y-4">
<div class="p-4 bg-container border border-secondary rounded-md">
<p class="text-sm text-primary">
<strong>Email:</strong> <%= @pending_auth["email"] %>
<strong><%= t("oidc_accounts.link.info_email") %></strong> <%= @pending_auth["email"] %>
</p>
<% if @pending_auth["name"].present? %>
<p class="text-sm text-primary mt-2">
<strong>Name:</strong> <%= @pending_auth["name"] %>
<strong><%= t("oidc_accounts.link.info_name") %></strong> <%= @pending_auth["name"] %>
</p>
<% end %>
</div>
<% if @allow_account_creation %>
<%= render DS::Button.new(
text: "Create Account",
text: t("oidc_accounts.link.submit_create"),
href: create_user_oidc_account_path,
full_width: true,
variant: :primary,
@@ -72,9 +71,9 @@
<div class="mt-6 text-center">
<%= render DS::Link.new(
text: "Cancel",
text: t("oidc_accounts.link.cancel"),
href: new_session_path,
variant: :default,
class: "font-medium text-sm text-primary hover:underline transition"
) %>
</div>
</div>

View File

@@ -1,8 +1,8 @@
<%= render DS::Button.new(
text: "Sign out",
icon: "log-out",
icon_position: :right,
variant: "ghost",
href: session_path(Current.session),
method: :delete
) %>
<%= render DS::Button.new(
text: t("onboardings.logout.sign_out"),
icon: "log-out",
icon_position: :right,
variant: "ghost",
href: session_path(Current.session),
method: :delete
) %>

View File

@@ -1,10 +1,10 @@
<%# locals: (user:) %>
<% steps = [
{ name: "Setup", path: onboarding_path, is_complete: user.first_name.present?, step_number: 1 },
{ name: "Preferences", path: preferences_onboarding_path, is_complete: user.set_onboarding_preferences_at.present?, step_number: 2 },
{ name: "Goals", path: goals_onboarding_path , is_complete: user.set_onboarding_goals_at.present?, step_number: 3 },
{ name: "Start", path: trial_onboarding_path, is_complete: user.onboarded?, step_number: 4 },
{ name: t("onboardings.header.setup"), path: onboarding_path, is_complete: user.first_name.present?, step_number: 1 },
{ name: t("onboardings.header.preferences"), path: preferences_onboarding_path, is_complete: user.set_onboarding_preferences_at.present?, step_number: 2 },
{ name: t("onboardings.header.goals"), path: goals_onboarding_path, is_complete: user.set_onboarding_goals_at.present?, step_number: 3 },
{ name: t("onboardings.header.start"), path: trial_onboarding_path, is_complete: user.onboarded?, step_number: 4 },
] %>
<%# Don't show last step if self hosted %>

View File

@@ -15,8 +15,8 @@
<div class="grow max-w-lg w-full mx-auto bg-surface flex flex-col justify-center md:py-0 py-6 px-4 md:px-0">
<div>
<div class="space-y-1 mb-6 text-center">
<h1 class="text-2xl font-medium md:text-2xl">What brings you here?</h1>
<p class="text-secondary text-sm">Select one or more goals that you have with using <%= product_name %> as your personal finance tool.</p>
<h1 class="text-2xl font-medium md:text-2xl"><%= t("onboardings.goals.title") %></h1>
<p class="text-secondary text-sm"><%= t("onboardings.goals.subtitle", product_name: product_name) %></p>
</div>
<%= form_with model: @user do |form| %>
@@ -26,15 +26,15 @@
<div class="space-y-3">
<% [
{ icon: "layers", label: "See all my accounts in one place", value: "unified_accounts" },
{ icon: "banknote", label: "Understand cashflow and expenses", value: "cashflow" },
{ icon: "pie-chart", label: "Manage financial plans and budgeting", value: "budgeting" },
{ icon: "users", label: "Manage finances with a partner", value: "partner" },
{ icon: "area-chart", label: "Track investments", value: "investments" },
{ icon: "bot", label: "Let AI help me understand my finances", value: "ai_insights" },
{ icon: "settings-2", label: "Analyze and optimize accounts", value: "optimization" },
{ icon: "frown", label: "Reduce financial stress or anxiety", value: "reduce_stress" }
].each do |goal| %>
{ icon: "layers", label: t("onboardings.goals.unified_accounts"), value: "unified_accounts" },
{ icon: "banknote", label: t("onboardings.goals.cashflow"), value: "cashflow" },
{ icon: "pie-chart", label: t("onboardings.goals.budgeting"), value: "budgeting" },
{ icon: "users", label: t("onboardings.goals.partner"), value: "partner" },
{ icon: "area-chart", label: t("onboardings.goals.investments"), value: "investments" },
{ icon: "bot", label: t("onboardings.goals.ai_insights"), value: "ai_insights" },
{ icon: "settings-2", label: t("onboardings.goals.optimization"), value: "optimization" },
{ icon: "frown", label: t("onboardings.goals.reduce_stress"), value: "reduce_stress" }
].each do |goal| %>
<label class="flex items-center gap-2.5 p-4 rounded-lg border border-tertiary cursor-pointer hover:bg-container transition-colors [&:has(input:checked)]:border-solid [&:has(input:checked)]:bg-container">
<%= form.check_box :goals, { multiple: true, class: "sr-only" }, goal[:value], nil %>
<%= icon goal[:icon] %>
@@ -45,7 +45,7 @@
<div class="mt-6">
<%= render DS::Button.new(
text: "Next",
text: t("onboardings.goals.submit"),
full_width: true
) %>
</div>

View File

@@ -28,34 +28,34 @@
</div>
<% placeholder_series_data = [
{ date: Date.current - 14.days, value: 200 },
{ date: Date.current - 13.days, value: 200 },
{ date: Date.current - 12.days, value: 220 },
{ date: Date.current - 11.days, value: 220 },
{ date: Date.current - 10.days, value: 220 },
{ date: Date.current - 9.days, value: 220 },
{ date: Date.current - 8.days, value: 220 },
{ date: Date.current - 7.days, value: 220 },
{ date: Date.current - 6.days, value: 230 },
{ date: Date.current - 5.days, value: 230 },
{ date: Date.current - 4.days, value: 250 },
{ date: Date.current - 3.days, value: 250 },
{ date: Date.current - 2.days, value: 265 },
{ date: Date.current - 1.day, value: 265 },
{ date: Date.current, value: 265 }
] %>
{ date: Date.current - 14.days, value: 200 },
{ date: Date.current - 13.days, value: 200 },
{ date: Date.current - 12.days, value: 220 },
{ date: Date.current - 11.days, value: 220 },
{ date: Date.current - 10.days, value: 220 },
{ date: Date.current - 9.days, value: 220 },
{ date: Date.current - 8.days, value: 220 },
{ date: Date.current - 7.days, value: 220 },
{ date: Date.current - 6.days, value: 230 },
{ date: Date.current - 5.days, value: 230 },
{ date: Date.current - 4.days, value: 250 },
{ date: Date.current - 3.days, value: 250 },
{ date: Date.current - 2.days, value: 265 },
{ date: Date.current - 1.day, value: 265 },
{ date: Date.current, value: 265 }
] %>
<% placeholder_series = Series.from_raw_values(placeholder_series_data) %>
<div class="flex items-center w-2/5">
<div class="h-12 w-full">
<div
id="previewChart"
class="h-full w-full"
data-controller="time-series-chart"
data-time-series-chart-data-value="<%= placeholder_series.to_json %>"
data-time-series-chart-use-labels-value="false"
data-time-series-chart-use-tooltip-value="false"></div>
id="previewChart"
class="h-full w-full"
data-controller="time-series-chart"
data-time-series-chart-data-value="<%= placeholder_series.to_json %>"
data-time-series-chart-use-labels-value="false"
data-time-series-chart-use-tooltip-value="false"></div>
</div>
</div>
</div>
@@ -68,26 +68,26 @@
<%= form.hidden_field :redirect_to, value: "goals" %>
<div class="mb-4">
<%= form.select :theme, [["System", "system"], ["Light", "light"], ["Dark", "dark"]], { label: "Color theme" }, data: { action: "onboarding#setTheme" } %>
<%= form.select :theme, [[t(".theme_system"), "system"], [t(".theme_light"), "light"], [t(".theme_dark"), "dark"]], { label: t(".color_theme") }, data: { action: "onboarding#setTheme" } %>
</div>
<div class="space-y-4 mb-4">
<%= form.fields_for :family do |family_form| %>
<%= family_form.select :locale,
language_options,
{ label: t(".locale"), required: true, selected: params[:locale] || @user.locale || I18n.locale },
{ data: { action: "onboarding#setLocale" } } %>
language_options,
{ label: t(".locale"), required: true, selected: params[:locale] || @user.locale || I18n.locale },
{ data: { action: "onboarding#setLocale" } } %>
<%= family_form.select :currency,
Money::Currency.as_options.map { |currency| [ "#{currency.name} (#{currency.iso_code})", currency.iso_code ] },
{ label: t(".currency"), required: true, selected: params[:currency] || @user.family.currency },
{ data: { action: "onboarding#setCurrency" } } %>
Money::Currency.as_options.map { |currency| [ "#{currency.name} (#{currency.iso_code})", currency.iso_code ] },
{ label: t(".currency"), required: true, selected: params[:currency] || @user.family.currency },
{ data: { action: "onboarding#setCurrency" } } %>
<%= family_form.select :date_format,
Family::DATE_FORMATS,
{ label: t(".date_format"), required: true, selected: params[:date_format] || @user.family.date_format },
{ data: { action: "onboarding#setDateFormat" } } %>
Family::DATE_FORMATS,
{ label: t(".date_format"), required: true, selected: params[:date_format] || @user.family.date_format },
{ data: { action: "onboarding#setDateFormat" } } %>
<% end %>
</div>

View File

@@ -13,8 +13,8 @@
<div class="grow max-w-lg w-full mx-auto bg-surface flex flex-col justify-center md:py-0 py-6 px-4 md:px-0">
<div>
<div class="space-y-1 mb-6 text-center">
<h1 class="text-2xl font-medium md:text-2xl">Let's set up your account</h1>
<p class="text-secondary text-sm">First things first, let's get your profile set up.</p>
<h1 class="text-2xl font-medium md:text-2xl"><%= t(".title") %></h1>
<p class="text-secondary text-sm"><%= t(".subtitle") %></p>
</div>
<%= styled_form_with model: @user do |form| %>
@@ -26,24 +26,24 @@
</div>
<div class="flex flex-col md:flex-row md:justify-between md:items-center md:gap-4 space-y-4 md:space-y-0 mb-4">
<%= form.text_field :first_name, placeholder: "First name", label: "First name", container_class: "bg-container md:w-1/2 w-full", required: true %>
<%= form.text_field :last_name, placeholder: "Last name", label: "Last name", container_class: "bg-container md:w-1/2 w-full", required: true %>
<%= form.text_field :first_name, placeholder: t(".first_name_placeholder"), label: t(".first_name"), container_class: "bg-container md:w-1/2 w-full", required: true %>
<%= form.text_field :last_name, placeholder: t(".last_name_placeholder"), label: t(".last_name"), container_class: "bg-container md:w-1/2 w-full", required: true %>
</div>
<% unless @invitation %>
<div class="space-y-4 mb-4">
<%= form.fields_for :family do |family_form| %>
<%= family_form.text_field :name, placeholder: "Household name", label: "Household name" %>
<%= family_form.text_field :name, placeholder: t(".household_name_placeholder"), label: t(".household_name") %>
<%= family_form.select :country,
country_options,
{ label: "Country" },
required: true %>
country_options,
{ label: t(".country") },
required: true %>
<% end %>
</div>
<% end %>
<%= form.submit "Continue" %>
<%= form.submit t(".submit") %>
<% end %>
</div>
</div>

View File

@@ -17,43 +17,43 @@
<%= image_tag "logo-color.png", class: "w-16 mb-6" %>
<p class="text-xl lg:text-3xl text-primary font-display font-medium">
Try Sure for 45 days
<%= t(".title") %>
</p>
<h2 class="text-xl lg:text-3xl font-display text-secondary font-medium mb-2">
Data will be deleted then
<%= t(".data_deletion") %>
</h2>
<p class="text-sm text-secondary text-center mb-8">
Starting today you can give the product a good look. <br/>If you like it, self-host or contribute to continue using it here.
<%= t(".description_html").html_safe %>
</p>
<div class="w-full">
<% if Current.family.can_start_trial? %>
<%= render DS::Button.new(
text: "Try Sure for 45 days",
href: subscription_path,
full_width: true,
data: { turbo: false }
) %>
text: t(".try_button"),
href: subscription_path,
full_width: true,
data: { turbo: false }
) %>
<% elsif Current.family.trialing? %>
<%= render DS::Link.new(
text: "Continue trial",
text: t(".continue_trial"),
href: root_path,
full_width: true,
) %>
) %>
<% else %>
<%= render DS::Link.new(
text: "Upgrade",
text: t(".upgrade"),
href: upgrade_subscription_path,
full_width: true,
) %>
) %>
<% end %>
</div>
</div>
<div class="space-y-8">
<h2 class="text-center text-lg lg:text-2xl font-medium text-primary">How things work here</h2>
<h2 class="text-center text-lg lg:text-2xl font-medium text-primary"><%= t(".how_it_works") %></h2>
<div class="flex gap-3">
<div class="rounded-xl p-1 bg-gray-400/20 theme-dark:bg-gray-500/20 flex flex-col justify-between items-center text-secondary">
@@ -64,18 +64,18 @@
<div class="space-y-12">
<div class="space-y-1.5 text-sm">
<p class="text-primary font-medium">Today</p>
<p class="text-secondary">You'll get free access to Sure for 45 days on our AWS.</p>
<p class="text-primary font-medium"><%= t(".today") %></p>
<p class="text-secondary"><%= t(".today_description") %></p>
</div>
<div class="space-y-1.5 text-sm">
<p class="text-primary font-medium">In 40 days (<%= 40.days.from_now.strftime("%B %d") %>)</p>
<p class="text-secondary">We'll notify you to remind you to export your data.</p>
<p class="text-primary font-medium"><%= t(".in_40_days", date: l(40.days.from_now.to_date, format: :long)) %></p>
<p class="text-secondary"><%= t(".in_40_days_description") %></p>
</div>
<div class="space-y-1.5 text-sm">
<p class="text-primary font-medium">In 45 days (<%= 45.days.from_now.strftime("%B %d") %>)</p>
<p class="text-secondary">We delete your data &mdash; contribute to continue using Sure here!</p>
<p class="text-primary font-medium"><%= t(".in_45_days", date: l(45.days.from_now.to_date, format: :long)) %></p>
<p class="text-secondary"><%= t(".in_45_days_description") %></p>
</div>
</div>
</div>

View File

@@ -74,19 +74,19 @@
<div class="space-y-1 my-4">
<div class="flex items-center gap-2 text-secondary text-sm" data-password-validator-target="requirementType" data-requirement-type="length">
<%= icon("check", size: "sm") %>
<span>Minimum 8 characters</span>
<span><%= t(".password_requirements.length") %></span>
</div>
<div class="flex items-center gap-2 text-secondary text-sm" data-password-validator-target="requirementType" data-requirement-type="case">
<%= icon("check", size: "sm") %>
<span>Upper and lowercase letters</span>
<span><%= t(".password_requirements.case") %></span>
</div>
<div class="flex items-center gap-2 text-secondary text-sm" data-password-validator-target="requirementType" data-requirement-type="number">
<%= icon("check", size: "sm") %>
<span>A number (0-9)</span>
<span><%= t(".password_requirements.number") %></span>
</div>
<div class="flex items-center gap-2 text-secondary text-sm" data-password-validator-target="requirementType" data-requirement-type="special">
<%= icon("check", size: "sm") %>
<span>A special character (!, @, #, $, %, etc)</span>
<span><%= t(".password_requirements.special") %></span>
</div>
</div>
</div>

View File

@@ -80,7 +80,7 @@
<% if provider[:icon].present? %>
<%= icon provider[:icon], size: "sm" %>
<% end %>
<span><%= provider[:label].presence || provider[:name].to_s.titleize %></span>
<span><%= provider[:label].presence || t(".#{provider_id}", default: provider[:name].to_s.titleize) %></span>
<% end %>
<% end %>
<% end %>

View File

@@ -35,7 +35,7 @@ default: &default
- id: "oidc"
strategy: "openid_connect"
name: "openid_connect"
label: <%= ENV.fetch("OIDC_BUTTON_LABEL", "Sign in with OpenID Connect") %>
label: <%= ENV.fetch("OIDC_BUTTON_LABEL", "") %>
icon: <%= ENV.fetch("OIDC_BUTTON_ICON", "key") %>
# Per-provider credentials (optional, falls back to global OIDC_* vars)
issuer: <%= ENV["OIDC_ISSUER"] %>

View File

@@ -2,4 +2,32 @@
ca:
oidc_accounts:
link:
account_creation_disabled: La creació de comptes nous mitjançant inici de sessió únic està inhabilitada. Contacta amb un administrador per crear el teu compte.
title_link: Enllaçar compte OIDC
title_create: Crear compte
verify_heading: Verificar la vostra identitat
verify_description_html: "Per enllaçar el vostre compte %{provider}%{email_suffix}, verifiqueu la vostra identitat introduint la contrasenya."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: Correu electrònic
email_placeholder: Introduïu el vostre correu electrònic
password_label: Contrasenya
password_placeholder: Introduïu la vostra contrasenya
verify_hint: Això garanteix que només vós pugueu enllaçar comptes externs al vostre perfil.
submit_link: Enllaçar compte
create_heading: Crear compte nou
create_description_html: "No s'ha trobat cap compte amb el correu electrònic <strong>%{email}</strong>. Feu clic a baix per crear un compte nou amb la vostra identitat %{provider}."
info_email: "Correu electrònic:"
info_name: "Nom:"
submit_create: Crear compte
account_creation_disabled: La creació de comptes mitjançant l'inici de sessió únic està desactivada. Contacteu amb un administrador.
cancel: Cancel·lar
new_user:
title: Completar el compte
heading: Crear el compte
description: Confirmeu les vostres dades per completar la creació del compte amb la vostra identitat %{provider}.
email_label: Correu electrònic (del proveïdor SSO)
first_name_label: Nom
first_name_placeholder: Introduïu el vostre nom
last_name_label: Cognom
last_name_placeholder: Introduïu el vostre cognom
submit: Crear compte
cancel: Cancel·lar

View File

@@ -0,0 +1,33 @@
---
de:
oidc_accounts:
link:
title_link: OIDC-Konto verknüpfen
title_create: Konto erstellen
verify_heading: Identität bestätigen
verify_description_html: "Um Ihr %{provider}-Konto%{email_suffix} zu verknüpfen, bestätigen Sie bitte Ihre Identität mit Ihrem Passwort."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: E-Mail
email_placeholder: E-Mail-Adresse eingeben
password_label: Passwort
password_placeholder: Passwort eingeben
verify_hint: Dies stellt sicher, dass nur Sie externe Konten mit Ihrem Profil verknüpfen können.
submit_link: Konto verknüpfen
create_heading: Neues Konto erstellen
create_description_html: "Kein Konto mit der E-Mail <strong>%{email}</strong> gefunden. Klicken Sie unten, um ein neues Konto mit Ihrer %{provider}-Identität zu erstellen."
info_email: "E-Mail:"
info_name: "Name:"
submit_create: Konto erstellen
account_creation_disabled: Die Kontoerstellung über Single Sign-On ist deaktiviert. Bitte kontaktieren Sie einen Administrator.
cancel: Abbrechen
new_user:
title: Konto vervollständigen
heading: Konto erstellen
description: Bitte bestätigen Sie Ihre Daten, um die Kontoerstellung mit Ihrer %{provider}-Identität abzuschließen.
email_label: E-Mail (vom SSO-Anbieter)
first_name_label: Vorname
first_name_placeholder: Vorname eingeben
last_name_label: Nachname
last_name_placeholder: Nachname eingeben
submit: Konto erstellen
cancel: Abbrechen

View File

@@ -2,7 +2,24 @@
en:
oidc_accounts:
link:
title_link: Link OIDC Account
title_create: Create Account
verify_heading: Verify Your Identity
verify_description_html: "To link your %{provider} account%{email_suffix}, please verify your identity by entering your password."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: Email
email_placeholder: Enter your email
password_label: Password
password_placeholder: Enter your password
verify_hint: This helps ensure that only you can link external accounts to your profile.
submit_link: Link Account
create_heading: Create New Account
create_description_html: "No account found with the email <strong>%{email}</strong>. Click below to create a new account using your %{provider} identity."
info_email: "Email:"
info_name: "Name:"
submit_create: Create Account
account_creation_disabled: New account creation via single sign-on is disabled. Please contact an administrator to create your account.
cancel: Cancel
new_user:
title: Complete Your Account
heading: Create Your Account

View File

@@ -0,0 +1,33 @@
---
es:
oidc_accounts:
link:
title_link: Vincular cuenta OIDC
title_create: Crear cuenta
verify_heading: Verificar su identidad
verify_description_html: "Para vincular su cuenta de %{provider}%{email_suffix}, verifique su identidad ingresando su contraseña."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: Correo electrónico
email_placeholder: Ingrese su correo electrónico
password_label: Contraseña
password_placeholder: Ingrese su contraseña
verify_hint: Esto garantiza que solo usted pueda vincular cuentas externas a su perfil.
submit_link: Vincular cuenta
create_heading: Crear cuenta nueva
create_description_html: "No se encontró ninguna cuenta con el correo electrónico <strong>%{email}</strong>. Haga clic a continuación para crear una cuenta nueva con su identidad de %{provider}."
info_email: "Correo electrónico:"
info_name: "Nombre:"
submit_create: Crear cuenta
account_creation_disabled: La creación de cuentas mediante inicio de sesión único está desactivada. Contacte a un administrador.
cancel: Cancelar
new_user:
title: Completar su cuenta
heading: Crear su cuenta
description: Confirme sus datos para completar la creación de cuenta con su identidad de %{provider}.
email_label: Correo electrónico (del proveedor SSO)
first_name_label: Nombre
first_name_placeholder: Ingrese su nombre
last_name_label: Apellido
last_name_placeholder: Ingrese su apellido
submit: Crear cuenta
cancel: Cancelar

View File

@@ -2,4 +2,32 @@
fr:
oidc_accounts:
link:
account_creation_disabled: La création de nouveaux comptes via l'authentification unique est désactivée. Veuillez contacter un administrateur pour créer votre compte.
title_link: Associer un compte OIDC
title_create: Créer un compte
verify_heading: Vérifier votre identité
verify_description_html: "Pour associer votre compte %{provider}%{email_suffix}, veuillez vérifier votre identité en saisissant votre mot de passe."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: Adresse e-mail
email_placeholder: Saisissez votre adresse e-mail
password_label: Mot de passe
password_placeholder: Saisissez votre mot de passe
verify_hint: Cela garantit que vous seul pouvez associer des comptes externes à votre profil.
submit_link: Associer le compte
create_heading: Créer un nouveau compte
create_description_html: "Aucun compte trouvé avec l'adresse e-mail <strong>%{email}</strong>. Cliquez ci-dessous pour créer un nouveau compte avec votre identité %{provider}."
info_email: "E-mail :"
info_name: "Nom :"
submit_create: Créer un compte
account_creation_disabled: La création de compte via l'authentification unique est désactivée. Veuillez contacter un administrateur.
cancel: Annuler
new_user:
title: Compléter votre compte
heading: Créer votre compte
description: Veuillez confirmer vos informations pour finaliser la création de compte avec votre identité %{provider}.
email_label: E-mail (du fournisseur SSO)
first_name_label: Prénom
first_name_placeholder: Saisissez votre prénom
last_name_label: Nom de famille
last_name_placeholder: Saisissez votre nom de famille
submit: Créer un compte
cancel: Annuler

View File

@@ -0,0 +1,33 @@
---
nb:
oidc_accounts:
link:
title_link: Koble til OIDC-konto
title_create: Opprett konto
verify_heading: Bekreft identiteten din
verify_description_html: "For å koble til %{provider}-kontoen din%{email_suffix}, bekreft identiteten din ved å skrive inn passordet ditt."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: E-postadresse
email_placeholder: Skriv inn e-postadressen din
password_label: Passord
password_placeholder: Skriv inn passordet ditt
verify_hint: Dette sikrer at bare du kan koble eksterne kontoer til profilen din.
submit_link: Koble til konto
create_heading: Opprett ny konto
create_description_html: "Ingen konto funnet med e-postadressen <strong>%{email}</strong>. Klikk nedenfor for å opprette en ny konto med din %{provider}-identitet."
info_email: "E-post:"
info_name: "Navn:"
submit_create: Opprett konto
account_creation_disabled: Kontooppretting via enkel pålogging er deaktivert. Kontakt en administrator.
cancel: Avbryt
new_user:
title: Fullfør kontoen din
heading: Opprett kontoen din
description: Bekreft opplysningene dine for å fullføre kontoopprettingen med din %{provider}-identitet.
email_label: E-post (fra SSO-leverandør)
first_name_label: Fornavn
first_name_placeholder: Skriv inn fornavnet ditt
last_name_label: Etternavn
last_name_placeholder: Skriv inn etternavnet ditt
submit: Opprett konto
cancel: Avbryt

View File

@@ -2,11 +2,28 @@
nl:
oidc_accounts:
link:
account_creation_disabled: Nieuwe accountaanmaak via single sign-on is uitgeschakeld. Neem contact op met een beheerder om uw account aan te maken.
title_link: OIDC-account koppelen
title_create: Account aanmaken
verify_heading: Verifieer uw identiteit
verify_description_html: "Om uw %{provider}-account%{email_suffix} te koppelen, verifieert u uw identiteit door uw wachtwoord in te voeren."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: E-mailadres
email_placeholder: Voer uw e-mailadres in
password_label: Wachtwoord
password_placeholder: Voer uw wachtwoord in
verify_hint: Dit zorgt ervoor dat alleen u externe accounts aan uw profiel kunt koppelen.
submit_link: Account koppelen
create_heading: Nieuw account aanmaken
create_description_html: "Geen account gevonden met het e-mailadres <strong>%{email}</strong>. Klik hieronder om een nieuw account aan te maken met uw %{provider}-identiteit."
info_email: "E-mail:"
info_name: "Naam:"
submit_create: Account aanmaken
account_creation_disabled: Het aanmaken van accounts via single sign-on is uitgeschakeld. Neem contact op met een beheerder.
cancel: Annuleren
new_user:
title: Voltooi uw account
title: Account voltooien
heading: Account aanmaken
description: Bevestig uw gegevens om het aanmaken van uw account met uw %{provider} identiteit te voltooien.
description: Bevestig uw gegevens om het aanmaken van uw account met uw %{provider}-identiteit te voltooien.
email_label: E-mail (van SSO-provider)
first_name_label: Voornaam
first_name_placeholder: Voer uw voornaam in

View File

@@ -0,0 +1,33 @@
---
pt-BR:
oidc_accounts:
link:
title_link: Vincular conta OIDC
title_create: Criar conta
verify_heading: Verificar sua identidade
verify_description_html: "Para vincular sua conta %{provider}%{email_suffix}, verifique sua identidade digitando sua senha."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: E-mail
email_placeholder: Digite seu e-mail
password_label: Senha
password_placeholder: Digite sua senha
verify_hint: Isso garante que apenas você possa vincular contas externas ao seu perfil.
submit_link: Vincular conta
create_heading: Criar nova conta
create_description_html: "Nenhuma conta encontrada com o e-mail <strong>%{email}</strong>. Clique abaixo para criar uma nova conta usando sua identidade %{provider}."
info_email: "E-mail:"
info_name: "Nome:"
submit_create: Criar conta
account_creation_disabled: A criação de contas via login único está desativada. Entre em contato com um administrador.
cancel: Cancelar
new_user:
title: Completar sua conta
heading: Criar sua conta
description: Confirme seus dados para concluir a criação da conta com sua identidade %{provider}.
email_label: E-mail (do provedor SSO)
first_name_label: Nome
first_name_placeholder: Digite seu nome
last_name_label: Sobrenome
last_name_placeholder: Digite seu sobrenome
submit: Criar conta
cancel: Cancelar

View File

@@ -0,0 +1,33 @@
---
ro:
oidc_accounts:
link:
title_link: Asociază contul OIDC
title_create: Creează cont
verify_heading: Verifică-ți identitatea
verify_description_html: "Pentru a asocia contul tău %{provider}%{email_suffix}, verifică-ți identitatea introducând parola."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: Adresă de e-mail
email_placeholder: Introdu adresa de e-mail
password_label: Parolă
password_placeholder: Introdu parola
verify_hint: Aceasta asigură că doar tu poți asocia conturi externe la profilul tău.
submit_link: Asociază contul
create_heading: Creează cont nou
create_description_html: "Nu a fost găsit niciun cont cu adresa de e-mail <strong>%{email}</strong>. Apasă mai jos pentru a crea un cont nou cu identitatea ta %{provider}."
info_email: "E-mail:"
info_name: "Nume:"
submit_create: Creează cont
account_creation_disabled: Crearea conturilor prin autentificare unică este dezactivată. Contactează un administrator.
cancel: Anulează
new_user:
title: Finalizează contul
heading: Creează-ți contul
description: Confirmă datele tale pentru a finaliza crearea contului cu identitatea ta %{provider}.
email_label: E-mail (de la furnizorul SSO)
first_name_label: Prenume
first_name_placeholder: Introdu prenumele
last_name_label: Nume de familie
last_name_placeholder: Introdu numele de familie
submit: Creează cont
cancel: Anulează

View File

@@ -0,0 +1,33 @@
---
tr:
oidc_accounts:
link:
title_link: OIDC Hesabını Bağla
title_create: Hesap Oluştur
verify_heading: Kimliğinizi Doğrulayın
verify_description_html: "%{provider} hesabınızı%{email_suffix} bağlamak için şifrenizi girerek kimliğinizi doğrulayın."
email_suffix_html: " (<strong>%{email}</strong>)"
email_label: E-posta
email_placeholder: E-posta adresinizi girin
password_label: Şifre
password_placeholder: Şifrenizi girin
verify_hint: Bu, yalnızca sizin harici hesapları profilinize bağlayabilmenizi sağlar.
submit_link: Hesabı Bağla
create_heading: Yeni Hesap Oluştur
create_description_html: "<strong>%{email}</strong> e-posta adresiyle bir hesap bulunamadı. %{provider} kimliğinizle yeni bir hesap oluşturmak için aşağıya tıklayın."
info_email: "E-posta:"
info_name: "Ad:"
submit_create: Hesap Oluştur
account_creation_disabled: Tek oturum açma ile hesap oluşturma devre dışı bırakıldı. Lütfen bir yöneticiyle iletişime geçin.
cancel: İptal
new_user:
title: Hesabınızı Tamamlayın
heading: Hesabınızı Oluşturun
description: "%{provider} kimliğinizle hesap oluşturmayı tamamlamak için bilgilerinizi onaylayın."
email_label: E-posta (SSO sağlayıcısından)
first_name_label: Ad
first_name_placeholder: Adınızı girin
last_name_label: Soyad
last_name_placeholder: Soyadınızı girin
submit: Hesap Oluştur
cancel: İptal

View File

@@ -0,0 +1,33 @@
---
zh-CN:
oidc_accounts:
link:
title_link: 关联 OIDC 账户
title_create: 创建账户
verify_heading: 验证您的身份
verify_description_html: "要关联您的 %{provider} 账户%{email_suffix},请输入密码验证您的身份。"
email_suffix_html: "<strong>%{email}</strong>"
email_label: 电子邮箱
email_placeholder: 请输入您的电子邮箱
password_label: 密码
password_placeholder: 请输入您的密码
verify_hint: 这可确保只有您本人能够将外部账户关联到您的个人资料。
submit_link: 关联账户
create_heading: 创建新账户
create_description_html: "未找到使用电子邮箱 <strong>%{email}</strong> 的账户。点击下方使用您的 %{provider} 身份创建新账户。"
info_email: 电子邮箱:
info_name: 姓名:
submit_create: 创建账户
account_creation_disabled: 通过单点登录创建账户已禁用。请联系管理员。
cancel: 取消
new_user:
title: 完善您的账户
heading: 创建您的账户
description: 请确认您的信息以完成使用 %{provider} 身份创建账户。
email_label: 电子邮箱(来自 SSO 提供商)
first_name_label:
first_name_placeholder: 请输入您的名
last_name_label:
last_name_placeholder: 请输入您的姓
submit: 创建账户
cancel: 取消

View File

@@ -2,4 +2,32 @@
zh-TW:
oidc_accounts:
link:
account_creation_disabled: 透過單一登入建立新帳戶的功能已被禁用。請聯絡管理員為您建立帳戶
title_link: 連結 OIDC 帳戶
title_create: 建立帳戶
verify_heading: 驗證您的身分
verify_description_html: "若要連結您的 %{provider} 帳戶%{email_suffix},請輸入密碼驗證您的身分。"
email_suffix_html: "<strong>%{email}</strong>"
email_label: 電子郵件
email_placeholder: 請輸入您的電子郵件
password_label: 密碼
password_placeholder: 請輸入您的密碼
verify_hint: 這可確保只有您本人能夠將外部帳戶連結到您的個人檔案。
submit_link: 連結帳戶
create_heading: 建立新帳戶
create_description_html: "找不到使用電子郵件 <strong>%{email}</strong> 的帳戶。點擊下方使用您的 %{provider} 身分建立新帳戶。"
info_email: 電子郵件:
info_name: 姓名:
submit_create: 建立帳戶
account_creation_disabled: 透過單一登入建立帳戶已停用。請聯絡管理員。
cancel: 取消
new_user:
title: 完成您的帳戶
heading: 建立您的帳戶
description: 請確認您的資訊以完成使用 %{provider} 身分建立帳戶。
email_label: 電子郵件(來自 SSO 提供者)
first_name_label:
first_name_placeholder: 請輸入您的名
last_name_label:
last_name_placeholder: 請輸入您的姓
submit: 建立帳戶
cancel: 取消

View File

@@ -2,27 +2,60 @@
ca:
onboardings:
header:
sign_out: Tanca la sessió
sign_out: Tancar sessió
setup: Configuració
preferences: Preferències
goals: Objectius
start: Inici
logout:
sign_out: Tancar sessió
show:
title: Configurem el teu compte
subtitle: Primer de tot, completem el teu perfil.
first_name: Nom
first_name_placeholder: Nom
last_name: Cognom
last_name_placeholder: Cognom
household_name: Nom de la llar
household_name_placeholder: Nom de la llar
country: País
submit: Continuar
preferences:
title: Configura les teves preferències
subtitle: Configurem les teves preferències.
example: Compte d'exemple
preview: Previsualitza com es mostren les dades segons les preferències.
color_theme: Tema de colors
theme_system: Sistema
theme_light: Clar
theme_dark: Fosc
locale: Idioma
currency: Moneda
date_format: Format de data
example: Compte d'exemple
locale: Idioma
preview: Previsualitza com es mostren les dades segons les preferències.
submit: Completa
subtitle: Configurem les teves preferències.
title: Configura les teves preferències
profile:
country: País
first_name: Nom
household_name: Nom de la llar
last_name: Cognom
profile_image: Imatge de perfil
submit: Continua
subtitle: Completem el teu perfil.
title: Configurem el més bàsic
show:
message: Estem molt contents que siguis aquí. Al següent pas et farem unes preguntes
per completar el teu perfil i deixar-ho tot a punt.
setup: Configura el compte
title: Benvingut/da a %{product_name}
submit: Completar
goals:
title: Què t'ha portat aquí?
subtitle: Selecciona un o més objectius que tens amb %{product_name} com a eina de finances personals.
unified_accounts: Veure tots els meus comptes en un sol lloc
cashflow: Entendre el flux de caixa i les despeses
budgeting: Gestionar plans financers i pressupostos
partner: Gestionar finances amb la parella
investments: Seguir les inversions
ai_insights: Deixar que la IA m'ajudi a entendre les meves finances
optimization: Analitzar i optimitzar comptes
reduce_stress: Reduir l'estrès financer o l'ansietat
submit: Següent
trial:
title: Prova Sure durant 45 dies
data_deletion: Les dades s'eliminaran després
description_html: A partir d'avui pots provar el producte a fons.<br/>Si t'agrada, allotja'l tu mateix o contribueix per continuar usant-lo aquí.
try_button: Provar Sure durant 45 dies
continue_trial: Continuar la prova
upgrade: Actualitzar
how_it_works: Com funciona
today: Avui
today_description: Tindràs accés gratuït a Sure durant 45 dies al nostre AWS.
in_40_days: En 40 dies (%{date})
in_40_days_description: Et notificarem per recordar-te d'exportar les teves dades.
in_45_days: En 45 dies (%{date})
in_45_days_description: Eliminarem les teves dades — contribueix per continuar usant Sure aquí!

View File

@@ -3,25 +3,59 @@ de:
onboardings:
header:
sign_out: Abmelden
setup: Setup
preferences: Einstellungen
goals: Ziele
start: Start
logout:
sign_out: Abmelden
show:
title: Lass uns dein Konto einrichten
subtitle: Zuerst vervollständigen wir dein Profil.
first_name: Vorname
first_name_placeholder: Vorname
last_name: Nachname
last_name_placeholder: Nachname
household_name: Haushaltsname
household_name_placeholder: Haushaltsname
country: Land
submit: Weiter
preferences:
title: Einstellungen konfigurieren
subtitle: Lass uns deine Einstellungen konfigurieren.
example: Beispielkonto
preview: Vorschau wie deine Daten basierend auf den Einstellungen angezeigt werden.
color_theme: Farbschema
theme_system: System
theme_light: Hell
theme_dark: Dunkel
locale: Sprache
currency: Währung
date_format: Datumsformat
example: Beispielkonto
locale: Sprache
preview: Vorschau wie deine Daten basierend auf den Einstellungen angezeigt werden
submit: Abschließen
subtitle: Lass uns deine Einstellungen konfigurieren
title: Einstellungen konfigurieren
profile:
country: Land
first_name: Vorname
household_name: Haushaltsname
last_name: Nachname
profile_image: Profilbild
goals:
title: Was sind deine Ziele?
subtitle: Wähle ein oder mehrere Ziele aus, die du mit %{product_name} als dein persönliches Finanztool erreichen möchtest.
unified_accounts: Alle meine Konten an einem Ort sehen
cashflow: Cashflow und Ausgaben verstehen
budgeting: Finanzpläne und Budgets verwalten
partner: Finanzen gemeinsam mit Partner verwalten
investments: Investments verfolgen
ai_insights: KI nutzen um Einblicke zu erhalten
optimization: Konten analysieren und optimieren
reduce_stress: Finanziellen Stress reduzieren
submit: Weiter
subtitle: Lass uns dein Profil vervollständigen
title: Lass uns die Grundlagen einrichten
show:
message: Wir freuen uns sehr dass du hier bist Im nächsten Schritt stellen wir dir ein paar Fragen um dein Profil zu vervollständigen und alles für dich einzurichten
setup: Konto einrichten
title: Willkommen bei %{product_name}
trial:
title: Sure 45 Tage kostenlos testen
data_deletion: Daten werden danach gelöscht
description_html: Ab heute kannst du das Produkt ausgiebig testen.<br/>Wenn es dir gefällt, hoste es selbst oder unterstütze uns, um es hier weiter zu nutzen.
try_button: Sure 45 Tage testen
continue_trial: Testversion fortsetzen
upgrade: Upgrade
how_it_works: So funktioniert es
today: Heute
today_description: Du erhältst 45 Tage kostenlos Zugang zu Sure auf unserer AWS.
in_40_days: In 40 Tagen (%{date})
in_40_days_description: Wir erinnern dich daran, deine Daten zu exportieren.
in_45_days: In 45 Tagen (%{date})
in_45_days_description: Wir löschen deine Daten — unterstütze uns, um Sure hier weiter zu nutzen!

View File

@@ -2,27 +2,60 @@
en:
onboardings:
header:
sign_out: Log out
sign_out: Sign out
setup: Setup
preferences: Preferences
goals: Goals
start: Start
logout:
sign_out: Sign out
show:
title: Let's set up your account
subtitle: First things first, let's get your profile set up.
first_name: First name
first_name_placeholder: First name
last_name: Last name
last_name_placeholder: Last name
household_name: Household name
household_name_placeholder: Household name
country: Country
submit: Continue
preferences:
title: Configure your preferences
subtitle: Let's configure your preferences.
example: Example account
preview: Preview how data displays based on preferences.
color_theme: Color theme
theme_system: System
theme_light: Light
theme_dark: Dark
locale: Language
currency: Currency
date_format: Date format
example: Example account
locale: Language
preview: Preview how data displays based on preferences.
submit: Complete
subtitle: Let's configure your preferences.
title: Configure your preferences
profile:
country: Country
first_name: First Name
household_name: Household Name
last_name: Last Name
profile_image: Profile Image
submit: Continue
subtitle: Let's complete your profile.
title: Let's set up the basics
show:
message: Were really excited youre here. In the next step well ask you a
few questions to complete your profile and then get you all set up.
setup: Set up account
title: Meet %{product_name}
goals:
title: What brings you here?
subtitle: Select one or more goals that you have with using %{product_name} as your personal finance tool.
unified_accounts: See all my accounts in one place
cashflow: Understand cashflow and expenses
budgeting: Manage financial plans and budgeting
partner: Manage finances with a partner
investments: Track investments
ai_insights: Let AI help me understand my finances
optimization: Analyze and optimize accounts
reduce_stress: Reduce financial stress or anxiety
submit: Next
trial:
title: Try Sure for 45 days
data_deletion: Data will be deleted then
description_html: Starting today you can give the product a good look.<br/>If you like it, self-host or contribute to continue using it here.
try_button: Try Sure for 45 days
continue_trial: Continue trial
upgrade: Upgrade
how_it_works: How things work here
today: Today
today_description: You'll get free access to Sure for 45 days on our AWS.
in_40_days: In 40 days (%{date})
in_40_days_description: We'll notify you to remind you to export your data.
in_45_days: In 45 days (%{date})
in_45_days_description: We delete your data — contribute to continue using Sure here!

View File

@@ -3,26 +3,59 @@ es:
onboardings:
header:
sign_out: Cerrar sesión
setup: Configuración
preferences: Preferencias
goals: Objetivos
start: Inicio
logout:
sign_out: Cerrar sesión
show:
title: Configuremos tu cuenta
subtitle: Primero, completemos tu perfil.
first_name: Nombre
first_name_placeholder: Nombre
last_name: Apellido
last_name_placeholder: Apellido
household_name: Nombre del hogar
household_name_placeholder: Nombre del hogar
country: País
submit: Continuar
preferences:
title: Configura tus preferencias
subtitle: Configuremos tus preferencias.
example: Cuenta de ejemplo
preview: Vista previa de cómo se muestran los datos según las preferencias.
color_theme: Tema de color
theme_system: Sistema
theme_light: Claro
theme_dark: Oscuro
locale: Idioma
currency: Moneda
date_format: Formato de fecha
example: Cuenta de ejemplo
locale: Idioma
preview: Previsualiza cómo se muestran los datos según tus preferencias.
submit: Completar
subtitle: Vamos a configurar tus preferencias.
title: Configura tus preferencias
profile:
country: País
first_name: Nombre
household_name: Nombre del grupo familiar
last_name: Apellidos
profile_image: Imagen de perfil
submit: Continuar
subtitle: Vamos a completar tu perfil.
title: Vamos a configurar lo básico
show:
message: Estamos muy emocionados de que estés aquí. En el siguiente paso te
haremos unas preguntas para completar tu perfil y luego configuraremos todo para ti.
setup: Configurar cuenta
title: Bienvenido a %{product_name}
goals:
title: ¿Qué te trae por aquí?
subtitle: Selecciona uno o más objetivos que tienes con %{product_name} como tu herramienta de finanzas personales.
unified_accounts: Ver todas mis cuentas en un solo lugar
cashflow: Entender el flujo de caja y los gastos
budgeting: Gestionar planes financieros y presupuestos
partner: Gestionar finanzas con mi pareja
investments: Seguir las inversiones
ai_insights: Dejar que la IA me ayude a entender mis finanzas
optimization: Analizar y optimizar cuentas
reduce_stress: Reducir el estrés financiero o la ansiedad
submit: Siguiente
trial:
title: Prueba Sure durante 45 días
data_deletion: Los datos se eliminarán después
description_html: A partir de hoy puedes probar el producto a fondo.<br/>Si te gusta, alójalo tú mismo o contribuye para seguir usándolo aquí.
try_button: Probar Sure durante 45 días
continue_trial: Continuar prueba
upgrade: Actualizar
how_it_works: Cómo funciona
today: Hoy
today_description: Tendrás acceso gratuito a Sure durante 45 días en nuestro AWS.
in_40_days: En 40 días (%{date})
in_40_days_description: Te notificaremos para recordarte exportar tus datos.
in_45_days: En 45 días (%{date})
in_45_days_description: Eliminamos tus datos — ¡contribuye para seguir usando Sure aquí!

View File

@@ -2,26 +2,60 @@
fr:
onboardings:
header:
sign_out: Déconnexion
preferences:
currency: Monnaie
date_format: Format de date
example: Compte d'exemple
locale: Langue
preview: Prévisualiser la façon dont les données s'affichent en fonction des préférences.
submit: Terminer
subtitle: Configurons vos préférences.
title: Configurez vos préférences
profile:
country: Pays
first_name: Prénom
household_name: Nom du foyer (si applicable)
last_name: Nom de famille
profile_image: Photo de profil
submit: Continuer
subtitle: Complétons votre profil.
title: Configurons les bases
sign_out: Se déconnecter
setup: Configuration
preferences: Préférences
goals: Objectifs
start: Démarrer
logout:
sign_out: Se déconnecter
show:
message: Nous sommes vraiment excités que vous soyez ici. Dans la prochaine étape, nous allons vous poser quelques questions pour compléter votre profil et ensuite configurer votre compte.
setup: Configurer le compte
title: Rencontrez %{product_name}
title: Configurons votre compte
subtitle: Commençons par compléter votre profil.
first_name: Prénom
first_name_placeholder: Prénom
last_name: Nom de famille
last_name_placeholder: Nom de famille
household_name: Nom du foyer
household_name_placeholder: Nom du foyer
country: Pays
submit: Continuer
preferences:
title: Configurez vos préférences
subtitle: Configurons vos préférences.
example: Compte exemple
preview: Aperçu de l'affichage des données selon vos préférences.
color_theme: Thème de couleur
theme_system: Système
theme_light: Clair
theme_dark: Sombre
locale: Langue
currency: Devise
date_format: Format de date
submit: Terminer
goals:
title: Qu'est-ce qui vous amène ici ?
subtitle: Sélectionnez un ou plusieurs objectifs que vous souhaitez atteindre avec %{product_name} comme outil de finances personnelles.
unified_accounts: Voir tous mes comptes en un seul endroit
cashflow: Comprendre les flux de trésorerie et les dépenses
budgeting: Gérer les plans financiers et les budgets
partner: Gérer les finances avec un partenaire
investments: Suivre les investissements
ai_insights: Laisser l'IA m'aider à comprendre mes finances
optimization: Analyser et optimiser les comptes
reduce_stress: Réduire le stress financier ou l'anxiété
submit: Suivant
trial:
title: Essayez Sure pendant 45 jours
data_deletion: Les données seront supprimées ensuite
description_html: À partir d'aujourd'hui, vous pouvez tester le produit en profondeur.<br/>Si vous l'aimez, hébergez-le vous-même ou contribuez pour continuer à l'utiliser ici.
try_button: Essayer Sure pendant 45 jours
continue_trial: Continuer l'essai
upgrade: Mettre à niveau
how_it_works: Comment ça fonctionne
today: Aujourd'hui
today_description: Vous aurez un accès gratuit à Sure pendant 45 jours sur notre AWS.
in_40_days: Dans 40 jours (%{date})
in_40_days_description: Nous vous notifierons pour vous rappeler d'exporter vos données.
in_45_days: Dans 45 jours (%{date})
in_45_days_description: Nous supprimons vos données — contribuez pour continuer à utiliser Sure ici !

View File

@@ -3,26 +3,59 @@ nb:
onboardings:
header:
sign_out: Logg ut
setup: Oppsett
preferences: Innstillinger
goals: Mål
start: Start
logout:
sign_out: Logg ut
show:
title: La oss sette opp kontoen din
subtitle: Først, la oss fullføre profilen din.
first_name: Fornavn
first_name_placeholder: Fornavn
last_name: Etternavn
last_name_placeholder: Etternavn
household_name: Husholdningsnavn
household_name_placeholder: Husholdningsnavn
country: Land
submit: Fortsett
preferences:
title: Konfigurer innstillingene dine
subtitle: La oss konfigurere innstillingene dine.
example: Eksempelkonto
preview: Forhåndsvisning av hvordan data vises basert på innstillinger.
color_theme: Fargetema
theme_system: System
theme_light: Lys
theme_dark: Mørk
locale: Språk
currency: Valuta
date_format: Datoformat
example: Eksempelkonto
locale: Språk
preview: Forhåndsvis hvordan data vises basert på preferanser.
submit: Fullfør
subtitle: La oss konfigurere preferansene dine.
title: Konfigurer preferansene dine
profile:
country: Land
first_name: Fornavn
household_name: Husholdningsnavn
last_name: Etternavn
profile_image: Profilbilde
submit: Fortsett
subtitle: La oss fullføre profilen din.
title: La oss sette opp det grunnleggende
show:
message: Vi er veldig glade for at du er her. I neste trinn vil vi stille deg noen
spørsmål for å fullføre profilen din og deretter få deg i gang.
setup: Sett opp konto
title: Møt %{product_name}
goals:
title: Hva bringer deg hit?
subtitle: Velg ett eller flere mål du har med %{product_name} som ditt personlige økonomverktøy.
unified_accounts: Se alle kontoene mine på ett sted
cashflow: Forstå kontantstrøm og utgifter
budgeting: Administrere økonomiplaner og budsjetter
partner: Administrere økonomi med en partner
investments: Følge investeringer
ai_insights: La AI hjelpe meg å forstå økonomien min
optimization: Analysere og optimalisere kontoer
reduce_stress: Redusere økonomisk stress eller angst
submit: Neste
trial:
title: Prøv Sure i 45 dager
data_deletion: Data slettes deretter
description_html: Fra i dag kan du teste produktet grundig.<br/>Hvis du liker det, kan du hoste det selv eller bidra for å fortsette å bruke det her.
try_button: Prøv Sure i 45 dager
continue_trial: Fortsett prøveperioden
upgrade: Oppgrader
how_it_works: Slik fungerer det
today: I dag
today_description: Du får gratis tilgang til Sure i 45 dager på vår AWS.
in_40_days: Om 40 dager (%{date})
in_40_days_description: Vi varsler deg for å minne deg på å eksportere dataene dine.
in_45_days: Om 45 dager (%{date})
in_45_days_description: Vi sletter dataene dine — bidra for å fortsette å bruke Sure her!

View File

@@ -3,25 +3,59 @@ nl:
onboardings:
header:
sign_out: Uitloggen
setup: Instellen
preferences: Voorkeuren
goals: Doelen
start: Start
logout:
sign_out: Uitloggen
show:
title: Laten we je account instellen
subtitle: Laten we eerst je profiel voltooien.
first_name: Voornaam
first_name_placeholder: Voornaam
last_name: Achternaam
last_name_placeholder: Achternaam
household_name: Huishoudnaam
household_name_placeholder: Huishoudnaam
country: Land
submit: Doorgaan
preferences:
title: Configureer je voorkeuren
subtitle: Laten we je voorkeuren configureren.
example: Voorbeeldaccount
preview: Voorbeeld van hoe gegevens worden weergegeven op basis van voorkeuren.
color_theme: Kleurthema
theme_system: Systeem
theme_light: Licht
theme_dark: Donker
locale: Taal
currency: Valuta
date_format: Datumformaat
example: Voorbeeldaccount
locale: Taal
preview: Voorbeeld van hoe gegevens worden weergegeven op basis van voorkeuren.
submit: Voltooien
subtitle: Laten we uw voorkeuren configureren.
title: Configureer uw voorkeuren
profile:
country: Land
first_name: Voornaam
household_name: Naam van huishouden
last_name: Achternaam
profile_image: Profielfoto
submit: Doorgaan
subtitle: Laten we uw profiel voltooien.
title: Laten we de basis instellen
show:
message: We zijn erg blij dat u hier bent. In de volgende stap stellen we u een paar vragen om uw profiel te voltooien en u helemaal klaar te maken.
setup: Account instellen
title: Maak kennis met %{product_name}
goals:
title: Wat brengt je hier?
subtitle: Selecteer een of meer doelen die je hebt met %{product_name} als je persoonlijke financiële tool.
unified_accounts: Al mijn rekeningen op één plek zien
cashflow: Cashflow en uitgaven begrijpen
budgeting: Financiële plannen en budgetten beheren
partner: Financiën samen met een partner beheren
investments: Investeringen volgen
ai_insights: AI laten helpen om mijn financiën te begrijpen
optimization: Rekeningen analyseren en optimaliseren
reduce_stress: Financiële stress of angst verminderen
submit: Volgende
trial:
title: Probeer Sure 45 dagen
data_deletion: Gegevens worden daarna verwijderd
description_html: Vanaf vandaag kun je het product uitgebreid testen.<br/>Als je het leuk vindt, host het zelf of draag bij om het hier te blijven gebruiken.
try_button: Probeer Sure 45 dagen
continue_trial: Proefperiode voortzetten
upgrade: Upgraden
how_it_works: Hoe het werkt
today: Vandaag
today_description: Je krijgt 45 dagen gratis toegang tot Sure op onze AWS.
in_40_days: Over 40 dagen (%{date})
in_40_days_description: We sturen je een herinnering om je gegevens te exporteren.
in_45_days: Over 45 dagen (%{date})
in_45_days_description: We verwijderen je gegevens — draag bij om Sure hier te blijven gebruiken!

View File

@@ -3,26 +3,59 @@ pt-BR:
onboardings:
header:
sign_out: Sair
setup: Configuração
preferences: Preferências
goals: Objetivos
start: Iniciar
logout:
sign_out: Sair
show:
title: Vamos configurar sua conta
subtitle: Primeiro, vamos completar seu perfil.
first_name: Nome
first_name_placeholder: Nome
last_name: Sobrenome
last_name_placeholder: Sobrenome
household_name: Nome da família
household_name_placeholder: Nome da família
country: País
submit: Continuar
preferences:
title: Configure suas preferências
subtitle: Vamos configurar suas preferências.
example: Conta de exemplo
preview: Visualização de como os dados são exibidos com base nas preferências.
color_theme: Tema de cores
theme_system: Sistema
theme_light: Claro
theme_dark: Escuro
locale: Idioma
currency: Moeda
date_format: Formato de data
example: Conta exemplo
locale: Idioma
preview: Visualize como os dados são exibidos com base nas preferências.
submit: Concluir
subtitle: Vamos configurar suas preferências.
title: Configure suas preferências
profile:
country: País
first_name: Primeiro Nome
household_name: Nome da Família
last_name: Sobrenome
profile_image: Imagem do Perfil
submit: Continuar
subtitle: Vamos completar seu perfil.
title: Vamos configurar o básico
show:
message: Estamos muito empolgados por você estar aqui. No próximo passo, faremos
algumas perguntas para completar seu perfil e então deixar tudo configurado.
setup: Configurar conta
title: Conheça o %{product_name}
goals:
title: O que te traz aqui?
subtitle: Selecione um ou mais objetivos que você tem com o %{product_name} como sua ferramenta de finanças pessoais.
unified_accounts: Ver todas as minhas contas em um só lugar
cashflow: Entender fluxo de caixa e despesas
budgeting: Gerenciar planos financeiros e orçamentos
partner: Gerenciar finanças com um parceiro
investments: Acompanhar investimentos
ai_insights: Deixar a IA me ajudar a entender minhas finanças
optimization: Analisar e otimizar contas
reduce_stress: Reduzir estresse financeiro ou ansiedade
submit: Próximo
trial:
title: Experimente o Sure por 45 dias
data_deletion: Os dados serão excluídos depois
description_html: A partir de hoje você pode testar o produto a fundo.<br/>Se gostar, hospede você mesmo ou contribua para continuar usando aqui.
try_button: Experimentar Sure por 45 dias
continue_trial: Continuar teste
upgrade: Atualizar
how_it_works: Como funciona
today: Hoje
today_description: Você terá acesso gratuito ao Sure por 45 dias em nosso AWS.
in_40_days: Em 40 dias (%{date})
in_40_days_description: Notificaremos você para lembrar de exportar seus dados.
in_45_days: Em 45 dias (%{date})
in_45_days_description: Excluímos seus dados — contribua para continuar usando o Sure aqui!

View File

@@ -3,25 +3,59 @@ ro:
onboardings:
header:
sign_out: Deconectare
setup: Configurare
preferences: Preferințe
goals: Obiective
start: Start
logout:
sign_out: Deconectare
show:
title: Să-ți configurăm contul
subtitle: Mai întâi, să-ți completăm profilul.
first_name: Prenume
first_name_placeholder: Prenume
last_name: Nume de familie
last_name_placeholder: Nume de familie
household_name: Numele gospodăriei
household_name_placeholder: Numele gospodăriei
country: Țară
submit: Continuă
preferences:
title: Configurează preferințele
subtitle: Să-ți configurăm preferințele.
example: Cont exemplu
preview: Previzualizare a modului în care sunt afișate datele pe baza preferințelor.
color_theme: Tema de culoare
theme_system: Sistem
theme_light: Deschis
theme_dark: Întunecat
locale: Limbă
currency: Monedă
date_format: Format dată
example: Cont exemplu
locale: Limbă
preview: Previzualizează cum sunt afișate datele în funcție de preferințe.
submit: Finalizează
subtitle: Să configurăm preferințele tale.
title: Configurează-ți preferințele
profile:
country: Țară
first_name: Prenume
household_name: Numele gospodăriei
last_name: Nume de familie
profile_image: Imagine de profil
submit: Continuă
subtitle: Să-ți completăm profilul.
title: Să configurăm elementele de bază
show:
message: Suntem încântați că ești aici. În pasul următor îți vom pune câteva întrebări pentru a-ți completa profilul și apoi te vom pregăti.
setup: Configurează contul
title: Fă cunoștință cu %{product_name}
submit: Finalizare
goals:
title: Ce te aduce aici?
subtitle: Selectează unul sau mai multe obiective pe care le ai cu %{product_name} ca instrument de finanțe personale.
unified_accounts: Să-mi văd toate conturile într-un singur loc
cashflow: Să înțeleg fluxul de numerar și cheltuielile
budgeting: Să gestionez planuri financiare și bugete
partner: Să gestionez finanțele împreună cu partenerul
investments: Să urmăresc investițiile
ai_insights: Să las AI să mă ajute să-mi înțeleg finanțele
optimization: Să analizez și să optimizez conturile
reduce_stress: Să reduc stresul financiar sau anxietatea
submit: Următorul
trial:
title: Încearcă Sure timp de 45 de zile
data_deletion: Datele vor fi șterse după aceea
description_html: Începând de azi poți testa produsul în profunzime.<br/>Dacă îți place, găzduiește-l singur sau contribuie pentru a continua să-l folosești aici.
try_button: Încearcă Sure timp de 45 de zile
continue_trial: Continuă perioada de probă
upgrade: Actualizează
how_it_works: Cum funcționează
today: Astăzi
today_description: Vei avea acces gratuit la Sure timp de 45 de zile pe AWS-ul nostru.
in_40_days: În 40 de zile (%{date})
in_40_days_description: Te vom notifica să-ți amintim să-ți exporți datele.
in_45_days: În 45 de zile (%{date})
in_45_days_description: Îți ștergem datele — contribuie pentru a continua să folosești Sure aici!

View File

@@ -3,25 +3,59 @@ tr:
onboardings:
header:
sign_out: Çıkış yap
setup: Kurulum
preferences: Tercihler
goals: Hedefler
start: Başla
logout:
sign_out: Çıkış yap
show:
title: Hesabınızı kuralım
subtitle: Önce profilinizi tamamlayalım.
first_name: Ad
first_name_placeholder: Ad
last_name: Soyad
last_name_placeholder: Soyad
household_name: Hane adı
household_name_placeholder: Hane adı
country: Ülke
submit: Devam et
preferences:
title: Tercihlerinizi yapılandırın
subtitle: Tercihlerinizi yapılandıralım.
example: Örnek hesap
preview: Tercihlere göre verilerin nasıl görüntüleneceğinin önizlemesi.
color_theme: Renk teması
theme_system: Sistem
theme_light: ık
theme_dark: Koyu
locale: Dil
currency: Para birimi
date_format: Tarih formatı
example: Örnek hesap
locale: Dil
preview: Tercihlere göre verilerin nasıl görüneceğini önizleyin.
submit: Tamamla
subtitle: Tercihlerinizi yapılandıralım.
title: Tercihlerinizi yapılandırın
profile:
country: Ülke
first_name: Ad
household_name: Hane Adı
last_name: Soyad
profile_image: Profil Resmi
submit: Devam et
subtitle: Profilinizi tamamlayalım.
title: Temel bilgileri ayarlayalım
show:
message: Burada olduğunuz için çok heyecanlıyız. Sonraki adımda profilinizi tamamlamak için size birkaç soru soracağız ve ardından her şeyi ayarlayacağız.
setup: Hesabı ayarla
title: Maybe ile Tanışın
goals:
title: Sizi buraya ne getirdi?
subtitle: "%{product_name}'i kişisel finans aracınız olarak kullanmak için bir veya daha fazla hedef seçin."
unified_accounts: Tüm hesaplarımı tek bir yerde görmek
cashflow: Nakit akışını ve harcamaları anlamak
budgeting: Finansal planları ve bütçeleri yönetmek
partner: Bir partnerle birlikte finansları yönetmek
investments: Yatırımları takip etmek
ai_insights: AI'ın finanslarımı anlamama yardım etmesini sağlamak
optimization: Hesapları analiz etmek ve optimize etmek
reduce_stress: Finansal stresi veya kaygıyı azaltmak
submit: Sonraki
trial:
title: Sure'u 45 gün deneyin
data_deletion: Veriler daha sonra silinecek
description_html: Bugünden itibaren ürünü detaylı test edebilirsiniz.<br/>Beğenirseniz, kendiniz barındırın veya burada kullanmaya devam etmek için katkıda bulunun.
try_button: Sure'u 45 gün dene
continue_trial: Denemeye devam et
upgrade: Yükselt
how_it_works: Nasıl çalışır
today: Bugün
today_description: AWS'mizde Sure'a 45 gün ücretsiz erişim elde edeceksiniz.
in_40_days: 40 gün içinde (%{date})
in_40_days_description: Verilerinizi dışa aktarmanızı hatırlatmak için sizi bilgilendireceğiz.
in_45_days: 45 gün içinde (%{date})
in_45_days_description: Verilerinizi siliyoruz — Sure'u burada kullanmaya devam etmek için katkıda bulunun!

View File

@@ -3,25 +3,59 @@ zh-CN:
onboardings:
header:
sign_out: 退出登录
setup: 设置
preferences: 偏好设置
goals: 目标
start: 开始
logout:
sign_out: 退出登录
show:
title: 让我们设置您的账户
subtitle: 首先,让我们完善您的个人资料。
first_name:
first_name_placeholder:
last_name:
last_name_placeholder:
household_name: 家庭名称
household_name_placeholder: 家庭名称
country: 国家
submit: 继续
preferences:
title: 配置您的偏好设置
subtitle: 让我们配置您的偏好设置。
example: 示例账户
preview: 根据偏好设置预览数据显示方式。
color_theme: 颜色主题
theme_system: 跟随系统
theme_light: 浅色
theme_dark: 深色
locale: 语言
currency: 货币
date_format: 日期格式
example: 示例账户
locale: 语言
preview: 预览偏好设置下的数据展示效果。
submit: 完成设置
subtitle: 现在来配置您的偏好设置。
title: 配置偏好设置
profile:
country: 国家/地区
first_name: 名字
household_name: 家庭名称
last_name: 姓氏
profile_image: 个人头像
submit: 继续
subtitle: 现在来完成您的个人资料。
title: 基础信息设置
show:
message: 很高兴您的加入!接下来我们将引导您完成几个步骤:完善个人资料,然后进行初始设置
setup: 开始设置
title: 欢迎使用 %{product_name}
submit: 完成
goals:
title: 是什么让您来到这里?
subtitle: 选择一个或多个您使用 %{product_name} 作为个人财务工具的目标。
unified_accounts: 在一个地方查看所有账户
cashflow: 了解现金流和支出
budgeting: 管理财务计划和预算
partner: 与伴侣共同管理财务
investments: 跟踪投资
ai_insights: 让 AI 帮助我了解我的财务状况
optimization: 分析和优化账户
reduce_stress: 减轻财务压力或焦虑
submit: 下一步
trial:
title: 免费试用 Sure 45 天
data_deletion: 届时数据将被删除
description_html: 从今天开始,您可以深入体验产品。<br/>如果您喜欢,可以自行托管或贡献以继续在这里使用
try_button: 试用 Sure 45 天
continue_trial: 继续试用
upgrade: 升级
how_it_works: 运作方式
today: 今天
today_description: 您将在我们的 AWS 上获得 45 天免费访问 Sure 的权限。
in_40_days: 40 天后(%{date}
in_40_days_description: 我们会通知您提醒导出数据。
in_45_days: 45 天后(%{date}
in_45_days_description: 我们将删除您的数据 — 贡献以继续在这里使用 Sure

View File

@@ -3,25 +3,59 @@ zh-TW:
onboardings:
header:
sign_out: 登出
preferences:
currency: 幣別
date_format: 日期格式
example: 帳戶範例
locale: 語言
preview: 預覽根據偏好設定顯示的資料。
submit: 完成
subtitle: 讓我們來設定您的偏好設定。
title: 設定您的偏好設定
profile:
country: 國家
first_name: 名字
household_name: 家戶名稱
last_name: 姓氏
profile_image: 個人頭像
submit: 繼續
subtitle: 讓我們完成您的個人資料。
title: 進行基礎設定
setup: 設定
preferences: 偏好設定
goals: 目標
start: 開始
logout:
sign_out: 登出
show:
message: 我們很高興您的加入!接下來我們會詢問幾個問題來完善您的個人資料,並完成所有設定。
setup: 開始設定帳號
title: 認識 %{product_name}
title: 我們設定您的帳戶
subtitle: 首先,讓我們完善您的個人檔案。
first_name:
first_name_placeholder:
last_name:
last_name_placeholder:
household_name: 家庭名稱
household_name_placeholder: 家庭名稱
country: 國家
submit: 繼續
preferences:
title: 設定您的偏好
subtitle: 讓我們設定您的偏好。
example: 範例帳戶
preview: 根據偏好設定預覽資料顯示方式。
color_theme: 顏色主題
theme_system: 跟隨系統
theme_light: 淺色
theme_dark: 深色
locale: 語言
currency: 貨幣
date_format: 日期格式
submit: 完成
goals:
title: 是什麼讓您來到這裡?
subtitle: 選擇一個或多個您使用 %{product_name} 作為個人財務工具的目標。
unified_accounts: 在一個地方查看所有帳戶
cashflow: 了解現金流和支出
budgeting: 管理財務計劃和預算
partner: 與伴侶共同管理財務
investments: 追蹤投資
ai_insights: 讓 AI 幫助我了解我的財務狀況
optimization: 分析和優化帳戶
reduce_stress: 減輕財務壓力或焦慮
submit: 下一步
trial:
title: 免費試用 Sure 45 天
data_deletion: 屆時資料將被刪除
description_html: 從今天開始,您可以深入體驗產品。<br/>如果您喜歡,可以自行託管或貢獻以繼續在這裡使用。
try_button: 試用 Sure 45 天
continue_trial: 繼續試用
upgrade: 升級
how_it_works: 運作方式
today: 今天
today_description: 您將在我們的 AWS 上獲得 45 天免費存取 Sure 的權限。
in_40_days: 40 天後(%{date}
in_40_days_description: 我們會通知您提醒匯出資料。
in_45_days: 45 天後(%{date}
in_45_days_description: 我們將刪除您的資料 — 貢獻以繼續在這裡使用 Sure

View File

@@ -24,3 +24,8 @@ ca:
welcome_body: Per començar, has de registrar un compte nou. Després podràs configurar
opcions addicionals dins l'aplicació.
welcome_title: Benvingut/da a Self Hosted %{product_name}!
password_requirements:
length: Mínim 8 caràcters
case: Majúscules i minúscules
number: Un número (0-9)
special: "Un caràcter especial (!, @, #, $, %, etc)"

View File

@@ -8,6 +8,7 @@ de:
user:
create: Weiter
registrations:
closed: Die Anmeldung ist derzeit geschlossen.
create:
failure: Beim Registrieren ist ein Problem aufgetreten
invalid_invite_code: Ungültiger Einladungscode bitte versuche es erneut
@@ -22,3 +23,8 @@ de:
welcome_body: Um zu beginnen musst du ein neues Konto erstellen Danach kannst du zusätzliche Einstellungen in der App konfigurieren
welcome_title: Willkommen bei Self Hosted %{product_name}
password_placeholder: Passwort eingeben
password_requirements:
length: Mindestens 8 Zeichen
case: Groß- und Kleinbuchstaben
number: Eine Zahl (0-9)
special: "Ein Sonderzeichen (!, @, #, $, %, etc)"

View File

@@ -24,3 +24,8 @@ en:
then be able to configure additional settings within the app.
welcome_title: Welcome to Self Hosted %{product_name}!
password_placeholder: Enter your password
password_requirements:
length: Minimum 8 characters
case: Upper and lowercase letters
number: A number (0-9)
special: "A special character (!, @, #, $, %, etc)"

View File

@@ -24,3 +24,8 @@ es:
configurar ajustes adicionales dentro de la aplicación.
welcome_title: ¡Bienvenido a Self Hosted %{product_name}!
password_placeholder: Introduce tu contraseña
password_requirements:
length: Mínimo 8 caracteres
case: Mayúsculas y minúsculas
number: Un número (0-9)
special: "Un carácter especial (!, @, #, $, %, etc)"

View File

@@ -23,3 +23,8 @@ fr:
welcome_body: Pour commencer, vous devez créer un nouveau compte. Vous pourrez ensuite configurer des paramètres supplémentaires à l'intérieur de l'application.
welcome_title: Bienvenue sur %{product_name} !
password_placeholder: Entrez votre mot de passe
password_requirements:
length: Minimum 8 caractères
case: Majuscules et minuscules
number: Un chiffre (0-9)
special: "Un caractère spécial (!, @, #, $, %, etc)"

View File

@@ -24,3 +24,8 @@ nb:
da kunne konfigurere flere innstillinger i appen.
welcome_title: Velkommen til Self Hosted %{product_name}!
password_placeholder: Angi passordet ditt
password_requirements:
length: Minimum 8 tegn
case: Store og små bokstaver
number: Et tall (0-9)
special: "Et spesialtegn (!, @, #, $, %, etc)"

View File

@@ -23,3 +23,8 @@ nl:
welcome_body: Om te beginnen moet u zich aanmelden voor een nieuw account. U kunt daarna aanvullende instellingen binnen de app configureren.
welcome_title: Welkom bij Self Hosted %{product_name}!
password_placeholder: Voer uw wachtwoord in
password_requirements:
length: Minimaal 8 tekens
case: Hoofdletters en kleine letters
number: Een cijfer (0-9)
special: "Een speciaal teken (!, @, #, $, %, etc)"

View File

@@ -23,3 +23,8 @@ pt-BR:
poderá configurar configurações adicionais dentro do aplicativo.
welcome_title: Bem-vindo ao Self Hosted %{product_name}!
password_placeholder: Digite sua senha
password_requirements:
length: Mínimo 8 caracteres
case: Letras maiúsculas e minúsculas
number: Um número (0-9)
special: "Um caractere especial (!, @, #, $, %, etc)"

View File

@@ -23,3 +23,8 @@ ro:
welcome_body: Pentru a începe, trebuie să îți creezi un cont nou. Apoi vei putea configura setări suplimentare în aplicație.
welcome_title: Bine ai venit la Self Hosted Maybe!
password_placeholder: Introdu parola
password_requirements:
length: Minim 8 caractere
case: Litere mari și mici
number: O cifră (0-9)
special: "Un caracter special (!, @, #, $, %, etc)"

View File

@@ -23,3 +23,8 @@ tr:
welcome_body: Başlamak için yeni bir hesap oluşturmalısınız. Daha sonra uygulama içinde ek ayarları yapılandırabileceksiniz.
welcome_title: Self Hosted %{product_name}'ye Hoş Geldiniz!
password_placeholder: Şifrenizi girin
password_requirements:
length: En az 8 karakter
case: Büyük ve küçük harfler
number: Bir rakam (0-9)
special: "Bir özel karakter (!, @, #, $, %, etc)"

View File

@@ -23,3 +23,8 @@ zh-CN:
title: 创建您的账户
welcome_body: 开始使用前,您需要注册一个新账户。注册后即可在应用内配置其他设置。
welcome_title: 欢迎使用自托管版 %{product_name}
password_requirements:
length: 至少8个字符
case: 大写和小写字母
number: 一个数字 (0-9)
special: "一个特殊字符 (!, @, #, $, %, etc)"

View File

@@ -23,3 +23,8 @@ zh-TW:
welcome_body: 在開始之前,您必須註冊一個新帳號。註冊完成後,您將能在應用程式內進行進階設定。
welcome_title: 歡迎使用自行代管的 %{product_name}
password_placeholder: 輸入您的密碼
password_requirements:
length: 至少8個字元
case: 大寫和小寫字母
number: 一個數字 (0-9)
special: "一個特殊字元 (!, @, #, $, %, etc)"

View File

@@ -25,6 +25,7 @@ ca:
no_auth_methods_enabled: Actualment no hi ha cap mètode d'autenticació habilitat. Contacta
amb un administrador.
openid_connect: Inicia sessió amb OpenID Connect
oidc: Inicia sessió amb OpenID Connect
password: Contrasenya
password_placeholder: Introdueix la teva contrasenya
submit: Inicia sessió

View File

@@ -18,4 +18,5 @@ de:
title: Melde dich bei deinem Konto an
password_placeholder: Passwort eingeben
openid_connect: Mit OpenID Connect anmelden
oidc: Mit OpenID Connect anmelden
google_auth_connect: Mit Google anmelden

View File

@@ -24,6 +24,7 @@ en:
title: Sure
password_placeholder: Enter your password
openid_connect: Sign in with OpenID Connect
oidc: Sign in with OpenID Connect
google_auth_connect: Sign in with Google
local_login_admin_only: Local login is restricted to administrators.
no_auth_methods_enabled: No authentication methods are currently enabled. Please contact an administrator.

View File

@@ -19,6 +19,7 @@ es:
title: Inicia sesión en tu cuenta
password_placeholder: Introduce tu contraseña
openid_connect: Inicia sesión con OpenID Connect
oidc: Inicia sesión con OpenID Connect
google_auth_connect: Inicia sesión con Google
local_login_admin_only: El inicio de sesión local está restringido a administradores.
no_auth_methods_enabled: No hay métodos de autenticación habilitados actualmente. Ponte en contacto con un administrador.

View File

@@ -13,3 +13,5 @@ fr:
submit: Se connecter
title: Connectez-vous à votre compte
password_placeholder: Entrez votre mot de passe
openid_connect: Se connecter avec OpenID Connect
oidc: Se connecter avec OpenID Connect

View File

@@ -1,8 +1,8 @@
---
nb:
sessions:
create:
invalid_credentials: Ugyldig e-post eller passord.
---
nb:
sessions:
create:
invalid_credentials: Ugyldig e-post eller passord.
destroy:
logout_successful: Du har blitt logget ut.
openid_connect:
@@ -16,3 +16,4 @@ nb:
title: Logg inn på kontoen din
password_placeholder: Angi passordet ditt
openid_connect: Logg inn med OpenID Connect
oidc: Logg inn med OpenID Connect

View File

@@ -24,6 +24,7 @@ nl:
title: "%{product_name}"
password_placeholder: Voer uw wachtwoord in
openid_connect: Inloggen met OpenID Connect
oidc: Inloggen met OpenID Connect
google_auth_connect: Inloggen met Google
local_login_admin_only: Lokale login is beperkt tot beheerders.
no_auth_methods_enabled: Er zijn momenteel geen authenticatiemethoden ingeschakeld. Neem contact op met een beheerder.

View File

@@ -18,6 +18,7 @@ pt-BR:
title: Entre na sua conta
password_placeholder: Digite sua senha
openid_connect: Entrar com OpenID Connect
oidc: Entrar com OpenID Connect
google_auth_connect: Entrar com Google
demo_banner_title: "Modo de Demonstração Ativo"
demo_banner_message: "Este é um ambiente de demonstração. As credenciais de login foram preenchidas para sua conveniência. Por favor, não insira informações reais ou sensíveis."

View File

@@ -18,4 +18,5 @@ ro:
title: Conectează-te la contul tău
password_placeholder: Introdu parola
openid_connect: Conectează-te cu OpenID Connect
oidc: Conectează-te cu OpenID Connect
google_auth_connect: Conectează-te cu Google

View File

@@ -16,3 +16,4 @@ tr:
title: Hesabınıza giriş yapın
password_placeholder: Şifrenizi girin
openid_connect: OpenID Connect ile giriş yap
oidc: OpenID Connect ile giriş yap

View File

@@ -15,6 +15,7 @@ zh-CN:
forgot_password: 忘记密码?
google_auth_connect: 使用 Google 登录
openid_connect: 使用 OpenID Connect 登录
oidc: 使用 OpenID Connect 登录
password: 密码
password_placeholder: 请输入密码
submit: 登录

View File

@@ -19,6 +19,7 @@ zh-TW:
title: 登入
password_placeholder: 輸入您的密碼
openid_connect: 透過 OpenID Connect 登入
oidc: 透過 OpenID Connect 登入
google_auth_connect: 透過 Google 帳號登入
local_login_admin_only: 本地登入僅限管理員使用。
no_auth_methods_enabled: 目前未啟用任何驗證方式。請聯絡管理員。

View File

@@ -8,21 +8,28 @@ class OnboardingsTest < ApplicationSystemTestCase
# Reset onboarding state
@user.update!(set_onboarding_preferences_at: nil)
# Force English locale for tests
I18n.locale = :en
sign_in @user
end
teardown do
I18n.locale = I18n.default_locale
end
test "can complete the full onboarding flow" do
# Start at the main onboarding page
visit onboarding_path
assert_text "Let's set up your account"
assert_button "Continue"
assert_text I18n.t("onboardings.show.title")
assert_button I18n.t("onboardings.show.submit")
# Navigate to preferences
click_button "Continue"
click_button I18n.t("onboardings.show.submit")
assert_current_path preferences_onboarding_path
assert_text "Configure your preferences"
assert_text I18n.t("onboardings.preferences.title")
# Test that the chart renders without errors (this would catch the Series bug)
assert_selector "[data-controller='time-series-chart']"
@@ -31,14 +38,14 @@ class OnboardingsTest < ApplicationSystemTestCase
select "English (en)", from: "user_family_attributes_locale"
select "United States Dollar (USD)", from: "user_family_attributes_currency"
select "MM/DD/YYYY", from: "user_family_attributes_date_format"
select "Light", from: "user_theme"
select_theme("light")
# Submit preferences
click_button "Complete"
click_button I18n.t("onboardings.preferences.submit")
# Should redirect to goals page
assert_current_path goals_onboarding_path
assert_text "What brings you here?"
assert_text I18n.t("onboardings.goals.title")
end
test "preferences page renders chart without errors" do
@@ -59,7 +66,7 @@ class OnboardingsTest < ApplicationSystemTestCase
end
# Verify the preview example shows
assert_text "Example"
assert_text I18n.t("onboardings.preferences.example")
assert_text "$2,325.25"
assert_text "+$78.90"
end
@@ -72,7 +79,7 @@ class OnboardingsTest < ApplicationSystemTestCase
# The preview should update (this tests the JavaScript controller)
# Note: This would require the onboarding controller to handle currency changes
assert_text "Example"
assert_text I18n.t("onboardings.preferences.example")
end
test "can change date format and see preview update" do
@@ -82,17 +89,17 @@ class OnboardingsTest < ApplicationSystemTestCase
select "DD/MM/YYYY", from: "user_family_attributes_date_format"
# The preview should update
assert_text "Example"
assert_text I18n.t("onboardings.preferences.example")
end
test "can change theme" do
visit preferences_onboarding_path
# Change theme
select "Dark", from: "user_theme"
# Change theme using value instead of label
select_theme("dark")
# Theme should be applied (this tests the JavaScript controller)
assert_text "Example"
assert_text I18n.t("onboardings.preferences.example")
end
test "preferences form validation" do
@@ -100,7 +107,7 @@ class OnboardingsTest < ApplicationSystemTestCase
# Clear required fields and try to submit
select "", from: "user_family_attributes_locale"
click_button "Complete"
click_button I18n.t("onboardings.preferences.submit")
# Should stay on preferences page with validation errors (may have query params)
assert_match %r{/onboarding/preferences}, current_path
@@ -113,7 +120,7 @@ class OnboardingsTest < ApplicationSystemTestCase
select "Spanish (es)", from: "user_family_attributes_locale"
select "Euro (EUR)", from: "user_family_attributes_currency"
select "DD/MM/YYYY", from: "user_family_attributes_date_format"
select "Dark", from: "user_theme"
select_theme("dark")
# Button text is in Spanish due to locale preview
click_button I18n.t("onboardings.preferences.submit", locale: :es)
@@ -138,20 +145,20 @@ class OnboardingsTest < ApplicationSystemTestCase
visit goals_onboarding_path
assert_text "What brings you here?"
assert_button "Next"
assert_text I18n.t("onboardings.goals.title")
assert_button I18n.t("onboardings.goals.submit")
end
test "trial page renders correctly" do
visit trial_onboarding_path
assert_text "Try Sure"
assert_text "Sure"
end
test "navigation between onboarding steps" do
# Start at main onboarding
visit onboarding_path
click_button "Continue"
click_button I18n.t("onboardings.show.submit")
# Should be at preferences
assert_current_path preferences_onboarding_path
@@ -160,7 +167,7 @@ class OnboardingsTest < ApplicationSystemTestCase
select "English (en)", from: "user_family_attributes_locale"
select "United States Dollar (USD)", from: "user_family_attributes_currency"
select "MM/DD/YYYY", from: "user_family_attributes_date_format"
click_button "Complete"
click_button I18n.t("onboardings.preferences.submit")
# Should be at goals
assert_current_path goals_onboarding_path
@@ -177,17 +184,22 @@ class OnboardingsTest < ApplicationSystemTestCase
visit preferences_onboarding_path
# Should have logout option (rendered as a button component)
assert_text "Sign out"
assert_text I18n.t("onboardings.logout.sign_out")
end
private
def select_theme(value)
find("#user_theme", visible: :all)
.find("option[value='#{value}']", visible: :all)
.select_option
end
def sign_in(user)
visit new_session_path
within %(form[action='#{sessions_path}']) do
fill_in "Email", with: user.email
fill_in "Password", with: user_password_test
click_on "Log in"
fill_in I18n.t("sessions.new.email"), with: user.email
fill_in I18n.t("sessions.new.password"), with: user_password_test
click_on I18n.t("sessions.new.submit")
end
# Wait for successful login