From ab8f2efb761bcd9fc9c3d013a9caaab11e0e6203 Mon Sep 17 00:00:00 2001 From: Gilad Resisi Date: Mon, 6 Jul 2026 17:57:21 +0700 Subject: [PATCH 1/2] fix(instagram,facebook): prevent broken page-grant channels and guide reconnection Selecting a Facebook page the app was never granted stored a broken token ("undefined___..." for Instagram), and every publish then failed with Graph code 190 dressed up as a misleading "missing permissions" error, with no reconnect prompt and no way out. This was easy to hit: the picker also offered pages discovered via the Business Manager API that were never granted in the OAuth dialog, and Facebook's granular consent lets users grant an Instagram account without its linked page. Reproduction: connect an Instagram (Facebook Business) channel and grant a Facebook page that is not the one linked to the Instagram account. The account could still be selected in Postiz, the channel connected, and every post then failed with the permissions error. - pages(): verify every candidate page with the same page-node access_token call used when the selection is saved, and only offer pages the app can actually publish through (the Business-Manager page list can report tokens the page node refuses, so the node call is the only reliable check); Facebook filters on its edge tokens, which its own save path uses - handleErrors(): classify Graph code 190 as refresh-token, so a post from an already-broken channel marks it refreshNeeded and emails the user; subsequent posts keep failing with a reconnect email until fixed - reword the refresh-error email: no posts can be published until the channel is reconnected; re-adding the same account replaces the broken connection and keeps scheduled posts (no deletion needed) - updateIntegration(): clear refreshNeeded when a channel is re-added over an existing one, so re-adding fully heals a flagged channel - generateAuthUrl(): auth_type=rerequest so declined permissions/assets are re-prompted on reconnect and a bad grant can be repaired - frontend: "Before you continue" guidance popup on the Add Channel, reconnect and half-connected paths for Instagram/Facebook (select the page the Instagram account is connected to; use Facebook's "Edit settings" to change a previous selection); half-connected IG/FB channels restart the OAuth flow instead of opening the in-app picker; "Back to Postiz" button on the full-page empty selection state; connect errors surfaced in the page-selection modal; new i18n keys translated across all locales Validated end to end: with the wrong page granted, the Instagram account is no longer offered (empty selection + Back to Postiz); posting from a previously-broken channel triggers the refresh-needed flow (email, channel badge, Reconnect channel menu); reconnecting through the guidance popup and the Facebook screens with the correct page heals the channel in place with all scheduled posts intact. Co-Authored-By: Claude Fable 5 --- .../launches/add.provider.component.tsx | 72 ++++++++++++++++++ .../launches/continue.integration.tsx | 10 +++ .../launches/launches.component.tsx | 75 ++++++++++++++++--- .../components/layout/continue.provider.tsx | 29 ++++++- .../with-continue-provider.tsx | 12 ++- .../integrations/integration.repository.ts | 1 + .../integrations/integration.service.ts | 2 +- .../integrations/social/facebook.provider.ts | 20 ++++- .../integrations/social/instagram.provider.ts | 57 ++++++++++---- .../translation/locales/ar/translation.json | 9 ++- .../translation/locales/bn/translation.json | 9 ++- .../translation/locales/de/translation.json | 9 ++- .../translation/locales/en/translation.json | 13 +++- .../translation/locales/es/translation.json | 9 ++- .../translation/locales/fr/translation.json | 9 ++- .../translation/locales/he/translation.json | 9 ++- .../translation/locales/it/translation.json | 9 ++- .../translation/locales/ja/translation.json | 9 ++- .../locales/ka_ge/translation.json | 10 ++- .../translation/locales/ko/translation.json | 9 ++- .../translation/locales/pt/translation.json | 9 ++- .../translation/locales/ru/translation.json | 9 ++- .../translation/locales/tr/translation.json | 9 ++- .../translation/locales/vi/translation.json | 9 ++- .../translation/locales/zh/translation.json | 9 ++- 25 files changed, 375 insertions(+), 52 deletions(-) diff --git a/apps/frontend/src/components/launches/add.provider.component.tsx b/apps/frontend/src/components/launches/add.provider.component.tsx index 9ff651acb7..7b44c5f430 100644 --- a/apps/frontend/src/components/launches/add.provider.component.tsx +++ b/apps/frontend/src/components/launches/add.provider.component.tsx @@ -376,6 +376,62 @@ const ChromeExtensionWarning: FC<{ ); }; +export const FacebookPageGuidance: FC<{ + identifier: string; + onConfirm: () => void; +}> = ({ identifier, onConfirm }) => { + const modals = useModals(); + const t = useT(); + return ( +
+

+ {t( + 'facebook_guidance_intro', + 'You will be redirected to Facebook to authorize Postiz.' + )} +

+
    +
  • + {identifier === 'instagram' + ? t( + 'facebook_guidance_instagram_page', + 'Select the Facebook page your Instagram business account is connected to — granting a different page will not work.' + ) + : t( + 'facebook_guidance_facebook_page', + 'Select the Facebook page(s) you want to post to.' + )} +
  • +
  • + {t( + 'facebook_guidance_edit_settings', + "If you connected before, Facebook may reuse your previous selection. Click 'Edit settings' on the Facebook screen to change it." + )} +
  • +
+
+ + +
+
+ ); +}; + export const AddProviderComponent: FC<{ social: Array<{ identifier: string; @@ -662,6 +718,22 @@ export const AddProviderComponent: FC<{ }); return; } + if ( + !invite && + (identifier === 'instagram' || identifier === 'facebook') + ) { + modal.openModal({ + title: t('before_you_continue', 'Before you continue'), + withCloseButton: true, + children: ( + gotoIntegration()} + /> + ), + }); + return; + } await gotoIntegration(); }, [onboarding] diff --git a/apps/frontend/src/components/launches/continue.integration.tsx b/apps/frontend/src/components/launches/continue.integration.tsx index b4ee3e9615..b95fea1d26 100644 --- a/apps/frontend/src/components/launches/continue.integration.tsx +++ b/apps/frontend/src/components/launches/continue.integration.tsx @@ -353,6 +353,16 @@ export const ContinueIntegration: FC<{ existingId={[]} initialData={twoStepState.pages} isSaving={isSaving} + onBack={ + logged || twoStepState.returnURL + ? () => + navigateOrShow( + '/launches', + twoStepState.returnURL, + 'Channel setup cancelled' + ) + : undefined + } /> diff --git a/apps/frontend/src/components/launches/launches.component.tsx b/apps/frontend/src/components/launches/launches.component.tsx index 8544a3e77f..17fe7b9490 100644 --- a/apps/frontend/src/components/launches/launches.component.tsx +++ b/apps/frontend/src/components/launches/launches.component.tsx @@ -1,6 +1,10 @@ 'use client'; -import { AddProviderButton } from '@gitroom/frontend/components/launches/add.provider.component'; +import { + AddProviderButton, + FacebookPageGuidance, +} from '@gitroom/frontend/components/launches/add.provider.component'; +import { useModals } from '@gitroom/frontend/components/layout/new-modal'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import SafeImage from '@gitroom/react/helpers/safe.image'; import { capitalize, groupBy, orderBy } from 'lodash'; @@ -358,6 +362,7 @@ export const LaunchesComponent = () => { const toast = useToaster(); const fireEvents = useFireEvents(); const t = useT(); + const modal = useModals(); const [reload, setReload] = useState(false); const [collapseMenu, setCollapseMenu] = useCookie('collapseMenu', '0'); const [mode] = useCookie('mode', 'dark'); @@ -431,6 +436,33 @@ export const LaunchesComponent = () => { }, []); const continueIntegration = useCallback( (integration: any) => async () => { + // For Facebook/Instagram, finishing a half-connected channel in-app + // only works when the Facebook grant is correct — and when it isn't, + // the picker is a dead end. Start over through the OAuth flow + // instead, same as "Add Channel" (the connect upserts the same + // channel, so nothing is lost). + if ( + integration.identifier === 'instagram' || + integration.identifier === 'facebook' + ) { + modal.openModal({ + title: t('before_you_continue', 'Before you continue'), + withCloseButton: true, + children: ( + { + const { url } = await ( + await fetch(`/integrations/social/${integration.identifier}`) + ).json(); + window.location.href = url; + }} + /> + ), + }); + return; + } + router.push( `/launches?added=${integration.identifier}&continue=${integration.id}` ); @@ -444,15 +476,38 @@ export const LaunchesComponent = () => { } ) => async () => { - const { url } = await ( - await fetch( - `/integrations/social/${integration.identifier}?refresh=${integration.internalId}`, - { - method: 'GET', - } - ) - ).json(); - window.location.href = url; + const gotoRefresh = async () => { + const { url } = await ( + await fetch( + `/integrations/social/${integration.identifier}?refresh=${integration.internalId}`, + { + method: 'GET', + } + ) + ).json(); + window.location.href = url; + }; + + // Same guidance as the "Add Channel" path — reconnecting goes + // through the identical Facebook screens. + if ( + integration.identifier === 'instagram' || + integration.identifier === 'facebook' + ) { + modal.openModal({ + title: t('before_you_continue', 'Before you continue'), + withCloseButton: true, + children: ( + gotoRefresh()} + /> + ), + }); + return; + } + + await gotoRefresh(); }, [] ); diff --git a/apps/frontend/src/components/layout/continue.provider.tsx b/apps/frontend/src/components/layout/continue.provider.tsx index feb1674620..f9fa14d229 100644 --- a/apps/frontend/src/components/layout/continue.provider.tsx +++ b/apps/frontend/src/components/layout/continue.provider.tsx @@ -8,6 +8,8 @@ import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { continueProviderList } from '@gitroom/frontend/components/new-launch/providers/continue-provider/list'; import { newDayjs } from '@gitroom/frontend/components/layout/set.timezone'; import { useModals } from '@gitroom/frontend/components/layout/new-modal'; +import { useToaster } from '@gitroom/react/toaster/toaster'; +import { useT } from '@gitroom/react/translation/get.transation.service.client'; export const Null: FC<{ onSave: (data: any) => Promise; existingId: string[]; @@ -71,13 +73,32 @@ const ModalContent: FC<{ integrations: string[]; }> = ({ continueId, added, provider: Provider, closeModal, integrations }) => { const fetch = useFetch(); + const toaster = useToaster(); + const t = useT(); const onSave = useCallback( async (data: any) => { - await fetch(`/integrations/provider/${continueId}/connect`, { - method: 'POST', - body: JSON.stringify(data), - }); + const response = await fetch( + `/integrations/provider/${continueId}/connect`, + { + method: 'POST', + body: JSON.stringify(data), + } + ); + if (!response.ok) { + const { message } = await response + .json() + .catch(() => ({ message: '' })); + toaster.show( + message || + t( + 'could_not_connect_channel', + 'Could not connect the channel, please try again' + ), + 'warning' + ); + return; + } closeModal(); }, [continueId, closeModal] diff --git a/apps/frontend/src/components/new-launch/providers/continue-provider/with-continue-provider.tsx b/apps/frontend/src/components/new-launch/providers/continue-provider/with-continue-provider.tsx index 50491d64b4..44c812ce3a 100644 --- a/apps/frontend/src/components/new-launch/providers/continue-provider/with-continue-provider.tsx +++ b/apps/frontend/src/components/new-launch/providers/continue-provider/with-continue-provider.tsx @@ -22,6 +22,9 @@ export interface ContinueProviderProps { existingId: string[]; initialData?: any[]; isSaving?: boolean; + // When provided, the empty state shows a "Back to Postiz" button — used + // by the full-page OAuth landing flow, which has no dialog to close. + onBack?: () => void; } export interface EmptyStateMessage { @@ -59,7 +62,7 @@ export function withContinueProvider( } = config; return function ContinueProviderComponent(props: ContinueProviderProps) { - const { onSave, existingId, initialData, isSaving } = props; + const { onSave, existingId, initialData, isSaving, onBack } = props; const call = useCustomProviderFunction(); const t = useT(); const [selection, setSelection] = useState(null); @@ -119,6 +122,13 @@ export function withContinueProvider( )} ))} + {!!onBack && ( +
+ +
+ )} ); } diff --git a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts index 15434d6c83..7cb76a5928 100644 --- a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts +++ b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts @@ -189,6 +189,7 @@ export class IntegrationRepository { ...params, disabled: false, deletedAt: null, + refreshNeeded: false, }, }); } diff --git a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts index de6dd1af11..21450a5e71 100644 --- a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts @@ -193,7 +193,7 @@ export class IntegrationService { await this._notificationService.inAppNotification( orgId, `Could not refresh your ${integration.providerIdentifier} channel ${err}`, - `Could not refresh your ${integration.providerIdentifier} channel ${err}. Please go back to the system and connect it again ${process.env.FRONTEND_URL}/launches`, + `Could not refresh your ${integration.providerIdentifier} channel ${err}. No posts can be published to this channel until you reconnect it: go to ${process.env.FRONTEND_URL}/launches, click 'Add Channel' and select the same account — this replaces the broken connection and keeps all your scheduled posts. There is no need to delete the channel.`, true, false, 'info' diff --git a/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts b/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts index 7c287152b9..601e0ce71a 100644 --- a/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts @@ -79,6 +79,14 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider { }; } + if (/"code":\s*190\b/.test(body)) { + return { + type: 'refresh-token' as const, + value: + 'The Facebook access token is invalid, please reconnect the channel', + }; + } + if (body.indexOf('1366046') > -1) { return { type: 'bad-body' as const, @@ -243,6 +251,13 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider { `${process.env.FRONTEND_URL}/integrations/social/facebook` )}` + `&state=${state}` + + // Re-prompt permissions/assets the user previously declined — + // without this Facebook silently returns the same reduced grant on + // every reconnect, so a bad grant can never be repaired from our UI. + // Note: it does NOT skip the "Reconnect / Edit settings" screen when + // the existing grant is intact; changing the page selection still + // requires the user to click "Edit settings" there. + `&auth_type=rerequest` + `&scope=${this.scopes.join(',')}`, codeVerifier: makeId(10), state, @@ -383,7 +398,10 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider { // Business Manager API not available for all users } - return allPages; + // Pages without an access_token were never granted to the app in the + // OAuth dialog (e.g. only discovered through Business Manager). + // Publishing through them is impossible, so don't offer them. + return allPages.filter((p: any) => p.access_token); } async fetchPageInformation(accessToken: string, data: { page: string }) { diff --git a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts index c96234777f..49c26f6f2b 100644 --- a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts @@ -319,11 +319,11 @@ export class InstagramProvider }; } - if (body.indexOf('190,') > -1) { + if (/"code":\s*190\b/.test(body)) { return { - type: 'bad-body' as const, + type: 'refresh-token' as const, value: - 'The account is missing some permissions to perform this action, please re-add the account and allow all permissions', + 'The Instagram access token is invalid, please reconnect the channel', }; } @@ -421,6 +421,13 @@ export class InstagramProvider `${process.env.FRONTEND_URL}/integrations/social/instagram` )}` + `&state=${state}` + + // Re-prompt permissions/assets the user previously declined — + // without this Facebook silently returns the same reduced grant on + // every reconnect, so a bad grant can never be repaired from our UI. + // Note: it does NOT skip the "Reconnect / Edit settings" screen when + // the existing grant is intact; changing the page selection still + // requires the user to click "Edit settings" there. + `&auth_type=rerequest` + `&scope=${encodeURIComponent(this.scopes.join(','))}`, codeVerifier: makeId(10), state, @@ -544,21 +551,39 @@ export class InstagramProvider // Business Manager API not available for all users } - const onlyConnectedAccounts = await Promise.all( - allFacebookPages - .filter((f: any) => f.instagram_business_account) - .map(async (p: any) => { - return { - pageId: p.id, - ...(await ( + const onlyConnectedAccounts = ( + await Promise.all( + allFacebookPages + .filter((f: any) => f.instagram_business_account) + .map(async (p: any) => { + // Verify page access with the same call fetchPageInformation + // makes when the account is saved. Pages the app was never + // granted in the OAuth dialog (e.g. only discovered through + // Business Manager) return no access_token here — selecting + // them would store a broken "undefined___..." token, so they + // must not be offered. + const { access_token } = await ( await fetch( - `https://graph.facebook.com/v20.0/${p.instagram_business_account.id}?fields=name,profile_picture_url&access_token=${accessToken}` + `https://graph.facebook.com/v20.0/${p.id}?fields=access_token&access_token=${accessToken}` ) - ).json()), - id: p.instagram_business_account.id, - }; - }) - ); + ).json(); + + if (!access_token) { + return null; + } + + return { + pageId: p.id, + ...(await ( + await fetch( + `https://graph.facebook.com/v20.0/${p.instagram_business_account.id}?fields=name,profile_picture_url&access_token=${accessToken}` + ) + ).json()), + id: p.instagram_business_account.id, + }; + }) + ) + ).filter(Boolean); return onlyConnectedAccounts.map((p: any) => ({ pageId: p.pageId, diff --git a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json index 26ee15169b..205a3979ec 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "شاهد هذا الفيديو القصير لتتعلم كيف تستفيد من Postiz بأفضل شكل", "back": "رجوع", "get_started": "ابدأ", - "kick_select_channel": "اختر القناة" + "kick_select_channel": "اختر القناة", + "before_you_continue": "قبل المتابعة", + "facebook_guidance_intro": "سيتم توجيهك إلى فيسبوك للسماح لـ Postiz بالوصول.", + "facebook_guidance_instagram_page": "اختر صفحة الفيسبوك المرتبطة بحساب الإنستغرام التجاري الخاص بك — اختيار صفحة أخرى لن يعمل.", + "facebook_guidance_facebook_page": "اختر صفحة (صفحات) الفيسبوك التي تريد النشر عليها.", + "facebook_guidance_edit_settings": "إذا سبق لك الاتصال، فقد يعيد فيسبوك استخدام اختيارك السابق. انقر على 'تعديل الإعدادات' في شاشة فيسبوك لتغييره.", + "could_not_connect_channel": "تعذر توصيل القناة، حاول مرة أخرى", + "back_to_postiz": "العودة إلى Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json index 2ceddb61d4..18018b57eb 100644 --- a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Postiz সর্বোচ্চভাবে কাজে লাগাতে এই সংক্ষিপ্ত ভিডিওটি দেখুন", "back": "পেছনে যান", "get_started": "শুরু করুন", - "kick_select_channel": "চ্যানেল নির্বাচন করুন" + "kick_select_channel": "চ্যানেল নির্বাচন করুন", + "before_you_continue": "চালিয়ে যাওয়ার আগে", + "facebook_guidance_intro": "Postiz-কে অনুমোদন দিতে আপনাকে Facebook-এ পাঠানো হবে।", + "facebook_guidance_instagram_page": "আপনার Instagram বিজনেস অ্যাকাউন্ট যে Facebook পেজের সাথে যুক্ত সেটি নির্বাচন করুন — অন্য পেজ নির্বাচন করলে কাজ করবে না।", + "facebook_guidance_facebook_page": "আপনি যে Facebook পেজে পোস্ট করতে চান সেটি নির্বাচন করুন।", + "facebook_guidance_edit_settings": "আপনি আগে সংযুক্ত হয়ে থাকলে, Facebook আপনার আগের নির্বাচন পুনরায় ব্যবহার করতে পারে। পরিবর্তন করতে Facebook স্ক্রিনে 'সেটিংস সম্পাদনা করুন'-এ ক্লিক করুন।", + "could_not_connect_channel": "চ্যানেল সংযুক্ত করা যায়নি, আবার চেষ্টা করুন", + "back_to_postiz": "Postiz-এ ফিরে যান" } diff --git a/libraries/react-shared-libraries/src/translation/locales/de/translation.json b/libraries/react-shared-libraries/src/translation/locales/de/translation.json index 7d1385c07b..53f49878e0 100644 --- a/libraries/react-shared-libraries/src/translation/locales/de/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/de/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Sieh dir dieses kurze Video an, um das Beste aus Postiz herauszuholen", "back": "Zurück", "get_started": "Loslegen", - "kick_select_channel": "Kanal auswählen" + "kick_select_channel": "Kanal auswählen", + "before_you_continue": "Bevor du fortfährst", + "facebook_guidance_intro": "Du wirst zu Facebook weitergeleitet, um Postiz zu autorisieren.", + "facebook_guidance_instagram_page": "Wähle die Facebook-Seite aus, mit der dein Instagram-Business-Konto verbunden ist — eine andere Seite funktioniert nicht.", + "facebook_guidance_facebook_page": "Wähle die Facebook-Seite(n) aus, auf denen du posten möchtest.", + "facebook_guidance_edit_settings": "Wenn du dich schon einmal verbunden hast, verwendet Facebook möglicherweise deine vorherige Auswahl. Klicke im Facebook-Fenster auf 'Einstellungen bearbeiten', um sie zu ändern.", + "could_not_connect_channel": "Der Kanal konnte nicht verbunden werden, bitte versuche es erneut", + "back_to_postiz": "Zurück zu Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/en/translation.json b/libraries/react-shared-libraries/src/translation/locales/en/translation.json index 6b0e634d6e..862f0fc715 100644 --- a/libraries/react-shared-libraries/src/translation/locales/en/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/en/translation.json @@ -569,7 +569,6 @@ "total_forks": "Total Forks", "continue_with": "Continue With", "email_address": "Email Address", - "label_company": "Company", "email_already_exists": "Email already exists", "google": "Google", "farcaster": "Farcaster", @@ -601,7 +600,6 @@ "add_provider_title": "Add Provider", "profile_updated": "Profile updated", "sets": "Sets", - "email_address": "Email Address", "invitation_link_sent": "Invitation link sent", "send_invitation_link": "Send Invitation Link", "copy_link": "Copy Link", @@ -695,5 +693,12 @@ "watch_tutorial_description": "Watch this short video to learn how to get the most out of Postiz", "back": "Back", "get_started": "Get Started", - "kick_select_channel": "Select Channel" -} \ No newline at end of file + "kick_select_channel": "Select Channel", + "before_you_continue": "Before you continue", + "facebook_guidance_intro": "You will be redirected to Facebook to authorize Postiz.", + "facebook_guidance_instagram_page": "Select the Facebook page your Instagram business account is connected to — granting a different page will not work.", + "facebook_guidance_facebook_page": "Select the Facebook page(s) you want to post to.", + "facebook_guidance_edit_settings": "If you connected before, Facebook may reuse your previous selection. Click 'Edit settings' on the Facebook screen to change it.", + "could_not_connect_channel": "Could not connect the channel, please try again", + "back_to_postiz": "Back to Postiz" +} diff --git a/libraries/react-shared-libraries/src/translation/locales/es/translation.json b/libraries/react-shared-libraries/src/translation/locales/es/translation.json index 5bd8f1cf93..4a4c75b7bf 100644 --- a/libraries/react-shared-libraries/src/translation/locales/es/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/es/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Mira este breve video para aprender a sacar el máximo provecho de Postiz", "back": "Atrás", "get_started": "Comenzar", - "kick_select_channel": "Seleccionar canal" + "kick_select_channel": "Seleccionar canal", + "before_you_continue": "Antes de continuar", + "facebook_guidance_intro": "Serás redirigido a Facebook para autorizar a Postiz.", + "facebook_guidance_instagram_page": "Selecciona la página de Facebook a la que está conectada tu cuenta de Instagram business — seleccionar otra página no funcionará.", + "facebook_guidance_facebook_page": "Selecciona la(s) página(s) de Facebook en las que quieres publicar.", + "facebook_guidance_edit_settings": "Si ya te conectaste antes, Facebook puede reutilizar tu selección anterior. Haz clic en 'Editar configuración' en la pantalla de Facebook para cambiarla.", + "could_not_connect_channel": "No se pudo conectar el canal, inténtalo de nuevo", + "back_to_postiz": "Volver a Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json index d9831e2473..251041eae4 100644 --- a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Regardez cette courte vidéo pour apprendre à tirer le meilleur parti de Postiz", "back": "Retour", "get_started": "Commencer", - "kick_select_channel": "Sélectionner le canal" + "kick_select_channel": "Sélectionner le canal", + "before_you_continue": "Avant de continuer", + "facebook_guidance_intro": "Vous allez être redirigé vers Facebook pour autoriser Postiz.", + "facebook_guidance_instagram_page": "Sélectionnez la page Facebook à laquelle votre compte Instagram business est connecté — choisir une autre page ne fonctionnera pas.", + "facebook_guidance_facebook_page": "Sélectionnez la ou les pages Facebook sur lesquelles vous souhaitez publier.", + "facebook_guidance_edit_settings": "Si vous vous êtes déjà connecté, Facebook peut réutiliser votre sélection précédente. Cliquez sur 'Modifier les paramètres' sur l'écran Facebook pour la changer.", + "could_not_connect_channel": "Impossible de connecter le canal, veuillez réessayer", + "back_to_postiz": "Retour à Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/he/translation.json b/libraries/react-shared-libraries/src/translation/locales/he/translation.json index 65631b988d..fe16693fd6 100644 --- a/libraries/react-shared-libraries/src/translation/locales/he/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/he/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "צפה בסרטון הקצר הזה ולמד כיצד להפיק את המרב מ-Postiz", "back": "חזרה", "get_started": "התחלה", - "kick_select_channel": "בחר ערוץ" + "kick_select_channel": "בחר ערוץ", + "before_you_continue": "לפני שממשיכים", + "facebook_guidance_intro": "תועבר לפייסבוק כדי לאשר ל-Postiz גישה.", + "facebook_guidance_instagram_page": "בחר את דף הפייסבוק שאליו מחובר חשבון האינסטגרם העסקי שלך — בחירת דף אחר לא תעבוד.", + "facebook_guidance_facebook_page": "בחר את דף/דפי הפייסבוק שאליהם ברצונך לפרסם.", + "facebook_guidance_edit_settings": "אם כבר התחברת בעבר, פייסבוק עשויה להשתמש בבחירה הקודמת שלך. לחץ על 'עריכת ההגדרות' במסך של פייסבוק כדי לשנות אותה.", + "could_not_connect_channel": "לא ניתן היה לחבר את הערוץ, נסה שוב", + "back_to_postiz": "חזרה ל-Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/it/translation.json b/libraries/react-shared-libraries/src/translation/locales/it/translation.json index b9f6dd3b3c..7266ac8be0 100644 --- a/libraries/react-shared-libraries/src/translation/locales/it/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/it/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Guarda questo breve video per imparare a sfruttare al meglio Postiz", "back": "Indietro", "get_started": "Inizia", - "kick_select_channel": "Seleziona canale" + "kick_select_channel": "Seleziona canale", + "before_you_continue": "Prima di continuare", + "facebook_guidance_intro": "Verrai reindirizzato a Facebook per autorizzare Postiz.", + "facebook_guidance_instagram_page": "Seleziona la pagina Facebook a cui è collegato il tuo account Instagram business — selezionare un'altra pagina non funzionerà.", + "facebook_guidance_facebook_page": "Seleziona la/e pagina/e Facebook su cui vuoi pubblicare.", + "facebook_guidance_edit_settings": "Se ti sei già connesso in passato, Facebook potrebbe riutilizzare la tua selezione precedente. Clicca su 'Modifica impostazioni' nella schermata di Facebook per cambiarla.", + "could_not_connect_channel": "Impossibile connettere il canale, riprova", + "back_to_postiz": "Torna a Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json index bb62ce1c98..ba4e372b37 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "この短い動画を見て、Postizを最大限に活用する方法を学びましょう", "back": "戻る", "get_started": "開始", - "kick_select_channel": "チャンネルを選択" + "kick_select_channel": "チャンネルを選択", + "before_you_continue": "続行する前に", + "facebook_guidance_intro": "Postizを承認するためにFacebookへリダイレクトされます。", + "facebook_guidance_instagram_page": "Instagramビジネスアカウントが接続されているFacebookページを選択してください — 別のページを選択しても機能しません。", + "facebook_guidance_facebook_page": "投稿したいFacebookページを選択してください。", + "facebook_guidance_edit_settings": "以前に接続したことがある場合、Facebookは前回の選択を再利用することがあります。変更するにはFacebookの画面で「設定を編集」をクリックしてください。", + "could_not_connect_channel": "チャンネルを接続できませんでした。もう一度お試しください", + "back_to_postiz": "Postizに戻る" } diff --git a/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json b/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json index 80b95ff03e..894aba655c 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json @@ -503,5 +503,13 @@ "label_who_can_reply_to_this_post": "ვის შეუძლია პასუხის გაცემა ამ პოსტზე?", "delete_integration": "ინტეგრაციის წაშლა", "start_writing_your_post": "დაიწყეთ თქვენი პოსტის წერა წინასწარი ხედვისთვის", - "faq_can_i_trust_postiz_gitroom": "Შემიძლია ვენდო Postiz-ს?" + "faq_can_i_trust_postiz_gitroom": "Შემიძლია ვენდო Postiz-ს?", + "before_you_continue": "სანამ გააგრძელებთ", + "continue": "გაგრძელება", + "facebook_guidance_intro": "Postiz-ის ავტორიზაციისთვის გადამისამართდებით Facebook-ზე.", + "facebook_guidance_instagram_page": "აირჩიეთ Facebook გვერდი, რომელზეც თქვენი Instagram ბიზნეს ანგარიშია მიბმული — სხვა გვერდის არჩევა არ იმუშავებს.", + "facebook_guidance_facebook_page": "აირჩიეთ Facebook გვერდ(ებ)ი, სადაც გსურთ პოსტვა.", + "facebook_guidance_edit_settings": "თუ ადრე უკვე დაკავშირებულხართ, Facebook-მა შესაძლოა თქვენი წინა არჩევანი გამოიყენოს. შესაცვლელად Facebook-ის ეკრანზე დააჭირეთ 'პარამეტრების რედაქტირებას'.", + "could_not_connect_channel": "არხის დაკავშირება ვერ მოხერხდა, სცადეთ ხელახლა", + "back_to_postiz": "Postiz-ზე დაბრუნება" } diff --git a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json index fba9c26375..7eee0745bb 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "이 짧은 영상을 통해 Postiz를 최대한 활용하는 방법을 알아보세요", "back": "뒤로가기", "get_started": "시작하기", - "kick_select_channel": "채널 선택" + "kick_select_channel": "채널 선택", + "before_you_continue": "계속하기 전에", + "facebook_guidance_intro": "Postiz 승인을 위해 Facebook으로 이동합니다.", + "facebook_guidance_instagram_page": "Instagram 비즈니스 계정이 연결된 Facebook 페이지를 선택하세요 — 다른 페이지를 선택하면 작동하지 않습니다.", + "facebook_guidance_facebook_page": "게시할 Facebook 페이지를 선택하세요.", + "facebook_guidance_edit_settings": "이전에 연결한 적이 있다면 Facebook이 이전 선택을 재사용할 수 있습니다. 변경하려면 Facebook 화면에서 '설정 수정'을 클릭하세요.", + "could_not_connect_channel": "채널을 연결할 수 없습니다. 다시 시도해 주세요", + "back_to_postiz": "Postiz로 돌아가기" } diff --git a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json index 8b32e51a85..0ce852d12f 100644 --- a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Assista a este vídeo curto para aprender a tirar o máximo proveito do Postiz", "back": "Voltar", "get_started": "Começar", - "kick_select_channel": "Selecionar canal" + "kick_select_channel": "Selecionar canal", + "before_you_continue": "Antes de continuar", + "facebook_guidance_intro": "Você será redirecionado ao Facebook para autorizar o Postiz.", + "facebook_guidance_instagram_page": "Selecione a página do Facebook à qual sua conta business do Instagram está conectada — selecionar outra página não funcionará.", + "facebook_guidance_facebook_page": "Selecione a(s) página(s) do Facebook em que deseja publicar.", + "facebook_guidance_edit_settings": "Se você já se conectou antes, o Facebook pode reutilizar sua seleção anterior. Clique em 'Editar configurações' na tela do Facebook para alterá-la.", + "could_not_connect_channel": "Não foi possível conectar o canal, tente novamente", + "back_to_postiz": "Voltar ao Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json index cdb2644cc4..2923746caa 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Посмотрите это короткое видео, чтобы узнать, как получить максимум от Postiz", "back": "Назад", "get_started": "Начать", - "kick_select_channel": "Выберите канал" + "kick_select_channel": "Выберите канал", + "before_you_continue": "Прежде чем продолжить", + "facebook_guidance_intro": "Вы будете перенаправлены в Facebook, чтобы авторизовать Postiz.", + "facebook_guidance_instagram_page": "Выберите страницу Facebook, к которой подключён ваш бизнес-аккаунт Instagram — выбор другой страницы не сработает.", + "facebook_guidance_facebook_page": "Выберите страницу(ы) Facebook, на которых вы хотите публиковать.", + "facebook_guidance_edit_settings": "Если вы уже подключались ранее, Facebook может использовать ваш прежний выбор. Нажмите 'Изменить настройки' на экране Facebook, чтобы изменить его.", + "could_not_connect_channel": "Не удалось подключить канал, попробуйте ещё раз", + "back_to_postiz": "Вернуться в Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json index 5beff003f4..b5bec9f75a 100644 --- a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Postiz'den en iyi şekilde yararlanmayı öğrenmek için bu kısa videoyu izleyin", "back": "Geri", "get_started": "Başlayın", - "kick_select_channel": "Kanal Seç" + "kick_select_channel": "Kanal Seç", + "before_you_continue": "Devam etmeden önce", + "facebook_guidance_intro": "Postiz'i yetkilendirmek için Facebook'a yönlendirileceksiniz.", + "facebook_guidance_instagram_page": "Instagram işletme hesabınızın bağlı olduğu Facebook sayfasını seçin — farklı bir sayfa seçmek işe yaramaz.", + "facebook_guidance_facebook_page": "Paylaşım yapmak istediğiniz Facebook sayfalarını seçin.", + "facebook_guidance_edit_settings": "Daha önce bağlandıysanız, Facebook önceki seçiminizi yeniden kullanabilir. Değiştirmek için Facebook ekranında 'Ayarları düzenle'ye tıklayın.", + "could_not_connect_channel": "Kanal bağlanamadı, lütfen tekrar deneyin", + "back_to_postiz": "Postiz'e geri dön" } diff --git a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json index fb66983ce7..add8da7285 100644 --- a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "Xem video ngắn này để biết cách tận dụng tối đa Postiz", "back": "Quay lại", "get_started": "Bắt đầu", - "kick_select_channel": "Chọn kênh" + "kick_select_channel": "Chọn kênh", + "before_you_continue": "Trước khi tiếp tục", + "facebook_guidance_intro": "Bạn sẽ được chuyển hướng đến Facebook để cấp quyền cho Postiz.", + "facebook_guidance_instagram_page": "Hãy chọn trang Facebook được liên kết với tài khoản Instagram business của bạn — chọn trang khác sẽ không hoạt động.", + "facebook_guidance_facebook_page": "Hãy chọn (các) trang Facebook bạn muốn đăng bài.", + "facebook_guidance_edit_settings": "Nếu bạn đã kết nối trước đây, Facebook có thể sử dụng lại lựa chọn cũ của bạn. Nhấp vào 'Chỉnh sửa cài đặt' trên màn hình Facebook để thay đổi.", + "could_not_connect_channel": "Không thể kết nối kênh, vui lòng thử lại", + "back_to_postiz": "Quay lại Postiz" } diff --git a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json index 8d0208c099..fe6344d820 100644 --- a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json @@ -693,5 +693,12 @@ "watch_tutorial_description": "观看这个简短的视频,学习如何最大程度地利用Postiz", "back": "返回", "get_started": "开始使用", - "kick_select_channel": "选择频道" + "kick_select_channel": "选择频道", + "before_you_continue": "在继续之前", + "facebook_guidance_intro": "您将被重定向到 Facebook 以授权 Postiz。", + "facebook_guidance_instagram_page": "请选择与您的 Instagram 商业账号关联的 Facebook 主页 — 选择其他主页将无法使用。", + "facebook_guidance_facebook_page": "请选择您要发布内容的 Facebook 主页。", + "facebook_guidance_edit_settings": "如果您之前连接过,Facebook 可能会沿用您之前的选择。请在 Facebook 页面上点击「编辑设置」进行更改。", + "could_not_connect_channel": "无法连接频道,请重试", + "back_to_postiz": "返回 Postiz" } From e8cfba9ee695a5d04c29872dba8bedb624095e6a Mon Sep 17 00:00:00 2001 From: Gilad Resisi Date: Tue, 7 Jul 2026 16:49:53 +0700 Subject: [PATCH 2/2] fix(instagram,facebook): warn that page grants are shared across all Meta channels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Facebook page grants are per Meta app and per user, not per channel: re-authorizing any Instagram/Facebook channel with a narrowed page selection revokes the unchecked pages' grants and invalidates their page tokens — silently breaking every other Postiz channel that uses them (verified experimentally in both directions: granting only the Instagram-linked page broke the Facebook page channel with an unmapped code-190 "Unknown Error", and granting only the Facebook page broke the Instagram channel with the code-190 permissions error; re-granting both pages fixed both channels). Add a line to the "Before you continue" guidance popup telling users their page selection applies to all their Facebook/Instagram channels and that unchecking pages used by other channels will break them. Translated across all locales. Co-Authored-By: Claude Fable 5 --- .../src/components/launches/add.provider.component.tsx | 6 ++++++ .../src/translation/locales/ar/translation.json | 3 ++- .../src/translation/locales/bn/translation.json | 3 ++- .../src/translation/locales/de/translation.json | 3 ++- .../src/translation/locales/en/translation.json | 3 ++- .../src/translation/locales/es/translation.json | 3 ++- .../src/translation/locales/fr/translation.json | 3 ++- .../src/translation/locales/he/translation.json | 3 ++- .../src/translation/locales/it/translation.json | 3 ++- .../src/translation/locales/ja/translation.json | 3 ++- .../src/translation/locales/ka_ge/translation.json | 3 ++- .../src/translation/locales/ko/translation.json | 3 ++- .../src/translation/locales/pt/translation.json | 3 ++- .../src/translation/locales/ru/translation.json | 3 ++- .../src/translation/locales/tr/translation.json | 3 ++- .../src/translation/locales/vi/translation.json | 3 ++- .../src/translation/locales/zh/translation.json | 3 ++- 17 files changed, 38 insertions(+), 16 deletions(-) diff --git a/apps/frontend/src/components/launches/add.provider.component.tsx b/apps/frontend/src/components/launches/add.provider.component.tsx index 7b44c5f430..c71217f982 100644 --- a/apps/frontend/src/components/launches/add.provider.component.tsx +++ b/apps/frontend/src/components/launches/add.provider.component.tsx @@ -402,6 +402,12 @@ export const FacebookPageGuidance: FC<{ 'Select the Facebook page(s) you want to post to.' )} +
  • + {t( + 'facebook_guidance_shared_grant', + 'Your page selection applies to all your Facebook and Instagram channels in Postiz, not only the one you are connecting — keep the pages used by your other channels checked, or those channels will stop working.' + )} +
  • {t( 'facebook_guidance_edit_settings', diff --git a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json index 205a3979ec..2559a8aab0 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "اختر صفحة (صفحات) الفيسبوك التي تريد النشر عليها.", "facebook_guidance_edit_settings": "إذا سبق لك الاتصال، فقد يعيد فيسبوك استخدام اختيارك السابق. انقر على 'تعديل الإعدادات' في شاشة فيسبوك لتغييره.", "could_not_connect_channel": "تعذر توصيل القناة، حاول مرة أخرى", - "back_to_postiz": "العودة إلى Postiz" + "back_to_postiz": "العودة إلى Postiz", + "facebook_guidance_shared_grant": "اختيارك للصفحات ينطبق على جميع قنوات فيسبوك وإنستغرام الخاصة بك في Postiz، وليس فقط على القناة التي تقوم بتوصيلها الآن — أبقِ الصفحات التي تستخدمها قنواتك الأخرى محددة، وإلا ستتوقف تلك القنوات عن العمل." } diff --git a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json index 18018b57eb..5e6a9f9896 100644 --- a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "আপনি যে Facebook পেজে পোস্ট করতে চান সেটি নির্বাচন করুন।", "facebook_guidance_edit_settings": "আপনি আগে সংযুক্ত হয়ে থাকলে, Facebook আপনার আগের নির্বাচন পুনরায় ব্যবহার করতে পারে। পরিবর্তন করতে Facebook স্ক্রিনে 'সেটিংস সম্পাদনা করুন'-এ ক্লিক করুন।", "could_not_connect_channel": "চ্যানেল সংযুক্ত করা যায়নি, আবার চেষ্টা করুন", - "back_to_postiz": "Postiz-এ ফিরে যান" + "back_to_postiz": "Postiz-এ ফিরে যান", + "facebook_guidance_shared_grant": "আপনার পেজ নির্বাচন শুধু বর্তমান চ্যানেলে নয়, Postiz-এর আপনার সব Facebook ও Instagram চ্যানেলে প্রযোজ্য — আপনার অন্য চ্যানেলগুলি যে পেজ ব্যবহার করে সেগুলি নির্বাচিত রাখুন, নাহলে সেই চ্যানেলগুলি কাজ করা বন্ধ করবে।" } diff --git a/libraries/react-shared-libraries/src/translation/locales/de/translation.json b/libraries/react-shared-libraries/src/translation/locales/de/translation.json index 53f49878e0..ef9a292725 100644 --- a/libraries/react-shared-libraries/src/translation/locales/de/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/de/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Wähle die Facebook-Seite(n) aus, auf denen du posten möchtest.", "facebook_guidance_edit_settings": "Wenn du dich schon einmal verbunden hast, verwendet Facebook möglicherweise deine vorherige Auswahl. Klicke im Facebook-Fenster auf 'Einstellungen bearbeiten', um sie zu ändern.", "could_not_connect_channel": "Der Kanal konnte nicht verbunden werden, bitte versuche es erneut", - "back_to_postiz": "Zurück zu Postiz" + "back_to_postiz": "Zurück zu Postiz", + "facebook_guidance_shared_grant": "Deine Seitenauswahl gilt für alle deine Facebook- und Instagram-Kanäle in Postiz, nicht nur für den, den du gerade verbindest — lasse die Seiten deiner anderen Kanäle angehakt, sonst funktionieren diese Kanäle nicht mehr." } diff --git a/libraries/react-shared-libraries/src/translation/locales/en/translation.json b/libraries/react-shared-libraries/src/translation/locales/en/translation.json index 862f0fc715..223f23d082 100644 --- a/libraries/react-shared-libraries/src/translation/locales/en/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/en/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Select the Facebook page(s) you want to post to.", "facebook_guidance_edit_settings": "If you connected before, Facebook may reuse your previous selection. Click 'Edit settings' on the Facebook screen to change it.", "could_not_connect_channel": "Could not connect the channel, please try again", - "back_to_postiz": "Back to Postiz" + "back_to_postiz": "Back to Postiz", + "facebook_guidance_shared_grant": "Your page selection applies to all your Facebook and Instagram channels in Postiz, not only the one you are connecting — keep the pages used by your other channels checked, or those channels will stop working." } diff --git a/libraries/react-shared-libraries/src/translation/locales/es/translation.json b/libraries/react-shared-libraries/src/translation/locales/es/translation.json index 4a4c75b7bf..9e5a73fa90 100644 --- a/libraries/react-shared-libraries/src/translation/locales/es/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/es/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Selecciona la(s) página(s) de Facebook en las que quieres publicar.", "facebook_guidance_edit_settings": "Si ya te conectaste antes, Facebook puede reutilizar tu selección anterior. Haz clic en 'Editar configuración' en la pantalla de Facebook para cambiarla.", "could_not_connect_channel": "No se pudo conectar el canal, inténtalo de nuevo", - "back_to_postiz": "Volver a Postiz" + "back_to_postiz": "Volver a Postiz", + "facebook_guidance_shared_grant": "Tu selección de páginas se aplica a todos tus canales de Facebook e Instagram en Postiz, no solo al que estás conectando — mantén marcadas las páginas que usan tus otros canales, o esos canales dejarán de funcionar." } diff --git a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json index 251041eae4..f46117f0a0 100644 --- a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Sélectionnez la ou les pages Facebook sur lesquelles vous souhaitez publier.", "facebook_guidance_edit_settings": "Si vous vous êtes déjà connecté, Facebook peut réutiliser votre sélection précédente. Cliquez sur 'Modifier les paramètres' sur l'écran Facebook pour la changer.", "could_not_connect_channel": "Impossible de connecter le canal, veuillez réessayer", - "back_to_postiz": "Retour à Postiz" + "back_to_postiz": "Retour à Postiz", + "facebook_guidance_shared_grant": "Votre sélection de pages s'applique à tous vos canaux Facebook et Instagram dans Postiz, pas seulement à celui que vous connectez — laissez cochées les pages utilisées par vos autres canaux, sinon ces canaux cesseront de fonctionner." } diff --git a/libraries/react-shared-libraries/src/translation/locales/he/translation.json b/libraries/react-shared-libraries/src/translation/locales/he/translation.json index fe16693fd6..aad26285c3 100644 --- a/libraries/react-shared-libraries/src/translation/locales/he/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/he/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "בחר את דף/דפי הפייסבוק שאליהם ברצונך לפרסם.", "facebook_guidance_edit_settings": "אם כבר התחברת בעבר, פייסבוק עשויה להשתמש בבחירה הקודמת שלך. לחץ על 'עריכת ההגדרות' במסך של פייסבוק כדי לשנות אותה.", "could_not_connect_channel": "לא ניתן היה לחבר את הערוץ, נסה שוב", - "back_to_postiz": "חזרה ל-Postiz" + "back_to_postiz": "חזרה ל-Postiz", + "facebook_guidance_shared_grant": "בחירת הדפים חלה על כל ערוצי הפייסבוק והאינסטגרם שלך ב-Postiz, לא רק על הערוץ שאתה מחבר כעת — השאר מסומנים את הדפים שבשימוש הערוצים האחרים שלך, אחרת הם יפסיקו לעבוד." } diff --git a/libraries/react-shared-libraries/src/translation/locales/it/translation.json b/libraries/react-shared-libraries/src/translation/locales/it/translation.json index 7266ac8be0..290cea979d 100644 --- a/libraries/react-shared-libraries/src/translation/locales/it/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/it/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Seleziona la/e pagina/e Facebook su cui vuoi pubblicare.", "facebook_guidance_edit_settings": "Se ti sei già connesso in passato, Facebook potrebbe riutilizzare la tua selezione precedente. Clicca su 'Modifica impostazioni' nella schermata di Facebook per cambiarla.", "could_not_connect_channel": "Impossibile connettere il canale, riprova", - "back_to_postiz": "Torna a Postiz" + "back_to_postiz": "Torna a Postiz", + "facebook_guidance_shared_grant": "La selezione delle pagine vale per tutti i tuoi canali Facebook e Instagram in Postiz, non solo per quello che stai collegando — mantieni selezionate le pagine usate dagli altri tuoi canali, altrimenti smetteranno di funzionare." } diff --git a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json index ba4e372b37..d3ed85baf1 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "投稿したいFacebookページを選択してください。", "facebook_guidance_edit_settings": "以前に接続したことがある場合、Facebookは前回の選択を再利用することがあります。変更するにはFacebookの画面で「設定を編集」をクリックしてください。", "could_not_connect_channel": "チャンネルを接続できませんでした。もう一度お試しください", - "back_to_postiz": "Postizに戻る" + "back_to_postiz": "Postizに戻る", + "facebook_guidance_shared_grant": "ページの選択は、接続中のチャンネルだけでなく、Postizのすべての Facebook・Instagram チャンネルに適用されます。他のチャンネルが使用しているページはチェックしたままにしてください。外すとそのチャンネルは動作しなくなります。" } diff --git a/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json b/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json index 894aba655c..e883486e7b 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ka_ge/translation.json @@ -511,5 +511,6 @@ "facebook_guidance_facebook_page": "აირჩიეთ Facebook გვერდ(ებ)ი, სადაც გსურთ პოსტვა.", "facebook_guidance_edit_settings": "თუ ადრე უკვე დაკავშირებულხართ, Facebook-მა შესაძლოა თქვენი წინა არჩევანი გამოიყენოს. შესაცვლელად Facebook-ის ეკრანზე დააჭირეთ 'პარამეტრების რედაქტირებას'.", "could_not_connect_channel": "არხის დაკავშირება ვერ მოხერხდა, სცადეთ ხელახლა", - "back_to_postiz": "Postiz-ზე დაბრუნება" + "back_to_postiz": "Postiz-ზე დაბრუნება", + "facebook_guidance_shared_grant": "გვერდების არჩევანი ვრცელდება Postiz-ში თქვენს ყველა Facebook და Instagram არხზე და არა მხოლოდ იმაზე, რომელსაც ახლა აკავშირებთ — დატოვეთ მონიშნული ის გვერდები, რომლებსაც თქვენი სხვა არხები იყენებენ, წინააღმდეგ შემთხვევაში ისინი მუშაობას შეწყვეტენ." } diff --git a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json index 7eee0745bb..616f7a1ba0 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "게시할 Facebook 페이지를 선택하세요.", "facebook_guidance_edit_settings": "이전에 연결한 적이 있다면 Facebook이 이전 선택을 재사용할 수 있습니다. 변경하려면 Facebook 화면에서 '설정 수정'을 클릭하세요.", "could_not_connect_channel": "채널을 연결할 수 없습니다. 다시 시도해 주세요", - "back_to_postiz": "Postiz로 돌아가기" + "back_to_postiz": "Postiz로 돌아가기", + "facebook_guidance_shared_grant": "페이지 선택은 지금 연결 중인 채널뿐 아니라 Postiz의 모든 Facebook·Instagram 채널에 적용됩니다. 다른 채널이 사용하는 페이지는 체크된 상태로 유지하세요. 해제하면 해당 채널이 작동을 멈춥니다." } diff --git a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json index 0ce852d12f..8ae3405955 100644 --- a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Selecione a(s) página(s) do Facebook em que deseja publicar.", "facebook_guidance_edit_settings": "Se você já se conectou antes, o Facebook pode reutilizar sua seleção anterior. Clique em 'Editar configurações' na tela do Facebook para alterá-la.", "could_not_connect_channel": "Não foi possível conectar o canal, tente novamente", - "back_to_postiz": "Voltar ao Postiz" + "back_to_postiz": "Voltar ao Postiz", + "facebook_guidance_shared_grant": "Sua seleção de páginas se aplica a todos os seus canais de Facebook e Instagram no Postiz, não apenas ao que você está conectando — mantenha marcadas as páginas usadas pelos seus outros canais, ou esses canais deixarão de funcionar." } diff --git a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json index 2923746caa..15abec7162 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Выберите страницу(ы) Facebook, на которых вы хотите публиковать.", "facebook_guidance_edit_settings": "Если вы уже подключались ранее, Facebook может использовать ваш прежний выбор. Нажмите 'Изменить настройки' на экране Facebook, чтобы изменить его.", "could_not_connect_channel": "Не удалось подключить канал, попробуйте ещё раз", - "back_to_postiz": "Вернуться в Postiz" + "back_to_postiz": "Вернуться в Postiz", + "facebook_guidance_shared_grant": "Выбор страниц применяется ко всем вашим каналам Facebook и Instagram в Postiz, а не только к подключаемому сейчас — оставьте отмеченными страницы, используемые другими вашими каналами, иначе они перестанут работать." } diff --git a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json index b5bec9f75a..d9fd43977e 100644 --- a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Paylaşım yapmak istediğiniz Facebook sayfalarını seçin.", "facebook_guidance_edit_settings": "Daha önce bağlandıysanız, Facebook önceki seçiminizi yeniden kullanabilir. Değiştirmek için Facebook ekranında 'Ayarları düzenle'ye tıklayın.", "could_not_connect_channel": "Kanal bağlanamadı, lütfen tekrar deneyin", - "back_to_postiz": "Postiz'e geri dön" + "back_to_postiz": "Postiz'e geri dön", + "facebook_guidance_shared_grant": "Sayfa seçiminiz yalnızca şu an bağladığınız kanal için değil, Postiz'deki tüm Facebook ve Instagram kanallarınız için geçerlidir — diğer kanallarınızın kullandığı sayfaları işaretli bırakın, aksi halde o kanallar çalışmayı durdurur." } diff --git a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json index add8da7285..1d4642765c 100644 --- a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "Hãy chọn (các) trang Facebook bạn muốn đăng bài.", "facebook_guidance_edit_settings": "Nếu bạn đã kết nối trước đây, Facebook có thể sử dụng lại lựa chọn cũ của bạn. Nhấp vào 'Chỉnh sửa cài đặt' trên màn hình Facebook để thay đổi.", "could_not_connect_channel": "Không thể kết nối kênh, vui lòng thử lại", - "back_to_postiz": "Quay lại Postiz" + "back_to_postiz": "Quay lại Postiz", + "facebook_guidance_shared_grant": "Lựa chọn trang của bạn áp dụng cho tất cả các kênh Facebook và Instagram trong Postiz, không chỉ kênh bạn đang kết nối — hãy giữ nguyên dấu chọn cho các trang mà các kênh khác của bạn đang dùng, nếu không các kênh đó sẽ ngừng hoạt động." } diff --git a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json index fe6344d820..950e7c4826 100644 --- a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json @@ -700,5 +700,6 @@ "facebook_guidance_facebook_page": "请选择您要发布内容的 Facebook 主页。", "facebook_guidance_edit_settings": "如果您之前连接过,Facebook 可能会沿用您之前的选择。请在 Facebook 页面上点击「编辑设置」进行更改。", "could_not_connect_channel": "无法连接频道,请重试", - "back_to_postiz": "返回 Postiz" + "back_to_postiz": "返回 Postiz", + "facebook_guidance_shared_grant": "页面选择适用于您在 Postiz 中的所有 Facebook 和 Instagram 频道,而不仅是当前连接的频道 — 请保持勾选其他频道所使用的主页,否则这些频道将停止工作。" }