fix(tiktok): align UX strings and render processing notice for app review

Match the literal copy the TikTok app reviewer looks for during the
Content Posting API audit, per the Mixpost playbook (the only public
account of how to pass).

- Privacy dropdown placeholder: "Select who can view this post"
- Tooltip on interaction toggles disabled by creator: "Turned off in
  your TikTok account settings"
- Render the "may take a few minutes" notice that was translated but
  never displayed (processing_hint)

Mirror both i18n changes in pt-BR and es. Add a feature test that locks
the literal strings so they cannot drift before the next review cycle.
This commit is contained in:
Paulo Castellano 2026-05-29 10:16:04 -03:00
parent ec7aad7044
commit 50477b97f0
5 changed files with 46 additions and 6 deletions

View file

@ -61,7 +61,7 @@
],
'posting_to' => 'Posting to',
'privacy_level' => 'Who can see this video?',
'privacy_placeholder' => 'Select visibility',
'privacy_placeholder' => 'Select who can view this post',
'privacy' => [
'public' => 'Public to everyone',
'friends' => 'Mutual follow friends',
@ -87,7 +87,7 @@
'compliance_incomplete' => 'You need to indicate if your content promotes yourself, a third party, or both.',
'privacy_required' => 'TikTok privacy level is required when publishing.',
'branded_cleared_private' => 'Privacy was cleared because Branded Content cannot be private.',
'interaction_disabled_by_creator' => 'Disabled by your TikTok account settings.',
'interaction_disabled_by_creator' => 'Turned off in your TikTok account settings',
'max_duration_exceeded' => 'Video is :duration s long but this account can only post videos up to :max s.',
'processing_hint' => 'After publishing, it may take a few minutes for the content to process and appear on your TikTok profile.',
'brand_organic' => 'Your brand',

View file

@ -61,7 +61,7 @@
],
'posting_to' => 'Publicando en',
'privacy_level' => '¿Quién puede ver este video?',
'privacy_placeholder' => 'Selecciona la visibilidad',
'privacy_placeholder' => 'Selecciona quién puede ver esta publicación',
'privacy' => [
'public' => 'Público para todos',
'friends' => 'Amigos mutuos',
@ -87,7 +87,7 @@
'compliance_incomplete' => 'Debes indicar si tu contenido promociona a ti mismo, a un tercero o a ambos.',
'privacy_required' => 'La visibilidad de TikTok es obligatoria al publicar.',
'branded_cleared_private' => 'La visibilidad se borró porque el contenido de marca no puede ser privado.',
'interaction_disabled_by_creator' => 'Desactivado por la configuración de tu cuenta TikTok.',
'interaction_disabled_by_creator' => 'Desactivado en la configuración de tu cuenta TikTok',
'max_duration_exceeded' => 'El video dura :duration s pero esta cuenta solo permite videos de hasta :max s.',
'processing_hint' => 'Después de publicar, puede tardar unos minutos en procesarse y aparecer en tu perfil de TikTok.',
'brand_organic' => 'Tu marca',

View file

@ -61,7 +61,7 @@
],
'posting_to' => 'Publicando em',
'privacy_level' => 'Quem pode ver este vídeo?',
'privacy_placeholder' => 'Selecione a visibilidade',
'privacy_placeholder' => 'Selecione quem pode ver este post',
'privacy' => [
'public' => 'Público para todos',
'friends' => 'Amigos em comum',
@ -87,7 +87,7 @@
'compliance_incomplete' => 'Você precisa indicar se o conteúdo promove você mesmo, terceiros ou ambos.',
'privacy_required' => 'A visibilidade do TikTok é obrigatória ao publicar.',
'branded_cleared_private' => 'A visibilidade foi limpa porque conteúdo de marca não pode ser privado.',
'interaction_disabled_by_creator' => 'Desativado pelas configurações da sua conta TikTok.',
'interaction_disabled_by_creator' => 'Desativado nas configurações da sua conta TikTok',
'max_duration_exceeded' => 'Vídeo tem :duration s mas esta conta só permite vídeos de até :max s.',
'processing_hint' => 'Após publicar, pode levar alguns minutos para o conteúdo ser processado e aparecer no seu perfil TikTok.',
'brand_organic' => 'Sua marca',

View file

@ -397,6 +397,11 @@ watch(
{{ $t('posts.form.tiktok.compliance.music_usage') }}
</a>
</p>
<!-- Post-publish notice required by TikTok Content Sharing Guidelines -->
<p class="mt-3 text-xs text-muted-foreground">
{{ $t('posts.form.tiktok.processing_hint') }}
</p>
</div>
</div>
</template>

View file

@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
test('tiktok english strings match the wording the app reviewer expects', function () {
expect(__('posts.form.tiktok.privacy_placeholder', [], 'en'))
->toBe('Select who can view this post');
expect(__('posts.form.tiktok.interaction_disabled_by_creator', [], 'en'))
->toBe('Turned off in your TikTok account settings');
expect(__('posts.form.tiktok.processing_hint', [], 'en'))
->toBe('After publishing, it may take a few minutes for the content to process and appear on your TikTok profile.');
expect(__('posts.form.tiktok.compliance_incomplete', [], 'en'))
->toBe('You need to indicate if your content promotes yourself, a third party, or both.');
expect(__('posts.form.tiktok.privacy.private_disabled_branded', [], 'en'))
->toBe('Branded content visibility cannot be set to private.');
expect(__('posts.form.tiktok.promotional_organic_title', [], 'en'))
->toBe('Your photo/video will be labeled as "Promotional content".');
expect(__('posts.form.tiktok.promotional_paid_title', [], 'en'))
->toBe('Your photo/video will be labeled as "Paid partnership".');
expect(__('posts.form.tiktok.compliance.agree', [], 'en'))
->toBe("By posting, you agree to TikTok's");
expect(__('posts.form.tiktok.compliance.music_usage', [], 'en'))
->toBe('Music Usage Confirmation');
expect(__('posts.form.tiktok.compliance.branded_policy', [], 'en'))
->toBe('Branded Content Policy');
});