Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
| **Workspaces** | Isolate each brand, client, or project in its own space. |
| **REST API + MCP** | Full programmatic control; AI assistants integrate natively. |
| **Native analytics** | Per-account reach and engagement across every connected platform. |
| **Multi-language** | English, Spanish, and Portuguese. |
| **Multi-language** | English, Ukrainian, Spanish, Portuguese, French, German, Italian, Dutch, Polish, Greek, Japanese, Korean, Chinese, Russian, Turkish, and Arabic. |

## Supported platforms

Expand Down
3 changes: 3 additions & 0 deletions app/Enums/Workspace/ContentLanguage.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
enum ContentLanguage: string
{
case English = 'en';
case Ukrainian = 'uk';
case PortugueseBrazil = 'pt-BR';
case Spanish = 'es';
case French = 'fr';
Expand All @@ -41,6 +42,7 @@ public function label(): string
{
return match ($this) {
self::English => 'English',
self::Ukrainian => 'Українська',
self::PortugueseBrazil => 'Português (Brasil)',
self::Spanish => 'Español',
self::French => 'Français',
Expand All @@ -66,6 +68,7 @@ public function englishName(): string
{
return match ($this) {
self::English => 'English',
self::Ukrainian => 'Ukrainian',
self::PortugueseBrazil => 'Brazilian Portuguese',
self::Spanish => 'Spanish',
self::French => 'French',
Expand Down
1 change: 1 addition & 0 deletions config/languages.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

'available' => [
'en' => 'English',
'uk' => 'Українська',
'es' => 'Español',
'pt-BR' => 'Português',
'fr' => 'Français',
Expand Down
148 changes: 148 additions & 0 deletions lang/uk/accounts.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
<?php

return [
'title' => 'Підключення',
'page_title' => 'Соціальні акаунти',
'description' => 'Огляд усіх підключених соціальних акаунтів',
'connect_cta' => 'Підключити',

'not_connected' => 'Не підключено',
'connect' => 'Підключити',
'connection_lost' => 'З’єднання втрачено',
'reconnect' => 'Перепідключити',
'reconnect_account' => 'Перепідключити акаунт',
'view_profile' => 'Переглянути профіль',
'disconnect' => 'Від’єднати',

'descriptions' => [
'linkedin' => 'Підключіть профіль LinkedIn або сторінку компанії',
'linkedin-page' => 'Підключіть сторінку компанії LinkedIn',
'x' => 'Підключіть акаунт X (Twitter)',
'tiktok' => 'Підключіть акаунт TikTok',
'youtube' => 'Підключіть канал YouTube',
'facebook' => 'Підключіть сторінку Facebook',
'instagram' => 'Підключіть професійний акаунт Instagram',
'instagram-facebook' => 'Підключіть Instagram через сторінку Facebook',
'threads' => 'Підключіть акаунт Threads',
'pinterest' => 'Підключіть акаунт Pinterest',
'bluesky' => 'Підключіть акаунт Bluesky',
'mastodon' => 'Підключіть акаунт Mastodon',
'telegram' => 'Підключіть канал або групу Telegram',
'discord' => 'Підключіть сервер Discord',
],

'disconnect_modal' => [
'title' => 'Від’єднати акаунт',
'description' => 'Ви впевнені, що хочете від’єднати цей акаунт? Ви зможете підключити його знову будь-коли.',
'confirm' => 'Від’єднати',
'cancel' => 'Скасувати',
],

'bluesky' => [
'title' => 'Підключити Bluesky',
'description' => 'Введіть облікові дані для підключення',
'email' => 'Email',
'email_placeholder' => 'yourhandle.bsky.social',
'app_password' => 'Пароль додатка',
'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx',
'app_password_hint' => 'З міркувань безпеки використовуйте <strong>пароль додатка</strong>. Створіть його на <a href="https://bsky.app/settings/app-passwords" target="_blank" class="underline">bsky.app/settings</a>.',
'submit' => 'Підключити Bluesky',
'submitting' => 'Підключення...',
],

'mastodon' => [
'title' => 'Підключити Mastodon',
'description' => 'Введіть інстанс Mastodon',
'instance_url' => 'URL інстансу',
'instance_placeholder' => 'https://mastodon.social',
'instance_hint' => 'Введіть URL інстансу Mastodon (напр. mastodon.social, techhub.social)',
'submit' => 'Продовжити з Mastodon',
'submitting' => 'Підключення...',
],

'telegram' => [
'title' => 'Підключити Telegram',
'description' => 'Під’єднайте канал або групу',
'step_admin' => 'Додайте :bot як адміністратора до каналу або групи Telegram.',
'step_command' => 'Опублікуйте цю команду в каналі або групі:',
'waiting' => 'Очікуємо підключення каналу…',
'connected' => 'Канал підключено!',
'connected_toast' => 'Канал Telegram успішно підключено!',
'copied_toast' => 'Команду скопійовано в буфер обміну',
'copy_tooltip' => 'Копіювати команду',
'expired' => 'Цей код прострочено. Згенеруйте новий і спробуйте ще раз.',
'new_code' => 'Згенерувати новий код',
'retry' => 'Спробувати ще раз',
'error_generic' => 'Не вдалося розпочати підключення. Спробуйте ще раз.',
'network_taken' => 'У цьому робочому просторі вже підключено канал Telegram. Спочатку від’єднайте його.',
],

'facebook' => [
'title' => 'Виберіть сторінку Facebook',
'description' => 'Виберіть сторінку, яку хочете підключити',
'no_pages' => 'Сторінок не знайдено',
'no_pages_description' => 'Ви не є адміністратором жодної сторінки Facebook.',
'page_label' => 'Сторінка Facebook',
'view' => 'Переглянути',
'choose' => 'Вибрати',
],

'instagram_facebook' => [
'title' => 'Виберіть акаунт Instagram',
'description' => 'Виберіть акаунт Instagram, який хочете підключити',
'no_pages' => 'Акаунтів Instagram не знайдено',
'no_pages_description' => 'Не знайдено сторінок Facebook із підключеними бізнес-акаунтами Instagram.',
'view' => 'Переглянути',
'choose' => 'Вибрати',
],

'linkedin' => [
'title' => 'Виберіть сторінку LinkedIn',
'description' => 'Виберіть сторінку, яку хочете підключити',
'no_pages' => 'Сторінок не знайдено',
'no_pages_description' => 'Ви не є адміністратором жодної сторінки LinkedIn.',
'page_label' => 'Сторінка LinkedIn',
'select_title' => 'Де ви хочете публікувати?',
'select_subtitle' => 'Публікуйте від свого імені або виберіть сторінку компанії, якою керуєте.',
'person_tag' => 'Особа',
'organization_tag' => 'Організація',
'view' => 'Переглянути',
'choose' => 'Вибрати',
],

'flash' => [
'disconnected' => 'Акаунт успішно від’єднано!',
'connected' => 'Акаунт успішно підключено!',
'session_expired' => 'Сесію завершено. Спробуйте ще раз.',
'workspace_not_found' => 'Робочий простір не знайдено.',
'activated' => 'Акаунт активовано!',
'deactivated' => 'Акаунт деактивовано!',
'already_connected' => 'Ця платформа вже підключена.',
'no_youtube_channels' => 'Каналів YouTube не знайдено. Спочатку створіть канал.',
],

'popup_callback' => [
'title_success' => 'Підключено',
'title_error' => 'Помилка',
'closing' => 'Це вікно закриється автоматично...',
'manual_close' => 'Ви можете закрити це вікно.',
'popup_blocked' => 'Не вдалося відкрити вікно підключення. Дозвольте спливаючі вікна і спробуйте ще раз.',
'connected' => 'Акаунт підключено!',
'reconnected' => 'Акаунт перепідключено!',
'error_connecting' => 'Помилка підключення акаунта. Спробуйте ще раз.',
'network_taken' => 'У цьому робочому просторі вже є акаунт для цієї мережі. Спочатку від’єднайте його.',
'error_connecting_page' => 'Помилка підключення сторінки. Спробуйте ще раз.',
'error_connecting_channel' => 'Помилка підключення каналу. Спробуйте ще раз.',
'session_expired' => 'Сесію завершено. Спробуйте ще раз.',
'workspace_not_found' => 'Робочий простір не знайдено.',
'invalid_state' => 'Недійсний стан. Спробуйте ще раз.',
'failed_to_authenticate' => 'Не вдалося автентифікуватися.',
'failed_to_get_profile' => 'Не вдалося отримати профіль.',
'page_not_found' => 'Сторінку не знайдено.',
'channel_not_found' => 'Канал не знайдено.',
'no_facebook_pages' => 'Сторінок Facebook не знайдено. Ви маєте бути адміністратором хоча б однієї сторінки.',
'no_facebook_instagram_pages' => 'Не знайдено сторінок Facebook із підключеними акаунтами Instagram.',
'no_youtube_channels' => 'Каналів YouTube не знайдено. Спочатку створіть канал.',
'not_linkedin_admin' => 'Ви не є адміністратором жодної сторінки LinkedIn.',
],
];
55 changes: 55 additions & 0 deletions lang/uk/analytics.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php

return [
'no_accounts' => 'Немає підключених акаунтів з аналітикою.',
'no_accounts_match' => 'Жоден акаунт не відповідає.',
'search_account' => 'Пошук акаунта…',
'select_account' => 'Виберіть акаунт, щоб переглянути аналітику.',
'no_data' => 'Дані аналітики недоступні.',

'metrics' => [
'avg_view_duration' => 'Сер. тривалість перегляду (с)',
'avg_view_percentage' => 'Сер. відсоток перегляду',
'bookmarks' => 'Закладки',
'clicks' => 'Кліки',
'comments' => 'Коментарі',
'custom_reaction' => 'Власна',
'engagement' => 'Залучення',
'favourites' => 'Обране',
'followers' => 'Підписники',
'following' => 'Підписки',
'impressions' => 'Покази',
'interactions' => 'Взаємодії',
'likes' => 'Вподобання',
'members' => 'Учасники',
'minutes_watched' => 'Хвилин переглянуто',
'organic_followers' => 'Органічні підписники',
'outbound_clicks' => 'Зовнішні кліки',
'page_followers' => 'Підписники сторінки',
'page_reach' => 'Охоплення сторінки',
'page_views' => 'Перегляди сторінки',
'paid_followers' => 'Платні підписники',
'pin_click_rate' => 'CTR піна',
'pin_clicks' => 'Кліки по піну',
'posts_engagement' => 'Залучення постів',
'posts_reach' => 'Охоплення постів',
'quotes' => 'Цитати',
'reach' => 'Охоплення',
'reblogs' => 'Репости',
'recent_comments' => 'Нещодавні коментарі',
'recent_likes' => 'Нещодавні вподобання',
'recent_shares' => 'Нещодавні поширення',
'replies' => 'Відповіді',
'reposts' => 'Репости',
'retweets' => 'Ретвіти',
'saves' => 'Збереження',
'shares' => 'Поширення',
'subscribers' => 'Підписники',
'subscribers_gained' => 'Отримано підписників',
'subscribers_lost' => 'Втрачено підписників',
'total_likes' => 'Усього вподобань',
'video_views' => 'Перегляди відео',
'videos' => 'Відео',
'views' => 'Перегляди',
],
];
52 changes: 52 additions & 0 deletions lang/uk/assets.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

return [
'title' => 'Медіафайли',

'tabs' => [
'my_uploads' => 'Мої завантаження',
'stock_photos' => 'Стокові фото',
'gifs' => 'GIF',
],

'upload' => [
'drag_drop' => 'Перетягніть файли сюди або натисніть, щоб вибрати',
'formats' => 'JPEG, PNG, GIF, WebP, MP4, PDF',
'uploading' => 'Завантаження...',
'failed' => 'Не вдалося завантажити :file. Спробуйте ще раз.',
],

'empty' => [
'title' => 'Медіафайлів ще немає',
'description' => 'Завантажуйте зображення та відео, щоб створити медіатеку.',
],

'save_to_assets' => 'Зберегти в медіафайли',
'saved' => 'Збережено у ваші медіафайли!',
'create_post' => 'Створити пост',
'add_to_post' => 'Додати до поста',
'search_placeholder' => 'Пошук медіа...',

'delete' => [
'title' => 'Видалити медіафайл',
'description' => 'Ви впевнені, що хочете видалити цей медіафайл? Цю дію не можна скасувати.',
'confirm' => 'Видалити',
'cancel' => 'Скасувати',
],

'unsplash' => [
'search_placeholder' => 'Пошук безкоштовних фото...',
'no_results' => 'Фото не знайдено',
'no_results_description' => 'Спробуйте інший пошуковий запит.',
'trending' => 'Популярне на Unsplash',
'start_searching' => 'Шукайте безкоштовні стокові фото з Unsplash',
],

'giphy' => [
'trending' => 'Популярне на Giphy',
'search_placeholder' => 'Пошук GIF...',
'no_results' => 'GIF не знайдено',
'no_results_description' => 'Спробуйте інший пошуковий запит.',
'powered_by' => 'Працює на GIPHY',
],
];
Loading