diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html b/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html
index ceba05e87..9fb882016 100644
--- a/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html
+++ b/src/pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html
@@ -24,7 +24,11 @@
{% if subev.best_availability_is_low %}
{% trans "Few tickets left" %}
{% else %}
- {% trans "Book now" %}
+ {% if subev.has_paid_item %}
+ {% trans "Buy now" context "available_event_in_list" %}
+ {% else %}
+ {% trans "Book now" %}
+ {% endif %}
{% endif %}
{% elif event.settings.waiting_list_enabled and subev.best_availability_state >= 0 %}
{% trans "Waiting list" %}
diff --git a/src/pretix/presale/templates/pretixpresale/fragment_calendar.html b/src/pretix/presale/templates/pretixpresale/fragment_calendar.html
index 88bb18906..019f59830 100644
--- a/src/pretix/presale/templates/pretixpresale/fragment_calendar.html
+++ b/src/pretix/presale/templates/pretixpresale/fragment_calendar.html
@@ -71,7 +71,11 @@
{% if event.event.best_availability_is_low %}
{% trans "Few tickets left" %}
{% else %}
- {% trans "Book now" %}
+ {% if event.event.has_paid_item %}
+ {% trans "Buy now" context "available_event_in_list" %}
+ {% else %}
+ {% trans "Book now" %}
+ {% endif %}
{% endif %}
{% elif event.event.settings.waiting_list_enabled and event.event.best_availability_state >= 0 %}
{% trans "Waiting list" %}
diff --git a/src/pretix/presale/templates/pretixpresale/fragment_day_calendar.html b/src/pretix/presale/templates/pretixpresale/fragment_day_calendar.html
index 92097b9ae..569084cca 100644
--- a/src/pretix/presale/templates/pretixpresale/fragment_day_calendar.html
+++ b/src/pretix/presale/templates/pretixpresale/fragment_day_calendar.html
@@ -92,7 +92,11 @@
{% if event.event.best_availability_is_low %}
{% trans "Few tickets left" %}
{% else %}
- {% trans "Book now" %}
+ {% if event.event.has_paid_item %}
+ {% trans "Buy now" context "available_event_in_list" %}
+ {% else %}
+ {% trans "Book now" %}
+ {% endif %}
{% endif %}
{% elif event.event.settings.waiting_list_enabled and event.event.best_availability_state >= 0 %}
{% trans "Waiting list" %}
diff --git a/src/pretix/presale/templates/pretixpresale/fragment_week_calendar.html b/src/pretix/presale/templates/pretixpresale/fragment_week_calendar.html
index 573822142..acbde9ce6 100644
--- a/src/pretix/presale/templates/pretixpresale/fragment_week_calendar.html
+++ b/src/pretix/presale/templates/pretixpresale/fragment_week_calendar.html
@@ -56,7 +56,11 @@
{% if event.event.best_availability_is_low %}
{% trans "Few tickets left" %}
{% else %}
- {% trans "Book now" %}
+ {% if event.event.has_paid_item %}
+ {% trans "Buy now" context "available_event_in_list" %}
+ {% else %}
+ {% trans "Book now" %}
+ {% endif %}
{% endif %}
{% elif event.event.settings.waiting_list_enabled and event.event.best_availability_state >= 0 %}
{% trans "Waiting list" %}
diff --git a/src/pretix/presale/templates/pretixpresale/organizers/index.html b/src/pretix/presale/templates/pretixpresale/organizers/index.html
index 588d765b0..ebbf2310a 100644
--- a/src/pretix/presale/templates/pretixpresale/organizers/index.html
+++ b/src/pretix/presale/templates/pretixpresale/organizers/index.html
@@ -84,7 +84,11 @@
{% if e.best_availability_is_low %}
{% trans "Few tickets left" %}
{% else %}
- {% trans "Book now" %}
+ {% if e.has_paid_item %}
+ {% trans "Buy now" context "available_event_in_list" %}
+ {% else %}
+ {% trans "Book now" %}
+ {% endif %}
{% endif %}
{% elif e.settings.waiting_list_enabled and e.best_availability_state >= 0 %}
{% trans "Waiting list" %}
diff --git a/src/pretix/presale/views/widget.py b/src/pretix/presale/views/widget.py
index 287a4ae8b..13ddb48eb 100644
--- a/src/pretix/presale/views/widget.py
+++ b/src/pretix/presale/views/widget.py
@@ -41,7 +41,7 @@ from django.template import Context, Engine
from django.template.loader import get_template
from django.utils.formats import date_format
from django.utils.timezone import now
-from django.utils.translation import get_language, gettext
+from django.utils.translation import get_language, gettext, pgettext
from django.utils.translation.trans_real import DjangoTranslation
from django.views import View
from django.views.decorators.cache import cache_page
@@ -374,7 +374,10 @@ class WidgetAPIProductList(EventListMixin, View):
availability['reason'] = 'low'
else:
availability['color'] = 'green'
- availability['text'] = gettext('Book now')
+ if ev.has_paid_item:
+ availability['text'] = pgettext('available_event_in_list', 'Buy now')
+ else:
+ availability['text'] = gettext('Book now')
availability['reason'] = 'ok'
elif event.settings.waiting_list_enabled and (ev.best_availability_state is not None and ev.best_availability_state >= 0):
availability['color'] = 'orange'