0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

🐛 Fixed unclear newsletter (un)subscribe modal (#21739)

fixes
https://linear.app/ghost/issue/DES-953/newsletter-unsubscribe-modal-is-unclear-leading-to-repeated

Previously, when clicking 'Unsubscribe' in an email, landing on this
modal it was unclear what had just happened if you didn't read the text
below the title, causing people to click the toggles repeatedly.

We've now added a toast notification to make it clear what has just happened,
and if you click the toggles, the notification also shows.

Ideally, we'd be able to stack these notifications in case you hit
multiple toggles in quick succession, but that's going to be a separate
issue, as—to achieve that—it needs to be rewritten more significantly.

---------

Co-authored-by: Sodbileg Gansukh <sodbileg.gansukh@gmail.com>
This commit is contained in:
Daniël van der Winden 2024-11-28 10:42:43 +01:00 committed by GitHub
parent cd7f8fbba4
commit 30a0018c15
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
67 changed files with 215 additions and 127 deletions

View file

@ -1,11 +1,10 @@
import AppContext from '../../AppContext';
import CloseButton from '../common/CloseButton';
import BackButton from '../common/BackButton';
import {useContext, useState} from 'react';
import {useContext} from 'react';
import Switch from '../common/Switch';
import {getSiteNewsletters, hasMemberGotEmailSuppression} from '../../utils/helpers';
import ActionButton from '../common/ActionButton';
import {ReactComponent as CheckmarkIcon} from '../../images/icons/check-circle.svg';
function AccountHeader() {
const {brandColor, lastPage, onAction, t} = useContext(AppContext);
@ -19,32 +18,11 @@ function AccountHeader() {
);
}
function SuccessIcon({show, checked}) {
let classNames = [];
if (show) {
classNames.push('gh-portal-checkmark-show');
}
if (checked) {
classNames.push('gh-portal-toggle-checked');
}
classNames.push('gh-portal-checkmark-container');
return (
<div className={classNames.join(' ')} data-testid='checkmark-container'>
<CheckmarkIcon className='gh-portal-checkmark-icon' alt='' />
</div>
);
}
function NewsletterPrefSection({newsletter, subscribedNewsletters, setSubscribedNewsletters}) {
const isChecked = subscribedNewsletters.some((d) => {
return d.id === newsletter?.id;
});
const [showUpdated, setShowUpdated] = useState(false);
const [timeoutId, setTimeoutId] = useState(null);
return (
<section className='gh-portal-list-toggle-wrapper' data-testid="toggle-wrapper">
<div className='gh-portal-list-detail'>
@ -52,48 +30,40 @@ function NewsletterPrefSection({newsletter, subscribedNewsletters, setSubscribed
<p>{newsletter?.description}</p>
</div>
<div style={{display: 'flex', alignItems: 'center'}}>
<SuccessIcon show={showUpdated} checked={isChecked} />
<Switch id={newsletter.id} onToggle={(e, checked) => {
let updatedNewsletters = [];
if (!checked) {
updatedNewsletters = subscribedNewsletters.filter((d) => {
return d.id !== newsletter.id;
});
setShowUpdated(true);
clearTimeout(timeoutId);
let newTimeoutId = setTimeout(() => {
setShowUpdated(false);
}, 2000);
setTimeoutId(newTimeoutId);
} else {
updatedNewsletters = subscribedNewsletters.filter((d) => {
return d.id !== newsletter.id;
}).concat(newsletter);
setShowUpdated(true);
clearTimeout(timeoutId);
let newTimeoutId = setTimeout(() => {
setShowUpdated(false);
}, 2000);
setTimeoutId(newTimeoutId);
}
setSubscribedNewsletters(updatedNewsletters);
}} checked={isChecked} />
}} checked={isChecked} dataTestId="switch-input" />
</div>
</section>
);
}
function CommentsSection({updateCommentNotifications, isCommentsEnabled, enableCommentNotifications}) {
const {t} = useContext(AppContext);
const {t, onAction} = useContext(AppContext);
const isChecked = !!enableCommentNotifications;
const [showUpdated, setShowUpdated] = useState(false);
const [timeoutId, setTimeoutId] = useState(null);
if (!isCommentsEnabled) {
return null;
}
const handleToggle = async (e, checked) => {
await updateCommentNotifications(checked);
onAction('showPopupNotification', {
action: 'updated:success',
message: t('Comment preferences updated.')
});
};
return (
<section className='gh-portal-list-toggle-wrapper' data-testid="toggle-wrapper">
<div className='gh-portal-list-detail'>
@ -101,16 +71,7 @@ function CommentsSection({updateCommentNotifications, isCommentsEnabled, enableC
<p>{t('Get notified when someone replies to your comment')}</p>
</div>
<div style={{display: 'flex', alignItems: 'center'}}>
<SuccessIcon show={showUpdated} checked={isChecked} />
<Switch id="comments" onToggle={(e, checked) => {
setShowUpdated(true);
clearTimeout(timeoutId);
let newTimeoutId = setTimeout(() => {
setShowUpdated(false);
}, 2000);
setTimeoutId(newTimeoutId);
updateCommentNotifications(checked);
}} checked={isChecked} />
<Switch id="comments" onToggle={handleToggle} checked={isChecked} dataTestId="switch-input" />
</div>
</section>
);
@ -200,7 +161,11 @@ export default function NewsletterManagement({
</div>
<footer className={'gh-portal-action-footer' + (hasMemberGotEmailSuppression({member}) ? ' gh-feature-suppressions' : '')}>
<div style={{width: '100%'}}>
<ShowPaidMemberMessage isPaid={isPaidMember} site={site} />
<ShowPaidMemberMessage
isPaid={isPaidMember}
site={site}
subscribedNewsletters={subscribedNewsletters}
/>
</div>
{hasMemberGotEmailSuppression({member}) && !isDisabled &&
<div className="gh-portal-footer-secondary">

View file

@ -11,9 +11,9 @@ import {SYNTAX_I18NEXT} from '@doist/react-interpolate';
export const PopupNotificationStyles = `
.gh-portal-popupnotification {
position: absolute;
top: 8px;
left: 8px;
right: 8px;
top: 16px;
right: 16px;
left: 16px;
padding: 12px;
background: var(--grey2);
z-index: 11000;
@ -32,12 +32,12 @@ export const PopupNotificationStyles = `
.gh-portal-popupnotification p {
color: var(--white);
margin: 0;
margin: 0 0 0 8px;
padding: 0 20px;
font-size: 1.5rem;
line-height: 1.5em;
letter-spacing: 0.2px;
text-align: center;
text-align: left;
}
.gh-portal-popupnotification a {

View file

@ -95,6 +95,10 @@ export default function AccountEmailPage() {
updateSubscribedNewsletters={(updatedNewsletters) => {
setSubscribedNewsletters(updatedNewsletters);
onAction('updateNewsletterPreference', {newsletters: updatedNewsletters});
onAction('showPopupNotification', {
action: 'updated:success',
message: t('Email preferences updated.')
});
}}
updateCommentNotifications={async (enabled) => {
onAction('updateNewsletterPreference', {enableCommentNotifications: enabled});

View file

@ -13,7 +13,7 @@ const setup = (overrides) => {
);
const unsubscribeAllBtn = utils.getByText('Unsubscribe from all emails');
const closeBtn = utils.getByTestId('close-popup');
return {
unsubscribeAllBtn,
closeBtn,
@ -34,7 +34,7 @@ describe('Account Email Page', () => {
const unsubscribeBtns = getAllByTestId(`toggle-wrapper`);
expect(getByText('Email preferences')).toBeInTheDocument();
// one for each newsletter and one for comments
expect(unsubscribeBtns).toHaveLength(3);
expect(unsubscribeBtns).toHaveLength(3);
expect(unsubscribeAllBtn).toBeInTheDocument();
});
@ -43,22 +43,24 @@ describe('Account Email Page', () => {
const siteData = getSiteData({
newsletters: newsletterData
});
const {mockOnActionFn, unsubscribeAllBtn, getAllByTestId} = setup({site: siteData, member: getMemberData({newsletters: newsletterData})});
let checkmarkContainers = getAllByTestId('checkmark-container');
const {mockOnActionFn, unsubscribeAllBtn, getAllByRole} = setup({site: siteData, member: getMemberData({newsletters: newsletterData})});
let checkboxes = getAllByRole('checkbox');
let newsletter1Checkbox = checkboxes[0];
let newsletter2Checkbox = checkboxes[1];
// each newsletter should have the checked class (this is how we know they're enabled/subscribed to)
expect(checkmarkContainers[0]).toHaveClass('gh-portal-toggle-checked');
expect(checkmarkContainers[1]).toHaveClass('gh-portal-toggle-checked');
expect(newsletter1Checkbox).toBeChecked();
expect(newsletter2Checkbox).toBeChecked();
fireEvent.click(unsubscribeAllBtn);
expect(mockOnActionFn).toHaveBeenCalledTimes(2);
expect(mockOnActionFn).toHaveBeenCalledWith('showPopupNotification', {action: 'updated:success', message: 'Unsubscribed from all emails.'});
expect(mockOnActionFn).toHaveBeenLastCalledWith('updateNewsletterPreference', {newsletters: [], enableCommentNotifications: false});
checkmarkContainers = getAllByTestId('checkmark-container');
expect(checkmarkContainers).toHaveLength(3);
checkmarkContainers.forEach((newsletter) => {
checkboxes = getAllByRole('checkbox');
expect(checkboxes).toHaveLength(3);
checkboxes.forEach((checkbox) => {
// each newsletter htmlElement should not have the checked class
expect(newsletter).not.toHaveClass('gh-portal-toggle-checked');
expect(checkbox).not.toBeChecked();
});
});
@ -75,10 +77,11 @@ describe('Account Email Page', () => {
const siteData = getSiteData({
newsletters: newsletterData
});
const {mockOnActionFn, getAllByTestId} = setup({site: siteData, member: getMemberData({newsletters: newsletterData})});
let checkmarkContainers = getAllByTestId('checkmark-container');
const {mockOnActionFn, getAllByTestId, getAllByRole} = setup({site: siteData, member: getMemberData({newsletters: newsletterData})});
let checkboxes = getAllByRole('checkbox');
let newsletter1Checkbox = checkboxes[0];
// each newsletter should have the checked class (this is how we know they're enabled/subscribed to)
expect(checkmarkContainers[0]).toHaveClass('gh-portal-toggle-checked');
expect(newsletter1Checkbox).toBeChecked();
let subscriptionToggles = getAllByTestId('switch-input');
fireEvent.click(subscriptionToggles[0]);
expect(mockOnActionFn).toHaveBeenCalledWith('updateNewsletterPreference', {newsletters: [{id: newsletterData[1].id}]});

View file

@ -59,12 +59,16 @@ export default function UnsubscribePage() {
const updateNewsletters = async (newsletters) => {
if (loggedInMember) {
// when we have a member logged in, we need to update the newsletters in the context
onAction('updateNewsletterPreference', {newsletters});
} else {
await updateMemberNewsletters({api, memberUuid: pageData.uuid, key: pageData.key, newsletters});
}
setSubscribedNewsletters(newsletters);
const notification = {
action: `updated:success`,
message: t('Email preferences updated.')
};
onAction('showPopupNotification', notification);
};
const updateCommentNotifications = async (enabled) => {
@ -77,6 +81,10 @@ export default function UnsubscribePage() {
updatedData = await updateMemberNewsletters({api, memberUuid: pageData.uuid, key: pageData.key, enableCommentNotifications: enabled});
}
setMember(updatedData);
onAction('showPopupNotification', {
action: 'updated:success',
message: t('Comment preferences updated.')
});
};
const unsubscribeAll = async () => {

View file

@ -91,12 +91,12 @@ describe('Newsletter Subscriptions', () => {
// unsure why fireEvent has no effect here
await userEvent.click(manageSubscriptionsButton);
await waitFor(() => {
const newsletter1 = within(popupIframeDocument).queryByText('Newsletter 1');
const newsletter2 = within(popupIframeDocument).queryByText('Newsletter 2');
const emailPreferences = within(popupIframeDocument).queryByText('Email preferences');
// within(popupIframeDocument).getByText('dslkfjsdlk');
expect(newsletter1).toBeInTheDocument();
expect(newsletter2).toBeInTheDocument();
@ -125,23 +125,23 @@ describe('Newsletter Subscriptions', () => {
const newsletter1Toggle = subscriptionToggles[0];
expect(newsletter1Toggle).toBeInTheDocument();
await userEvent.click(newsletter1Toggle);
// verify that subscription to Newsletter 1 was removed
const expectedSubscriptions = Newsletters.filter(n => n.id !== Newsletters[0].id).map(n => ({id: n.id}));
expect(ghostApi.member.update).toHaveBeenLastCalledWith(
{newsletters: expectedSubscriptions}
);
const subscriptionToggleContainers = within(popupIframeDocument).getAllByTestId('checkmark-container');
const newsletter1ToggleContainer = subscriptionToggleContainers[0];
expect(newsletter1ToggleContainer).toBeInTheDocument();
expect(newsletter1ToggleContainer).not.toHaveClass('gh-portal-toggle-checked');
const newsletter2ToggleContainer = subscriptionToggleContainers[1];
expect(newsletter2ToggleContainer).toBeInTheDocument();
expect(newsletter2ToggleContainer).toHaveClass('gh-portal-toggle-checked');
const checkboxes = within(popupIframeDocument).getAllByRole('checkbox');
const newsletter1Checkbox = checkboxes[0];
const newsletter2Checkbox = checkboxes[1];
expect(newsletter1Checkbox).not.toBeChecked();
expect(newsletter2Checkbox).toBeChecked();
// resubscribe to Newsletter 1
await userEvent.click(newsletter1Toggle);
expect(newsletter1ToggleContainer).toHaveClass('gh-portal-toggle-checked');
expect(newsletter1Checkbox).toBeChecked();
expect(ghostApi.member.update).toHaveBeenLastCalledWith(
{newsletters: Newsletters.reverse().map(n => ({id: n.id}))}
);
@ -165,14 +165,12 @@ describe('Newsletter Subscriptions', () => {
expect(ghostApi.member.update).toHaveBeenCalledWith({newsletters: [], enableCommentNotifications: false});
// Verify the local state shows the newsletter as unsubscribed
let newsletterToggles = within(popupIframeDocument).queryAllByTestId('checkmark-container');
let newsletter1Toggle = newsletterToggles[0];
let newsletter2Toggle = newsletterToggles[1];
const checkboxes = within(popupIframeDocument).getAllByRole('checkbox');
const newsletter1Checkbox = checkboxes[0];
const newsletter2Checkbox = checkboxes[1];
expect(newsletter1Toggle).toBeInTheDocument();
expect(newsletter2Toggle).toBeInTheDocument();
expect(newsletter1Toggle).not.toHaveClass('gh-portal-toggle-checked');
expect(newsletter2Toggle).not.toHaveClass('gh-portal-toggle-checked');
expect(newsletter1Checkbox).not.toBeChecked();
expect(newsletter2Checkbox).not.toBeChecked();
});
describe('from the unsubscribe link > UnsubscribePage', () => {
@ -197,17 +195,15 @@ describe('Newsletter Subscriptions', () => {
}
);
expect(popupFrame).toBeInTheDocument();
expect(within(popupIframeDocument).getByText(/will no longer receive/)).toBeInTheDocument();
// Verify the local state shows the newsletter as unsubscribed
let newsletterToggles = within(popupIframeDocument).queryAllByTestId('checkmark-container');
let newsletter1Toggle = newsletterToggles[0];
let newsletter2Toggle = newsletterToggles[1];
const checkboxes = within(popupIframeDocument).getAllByRole('checkbox');
const newsletter1Checkbox = checkboxes[0];
const newsletter2Checkbox = checkboxes[1];
expect(newsletter1Toggle).toBeInTheDocument();
expect(newsletter2Toggle).toBeInTheDocument();
expect(newsletter1Toggle).not.toHaveClass('gh-portal-toggle-checked');
expect(newsletter2Toggle).toHaveClass('gh-portal-toggle-checked');
expect(newsletter1Checkbox).not.toBeChecked();
expect(newsletter2Checkbox).toBeChecked();
});
test('unsubscribe via email link while logged in', async () => {
@ -231,41 +227,37 @@ describe('Newsletter Subscriptions', () => {
}
);
// Verify the local state shows the newsletter as unsubscribed
let newsletterToggles = within(popupIframeDocument).queryAllByTestId('checkmark-container');
let newsletter1Toggle = newsletterToggles[0];
let newsletter2Toggle = newsletterToggles[1];
let checkboxes = within(popupIframeDocument).getAllByRole('checkbox');
let newsletter1Checkbox = checkboxes[0];
let newsletter2Checkbox = checkboxes[1];
expect(within(popupIframeDocument).getByText(/will no longer receive/)).toBeInTheDocument();
expect(newsletter1Toggle).toBeInTheDocument();
expect(newsletter2Toggle).toBeInTheDocument();
expect(newsletter1Toggle).not.toHaveClass('gh-portal-toggle-checked');
expect(newsletter2Toggle).toHaveClass('gh-portal-toggle-checked');
expect(newsletter1Checkbox).not.toBeChecked();
expect(newsletter2Checkbox).toBeChecked();
// Close the UnsubscribePage popup frame
const popupCloseButton = within(popupIframeDocument).queryByTestId('close-popup');
await userEvent.click(popupCloseButton);
expect(popupFrame).not.toBeInTheDocument();
// Reopen Portal and go to the unsubscribe page
await userEvent.click(triggerButton);
// We have a new popup frame - can't use the old locator from setup
const newPopupFrame = queryByTitle(/portal-popup/i);
expect(newPopupFrame).toBeInTheDocument();
const newPopupIframeDocument = newPopupFrame.contentDocument;
// Open the NewsletterManagement page
const manageSubscriptionsButton = within(newPopupIframeDocument).queryByRole('button', {name: 'Manage'});
await userEvent.click(manageSubscriptionsButton);
// Verify that the unsubscribed newsletter is shown as unsubscribed in the new popup
newsletterToggles = within(newPopupIframeDocument).queryAllByTestId('checkmark-container');
newsletter1Toggle = newsletterToggles[0];
newsletter2Toggle = newsletterToggles[1];
expect(newsletter1Toggle).toBeInTheDocument();
expect(newsletter2Toggle).toBeInTheDocument();
expect(newsletter1Toggle).not.toHaveClass('gh-portal-toggle-checked');
expect(newsletter2Toggle).toHaveClass('gh-portal-toggle-checked');
checkboxes = within(newPopupIframeDocument).getAllByRole('checkbox');
newsletter1Checkbox = checkboxes[0];
newsletter2Checkbox = checkboxes[1];
expect(newsletter1Checkbox).not.toBeChecked();
expect(newsletter2Checkbox).toBeChecked();
});
test('unsubscribe link without a key param', async () => {

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Kies u nuusbriefs",
"Click here to retry": "Kliek hier om weer te probeer",
"Close": "Sluit",
"Comment preferences updated.": "",
"Comments": "Kommentaar",
"Complimentary": "Komplimentêr",
"Confirm": "Bevestig",
@ -58,6 +59,7 @@
"Email newsletter": "Epos nuusbrief",
"Email newsletter settings updated": "",
"Email preferences": "E-pos instellings",
"Email preferences updated.": "",
"Emails": "E-posse",
"Emails disabled": "E-posse afgeskakel",
"Ends {{offerEndDate}}": "Eindig {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "اختر نشرتك الإخبارية المفضلة",
"Click here to retry": "انقر هنا لإعادة المحاولة",
"Close": "إغلاق",
"Comment preferences updated.": "",
"Comments": "تعليقات",
"Complimentary": "مجانًا",
"Confirm": "تأكيد",
@ -58,6 +59,7 @@
"Email newsletter": "النشرة الإخبارية عبر البريد الإلكتروني",
"Email newsletter settings updated": "تم تحديث إعدادات النشرة الإخبارية عبر البريد الإلكتروني",
"Email preferences": "تفضيلات البريد الإلكتروني",
"Email preferences updated.": "",
"Emails": "رسائل البريد الإلكتروني",
"Emails disabled": "تم تعطيل جميع رسائل البريد الإلكتروني",
"Ends {{offerEndDate}}": "{{offerEndDate}} ينتهي في ",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Изберете бюлетини",
"Click here to retry": "Щракнете за нов опит",
"Close": "Затвори",
"Comment preferences updated.": "",
"Comments": "Коментари",
"Complimentary": "Подарък",
"Confirm": "Потвърди",
@ -58,6 +59,7 @@
"Email newsletter": "Имейл бюлетин",
"Email newsletter settings updated": "",
"Email preferences": "Имейл настройки ",
"Email preferences updated.": "",
"Emails": "Имейли",
"Emails disabled": "Писмата са спрени",
"Ends {{offerEndDate}}": "До {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "আপনার নিউজলেটার বেছে নিন",
"Click here to retry": "আবার চেষ্টা করতে এখানে ক্লিক করুন",
"Close": "বন্ধ করুন",
"Comment preferences updated.": "",
"Comments": "মন্তব্য",
"Complimentary": "সম্পূর্ণ বিনামূল্যে",
"Confirm": "নিশ্চিত করুন",
@ -58,6 +59,7 @@
"Email newsletter": "ইমেল নিউজলেটার",
"Email newsletter settings updated": "",
"Email preferences": "ইমেল পছন্দ",
"Email preferences updated.": "",
"Emails": "ইমেল",
"Emails disabled": "ইমেল নিষ্ক্রিয়",
"Ends {{offerEndDate}}": "{{offerEndDate}} এ শেষ হবে",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Odaberi svoje newslettere",
"Click here to retry": "Pokušaj ponovo",
"Close": "Zatvori",
"Comment preferences updated.": "",
"Comments": "Komentari",
"Complimentary": "Besplatno",
"Confirm": "Potvrdi",
@ -58,6 +59,7 @@
"Email newsletter": "Email newsletter",
"Email newsletter settings updated": "",
"Email preferences": "Postavke Email-a",
"Email preferences updated.": "",
"Emails": "Email adrese",
"Emails disabled": "Onemogućene Email adrese",
"Ends {{offerEndDate}}": "Završava {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Selecciona els teus butlletins",
"Click here to retry": "Fes clic aquí per tornar a intentar",
"Close": "Tancar",
"Comment preferences updated.": "",
"Comments": "Comentaris",
"Complimentary": "Complementari",
"Confirm": "Confirmar",
@ -58,6 +59,7 @@
"Email newsletter": "Butlletí informatiu per correu electrònic",
"Email newsletter settings updated": "",
"Email preferences": "Preferència del correu electrònic",
"Email preferences updated.": "",
"Emails": "Correus electrònics",
"Emails disabled": "Correus electrònics desactivats",
"Ends {{offerEndDate}}": "Finalitza el {{offerEndDate}}",

View file

@ -15,6 +15,7 @@
"An error occurred": "",
"An unexpected error occured. Please try again or <a>contact support</a> if the error persists.": "Notification if an unexpected error occurs.",
"Anonymous": "Comment placed by a member without a name",
"Are you sure?": "",
"Authors": "",
"Back": "A button to return to the previous page",
"Back to Log in": "A button to return to the login screen",
@ -39,6 +40,7 @@
"Click here to retry": "A link to retry the login process",
"Close": "A button to close or dismiss portal and other UI components",
"Comment": "Button text to post your comment, on smaller devices",
"Comment preferences updated.": "",
"Comments": "A title for the comments section on a post",
"Complete signup for {{siteTitle}}!": "Title in signup email. As the email calls for action, the imperative form shall be used",
"Complete your profile": "Title of the modal to edit your expertise in the comments app",
@ -62,7 +64,9 @@
"Current plan": "Label for the current plan",
"Delete": "Delete button",
"Delete account": "A button for members to delete their account",
"Deleted": "",
"Deleted member": "Name of a member used for comments when the member has been deleted",
"Deleting": "",
"Didn't mean to do this? Manage your preferences <button>here</button>.": "Message shown after unsubscribing from a newsletter",
"Discussion": "Short default title for the comments section used on smaller devices",
"Don't have an account?": "A link on the login screen, directing people who do not yet have an account to sign up.",
@ -72,6 +76,7 @@
"Email newsletter": "Title for the email newsletter settings",
"Email newsletter settings updated": "",
"Email preferences": "A label for email settings",
"Email preferences updated.": "",
"Email sent": "Button text after being clicked, when an email has been sent to confirm a new subscription. Should be short.",
"Emails": "A label for a list of emails",
"Emails disabled": "Title for a message in portal telling members that they are not receiving emails, due to repeated delivery failures to their address",
@ -107,6 +112,7 @@
"Here are a few other sites you may enjoy.": "Text introducing related sites someone may find interesting",
"Hey there!": "An introduction/opening to an email",
"Hey there,": "An introduction/opening to an email",
"Hidden for members": "",
"Hide": "Action in the context menu for administrators, on smaller devices",
"Hide comment": "Action in the context menu for administrators",
"If a newsletter is flagged as spam, emails are automatically disabled for that address to make sure you no longer receive any unwanted messages.": "Paragraph in the email suppression FAQ",
@ -145,13 +151,10 @@
"No member exists with this e-mail address. Please sign up first.": "",
"Not receiving emails?": "A link in portal to take members to an FAQ area about what to do if you're not receiving emails",
"Now check your email!": "A confirmation message after logging in or signing up",
"Once deleted, this comment cant be recovered.": "",
"Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "A paragraph in the email suppression FAQ",
"One day ago": "Time a comment was placed",
"One hour ago": "Time a comment was placed",
"One min ago": "",
"One month ago": "Time a comment was placed",
"One week ago": "Time a comment was placed",
"One year ago": "Time a comment was placed",
"Permanent failure (bounce)": "A section title in the email suppression FAQ",
"Phone number": "Label for phone number input",
"Plan": "Label for the default subscription plan",
@ -167,7 +170,9 @@
"Re-enable emails": "A button for members to turn-back-on emails, if they have been previously disabled as a result of delivery failures",
"Recommendations": "A suggestion by/for another site of interest to users",
"Renews at {{price}}.": "Label for a discounted subscription, explains the price it will renew at",
"Replied to": "",
"Reply": "Button to reply to a comment",
"Reply to": "",
"Reply to comment": "Placeholder value of the input box when placing a reply to a comment",
"Report": "Button to report a comment",
"Report comment": "Used in the context menu",
@ -305,28 +310,21 @@
"jamie@example.com": "Placeholder for email input field",
"month": "the subscription interval (monthly), following the /",
"paid": "",
"replied to comment": "",
"reply to comment": "Short version of 'In reply to comment ...'",
"trialing": "",
"year": "the subscription interval (monthly), following the /",
"{{amount}} characters left": "Characters left, shown above the input field, when editing your expertise in the comments app",
"{{amount}} comments": "Amount of comments on a post",
"{{amount}} days ago": "Time a comment was placed",
"{{amount}} days free": "A label for an offer, explaining how long the trial is",
"{{amount}} hrs ago": "",
"{{amount}} mins ago": "",
"{{amount}} months ago": "Time a comment was placed",
"{{amount}} more": "",
"{{amount}} off": "A label for an offer, explaining how much the discount is for",
"{{amount}} off for first {{number}} months.": "A label for an offer, explaining how many months are discounted",
"{{amount}} off for first {{period}}.": "A label for an offer, explaining how long the discount is for (either first month or year)",
"{{amount}} off forever.": "A label for an offer, explaining that the discounted rate applies forever",
"{{amount}} seconds ago": "Time a comment was placed",
"{{amount}} weeks ago": "Time a comment was placed",
"{{amount}} years ago": "Time a comment was placed",
"{{discount}}% discount": "A label for discounts",
"{{memberEmail}} will no longer receive emails when someone replies to your comments.": "A message shown when a user unsubscribes from comment replies",
"{{memberEmail}} will no longer receive this newsletter.": "A message shown when a user unsubscribes from a newsletter",
"{{memberEmail}} will no longer receive {{newsletterName}} newsletter.": "A message shown when a user unsubscribes from a newsletter",
"{{trialDays}} days free": "A label for free trial days"
}
}

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Vyberte si newsletter",
"Click here to retry": "Klikněte zde pro opakování",
"Close": "Zavřít",
"Comment preferences updated.": "",
"Comments": "Komentáře",
"Complimentary": "Zdarma",
"Confirm": "Potvrdit",
@ -58,6 +59,7 @@
"Email newsletter": "E-mailový newsletter",
"Email newsletter settings updated": "",
"Email preferences": "Předvolby e-mailu",
"Email preferences updated.": "",
"Emails": "E-maily",
"Emails disabled": "E-maily vypnuty",
"Ends {{offerEndDate}}": "Končí {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Hvilke nyhedsbreve ønsker du",
"Click here to retry": "Klik her for at prøve igen",
"Close": "Luk",
"Comment preferences updated.": "",
"Comments": "Kommentarer",
"Complimentary": "Gratis",
"Confirm": "Bekræft",
@ -58,6 +59,7 @@
"Email newsletter": "E-mail nyhedsbrev",
"Email newsletter settings updated": "Indstillinger for nyhedsbrev blev opdateret",
"Email preferences": "E-mail præferencer",
"Email preferences updated.": "",
"Emails": "E-mails",
"Emails disabled": "E-mails deaktiveret",
"Ends {{offerEndDate}}": "Udløber {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Wählen Sie Ihren Newsletter",
"Click here to retry": "Hier klicken zum Wiederholen",
"Close": "Schliessen",
"Comment preferences updated.": "",
"Comments": "Kommentare",
"Complimentary": "Kostenlos",
"Confirm": "Bestätigen",
@ -58,6 +59,7 @@
"Email newsletter": "E-Mail-Newsletter",
"Email newsletter settings updated": "",
"Email preferences": "E-Mail-Einstellungen",
"Email preferences updated.": "",
"Emails": "E-Mails",
"Emails disabled": "E-Mails deaktiviert",
"Ends {{offerEndDate}}": "Endet am {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Wähle deine Newsletter",
"Click here to retry": "Hier klicken zum Wiederholen",
"Close": "Schließen",
"Comment preferences updated.": "",
"Comments": "Kommentare",
"Complimentary": "Kostenlos",
"Confirm": "Bestätigen",
@ -58,6 +59,7 @@
"Email newsletter": "E-Mail-Newsletter",
"Email newsletter settings updated": "E-Mail Newsletter Einstellungen wurden aktualisiert",
"Email preferences": "E-Mail-Einstellungen",
"Email preferences updated.": "",
"Emails": "E-Mails",
"Emails disabled": "E-Mails deaktiviert",
"Ends {{offerEndDate}}": "Endet am {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Επιλέξτε τα ενημερωτικά δελτία σας",
"Click here to retry": "Κάντε κλικ εδώ για επανάληψη",
"Close": "Κλείσιμο",
"Comment preferences updated.": "",
"Comments": "Σχόλια",
"Complimentary": "Δωρεάν",
"Confirm": "Επιβεβαίωση",
@ -58,6 +59,7 @@
"Email newsletter": "Ενημερωτικό δελτίο email",
"Email newsletter settings updated": "",
"Email preferences": "Προτιμήσεις email",
"Email preferences updated.": "",
"Emails": "Emails",
"Emails disabled": "Τα emails είναι απενεργοποιημένα",
"Ends {{offerEndDate}}": "Λήγει {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "",
"Click here to retry": "",
"Close": "",
"Comment preferences updated.": "",
"Comments": "",
"Complimentary": "",
"Confirm": "",
@ -58,6 +59,7 @@
"Email newsletter": "",
"Email newsletter settings updated": "",
"Email preferences": "",
"Email preferences updated.": "",
"Emails": "",
"Emails disabled": "",
"Ends {{offerEndDate}}": "",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Elektu viajn bultenojn",
"Click here to retry": "",
"Close": "Fermu",
"Comment preferences updated.": "",
"Comments": "Komentoj",
"Complimentary": "",
"Confirm": "Konfirmu",
@ -58,6 +59,7 @@
"Email newsletter": "",
"Email newsletter settings updated": "",
"Email preferences": "Retpoŝtaj agordoj",
"Email preferences updated.": "",
"Emails": "Retpoŝtoj",
"Emails disabled": "Retpoŝtoj malŝaltitaj",
"Ends {{offerEndDate}}": "",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Elige tus boletines",
"Click here to retry": "Haz click aquí para reintentar",
"Close": "Cerrar",
"Comment preferences updated.": "",
"Comments": "Comentarios",
"Complimentary": "Complementario",
"Confirm": "Confirmar",
@ -58,6 +59,7 @@
"Email newsletter": "Boletín informativo por correo electrónico",
"Email newsletter settings updated": "",
"Email preferences": "Preferencias",
"Email preferences updated.": "",
"Emails": "Correos electrónicos",
"Emails disabled": "Correos electrónicos desactivados",
"Ends {{offerEndDate}}": "Termina el {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Vali oma uudiskirjad",
"Click here to retry": "Klõpsake siia, et uuesti proovida",
"Close": "Sulge",
"Comment preferences updated.": "",
"Comments": "Kommentaarid",
"Complimentary": "Tasuta",
"Confirm": "Kinnita",
@ -58,6 +59,7 @@
"Email newsletter": "E-posti uudiskiri",
"Email newsletter settings updated": "",
"Email preferences": "E-posti eelistused",
"Email preferences updated.": "",
"Emails": "E-kirjad",
"Emails disabled": "E-kirjad keelatud",
"Ends {{offerEndDate}}": "Lõpeb {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "خبرنامه\u200cی خود را انتخاب کنید",
"Click here to retry": "برای تلاش دوباره اینجا را کلیک کنید",
"Close": "بستن",
"Comment preferences updated.": "",
"Comments": "دیدگاه\u200cها",
"Complimentary": "تعریف\u200cها",
"Confirm": "تأیید",
@ -58,6 +59,7 @@
"Email newsletter": "ایمیل خبرنامه",
"Email newsletter settings updated": "",
"Email preferences": "تنظیمات ایمیل",
"Email preferences updated.": "",
"Emails": "ایمیل\u200cها",
"Emails disabled": "ایمیل\u200cها غیرفعال هستند",
"Ends {{offerEndDate}}": "در {{offerEndDate}} تمام می\u200cشود",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Valitse uutiskirjeesi",
"Click here to retry": "Klikkaa tästä kokeillaksesi uudestaan",
"Close": "Sulje",
"Comment preferences updated.": "",
"Comments": "Kommentit",
"Complimentary": "Ilmainen",
"Confirm": "Vahvista",
@ -58,6 +59,7 @@
"Email newsletter": "Uutiskirje sähköpostiin",
"Email newsletter settings updated": "",
"Email preferences": "Sähköpostiasetukset",
"Email preferences updated.": "",
"Emails": "Sähköpostit",
"Emails disabled": "Sähköpostit pois käytöstä",
"Ends {{offerEndDate}}": "Loppuu {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Choisir vos newsletters",
"Click here to retry": "Cliquez ici pour réessayer",
"Close": "Fermer",
"Comment preferences updated.": "",
"Comments": "Commentaires",
"Complimentary": "Offert",
"Confirm": "Confirmer",
@ -58,6 +59,7 @@
"Email newsletter": "E-mail de la newsletter",
"Email newsletter settings updated": "Mise à jour des paramètres de la newsletter",
"Email preferences": "Préférences e-mail",
"Email preferences updated.": "",
"Emails": "E-mails",
"Emails disabled": "E-mails désactivés",
"Ends {{offerEndDate}}": "Se termine le {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Tagh na cuairt-litrichean agad",
"Click here to retry": "Briog an seo gus feuchainn a-rithist",
"Close": "Dùin",
"Comment preferences updated.": "",
"Comments": "Beachdan",
"Complimentary": "An-asgaidh",
"Confirm": "Dearbhaich",
@ -58,6 +59,7 @@
"Email newsletter": "Cuairt-litir",
"Email newsletter settings updated": "",
"Email preferences": "Roghainnean puist-d",
"Email preferences updated.": "",
"Emails": "Puist-d",
"Emails disabled": "Puist-d à comas",
"Ends {{offerEndDate}}": "Falbhaidh an ùine air: {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "בחרו את הניוזלטרים שלכם",
"Click here to retry": "לחצו כאן כדי לנסות שוב",
"Close": "סגירה",
"Comment preferences updated.": "",
"Comments": "תגובות",
"Complimentary": "חינם",
"Confirm": "אישור",
@ -58,6 +59,7 @@
"Email newsletter": "ניוזלטר במייל",
"Email newsletter settings updated": "הגדרות ניוזלטר במייל עודכנו",
"Email preferences": "העדפות מייל",
"Email preferences updated.": "",
"Emails": "מיילים",
"Emails disabled": "מיילים מושבתים",
"Ends {{offerEndDate}}": "מסתיים ב {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "अपने न्यूज़लेटर चुनें",
"Click here to retry": "फिर से प्रयास करने के लिए यहां क्लिक करें",
"Close": "बंद करें",
"Comment preferences updated.": "",
"Comments": "टिप्पणियाँ",
"Complimentary": "नि:शुल्क",
"Confirm": "पुष्टि करें",
@ -58,6 +59,7 @@
"Email newsletter": "ईमेल न्यूज़लेटर",
"Email newsletter settings updated": "",
"Email preferences": "ईमेल प्राथमिकताएँ",
"Email preferences updated.": "",
"Emails": "ईमेल",
"Emails disabled": "ईमेल निष्क्रिय",
"Ends {{offerEndDate}}": "{{offerEndDate}} को समाप्त होता है",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Odaberite vaš newsletter",
"Click here to retry": "Klikni ovdje za ponovni pokušaj",
"Close": "Zatvori",
"Comment preferences updated.": "",
"Comments": "Komentari",
"Complimentary": "Besplatno",
"Confirm": "Potvrda",
@ -58,6 +59,7 @@
"Email newsletter": "Newsletter e-poštom",
"Email newsletter settings updated": "",
"Email preferences": "Postavke e-pošte",
"Email preferences updated.": "",
"Emails": "E-pošta",
"Emails disabled": "Isključena e-pošta",
"Ends {{offerEndDate}}": "Završava {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Válassza ki a hírleveleket",
"Click here to retry": "Kattintson ide az újpróbáláshoz",
"Close": "Bezár",
"Comment preferences updated.": "",
"Comments": "Hozzászólások",
"Complimentary": "Ajándék",
"Confirm": "Jóváhgyás",
@ -58,6 +59,7 @@
"Email newsletter": "Hírlevél",
"Email newsletter settings updated": "",
"Email preferences": "Email beállítások",
"Email preferences updated.": "",
"Emails": "Email-ek",
"Emails disabled": "Email-ek kikapcsolva",
"Ends {{offerEndDate}}": "Ajánlat vége: {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Pilih buletin Anda",
"Click here to retry": "Klik di sini untuk mencoba lagi",
"Close": "Tutup",
"Comment preferences updated.": "",
"Comments": "Komentar",
"Complimentary": "Pemberian gratis",
"Confirm": "Konfirmasi",
@ -58,6 +59,7 @@
"Email newsletter": "Buletin email",
"Email newsletter settings updated": "Pengaturan buletin email berhasil diperbarui",
"Email preferences": "Preferensi email.",
"Email preferences updated.": "",
"Emails": "Email",
"Emails disabled": "Email dinonaktifkan",
"Ends {{offerEndDate}}": "Berakhir {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Velja fréttabréf",
"Click here to retry": "Smellið hér til að reyna aftur",
"Close": "Loka",
"Comment preferences updated.": "",
"Comments": "Ummæli",
"Complimentary": "Í kaupbæti",
"Confirm": "Staðfesta",
@ -58,6 +59,7 @@
"Email newsletter": "Fréttabréf",
"Email newsletter settings updated": "",
"Email preferences": "Stillingar netfangs",
"Email preferences updated.": "",
"Emails": "Netföng",
"Emails disabled": "Netföng gerð óvirk",
"Ends {{offerEndDate}}": "Lýkur {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Scegli la tua newsletter",
"Click here to retry": "Clicca qui per riprovare",
"Close": "Chiudi",
"Comment preferences updated.": "",
"Comments": "Commenti",
"Complimentary": "Omaggio",
"Confirm": "Conferma",
@ -58,6 +59,7 @@
"Email newsletter": "Newsletter",
"Email newsletter settings updated": "Impostazioni dell'e-mail newsletter aggiornate",
"Email preferences": "Preferenze email",
"Email preferences updated.": "",
"Emails": "Email",
"Emails disabled": "Email disattivate",
"Ends {{offerEndDate}}": "Finisce il {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "ニュースレターを選択",
"Click here to retry": "再試行するにはここをクリックしてください",
"Close": "閉じる",
"Comment preferences updated.": "",
"Comments": "コメント",
"Complimentary": "無料",
"Confirm": "確認",
@ -58,6 +59,7 @@
"Email newsletter": "ニュースレターのメール",
"Email newsletter settings updated": "ニュースレターの設定が更新されました",
"Email preferences": "メールの設定",
"Email preferences updated.": "",
"Emails": "メール",
"Emails disabled": "メールが無効になっています",
"Ends {{offerEndDate}}": "{{offerEndDate}}まで",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "뉴스레터 선택",
"Click here to retry": "다시 시도하려면 여기를 클릭해 주세요",
"Close": "닫기",
"Comment preferences updated.": "",
"Comments": "댓글",
"Complimentary": "무료",
"Confirm": "확인",
@ -58,6 +59,7 @@
"Email newsletter": "이메일 뉴스레터",
"Email newsletter settings updated": "이메일 뉴스레터 설정이 업데이트되었어요",
"Email preferences": "이메일 설정",
"Email preferences updated.": "",
"Emails": "이메일",
"Emails disabled": "이메일 사용 중지됨",
"Ends {{offerEndDate}}": "{{offerEndDate}}에 종료돼요",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Ақпараттық бюллетеньдерді таңдау",
"Click here to retry": "Қайта көру үшін мұнда басыңыз",
"Close": "Жабу",
"Comment preferences updated.": "",
"Comments": "Пікірлер",
"Complimentary": "Ақысыз",
"Confirm": "Растау",
@ -58,6 +59,7 @@
"Email newsletter": "Email бюллетені",
"Email newsletter settings updated": "",
"Email preferences": "Email теңшелімдері",
"Email preferences updated.": "",
"Emails": "Электрондық хаттар",
"Emails disabled": "Электрондық хаттар өшірілген",
"Ends {{offerEndDate}}": "{{offerEndDate}} аяқталады",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Pasirinkite norimus naujienlaiškius",
"Click here to retry": "Spauskite čia, kad pakartotumėte",
"Close": "Uždaryti",
"Comment preferences updated.": "",
"Comments": "Komentarai",
"Complimentary": "Nemokamas",
"Confirm": "Patvirtinti",
@ -58,6 +59,7 @@
"Email newsletter": "Naujienlaiškis el. paštu",
"Email newsletter settings updated": "",
"Email preferences": "El. pašto nustatymai",
"Email preferences updated.": "",
"Emails": "Laiškai",
"Emails disabled": "El. laiškai deaktyvuoti",
"Ends {{offerEndDate}}": "Baigiasi {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Изберете ги вашите билтени",
"Click here to retry": "Кликнете тука за да се обидите повторно",
"Close": "Затворете",
"Comment preferences updated.": "",
"Comments": "Коментари",
"Complimentary": "Дополнителен",
"Confirm": "Потврдете",
@ -58,6 +59,7 @@
"Email newsletter": "Email билтен",
"Email newsletter settings updated": "",
"Email preferences": "Email поставки",
"Email preferences updated.": "",
"Emails": "Електронски пошти",
"Emails disabled": "Оневозможени електронски пошти",
"Ends {{offerEndDate}}": "Завршува на {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Товхимолоо сонгох",
"Click here to retry": "",
"Close": "Хаах",
"Comment preferences updated.": "",
"Comments": "Сэтгэгдлүүд",
"Complimentary": "",
"Confirm": "Баталгаажуулах",
@ -58,6 +59,7 @@
"Email newsletter": "",
"Email newsletter settings updated": "",
"Email preferences": "Имэйлийн тохиргоо",
"Email preferences updated.": "",
"Emails": "Имэйлүүд",
"Emails disabled": "Имэйлийг идэхгүй болгосон",
"Ends {{offerEndDate}}": "",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Pilih newsletter anda",
"Click here to retry": "Klik di sini untuk cuba semula",
"Close": "Tutup",
"Comment preferences updated.": "",
"Comments": "Komen",
"Complimentary": "",
"Confirm": "Sahkan",
@ -58,6 +59,7 @@
"Email newsletter": "Newsletter e-mel",
"Email newsletter settings updated": "",
"Email preferences": "Emel pilihan",
"Email preferences updated.": "",
"Emails": "E-mel",
"Emails disabled": "E-mel dilumpuhkan",
"Ends {{offerEndDate}}": "Tamat pada {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "",
"Click here to retry": "",
"Close": "",
"Comment preferences updated.": "",
"Comments": "",
"Complimentary": "",
"Confirm": "",
@ -58,6 +59,7 @@
"Email newsletter": "",
"Email newsletter settings updated": "",
"Email preferences": "",
"Email preferences updated.": "",
"Emails": "",
"Emails disabled": "",
"Ends {{offerEndDate}}": "",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Kies jouw nieuwsbrieven",
"Click here to retry": "Klik hier om opnieuw te proberen",
"Close": "Sluiten",
"Comment preferences updated.": "Reactievoorkeuren bijgewerkt.",
"Comments": "Reacties",
"Complimentary": "Gratis",
"Confirm": "Bevestigen",
@ -58,6 +59,7 @@
"Email newsletter": "Nieuwsbrief",
"Email newsletter settings updated": "Instellingen voor nieuwsbrief bijgewerkt",
"Email preferences": "E-mailinstellingen",
"Email preferences updated.": "E-mailinstellingen bijgewerkt.",
"Emails": "E-mails",
"Emails disabled": "E-mails zijn uitgeschakeld",
"Ends {{offerEndDate}}": "Eindigt op {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Vel nyheitsbrevet ditt",
"Click here to retry": "Klikk her for å prøva på ny",
"Close": "Lukk",
"Comment preferences updated.": "",
"Comments": "Kommentarar",
"Complimentary": "Gåve",
"Confirm": "Bekreft",
@ -58,6 +59,7 @@
"Email newsletter": "E-post nyheitsbrev",
"Email newsletter settings updated": "",
"Email preferences": "E-post preferansar.",
"Email preferences updated.": "",
"Emails": "E-postar.",
"Emails disabled": "E-postar skrudd av",
"Ends {{offerEndDate}}": "Sluttar {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Velg nyhetsbrev",
"Click here to retry": "Klikk her for å prøve igjen",
"Close": "Lukk",
"Comment preferences updated.": "",
"Comments": "Kommentarer",
"Complimentary": "Gratis",
"Confirm": "Bekreft",
@ -58,6 +59,7 @@
"Email newsletter": "E-postnyhetsbrev",
"Email newsletter settings updated": "Innstillinger for e-postnyhetsbrev oppdatert",
"Email preferences": "E-postinnstillinger",
"Email preferences updated.": "",
"Emails": "E-poster",
"Emails disabled": "E-poster deaktivert",
"Ends {{offerEndDate}}": "Avsluttes {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Wybierz swoje newslettery",
"Click here to retry": "Kliknij tu żeby potwierdzić",
"Close": "Zamknij",
"Comment preferences updated.": "",
"Comments": "Komentarze",
"Complimentary": "Za darmo",
"Confirm": "Potwierdź",
@ -58,6 +59,7 @@
"Email newsletter": "Newsletter email",
"Email newsletter settings updated": "",
"Email preferences": "Ustawienia email",
"Email preferences updated.": "",
"Emails": "Emaile",
"Emails disabled": "Wysyłanie emaili zablokowane",
"Ends {{offerEndDate}}": "Kończy się {{offerEndDate}}",

View file

@ -31,4 +31,4 @@
"You will not be subscribed.": "Você não será inscrito.",
"You're one tap away from subscribing to {{siteTitle}} — please confirm your email address with this link:": "Você está a um clique de se inscrever no site {{siteTitle}} — por favor, confirme seu endereço de e-mail com este link:",
"You're one tap away from subscribing to {{siteTitle}}!": "Você está a um clique de se inscrever no site {{siteTitle}}!"
}
}

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Escolher suas newsletters",
"Click here to retry": "Clique aqui para tentar novamente",
"Close": "Fechar",
"Comment preferences updated.": "",
"Comments": "Comentários",
"Complimentary": "Cortesia",
"Confirm": "Confirmar",
@ -58,6 +59,7 @@
"Email newsletter": "Newsletter por e-mail",
"Email newsletter settings updated": "Configurações de newsletter por e-mail atualizadas com sucesso",
"Email preferences": "Preferências de e-mail",
"Email preferences updated.": "",
"Emails": "E-mails",
"Emails disabled": "E-mails desativados",
"Ends {{offerEndDate}}": "Termina em {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Escolha as suas newsletters",
"Click here to retry": "Clique aqui para tentar novamente",
"Close": "Fechar",
"Comment preferences updated.": "",
"Comments": "Comentários",
"Complimentary": "Cortesia",
"Confirm": "Confirmar",
@ -58,6 +59,7 @@
"Email newsletter": "Newsletter",
"Email newsletter settings updated": "",
"Email preferences": "Preferências de email",
"Email preferences updated.": "",
"Emails": "Emails",
"Emails disabled": "Email desativado",
"Ends {{offerEndDate}}": "Termina em {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Alege-ți newsletterele",
"Click here to retry": "Clic aici pentru a reîncerca",
"Close": "Închide",
"Comment preferences updated.": "",
"Comments": "Comentarii",
"Complimentary": "Complimentar",
"Confirm": "Confirmă",
@ -58,6 +59,7 @@
"Email newsletter": "Newsletter prin email",
"Email newsletter settings updated": "",
"Email preferences": "Preferințe email",
"Email preferences updated.": "",
"Emails": "Emailuri",
"Emails disabled": "Emailuri dezactivate",
"Ends {{offerEndDate}}": "Se termină {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Выбор и управление рассылками",
"Click here to retry": "Нажмите здесь, чтобы повторить попытку",
"Close": "Закрыть",
"Comment preferences updated.": "",
"Comments": "Комментарии",
"Complimentary": "В благодарность",
"Confirm": "Подтвердить",
@ -58,6 +59,7 @@
"Email newsletter": "Email рассылки",
"Email newsletter settings updated": "",
"Email preferences": "Настройки email адреса",
"Email preferences updated.": "",
"Emails": "Письма",
"Emails disabled": "Доставка писем отключена",
"Ends {{offerEndDate}}": "Предложение заканчивается {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "ඔබගේ newsletter වර්ගය තෝරන්න",
"Click here to retry": "නැවත උත්සාහ කිරීම සඳහා මෙහි click කරන්න",
"Close": "වසන්න",
"Comment preferences updated.": "",
"Comments": "ප්\u200dරතිචාර",
"Complimentary": "ස්තුතිපූර්වක",
"Confirm": "තහවුරු කරන්න",
@ -58,6 +59,7 @@
"Email newsletter": "Email newsletter",
"Email newsletter settings updated": "",
"Email preferences": "Email preferences",
"Email preferences updated.": "",
"Emails": "ඊමේල්",
"Emails disabled": "Emails නවත්වා ඇත",
"Ends {{offerEndDate}}": "{{offerEndDate}} දී අවසන් වනු ඇත",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Vyberte si newsletter",
"Click here to retry": "Kliknite sem pre obnovenie",
"Close": "Zatvoriť",
"Comment preferences updated.": "",
"Comments": "Komentáre",
"Complimentary": "Bezplatné",
"Confirm": "Potvrdiť",
@ -58,6 +59,7 @@
"Email newsletter": "",
"Email newsletter settings updated": "",
"Email preferences": "E-mailové nastavnia",
"Email preferences updated.": "",
"Emails": "E-maily",
"Emails disabled": "E-maily vypnuté",
"Ends {{offerEndDate}}": "Vyprší {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Izberite svoje novice",
"Click here to retry": "",
"Close": "Zapri",
"Comment preferences updated.": "",
"Comments": "Komentarji",
"Complimentary": "",
"Confirm": "Potrdi",
@ -58,6 +59,7 @@
"Email newsletter": "",
"Email newsletter settings updated": "",
"Email preferences": "Nastavitve e-pošte",
"Email preferences updated.": "",
"Emails": "E-pošta",
"Emails disabled": "E-pošta onemogočena",
"Ends {{offerEndDate}}": "",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Zgjidh buletinin tend",
"Click here to retry": "Kliko ketu per te provuar perseri",
"Close": "Mbyll",
"Comment preferences updated.": "",
"Comments": "Komentet",
"Complimentary": "Pa pagesë",
"Confirm": "Konfirmo",
@ -58,6 +59,7 @@
"Email newsletter": "Buletini i emailit",
"Email newsletter settings updated": "",
"Email preferences": "Preferenat e emailit",
"Email preferences updated.": "",
"Emails": "Emailet",
"Emails disabled": "Emailet e çaktivizuara",
"Ends {{offerEndDate}}": "Perfundon {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Изаберите своје билтене",
"Click here to retry": "Кликните овде да покушате поново",
"Close": "Затвори",
"Comment preferences updated.": "",
"Comments": "Коментари",
"Complimentary": "Бесплатно",
"Confirm": "Потврдите",
@ -58,6 +59,7 @@
"Email newsletter": "Мејл билтен",
"Email newsletter settings updated": "",
"Email preferences": "Преференције за мејл",
"Email preferences updated.": "",
"Emails": "Мејлови",
"Emails disabled": "Мејлови онемогућени",
"Ends {{offerEndDate}}": "Завршава се {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Izaberi svoje biltene",
"Click here to retry": "Klikni ovde da pokušaš ponovo",
"Close": "Zatvori",
"Comment preferences updated.": "",
"Comments": "Komentari",
"Complimentary": "Besplatno",
"Confirm": "Potvrdi",
@ -58,6 +59,7 @@
"Email newsletter": "Imejl bilten",
"Email newsletter settings updated": "",
"Email preferences": "Imejl podešavanja",
"Email preferences updated.": "",
"Emails": "Imejlovi",
"Emails disabled": "Onemogućeni imejlovi",
"Ends {{offerEndDate}}": "Završava se {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Välj dina nyhetsbrev",
"Click here to retry": "Klicka här för att försöka igen",
"Close": "Stäng",
"Comment preferences updated.": "",
"Comments": "Kommentarer",
"Complimentary": "Kostnadsfri",
"Confirm": "Bekräfta",
@ -58,6 +59,7 @@
"Email newsletter": "Nyhetsbrev via e-post",
"Email newsletter settings updated": "Inställningar för nyhetsprev uppdaterade",
"Email preferences": "E-postinställningar",
"Email preferences updated.": "",
"Emails": "E-postmeddelanden",
"Emails disabled": "E-post inaktiverad",
"Ends {{offerEndDate}}": "Avslutas {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Chagua majarida yako",
"Click here to retry": "Bofya hapa kurudia",
"Close": "Funga",
"Comment preferences updated.": "",
"Comments": "Maoni",
"Complimentary": "Bure",
"Confirm": "Thibitisha",
@ -58,6 +59,7 @@
"Email newsletter": "Jarida la barua pepe",
"Email newsletter settings updated": "",
"Email preferences": "Mapendeleo ya barua pepe",
"Email preferences updated.": "",
"Emails": "Barua pepe",
"Emails disabled": "Barua pepe zimezimwa",
"Ends {{offerEndDate}}": "Inaisha {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "உங்கள் செய்திமடல்களைத் தேர்வு செய்யவும்",
"Click here to retry": "மீண்டும் முயற்சிக்க இங்கே கிளிக் செய்யவும்",
"Close": "மூடு",
"Comment preferences updated.": "",
"Comments": "கருத்துகள்",
"Complimentary": "இலவசம்",
"Confirm": "உறுதிப்படுத்து",
@ -58,6 +59,7 @@
"Email newsletter": "மின்னஞ்சல் செய்திமடல்",
"Email newsletter settings updated": "மின்னஞ்சல் செய்திமடல் அமைப்புகள் புதுப்பிக்கப்பட்டன",
"Email preferences": "மின்னஞ்சல் விருப்பங்கள்",
"Email preferences updated.": "",
"Emails": "மின்னஞ்சல்கள்",
"Emails disabled": "மின்னஞ்சல்கள் முடக்கப்பட்டன",
"Ends {{offerEndDate}}": "{{offerEndDate}} முடிவடைகிறது",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "เลือกอีเมลที่ต้องการรับจดหมายข่าว",
"Click here to retry": "คลิกที่นี่เพื่อลองอีกครั้ง",
"Close": "ปิด",
"Comment preferences updated.": "",
"Comments": "ความคิดเห็น",
"Complimentary": "เพิ่มเติมฟรีโดยไม่คิดค่าใช้จ่าย",
"Confirm": "ยืนยัน",
@ -58,6 +59,7 @@
"Email newsletter": "จดหมายข่าวทางอีเมล",
"Email newsletter settings updated": "",
"Email preferences": "การตั้งค่าอีเมล",
"Email preferences updated.": "",
"Emails": "อีเมล",
"Emails disabled": "อีเมลถูกปิดใช้งาน",
"Ends {{offerEndDate}}": "สิ้นสุด {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Bültenleri seç",
"Click here to retry": "Tekrar denemek için buraya tıkla",
"Close": "Kapat",
"Comment preferences updated.": "",
"Comments": "Yorumlar",
"Complimentary": "Ücretsiz",
"Confirm": "Onayla",
@ -58,6 +59,7 @@
"Email newsletter": "E-posta bülteni",
"Email newsletter settings updated": "E-posta bülteni ayarları güncellendi",
"Email preferences": "E-posta tercihleri",
"Email preferences updated.": "",
"Emails": "E-postalar",
"Emails disabled": "E-postalar devre dışı",
"Ends {{offerEndDate}}": "{{offerEndDate}} tarihinde bitiyor",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Оберіть свої підписки",
"Click here to retry": "Натисніть тут, щоб повторити спробу",
"Close": "Закрити",
"Comment preferences updated.": "",
"Comments": "Коментарі",
"Complimentary": "Безкоштовно",
"Confirm": "Підтвердь",
@ -58,6 +59,7 @@
"Email newsletter": "Електронна розсилка",
"Email newsletter settings updated": "Оновлено параметри електронної розсилки",
"Email preferences": "Налаштування електронної пошти",
"Email preferences updated.": "",
"Emails": "Електронні листи",
"Emails disabled": "Електронна пошта вимкнена",
"Ends {{offerEndDate}}": "Закунчується {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "اپنے نیوزلیٹر کو منتخب کریں",
"Click here to retry": "دوبارہ کوشش کرنے کے لئے یہاں کلک کریں",
"Close": "بند کریں",
"Comment preferences updated.": "",
"Comments": "تبادلے",
"Complimentary": "تعریف",
"Confirm": "تصدیق",
@ -58,6 +59,7 @@
"Email newsletter": "ای میل نیوزلیٹر",
"Email newsletter settings updated": "",
"Email preferences": "ای میل کی ترجیحات",
"Email preferences updated.": "",
"Emails": "ای میلز",
"Emails disabled": "ای میلز غیر فعال ہیں",
"Ends {{offerEndDate}}": "ختم ہوتا ہے {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Pochta xabarlarini tanlang",
"Click here to retry": "",
"Close": "Yopmoq",
"Comment preferences updated.": "",
"Comments": "Izohlar",
"Complimentary": "",
"Confirm": "Tasdiqlamoq",
@ -58,6 +59,7 @@
"Email newsletter": "",
"Email newsletter settings updated": "",
"Email preferences": "Email sozlamalari",
"Email preferences updated.": "",
"Emails": "Elektron xatlar",
"Emails disabled": "Elektron pochta xabarlari ochirilgan",
"Ends {{offerEndDate}}": "",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "Chọn bản tin bạn muốn nhận",
"Click here to retry": "Nhấn vào đây thử lại",
"Close": "Đóng",
"Comment preferences updated.": "",
"Comments": "Bình luận",
"Complimentary": "Khen tặng",
"Confirm": "Xác nhận",
@ -58,6 +59,7 @@
"Email newsletter": "Bản tin email",
"Email newsletter settings updated": "Đã cập nhật thiết lập bản tin email",
"Email preferences": "Thiết lập email",
"Email preferences updated.": "",
"Emails": "Email",
"Emails disabled": "Vô hiệu hóa email",
"Ends {{offerEndDate}}": "Kết thúc {{offerEndDate}}",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "選擇您的電子報",
"Click here to retry": "點擊重試",
"Close": "關閉",
"Comment preferences updated.": "",
"Comments": "留言",
"Complimentary": "贈送",
"Confirm": "確認",
@ -58,6 +59,7 @@
"Email newsletter": "電子報",
"Email newsletter settings updated": "電子報設定已更新",
"Email preferences": "email 偏好設定",
"Email preferences updated.": "",
"Emails": "電子報",
"Emails disabled": "已停止接收電子報",
"Ends {{offerEndDate}}": "於 {{offerEndDate}} 結束",

View file

@ -37,6 +37,7 @@
"Choose your newsletters": "选择您的刊物",
"Click here to retry": "请点此处重试",
"Close": "关闭",
"Comment preferences updated.": "",
"Comments": "评论",
"Complimentary": "赠送",
"Confirm": "确认",
@ -58,6 +59,7 @@
"Email newsletter": "电子邮件快报",
"Email newsletter settings updated": "",
"Email preferences": "电子邮件偏好设置",
"Email preferences updated.": "",
"Emails": "电子邮件列表",
"Emails disabled": "关闭电子邮件列表",
"Ends {{offerEndDate}}": "于{{offerEndDate}}结束",