From 50477b97f03f960ffccd50c7a79cafbfe6c90cf1 Mon Sep 17 00:00:00 2001
From: Paulo Castellano
Date: Fri, 29 May 2026 10:16:04 -0300
Subject: [PATCH] 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.
---
lang/en/posts.php | 4 +--
lang/es/posts.php | 4 +--
lang/pt-BR/posts.php | 4 +--
.../posts/editor/TikTokSettings.vue | 5 +++
tests/Feature/TikTokI18nStringsTest.php | 35 +++++++++++++++++++
5 files changed, 46 insertions(+), 6 deletions(-)
create mode 100644 tests/Feature/TikTokI18nStringsTest.php
diff --git a/lang/en/posts.php b/lang/en/posts.php
index 8488c29a..a4dd2a69 100644
--- a/lang/en/posts.php
+++ b/lang/en/posts.php
@@ -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',
diff --git a/lang/es/posts.php b/lang/es/posts.php
index cf988ea8..7bc4e1e9 100644
--- a/lang/es/posts.php
+++ b/lang/es/posts.php
@@ -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',
diff --git a/lang/pt-BR/posts.php b/lang/pt-BR/posts.php
index 6dc86360..bba789cc 100644
--- a/lang/pt-BR/posts.php
+++ b/lang/pt-BR/posts.php
@@ -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',
diff --git a/resources/js/components/posts/editor/TikTokSettings.vue b/resources/js/components/posts/editor/TikTokSettings.vue
index 3b53d1c2..795ebf5e 100644
--- a/resources/js/components/posts/editor/TikTokSettings.vue
+++ b/resources/js/components/posts/editor/TikTokSettings.vue
@@ -397,6 +397,11 @@ watch(
{{ $t('posts.form.tiktok.compliance.music_usage') }}
+
+
+
+ {{ $t('posts.form.tiktok.processing_hint') }}
+
diff --git a/tests/Feature/TikTokI18nStringsTest.php b/tests/Feature/TikTokI18nStringsTest.php
new file mode 100644
index 00000000..d6a73a57
--- /dev/null
+++ b/tests/Feature/TikTokI18nStringsTest.php
@@ -0,0 +1,35 @@
+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');
+});