Predefined message keys
Predefined message keys in PXP
The Purple experience uses a set of predefined message keys that allow you to customize all user-facing text in your app. Find a list below.
Bookmarks
Keys controlling the bookmarks feature - the list view, deletion dialogs, and creation date display.
Key | Default Value | Notes |
|---|---|---|
APP_BAR_TITLE_BOOKMARKS | Bookmarks | Title in the app bar when viewing bookmarks |
BOOKMARKS_TITLE | Your bookmarks | Page heading |
BOOKMARK_CREATION_DATE_MESSAGE | Added on %s | %s = formatted date string |
BOOKMARK_PAGE_LABEL | Page | Label prefix for page-level bookmarks |
BOOKMARK_PAGE_LABEL_MESSAGE | Page %s | %s = page number |
BOOKMARK_NO_RESULTS | There are no bookmarks. | Empty state message |
BOOKMARK_ERROR | Error loading bookmarks | Error state heading |
BOOKMARK_ERROR_BUTTON | Reload | Button label for reload on error |
BOOKMARK_CUSTOM_MESSAGE_SINGULAR | 1 bookmark | Count label - singular |
BOOKMARK_CUSTOM_MESSAGE_PLURAL | %s bookmarks | %s = count; used for 2 or more |
ARTICLE_BOOKMARKS_TITLE | Articles | Section heading for article bookmarks |
ARTICLE_BOOKMARKS_MESSAGE_SINGULAR | 1 article bookmarked | Count label - singular |
ARTICLE_BOOKMARKS_MESSAGE_PLURAL | %s articles bookmarked | %s = count |
BUTTON_DELETE_ALL_BOOKMARKS | Delete all bookmarks | Button label |
BOOKMARK_DELETE_TITLE | Delete bookmark | Dialog title |
BOOKMARK_DELETE_MESSAGE | Are you sure you want to delete this bookmark? | Dialog body (no title known) |
BOOKMARK_DELETE_MESSAGE_WITH_TITLE | Are you sure you want to delete the bookmark for "%s"? | %s = bookmark title |
BOOKMARK_DELETE_All_TITLE | Delete bookmarks | Dialog title for bulk delete |
BOOKMARK_DELETE_ALL_MESSAGE | Are you sure you want to delete all bookmarks? | Bulk delete dialog body |
BOOKMARK_DELETE_ALL_OF_ISSUE_MESSAGE | Are you sure you want to delete all bookmarks for the issue "%s"? | %s = issue name |
BOOKMARK_DELETE_CANCEL | Cancel | Cancel button in delete dialog |
BOOKMARK_DELETE_CONFIRM | Delete | Confirm button in delete dialog |
Issues and Downloads
Keys for the issue list, issue detail view, download dialogs, and update prompts.
Key | Default Value | Notes |
|---|---|---|
ISSUE_TITLE | %s | %s = issue title |
ISSUE_DESCRIPTION | %s | %s = issue description body |
ISSUE_DESCRIPTION_TOGGLE_EXPAND | more | Expand toggle label |
ISSUE_DESCRIPTION_TOGGLE_COLLAPSE | collapse | Collapse toggle label |
ISSUE_PUBLICATION_TITLE | %s | %s = publication name |
ISSUE_MORE | Read article | CTA button on issue tile |
ISSUE_NOT_FOUND | The requested content could not be found. | 404 state |
ISSUE_ERROR | Error loading issue data | Error state heading |
ISSUE_ERROR_BUTTON | Try again | Reload button |
ISSUE_UPDATE_BADGE_MESSAGE | Update available | Badge text on issue tile |
ISSUE_UPDATE_TITLE | Update available | Dialog title |
ISSUE_UPDATE_MESSAGE | A new version of this issue "%s" is available. Would you like to read the old version or the new one? | %s = issue name |
ISSUE_UPDATE_OLD_VERSION | Read old version | Dialog button |
ISSUE_UPDATE_NEW_VERSION | Read new version | Dialog button |
ISSUE_DELETE_TITLE | Delete issue | Dialog title |
ISSUE_DELETE_MESSAGE | Do you really want to delete the issue %s? | %s = issue name |
ISSUE_DELETE_CONFIRM | Delete | Confirm button |
ISSUE_DELETE_CANCEL | Cancel | Cancel button |
ISSUE_DOWNLOAD_CONFIRM_TITLE | Download issue | Dialog title |
ISSUE_DOWNLOAD_CONFIRM_MESSAGE | Downloading issue "%(issue.name)s"? | %(issue.name)s = issue name (named placeholder) |
ISSUE_DOWNLOAD_CONFIRM_OK | OK | Confirm button |
ISSUE_DOWNLOAD_CONFIRM_CANCEL | Cancel | Cancel button |
ISSUE_ACTION_READ | Read | Issue action button |
ISSUE_ACTION_DOWNLOAD | Download | Issue action button |
ISSUE_ACTION_DOWNLOADING | Downloading... | Issue action button (in progress state) |
ISSUE_ACTION_PREVIEW | Preview | Issue action button |
ISSUE_ACTION_PURCHASE | Purchase for %s | %s = price string |
ISSUE_ACTION_PURCHASE_LOADING | Loading price... | Shown while price is fetched |
ISSUE_ACTION_PURCHASE_UNAVAILABLE | Price not available | Shown when price cannot be retrieved |
ISSUE_ACTION_SUBSCRIBE | Subscribe | Issue action button |
ISSUE_ACTION_LOGIN | Login | Issue action button (requires login) |
ISSUE_ACTION_COUPON | Coupon | Issue action button |
ISSUE_ACTION_CANCEL | Cancel | Issue action button |
ISSUE_ACTION_DELETE | Delete | Issue action button |
ISSUE_ACTION_DELETE_BOOKMARKS | Delete all for this issue | Issue action button |
Subscriptions
Keys for the subscription store screen, pricing display, and subscription management.
Key | Default Value | Notes |
|---|---|---|
PUBLICATION_SUBSCRIPTIONS_TITLE | Subscriptions for | Screen heading (publication name appended) |
PUBLICATION_SUBSCRIPTIONS_HEADER | Introduction text regarding subscriptions | Introductory text block - replace with your own copy |
PUBLICATION_SUBSCRIPTIONS_FOOTER | <strong>Terms of use</strong> Terms of use go here | Footer HTML block - replace with your legal terms |
PUBLICATION_SUBSCRIPTIONS_MANAGE_SUBSCRIPTIONS | Manage Subscriptions | Link/button label |
PUBLICATION_SUBSCRIPTIONS_RESTORE_PURCHASES | Restore Purchases | Button label |
SUBSCRIPTION_TITLE | %s | %s = subscription product name |
SUBSCRIPTION_DESCRIPTION | %s | %s = subscription description |
SUBSCRIPTION_PRICE | %s | %s = price string |
SUBSCRIPTION_ACTION_PURCHASE | Purchase for %s | %s = price string |
SUBSCRIPTION_ACTION_PURCHASE_UNAVAILABLE | Price not available | Shown when price cannot be loaded |
SUBSCRIPTION_PRICE_TRIAL | Free for %1$s %2$s | %1$s = duration number, %2$s = unit (e.g. days) |
SUBSCRIPTION_PRICE_DISCOUNT | Try %1$s x %2$s %3$s for %4$s | %1$s = count, %2$s = duration, %3$s = unit, %4$s = discounted price |
SUBSCRIPTION_PRICE_INTRODUCTORY | Try %1$s x %2$s %3$s for %4$s | Same placeholders as discount price |
SUBSCRIPTION_PRICE_FINAL | Then %1$s / %2$s %3$s | %1$s = regular price, %2$s = duration, %3$s = unit |
SUBSCRIPTION_ISSUES_PROMOTION | %1$s issues for %2$s. | %1$s = issue count, %2$s = price |
SUBSCRIPTION_ISSUES_ADDITIONAL_PROMOTION | %1$s issues for the price of %2$s. Was %3$s Now %4$s. | %1$s = count, %2$s = new price, %3$s = old price, %4$s = final price |
RESTORE_PURCHASES_BUTTON | Restore purchases | Button label (standalone) |
RESTORE_PURCHASES_TEASER | Already a subscriber? | Teaser text above restore button |
Vouchers and Coupon Codes
Keys for the voucher redemption screen.
Key | Default Value | Notes |
|---|---|---|
COUPON_TITLE | Voucher | Screen/section title |
COUPON_CODE_TITLE | Enter voucher code | Input field label |
COUPON_CODE_PLACEHOLDER | VOUCHER CODE | Input placeholder text |
COUPON_SUBMIT_BUTTON | Redeem voucher | Submit button |
COUPON_TEASER | <h4>Redeem your voucher here</h4>If you've received a promotional voucher... | Introductory text block; supports HTML |
COUPON_ACTIVATED_TITLE | Your activated voucher codes | Heading for the list of active codes |
COUPON_DEACTIVATE_BUTTON | Delete | Button to remove a code |
COUPON_DEACTIVATE_TITLE | Deactivate voucher code | Dialog title |
COUPON_DEACTIVATE_MESSAGE | Do you really want to deactivate the code %s? | %s = coupon code |
COUPON_DEACTIVATE_BUTTON_CONFIRM | OK | Confirm button |
COUPON_DEACTIVATE_BUTTON_CANCEL | Cancel | Cancel button |
COUPON_VALID_TITLE | Add voucher | Success dialog title |
COUPON_VALID_MESSAGE | The code you entered is valid. | Success dialog body |
COUPON_VALID_BUTTON_OK | OK | Success dialog confirm |
COUPON_VALID_BUTTON_CANCEL | Cancel | Success dialog cancel |
Login and Logout
Keys for the login form and logout confirmation.
Key | Default Value | Notes |
|---|---|---|
LOGIN_TITLE | Login | Screen title |
LOGIN_TEASER | Log in for more content | Teaser text above the form |
LOGIN_TEASER_RELOGIN | You have been logged out. Please log in again. | Shown after session expiry |
LOGIN_USERNAME_PLACEHOLDER | Username field placeholder | |
LOGIN_PASSWORD_PLACEHOLDER | Password | Password field placeholder |
LOGIN_SUBMIT_BUTTON | Log in | Submit button |
LOGIN_HELP | Forgotten your password? <a href='...'>recover</a> | Helper text; supports HTML with a link |
LOGIN_LOGOUT_TITLE | Logout | Logout confirm dialog title |
LOGIN_LOGOUT_TEASER | Do you really want to logout? | Logout confirm dialog body |
LOGIN_LOGOUT_BUTTON | Log out | Logout button label |
LOGOUT_TITLE | Logout | Alternative logout dialog title |
LOGOUT_MESSAGE | Do you really want to logout? | Alternative logout dialog body |
LOGOUT_BUTTON_CONFIRM | Logout | Confirm button |
LOGOUT_BUTTON_CANCEL | Cancel | Cancel button |
Search
Keys for the search screen and results display.
Key | Default Value | Notes |
|---|---|---|
SEARCH_FIELD_PLACEHOLDER | Search... | Input placeholder |
SEARCH_RESULT_TITLE | %s results | %s = result count |
SEARCH_RESULT_EMPTY_TITLE | no results | Heading when nothing is found |
SEARCH_RESULT_NO_RESULT | No content was found for your search phrase "%1$s". Please try again. | %1$s = search term |
SEARCH_RESULT_NO_SEARCH | Please enter a search phrase. | Shown before any search is submitted |
SEARCH_RESULT_PAGE_LABEL_MESSAGE | Page %s | %s = page number in result |
SEARCH_RESULT_PAGE_HIT_EXCERPT | %s | %s = matching excerpt text |
SEARCH_RESULT_TOGGLE_EXPAND | Show more | Show more results button |
SEARCH_RESULT_TOGGLE_COLLAPSE | Collapse | Collapse results button |
Navigation
Keys for bottom navigation labels and section headings.
Key | Default Value | Notes |
|---|---|---|
NAVIGATION_HOME | Home | Bottom nav tab |
NAVIGATION_NEWSSTAND | Newsstand | Bottom nav tab |
NAVIGATION_FEED | Newsfeed | Bottom nav tab |
NAVIGATION_SEARCH | Search | Bottom nav tab |
HOME_LIST_TITLE | Latest Articles | Section heading on home screen |
HOME_SWIPER_TITLE | Latest Issues | Section heading on home screen |
TOGGLE_PUBLICATION_TYPE_CHANNEL | Articles | Toggle label for article view |
TOGGLE_PUBLICATION_TYPE_KIOSK | Issues | Toggle label for issue view |
DROPDOWN_CATEGORY_RESET | Show All | Category filter reset option |
DROPDOWN_ISSUE_STATE_RESET | All Issues | Issue state filter - all |
DROPDOWN_ISSUE_STATE_PURCHASED | My Issues | Issue state filter - purchased |
DROPDOWN_ISSUE_STATE_LOCAL | My Downloads | Issue state filter - downloaded |
List and Dialog Controls
Generic keys that are used across list views, expandable content, and modal dialogs.
Key | Default Value | Notes |
|---|---|---|
LIST_NO_RESULTS | There are no contents matching the filter criteria. | Empty state |
LIST_ERROR | Error loading data. %s | %s = error detail |
LIST_ERROR_BUTTON | Reload | Reload button on list error |
LIST_ENTRY_TOGGLE_EXPAND | Show %u more | %u = count of hidden items |
LIST_ENTRY_TOGGLE_COLLAPSE | Show %u less | %u = count |
LIST_ENTRIES_TOGGLE_EXPAND | Show %u more | Same as above; used in grouped contexts |
LIST_ENTRIES_TOGGLE_COLLAPSE | Show %u less | Same as above |
LIST_GROUPED_ENTRY_TOGGLE_EXPAND | Show %u more | Grouped entry expand |
LIST_GROUPED_ENTRY_TOGGLE_COLLAPSE | Show %u less | Grouped entry collapse |
LIST_GROUPED_ENTRIES_TOGGLE_EXPAND | Show %u more | Grouped entries expand |
LIST_GROUPED_ENTRIES_TOGGLE_COLLAPSE | Show %u less | Grouped entries collapse |
LIST_ACTION_SELECT_ALL | Select all | Bulk action |
LIST_ACTION_UNSELECT_ALL | Deselect all | Bulk action |
LIST_ACTION_CONFIRM | Confirm | Bulk action confirm |
LIST_ACTION_RESET | Reset | Bulk action reset |
DIALOG_TITLE | Dialog | Generic dialog title fallback |
DIALOG_ERROR | Error | Generic error dialog title fallback |
PULL_TO_REFRESH_PULL | Pull to refresh | Pull-to-refresh hint |
PULL_TO_REFRESH_RELEASE | Release to refresh | Pull-to-refresh release hint |
MENU_ITEM | %s | %s = menu item label |
VIEW_ERROR | Error loading data. %s | %s = error detail |
VIEW_ERROR_BUTTON | Reload | Reload button on view error |
Error Messages
Keys for all user-facing error notifications. Most accept a %s placeholder for a technical error detail that can be appended to the message.
Key | Default Value | Notes |
|---|---|---|
ERROR_LOGIN | The login could not be performed. %s | %s = error detail |
ERROR_PURCHASE | The purchase could not be completed. %s | %s = error detail |
ERROR_SUBSCRIPTION | The subscription could not be purchased. Please try again later. | |
ERROR_PRODUCT | Product data could not be loaded. %s | %s = error detail |
ERROR_DOWNLOAD | Download failed for %2$s. %1$s | %1$s = error detail, %2$s = item name |
ERROR_CONTENT_OPEN | Error opening content. %s | %s = error detail |
ERROR_PREVIEW_OPEN | Error opening preview. %s | %s = error detail |
ERROR_DEEP_LINK_LANDING | Shared issue could not be opened. %s | %s = error detail |
ERROR_SEARCH | The search could not be performed. Please try again later | |
ERROR_SHARE | Content could not be shared. | |
ERROR_ADD_BOOKMARK | Bookmark could not be created. %1$s | %1$s = error detail |
ERROR_DELETE_BOOKMARK | This bookmark could not be deleted. %s | %s = error detail |
ERROR_DELETE_BOOKMARK_WITH_TITLE | The bookmark for "%2$s" could not be deleted. %1$s | %1$s = error detail, %2$s = bookmark title |
ERROR_DELETE_ALL_BOOKMARKS | Not all bookmarks could be deleted. %s | %s = error detail |
ERROR_COUPON_INVALID | The code you entered is not valid. | |
ERROR_COUPON_INVALID_BUTTON | OK | Dialog button |
ERROR_COUPON_EXISTS | This code is already added. | |
ERROR_COUPON_EXISTS_BUTTON | OK | Dialog button |
ERROR_COUPON_OFFLINE | No internet connection! This code could not be added. | |
ERROR_COUPON_OFFLINE_BUTTON | OK | Dialog button |
ERROR_COUPON_DEACTIVATE | This code could not be deactivated. | |
ERROR_COUPON_DEACTIVATE_BUTTON | OK | Dialog button |
ERROR_COUPON_DEACTIVATE_OFFLINE | No internet connection! This code could not be deactivated. | |
ERROR_COUPON_DEACTIVATE_OFFLINE_BUTTON | OK | Dialog button |
ERROR_COUPON_DEACTIVATE_UNKNOWN | Code is unknown! This code could not be deactivated. | |
ERROR_COUPON_DEACTIVATE_UNKNOWN_BUTTON | OK | Dialog button |
System and Access Messages
Generic system messages for authentication state, connectivity, and unknown errors.
Key | Default Value | Notes |
|---|---|---|
ACCESS_DENIED | Access denied. | Shown when content requires a subscription or login |
PAYMENT_REQUIRED | Access denied. | Shown when payment is required to access content |
NOT_LOGGED_IN | You are not logged in. | |
ALREADY_LOGGED_IN | You are already logged in. | |
ALREADY_OWNED | You already own this product. | |
INVALID_CREDENTIALS | Please check your username and password. | |
NETWORK | Please check your internet connection. | Offline / connectivity error |
NOT_FOUND | The requested content could not be found. | |
NO_ISSUES_FOUND | The requested content could not be found. | |
RESOURCE_NOT_FOUND | The requested resource could not be found. | |
UNKNOWN_OFFER | The requested offer could not be found. | |
UNKNOWN_PRODUCT | The requested product could not be found. | |
UNKNOWN_VENDOR | Vendor is unknown. | |
UNKNOWN | An unknown error occurred. | Generic fallback error |
CANCELLED | Process was cancelled by user. | |
CONFIGURATION_ERROR | Error in remote system. | |
INSUFFICIENT_SPACE | The storage on your device is not sufficient. | Shown during downloads |
VALIDATION_FAILED | The purchase could not be validated. | |
Article Content (Extended)
These keys are available in apps using the extended storefront and control article detail page elements, sponsorship labels and custom post types.
Key | Default Value | Notes |
|---|---|---|
ARTICLE_CONTENT_PUBLICATION_DATE | Published: %1s at %2s | %1s = date, %2s = time |
ARTICLE_CONTENT_TAG_HEADLINE | Tags | Label above tag list |
ARTICLE_SPONSOR_TEXT_SPONSORED | Sponsored by <span class="sponsor-name">%s</span> | %s = sponsor name; HTML allowed |
ARTICLE_SPONSOR_TEXT_NATIVE_ADVERTORIAL | Partnered content with <span class="sponsor-name">%s</span> | %s = sponsor name |
ARTICLE_SPONSOR_TEXT_NATIVE_TRUE | Partnered content with <span class="sponsor-name">%s</span> | %s = sponsor name |
ARTICLE_SPONSORED_BRAND | Advertisement feature with %s | %s = brand name |
ARTICLE_SPONSOR_TEXT | Advertisement feature with %s | %s = sponsor name |
READ_TIME | %s min read | %s = estimated minutes |
AUTHOR_ARTICLES_HEADLINE | Recent articles by %s | %s = author name |
HERO_ARTICLE_BUTTON | Read more | CTA on hero article tile |
TAXONOMY_LATEST_ARTICLES_HEADLINE | What's new? | Heading on taxonomy/tag pages |
Content and Catalog Items
Keys for the Content component, which displays generic catalog items such as articles, chapters, episodes, or any non-issue content type. The Content component is separate from the Issue component - both support similar action patterns but have independent sets of message keys, so you can customize their labels independently.
Key | Default Value | Notes |
|---|---|---|
CONTENT_TITLE | %s | %s = content title |
CONTENT_DESCRIPTION | %s | %s = content description body |
CONTENT_PUBLICATION_TITLE | %s | %s = publication name |
CONTENT_DESCRIPTION_TOGGLE_EXPAND | Show more | Expand toggle for long descriptions |
CONTENT_DESCRIPTION_TOGGLE_COLLAPSE | Show less | Collapse toggle for long descriptions |
CONTENT_ERROR | Error loading content data | Error state heading |
CONTENT_ERROR_BUTTON | Try again | Reload button on error state |
CONTENT_UPDATE_BADGE_MESSAGE | Update available | Badge text on content tile |
CONTENT_ACTION_READ | Read | Action button - content is unlocked |
CONTENT_ACTION_SUBSCRIBE | Subscribe | Action button - locked content, subscription option available |
CONTENT_ACTION_LOGIN | Login | Action button - locked content, login required; only shown when the user is not logged in |
CONTENT_ACTION_COUPON | Coupon | Action button - locked content, coupon entry option available |
CONTENT_ACTION_PURCHASE | Purchase for %s | Action button - locked content, single purchase available; %s = formatted price |
CONTENT_ACTION_PURCHASE_LOADING | Loading price... | Shown while the price is being fetched from the store |
CONTENT_ACTION_PURCHASE_UNAVAILABLE | Price not available | Shown when the price cannot be loaded (missing product ID or store configuration error) |
PDF Downloads
The keys label the download button variants: full PDF, single page, and left/right page of a two-page spread.
Key | Default Value | Notes |
|---|---|---|
DOWNLOAD_PDF_FULL | Download full PDF | Button label |
DOWNLOAD_PDF_SINGLE | Download single page | Button label |
DOWNLOAD_PDF_SINGLE_LEFT | Download left page | Button label (spread view) |
DOWNLOAD_PDF_SINGLE_RIGHT | Download right page | Button label (spread view) |
Placeholder Syntax Reference
Purple message keys use sprintf-js style placeholders:
Syntax | Meaning | Example |
|---|---|---|
%s | Single string value | Added on %s |
%u | Unsigned integer | Show %u more |
%1$s, %2$s | Positional string (for reordering in translations) | %1$s error in %2$s |
%(name)s | Named placeholder | %(issue.name)s |
When writing translations, always preserve placeholder tokens exactly - including the $ and position number where present.