mirror of
https://github.com/we-promise/sure.git
synced 2026-04-19 12:04:08 +00:00
Add option for FOSS contribution payments (#730)
* First commit * Use subscription flow for monetary contributions * Removed only part of the SPAN * Localize Stripe payments message * More localization of contribution strings * Missed two billing to payment changes * Fix tests * Localization of "Open Demo" strings * Fix grammar error * Update for consistency * Localize CTA * More localilzation strings
This commit is contained in:
@@ -5,7 +5,7 @@ class SubscriptionsController < ApplicationController
|
|||||||
# Upgrade page for unsubscribed users
|
# Upgrade page for unsubscribed users
|
||||||
def upgrade
|
def upgrade
|
||||||
if Current.family.subscription&.active?
|
if Current.family.subscription&.active?
|
||||||
redirect_to root_path, notice: "You are already subscribed."
|
redirect_to root_path, notice: "You are already contributing. Thank you!"
|
||||||
else
|
else
|
||||||
@plan = params[:plan] || "annual"
|
@plan = params[:plan] || "annual"
|
||||||
render layout: "onboardings"
|
render layout: "onboardings"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
class Subscription < ApplicationRecord
|
class Subscription < ApplicationRecord
|
||||||
TRIAL_DAYS = 14
|
TRIAL_DAYS = 45
|
||||||
|
|
||||||
belongs_to :family
|
belongs_to :family
|
||||||
|
|
||||||
@@ -28,11 +28,11 @@ class Subscription < ApplicationRecord
|
|||||||
def name
|
def name
|
||||||
case interval
|
case interval
|
||||||
when "month"
|
when "month"
|
||||||
"Monthly Plan"
|
"Monthly Contribution"
|
||||||
when "year"
|
when "year"
|
||||||
"Annual Plan"
|
"Annual Contribution"
|
||||||
else
|
else
|
||||||
"Free trial"
|
"Open demo"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -91,12 +91,12 @@
|
|||||||
<div class="px-4 py-3 space-y-4 bg-container shadow-border-xs rounded-xl">
|
<div class="px-4 py-3 space-y-4 bg-container shadow-border-xs rounded-xl">
|
||||||
<div class="flex items-start justify-between">
|
<div class="flex items-start justify-between">
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm font-medium text-primary">Free trial</p>
|
<p class="text-sm font-medium text-primary"><%= t("layouts.trial.open_demo") %></p>
|
||||||
<p class="text-sm text-secondary"><%= Current.family.days_left_in_trial %> days remaining</p>
|
<p class="text-sm text-secondary"><%= t("layouts.trial.data_deleted_in_days", days: Current.family.days_left_in_trial) %></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= render DS::Link.new(
|
<%= render DS::Link.new(
|
||||||
text: "Upgrade",
|
text: t("layouts.trial.contribute"),
|
||||||
href: upgrade_subscription_path,
|
href: upgrade_subscription_path,
|
||||||
) %>
|
) %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,21 +17,21 @@
|
|||||||
<%= image_tag "logo-color.png", class: "w-16 mb-6" %>
|
<%= image_tag "logo-color.png", class: "w-16 mb-6" %>
|
||||||
|
|
||||||
<p class="text-xl lg:text-3xl text-primary font-display font-medium">
|
<p class="text-xl lg:text-3xl text-primary font-display font-medium">
|
||||||
Try Sure for 14 days.
|
Try Sure for 45 days
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2 class="text-xl lg:text-3xl font-display text-secondary font-medium mb-2">
|
<h2 class="text-xl lg:text-3xl font-display text-secondary font-medium mb-2">
|
||||||
No credit card required
|
Data will be deleted then
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<p class="text-sm text-secondary text-center mb-8">
|
<p class="text-sm text-secondary text-center mb-8">
|
||||||
Starting the trial activates your account for Sure. You won't need to enter payment details.
|
Starting today you can give the product a good look. <br/>If you like it, self-host or contribute to continue using it here.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<% if Current.family.can_start_trial? %>
|
<% if Current.family.can_start_trial? %>
|
||||||
<%= render DS::Button.new(
|
<%= render DS::Button.new(
|
||||||
text: "Try Sure for 14 days",
|
text: "Try Sure for 45 days",
|
||||||
href: subscription_path,
|
href: subscription_path,
|
||||||
full_width: true,
|
full_width: true,
|
||||||
data: { turbo: false }
|
data: { turbo: false }
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-8">
|
<div class="space-y-8">
|
||||||
<h2 class="text-center text-lg lg:text-2xl font-medium text-primary">How your trial will work</h2>
|
<h2 class="text-center text-lg lg:text-2xl font-medium text-primary">How things work here</h2>
|
||||||
|
|
||||||
<div class="flex gap-3">
|
<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">
|
<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">
|
||||||
@@ -65,70 +65,19 @@
|
|||||||
<div class="space-y-12">
|
<div class="space-y-12">
|
||||||
<div class="space-y-1.5 text-sm">
|
<div class="space-y-1.5 text-sm">
|
||||||
<p class="text-primary font-medium">Today</p>
|
<p class="text-primary font-medium">Today</p>
|
||||||
<p class="text-secondary">You'll get free access to Sure for 14 days</p>
|
<p class="text-secondary">You'll get free access to Sure for 45 days on our AWS.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-1.5 text-sm">
|
<div class="space-y-1.5 text-sm">
|
||||||
<p class="text-primary font-medium">In 13 days (<%= 13.days.from_now.strftime("%B %d") %>)</p>
|
<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 when your trial will end.</p>
|
<p class="text-secondary">We'll notify you to remind you to export your data.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-1.5 text-sm">
|
<div class="space-y-1.5 text-sm">
|
||||||
<p class="text-primary font-medium">In 14 days (<%= 14.days.from_now.strftime("%B %d") %>)</p>
|
<p class="text-primary font-medium">In 45 days (<%= 45.days.from_now.strftime("%B %d") %>)</p>
|
||||||
<p class="text-secondary">Your trial ends — subscribe to continue using Sure</p>
|
<p class="text-secondary">We delete your data — contribute to continue using Sure here!</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-8 max-w-2xl mx-auto">
|
|
||||||
<h2 class="text-center text-lg lg:text-2xl font-medium text-primary">Here's what's included</h2>
|
|
||||||
|
|
||||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-x-12 gap-y-6 text-secondary">
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render DS::FilledIcon.new(icon: "landmark", variant: :surface) %>
|
|
||||||
<p class="text-sm text-primary text-center">More than 10,000 institutions to connect to</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render DS::FilledIcon.new(icon: "layers", variant: :surface) %>
|
|
||||||
<p class="text-sm text-primary text-center">Connect unlimited accounts and account types</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render DS::FilledIcon.new(icon: "chart-line", variant: :surface) %>
|
|
||||||
<p class="text-sm text-primary text-center">Performance and investment returns across portfolio</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render DS::FilledIcon.new(icon: "credit-card", variant: :surface) %>
|
|
||||||
<p class="text-sm text-primary text-center">Comprehensive transaction tracking experience</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render "chats/ai_avatar" %>
|
|
||||||
<p class="text-sm text-primary text-center">Unlimited access and chats with Sure AI</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render DS::FilledIcon.new(icon: "keyboard", variant: :surface) %>
|
|
||||||
<p class="text-sm text-primary text-center">Manual account tracking that works well</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render DS::FilledIcon.new(icon: "globe-2", variant: :surface) %>
|
|
||||||
<p class="text-sm text-primary text-center">Multiple currencies and near global coverage</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render DS::FilledIcon.new(icon: "ship", variant: :surface) %>
|
|
||||||
<p class="text-sm text-primary text-center">Early access to newly released features</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex flex-col gap-4 items-center">
|
|
||||||
<%= render DS::FilledIcon.new(icon: "messages-square", variant: :surface) %>
|
|
||||||
<p class="text-sm text-primary text-center">Priority human support from team</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -13,22 +13,22 @@
|
|||||||
<div class="text-sm space-y-1">
|
<div class="text-sm space-y-1">
|
||||||
<% if @family.has_active_subscription? %>
|
<% if @family.has_active_subscription? %>
|
||||||
<p class="text-primary">
|
<p class="text-primary">
|
||||||
<span>You are currently subscribed to the <span class="font-medium"><%= @family.subscription.name %></span>.</span>
|
<span>Currently on the <span class="font-medium"><%= @family.subscription.name %></span>.</span>
|
||||||
|
|
||||||
<% if @family.next_payment_date %>
|
<% if @family.next_payment_date %>
|
||||||
<span>Your plan renews on <span class="font-medium"><%= @family.next_payment_date.strftime("%B %d, %Y") %></span>.</span>
|
<span><%= t("views.settings.payments.renewal", date: l(@family.next_payment_date, format: :long)) %></span>
|
||||||
<% end %>
|
<% end %>
|
||||||
</p>
|
</p>
|
||||||
<% elsif @family.trialing? %>
|
<% elsif @family.trialing? %>
|
||||||
<p class="text-primary">
|
<p class="text-primary">
|
||||||
You are currently trialing <%= product_name %>
|
Currently using the open demo of <%= product_name %> <br />
|
||||||
<span class="text-secondary">
|
<span class="text-secondary">
|
||||||
(<%= @family.days_left_in_trial %> days remaining)
|
(Data will be deleted in <%= @family.days_left_in_trial %> days)
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
<% else %>
|
<% else %>
|
||||||
<p class="text-primary">You are currently <span class="font-medium">not subscribed</span></p>
|
<p class="text-primary">You are currently <span class="font-medium">not contributing</span></p>
|
||||||
<p class="text-secondary">Once you subscribe to <%= product_name %>, you'll see your payment settings here.</p>
|
<p class="text-secondary">Contributions to <%= product_name %> will show here.</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
) %>
|
) %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= render DS::Link.new(
|
<%= render DS::Link.new(
|
||||||
text: "Choose plan",
|
text: "Choose level",
|
||||||
variant: "primary",
|
variant: "primary",
|
||||||
icon: "plus",
|
icon: "plus",
|
||||||
icon_position: "right",
|
icon_position: "right",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<%# locals: (plan:, form:, checked: false) %>
|
<%# locals: (plan:, form:, checked: false) %>
|
||||||
|
|
||||||
<% price = plan == "annual" ? 90 : 9 %>
|
<% price = plan == "annual" ? 25 : 2.50 %>
|
||||||
<% frequency = plan == "annual" ? "/year" : "/month" %>
|
<% frequency = plan == "annual" ? "/year" : "/month" %>
|
||||||
|
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
@@ -14,17 +14,13 @@
|
|||||||
|
|
||||||
<div class="mt-auto flex items-end gap-1">
|
<div class="mt-auto flex items-end gap-1">
|
||||||
<p class="font-display text-xl lg:text-3xl font-medium text-primary">$<%= price %><%= frequency %></p>
|
<p class="font-display text-xl lg:text-3xl font-medium text-primary">$<%= price %><%= frequency %></p>
|
||||||
|
|
||||||
<% if plan == "annual" %>
|
|
||||||
<span class="text-sm text-secondary mb-1">or <%= Money.new(price.to_f / 52).format %>/week</span>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="text-sm text-secondary">
|
<p class="text-sm text-secondary">
|
||||||
<% if plan == "annual" %>
|
<% if plan == "annual" %>
|
||||||
Billed annually, 2 months free
|
Charged annually
|
||||||
<% else %>
|
<% else %>
|
||||||
Billed monthly
|
Charged monthly
|
||||||
<% end %>
|
<% end %>
|
||||||
</p>
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -25,18 +25,18 @@
|
|||||||
<%= image_tag "logo-color.png", class: "w-16 mb-6" %>
|
<%= image_tag "logo-color.png", class: "w-16 mb-6" %>
|
||||||
|
|
||||||
<% if Current.family.trialing? %>
|
<% if Current.family.trialing? %>
|
||||||
<p class="text-xl lg:text-3xl text-primary font-display font-medium">Your trial has <%= Current.family.days_left_in_trial %> days remaining</p>
|
<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>
|
||||||
<% else %>
|
<% else %>
|
||||||
<p class="text-xl lg:text-3xl text-primary font-display font-medium">Your trial is over</p>
|
<p class="text-xl lg:text-3xl text-primary font-display font-medium"><%= t('subscriptions.upgrade.trial_over') %></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<h2 class="text-xl lg:text-3xl font-display font-medium mb-2">
|
<h2 class="text-xl lg:text-3xl font-display font-medium mb-2">
|
||||||
<span class="text-secondary">Unlock</span>
|
<span class="text-secondary"><%= t('subscriptions.upgrade.header.support') %></span>
|
||||||
<span class="bg-gradient-to-r from-[#EABE7F] to-[#957049] bg-clip-text text-transparent">Sure</span>
|
<span class="bg-gradient-to-r from-[#EABE7F] to-[#957049] bg-clip-text text-transparent"><%= t('subscriptions.upgrade.header.sure') %></span>
|
||||||
<span class="text-secondary">today</span>
|
<span class="text-secondary"><%= t('subscriptions.upgrade.header.today') %></span>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<p class="text-sm text-secondary mb-8">To continue using Sure pick a plan below.</p>
|
<p class="text-sm text-secondary mb-8"><%= t('subscriptions.upgrade.cta') %></p>
|
||||||
|
|
||||||
<%= form_with url: new_subscription_path, method: :get, class: "max-w-xs", data: { turbo: false } do |form| %>
|
<%= form_with url: new_subscription_path, method: :get, class: "max-w-xs", data: { turbo: false } do |form| %>
|
||||||
<div class="space-y-4 mb-6">
|
<div class="space-y-4 mb-6">
|
||||||
@@ -46,13 +46,13 @@
|
|||||||
|
|
||||||
<div class="text-center space-y-2">
|
<div class="text-center space-y-2">
|
||||||
<%= render DS::Button.new(
|
<%= render DS::Button.new(
|
||||||
text: "Subscribe and unlock Sure",
|
text: t('subscriptions.upgrade.contribute_and_support_sure'),
|
||||||
variant: "primary",
|
variant: "primary",
|
||||||
full_width: true
|
full_width: true
|
||||||
) %>
|
) %>
|
||||||
|
|
||||||
<p class="text-xs text-secondary">
|
<p class="text-xs text-secondary">
|
||||||
In the next step, you'll be redirected to Stripe which handles our payments.
|
<%= t('subscriptions.upgrade.redirect_to_stripe') %>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -17,3 +17,7 @@ ca:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Política de privacitat
|
privacy_policy: Política de privacitat
|
||||||
terms_of_service: Termes del servei
|
terms_of_service: Termes del servei
|
||||||
|
trial:
|
||||||
|
open_demo: Demo oberta
|
||||||
|
data_deleted_in_days: Les dades s'eliminaran en %{days} dies
|
||||||
|
contribute: Contribuir
|
||||||
@@ -18,3 +18,7 @@ de:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Datenschutzrichtlinie
|
privacy_policy: Datenschutzrichtlinie
|
||||||
terms_of_service: Nutzungsbedingungen
|
terms_of_service: Nutzungsbedingungen
|
||||||
|
trial:
|
||||||
|
open_demo: Offene Demo
|
||||||
|
data_deleted_in_days: Daten werden in %{days} Tagen gelöscht
|
||||||
|
contribute: Beitragen
|
||||||
@@ -17,3 +17,7 @@ en:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Privacy Policy
|
privacy_policy: Privacy Policy
|
||||||
terms_of_service: Terms of Service
|
terms_of_service: Terms of Service
|
||||||
|
trial:
|
||||||
|
open_demo: Open demo
|
||||||
|
data_deleted_in_days: Data deleted in %{days} days
|
||||||
|
contribute: Contribute
|
||||||
@@ -17,3 +17,7 @@ es:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Política de privacidad
|
privacy_policy: Política de privacidad
|
||||||
terms_of_service: Términos de servicio
|
terms_of_service: Términos de servicio
|
||||||
|
trial:
|
||||||
|
open_demo: Demo pública
|
||||||
|
data_deleted_in_days: Los datos se eliminarán en %{days} días
|
||||||
|
contribute: Contribuir
|
||||||
@@ -17,3 +17,7 @@ fr:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Politique de confidentialité
|
privacy_policy: Politique de confidentialité
|
||||||
terms_of_service: Conditions d'utilisation
|
terms_of_service: Conditions d'utilisation
|
||||||
|
trial:
|
||||||
|
open_demo: Démo ouverte
|
||||||
|
data_deleted_in_days: Les données seront supprimées dans %{days} jours
|
||||||
|
contribute: Contribuer
|
||||||
@@ -17,3 +17,7 @@ nb:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Personvernerklæring
|
privacy_policy: Personvernerklæring
|
||||||
terms_of_service: Vilkår for bruk
|
terms_of_service: Vilkår for bruk
|
||||||
|
trial:
|
||||||
|
open_demo: Åpen demo
|
||||||
|
data_deleted_in_days: Data slettes om %{days} dager
|
||||||
|
contribute: Bidra
|
||||||
@@ -17,3 +17,7 @@ nl:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Privacybeleid
|
privacy_policy: Privacybeleid
|
||||||
terms_of_service: Servicevoorwaarden
|
terms_of_service: Servicevoorwaarden
|
||||||
|
trial:
|
||||||
|
open_demo: Open demo
|
||||||
|
data_deleted_in_days: Gegevens worden over %{days} dagen verwijderd
|
||||||
|
contribute: Bijdragen
|
||||||
@@ -17,3 +17,7 @@ pt-BR:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Política de Privacidade
|
privacy_policy: Política de Privacidade
|
||||||
terms_of_service: Termos de Serviço
|
terms_of_service: Termos de Serviço
|
||||||
|
trial:
|
||||||
|
open_demo: Demo aberta
|
||||||
|
data_deleted_in_days: Os dados serão excluídos em %{days} dias
|
||||||
|
contribute: Contribuir
|
||||||
@@ -18,3 +18,7 @@ ro:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Politica de confidențialitate
|
privacy_policy: Politica de confidențialitate
|
||||||
terms_of_service: Termeni și condiții
|
terms_of_service: Termeni și condiții
|
||||||
|
trial:
|
||||||
|
open_demo: Demo deschis
|
||||||
|
data_deleted_in_days: Datele vor fi șterse în %{days} zile
|
||||||
|
contribute: Contribuie
|
||||||
@@ -17,3 +17,7 @@ tr:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: Gizlilik Politikası
|
privacy_policy: Gizlilik Politikası
|
||||||
terms_of_service: Hizmet Şartları
|
terms_of_service: Hizmet Şartları
|
||||||
|
trial:
|
||||||
|
open_demo: Açık demo
|
||||||
|
data_deleted_in_days: Veriler %{days} gün içinde silinecek
|
||||||
|
contribute: Katkıda bulun
|
||||||
@@ -18,3 +18,7 @@ zh-CN:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: 隐私政策
|
privacy_policy: 隐私政策
|
||||||
terms_of_service: 服务条款
|
terms_of_service: 服务条款
|
||||||
|
trial:
|
||||||
|
open_demo: 开放演示
|
||||||
|
data_deleted_in_days: 数据将在 %{days} 天后删除
|
||||||
|
contribute: 贡献
|
||||||
@@ -17,3 +17,7 @@ zh-TW:
|
|||||||
footer:
|
footer:
|
||||||
privacy_policy: 隱私權政策
|
privacy_policy: 隱私權政策
|
||||||
terms_of_service: 服務條款
|
terms_of_service: 服務條款
|
||||||
|
trial:
|
||||||
|
open_demo: 開放示範
|
||||||
|
data_deleted_in_days: 資料將在 %{days} 天後刪除
|
||||||
|
contribute: 貢獻
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
ca:
|
ca:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "La teva contribució continua el %{date}."
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
de:
|
de:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Ihr Beitrag wird fortgesetzt am %{date}."
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
en:
|
en:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Your contribution continues on %{date}."
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
@@ -18,9 +22,9 @@ en:
|
|||||||
subtitle: AI identifies and enriches transaction data with merchant information
|
subtitle: AI identifies and enriches transaction data with merchant information
|
||||||
payments:
|
payments:
|
||||||
show:
|
show:
|
||||||
page_title: Payment
|
page_title: Payments
|
||||||
subscription_subtitle: Update your subscription and payment details
|
subscription_subtitle: Update your credit card details
|
||||||
subscription_title: Manage subscription
|
subscription_title: Manage contributions
|
||||||
preferences:
|
preferences:
|
||||||
show:
|
show:
|
||||||
country: Country
|
country: Country
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
es:
|
es:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Tu contribución continúa el %{date}."
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
fr:
|
fr:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Votre contribution se poursuit le %{date}."
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
nb:
|
nb:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Bidraget ditt fortsetter den %{date}."
|
||||||
settings:
|
settings:
|
||||||
payments:
|
payments:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
nl:
|
nl:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Uw bijdrage wordt voortgezet op %{date}."
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
pt-BR:
|
pt-BR:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Sua contribuição continua em %{date}."
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
ro:
|
ro:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Contribuția ta continuă pe %{date}."
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
tr:
|
tr:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "Katkınız %{date} tarihinde devam edecek."
|
||||||
settings:
|
settings:
|
||||||
payments:
|
payments:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
zh-CN:
|
zh-CN:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "您的贡献将在 %{date} 继续。"
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
zh-TW:
|
zh-TW:
|
||||||
|
views:
|
||||||
|
settings:
|
||||||
|
payments:
|
||||||
|
renewal: "您的貢獻將於 %{date} 繼續。"
|
||||||
settings:
|
settings:
|
||||||
ai_prompts:
|
ai_prompts:
|
||||||
show:
|
show:
|
||||||
|
|||||||
@@ -2,3 +2,13 @@
|
|||||||
ca:
|
ca:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} no està disponible en mode autoallotjat."
|
self_hosted_alert: "%{product_name} no està disponible en mode autoallotjat."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Contribuir i donar suport a Sure"
|
||||||
|
cta: "Continua donant suport al desenvolupament d'aquest codi!"
|
||||||
|
header:
|
||||||
|
support: "Suport"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "avui"
|
||||||
|
redirect_to_stripe: "En el proper pas, se us redirigirà a Stripe, que gestiona les targetes de crèdit per nosaltres."
|
||||||
|
trialing: "Les teves dades s'eliminaran en %{days} dies"
|
||||||
|
trial_over: "El teu període de prova ha acabat"
|
||||||
@@ -2,3 +2,13 @@
|
|||||||
de:
|
de:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} ist im Self-Hosting-Modus nicht verfügbar."
|
self_hosted_alert: "%{product_name} ist im Self-Hosting-Modus nicht verfügbar."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Beitragen und Sure unterstützen"
|
||||||
|
cta: "Unterstützen Sie weiterhin die Entwicklung dieser Codebasis!"
|
||||||
|
header:
|
||||||
|
support: "Unterstützen"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "heute"
|
||||||
|
redirect_to_stripe: "Im nächsten Schritt werden Sie zu Stripe weitergeleitet, das Kreditkarten für uns verwaltet."
|
||||||
|
trialing: "Ihre Daten werden in %{days} Tagen gelöscht"
|
||||||
|
trial_over: "Ihre Testversion ist abgelaufen"
|
||||||
@@ -1,3 +1,13 @@
|
|||||||
en:
|
en:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} is not available in self-hosted mode."
|
self_hosted_alert: "%{product_name} is not available in self-hosted mode."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Contribute and support Sure"
|
||||||
|
cta: "Continue supporting the development of this codebase!"
|
||||||
|
header:
|
||||||
|
support: "Support"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "today"
|
||||||
|
redirect_to_stripe: "In the next step, you'll be redirected to Stripe which handles credit cards for us."
|
||||||
|
trialing: "Your data will be deleted in %{days} days"
|
||||||
|
trial_over: "Your trial is over"
|
||||||
@@ -2,3 +2,13 @@
|
|||||||
es:
|
es:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} no está disponible en modo autoalojado."
|
self_hosted_alert: "%{product_name} no está disponible en modo autoalojado."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Contribuir y apoyar a Sure"
|
||||||
|
cta: "¡Apoya el desarrollo de este proyecto!"
|
||||||
|
header:
|
||||||
|
support: "Apoyar"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "hoy"
|
||||||
|
redirect_to_stripe: "En el siguiente paso, serás redirigido a Stripe, que gestiona las tarjetas de crédito por nosotros."
|
||||||
|
trialing: "Tus datos se eliminarán en %{days} días"
|
||||||
|
trial_over: "Tu período de prueba ha terminado"
|
||||||
@@ -1,3 +1,13 @@
|
|||||||
fr:
|
fr:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} n'est pas disponible en mode auto-hébergé."
|
self_hosted_alert: "%{product_name} n'est pas disponible en mode auto-hébergé."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Contribuer et soutenir Sure"
|
||||||
|
cta: "Continuez à soutenir le développement de cette base de code !"
|
||||||
|
header:
|
||||||
|
support: "Soutenir"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "aujourd'hui"
|
||||||
|
redirect_to_stripe: "Dans l'étape suivante, vous serez redirigé vers Stripe, qui gère les cartes de crédit pour nous."
|
||||||
|
trialing: "Vos données seront supprimées dans %{days} jours"
|
||||||
|
trial_over: "Votre période d'essai est terminée"
|
||||||
@@ -1,4 +1,14 @@
|
|||||||
---
|
---
|
||||||
nb:
|
nb:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} er ikke tilgjengelig i selvhostet modus."
|
self_hosted_alert: "%{product_name} er ikke tilgjengelig i selvhostet modus."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Bidra og støtt Sure"
|
||||||
|
cta: "Fortsett å støtte utviklingen av denne kodebasen!"
|
||||||
|
header:
|
||||||
|
support: "Støtt"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "i dag"
|
||||||
|
redirect_to_stripe: "I neste trinn vil du bli omdirigert til Stripe, som håndterer kredittkort for oss."
|
||||||
|
trialing: "Dataene dine vil bli slettet om %{days} dager"
|
||||||
|
trial_over: "Prøveperioden din er over"
|
||||||
@@ -1,3 +1,13 @@
|
|||||||
nl:
|
nl:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} is niet beschikbaar in zelfgehoste modus."
|
self_hosted_alert: "%{product_name} is niet beschikbaar in zelfgehoste modus."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Bijdragen en Sure ondersteunen"
|
||||||
|
cta: "Blijf de ontwikkeling van deze codebase ondersteunen!"
|
||||||
|
header:
|
||||||
|
support: "Ondersteunen"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "vandaag"
|
||||||
|
redirect_to_stripe: "In de volgende stap wordt u doorgestuurd naar Stripe, dat creditcards voor ons verwerkt."
|
||||||
|
trialing: "Uw gegevens worden over %{days} dagen verwijderd"
|
||||||
|
trial_over: "Uw proefperiode is voorbij"
|
||||||
@@ -2,3 +2,13 @@
|
|||||||
pt-BR:
|
pt-BR:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} não está disponível no modo self-hosted."
|
self_hosted_alert: "%{product_name} não está disponível no modo self-hosted."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Contribuir e apoiar o Sure"
|
||||||
|
cta: "Continue apoiando o desenvolvimento desta base de código!"
|
||||||
|
header:
|
||||||
|
support: "Apoiar"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "hoje"
|
||||||
|
redirect_to_stripe: "Na próxima etapa, você será redirecionado para o Stripe, que processa cartões de crédito para nós."
|
||||||
|
trialing: "Seus dados serão excluídos em %{days} dias"
|
||||||
|
trial_over: "Seu período de teste terminou"
|
||||||
@@ -1,4 +1,14 @@
|
|||||||
---
|
---
|
||||||
ro:
|
ro:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} nu este disponibil în modul self-hosted."
|
self_hosted_alert: "%{product_name} nu este disponibil în modul self-hosted."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Contribuie și sprijină Sure"
|
||||||
|
cta: "Continuați să sprijiniți dezvoltarea acestei baze de cod!"
|
||||||
|
header:
|
||||||
|
support: "Sprijină"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "astăzi"
|
||||||
|
redirect_to_stripe: "În pasul următor, veți fi redirecționat către Stripe, care procesează cardurile de credit pentru noi."
|
||||||
|
trialing: "Datele dvs. vor fi șterse în %{days} zile"
|
||||||
|
trial_over: "Perioada dvs. de probă s-a încheiat"
|
||||||
@@ -1,4 +1,14 @@
|
|||||||
---
|
---
|
||||||
tr:
|
tr:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} kendi sunucunda barındırılan modda kullanılamaz."
|
self_hosted_alert: "%{product_name} kendi sunucunda barındırılan modda kullanılamaz."
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "Katkıda bulun ve Sure'u destekle"
|
||||||
|
cta: "Bu kod tabanının geliştirilmesini desteklemeye devam edin!"
|
||||||
|
header:
|
||||||
|
support: "Destekle"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "bugün"
|
||||||
|
redirect_to_stripe: "Bir sonraki adımda, kredi kartlarını bizim için işleyen Stripe'a yönlendirileceksiniz."
|
||||||
|
trialing: "Verileriniz %{days} gün içinde silinecek"
|
||||||
|
trial_over: "Deneme süreniz sona erdi"
|
||||||
@@ -2,3 +2,13 @@
|
|||||||
zh-CN:
|
zh-CN:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "%{product_name} 在自托管模式下不可用。"
|
self_hosted_alert: "%{product_name} 在自托管模式下不可用。"
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "贡献并支持 Sure"
|
||||||
|
cta: "继续支持此代码库的开发!"
|
||||||
|
header:
|
||||||
|
support: "支持"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "今天"
|
||||||
|
redirect_to_stripe: "在下一步中,您将被重定向到 Stripe,它为我们处理信用卡。"
|
||||||
|
trialing: "您的数据将在 %{days} 天后删除"
|
||||||
|
trial_over: "您的试用期已结束"
|
||||||
@@ -2,3 +2,13 @@
|
|||||||
zh-TW:
|
zh-TW:
|
||||||
subscriptions:
|
subscriptions:
|
||||||
self_hosted_alert: "在自行代管模式下不支援 %{product_name}。"
|
self_hosted_alert: "在自行代管模式下不支援 %{product_name}。"
|
||||||
|
upgrade:
|
||||||
|
contribute_and_support_sure: "貢獻並支持 Sure"
|
||||||
|
cta: "繼續支持此程式碼庫的開發!"
|
||||||
|
header:
|
||||||
|
support: "支持"
|
||||||
|
sure: "Sure"
|
||||||
|
today: "今天"
|
||||||
|
redirect_to_stripe: "在下一步中,您將被重新導向到 Stripe,它為我們處理信用卡。"
|
||||||
|
trialing: "您的資料將在 %{days} 天後刪除"
|
||||||
|
trial_over: "您的試用期已結束"
|
||||||
@@ -145,7 +145,7 @@ class OnboardingsTest < ApplicationSystemTestCase
|
|||||||
test "trial page renders correctly" do
|
test "trial page renders correctly" do
|
||||||
visit trial_onboarding_path
|
visit trial_onboarding_path
|
||||||
|
|
||||||
assert_text "trial" # Adjust based on actual content
|
assert_text "Try Sure"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "navigation between onboarding steps" do
|
test "navigation between onboarding steps" do
|
||||||
|
|||||||
Reference in New Issue
Block a user