From eb0ec6fb241a3a1c9f10a780ac58065431a64ab3 Mon Sep 17 00:00:00 2001 From: John Rallis Date: Tue, 30 Jun 2026 14:17:30 +0300 Subject: [PATCH 01/12] Add more content languages --- .../App/Workspace/StoreWorkspaceRequest.php | 2 +- .../App/Workspace/UpdateWorkspaceRequest.php | 2 +- app/Services/Brand/HomepageMetaExtractor.php | 12 ++++++++++ resources/js/components/BrandForm.vue | 24 +++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/Http/Requests/App/Workspace/StoreWorkspaceRequest.php b/app/Http/Requests/App/Workspace/StoreWorkspaceRequest.php index 2a6711a8..59826bab 100644 --- a/app/Http/Requests/App/Workspace/StoreWorkspaceRequest.php +++ b/app/Http/Requests/App/Workspace/StoreWorkspaceRequest.php @@ -32,7 +32,7 @@ public function rules(): array 'text_color' => $hex, 'brand_font' => ['sometimes', 'string', Rule::in(BrandFont::values())], 'image_style' => ['sometimes', 'string', Rule::in(ImageStyle::values())], - 'content_language' => ['nullable', 'string', 'in:en,pt-BR,es'], + 'content_language' => ['nullable', 'string', 'in:en,pt-BR,es,fr,de,it,nl,pl,el,ja,ko,zh,ru,tr,ar'], 'logo_url' => ['nullable', 'url', 'max:1024'], ]; } diff --git a/app/Http/Requests/App/Workspace/UpdateWorkspaceRequest.php b/app/Http/Requests/App/Workspace/UpdateWorkspaceRequest.php index f2b6cc77..476e63ce 100644 --- a/app/Http/Requests/App/Workspace/UpdateWorkspaceRequest.php +++ b/app/Http/Requests/App/Workspace/UpdateWorkspaceRequest.php @@ -32,7 +32,7 @@ public function rules(): array 'text_color' => $hex, 'brand_font' => ['sometimes', 'required', 'string', Rule::in(BrandFont::values())], 'image_style' => ['sometimes', 'required', 'string', Rule::in(ImageStyle::values())], - 'content_language' => ['sometimes', 'string', 'in:en,pt-BR,es'], + 'content_language' => ['sometimes', 'string', 'in:en,pt-BR,es,fr,de,it,nl,pl,el,ja,ko,zh,ru,tr,ar'], ]; } diff --git a/app/Services/Brand/HomepageMetaExtractor.php b/app/Services/Brand/HomepageMetaExtractor.php index 55d52c85..5291330e 100644 --- a/app/Services/Brand/HomepageMetaExtractor.php +++ b/app/Services/Brand/HomepageMetaExtractor.php @@ -297,6 +297,18 @@ private function extractLanguage(Crawler $crawler): ?string str_starts_with($lower, 'pt') => 'pt-BR', str_starts_with($lower, 'es') => 'es', str_starts_with($lower, 'en') => 'en', + str_starts_with($lower, 'fr') => 'fr', + str_starts_with($lower, 'de') => 'de', + str_starts_with($lower, 'it') => 'it', + str_starts_with($lower, 'nl') => 'nl', + str_starts_with($lower, 'pl') => 'pl', + str_starts_with($lower, 'el') => 'el', + str_starts_with($lower, 'ja') => 'ja', + str_starts_with($lower, 'ko') => 'ko', + str_starts_with($lower, 'zh') => 'zh', + str_starts_with($lower, 'ru') => 'ru', + str_starts_with($lower, 'tr') => 'tr', + str_starts_with($lower, 'ar') => 'ar', default => null, }; } diff --git a/resources/js/components/BrandForm.vue b/resources/js/components/BrandForm.vue index 0b82368f..a46a06d9 100644 --- a/resources/js/components/BrandForm.vue +++ b/resources/js/components/BrandForm.vue @@ -100,6 +100,18 @@ const languageLabel = computed(() => { en: 'English', 'pt-BR': 'Português (Brasil)', es: 'Español', + fr: 'Français', + de: 'Deutsch', + it: 'Italiano', + nl: 'Nederlandse', + pl: 'Polski', + el: 'Ελληνικά', + ja: '日本語', + ko: '한국어', + zh: '现代标准汉语', + ru: 'Русский', + tr: 'Türkçe', + ar: 'العربية', }; return map[props.fields.content_language] ?? ''; }); @@ -200,6 +212,18 @@ const runAutofill = async () => { English Português (Brasil) Español + Français + Deutsch + Italiano + Nederlandse + Polski + Ελληνικά + 日本語 + 한국어 + 现代标准汉语 + Русский + Türkçe + العربية

From f7ef13c11676dbb69ae5dca148921032a2971d8f Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 14:12:25 -0300 Subject: [PATCH 02/12] Centralize supported content languages in a ContentLanguage enum MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new content-language options were hand-duplicated across request validation, the UI picker, and homepage detection, while the brand analyzer's structured-output enum and the AI image prompt's language name still only knew about en/pt-BR/es. That left autofill unable to detect the new languages and made image text fall back to English for them. Introduce App\Enums\Workspace\ContentLanguage as the single source of truth and derive every site from it: - Store/UpdateWorkspaceRequest validate against ContentLanguage::values() - BrandAnalyzer's language enum uses ContentLanguage::values() - AiImageClient::languageName() resolves via the enum's englishName() - HomepageMetaExtractor detects through ContentLanguage::fromHtmlLang() - BrandForm consumes availableContentLanguages from the backend, like availableFonts/availableImageStyles, instead of a hardcoded list Also fix two labels: nl "Nederlandse" -> "Nederlands", zh -> "中文". --- app/Ai/Agents/BrandAnalyzer.php | 3 +- app/Enums/Workspace/ContentLanguage.php | 125 ++++++++++++++++++ .../Controllers/App/WorkspaceController.php | 3 + .../App/Workspace/StoreWorkspaceRequest.php | 3 +- .../App/Workspace/UpdateWorkspaceRequest.php | 3 +- app/Services/Ai/AiImageClient.php | 7 +- app/Services/Brand/HomepageMetaExtractor.php | 22 +-- resources/js/components/BrandForm.vue | 42 +----- resources/js/components/settings/BrandTab.vue | 2 + .../js/pages/settings/workspace/Brand.vue | 2 + resources/js/pages/workspaces/Create.vue | 2 + tests/Feature/Ai/AutofillBrandTest.php | 6 +- tests/Feature/WorkspaceControllerTest.php | 24 ++++ .../Enums/Workspace/ContentLanguageTest.php | 47 +++++++ tests/Unit/Services/Ai/AiImageClientTest.php | 11 +- 15 files changed, 236 insertions(+), 66 deletions(-) create mode 100644 app/Enums/Workspace/ContentLanguage.php create mode 100644 tests/Unit/Enums/Workspace/ContentLanguageTest.php diff --git a/app/Ai/Agents/BrandAnalyzer.php b/app/Ai/Agents/BrandAnalyzer.php index 124b1f79..7e34c5a0 100644 --- a/app/Ai/Agents/BrandAnalyzer.php +++ b/app/Ai/Agents/BrandAnalyzer.php @@ -5,6 +5,7 @@ namespace App\Ai\Agents; use App\Enums\Workspace\BrandVoiceTrait; +use App\Enums\Workspace\ContentLanguage; use Illuminate\Contracts\JsonSchema\JsonSchema; use Laravel\Ai\Contracts\Agent; use Laravel\Ai\Contracts\HasStructuredOutput; @@ -47,7 +48,7 @@ public function schema(JsonSchema $schema): array ->description('A concise 2-3 sentence brand description summarizing what the company does, who they serve, and what makes them unique. Written in the detected content language.') ->required(), 'language' => $schema->string() - ->enum(['en', 'pt-BR', 'es']) + ->enum(ContentLanguage::values()) ->description('The primary language of the content.') ->required(), 'brand_color' => $schema->string() diff --git a/app/Enums/Workspace/ContentLanguage.php b/app/Enums/Workspace/ContentLanguage.php new file mode 100644 index 00000000..cffa22ec --- /dev/null +++ b/app/Enums/Workspace/ContentLanguage.php @@ -0,0 +1,125 @@ + 'English', + self::PortugueseBrazil => 'Português (Brasil)', + self::Spanish => 'Español', + self::French => 'Français', + self::German => 'Deutsch', + self::Italian => 'Italiano', + self::Dutch => 'Nederlands', + self::Polish => 'Polski', + self::Greek => 'Ελληνικά', + self::Japanese => '日本語', + self::Korean => '한국어', + self::Chinese => '中文', + self::Russian => 'Русский', + self::Turkish => 'Türkçe', + self::Arabic => 'العربية', + }; + } + + /** + * The English name of the language, injected into AI image prompts so the + * in-image text is rendered in the workspace's content language. + */ + public function englishName(): string + { + return match ($this) { + self::English => 'English', + self::PortugueseBrazil => 'Brazilian Portuguese', + self::Spanish => 'Spanish', + self::French => 'French', + self::German => 'German', + self::Italian => 'Italian', + self::Dutch => 'Dutch', + self::Polish => 'Polish', + self::Greek => 'Greek', + self::Japanese => 'Japanese', + self::Korean => 'Korean', + self::Chinese => 'Chinese', + self::Russian => 'Russian', + self::Turkish => 'Turkish', + self::Arabic => 'Arabic', + }; + } + + /** + * Resolve a raw `` value (e.g. "pt-PT", "en-US") to a supported + * language by matching its two-letter primary subtag, or null if none fits. + */ + public static function fromHtmlLang(string $lang): ?self + { + $prefix = strtolower(substr(trim($lang), 0, 2)); + + if (strlen($prefix) < 2) { + return null; + } + + foreach (self::cases() as $language) { + if (str_starts_with($language->value, $prefix)) { + return $language; + } + } + + return null; + } + + /** + * @return array + */ + public static function values(): array + { + return array_map(fn (self $language) => $language->value, self::cases()); + } + + /** + * @return array + */ + public static function options(): array + { + return array_map( + fn (self $language) => ['value' => $language->value, 'label' => $language->label()], + self::cases(), + ); + } +} diff --git a/app/Http/Controllers/App/WorkspaceController.php b/app/Http/Controllers/App/WorkspaceController.php index ee500be8..e26a22f7 100644 --- a/app/Http/Controllers/App/WorkspaceController.php +++ b/app/Http/Controllers/App/WorkspaceController.php @@ -9,6 +9,7 @@ use App\Actions\Workspace\DeleteWorkspace; use App\Enums\Workspace\BrandFont; use App\Enums\Workspace\BrandVoiceTrait; +use App\Enums\Workspace\ContentLanguage; use App\Enums\Workspace\ImageStyle; use App\Http\Requests\App\Workspace\AutofillBrandRequest; use App\Http\Requests\App\Workspace\StoreWorkspaceRequest; @@ -80,6 +81,7 @@ public function create(Request $request): Response|RedirectResponse 'availableFonts' => BrandFont::values(), 'availableImageStyles' => ImageStyle::values(), 'availableVoiceTraits' => BrandVoiceTrait::grouped(), + 'availableContentLanguages' => ContentLanguage::options(), ]); } @@ -163,6 +165,7 @@ public function brandSettings(Request $request): Response|RedirectResponse 'availableFonts' => BrandFont::values(), 'availableImageStyles' => ImageStyle::values(), 'availableVoiceTraits' => BrandVoiceTrait::grouped(), + 'availableContentLanguages' => ContentLanguage::options(), ]); } diff --git a/app/Http/Requests/App/Workspace/StoreWorkspaceRequest.php b/app/Http/Requests/App/Workspace/StoreWorkspaceRequest.php index 59826bab..4c571596 100644 --- a/app/Http/Requests/App/Workspace/StoreWorkspaceRequest.php +++ b/app/Http/Requests/App/Workspace/StoreWorkspaceRequest.php @@ -6,6 +6,7 @@ use App\Enums\Workspace\BrandFont; use App\Enums\Workspace\BrandVoiceTrait; +use App\Enums\Workspace\ContentLanguage; use App\Enums\Workspace\ImageStyle; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -32,7 +33,7 @@ public function rules(): array 'text_color' => $hex, 'brand_font' => ['sometimes', 'string', Rule::in(BrandFont::values())], 'image_style' => ['sometimes', 'string', Rule::in(ImageStyle::values())], - 'content_language' => ['nullable', 'string', 'in:en,pt-BR,es,fr,de,it,nl,pl,el,ja,ko,zh,ru,tr,ar'], + 'content_language' => ['nullable', 'string', Rule::in(ContentLanguage::values())], 'logo_url' => ['nullable', 'url', 'max:1024'], ]; } diff --git a/app/Http/Requests/App/Workspace/UpdateWorkspaceRequest.php b/app/Http/Requests/App/Workspace/UpdateWorkspaceRequest.php index 476e63ce..4a8f0dba 100644 --- a/app/Http/Requests/App/Workspace/UpdateWorkspaceRequest.php +++ b/app/Http/Requests/App/Workspace/UpdateWorkspaceRequest.php @@ -6,6 +6,7 @@ use App\Enums\Workspace\BrandFont; use App\Enums\Workspace\BrandVoiceTrait; +use App\Enums\Workspace\ContentLanguage; use App\Enums\Workspace\ImageStyle; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -32,7 +33,7 @@ public function rules(): array 'text_color' => $hex, 'brand_font' => ['sometimes', 'required', 'string', Rule::in(BrandFont::values())], 'image_style' => ['sometimes', 'required', 'string', Rule::in(ImageStyle::values())], - 'content_language' => ['sometimes', 'string', 'in:en,pt-BR,es,fr,de,it,nl,pl,el,ja,ko,zh,ru,tr,ar'], + 'content_language' => ['sometimes', 'string', Rule::in(ContentLanguage::values())], ]; } diff --git a/app/Services/Ai/AiImageClient.php b/app/Services/Ai/AiImageClient.php index bd7eb193..fe15e10e 100644 --- a/app/Services/Ai/AiImageClient.php +++ b/app/Services/Ai/AiImageClient.php @@ -4,6 +4,7 @@ namespace App\Services\Ai; +use App\Enums\Workspace\ContentLanguage; use App\Enums\Workspace\ImageStyle; use App\Support\HexColorName; use Illuminate\Support\Facades\Log; @@ -89,11 +90,7 @@ public function generate( private function languageName(string $code): string { - return match ($code) { - 'pt-BR' => 'Brazilian Portuguese', - 'es' => 'Spanish', - default => 'English', - }; + return (ContentLanguage::tryFrom($code) ?? ContentLanguage::DEFAULT)->englishName(); } /** diff --git a/app/Services/Brand/HomepageMetaExtractor.php b/app/Services/Brand/HomepageMetaExtractor.php index 5291330e..8d37b064 100644 --- a/app/Services/Brand/HomepageMetaExtractor.php +++ b/app/Services/Brand/HomepageMetaExtractor.php @@ -4,6 +4,7 @@ namespace App\Services\Brand; +use App\Enums\Workspace\ContentLanguage; use Symfony\Component\DomCrawler\Crawler; use Symfony\Component\DomCrawler\UriResolver; @@ -291,26 +292,7 @@ private function extractLanguage(Crawler $crawler): ?string return null; } - $lower = strtolower($lang); - - return match (true) { - str_starts_with($lower, 'pt') => 'pt-BR', - str_starts_with($lower, 'es') => 'es', - str_starts_with($lower, 'en') => 'en', - str_starts_with($lower, 'fr') => 'fr', - str_starts_with($lower, 'de') => 'de', - str_starts_with($lower, 'it') => 'it', - str_starts_with($lower, 'nl') => 'nl', - str_starts_with($lower, 'pl') => 'pl', - str_starts_with($lower, 'el') => 'el', - str_starts_with($lower, 'ja') => 'ja', - str_starts_with($lower, 'ko') => 'ko', - str_starts_with($lower, 'zh') => 'zh', - str_starts_with($lower, 'ru') => 'ru', - str_starts_with($lower, 'tr') => 'tr', - str_starts_with($lower, 'ar') => 'ar', - default => null, - }; + return ContentLanguage::fromHtmlLang($lang)?->value; } private function extractLogoUrl(Crawler $crawler, string $baseUrl): ?string diff --git a/resources/js/components/BrandForm.vue b/resources/js/components/BrandForm.vue index a46a06d9..11f432a8 100644 --- a/resources/js/components/BrandForm.vue +++ b/resources/js/components/BrandForm.vue @@ -61,6 +61,7 @@ const props = withDefaults( availableFonts: string[]; availableImageStyles: string[]; availableVoiceTraits: Record; + availableContentLanguages: { value: string; label: string }[]; autofill?: boolean; showName?: boolean; }>(), @@ -95,26 +96,9 @@ const toggleTrait = (group: string, value: string): void => { props.fields.brand_voice_traits = [...current.filter((v) => !groupValues.includes(v)), value]; }; -const languageLabel = computed(() => { - const map: Record = { - en: 'English', - 'pt-BR': 'Português (Brasil)', - es: 'Español', - fr: 'Français', - de: 'Deutsch', - it: 'Italiano', - nl: 'Nederlandse', - pl: 'Polski', - el: 'Ελληνικά', - ja: '日本語', - ko: '한국어', - zh: '现代标准汉语', - ru: 'Русский', - tr: 'Türkçe', - ar: 'العربية', - }; - return map[props.fields.content_language] ?? ''; -}); +const languageLabel = computed( + () => props.availableContentLanguages.find((language) => language.value === props.fields.content_language)?.label ?? '', +); const runAutofill = async () => { const url = props.fields.brand_website?.trim() ?? ''; @@ -209,21 +193,9 @@ const runAutofill = async () => { - English - Português (Brasil) - Español - Français - Deutsch - Italiano - Nederlandse - Polski - Ελληνικά - 日本語 - 한국어 - 现代标准汉语 - Русский - Türkçe - العربية + + {{ language.label }} +

diff --git a/resources/js/components/settings/BrandTab.vue b/resources/js/components/settings/BrandTab.vue index dfe2804d..276aa60e 100644 --- a/resources/js/components/settings/BrandTab.vue +++ b/resources/js/components/settings/BrandTab.vue @@ -25,6 +25,7 @@ const props = defineProps<{ availableFonts: string[]; availableImageStyles: string[]; availableVoiceTraits: Record; + availableContentLanguages: { value: string; label: string }[]; }>(); const form = useForm({ @@ -58,6 +59,7 @@ const submit = () => { :available-fonts="availableFonts" :available-image-styles="availableImageStyles" :available-voice-traits="availableVoiceTraits" + :available-content-languages="availableContentLanguages" :autofill="!workspace.brand_website" /> diff --git a/resources/js/pages/settings/workspace/Brand.vue b/resources/js/pages/settings/workspace/Brand.vue index 7a25c423..7e29d74b 100644 --- a/resources/js/pages/settings/workspace/Brand.vue +++ b/resources/js/pages/settings/workspace/Brand.vue @@ -30,6 +30,7 @@ defineProps<{ availableFonts: string[]; availableImageStyles: string[]; availableVoiceTraits: Record; + availableContentLanguages: { value: string; label: string }[]; }>(); const tabs = computed(() => [ @@ -57,6 +58,7 @@ const tabs = computed(() => [ :available-fonts="availableFonts" :available-image-styles="availableImageStyles" :available-voice-traits="availableVoiceTraits" + :available-content-languages="availableContentLanguages" /> diff --git a/resources/js/pages/workspaces/Create.vue b/resources/js/pages/workspaces/Create.vue index 6009a65f..bb96ce62 100644 --- a/resources/js/pages/workspaces/Create.vue +++ b/resources/js/pages/workspaces/Create.vue @@ -10,6 +10,7 @@ defineProps<{ availableFonts: string[]; availableImageStyles: string[]; availableVoiceTraits: Record; + availableContentLanguages: { value: string; label: string }[]; }>(); const form = useForm({ @@ -45,6 +46,7 @@ const submit = () => { :available-fonts="availableFonts" :available-image-styles="availableImageStyles" :available-voice-traits="availableVoiceTraits" + :available-content-languages="availableContentLanguages" :autofill="true" :show-name="true" /> diff --git a/tests/Feature/Ai/AutofillBrandTest.php b/tests/Feature/Ai/AutofillBrandTest.php index 8cea1673..e4be9ded 100644 --- a/tests/Feature/Ai/AutofillBrandTest.php +++ b/tests/Feature/Ai/AutofillBrandTest.php @@ -104,8 +104,10 @@ ['pt-PT', 'pt-BR'], ['en-US', 'en'], ['es-MX', 'es'], - ['fr', null], - ['ja-JP', null], + ['fr', 'fr'], + ['ja-JP', 'ja'], + ['zh-Hans', 'zh'], + ['sv', null], ]); test('rejects non-http schemes', function () { diff --git a/tests/Feature/WorkspaceControllerTest.php b/tests/Feature/WorkspaceControllerTest.php index b1d0a743..3bb04ced 100644 --- a/tests/Feature/WorkspaceControllerTest.php +++ b/tests/Feature/WorkspaceControllerTest.php @@ -4,6 +4,7 @@ use App\Ai\Agents\BrandAnalyzer; use App\Enums\UserWorkspace\Role; +use App\Enums\Workspace\ContentLanguage; use App\Models\Account; use App\Models\AiUsageLog; use App\Models\User; @@ -59,6 +60,8 @@ $response->assertOk(); $response->assertInertia(fn ($page) => $page ->component('workspaces/Create', false) + ->has('availableContentLanguages', count(ContentLanguage::cases())) + ->where('availableContentLanguages.0', ['value' => 'en', 'label' => 'English']) ); }); @@ -187,6 +190,7 @@ $response->assertInertia(fn ($page) => $page ->component('settings/workspace/Brand', false) ->has('workspace') + ->has('availableContentLanguages', count(ContentLanguage::cases())) ); }); @@ -288,6 +292,26 @@ ])->assertSessionHasErrors(['image_style']); }); +test('update workspace settings persists a newly supported content language', function () { + $this->actingAs($this->user) + ->from(route('app.workspace.brand')) + ->put(route('app.workspace.settings.update'), [ + 'name' => $this->workspace->name, + 'content_language' => 'fr', + ])->assertRedirect(route('app.workspace.brand')) + ->assertSessionHasNoErrors(); + + expect($this->workspace->refresh()->content_language)->toBe('fr'); +}); + +test('update workspace settings rejects an unsupported content language', function () { + $this->actingAs($this->user) + ->put(route('app.workspace.settings.update'), [ + 'name' => $this->workspace->name, + 'content_language' => 'sv', + ])->assertSessionHasErrors(['content_language']); +}); + test('update workspace settings validates required fields', function () { $response = $this->actingAs($this->user)->put(route('app.workspace.settings.update'), [ 'name' => '', diff --git a/tests/Unit/Enums/Workspace/ContentLanguageTest.php b/tests/Unit/Enums/Workspace/ContentLanguageTest.php new file mode 100644 index 00000000..525d66d1 --- /dev/null +++ b/tests/Unit/Enums/Workspace/ContentLanguageTest.php @@ -0,0 +1,47 @@ +toBe([ + 'en', 'pt-BR', 'es', 'fr', 'de', 'it', 'nl', + 'pl', 'el', 'ja', 'ko', 'zh', 'ru', 'tr', 'ar', + ]); +}); + +test('default language is English', function () { + expect(ContentLanguage::DEFAULT)->toBe(ContentLanguage::English); + expect(ContentLanguage::DEFAULT->value)->toBe('en'); +}); + +test('options pairs each code with its native label', function () { + $options = ContentLanguage::options(); + + expect($options)->toHaveCount(count(ContentLanguage::cases())); + expect($options[0])->toBe(['value' => 'en', 'label' => 'English']); + expect($options)->toContain(['value' => 'pt-BR', 'label' => 'Português (Brasil)']); + expect($options)->toContain(['value' => 'ja', 'label' => '日本語']); +}); + +test('english name is the language name in English for the AI image prompt', function () { + expect(ContentLanguage::PortugueseBrazil->englishName())->toBe('Brazilian Portuguese'); + expect(ContentLanguage::French->englishName())->toBe('French'); + expect(ContentLanguage::Chinese->englishName())->toBe('Chinese'); +}); + +test('fromHtmlLang resolves the two-letter primary subtag', function (string $lang, ?ContentLanguage $expected) { + expect(ContentLanguage::fromHtmlLang($lang))->toBe($expected); +})->with([ + ['pt', ContentLanguage::PortugueseBrazil], + ['pt-PT', ContentLanguage::PortugueseBrazil], + ['en-US', ContentLanguage::English], + ['es-MX', ContentLanguage::Spanish], + ['fr', ContentLanguage::French], + ['ja-JP', ContentLanguage::Japanese], + ['zh-Hans', ContentLanguage::Chinese], + ['sv', null], + ['e', null], + ['', null], +]); diff --git a/tests/Unit/Services/Ai/AiImageClientTest.php b/tests/Unit/Services/Ai/AiImageClientTest.php index db372faa..5b65f2bd 100644 --- a/tests/Unit/Services/Ai/AiImageClientTest.php +++ b/tests/Unit/Services/Ai/AiImageClientTest.php @@ -81,12 +81,21 @@ Image::assertGenerated(fn (ImagePrompt $prompt) => $prompt->contains('Spanish')); }); -test('generate defaults to English instruction when language is unknown', function () { +test('generate appends French instruction when language is fr', function () { Image::fake(); $client = new AiImageClient; $client->generate(['x'], ImageStyle::Cinematic, language: 'fr'); + Image::assertGenerated(fn (ImagePrompt $prompt) => $prompt->contains('French')); +}); + +test('generate defaults to English instruction when language is unsupported', function () { + Image::fake(); + + $client = new AiImageClient; + $client->generate(['x'], ImageStyle::Cinematic, language: 'sv'); + Image::assertGenerated(fn (ImagePrompt $prompt) => $prompt->contains('English')); }); From 85120ac8f352ed761ce07fec0a050c07e5b0cc34 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 15:38:40 -0300 Subject: [PATCH 03/12] Add UI localization infrastructure and RTL support for 12 new locales Register the 12 additional languages (fr, de, it, nl, pl, el, ja, ko, zh, ru, tr, ar) as available UI locales so the language switcher and the API accept them, keeping the set in lockstep with the ContentLanguage enum. - config/languages.php lists all 15 UI locales with their native names. - ContentLanguage::isRtl() drives the document `dir`; SetLocale shares it to the Blade root and HandleInertiaRequests shares it to Inertia, and app.ts mirrors it on SPA navigations so RTL locales lay out correctly. - dayjs imports the 12 new locales so dates localize instead of falling back to English. - A LocalizationParityTest guards against key drift: every locale must ship every base translation file with exactly the keys of lang/en. --- app/Enums/Workspace/ContentLanguage.php | 27 +++++++++-- .../Middleware/App/HandleInertiaRequests.php | 2 + app/Http/Middleware/App/SetLocale.php | 6 ++- config/languages.php | 12 +++++ resources/js/app.ts | 5 ++ resources/js/dayjs.ts | 17 +++++-- resources/views/app.blade.php | 2 +- tests/Feature/LocalizationParityTest.php | 47 +++++++++++++++++++ 8 files changed, 108 insertions(+), 10 deletions(-) create mode 100644 tests/Feature/LocalizationParityTest.php diff --git a/app/Enums/Workspace/ContentLanguage.php b/app/Enums/Workspace/ContentLanguage.php index cffa22ec..a41fab09 100644 --- a/app/Enums/Workspace/ContentLanguage.php +++ b/app/Enums/Workspace/ContentLanguage.php @@ -84,19 +84,28 @@ public function englishName(): string } /** - * Resolve a raw `` value (e.g. "pt-PT", "en-US") to a supported - * language by matching its two-letter primary subtag, or null if none fits. + * Whether the language is written right-to-left, which drives the `dir` + * attribute on the document root so the whole UI mirrors for the locale. + */ + public function isRtl(): bool + { + return $this === self::Arabic; + } + + /** + * Resolve a raw `` value (e.g. "pt-PT", "zh-Hans") to a supported + * language by matching its primary subtag, or null if none is supported. */ public static function fromHtmlLang(string $lang): ?self { - $prefix = strtolower(substr(trim($lang), 0, 2)); + $subtag = self::primarySubtag($lang); - if (strlen($prefix) < 2) { + if (strlen($subtag) < 2) { return null; } foreach (self::cases() as $language) { - if (str_starts_with($language->value, $prefix)) { + if (self::primarySubtag($language->value) === $subtag) { return $language; } } @@ -104,6 +113,14 @@ public static function fromHtmlLang(string $lang): ?self return null; } + /** + * The lowercased primary subtag of a BCP 47 language tag ("pt-BR" => "pt"). + */ + private static function primarySubtag(string $tag): string + { + return strtolower(explode('-', trim($tag), 2)[0]); + } + /** * @return array */ diff --git a/app/Http/Middleware/App/HandleInertiaRequests.php b/app/Http/Middleware/App/HandleInertiaRequests.php index 5e51d6d8..b5605acb 100644 --- a/app/Http/Middleware/App/HandleInertiaRequests.php +++ b/app/Http/Middleware/App/HandleInertiaRequests.php @@ -4,6 +4,7 @@ namespace App\Http\Middleware\App; +use App\Enums\Workspace\ContentLanguage; use App\Http\Resources\App\HandleInertiaRequests\AuthAccountResource; use App\Http\Resources\App\HandleInertiaRequests\AuthPlanResource; use App\Http\Resources\App\HandleInertiaRequests\AuthUserResource; @@ -52,6 +53,7 @@ public function share(Request $request): array 'applicationUrl' => config('app.url'), 'env' => config('app.env'), 'locale' => app()->getLocale(), + 'dir' => ContentLanguage::tryFrom(app()->getLocale())?->isRtl() ? 'rtl' : 'ltr', 'languages' => collect(config('languages.available'))->map(fn ($name, $code) => [ 'code' => $code, 'name' => $name, diff --git a/app/Http/Middleware/App/SetLocale.php b/app/Http/Middleware/App/SetLocale.php index fecf0fe0..49a30cde 100644 --- a/app/Http/Middleware/App/SetLocale.php +++ b/app/Http/Middleware/App/SetLocale.php @@ -4,9 +4,11 @@ namespace App\Http\Middleware\App; +use App\Enums\Workspace\ContentLanguage; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\View; use Symfony\Component\HttpFoundation\Response; class SetLocale @@ -19,8 +21,10 @@ public function handle(Request $request, Closure $next): Response $available = config('languages.available'); $locale = $request->cookie('locale'); $isValid = $locale && array_key_exists($locale, $available); + $activeLocale = $isValid ? $locale : config('languages.default'); - App::setLocale($isValid ? $locale : config('languages.default')); + App::setLocale($activeLocale); + View::share('htmlDir', ContentLanguage::tryFrom($activeLocale)?->isRtl() ? 'rtl' : 'ltr'); $response = $next($request); diff --git a/config/languages.php b/config/languages.php index 16fb788a..37de477b 100644 --- a/config/languages.php +++ b/config/languages.php @@ -19,6 +19,18 @@ 'en' => 'English', 'es' => 'Español', 'pt-BR' => 'Português', + 'fr' => 'Français', + 'de' => 'Deutsch', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + 'pl' => 'Polski', + 'el' => 'Ελληνικά', + 'ja' => '日本語', + 'ko' => '한국어', + 'zh' => '中文', + 'ru' => 'Русский', + 'tr' => 'Türkçe', + 'ar' => 'العربية', ], /* diff --git a/resources/js/app.ts b/resources/js/app.ts index de757e69..403250a7 100644 --- a/resources/js/app.ts +++ b/resources/js/app.ts @@ -28,6 +28,11 @@ createInertiaApp({ // Set dayjs locale based on user's language dayjs.locale(locale.toLowerCase()); + // Mirror the layout for right-to-left locales on SPA navigations, where + // the server-rendered from the initial load does not re-run. + const dir = (props.initialPage.props as { dir?: string })?.dir || 'ltr'; + document.documentElement.dir = dir; + const auth = props.initialPage.props.auth as Auth | undefined; const flash = props.initialPage.props.flash as | { conversion_event?: string; [key: string]: unknown } diff --git a/resources/js/dayjs.ts b/resources/js/dayjs.ts index a6c505f3..1f4b1e8e 100644 --- a/resources/js/dayjs.ts +++ b/resources/js/dayjs.ts @@ -15,6 +15,18 @@ import weekday from 'dayjs/plugin/weekday'; import 'dayjs/locale/en'; import 'dayjs/locale/es'; import 'dayjs/locale/pt-br'; +import 'dayjs/locale/fr'; +import 'dayjs/locale/de'; +import 'dayjs/locale/it'; +import 'dayjs/locale/nl'; +import 'dayjs/locale/pl'; +import 'dayjs/locale/el'; +import 'dayjs/locale/ja'; +import 'dayjs/locale/ko'; +import 'dayjs/locale/zh'; +import 'dayjs/locale/ru'; +import 'dayjs/locale/tr'; +import 'dayjs/locale/ar'; // Extend dayjs with plugins dayjs.extend(utc); @@ -30,8 +42,7 @@ dayjs.extend(weekday); dayjs.extend(isBetween); // Set Monday as first day of week (to match Carbon/Laravel) -dayjs.updateLocale('en', { weekStart: 1 }); -dayjs.updateLocale('es', { weekStart: 1 }); -dayjs.updateLocale('pt-br', { weekStart: 1 }); +const weekStartMonday = ['en', 'es', 'pt-br', 'fr', 'de', 'it', 'nl', 'pl', 'el', 'ja', 'ko', 'zh', 'ru', 'tr', 'ar']; +weekStartMonday.forEach((locale) => dayjs.updateLocale(locale, { weekStart: 1 })); export default dayjs; diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php index 578ed7c3..6192de7f 100644 --- a/resources/views/app.blade.php +++ b/resources/views/app.blade.php @@ -1,5 +1,5 @@ - + diff --git a/tests/Feature/LocalizationParityTest.php b/tests/Feature/LocalizationParityTest.php new file mode 100644 index 00000000..a6701f50 --- /dev/null +++ b/tests/Feature/LocalizationParityTest.php @@ -0,0 +1,47 @@ +toEqualCanonicalizing(ContentLanguage::values()); +}); + +test('the default UI language is a supported content language', function () { + expect(config('languages.default'))->toBeIn(ContentLanguage::values()); +}); + +test('locale ships every base translation file with identical keys', function (string $locale) { + $missingFiles = []; + $keyDrift = []; + + foreach (glob(lang_path('en/*.php')) as $basePath) { + $file = basename($basePath, '.php'); + $localePath = lang_path("{$locale}/{$file}.php"); + + if (! file_exists($localePath)) { + $missingFiles[] = "{$file}.php"; + + continue; + } + + $baseKeys = array_keys(Arr::dot(require $basePath)); + $localeKeys = array_keys(Arr::dot(require $localePath)); + + $missing = array_diff($baseKeys, $localeKeys); + $extra = array_diff($localeKeys, $baseKeys); + + if ($missing !== [] || $extra !== []) { + $keyDrift[$file] = [ + 'missing' => array_values($missing), + 'extra' => array_values($extra), + ]; + } + } + + expect($missingFiles)->toBe([], "{$locale} is missing translation files: ".implode(', ', $missingFiles)); + expect($keyDrift)->toBe([], "{$locale} has key drift: ".json_encode($keyDrift, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); +})->with(ContentLanguage::values()); From 67977069211cef0bc328a1b2eb8a516341f9f0f0 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 15:38:40 -0300 Subject: [PATCH 04/12] Translate the interface into 12 languages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add full lang/ translations for fr, de, it, nl, pl, el, ja, ko, zh, ru, tr, and ar — all 23 base files each, with identical key trees to lang/en, preserved :placeholders and plural forms, and native product terminology. --- lang/ar/accounts.php | 148 +++++++++ lang/ar/analytics.php | 55 ++++ lang/ar/assets.php | 52 +++ lang/ar/auth.php | 141 ++++++++ lang/ar/automations.php | 411 +++++++++++++++++++++++ lang/ar/billing.php | 76 +++++ lang/ar/brands.php | 39 +++ lang/ar/calendar.php | 12 + lang/ar/comments.php | 18 + lang/ar/common.php | 59 ++++ lang/ar/labels.php | 54 +++ lang/ar/mail.php | 22 ++ lang/ar/notifications.php | 18 + lang/ar/onboarding.php | 41 +++ lang/ar/pagination.php | 19 ++ lang/ar/passwords.php | 22 ++ lang/ar/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/ar/settings.php | 356 ++++++++++++++++++++ lang/ar/sidebar.php | 61 ++++ lang/ar/signatures.php | 59 ++++ lang/ar/usage.php | 15 + lang/ar/validation.php | 200 +++++++++++ lang/ar/workspaces.php | 50 +++ lang/de/accounts.php | 150 +++++++++ lang/de/analytics.php | 57 ++++ lang/de/assets.php | 54 +++ lang/de/auth.php | 143 ++++++++ lang/de/automations.php | 411 +++++++++++++++++++++++ lang/de/billing.php | 78 +++++ lang/de/brands.php | 41 +++ lang/de/calendar.php | 14 + lang/de/comments.php | 20 ++ lang/de/common.php | 59 ++++ lang/de/labels.php | 56 ++++ lang/de/mail.php | 24 ++ lang/de/notifications.php | 18 + lang/de/onboarding.php | 41 +++ lang/de/pagination.php | 21 ++ lang/de/passwords.php | 24 ++ lang/de/posts.php | 673 ++++++++++++++++++++++++++++++++++++++ lang/de/settings.php | 358 ++++++++++++++++++++ lang/de/sidebar.php | 61 ++++ lang/de/signatures.php | 61 ++++ lang/de/usage.php | 17 + lang/de/validation.php | 202 ++++++++++++ lang/de/workspaces.php | 50 +++ lang/el/accounts.php | 148 +++++++++ lang/el/analytics.php | 55 ++++ lang/el/assets.php | 52 +++ lang/el/auth.php | 141 ++++++++ lang/el/automations.php | 411 +++++++++++++++++++++++ lang/el/billing.php | 76 +++++ lang/el/brands.php | 39 +++ lang/el/calendar.php | 12 + lang/el/comments.php | 18 + lang/el/common.php | 59 ++++ lang/el/labels.php | 54 +++ lang/el/mail.php | 22 ++ lang/el/notifications.php | 18 + lang/el/onboarding.php | 41 +++ lang/el/pagination.php | 19 ++ lang/el/passwords.php | 22 ++ lang/el/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/el/settings.php | 356 ++++++++++++++++++++ lang/el/sidebar.php | 61 ++++ lang/el/signatures.php | 59 ++++ lang/el/usage.php | 15 + lang/el/validation.php | 200 +++++++++++ lang/el/workspaces.php | 50 +++ lang/fr/accounts.php | 148 +++++++++ lang/fr/analytics.php | 55 ++++ lang/fr/assets.php | 52 +++ lang/fr/auth.php | 141 ++++++++ lang/fr/automations.php | 411 +++++++++++++++++++++++ lang/fr/billing.php | 76 +++++ lang/fr/brands.php | 39 +++ lang/fr/calendar.php | 12 + lang/fr/comments.php | 18 + lang/fr/common.php | 59 ++++ lang/fr/labels.php | 54 +++ lang/fr/mail.php | 22 ++ lang/fr/notifications.php | 18 + lang/fr/onboarding.php | 41 +++ lang/fr/pagination.php | 19 ++ lang/fr/passwords.php | 22 ++ lang/fr/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/fr/settings.php | 356 ++++++++++++++++++++ lang/fr/sidebar.php | 61 ++++ lang/fr/signatures.php | 59 ++++ lang/fr/usage.php | 15 + lang/fr/validation.php | 200 +++++++++++ lang/fr/workspaces.php | 50 +++ lang/it/accounts.php | 148 +++++++++ lang/it/analytics.php | 55 ++++ lang/it/assets.php | 52 +++ lang/it/auth.php | 141 ++++++++ lang/it/automations.php | 411 +++++++++++++++++++++++ lang/it/billing.php | 76 +++++ lang/it/brands.php | 39 +++ lang/it/calendar.php | 12 + lang/it/comments.php | 18 + lang/it/common.php | 59 ++++ lang/it/labels.php | 54 +++ lang/it/mail.php | 22 ++ lang/it/notifications.php | 18 + lang/it/onboarding.php | 41 +++ lang/it/pagination.php | 19 ++ lang/it/passwords.php | 22 ++ lang/it/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/it/settings.php | 356 ++++++++++++++++++++ lang/it/sidebar.php | 61 ++++ lang/it/signatures.php | 59 ++++ lang/it/usage.php | 15 + lang/it/validation.php | 200 +++++++++++ lang/it/workspaces.php | 50 +++ lang/ja/accounts.php | 148 +++++++++ lang/ja/analytics.php | 55 ++++ lang/ja/assets.php | 52 +++ lang/ja/auth.php | 141 ++++++++ lang/ja/automations.php | 411 +++++++++++++++++++++++ lang/ja/billing.php | 76 +++++ lang/ja/brands.php | 39 +++ lang/ja/calendar.php | 12 + lang/ja/comments.php | 18 + lang/ja/common.php | 59 ++++ lang/ja/labels.php | 54 +++ lang/ja/mail.php | 22 ++ lang/ja/notifications.php | 18 + lang/ja/onboarding.php | 41 +++ lang/ja/pagination.php | 19 ++ lang/ja/passwords.php | 22 ++ lang/ja/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/ja/settings.php | 356 ++++++++++++++++++++ lang/ja/sidebar.php | 61 ++++ lang/ja/signatures.php | 59 ++++ lang/ja/usage.php | 15 + lang/ja/validation.php | 200 +++++++++++ lang/ja/workspaces.php | 50 +++ lang/ko/accounts.php | 148 +++++++++ lang/ko/analytics.php | 55 ++++ lang/ko/assets.php | 52 +++ lang/ko/auth.php | 141 ++++++++ lang/ko/automations.php | 411 +++++++++++++++++++++++ lang/ko/billing.php | 76 +++++ lang/ko/brands.php | 39 +++ lang/ko/calendar.php | 12 + lang/ko/comments.php | 18 + lang/ko/common.php | 59 ++++ lang/ko/labels.php | 54 +++ lang/ko/mail.php | 22 ++ lang/ko/notifications.php | 18 + lang/ko/onboarding.php | 41 +++ lang/ko/pagination.php | 19 ++ lang/ko/passwords.php | 22 ++ lang/ko/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/ko/settings.php | 356 ++++++++++++++++++++ lang/ko/sidebar.php | 61 ++++ lang/ko/signatures.php | 59 ++++ lang/ko/usage.php | 15 + lang/ko/validation.php | 200 +++++++++++ lang/ko/workspaces.php | 50 +++ lang/nl/accounts.php | 148 +++++++++ lang/nl/analytics.php | 55 ++++ lang/nl/assets.php | 52 +++ lang/nl/auth.php | 141 ++++++++ lang/nl/automations.php | 411 +++++++++++++++++++++++ lang/nl/billing.php | 76 +++++ lang/nl/brands.php | 39 +++ lang/nl/calendar.php | 12 + lang/nl/comments.php | 18 + lang/nl/common.php | 59 ++++ lang/nl/labels.php | 54 +++ lang/nl/mail.php | 22 ++ lang/nl/notifications.php | 18 + lang/nl/onboarding.php | 41 +++ lang/nl/pagination.php | 19 ++ lang/nl/passwords.php | 22 ++ lang/nl/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/nl/settings.php | 356 ++++++++++++++++++++ lang/nl/sidebar.php | 61 ++++ lang/nl/signatures.php | 59 ++++ lang/nl/usage.php | 15 + lang/nl/validation.php | 200 +++++++++++ lang/nl/workspaces.php | 50 +++ lang/pl/accounts.php | 148 +++++++++ lang/pl/analytics.php | 55 ++++ lang/pl/assets.php | 52 +++ lang/pl/auth.php | 141 ++++++++ lang/pl/automations.php | 411 +++++++++++++++++++++++ lang/pl/billing.php | 76 +++++ lang/pl/brands.php | 39 +++ lang/pl/calendar.php | 12 + lang/pl/comments.php | 18 + lang/pl/common.php | 59 ++++ lang/pl/labels.php | 54 +++ lang/pl/mail.php | 22 ++ lang/pl/notifications.php | 18 + lang/pl/onboarding.php | 41 +++ lang/pl/pagination.php | 19 ++ lang/pl/passwords.php | 22 ++ lang/pl/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/pl/settings.php | 356 ++++++++++++++++++++ lang/pl/sidebar.php | 61 ++++ lang/pl/signatures.php | 59 ++++ lang/pl/usage.php | 15 + lang/pl/validation.php | 200 +++++++++++ lang/pl/workspaces.php | 50 +++ lang/ru/accounts.php | 148 +++++++++ lang/ru/analytics.php | 55 ++++ lang/ru/assets.php | 52 +++ lang/ru/auth.php | 141 ++++++++ lang/ru/automations.php | 411 +++++++++++++++++++++++ lang/ru/billing.php | 76 +++++ lang/ru/brands.php | 39 +++ lang/ru/calendar.php | 12 + lang/ru/comments.php | 18 + lang/ru/common.php | 59 ++++ lang/ru/labels.php | 54 +++ lang/ru/mail.php | 22 ++ lang/ru/notifications.php | 18 + lang/ru/onboarding.php | 41 +++ lang/ru/pagination.php | 19 ++ lang/ru/passwords.php | 22 ++ lang/ru/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/ru/settings.php | 356 ++++++++++++++++++++ lang/ru/sidebar.php | 61 ++++ lang/ru/signatures.php | 59 ++++ lang/ru/usage.php | 15 + lang/ru/validation.php | 200 +++++++++++ lang/ru/workspaces.php | 50 +++ lang/tr/accounts.php | 150 +++++++++ lang/tr/analytics.php | 57 ++++ lang/tr/assets.php | 54 +++ lang/tr/auth.php | 143 ++++++++ lang/tr/automations.php | 411 +++++++++++++++++++++++ lang/tr/billing.php | 78 +++++ lang/tr/brands.php | 41 +++ lang/tr/calendar.php | 14 + lang/tr/comments.php | 20 ++ lang/tr/common.php | 59 ++++ lang/tr/labels.php | 56 ++++ lang/tr/mail.php | 24 ++ lang/tr/notifications.php | 18 + lang/tr/onboarding.php | 41 +++ lang/tr/pagination.php | 21 ++ lang/tr/passwords.php | 24 ++ lang/tr/posts.php | 673 ++++++++++++++++++++++++++++++++++++++ lang/tr/settings.php | 358 ++++++++++++++++++++ lang/tr/sidebar.php | 61 ++++ lang/tr/signatures.php | 61 ++++ lang/tr/usage.php | 17 + lang/tr/validation.php | 202 ++++++++++++ lang/tr/workspaces.php | 50 +++ lang/zh/accounts.php | 148 +++++++++ lang/zh/analytics.php | 55 ++++ lang/zh/assets.php | 52 +++ lang/zh/auth.php | 141 ++++++++ lang/zh/automations.php | 411 +++++++++++++++++++++++ lang/zh/billing.php | 76 +++++ lang/zh/brands.php | 39 +++ lang/zh/calendar.php | 12 + lang/zh/comments.php | 18 + lang/zh/common.php | 59 ++++ lang/zh/labels.php | 54 +++ lang/zh/mail.php | 22 ++ lang/zh/notifications.php | 18 + lang/zh/onboarding.php | 41 +++ lang/zh/pagination.php | 19 ++ lang/zh/passwords.php | 22 ++ lang/zh/posts.php | 671 +++++++++++++++++++++++++++++++++++++ lang/zh/settings.php | 356 ++++++++++++++++++++ lang/zh/sidebar.php | 61 ++++ lang/zh/signatures.php | 59 ++++ lang/zh/usage.php | 15 + lang/zh/validation.php | 200 +++++++++++ lang/zh/workspaces.php | 50 +++ 276 files changed, 31256 insertions(+) create mode 100644 lang/ar/accounts.php create mode 100644 lang/ar/analytics.php create mode 100644 lang/ar/assets.php create mode 100644 lang/ar/auth.php create mode 100644 lang/ar/automations.php create mode 100644 lang/ar/billing.php create mode 100644 lang/ar/brands.php create mode 100644 lang/ar/calendar.php create mode 100644 lang/ar/comments.php create mode 100644 lang/ar/common.php create mode 100644 lang/ar/labels.php create mode 100644 lang/ar/mail.php create mode 100644 lang/ar/notifications.php create mode 100644 lang/ar/onboarding.php create mode 100644 lang/ar/pagination.php create mode 100644 lang/ar/passwords.php create mode 100644 lang/ar/posts.php create mode 100644 lang/ar/settings.php create mode 100644 lang/ar/sidebar.php create mode 100644 lang/ar/signatures.php create mode 100644 lang/ar/usage.php create mode 100644 lang/ar/validation.php create mode 100644 lang/ar/workspaces.php create mode 100644 lang/de/accounts.php create mode 100644 lang/de/analytics.php create mode 100644 lang/de/assets.php create mode 100644 lang/de/auth.php create mode 100644 lang/de/automations.php create mode 100644 lang/de/billing.php create mode 100644 lang/de/brands.php create mode 100644 lang/de/calendar.php create mode 100644 lang/de/comments.php create mode 100644 lang/de/common.php create mode 100644 lang/de/labels.php create mode 100644 lang/de/mail.php create mode 100644 lang/de/notifications.php create mode 100644 lang/de/onboarding.php create mode 100644 lang/de/pagination.php create mode 100644 lang/de/passwords.php create mode 100644 lang/de/posts.php create mode 100644 lang/de/settings.php create mode 100644 lang/de/sidebar.php create mode 100644 lang/de/signatures.php create mode 100644 lang/de/usage.php create mode 100644 lang/de/validation.php create mode 100644 lang/de/workspaces.php create mode 100644 lang/el/accounts.php create mode 100644 lang/el/analytics.php create mode 100644 lang/el/assets.php create mode 100644 lang/el/auth.php create mode 100644 lang/el/automations.php create mode 100644 lang/el/billing.php create mode 100644 lang/el/brands.php create mode 100644 lang/el/calendar.php create mode 100644 lang/el/comments.php create mode 100644 lang/el/common.php create mode 100644 lang/el/labels.php create mode 100644 lang/el/mail.php create mode 100644 lang/el/notifications.php create mode 100644 lang/el/onboarding.php create mode 100644 lang/el/pagination.php create mode 100644 lang/el/passwords.php create mode 100644 lang/el/posts.php create mode 100644 lang/el/settings.php create mode 100644 lang/el/sidebar.php create mode 100644 lang/el/signatures.php create mode 100644 lang/el/usage.php create mode 100644 lang/el/validation.php create mode 100644 lang/el/workspaces.php create mode 100644 lang/fr/accounts.php create mode 100644 lang/fr/analytics.php create mode 100644 lang/fr/assets.php create mode 100644 lang/fr/auth.php create mode 100644 lang/fr/automations.php create mode 100644 lang/fr/billing.php create mode 100644 lang/fr/brands.php create mode 100644 lang/fr/calendar.php create mode 100644 lang/fr/comments.php create mode 100644 lang/fr/common.php create mode 100644 lang/fr/labels.php create mode 100644 lang/fr/mail.php create mode 100644 lang/fr/notifications.php create mode 100644 lang/fr/onboarding.php create mode 100644 lang/fr/pagination.php create mode 100644 lang/fr/passwords.php create mode 100644 lang/fr/posts.php create mode 100644 lang/fr/settings.php create mode 100644 lang/fr/sidebar.php create mode 100644 lang/fr/signatures.php create mode 100644 lang/fr/usage.php create mode 100644 lang/fr/validation.php create mode 100644 lang/fr/workspaces.php create mode 100644 lang/it/accounts.php create mode 100644 lang/it/analytics.php create mode 100644 lang/it/assets.php create mode 100644 lang/it/auth.php create mode 100644 lang/it/automations.php create mode 100644 lang/it/billing.php create mode 100644 lang/it/brands.php create mode 100644 lang/it/calendar.php create mode 100644 lang/it/comments.php create mode 100644 lang/it/common.php create mode 100644 lang/it/labels.php create mode 100644 lang/it/mail.php create mode 100644 lang/it/notifications.php create mode 100644 lang/it/onboarding.php create mode 100644 lang/it/pagination.php create mode 100644 lang/it/passwords.php create mode 100644 lang/it/posts.php create mode 100644 lang/it/settings.php create mode 100644 lang/it/sidebar.php create mode 100644 lang/it/signatures.php create mode 100644 lang/it/usage.php create mode 100644 lang/it/validation.php create mode 100644 lang/it/workspaces.php create mode 100644 lang/ja/accounts.php create mode 100644 lang/ja/analytics.php create mode 100644 lang/ja/assets.php create mode 100644 lang/ja/auth.php create mode 100644 lang/ja/automations.php create mode 100644 lang/ja/billing.php create mode 100644 lang/ja/brands.php create mode 100644 lang/ja/calendar.php create mode 100644 lang/ja/comments.php create mode 100644 lang/ja/common.php create mode 100644 lang/ja/labels.php create mode 100644 lang/ja/mail.php create mode 100644 lang/ja/notifications.php create mode 100644 lang/ja/onboarding.php create mode 100644 lang/ja/pagination.php create mode 100644 lang/ja/passwords.php create mode 100644 lang/ja/posts.php create mode 100644 lang/ja/settings.php create mode 100644 lang/ja/sidebar.php create mode 100644 lang/ja/signatures.php create mode 100644 lang/ja/usage.php create mode 100644 lang/ja/validation.php create mode 100644 lang/ja/workspaces.php create mode 100644 lang/ko/accounts.php create mode 100644 lang/ko/analytics.php create mode 100644 lang/ko/assets.php create mode 100644 lang/ko/auth.php create mode 100644 lang/ko/automations.php create mode 100644 lang/ko/billing.php create mode 100644 lang/ko/brands.php create mode 100644 lang/ko/calendar.php create mode 100644 lang/ko/comments.php create mode 100644 lang/ko/common.php create mode 100644 lang/ko/labels.php create mode 100644 lang/ko/mail.php create mode 100644 lang/ko/notifications.php create mode 100644 lang/ko/onboarding.php create mode 100644 lang/ko/pagination.php create mode 100644 lang/ko/passwords.php create mode 100644 lang/ko/posts.php create mode 100644 lang/ko/settings.php create mode 100644 lang/ko/sidebar.php create mode 100644 lang/ko/signatures.php create mode 100644 lang/ko/usage.php create mode 100644 lang/ko/validation.php create mode 100644 lang/ko/workspaces.php create mode 100644 lang/nl/accounts.php create mode 100644 lang/nl/analytics.php create mode 100644 lang/nl/assets.php create mode 100644 lang/nl/auth.php create mode 100644 lang/nl/automations.php create mode 100644 lang/nl/billing.php create mode 100644 lang/nl/brands.php create mode 100644 lang/nl/calendar.php create mode 100644 lang/nl/comments.php create mode 100644 lang/nl/common.php create mode 100644 lang/nl/labels.php create mode 100644 lang/nl/mail.php create mode 100644 lang/nl/notifications.php create mode 100644 lang/nl/onboarding.php create mode 100644 lang/nl/pagination.php create mode 100644 lang/nl/passwords.php create mode 100644 lang/nl/posts.php create mode 100644 lang/nl/settings.php create mode 100644 lang/nl/sidebar.php create mode 100644 lang/nl/signatures.php create mode 100644 lang/nl/usage.php create mode 100644 lang/nl/validation.php create mode 100644 lang/nl/workspaces.php create mode 100644 lang/pl/accounts.php create mode 100644 lang/pl/analytics.php create mode 100644 lang/pl/assets.php create mode 100644 lang/pl/auth.php create mode 100644 lang/pl/automations.php create mode 100644 lang/pl/billing.php create mode 100644 lang/pl/brands.php create mode 100644 lang/pl/calendar.php create mode 100644 lang/pl/comments.php create mode 100644 lang/pl/common.php create mode 100644 lang/pl/labels.php create mode 100644 lang/pl/mail.php create mode 100644 lang/pl/notifications.php create mode 100644 lang/pl/onboarding.php create mode 100644 lang/pl/pagination.php create mode 100644 lang/pl/passwords.php create mode 100644 lang/pl/posts.php create mode 100644 lang/pl/settings.php create mode 100644 lang/pl/sidebar.php create mode 100644 lang/pl/signatures.php create mode 100644 lang/pl/usage.php create mode 100644 lang/pl/validation.php create mode 100644 lang/pl/workspaces.php create mode 100644 lang/ru/accounts.php create mode 100644 lang/ru/analytics.php create mode 100644 lang/ru/assets.php create mode 100644 lang/ru/auth.php create mode 100644 lang/ru/automations.php create mode 100644 lang/ru/billing.php create mode 100644 lang/ru/brands.php create mode 100644 lang/ru/calendar.php create mode 100644 lang/ru/comments.php create mode 100644 lang/ru/common.php create mode 100644 lang/ru/labels.php create mode 100644 lang/ru/mail.php create mode 100644 lang/ru/notifications.php create mode 100644 lang/ru/onboarding.php create mode 100644 lang/ru/pagination.php create mode 100644 lang/ru/passwords.php create mode 100644 lang/ru/posts.php create mode 100644 lang/ru/settings.php create mode 100644 lang/ru/sidebar.php create mode 100644 lang/ru/signatures.php create mode 100644 lang/ru/usage.php create mode 100644 lang/ru/validation.php create mode 100644 lang/ru/workspaces.php create mode 100644 lang/tr/accounts.php create mode 100644 lang/tr/analytics.php create mode 100644 lang/tr/assets.php create mode 100644 lang/tr/auth.php create mode 100644 lang/tr/automations.php create mode 100644 lang/tr/billing.php create mode 100644 lang/tr/brands.php create mode 100644 lang/tr/calendar.php create mode 100644 lang/tr/comments.php create mode 100644 lang/tr/common.php create mode 100644 lang/tr/labels.php create mode 100644 lang/tr/mail.php create mode 100644 lang/tr/notifications.php create mode 100644 lang/tr/onboarding.php create mode 100644 lang/tr/pagination.php create mode 100644 lang/tr/passwords.php create mode 100644 lang/tr/posts.php create mode 100644 lang/tr/settings.php create mode 100644 lang/tr/sidebar.php create mode 100644 lang/tr/signatures.php create mode 100644 lang/tr/usage.php create mode 100644 lang/tr/validation.php create mode 100644 lang/tr/workspaces.php create mode 100644 lang/zh/accounts.php create mode 100644 lang/zh/analytics.php create mode 100644 lang/zh/assets.php create mode 100644 lang/zh/auth.php create mode 100644 lang/zh/automations.php create mode 100644 lang/zh/billing.php create mode 100644 lang/zh/brands.php create mode 100644 lang/zh/calendar.php create mode 100644 lang/zh/comments.php create mode 100644 lang/zh/common.php create mode 100644 lang/zh/labels.php create mode 100644 lang/zh/mail.php create mode 100644 lang/zh/notifications.php create mode 100644 lang/zh/onboarding.php create mode 100644 lang/zh/pagination.php create mode 100644 lang/zh/passwords.php create mode 100644 lang/zh/posts.php create mode 100644 lang/zh/settings.php create mode 100644 lang/zh/sidebar.php create mode 100644 lang/zh/signatures.php create mode 100644 lang/zh/usage.php create mode 100644 lang/zh/validation.php create mode 100644 lang/zh/workspaces.php diff --git a/lang/ar/accounts.php b/lang/ar/accounts.php new file mode 100644 index 00000000..572def19 --- /dev/null +++ b/lang/ar/accounts.php @@ -0,0 +1,148 @@ + 'الاتصالات', + '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_placeholder' => 'yourhandle.bsky.social', + 'app_password' => 'كلمة مرور التطبيق', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'استخدم كلمة مرور التطبيق لمزيد من الأمان. أنشئ واحدة من bsky.app/settings.', + 'submit' => 'ربط Bluesky', + 'submitting' => 'جارٍ الاتصال...', + ], + + 'mastodon' => [ + 'title' => 'ربط Mastodon', + 'description' => 'أدخل خادم Mastodon الخاص بك', + 'instance_url' => 'رابط الخادم', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'أدخل رابط خادم 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.', + ], +]; diff --git a/lang/ar/analytics.php b/lang/ar/analytics.php new file mode 100644 index 00000000..025526c5 --- /dev/null +++ b/lang/ar/analytics.php @@ -0,0 +1,55 @@ + 'لا توجد حسابات متصلة تحتوي على تحليلات.', + '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' => 'معدل النقر على الدبوس', + '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' => 'المشاهدات', + ], +]; diff --git a/lang/ar/assets.php b/lang/ar/assets.php new file mode 100644 index 00000000..fe4108d9 --- /dev/null +++ b/lang/ar/assets.php @@ -0,0 +1,52 @@ + 'الوسائط', + + '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', + ], +]; diff --git a/lang/ar/auth.php b/lang/ar/auth.php new file mode 100644 index 00000000..d2a32de5 --- /dev/null +++ b/lang/ar/auth.php @@ -0,0 +1,141 @@ + 'بيانات الاعتماد هذه لا تطابق سجلاتنا.', + 'password' => 'كلمة المرور المُدخلة غير صحيحة.', + 'throttle' => 'عدد كبير جدًا من محاولات تسجيل الدخول. يرجى المحاولة مرة أخرى بعد :seconds ثانية.', + + 'flash' => [ + 'welcome' => 'مرحبًا بك في TryPost!', + 'welcome_trial' => 'مرحبًا بك في TryPost! لقد بدأت فترتك التجريبية.', + ], + + 'legal' => 'بمتابعتك، فإنك توافق على شروط الخدمة وسياسة الخصوصية.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'تقويم مرئي', + 'description' => 'خطّط لمحتواك وجدوِله باستخدام تقويم بديهي يعتمد على السحب والإفلات عبر جميع حساباتك الاجتماعية.', + ], + 'scheduling' => [ + 'title' => 'جدولة ذكية', + 'description' => 'جدوِل المنشورات عبر LinkedIn وX وInstagram وTikTok وYouTube والمزيد — كل ذلك من مكان واحد.', + ], + 'media' => [ + 'title' => 'وسائط غنية', + 'description' => 'انشر الصور والعروض الدائرية والقصص ومقاطع الريلز. تحصل كل منصة على التنسيق المناسب تلقائيًا.', + ], + 'video' => [ + 'title' => 'نشر الفيديو', + 'description' => 'ارفع مقاطع الفيديو مرة واحدة وانشرها على TikTok وYouTube Shorts وInstagram Reels وFacebook Reels.', + ], + 'team' => [ + 'title' => 'مساحات عمل جماعية', + 'description' => 'ادعُ فريقك، وعيّن الأدوار، وأدِر عدة علامات تجارية من مساحات عمل منفصلة.', + ], + 'signatures' => [ + 'title' => 'التوقيعات', + 'description' => 'احفظ توقيعات قابلة لإعادة الاستخدام (وسوم، روابط، خواتيم) وأضِفها إلى المنشورات بنقرة واحدة.', + ], + ], + + 'or_continue_with' => 'أو تابع باستخدام', + 'or_continue_with_email' => 'أو تابع باستخدام البريد الإلكتروني', + 'google_login' => 'تسجيل الدخول عبر Google', + 'google_signup' => 'التسجيل عبر Google', + 'github_login' => 'تسجيل الدخول عبر GitHub', + 'github_signup' => 'التسجيل عبر GitHub', + 'github_email_unavailable' => 'تعذر جلب بريدك الإلكتروني من GitHub. اجعل بريدك على GitHub عامًا أو امنح نطاق الوصول إلى البريد، ثم حاول مرة أخرى.', + + 'signup_success' => [ + 'page_title' => 'مرحبًا', + 'title' => 'جارٍ إعداد حسابك', + 'description' => 'يستغرق هذا عادةً بضع ثوانٍ فقط...', + ], + + 'login' => [ + 'title' => 'تسجيل الدخول إلى حسابك', + 'description' => 'أدخل بريدك الإلكتروني وكلمة المرور أدناه لتسجيل الدخول', + 'page_title' => 'تسجيل الدخول', + 'email' => 'البريد الإلكتروني', + 'password' => 'كلمة المرور', + 'forgot_password' => 'نسيت كلمة المرور؟', + 'remember_me' => 'تذكّرني', + 'submit' => 'تسجيل الدخول', + 'no_account' => 'ليس لديك حساب؟', + 'sign_up' => 'إنشاء حساب', + ], + + 'register' => [ + 'title' => 'تقويمك الاجتماعي بالكامل، في مكان واحد', + 'description' => 'أنشئ حسابك وابدأ جدولة المنشورات عبر كل شبكة.', + 'page_title' => 'التسجيل', + 'signup_with_email' => 'التسجيل بالبريد الإلكتروني', + 'name' => 'الاسم', + 'name_placeholder' => 'الاسم الكامل', + 'email' => 'البريد الإلكتروني', + 'password' => 'كلمة المرور', + 'show_password' => 'إظهار كلمة المرور', + 'hide_password' => 'إخفاء كلمة المرور', + 'submit' => 'إنشاء حساب', + 'has_account' => 'هل لديك حساب بالفعل؟', + 'log_in' => 'تسجيل الدخول', + ], + + 'forgot_password' => [ + 'title' => 'نسيت كلمة المرور', + 'description' => 'أدخل بريدك الإلكتروني لاستلام رابط إعادة تعيين كلمة المرور', + 'page_title' => 'نسيت كلمة المرور', + 'email' => 'البريد الإلكتروني', + 'submit' => 'إرسال رابط إعادة تعيين كلمة المرور', + 'return_to' => 'أو، العودة إلى', + 'log_in' => 'تسجيل الدخول', + ], + + 'reset_password' => [ + 'title' => 'إعادة تعيين كلمة المرور', + 'description' => 'يرجى إدخال كلمة المرور الجديدة أدناه', + 'page_title' => 'إعادة تعيين كلمة المرور', + 'email' => 'البريد الإلكتروني', + 'password' => 'كلمة المرور', + 'confirm_password' => 'تأكيد كلمة المرور', + 'confirm_placeholder' => 'تأكيد كلمة المرور', + 'submit' => 'إعادة تعيين كلمة المرور', + ], + + 'verify_email' => [ + 'title' => 'تأكيد البريد الإلكتروني', + 'description' => 'يرجى تأكيد بريدك الإلكتروني بالنقر على الرابط الذي أرسلناه إليك للتو.', + 'page_title' => 'تأكيد البريد الإلكتروني', + 'link_sent' => 'تم إرسال رابط تأكيد جديد إلى البريد الإلكتروني الذي قدّمته أثناء التسجيل.', + 'resend' => 'إعادة إرسال بريد التأكيد', + 'log_out' => 'تسجيل الخروج', + ], + + 'accept_invite' => [ + 'page_title' => 'قبول الدعوة', + 'title' => 'لقد تمت دعوتك!', + 'description' => 'لقد تمت دعوتك للانضمام إلى مساحة العمل :workspace.', + 'workspace' => 'مساحة العمل', + 'your_role' => 'دورك', + 'email' => 'البريد الإلكتروني', + 'accept' => 'قبول الدعوة', + 'decline' => 'رفض الدعوة', + 'login_prompt' => 'سجّل الدخول أو أنشئ حسابًا لقبول هذه الدعوة.', + 'log_in' => 'تسجيل الدخول', + 'create_account' => 'إنشاء حساب', + ], + +]; diff --git a/lang/ar/automations.php b/lang/ar/automations.php new file mode 100644 index 00000000..205938bb --- /dev/null +++ b/lang/ar/automations.php @@ -0,0 +1,411 @@ + 'الأتمتة', + 'default_name' => 'أتمتة جديدة', + + 'actions' => [ + 'new' => 'أتمتة جديدة', + 'edit' => 'تعديل', + 'save' => 'حفظ', + 'activate' => 'تفعيل', + 'pause' => 'إيقاف مؤقت', + 'delete' => 'حذف', + 'retry' => 'إعادة المحاولة', + 'guide' => 'تعرّف على آلية العمل', + ], + + 'tabs' => [ + 'build' => 'البناء', + 'variables' => 'المتغيرات', + 'test' => 'اختبار', + ], + + 'nav' => [ + 'workflow' => 'سير العمل', + 'invocations' => 'عمليات التشغيل', + 'metrics' => 'المقاييس', + 'settings' => 'الإعدادات', + ], + + 'settings' => [ + 'general' => 'عام', + 'general_description' => 'إعادة تسمية هذه الأتمتة.', + 'name_label' => 'الاسم', + 'name_saved' => 'تمت إعادة تسمية الأتمتة.', + 'status_title' => 'الحالة', + 'status_description' => 'فعّلها لبدء تشغيلها، أو أوقفها مؤقتًا للتوقف.', + 'activated_at' => 'تم التفعيل :date', + 'paused_at' => 'تم الإيقاف المؤقت :date', + 'created_at' => 'تم الإنشاء :date', + 'danger_title' => 'منطقة الخطر', + 'danger_description' => 'إجراءات لا يمكن التراجع عنها.', + 'delete_title' => 'حذف هذه الأتمتة', + 'delete_description' => 'يزيل الأتمتة وسجل تشغيلها نهائيًا.', + ], + + 'status_run' => [ + 'pending' => 'قيد الانتظار', + 'running' => 'قيد التشغيل', + 'waiting' => 'في الانتظار', + 'completed' => 'مكتمل', + 'failed' => 'فشل', + 'cancelled' => 'مُلغى', + ], + + 'node_type' => [ + 'trigger' => 'مُشغّل', + 'generate' => 'إنشاء محتوى', + 'delay' => 'تأخير', + 'condition' => 'شرط', + 'publish' => 'نشر', + 'webhook' => 'Webhook', + 'end' => 'إنهاء', + 'fetch_rss' => 'جلب RSS', + 'http_request' => 'طلب HTTP', + ], + + 'invocations' => [ + 'empty' => 'لا توجد عمليات تشغيل بعد.', + 'refresh' => 'تحديث', + 'search_placeholder' => 'البحث عبر معرّف التشغيل…', + 'copied' => 'تم نسخ معرّف التشغيل.', + 'loading' => 'جارٍ تحميل الخطوات…', + 'no_steps' => 'لم يتم تسجيل أي خطوات.', + 'load_error' => 'تعذر تحميل الخطوات.', + 'steps' => '{0}لا خطوات|{1}خطوة واحدة|{2}خطوتان|[3,10]:count خطوات|[11,*]:count خطوة', + 'filter' => [ + 'all' => 'جميع الحالات', + ], + 'columns' => [ + 'timestamp' => 'الطابع الزمني', + 'run' => 'التشغيل', + 'status' => 'الحالة', + 'message' => 'آخر رسالة', + 'duration' => 'المدة', + ], + 'summary' => [ + 'completed' => 'اكتمل سير العمل', + 'failed' => 'فشل سير العمل', + 'running' => 'سير العمل قيد التشغيل', + 'cancelled' => 'تم إلغاء سير العمل', + 'pending' => 'سير العمل قيد الانتظار', + ], + ], + + 'metrics' => [ + 'overview' => 'نظرة عامة', + 'runs_over_time' => 'عمليات التشغيل عبر الزمن', + 'posts_by_platform' => 'المنشورات حسب المنصة', + 'no_posts' => 'لم يتم نشر أي منشورات في هذه الفترة.', + 'cards' => [ + 'runs' => 'إجمالي عمليات التشغيل', + 'completed' => 'مكتملة', + 'failed' => 'فاشلة', + 'in_progress' => 'قيد التنفيذ', + 'success_rate' => 'معدل النجاح', + 'avg_duration' => 'متوسط المدة', + 'posts_created' => 'المنشورات المُنشأة', + ], + 'legend' => [ + 'started' => 'بدأت', + 'completed' => 'اكتملت', + 'failed' => 'فشلت', + ], + ], + + 'categories' => [ + 'sources' => 'المصادر', + 'content' => 'المحتوى', + 'flow' => 'التدفق', + 'output' => 'الإخراج', + ], + + 'variables' => [ + 'title' => 'متغيرات سير العمل', + 'hint' => 'قيم قابلة لإعادة الاستخدام يُشار إليها في أي مكان عبر {{ variables.KEY }}. تُخزَّن مشفّرة.', + 'empty' => 'لا توجد متغيرات بعد.', + 'key' => 'المفتاح', + 'value' => 'القيمة', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'القيمة', + 'add' => 'متغير جديد', + ], + + 'expr' => [ + 'trigger_event' => 'اسم حدث المُشغّل', + 'trigger_fired_at' => 'وقت إطلاق المُشغّل', + 'trigger_post_id' => 'معرّف المنشور المُشغِّل', + 'trigger_post_content' => 'محتوى المنشور المُشغِّل', + 'trigger_post_status' => 'حالة المنشور المُشغِّل', + 'trigger_post_scheduled_at' => 'وقت جدولة المنشور', + 'trigger_post_published_at' => 'وقت نشر المنشور', + 'fetched_title' => 'عنوان العنصر المجلوب', + 'fetched_link' => 'رابط العنصر المجلوب', + 'fetched_date' => 'تاريخ نشر العنصر المجلوب', + 'fetched_content' => 'المحتوى الكامل للعنصر المجلوب', + 'fetched_description' => 'ملخص العنصر المجلوب', + 'fetched_author' => 'كاتب العنصر المجلوب', + 'fetched_image' => 'رابط صورة العنصر المجلوب', + 'fetched_categories' => 'فئات العنصر المجلوب', + 'fetched_enclosure' => 'وسائط العنصر المجلوب (صوت/فيديو/ملف)', + 'fetched_pubdate' => 'تاريخ نشر العنصر المجلوب', + 'fetched_http' => 'عنصر HTTP المجلوب (أضِف حقلًا)', + 'generated_content' => 'محتوى المنشور المُنشأ بالذكاء الاصطناعي', + 'generated_post_url' => 'رابط المنشور المُنشأ بالذكاء الاصطناعي', + 'variable' => 'متغير سير العمل', + 'now' => 'التاريخ والوقت الحالي', + ], + + 'test' => [ + 'description' => 'يشغّل الأتمتة من البداية إلى النهاية باستخدام حمولة مُشغِّل مُصطنعة. مفيد للتحقق من كل عقدة دون انتظار الجدول أو الخلاصة الحقيقية.', + 'starting' => 'جارٍ بدء تشغيل الاختبار…', + 'in_progress' => 'قيد التنفيذ', + 'completed' => 'مكتمل', + 'failed' => 'فشل', + 'waiting' => 'في الانتظار', + 'close' => 'إغلاق', + 'no_node_runs' => 'في انتظار بدء العقدة الأولى…', + 'node_input' => 'المدخلات', + 'node_output' => 'المخرجات', + 'node_error' => 'خطأ', + 'no_new_items' => 'لا توجد عناصر جديدة — لم يُشغَّل أي شيء لاحق.', + 'error_starting' => 'تعذر بدء تشغيل الاختبار.', + 'with_real_data' => 'ببيانات حقيقية', + 'run' => 'تشغيل الاختبار', + 'idle_hint' => 'اضغط على "تشغيل الاختبار" لتنفيذ الأتمتة من البداية إلى النهاية.', + 'real_data_hint' => 'سيقوم هذا الاختبار بنشر المنشورات، وتقديم علامات الاستطلاع، وإطلاق تأثيرات جانبية خارجية.', + 'dry_badge' => 'تشغيل تجريبي', + ], + + 'status' => [ + 'draft' => 'مسودة', + 'active' => 'نشط', + 'paused' => 'متوقف مؤقتًا', + ], + + 'index' => [ + 'empty_title' => 'لا توجد عمليات أتمتة بعد', + 'empty_description' => 'أنشئ أول أتمتة لك لبدء النشر تلقائيًا.', + 'columns' => [ + 'name' => 'الاسم', + 'status' => 'الحالة', + 'created' => 'تاريخ الإنشاء', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'تعذر تفعيل الأتمتة.', + 'pause_error_fallback' => 'تعذر إيقاف الأتمتة مؤقتًا.', + 'save_error_fallback' => 'تعذر حفظ الأتمتة.', + 'save_success' => 'تم حفظ الأتمتة.', + 'empty_canvas_title' => 'ابدأ ببناء أتمتتك', + 'empty_canvas_description' => 'اسحب عقدة من اللوحة الجانبية للبدء.', + 'name_placeholder' => 'أتمتة بلا عنوان', + ], + + 'nodes' => [ + 'trigger' => 'مُشغّل', + 'generate' => 'إنشاء', + 'delay' => 'تأخير', + 'condition' => 'شرط', + 'publish' => 'نشر', + 'webhook' => 'Webhook', + 'end' => 'إنهاء', + 'end_summary' => 'يوقف الأتمتة هنا', + 'fetch_rss' => 'جلب RSS', + 'http_request' => 'طلب HTTP', + 'handles' => [ + 'items' => 'يحتوي على عناصر', + 'no_items' => 'لا عناصر', + ], + ], + + 'config' => [ + 'select_placeholder' => 'اختر…', + 'invalid_json' => 'هذا ليس JSON صالحًا بعد.', + 'expand_editor' => 'توسيع المحرر', + 'minimize_editor' => 'تصغير', + + 'trigger' => [ + 'type' => 'نوع المُشغّل', + 'types' => [ + 'schedule' => 'جدولة', + 'post_published' => 'عند نشر منشور', + 'post_scheduled' => 'عند جدولة منشور', + ], + 'post_published_hint' => 'يعمل كلما تم نشر أي منشور في مساحة العمل هذه. يصبح المنشور المنشور متاحًا في {{ trigger.post }} للعقد اللاحقة.', + 'post_scheduled_hint' => 'يعمل كلما تمت جدولة أي منشور في مساحة العمل هذه. يكون المنشور المجدول متاحًا في {{ trigger.post }}.', + + 'schedule' => [ + 'field' => 'فاصل المُشغّل', + 'fields' => [ + 'minutes' => 'دقائق', + 'hours' => 'ساعات', + 'days' => 'أيام', + 'weeks' => 'أسابيع', + 'months' => 'أشهر', + ], + 'minutes_interval' => 'الدقائق بين عمليات التشغيل', + 'hours_interval' => 'الساعات بين عمليات التشغيل', + 'days_interval' => 'الأيام بين عمليات التشغيل', + 'hour' => 'التشغيل عند الساعة', + 'minute' => 'التشغيل عند الدقيقة', + 'weekdays' => 'التشغيل في أيام الأسبوع', + 'day_of_month' => 'يوم من الشهر', + 'weekday_names' => [ + 'sun' => 'أحد', + 'mon' => 'اثنين', + 'tue' => 'ثلاثاء', + 'wed' => 'أربعاء', + 'thu' => 'خميس', + 'fri' => 'جمعة', + 'sat' => 'سبت', + ], + 'summary' => [ + 'every_n_minutes' => '{1}يعمل كل دقيقة|{2}يعمل كل دقيقتين|[3,10]يعمل كل :count دقائق|[11,*]يعمل كل :count دقيقة', + 'every_n_hours' => '{1}يعمل كل ساعة عند الدقيقة :minute|{2}يعمل كل ساعتين عند الدقيقة :minute|[3,10]يعمل كل :count ساعات عند الدقيقة :minute|[11,*]يعمل كل :count ساعة عند الدقيقة :minute', + 'every_n_days' => '{1}يعمل كل يوم عند :time|{2}يعمل كل يومين عند :time|[3,10]يعمل كل :count أيام عند :time|[11,*]يعمل كل :count يوم عند :time', + 'weekly' => 'يعمل كل :days عند :time', + 'monthly' => 'يعمل في اليوم :day من كل شهر عند :time', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'الحسابات الاجتماعية', + 'social_accounts_empty' => 'لا توجد حسابات اجتماعية متصلة. اربط واحدًا أولًا.', + 'target_slide_count' => 'الشرائح المراد إنشاؤها', + 'prompt_template' => 'قالب الموجّه', + 'prompt_template_hint' => 'اكتب {{ لإدراج بيانات من الخطوات السابقة.', + 'image_count' => 'الصور المراد إنشاؤها', + 'image_count_hint' => '0 = منشور نصي فقط (بلا صورة). 1 = صورة واحدة. 2 أو أكثر = عرض دائري.', + 'use_brand_voice' => 'استخدام صوت العلامة التجارية', + 'use_brand_voice_hint' => 'طبّق وصف علامتك التجارية وصوتها. أوقفه للتنسيق الأمين لمصادر الجهات الخارجية (الأخبار، RSS).', + 'use_brand_visuals' => 'استخدام العناصر المرئية للعلامة التجارية', + 'use_brand_visuals_hint' => 'وجّه صور الذكاء الاصطناعي بألوان علامتك التجارية وهويتها. أوقفه للصور المحايدة المدفوعة بموضوع المنشور فقط.', + 'style' => 'النمط', + 'account_summary' => '{1}حساب واحد · :format|{2}حسابان · :format|[3,10]:count حسابات · :format|[11,*]:count حساب · :format', + 'formats' => [ + 'single' => 'مفرد', + 'carousel' => 'عرض دائري', + ], + ], + 'delay' => [ + 'duration' => 'المدة', + 'unit' => 'الوحدة', + 'units' => [ + 'minutes' => 'دقائق', + 'hours' => 'ساعات', + 'days' => 'أيام', + ], + ], + 'condition' => [ + 'field' => 'الحقل', + 'operator' => 'العامل', + 'operators' => [ + 'contains' => 'يحتوي على', + 'not_contains' => 'لا يحتوي على', + 'equals' => 'يساوي', + 'not_equals' => 'لا يساوي', + 'matches' => 'يطابق (تعبير نمطي)', + 'greater_than' => 'أكبر من', + 'less_than' => 'أصغر من', + ], + 'value' => 'القيمة', + ], + 'publish' => [ + 'mode' => 'الوضع', + 'modes' => [ + 'now' => 'نشر الآن', + 'scheduled' => 'جدولة', + 'draft' => 'حفظ كمسودة', + ], + 'scheduled_offset' => 'الإزاحة عن المُشغّل (بالدقائق)', + 'offset_summary' => ':mode · +:offset د', + ], + 'webhook' => [ + 'url' => 'الرابط', + 'method' => 'الطريقة', + 'payload_template' => 'قالب الحمولة (JSON)', + ], + 'end' => [ + 'reason' => 'السبب (اختياري)', + 'reason_placeholder' => 'مثال: تمت تصفيته بواسطة شرط', + ], + 'fetch_rss' => [ + 'feed_url' => 'رابط الخلاصة', + 'feed_url_hint' => 'في التشغيل الأول، تُضبط العلامة على "الآن" حتى لا تُغرِق العناصر التاريخية العقد اللاحقة. تشاهد عمليات التشغيل اللاحقة فقط العناصر الأحدث من الاستطلاع السابق.', + 'inspect' => 'فحص الخلاصة', + 'inspecting' => 'جارٍ الفحص…', + 'inspect_hint' => 'اجلب عينة لاكتشاف الحقول المتاحة للاستخدام في العقد اللاحقة.', + 'inspect_error' => 'تعذرت قراءة هذه الخلاصة. تحقق من الرابط وحاول مرة أخرى.', + 'discovered_fields' => 'الحقول المتاحة', + 'discovered_empty' => 'لم يتم العثور على حقول في أحدث عنصر.', + ], + 'http_request' => [ + 'url' => 'الرابط', + 'method' => 'الطريقة', + 'auth_type' => 'المصادقة', + 'auth' => [ + 'none' => 'بلا (عام)', + 'bearer' => 'رمز Bearer', + 'basic' => 'مصادقة أساسية', + 'api_key' => 'ترويسة مفتاح API', + ], + 'bearer_token' => 'رمز Bearer', + 'basic_username' => 'اسم المستخدم', + 'basic_password' => 'كلمة المرور', + 'api_key_header' => 'اسم الترويسة', + 'api_key_value' => 'مفتاح API', + 'body_template' => 'قالب النص (JSON)', + 'headers' => 'الترويسات', + 'header_name' => 'اسم الترويسة', + 'header_value' => 'القيمة', + 'add_header' => 'إضافة ترويسة', + 'polling_section' => 'القائمة وإزالة التكرار (اختياري)', + 'polling_hint' => 'عندما تكون الاستجابة قائمة، يشغّل كل عنصر سير العمل بشكل منفصل. يشغّل الكائن الواحد مرة واحدة.', + 'items_path' => 'مسار العناصر', + 'items_path_hint' => 'اتركه فارغًا إذا كانت الاستجابة مصفوفة بالفعل. استخدم مسارًا منقّطًا (مثل data.items) لمصفوفة متداخلة، أو * لكائن مفهرس بالمعرّف.', + 'item_key_path' => 'مسار مفتاح العنصر', + 'item_key_path_hint' => 'مسار JSON لمعرّف فريد (مثل id). تُتخطى العناصر التي سبقت رؤيتها، لذا تظل الخلاصة بلا تواريخ تُمرّر الإدخالات الجديدة فقط.', + 'item_date_path' => 'مسار تاريخ العنصر', + 'item_date_path_hint' => 'مسار JSON للطابع الزمني للعنصر (مثل published_at). يُفضَّل على مسار المفتاح عند توفره. يسجّل الاستطلاع الأول الأساس ولا يمرّر شيئًا، لذا لا تُغرِق الخلاصة الموجودة في اليوم الأول.', + ], + ], + + 'delete' => [ + 'title' => 'حذف الأتمتة', + 'description' => 'هل أنت متأكد من رغبتك في حذف هذه الأتمتة؟ ستتم إزالة جميع عمليات التشغيل وعناصر التشغيل أيضًا. لا يمكن التراجع عن هذا الإجراء.', + 'confirm' => 'حذف', + 'cancel' => 'إلغاء', + ], + + 'flash' => [ + 'deleted' => 'تم حذف الأتمتة بنجاح!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'لا توجد حسابات اجتماعية نشطة مُهيّأة لهذه الأتمتة.', + 'must_have_one_trigger' => 'يجب أن تحتوي الأتمتة على عقدة مُشغّل واحدة بالضبط.', + 'trigger_must_be_connected' => 'يجب أن تكون عقدة المُشغّل متصلة بعقدة واحدة على الأقل.', + 'graph_contains_cycle' => 'يحتوي مخطط الأتمتة على حلقة.', + 'only_failed_can_retry' => 'يمكن إعادة محاولة عمليات التشغيل الفاشلة فقط.', + 'no_generated_post' => 'لم يتم العثور على منشور مُنشأ في التشغيل.', + 'webhook_server_error' => 'خطأ في خادم Webhook.', + 'webhook_request_failed' => 'تعذر إكمال طلب Webhook.', + 'webhook_missing_url' => 'عقدة Webhook تفتقد إلى رابط.', + 'webhook_invalid_payload_json' => 'قالب الحمولة ليس JSON صالحًا.', + 'url_not_allowed' => 'رابط الطلب يشير إلى عنوان خاص أو غير قابل للوصول وتم حظره.', + 'node_no_longer_exists' => 'العقدة :node_id لم تعد موجودة في الأتمتة.', + 'no_trigger_connection' => 'لا توجد عقدة متصلة بعقدة المُشغّل.', + 'fetch_rss_missing_url' => 'عقدة جلب RSS تفتقد إلى رابط خلاصة.', + 'fetch_rss_request_failed' => 'فشل طلب خلاصة RSS.', + 'fetch_rss_malformed' => 'خلاصة RSS مشوّهة.', + 'http_missing_url' => 'عقدة طلب HTTP تفتقد إلى رابط.', + 'http_request_exception' => 'أطلق طلب HTTP استثناءً.', + 'http_request_failed' => 'فشل طلب HTTP.', + 'http_items_path_not_array' => 'لم يُفضِ مسار العناصر إلى قائمة.', + ], +]; diff --git a/lang/ar/billing.php b/lang/ar/billing.php new file mode 100644 index 00000000..d32643ac --- /dev/null +++ b/lang/ar/billing.php @@ -0,0 +1,76 @@ + 'الفوترة', + + 'past_due_notice' => [ + 'title' => 'دفعة متأخرة', + 'description' => 'حدّث طريقة الدفع للحفاظ على اشتراكك نشطًا.', + 'cta' => 'تحديث الدفع', + ], + + 'annual_banner' => [ + 'title' => 'احصل على شهرين مجانًا', + 'description' => 'انتقل إلى الفوترة السنوية وادفع أقل كل شهر — الخطة نفسها، لا شيء آخر يتغير.', + 'cta' => 'الترقية إلى السنوية', + ], + + 'subscribe' => [ + 'billed_monthly' => 'فوترة شهرية', + 'billed_yearly' => 'فوترة سنوية', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'الخطة', + 'description' => 'إدارة خطة اشتراكك.', + 'label' => 'الخطة', + 'workspaces' => '{1}مساحة عمل واحدة|{2}مساحتا عمل|[3,10]:count مساحات عمل|[11,*]:count مساحة عمل', + 'per_workspace' => 'لكل مساحة عمل', + 'price' => 'السعر', + 'month' => 'شهر', + 'trial' => 'تجريبي', + 'active' => 'نشط', + 'past_due' => 'متأخر', + 'cancelling' => 'قيد الإلغاء', + 'trial_ends' => 'تنتهي الفترة التجريبية', + ], + + 'subscription' => [ + 'title' => 'الاشتراك', + 'description' => 'إدارة طريقة الدفع وتفاصيل الفوترة والاشتراك.', + 'payment_method' => 'طريقة الدفع', + 'no_payment_method' => 'لا توجد طريقة دفع مسجّلة بعد.', + 'expires_on' => 'تنتهي في :month/:year', + 'manage_label' => 'الاشتراك', + 'manage_stripe' => 'الإدارة عبر Stripe', + ], + + 'invoices' => [ + 'title' => 'الفواتير', + 'description' => 'نزّل فواتيرك السابقة.', + 'empty' => 'لم يتم العثور على فواتير', + 'paid' => 'مدفوعة', + ], + + 'flash' => [ + 'plan_changed' => 'أنت الآن على خطة :plan.', + 'switched_to_yearly' => 'أنت الآن على الفوترة السنوية.', + 'cannot_manage' => 'يمكن لمالك الحساب فقط إدارة الفوترة.', + 'credits_exhausted' => 'نفد رصيد الذكاء الاصطناعي — تم استخدام مخصصك الشهري البالغ :limit. رقِّ خطتك أو انتظر حتى الشهر المقبل.', + 'subscription_required' => 'يلزم وجود اشتراك نشط لاستخدام ميزات الذكاء الاصطناعي.', + ], + + 'processing' => [ + 'page_title' => 'جارٍ المعالجة...', + 'title' => 'جارٍ معالجة اشتراكك', + 'description' => 'يرجى الانتظار بينما نُعِدّ حسابك. لن يستغرق هذا سوى لحظة.', + 'success_title' => 'كل شيء جاهز!', + 'success_description' => 'اشتراكك نشط. جارٍ إعادة توجيهك إلى مساحات عملك...', + 'cancelled_title' => 'تم إلغاء الدفع', + 'cancelled_description' => 'تم إلغاء عملية الدفع. لم تُجرَ أي رسوم.', + 'retry' => 'إعادة المحاولة', + ], +]; diff --git a/lang/ar/brands.php b/lang/ar/brands.php new file mode 100644 index 00000000..9d34b557 --- /dev/null +++ b/lang/ar/brands.php @@ -0,0 +1,39 @@ + 'علامة تجارية جديدة', + 'no_brands_yet' => 'لا توجد علامات تجارية بعد', + 'no_brands_description' => 'أنشئ علامات تجارية لتنظيم حساباتك الاجتماعية حسب العميل أو المشروع', + 'accounts_count' => ':count حساب', + + 'create' => [ + 'title' => 'إنشاء علامة تجارية', + 'description' => 'امنح علامتك التجارية اسمًا لتجميع الحسابات الاجتماعية', + 'name' => 'اسم العلامة التجارية', + 'name_placeholder' => 'مثال: Acme Corp، شخصي', + 'submit' => 'إنشاء علامة تجارية', + 'submitting' => 'جارٍ الإنشاء...', + ], + + 'edit' => [ + 'title' => 'تعديل العلامة التجارية', + 'description' => 'تحديث اسم هذه العلامة التجارية', + 'name' => 'اسم العلامة التجارية', + 'name_placeholder' => 'مثال: Acme Corp، شخصي', + 'submit' => 'حفظ التغييرات', + 'submitting' => 'جارٍ الحفظ...', + ], + + 'delete' => [ + 'title' => 'حذف العلامة التجارية', + 'description' => 'هل أنت متأكد من رغبتك في حذف هذه العلامة التجارية؟ سيتم إلغاء تعيين الحسابات الاجتماعية دون حذفها.', + 'confirm' => 'حذف', + 'cancel' => 'إلغاء', + ], + + 'flash' => [ + 'created' => 'تم إنشاء العلامة التجارية بنجاح!', + 'updated' => 'تم تحديث العلامة التجارية بنجاح!', + 'deleted' => 'تم حذف العلامة التجارية بنجاح!', + ], +]; diff --git a/lang/ar/calendar.php b/lang/ar/calendar.php new file mode 100644 index 00000000..b2584f2d --- /dev/null +++ b/lang/ar/calendar.php @@ -0,0 +1,12 @@ + 'التقويم', + 'today' => 'اليوم', + 'day' => 'يوم', + 'week' => 'أسبوع', + 'month' => 'شهر', + 'new_post' => 'منشور جديد', + 'no_content' => 'لا يوجد محتوى', + 'more' => '+:count المزيد', +]; diff --git a/lang/ar/comments.php b/lang/ar/comments.php new file mode 100644 index 00000000..d2121bd9 --- /dev/null +++ b/lang/ar/comments.php @@ -0,0 +1,18 @@ + 'اكتب تعليقًا...', + 'reply_placeholder' => 'اكتب ردًا...', + 'reply' => 'رد', + 'edit' => 'تعديل', + 'delete' => 'حذف', + 'edited' => 'تم التعديل', + 'save' => 'حفظ', + 'cancel' => 'إلغاء', + 'send' => 'إرسال', + 'replying_to' => 'رد على :name', + 'empty' => 'لا توجد تعليقات بعد. ابدأ المحادثة.', + 'load_more' => 'تحميل التعليقات الأقدم', + 'today' => 'اليوم', + 'yesterday' => 'أمس', +]; diff --git a/lang/ar/common.php b/lang/ar/common.php new file mode 100644 index 00000000..7ce8afda --- /dev/null +++ b/lang/ar/common.php @@ -0,0 +1,59 @@ + 'رجوع', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'لا يمكن التراجع عن هذا الإجراء.', + 'type' => 'اكتب', + 'to_confirm' => 'للتأكيد.', + 'copy_to_clipboard' => 'نسخ إلى الحافظة', + 'delete_keyword' => 'delete', + ], + + 'photo_upload' => [ + 'upload' => 'رفع', + 'uploading' => 'جارٍ الرفع...', + 'remove' => 'إزالة الصورة', + 'hint' => 'موصى به: صورة مربعة، بحد أقصى 2 ميغابايت.', + ], + + 'timezone' => [ + 'select' => 'اختر المنطقة الزمنية', + 'search' => 'البحث عن منطقة زمنية...', + 'empty' => 'لم يتم العثور على منطقة زمنية', + ], + + 'date_picker' => [ + 'select' => 'اختر التاريخ', + ], + + 'date_range_picker' => [ + 'placeholder' => 'اختر نطاقًا زمنيًا', + 'today' => 'اليوم', + 'yesterday' => 'أمس', + 'last_7_days' => 'آخر 7 أيام', + 'last_30_days' => 'آخر 30 يومًا', + 'last_3_months' => 'آخر 3 أشهر', + 'last_6_months' => 'آخر 6 أشهر', + 'last_12_months' => 'آخر 12 شهرًا', + 'this_month' => 'هذا الشهر', + 'last_month' => 'الشهر الماضي', + 'year_to_date' => 'منذ بداية العام', + 'last_year' => 'العام الماضي', + ], + + 'cancel' => 'إلغاء', + 'clear' => 'مسح', + 'close' => 'إغلاق', + 'loading_more' => 'جارٍ تحميل المزيد...', + + 'actions' => [ + 'copy' => 'نسخ', + 'copied' => 'تم النسخ', + 'copy_failed' => 'فشل النسخ إلى الحافظة', + ], +]; diff --git a/lang/ar/labels.php b/lang/ar/labels.php new file mode 100644 index 00000000..9ff4b722 --- /dev/null +++ b/lang/ar/labels.php @@ -0,0 +1,54 @@ + 'التسميات', + 'description' => 'أنشئ تسميات لتنظيم منشوراتك وتصنيفها', + 'search' => 'البحث في التسميات...', + 'new_label' => 'تسمية جديدة', + 'no_labels_yet' => 'لا توجد تسميات بعد', + 'no_search_results' => 'لا توجد تسميات مطابقة لبحثك', + 'try_different_search' => 'جرّب كلمة مختلفة أو امسح البحث.', + 'create_first_label' => 'أنشئ أول تسمية لك', + 'table' => [ + 'name' => 'الاسم', + 'created_at' => 'تاريخ الإنشاء', + ], + + 'actions' => [ + 'edit' => 'تعديل التسمية', + 'delete' => 'حذف التسمية', + ], + + 'create' => [ + 'title' => 'إنشاء تسمية', + 'description' => 'امنح تسميتك اسمًا واختر لونًا', + 'name' => 'الاسم', + 'name_placeholder' => 'أدخل اسم التسمية...', + 'color' => 'اللون', + 'submit' => 'إنشاء تسمية', + 'submitting' => 'جارٍ الإنشاء...', + ], + + 'edit' => [ + 'title' => 'تعديل التسمية', + 'description' => 'تحديث اسم ولون هذه التسمية', + 'name' => 'الاسم', + 'name_placeholder' => 'أدخل اسم التسمية...', + 'color' => 'اللون', + 'submit' => 'حفظ التغييرات', + 'submitting' => 'جارٍ الحفظ...', + ], + + 'delete' => [ + 'title' => 'حذف التسمية', + 'description' => 'هل أنت متأكد من رغبتك في حذف هذه التسمية؟ لا يمكن التراجع عن هذا الإجراء.', + 'confirm' => 'حذف', + 'cancel' => 'إلغاء', + ], + + 'flash' => [ + 'created' => 'تم إنشاء التسمية بنجاح!', + 'updated' => 'تم تحديث التسمية بنجاح!', + 'deleted' => 'تم حذف التسمية بنجاح!', + ], +]; diff --git a/lang/ar/mail.php b/lang/ar/mail.php new file mode 100644 index 00000000..4a0a0b20 --- /dev/null +++ b/lang/ar/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => 'أشار إليك :name على TryPost', + 'title' => 'أشار إليك :name', + 'intro' => 'أشار إليك :name في تعليق على منشور.', + 'cta' => 'عرض التعليق', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} حساب واحد يحتاج إلى إعادة الربط في :workspace|{2} حسابان يحتاجان إلى إعادة الربط في :workspace|[3,10] :count حسابات تحتاج إلى إعادة الربط في :workspace|[11,*] :count حسابًا يحتاج إلى إعادة الربط في :workspace', + 'title' => 'حسابات تحتاج إلى إعادة الربط', + 'intro' => 'تم فصل الحسابات الاجتماعية التالية في مساحة العمل :workspace وتحتاج إلى إعادة الربط:', + 'reasons_title' => 'قد يكون هذا قد حدث بسبب:', + 'reason_expired' => 'انتهاء صلاحية رموز الوصول', + 'reason_revoked' => 'قيامك بإلغاء وصول TryPost على المنصة', + 'reason_changed' => 'قيام المنصة بتغيير متطلبات المصادقة الخاصة بها', + 'reconnect_cta' => 'يرجى إعادة ربط هذه الحسابات لمواصلة جدولة المنشورات ونشرها.', + 'button' => 'إعادة ربط الحسابات', + ], +]; diff --git a/lang/ar/notifications.php b/lang/ar/notifications.php new file mode 100644 index 00000000..552b5028 --- /dev/null +++ b/lang/ar/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'منشورك جاهز', + 'body' => 'أنهى الذكاء الاصطناعي عمله للتو. انقر للمراجعة والنشر.', + ], + 'account_disconnected' => [ + 'title' => 'تم فصل حساب :platform', + 'body' => 'يحتاج :account إلى إعادة الربط', + ], + 'account_token_expired' => [ + 'title' => 'يحتاج حساب :platform إلى إعادة الربط', + 'body' => 'انتهت جلسة :account — يرجى إعادة الربط لمواصلة النشر', + ], +]; diff --git a/lang/ar/onboarding.php b/lang/ar/onboarding.php new file mode 100644 index 00000000..1eb9d9d6 --- /dev/null +++ b/lang/ar/onboarding.php @@ -0,0 +1,41 @@ + 'مرحبًا بك في TryPost', + 'description' => 'أخبرنا بما يصفك أنت أو نشاطك التجاري على أفضل وجه حتى نتمكن من تخصيص تجربتك.', + 'continue' => 'متابعة', + 'personas' => [ + 'creator' => 'صانع محتوى', + 'freelancer' => 'مستقل', + 'developer' => 'مطوّر', + 'startup' => 'شركة ناشئة', + 'agency' => 'وكالة', + 'small_business' => 'نشاط تجاري صغير', + 'marketer' => 'مسوّق', + 'online_store' => 'متجر إلكتروني', + 'other' => 'أخرى', + ], + 'goals_title' => 'ما هدفك من استخدام TryPost؟', + 'goals_description' => 'اختر كل ما يناسبك وسنقوم بإعداد TryPost من أجلك.', + 'goals' => [ + 'save_time' => 'توفير الوقت بالنشر في كل مكان دفعة واحدة', + 'ai_content' => 'إنشاء منشورات أسرع بالذكاء الاصطناعي', + 'plan_calendar' => 'التخطيط لمنشوراتي على التقويم', + 'stay_on_brand' => 'الحفاظ على اتساق كل منشور مع العلامة التجارية', + 'grow_audience' => 'تنمية جمهوري وزيادة التفاعل', + 'drive_sales' => 'الحصول على المزيد من الزيارات والمبيعات', + 'manage_clients' => 'إدارة عدة علامات تجارية أو عملاء', + 'team_collaboration' => 'العمل مع فريقي', + 'automate_api' => 'أتمتة النشر عبر الواجهة البرمجية أو MCP أو الكود', + 'track_performance' => 'معرفة أداء منشوراتي', + 'just_exploring' => 'مجرد استكشاف في الوقت الحالي', + 'other' => 'شيء آخر', + ], + 'connect' => [ + 'title' => 'اربط شبكتك الأولى', + 'description' => 'اربط حسابًا اجتماعيًا واحدًا على الأقل لبدء الجدولة. يمكنك إضافة المزيد في أي وقت.', + 'must_connect' => 'اربط شبكة واحدة على الأقل للمتابعة.', + ], +]; diff --git a/lang/ar/pagination.php b/lang/ar/pagination.php new file mode 100644 index 00000000..2eee353e --- /dev/null +++ b/lang/ar/pagination.php @@ -0,0 +1,19 @@ + '« السابق', + 'next' => 'التالي »', + +]; diff --git a/lang/ar/passwords.php b/lang/ar/passwords.php new file mode 100644 index 00000000..8a6a5e32 --- /dev/null +++ b/lang/ar/passwords.php @@ -0,0 +1,22 @@ + 'تمت إعادة تعيين كلمة المرور الخاصة بك.', + 'sent' => 'لقد أرسلنا رابط إعادة تعيين كلمة المرور إلى بريدك الإلكتروني.', + 'throttled' => 'يرجى الانتظار قبل المحاولة مرة أخرى.', + 'token' => 'رمز إعادة تعيين كلمة المرور هذا غير صالح.', + 'user' => 'لا يمكننا العثور على مستخدم بهذا البريد الإلكتروني.', + +]; diff --git a/lang/ar/posts.php b/lang/ar/posts.php new file mode 100644 index 00000000..bf614f06 --- /dev/null +++ b/lang/ar/posts.php @@ -0,0 +1,671 @@ + 'المنشورات', + 'search' => 'البحث في المنشورات...', + 'all_posts' => 'جميع المنشورات', + 'new_post' => 'منشور جديد', + 'no_posts' => 'لم يتم العثور على منشورات', + 'no_search_results' => 'لا توجد منشورات مطابقة لبحثك', + 'try_different_search' => 'جرّب كلمة مختلفة أو امسح البحث.', + 'start_creating' => 'ابدأ بإنشاء أول منشور لك.', + 'filter_by_label' => 'التصفية حسب التسمية', + 'label_search_placeholder' => 'البحث في التسميات...', + 'no_labels' => 'لم يتم العثور على تسميات.', + 'clear_label_filter' => 'مسح تصفية التسميات', + 'table' => [ + 'post' => 'المنشور', + 'status' => 'الحالة', + 'content' => 'المحتوى', + 'platforms' => 'المنصات', + 'labels' => 'التسميات', + 'scheduled_at' => 'التاريخ', + 'actions' => '', + ], + 'manage_posts' => 'إدارة جميع منشوراتك', + 'delete_confirm' => 'هل أنت متأكد من رغبتك في حذف هذا المنشور؟', + 'by' => 'بواسطة', + + 'actions' => [ + 'view' => 'عرض المنشور', + 'delete' => 'حذف', + 'duplicate' => 'تكرار', + 'copy_id' => 'نسخ المعرّف', + 'copied' => 'تم نسخ المعرّف إلى الحافظة', + ], + + 'form' => [ + 'post_type' => 'نوع المنشور', + 'board' => 'اللوحة', + 'select_board' => 'اختر لوحة', + 'search_board' => 'البحث عن لوحة...', + 'no_board_found' => 'لم يتم العثور على لوحة', + 'media' => 'الوسائط', + 'min' => 'الحد الأدنى', + 'uploading' => 'جارٍ الرفع...', + 'drop_to_upload' => 'أفلِت للرفع', + 'drag_and_drop' => 'اسحب وأفلِت أو انقر للرفع', + 'photos_and_videos' => 'الصور ومقاطع الفيديو', + 'photos_only' => 'الصور فقط', + 'videos_only' => 'مقاطع الفيديو فقط', + 'drag_to_reorder' => 'اسحب لإعادة الترتيب', + 'caption' => 'التسمية التوضيحية', + 'write_caption' => 'اكتب التسمية التوضيحية...', + 'content_exceeds_platform' => ':platform: أطول بمقدار :over حرفًا (الحد الأقصى :limit).', + 'tiktok' => [ + 'settings' => 'إعدادات TikTok', + 'variant_label' => 'نوع المنشور', + 'variant' => [ + 'video' => 'فيديو', + 'photo' => 'عرض صور دائري', + ], + 'posting_to' => 'النشر إلى', + 'privacy_level' => 'من يمكنه رؤية هذا الفيديو؟', + 'privacy_placeholder' => 'اختر من يمكنه مشاهدة هذا المنشور', + 'privacy' => [ + 'public' => 'عام للجميع', + 'friends' => 'الأصدقاء المتابَعون بشكل متبادل', + 'followers' => 'المتابِعون', + 'private' => 'أنا فقط', + 'private_disabled_branded' => 'لا يمكن ضبط ظهور المحتوى ذي العلامة التجارية على خاص.', + ], + 'privacy_hint' => 'تعتمد الخيارات المتاحة على إعدادات حسابك على TikTok.', + 'auto_add_music' => 'إضافة موسيقى تلقائيًا', + 'auto_add_music_hint' => 'تتوفر هذه الميزة للصور فقط. ستضيف موسيقى افتراضية يمكنك تغييرها لاحقًا.', + 'yes' => 'نعم', + 'no' => 'لا', + 'allow_users' => 'السماح للمستخدمين بـ:', + 'comments' => 'التعليق', + 'duet' => 'الديو (Duet)', + 'stitch' => 'الدمج (Stitch)', + 'is_aigc' => 'فيديو مُنشأ بالذكاء الاصطناعي', + 'disclose' => 'الإفصاح عن محتوى الفيديو', + 'disclose_hint' => 'فعّله للإفصاح عن أن هذا الفيديو يروّج لسلع أو خدمات مقابل شيء ذي قيمة. قد يروّج الفيديو لك أو لطرف ثالث أو كليهما.', + 'promotional_organic_title' => 'ستُصنَّف صورتك/فيديوك على أنها "محتوى ترويجي".', + 'promotional_paid_title' => 'ستُصنَّف صورتك/فيديوك على أنها "شراكة مدفوعة".', + 'promotional_description' => 'لا يمكن تغيير هذا بمجرد نشر الفيديو.', + 'compliance_incomplete' => 'يجب أن تحدد ما إذا كان محتواك يروّج لك أو لطرف ثالث أو كليهما.', + 'privacy_required' => 'مستوى الخصوصية على TikTok مطلوب عند النشر.', + 'branded_cleared_private' => 'تم مسح الخصوصية لأن المحتوى ذا العلامة التجارية لا يمكن أن يكون خاصًا.', + 'interaction_disabled_by_creator' => 'مُعطَّل في إعدادات حسابك على TikTok', + 'max_duration_exceeded' => 'مدة الفيديو :duration ث لكن هذا الحساب يمكنه نشر مقاطع فيديو حتى :max ث فقط.', + 'processing_hint' => 'بعد النشر، قد يستغرق معالجة المحتوى وظهوره على ملفك الشخصي في TikTok بضع دقائق.', + 'brand_organic' => 'علامتك التجارية', + 'brand_organic_hint' => 'أنت تروّج لنفسك أو لعلامتك التجارية الخاصة. سيُصنَّف هذا الفيديو على أنه محتوى عضوي للعلامة التجارية.', + 'brand_content' => 'محتوى ذو علامة تجارية', + 'brand_content_hint' => 'أنت تروّج لعلامة تجارية أخرى أو لطرف ثالث. سيُصنَّف هذا الفيديو على أنه محتوى ذو علامة تجارية.', + 'compliance' => [ + 'agree' => 'بالنشر، فإنك توافق على', + 'music_usage' => 'تأكيد استخدام الموسيقى', + 'and' => 'و', + 'branded_policy' => 'سياسة المحتوى ذي العلامة التجارية', + ], + ], + 'instagram' => [ + 'settings' => 'إعدادات Instagram', + 'posting_to' => 'النشر إلى', + 'variant_label' => 'نوع المنشور', + 'variant' => [ + 'feed' => 'منشور', + 'reel' => 'ريل', + 'story' => 'قصة', + ], + 'aspect_label' => 'نسبة العرض إلى الارتفاع', + 'aspect' => [ + 'square' => 'مربع (1:1)', + 'portrait' => 'عمودي (4:5)', + 'landscape' => 'أفقي (16:9)', + 'original' => 'الأصلي', + ], + ], + 'facebook' => [ + 'settings' => 'إعدادات Facebook', + 'posting_to' => 'النشر إلى', + 'variant_label' => 'نوع المنشور', + 'variant' => [ + 'post' => 'منشور', + 'reel' => 'ريل', + 'story' => 'قصة', + ], + 'aspect_label' => 'نسبة العرض إلى الارتفاع', + 'aspect' => [ + 'square' => 'مربع (1:1)', + 'portrait' => 'عمودي (4:5)', + 'landscape' => 'أفقي (16:9)', + 'original' => 'الأصلي', + ], + ], + 'linkedin' => [ + 'settings' => 'إعدادات LinkedIn', + 'settings_page' => 'إعدادات صفحة LinkedIn', + 'posting_to' => 'النشر إلى', + 'document_title' => 'عنوان المستند', + 'document_title_placeholder' => 'يظهر على منشور مستند PDF الخاص بك', + ], + 'pinterest' => [ + 'settings' => 'إعدادات Pinterest', + 'posting_to' => 'النشر إلى', + 'variant_label' => 'نوع الدبوس', + 'variant' => [ + 'pin' => 'دبوس', + 'video_pin' => 'دبوس فيديو', + 'carousel' => 'عرض دائري', + ], + 'board' => 'اللوحة', + 'select_board' => 'اختر لوحة', + 'no_boards' => 'لم يتم العثور على لوحات Pinterest. أنشئ واحدة في حسابك على Pinterest أولًا.', + 'search_board' => 'البحث في اللوحات...', + 'no_board_found' => 'لا توجد لوحة مطابقة لبحثك.', + 'board_required' => 'اختر لوحة Pinterest لنشر هذا المنشور.', + ], + 'discord' => [ + 'settings' => 'إعدادات Discord', + 'posting_to' => 'النشر إلى', + 'channel' => 'القناة', + 'select_channel' => 'اختر قناة', + 'loading_channels' => 'جارٍ تحميل القنوات…', + 'search_channel' => 'البحث في القنوات…', + 'no_channels' => 'لم يتم العثور على قنوات.', + 'channel_required' => 'اختر قناة Discord لنشر هذا المنشور.', + 'mentions' => 'الإشارات', + 'search_mention' => 'أشِر إلى دور أو عضو…', + 'embeds' => 'التضمينات', + 'embed' => 'تضمين', + 'add_embed' => 'إضافة تضمين', + 'embed_title' => 'عنوان التضمين', + 'embed_description' => 'وصف التضمين', + 'embed_url' => 'رابط التضمين', + 'embed_image' => 'رابط الصورة', + 'embed_color' => 'اللون', + ], + 'warnings' => [ + 'no_variant' => 'اختر نوع منشور للمتابعة.', + 'requires_media' => 'يتطلب هذا النوع من المنشورات صورة أو فيديو واحدًا على الأقل.', + 'max_files_exceeded' => 'يقبل هذا النوع من المنشورات حتى :max ملف وسائط (لديك :current).', + 'min_files_required' => 'يتطلب هذا النوع من المنشورات :min ملف وسائط على الأقل (لديك :current).', + 'no_video_allowed' => 'لا يقبل هذا النوع من المنشورات مقاطع الفيديو.', + 'no_image_allowed' => 'يقبل هذا النوع من المنشورات مقاطع الفيديو فقط.', + 'no_document_allowed' => 'لا يقبل هذا النوع من المنشورات مستندات PDF.', + 'no_mixed_media' => 'لا يمكن الجمع بين الصور والفيديو في نفس المنشور.', + 'document_not_alone' => 'يجب نشر ملف PDF بمفرده، دون صور أو مقاطع فيديو أخرى.', + 'gif_not_allowed' => 'لا تقبل هذه المنصة صور GIF. أزِل صورة GIF أو اختر شبكة مختلفة.', + 'image_too_large' => 'تتجاوز الصورة حد :max لهذا النوع من المنشورات (حجم صورتك :current).', + 'video_too_large' => 'يتجاوز الفيديو حد :max لهذا النوع من المنشورات (حجم فيديوك :current).', + 'document_too_large' => 'يتجاوز ملف PDF حد :max لهذا النوع من المنشورات (حجم ملفك :current).', + 'video_too_long' => 'مدة الفيديو :current، لكن هذا النوع من المنشورات يسمح حتى :max.', + 'aspect_ratio_too_narrow' => 'نسبة العرض إلى الارتفاع :current طويلة جدًا لهذا النوع من المنشورات (الحد الأدنى :min).', + 'aspect_ratio_too_wide' => 'نسبة العرض إلى الارتفاع :current عريضة جدًا لهذا النوع من المنشورات (الحد الأقصى :max).', + ], + ], + + 'status' => [ + 'pending' => 'قيد الانتظار', + 'draft' => 'مسودة', + 'scheduled' => 'مجدول', + 'publishing' => 'قيد النشر', + 'retrying' => 'إعادة المحاولة', + 'published' => 'منشور', + 'partially_published' => 'منشور جزئيًا', + 'failed' => 'فشل', + ], + + 'descriptions' => [ + 'draft' => 'منشورات تنتظر الجدولة', + 'scheduled' => 'منشورات مجدولة للنشر', + 'published' => 'منشورات تم نشرها بالفعل', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'الإنشاء بالذكاء الاصطناعي', + 'title' => 'إنشاء منشور بالذكاء الاصطناعي', + 'description' => 'صِف موضوع المنشور. سيستخدم الذكاء الاصطناعي سياق علامتك التجارية لكتابته.', + 'prompt_label' => 'ما موضوع هذا المنشور؟', + 'prompt_placeholder' => 'مثال: الإعلان عن ميزتنا الجديدة لإنشاء الصور للعروض الدائرية', + 'preview_label' => 'معاينة', + 'start' => 'إنشاء', + 'apply' => 'استخدام هذا المحتوى', + 'retry' => 'إعادة المحاولة', + 'cancel' => 'إلغاء', + ], + 'review' => [ + 'button_tooltip' => 'المراجعة بالذكاء الاصطناعي', + 'title' => 'مراجعة المنشور بالذكاء الاصطناعي', + 'description' => 'يفحص الذكاء الاصطناعي القواعد والإملاء والوضوح. طبّق الاقتراحات التي توافق عليها.', + 'loading' => 'جارٍ مراجعة نصك...', + 'no_issues' => 'لم يتم العثور على مشكلات. يبدو جيدًا.', + 'original' => 'الأصل', + 'suggestion' => 'اقتراح', + 'apply' => 'تطبيق', + 'apply_all' => 'تطبيق الكل', + 'applied' => 'تم التطبيق', + 'cancel' => 'إلغاء', + ], + 'image_regenerate' => [ + 'button' => 'تعديل', + 'title' => 'تعديل صورة الذكاء الاصطناعي', + 'description' => 'صِف التصحيح. تحل الصورة الجديدة محل الحالية وتحتفظ بموضعها في العرض الدائري.', + 'instruction_label' => 'التعليمات', + 'instruction_placeholder' => 'مثال: صحّح الخطأ المطبعي في العنوان واجعل الخلفية أفتح.', + 'processing' => 'جارٍ إعادة إنشاء الصورة... قد يستغرق هذا بضع ثوانٍ.', + 'submit' => 'إعادة إنشاء الصورة', + 'cancel' => 'إلغاء', + 'success' => 'تم تحديث الصورة. حلّت النسخة الجديدة محل السابقة في منشورك.', + 'fallback_title' => 'تحسين نص هذه الصورة', + 'errors' => [ + 'required' => 'التعليمات مطلوبة.', + 'start_failed' => 'فشل بدء إعادة الإنشاء.', + 'unavailable' => 'تعذر إعادة إنشاء هذه الصورة الآن.', + 'timeout' => 'تستغرق إعادة الإنشاء وقتًا أطول من المتوقع. حاول مرة أخرى بعد لحظة.', + 'media_not_found' => 'لم يتم العثور على عنصر الوسائط.', + 'not_ai_media' => 'يمكن إعادة إنشاء الوسائط المُنشأة بالذكاء الاصطناعي فقط.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'منشور صورة', + 'description' => 'صورة بالذكاء الاصطناعي مع عنوان وتسمية توضيحية.', + ], + 'carousel' => [ + 'name' => 'عرض دائري', + 'description' => 'عرض دائري متعدد الشرائح مع تسمية توضيحية.', + ], + 'tweet_card' => [ + 'name' => 'بطاقة تغريدة', + 'description' => 'منشورك بتنسيق منشور X/Twitter.', + ], + 'tweet_card_image' => [ + 'name' => 'بطاقة تغريدة مع صورة', + 'description' => 'منشورك كبطاقة X/Twitter فوق صورة ضبابية.', + ], + ], + ], + + 'show' => [ + 'title' => 'تفاصيل المنشور', + 'edit' => 'تعديل', + 'back' => 'رجوع', + 'no_content' => 'لا توجد تسمية توضيحية', + 'platforms' => 'المنصات', + 'no_platforms' => 'لم يتم اختيار أي منصات.', + 'view_on_platform' => 'العرض على المنصة', + 'published_on' => 'نُشر في :date', + 'scheduled_for' => 'مجدول لـ :date', + 'draft' => 'مسودة', + 'status_pending' => 'قيد الانتظار', + 'metrics' => 'المقاييس', + 'metrics_loading' => 'جارٍ تحميل المقاييس…', + 'metrics_unavailable' => 'المقاييس غير متاحة لهذه المنصة بعد.', + 'metrics_empty' => 'لم تُرجَع أي مقاييس.', + ], + + 'edit' => [ + 'title' => 'تعديل المنشور', + 'view_title' => 'عرض المنشور', + 'labels' => 'التسميات', + 'no_labels' => 'لم يتم إنشاء تسميات بعد', + 'schedule' => 'جدولة', + 'pick_time' => 'اختر الوقت', + 'pick_time_past' => 'اختر تاريخًا ووقتًا مستقبليًا.', + 'post_now' => 'انشر الآن', + 'time' => 'الوقت', + 'cancel' => 'إلغاء', + 'delete' => 'حذف', + 'schedule_for' => 'جدولة لـ', + 'schedule_date' => 'تاريخ الجدولة', + 'unschedule' => 'إلغاء الجدولة', + 'saving' => 'جارٍ الحفظ...', + 'saved' => 'تم الحفظ', + 'draft' => 'مسودة', + 'media' => 'الوسائط', + 'add_media' => 'إضافة وسائط', + 'caption' => 'التسمية التوضيحية', + 'caption_placeholder' => 'اكتب التسمية التوضيحية...', + 'compose_title' => 'إنشاء منشور', + 'compose_subtitle' => 'اكتب رسالتك وأضِف الوسائط', + 'preview_empty' => [ + 'title' => 'لم يتم اختيار منصة', + 'description' => 'اختر منصة للنشر لرؤية المعاينة.', + ], + 'drop_zone_title' => 'إضافة وسائط', + 'drop_zone_subtitle' => 'اسحب الملفات وأفلتها أو انقر للتصفح', + 'add' => 'إضافة', + 'publish_to' => 'النشر إلى', + 'organize' => 'تنظيم', + 'signatures' => 'التوقيعات', + 'view_on_platform' => 'العرض على المنصة', + 'platform_status' => 'حالة المنصة', + 'compliance_incomplete' => 'بعض إعدادات المنصة غير مكتملة أو غير متوافقة مع الوسائط المرفقة.', + 'compliance' => [ + 'requires_content_or_media' => 'أضِف نصًا أو وسائط للنشر.', + 'requires_media' => 'أضِف صورة أو فيديو للنشر هنا.', + 'too_many_files' => 'مسموح بـ :max ملف فقط لهذا التنسيق.', + 'too_few_files' => 'أضِف :min ملف على الأقل لهذا التنسيق.', + 'no_videos' => 'يُسمح بالصور فقط لهذا التنسيق.', + 'no_images' => 'يُسمح بمقاطع الفيديو فقط لهذا التنسيق.', + 'no_mixed_media' => 'لا يمكن الجمع بين الصور ومقاطع الفيديو في نفس المنشور.', + 'no_gifs' => 'صور GIF غير مدعومة هنا.', + 'no_documents' => 'مستندات PDF غير مدعومة في هذا التنسيق.', + 'document_not_alone' => 'يجب نشر ملف PDF بمفرده، دون صور أو مقاطع فيديو أخرى.', + 'video_too_large' => 'يتجاوز الفيديو حد الحجم لهذه المنصة.', + 'video_too_long' => 'يجب أن تكون مدة الفيديو أقل من :seconds ثانية لهذا التنسيق.', + 'image_too_large' => 'تتجاوز الصورة حد الحجم لهذه المنصة.', + 'document_too_large' => 'يتجاوز ملف PDF حد الحجم لهذه المنصة.', + 'aspect_ratio_invalid' => 'نسبة العرض إلى الارتفاع غير مدعومة في هذا التنسيق.', + 'no_content_type' => 'اختر نوع محتوى لهذه المنصة.', + 'requires_text' => 'أضِف نصًا — يتطلب هذا التنسيق عنوانًا.', + ], + 'publishing' => 'جارٍ النشر...', + 'publishing_overlay_title' => 'جارٍ نشر منشورك', + 'publishing_overlay_subtitle' => 'قد يستغرق هذا بضع لحظات. يمكنك مغادرة هذه الصفحة بأمان.', + 'scheduled_overlay_title' => 'هذا المنشور مجدول', + 'scheduled_overlay_subtitle' => 'مجدول لـ :date. ألغِ جدولته أولًا لإجراء تغييرات.', + 'unschedule_cta' => 'ألغِ الجدولة للتعديل', + + 'tabs' => [ + 'preview' => 'معاينة', + 'channels' => 'القنوات', + 'comments' => 'التعليقات', + 'comments_empty' => 'لا توجد تعليقات بعد.', + ], + + 'media_picker' => [ + 'title' => 'اختر من المعرض', + 'search' => 'البحث في الوسائط...', + 'empty' => 'لا توجد وسائط في معرضك بعد', + 'cancel' => 'إلغاء', + 'add' => 'إضافة', + 'add_count' => 'إضافة :count', + ], + + 'emoji_picker' => [ + 'search' => 'البحث عن رمز تعبيري', + 'empty' => 'لم يتم العثور على رموز تعبيرية', + 'recent' => 'المستخدمة كثيرًا', + 'smileys' => 'الوجوه والمشاعر', + 'people' => 'الأشخاص والجسم', + 'nature' => 'الحيوانات والطبيعة', + 'food' => 'الطعام والشراب', + 'activities' => 'الأنشطة', + 'travel' => 'السفر والأماكن', + 'objects' => 'الأشياء', + 'symbols' => 'الرموز', + 'flags' => 'الأعلام', + ], + + 'status' => [ + 'pending' => 'قيد الانتظار', + 'scheduled' => 'مجدول', + 'published' => 'منشور', + 'publishing' => 'جارٍ النشر...', + 'retrying' => 'جارٍ إعادة المحاولة...', + 'failed' => 'فشل', + ], + + 'delete_modal' => [ + 'title' => 'حذف المنشور', + 'description' => 'هل أنت متأكد من رغبتك في حذف هذا المنشور؟ لا يمكن التراجع عن هذا الإجراء.', + 'action' => 'حذف', + 'cancel' => 'إلغاء', + ], + + 'sync_enable' => [ + 'title' => 'تفعيل المزامنة؟', + 'description' => 'ستشترك جميع المنصات في نفس المحتوى. سيتم استبدال أي تعديلات مخصصة أُجريت على منصات فردية بالمحتوى الحالي.', + 'cancel' => 'إلغاء', + 'action' => 'تفعيل المزامنة', + ], + + 'sync_disable' => [ + 'title' => 'تعطيل المزامنة؟', + 'description' => 'ستحتفظ كل منصة بمحتواها الحالي، لكن التعديلات المستقبلية ستُطبَّق فقط على المنصة التي تعدّلها.', + 'customize_note' => 'ستتمكن من تخصيص المحتوى لكل منصة على حدة.', + 'cancel' => 'إلغاء', + 'action' => 'تعطيل المزامنة', + ], + + 'platforms_dialog' => [ + 'title' => 'اختيار المنصات', + 'description' => 'اختر المنصات التي تريد نشر هذا المنشور عليها.', + ], + + 'signatures_modal' => [ + 'search' => 'البحث في التوقيعات...', + 'no_results' => 'لم يتم العثور على توقيعات.', + ], + + 'validation' => [ + 'select_board' => 'اختر لوحة', + 'images_not_supported' => 'الصور غير مدعومة', + 'videos_not_supported' => 'مقاطع الفيديو غير مدعومة', + 'max_images' => 'الحد الأقصى :count صور', + 'requires_media' => 'يتطلب وسائط', + 'requires_content' => 'المحتوى النصي مطلوب', + 'exceeded' => 'تجاوز :count', + 'does_not_support_images' => 'لا يدعم :platform الصور', + 'supports_up_to_images' => 'يدعم :platform حتى :count صور', + 'does_not_support_videos' => 'لا يدعم :platform مقاطع الفيديو', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'منشور', + 'description' => 'يظهر في خلاصتك وملفك الشخصي', + ], + 'instagram_reel' => [ + 'label' => 'ريل', + 'description' => 'فيديو قصير حتى 90 ثانية', + ], + 'instagram_story' => [ + 'label' => 'قصة', + 'description' => 'يختفي بعد 24 ساعة', + ], + 'linkedin_post' => [ + 'label' => 'منشور', + 'description' => 'منشور قياسي — صورة واحدة أو متعددة أو فيديو أو PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'منشور', + 'description' => 'منشور قياسي — صورة واحدة أو متعددة أو فيديو أو PDF', + ], + 'facebook_post' => [ + 'label' => 'منشور', + 'description' => 'منشور قياسي على صفحتك', + ], + 'facebook_reel' => [ + 'label' => 'ريل', + 'description' => 'فيديو قصير حتى 90 ثانية', + ], + 'facebook_story' => [ + 'label' => 'قصة', + 'description' => 'قصة فيديو عمودية، حتى 60 ثانية', + ], + 'tiktok_video' => [ + 'label' => 'فيديو', + 'description' => 'محتوى فيديو قصير', + ], + 'tiktok_photo' => [ + 'label' => 'عرض صور دائري', + 'description' => 'حتى 35 صورة كعرض دائري قابل للتمرير', + ], + 'youtube_short' => [ + 'label' => 'مقطع قصير', + 'description' => 'فيديو عمودي حتى 60 ثانية', + ], + 'x_post' => [ + 'label' => 'منشور', + 'description' => 'تغريدة بنص ووسائط', + ], + 'threads_post' => [ + 'label' => 'منشور', + 'description' => 'منشور نصي مع وسائط اختيارية', + ], + 'pinterest_pin' => [ + 'label' => 'دبوس', + 'description' => 'دبوس صورة قياسي', + ], + 'pinterest_video_pin' => [ + 'label' => 'دبوس فيديو', + 'description' => 'دبوس فيديو (4 ث - 15 د)', + ], + 'pinterest_carousel' => [ + 'label' => 'عرض دائري', + 'description' => 'عرض دائري متعدد الصور (2-5 صور)', + ], + 'bluesky_post' => [ + 'label' => 'منشور', + 'description' => 'منشور نصي مع صور اختيارية', + ], + 'mastodon_post' => [ + 'label' => 'منشور', + 'description' => 'منشور نصي مع وسائط اختيارية', + ], + 'telegram_post' => [ + 'label' => 'منشور', + 'description' => 'منشور نصي مع وسائط اختيارية', + ], + 'discord_message' => [ + 'label' => 'رسالة', + 'description' => 'رسالة إلى قناة Discord مع وسائط وتضمينات اختيارية', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'LinkedIn Page', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Facebook Page', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'تمت جدولة المنشور بنجاح!', + 'deleted' => 'تم حذف المنشور بنجاح!', + 'duplicated' => 'تم تكرار المنشور كمسودة.', + 'cannot_edit_finalized' => 'تمت معالجة هذا المنشور بالفعل ولا يمكن إعادة نشره. كرّره للمحاولة مرة أخرى.', + 'cannot_delete_published' => 'لا يمكن حذف المنشورات المنشورة.', + 'connect_first' => 'اربط شبكة اجتماعية واحدة على الأقل قبل إنشاء منشور.', + ], + + 'errors' => [ + 'account_disconnected' => 'الحساب الاجتماعي مفصول', + 'account_inactive' => 'الحساب الاجتماعي مُعطَّل', + 'account_token_expired' => 'انتهت جلسة الحساب الاجتماعي — يرجى إعادة الربط', + ], + + 'delete' => [ + 'title' => 'حذف المنشور؟', + 'description' => 'لا يمكن التراجع عن هذا الإجراء. ستتم إزالة المنشور وجميع وسائطه نهائيًا.', + 'confirm' => 'نعم، احذف', + 'cancel' => 'إلغاء', + ], + + 'create' => [ + 'title' => 'إنشاء منشور جديد', + 'description' => 'اختر كيف تريد البدء.', + 'scratch_title' => 'البدء من الصفر', + 'scratch_description' => 'افتح منشورًا فارغًا واكتب كل شيء بنفسك.', + 'ai_title' => 'الإنشاء بالذكاء الاصطناعي', + 'ai_description' => 'صِف ما تريده وينشئ الذكاء الاصطناعي المحتوى من أجلك.', + 'ai_configure_description' => 'اختر تنسيقًا وصِف المنشور الذي تريد إنشاءه.', + 'ai_pick_template_description' => 'اختر نمطًا لمنشورك المُنشأ بالذكاء الاصطناعي.', + 'template_title' => 'استخدام قالب', + 'template_description' => 'اختر من قوالبنا المنسّقة وخصّصها.', + 'coming_soon' => 'قريبًا', + + 'preview' => [ + 'image_title' => 'عنوان الصورة', + 'image_body' => 'نص الصورة', + ], + + 'steps' => [ + 'template_picker_title' => 'اختر نمطًا', + 'format_title' => 'اختر تنسيقًا', + 'format_description' => 'اختر نوع المنشور الذي تريد إنشاءه.', + 'account_title' => 'اختر حسابًا', + 'account_description' => 'اختر الحساب الاجتماعي للنشر إليه.', + 'media_title' => 'خيارات الوسائط', + 'media_carousel' => 'كم عدد الشرائح؟', + 'media_optional' => 'تضمين صور؟', + 'media_optional_label' => 'كم عدد الصور؟', + 'media_none' => 'بلا', + 'media_count_label' => 'عدد الصور', + 'prompt_title' => 'صِف منشورك', + 'prompt_label' => 'ما موضوع هذا المنشور؟', + 'prompt_placeholder' => 'مثال: الإعلان عن ميزة العرض الدائري الجديدة لدينا على Instagram', + 'preview_error' => 'حدث خطأ ما. يرجى المحاولة مرة أخرى.', + 'loading_page_title' => 'جارٍ إنشاء منشورك', + 'loading_eta' => 'الوقت المقدّر: حوالي :minutes.', + 'loading_eta_minute_one' => 'دقيقة واحدة', + 'loading_eta_minute_other' => ':count دقيقة', + 'loading_leave_title' => 'يمكنك متابعة عملك.', + 'loading_leave_body' => 'سنُعلمك عندما يصبح المنشور جاهزًا.', + 'loading_leave_cta' => 'الذهاب إلى التقويم', + 'loading_create_another_cta' => 'إنشاء منشور آخر', + 'loading_tip_credits' => 'تستخدم كل صورة بالذكاء الاصطناعي حوالي 15 من الرصيد.', + 'loading_tip_edit' => 'ستتمكن من تعديل كل شيء بمجرد أن يصبح المنشور جاهزًا.', + 'loading_tip_draft' => 'تصل المنشورات المُنشأة إلى مسوداتك.', + 'loading_tip_brand' => 'عدّل إعدادات علامتك التجارية للتأثير في المنشورات المستقبلية.', + 'loading_tip_carousel' => 'تقدّم العروض الدائرية شريحة واحدة لكل صورة مرفوعة.', + 'loading_tip_quality' => 'تم ضبط جودة الصورة لتحقيق توازن بين السرعة والتكلفة.', + 'create' => 'إنشاء منشور', + 'back' => 'رجوع', + 'next' => 'متابعة', + 'cancel' => 'إلغاء', + 'discard' => 'تجاهل', + 'retry' => 'إعادة المحاولة', + 'no_platforms' => 'لا توجد حسابات متصلة', + 'connect_first' => 'اربط حسابًا اجتماعيًا واحدًا على الأقل لاستخدام الإنشاء بالذكاء الاصطناعي.', + 'no_account_for_template' => 'اربط حسابًا متوافقًا لاستخدام هذا القالب.', + + 'format' => [ + 'instagram_feed' => 'منشور خلاصة Instagram', + 'instagram_carousel' => 'عرض Instagram الدائري', + 'linkedin_post' => 'منشور LinkedIn', + 'linkedin_page_post' => 'منشور صفحة LinkedIn', + 'x_post' => 'منشور X', + 'bluesky_post' => 'منشور Bluesky', + 'threads_post' => 'منشور Threads', + 'mastodon_post' => 'منشور Mastodon', + 'telegram_post' => 'منشور Telegram', + 'discord_message' => 'رسالة Discord', + 'facebook_post' => 'منشور Facebook', + 'pinterest_pin' => 'دبوس Pinterest', + 'instagram_story' => 'قصة Instagram', + 'facebook_story' => 'قصة Facebook', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'اختر قالبًا', + 'browser_description' => 'ابدأ من قالب منسّق وكيّفه.', + 'search_placeholder' => 'البحث في القوالب…', + 'no_search_results' => 'لا توجد قوالب مطابقة لبحثك', + 'try_different_search' => 'جرّب كلمة مختلفة أو امسح البحث.', + 'slides_count' => '{count} شرائح|{count} شريحة|{count} شريحتان|{count} شرائح|{count} شريحة|{count} شريحة', + 'all_platforms' => 'جميع المنصات', + 'platform_search_placeholder' => 'البحث عن منصة…', + 'no_platform_match' => 'لا توجد منصة مطابقة.', + 'use_this' => 'استخدام هذا القالب', + 'no_templates' => 'لا توجد قوالب متاحة.', + 'applying' => 'جارٍ تطبيق القالب…', + 'category' => [ + 'product_launch' => 'إطلاق منتج', + 'promotion' => 'ترويج', + 'educational' => 'تعليمي', + 'behind_the_scenes' => 'خلف الكواليس', + 'testimonial' => 'شهادة', + 'industry_tip' => 'نصيحة في المجال', + 'event' => 'فعالية', + 'engagement' => 'تفاعل', + ], + ], +]; diff --git a/lang/ar/settings.php b/lang/ar/settings.php new file mode 100644 index 00000000..9983ee20 --- /dev/null +++ b/lang/ar/settings.php @@ -0,0 +1,356 @@ + 'الإعدادات', + 'description' => 'إدارة ملفك الشخصي وإعدادات حسابك', + + 'hub' => [ + 'title' => 'الإعدادات', + 'description' => 'اختر ما تريد إدارته.', + 'profile' => [ + 'title' => 'الملف الشخصي', + 'description' => 'حدّث معلوماتك الشخصية وكلمة المرور وتفضيلات الإشعارات.', + ], + 'workspace' => [ + 'title' => 'مساحة العمل', + 'description' => 'اضبط مساحة عملك وعلامتك التجارية والأعضاء ومفاتيح API.', + ], + 'account' => [ + 'title' => 'الحساب', + 'description' => 'إدارة معلومات حسابك واستخدامك والفوترة.', + ], + ], + + 'nav' => [ + 'profile' => 'الملف الشخصي', + 'authentication' => 'المصادقة', + 'workspace' => 'مساحة العمل', + 'members' => 'الأعضاء', + 'notifications' => 'الإشعارات', + 'billing' => 'الفوترة', + ], + + 'notifications' => [ + 'title' => 'تفضيلات الإشعارات', + 'heading' => 'إشعارات البريد الإلكتروني', + 'description' => 'اختر إشعارات البريد الإلكتروني التي تريد استلامها', + 'post_published' => 'تم نشر المنشور', + 'post_published_description' => 'استلم بريدًا إلكترونيًا عند نشر منشورك بنجاح', + 'post_failed' => 'فشل نشر المنشور', + 'post_failed_description' => 'استلم بريدًا إلكترونيًا عند فشل نشر منشورك', + 'account_disconnected' => 'تم فصل الحساب', + 'account_disconnected_description' => 'استلم بريدًا إلكترونيًا عند فصل حساب اجتماعي', + 'save' => 'حفظ التفضيلات', + ], + + 'profile' => [ + 'title' => 'إعدادات الملف الشخصي', + 'photo_heading' => 'الصورة الشخصية', + 'photo_description' => 'ارفع صورة شخصية', + 'heading' => 'معلومات الملف الشخصي', + 'description' => 'حدّث اسمك وبريدك الإلكتروني', + 'avatar' => 'الصورة الرمزية', + 'name' => 'الاسم', + 'name_placeholder' => 'الاسم الكامل', + 'email' => 'البريد الإلكتروني', + 'email_placeholder' => 'البريد الإلكتروني', + 'email_unverified' => 'لم يتم تأكيد بريدك الإلكتروني.', + 'resend_verification' => 'انقر هنا لإعادة إرسال بريد التأكيد.', + 'verification_sent' => 'تم إرسال رابط تأكيد جديد إلى بريدك الإلكتروني.', + 'save' => 'حفظ', + ], + + 'authentication' => [ + 'title' => 'المصادقة', + 'page_title' => 'إعدادات المصادقة', + 'sessions' => [ + 'title' => 'الجلسات النشطة', + 'description' => 'إذا لاحظت أي شيء مريب، سجّل الخروج من الأجهزة الأخرى.', + 'unknown_browser' => 'متصفح غير معروف', + 'unknown_ip' => 'عنوان IP غير معروف', + 'on' => 'على', + 'active_now' => 'نشط الآن', + 'log_out_others' => 'تسجيل الخروج من الأجهزة الأخرى', + 'modal_title' => 'تسجيل الخروج من الأجهزة الأخرى', + 'modal_description_password' => 'أدخل كلمة المرور الحالية لتأكيد رغبتك في تسجيل الخروج من جلسات المتصفح الأخرى.', + 'modal_description_email' => 'اكتب بريدك الإلكتروني لتأكيد رغبتك في تسجيل الخروج من جلسات المتصفح الأخرى.', + 'password_placeholder' => 'كلمة المرور الحالية', + 'email_placeholder' => 'بريد حسابك الإلكتروني', + 'cancel' => 'إلغاء', + 'submit' => 'تسجيل الخروج من الأجهزة الأخرى', + 'email_mismatch' => 'البريد الإلكتروني لا يطابق حسابك.', + 'flash_logged_out' => 'تم تسجيل خروجك من الأجهزة الأخرى.', + ], + 'password' => [ + 'update_title' => 'تحديث كلمة المرور', + 'set_title' => 'تعيين كلمة مرور', + 'update_description' => 'تأكد من أن حسابك يستخدم كلمة مرور طويلة وعشوائية للحفاظ على أمانه.', + 'set_description' => 'أضِف كلمة مرور لتتمكن من تسجيل الدخول دون مزوّد متصل.', + 'current_password' => 'كلمة المرور الحالية', + 'new_password' => 'كلمة المرور الجديدة', + 'confirm_password' => 'تأكيد كلمة المرور', + 'save' => 'حفظ كلمة المرور', + 'set' => 'تعيين كلمة المرور', + ], + 'providers' => [ + 'title' => 'الحسابات المتصلة', + 'description' => 'سجّل الدخول بشكل أسرع عبر هؤلاء المزوّدين المتصلين.', + 'connected' => 'متصل', + 'not_connected' => 'غير متصل', + 'connect' => 'ربط', + 'disconnect' => 'فصل', + 'flash_disconnected' => 'تم فصل :provider بنجاح.', + 'flash_connected' => 'تم ربط :provider بنجاح.', + 'flash_already_linked' => 'حساب :provider هذا مرتبط بالفعل بمستخدم آخر.', + 'flash_cannot_disconnect' => 'لا يمكنك فصل طريقة تسجيل الدخول الوحيدة لديك. عيّن كلمة مرور أو اربط مزوّدًا آخر أولًا.', + ], + ], + + 'delete_account' => [ + 'heading' => 'حذف الحساب', + 'description' => 'احذف حسابك وجميع موارده', + 'warning' => 'تحذير', + 'warning_message' => 'يرجى المتابعة بحذر، لا يمكن التراجع عن هذا الإجراء.', + 'button' => 'حذف الحساب', + 'modal_title' => 'هل أنت متأكد من رغبتك في حذف حسابك؟', + 'modal_description_password' => 'بمجرد حذف حسابك، ستُحذف جميع موارده وبياناته نهائيًا أيضًا. يرجى إدخال كلمة المرور للتأكيد.', + 'modal_description_email' => 'بمجرد حذف حسابك، ستُحذف جميع موارده وبياناته نهائيًا أيضًا. يرجى كتابة بريدك الإلكتروني :email للتأكيد.', + 'password' => 'كلمة المرور', + 'password_placeholder' => 'كلمة المرور', + 'email_placeholder' => 'بريد حسابك الإلكتروني', + 'email_mismatch' => 'البريد الإلكتروني لا يطابق حسابك.', + 'cancel' => 'إلغاء', + 'confirm' => 'حذف الحساب', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'مساحة العمل', + 'brand' => 'العلامة التجارية', + 'users' => 'الأعضاء', + 'api_keys' => 'مفاتيح API', + ], + 'title' => 'إعدادات مساحة العمل', + 'logo_heading' => 'شعار مساحة العمل', + 'logo_description' => 'ارفع شعارًا لمساحة عملك', + 'heading' => 'اسم مساحة العمل', + 'description' => 'حدّث اسم مساحة عملك', + 'members_heading' => 'الأعضاء', + 'members_description' => 'إدارة أعضاء مساحة العمل والدعوات', + 'name' => 'الاسم', + 'name_placeholder' => 'مساحة عملي', + 'save' => 'حفظ', + ], + + 'brand' => [ + 'title' => 'العلامة التجارية', + 'description' => 'اضبط هوية علامتك التجارية للمحتوى المُنشأ بالذكاء الاصطناعي.', + 'name' => 'اسم مساحة العمل', + 'name_placeholder' => 'علامتي التجارية', + 'website' => 'الموقع الإلكتروني', + 'website_placeholder' => 'https://yourbrand.com', + 'brand_description' => 'الوصف', + 'brand_description_placeholder' => 'أخبرنا عن علامتك التجارية، وما تفعله، ومن هو جمهورك...', + 'voice' => 'صوت العلامة التجارية', + 'voice_description' => 'اختر السمات التي تحدد أسلوب محتواك.', + 'voice_group' => [ + 'pov' => 'وجهة النظر', + 'formality' => 'الرسمية', + 'energy' => 'الحيوية', + 'humor' => 'الفكاهة', + 'attitude' => 'الموقف', + 'warmth' => 'الدفء', + 'confidence' => 'الثقة', + 'style' => 'الأسلوب', + ], + 'voice_trait' => [ + 'first_person' => 'ضمير المتكلم', + 'second_person' => 'ضمير المخاطب (أنت)', + 'third_person' => 'ضمير الغائب', + 'formal' => 'رسمي', + 'balanced' => 'متوازن', + 'casual' => 'غير رسمي', + 'calm' => 'هادئ', + 'moderate' => 'معتدل', + 'enthusiastic' => 'متحمس', + 'vibrant' => 'نابض بالحيوية', + 'serious' => 'جاد', + 'dry' => 'ساخر / خفيّ', + 'witty' => 'ذكي', + 'playful' => 'مرح', + 'respectful' => 'محترم', + 'even_handed' => 'محايد ومنصف', + 'bold' => 'جريء', + 'provocative' => 'مثير للجدل', + 'neutral' => 'محايد', + 'friendly' => 'ودود', + 'empathetic' => 'متعاطف', + 'humble' => 'متواضع', + 'confident' => 'واثق', + 'assertive' => 'حازم', + 'direct' => 'مباشر', + 'concise' => 'موجز', + 'transparent' => 'شفاف', + 'no_hype' => 'بلا مبالغة', + 'practical' => 'عملي', + 'data_driven' => 'مبني على البيانات', + 'storytelling' => 'سرد القصص', + 'inspirational' => 'ملهم', + 'educational' => 'تعليمي', + 'technical' => 'تقني', + 'minimalist' => 'رموز تعبيرية قليلة', + ], + 'brand_color' => 'لون العلامة التجارية', + 'background_color' => 'لون الخلفية', + 'text_color' => 'لون النص', + 'font' => 'الخط', + 'image_style' => 'نمط الصور', + 'image_style_description' => 'النمط المرئي المطبَّق عند إنشاء صور الشرائح والأغلفة لمنشورات الذكاء الاصطناعي.', + 'image_style_cinematic' => 'سينمائي', + 'image_style_illustration' => 'رسم توضيحي', + 'image_style_isometric_3d' => 'متساوي القياس', + 'image_style_cartoon' => 'كرتوني', + 'image_style_typographic' => 'طباعي', + 'image_style_infographic' => 'إنفوغرافيك', + 'image_style_minimalist' => 'بسيط', + 'image_style_mockup' => 'نموذج أوّلي', + 'content_language' => 'لغة المحتوى', + 'content_language_description' => 'اللغة المستخدمة في التسميات التوضيحية والوسوم المُنشأة بالذكاء الاصطناعي وأي نص داخل الصور أو مقاطع الفيديو المُنشأة.', + ], + + 'members' => [ + 'title' => 'الأعضاء', + 'heading' => 'أعضاء الفريق', + 'description' => 'إدارة الأعضاء والدعوات لمساحة العمل هذه', + + 'cancel' => 'إلغاء', + 'remove' => 'إزالة', + 'make_role' => 'تعيين كـ:role', + + 'invite' => [ + 'title' => 'دعوة عضو', + 'description' => 'أرسل دعوة عبر البريد الإلكتروني لإضافة متعاونين', + 'email' => 'البريد الإلكتروني', + 'email_placeholder' => 'collaborator@email.com', + 'role' => 'الدور', + 'role_placeholder' => 'اختر دورًا', + 'submit' => 'إرسال الدعوة', + ], + + 'pending' => [ + 'title' => 'الدعوات المعلقة', + 'description' => 'دعوات في انتظار القبول', + 'empty' => 'لا توجد دعوات معلقة', + ], + + 'list' => [ + 'title' => 'الأعضاء', + 'description' => 'الأشخاص الذين لديهم وصول إلى مساحة العمل هذه', + 'empty' => 'لا يوجد أعضاء غير المالك', + ], + + 'remove_modal' => [ + 'title' => 'إزالة عضو', + 'description' => 'هل أنت متأكد من رغبتك في إزالة هذا العضو من مساحة العمل؟ سيفقد الوصول إلى جميع موارد مساحة العمل.', + 'action' => 'إزالة العضو', + ], + + 'cancel_invite_modal' => [ + 'title' => 'إلغاء الدعوة', + 'description' => 'هل أنت متأكد من رغبتك في إلغاء هذه الدعوة؟', + 'action' => 'إلغاء الدعوة', + ], + + 'roles' => [ + 'owner' => 'المالك', + 'admin' => 'مشرف', + 'member' => 'عضو', + 'viewer' => 'مشاهد', + ], + + 'flash' => [ + 'invite_sent' => 'تم إرسال الدعوة بنجاح!', + 'invite_deleted' => 'تم حذف الدعوة.', + 'member_removed' => 'تمت إزالة العضو بنجاح.', + 'role_updated' => 'تم تحديث دور العضو.', + 'wrong_email' => 'هذه الدعوة مخصصة لبريد إلكتروني مختلف.', + 'already_member' => 'أنت عضو بالفعل في مساحة العمل هذه.', + 'invite_accepted' => 'مرحبًا! أنت الآن عضو في مساحة العمل.', + 'invite_declined' => 'تم رفض الدعوة.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'الحساب', + 'usage' => 'الاستخدام', + 'billing' => 'الفوترة', + ], + 'title' => 'إعدادات الحساب', + 'description' => 'إدارة اسم حسابك والبريد الإلكتروني للفوترة', + 'name' => 'اسم الحساب', + 'name_placeholder' => 'شركتي', + 'billing_email' => 'البريد الإلكتروني للفوترة', + 'billing_email_placeholder' => 'billing@company.com', + 'billing_email_hint' => 'سيُستخدم هذا البريد الإلكتروني للفواتير ومراسلات الفوترة من Stripe.', + 'submit' => 'حفظ', + ], + + 'flash' => [ + 'account_updated' => 'تم تحديث الحساب بنجاح!', + 'profile_updated' => 'تم تحديث الملف الشخصي بنجاح!', + 'password_updated' => 'تم تحديث كلمة المرور بنجاح!', + 'workspace_updated' => 'تم تحديث الإعدادات بنجاح!', + 'photo_updated' => 'تم تحديث الصورة بنجاح!', + 'photo_deleted' => 'تمت إزالة الصورة بنجاح!', + 'logo_updated' => 'تم رفع الشعار بنجاح!', + 'logo_deleted' => 'تمت إزالة الشعار بنجاح!', + 'notifications_updated' => 'تم تحديث تفضيلات الإشعارات!', + ], + + 'api_keys' => [ + 'title' => 'مفاتيح API', + 'page_title' => 'مفاتيح API', + 'heading' => 'مفاتيح API', + 'description' => 'إدارة مفاتيح API للوصول البرمجي إلى مساحة عملك.', + 'create' => 'إنشاء مفتاح API', + 'copy' => 'نسخ', + 'new_token_message' => 'تم إنشاء مفتاح API الجديد. انسخه الآن — لن تتمكن من رؤيته مرة أخرى.', + 'table' => [ + 'name' => 'الاسم', + 'key' => 'المفتاح', + 'status' => 'الحالة', + 'expires' => 'ينتهي في', + 'last_used' => 'آخر استخدام', + 'never' => 'أبدًا', + ], + 'actions' => [ + 'copy_id' => 'نسخ معرّف مفتاح API', + 'copy_id_success' => 'تم نسخ معرّف مفتاح API إلى الحافظة', + 'delete' => 'حذف', + ], + 'empty' => [ + 'title' => 'لا توجد مفاتيح API بعد', + 'description' => 'أنشئ مفتاح API للوصول إلى مساحة عملك برمجيًا.', + ], + 'delete_modal' => [ + 'title' => 'حذف مفتاح API', + 'description' => 'هل أنت متأكد من رغبتك في حذف مفتاح API هذا؟ ستفقد أي تطبيقات تستخدم هذا المفتاح الوصول فورًا.', + 'action' => 'حذف مفتاح API', + ], + 'create_dialog' => [ + 'title' => 'إنشاء مفتاح API', + 'description' => 'أنشئ مفتاح API جديدًا للوصول البرمجي إلى مساحة عملك.', + 'name' => 'الاسم', + 'name_placeholder' => 'مثال: مفتاح API للإنتاج', + 'expires' => 'تاريخ الانتهاء (اختياري)', + 'expires_placeholder' => 'بلا انتهاء', + 'submit' => 'إنشاء', + 'cancel' => 'إلغاء', + ], + 'flash' => [ + 'created' => 'تم إنشاء مفتاح API بنجاح!', + 'deleted' => 'تم حذف مفتاح API بنجاح!', + ], + ], +]; diff --git a/lang/ar/sidebar.php b/lang/ar/sidebar.php new file mode 100644 index 00000000..a9587e13 --- /dev/null +++ b/lang/ar/sidebar.php @@ -0,0 +1,61 @@ + 'مساحات العمل', + 'select_workspace' => 'اختر مساحة العمل', + 'create_workspace' => 'إنشاء مساحة عمل', + 'create_post' => 'إنشاء منشور', + 'profile' => 'الملف الشخصي', + 'log_out' => 'تسجيل الخروج', + + 'workspace' => 'مساحة العمل: :name', + 'workspace_select' => 'مساحة العمل: اختر', + + 'theme' => 'المظهر: :name', + 'theme_light' => 'فاتح', + 'theme_dark' => 'داكن', + 'theme_system' => 'النظام', + + 'language' => 'اللغة: :name', + 'language_select' => 'اللغة: اختر', + + 'groups' => [ + 'posts' => 'المنشورات', + 'workspace' => 'مساحة العمل', + 'others' => 'أخرى', + ], + + 'analytics' => 'التحليلات', + 'automations' => 'الأتمتة', + 'settings' => 'الإعدادات', + + 'posts' => [ + 'calendar' => 'التقويم', + 'all' => 'الكل', + 'scheduled' => 'المجدولة', + 'posted' => 'المنشورة', + 'drafts' => 'المسودات', + ], + + 'workspace' => [ + 'connections' => 'الاتصالات', + 'signatures' => 'التوقيعات', + 'labels' => 'التسميات', + 'assets' => 'الوسائط', + 'api_keys' => 'مفاتيح API', + ], + + 'notifications' => 'الإشعارات', + 'mark_all_read' => 'تعليم الكل كمقروء', + 'mark_as_read' => 'تعليم كمقروء', + 'archive_all' => 'أرشفة الكل', + 'no_notifications' => 'لا توجد إشعارات', + + 'support' => [ + 'docs' => 'التوثيق', + 'referral' => 'اربح عمولة إحالة 30%', + 'stay_updated' => 'ابقَ على اطلاع', + ], +]; diff --git a/lang/ar/signatures.php b/lang/ar/signatures.php new file mode 100644 index 00000000..9b79ee28 --- /dev/null +++ b/lang/ar/signatures.php @@ -0,0 +1,59 @@ + 'التوقيعات', + 'description' => 'أنشئ توقيعات قابلة لإعادة الاستخدام لإضافتها بسرعة إلى منشوراتك', + 'search' => 'البحث في التوقيعات...', + 'new' => 'توقيع جديد', + 'empty_title' => 'لا توجد توقيعات بعد', + 'empty_description' => 'أنشئ توقيعات لإضافة الوسوم أو الروابط أو أي نص قابل لإعادة الاستخدام إلى منشوراتك بسرعة', + 'no_search_results' => 'لا توجد توقيعات مطابقة لبحثك', + 'try_different_search' => 'جرّب كلمة مختلفة أو امسح البحث.', + 'table' => [ + 'name' => 'الاسم', + 'content' => 'المحتوى', + 'created_at' => 'تاريخ الإنشاء', + ], + + 'actions' => [ + 'edit' => 'تعديل التوقيع', + 'delete' => 'حذف التوقيع', + ], + + 'create' => [ + 'title' => 'إنشاء توقيع', + 'description' => 'امنح توقيعك اسمًا والمحتوى الذي تريد إضافته (وسوم، روابط، نص مخصص — أي شيء تعيد استخدامه).', + 'name' => 'الاسم', + 'name_placeholder' => 'مثال: التسويق، السفر، توقيع العلامة التجارية', + 'content' => 'المحتوى', + 'content_placeholder' => "#marketing #socialmedia\nاعرف المزيد: https://yourbrand.com", + 'content_hint' => 'وسوم، روابط، مقدمات مخصصة، توقيعات — أي شيء تضيفه إلى المنشورات.', + 'submit' => 'إنشاء توقيع', + 'submitting' => 'جارٍ الإنشاء...', + ], + + 'edit' => [ + 'title' => 'تعديل التوقيع', + 'description' => 'تحديث اسم ومحتوى هذا التوقيع.', + 'name' => 'الاسم', + 'name_placeholder' => 'مثال: التسويق، السفر، توقيع العلامة التجارية', + 'content' => 'المحتوى', + 'content_placeholder' => "#marketing #socialmedia\nاعرف المزيد: https://yourbrand.com", + 'content_hint' => 'وسوم، روابط، مقدمات مخصصة، توقيعات — أي شيء تضيفه إلى المنشورات.', + 'submit' => 'حفظ التغييرات', + 'submitting' => 'جارٍ الحفظ...', + ], + + 'delete' => [ + 'title' => 'حذف التوقيع', + 'description' => 'هل أنت متأكد من رغبتك في حذف هذا التوقيع؟ لا يمكن التراجع عن هذا الإجراء.', + 'confirm' => 'حذف', + 'cancel' => 'إلغاء', + ], + + 'flash' => [ + 'created' => 'تم إنشاء التوقيع.', + 'updated' => 'تم تحديث التوقيع.', + 'deleted' => 'تم حذف التوقيع.', + ], +]; diff --git a/lang/ar/usage.php b/lang/ar/usage.php new file mode 100644 index 00000000..fb709054 --- /dev/null +++ b/lang/ar/usage.php @@ -0,0 +1,15 @@ + 'الاستخدام', + + 'section_account' => 'الحساب', + 'section_account_description' => 'الحصص والحدود الخاصة بخطتك.', + 'section_ai' => 'رصيد الذكاء الاصطناعي', + 'section_ai_description' => 'يُخصم الرصيد عند استخدام ميزات الذكاء الاصطناعي. يتم تجديده في اليوم الأول من كل شهر.', + + 'workspaces' => 'مساحات العمل', + 'social_accounts' => 'الحسابات الاجتماعية', + 'members' => 'الأعضاء', + 'credits' => 'الرصيد', +]; diff --git a/lang/ar/validation.php b/lang/ar/validation.php new file mode 100644 index 00000000..7cde7426 --- /dev/null +++ b/lang/ar/validation.php @@ -0,0 +1,200 @@ + 'يجب قبول حقل :attribute.', + 'accepted_if' => 'يجب قبول حقل :attribute عندما يكون :other مساويًا لـ :value.', + 'active_url' => 'يجب أن يكون حقل :attribute رابطًا صالحًا.', + 'after' => 'يجب أن يكون حقل :attribute تاريخًا لاحقًا لـ :date.', + 'after_or_equal' => 'يجب أن يكون حقل :attribute تاريخًا لاحقًا لـ :date أو مساويًا له.', + 'alpha' => 'يجب أن يحتوي حقل :attribute على أحرف فقط.', + 'alpha_dash' => 'يجب أن يحتوي حقل :attribute على أحرف وأرقام وشرطات وشرطات سفلية فقط.', + 'alpha_num' => 'يجب أن يحتوي حقل :attribute على أحرف وأرقام فقط.', + 'any_of' => 'حقل :attribute غير صالح.', + 'array' => 'يجب أن يكون حقل :attribute مصفوفة.', + 'ascii' => 'يجب أن يحتوي حقل :attribute على أحرف ورموز أحادية البايت فقط.', + 'before' => 'يجب أن يكون حقل :attribute تاريخًا سابقًا لـ :date.', + 'before_or_equal' => 'يجب أن يكون حقل :attribute تاريخًا سابقًا لـ :date أو مساويًا له.', + 'between' => [ + 'array' => 'يجب أن يحتوي حقل :attribute على عدد عناصر بين :min و:max.', + 'file' => 'يجب أن يكون حجم حقل :attribute بين :min و:max كيلوبايت.', + 'numeric' => 'يجب أن تكون قيمة حقل :attribute بين :min و:max.', + 'string' => 'يجب أن يكون طول حقل :attribute بين :min و:max حرفًا.', + ], + 'boolean' => 'يجب أن تكون قيمة حقل :attribute صحيحة أو خاطئة.', + 'can' => 'يحتوي حقل :attribute على قيمة غير مصرّح بها.', + 'confirmed' => 'تأكيد حقل :attribute غير مطابق.', + 'contains' => 'حقل :attribute يفتقد إلى قيمة مطلوبة.', + 'current_password' => 'كلمة المرور غير صحيحة.', + 'date' => 'يجب أن يكون حقل :attribute تاريخًا صالحًا.', + 'date_equals' => 'يجب أن يكون حقل :attribute تاريخًا مساويًا لـ :date.', + 'date_format' => 'يجب أن يطابق حقل :attribute التنسيق :format.', + 'decimal' => 'يجب أن يحتوي حقل :attribute على :decimal منزلة عشرية.', + 'declined' => 'يجب رفض حقل :attribute.', + 'declined_if' => 'يجب رفض حقل :attribute عندما يكون :other مساويًا لـ :value.', + 'different' => 'يجب أن يختلف حقل :attribute عن :other.', + 'digits' => 'يجب أن يتكوّن حقل :attribute من :digits رقمًا.', + 'digits_between' => 'يجب أن يتكوّن حقل :attribute من عدد أرقام بين :min و:max.', + 'dimensions' => 'أبعاد صورة حقل :attribute غير صالحة.', + 'distinct' => 'يحتوي حقل :attribute على قيمة مكرّرة.', + 'doesnt_contain' => 'يجب ألا يحتوي حقل :attribute على أي مما يلي: :values.', + 'doesnt_end_with' => 'يجب ألا ينتهي حقل :attribute بأي مما يلي: :values.', + 'doesnt_start_with' => 'يجب ألا يبدأ حقل :attribute بأي مما يلي: :values.', + 'email' => 'يجب أن يكون حقل :attribute بريدًا إلكترونيًا صالحًا.', + 'encoding' => 'يجب أن يكون ترميز حقل :attribute بصيغة :encoding.', + 'ends_with' => 'يجب أن ينتهي حقل :attribute بأحد ما يلي: :values.', + 'enum' => 'قيمة :attribute المحدّدة غير صالحة.', + 'exists' => 'قيمة :attribute المحدّدة غير صالحة.', + 'extensions' => 'يجب أن يحمل حقل :attribute أحد الامتدادات التالية: :values.', + 'file' => 'يجب أن يكون حقل :attribute ملفًا.', + 'filled' => 'يجب أن يحتوي حقل :attribute على قيمة.', + 'gt' => [ + 'array' => 'يجب أن يحتوي حقل :attribute على أكثر من :value عنصرًا.', + 'file' => 'يجب أن يكون حجم حقل :attribute أكبر من :value كيلوبايت.', + 'numeric' => 'يجب أن تكون قيمة حقل :attribute أكبر من :value.', + 'string' => 'يجب أن يكون طول حقل :attribute أكبر من :value حرفًا.', + ], + 'gte' => [ + 'array' => 'يجب أن يحتوي حقل :attribute على :value عنصرًا أو أكثر.', + 'file' => 'يجب أن يكون حجم حقل :attribute أكبر من :value كيلوبايت أو مساويًا له.', + 'numeric' => 'يجب أن تكون قيمة حقل :attribute أكبر من :value أو مساوية له.', + 'string' => 'يجب أن يكون طول حقل :attribute أكبر من :value حرفًا أو مساويًا له.', + ], + 'hex_color' => 'يجب أن يكون حقل :attribute لونًا سداسيًا صالحًا.', + 'image' => 'يجب أن يكون حقل :attribute صورة.', + 'in' => 'قيمة :attribute المحدّدة غير صالحة.', + 'in_array' => 'يجب أن يكون حقل :attribute موجودًا في :other.', + 'in_array_keys' => 'يجب أن يحتوي حقل :attribute على واحد على الأقل من المفاتيح التالية: :values.', + 'integer' => 'يجب أن يكون حقل :attribute عددًا صحيحًا.', + 'ip' => 'يجب أن يكون حقل :attribute عنوان IP صالحًا.', + 'ipv4' => 'يجب أن يكون حقل :attribute عنوان IPv4 صالحًا.', + 'ipv6' => 'يجب أن يكون حقل :attribute عنوان IPv6 صالحًا.', + 'json' => 'يجب أن يكون حقل :attribute نص JSON صالحًا.', + 'list' => 'يجب أن يكون حقل :attribute قائمة.', + 'lowercase' => 'يجب أن يكون حقل :attribute بأحرف صغيرة.', + 'lt' => [ + 'array' => 'يجب أن يحتوي حقل :attribute على أقل من :value عنصرًا.', + 'file' => 'يجب أن يكون حجم حقل :attribute أقل من :value كيلوبايت.', + 'numeric' => 'يجب أن تكون قيمة حقل :attribute أقل من :value.', + 'string' => 'يجب أن يكون طول حقل :attribute أقل من :value حرفًا.', + ], + 'lte' => [ + 'array' => 'يجب ألا يحتوي حقل :attribute على أكثر من :value عنصرًا.', + 'file' => 'يجب أن يكون حجم حقل :attribute أقل من :value كيلوبايت أو مساويًا له.', + 'numeric' => 'يجب أن تكون قيمة حقل :attribute أقل من :value أو مساوية له.', + 'string' => 'يجب أن يكون طول حقل :attribute أقل من :value حرفًا أو مساويًا له.', + ], + 'mac_address' => 'يجب أن يكون حقل :attribute عنوان MAC صالحًا.', + 'max' => [ + 'array' => 'يجب ألا يحتوي حقل :attribute على أكثر من :max عنصرًا.', + 'file' => 'يجب ألا يزيد حجم حقل :attribute عن :max كيلوبايت.', + 'numeric' => 'يجب ألا تزيد قيمة حقل :attribute عن :max.', + 'string' => 'يجب ألا يزيد طول حقل :attribute عن :max حرفًا.', + ], + 'max_digits' => 'يجب ألا يحتوي حقل :attribute على أكثر من :max رقمًا.', + 'mimes' => 'يجب أن يكون حقل :attribute ملفًا من نوع: :values.', + 'mimetypes' => 'يجب أن يكون حقل :attribute ملفًا من نوع: :values.', + 'min' => [ + 'array' => 'يجب أن يحتوي حقل :attribute على :min عنصرًا على الأقل.', + 'file' => 'يجب أن يكون حجم حقل :attribute :min كيلوبايت على الأقل.', + 'numeric' => 'يجب أن تكون قيمة حقل :attribute :min على الأقل.', + 'string' => 'يجب أن يكون طول حقل :attribute :min حرفًا على الأقل.', + ], + 'min_digits' => 'يجب أن يحتوي حقل :attribute على :min رقمًا على الأقل.', + 'missing' => 'يجب أن يكون حقل :attribute غير موجود.', + 'missing_if' => 'يجب أن يكون حقل :attribute غير موجود عندما يكون :other مساويًا لـ :value.', + 'missing_unless' => 'يجب أن يكون حقل :attribute غير موجود ما لم يكن :other مساويًا لـ :value.', + 'missing_with' => 'يجب أن يكون حقل :attribute غير موجود عند وجود :values.', + 'missing_with_all' => 'يجب أن يكون حقل :attribute غير موجود عند وجود :values.', + 'multiple_of' => 'يجب أن تكون قيمة حقل :attribute من مضاعفات :value.', + 'not_in' => 'قيمة :attribute المحدّدة غير صالحة.', + 'not_regex' => 'صيغة حقل :attribute غير صالحة.', + 'numeric' => 'يجب أن يكون حقل :attribute رقمًا.', + 'password' => [ + 'letters' => 'يجب أن يحتوي حقل :attribute على حرف واحد على الأقل.', + 'mixed' => 'يجب أن يحتوي حقل :attribute على حرف كبير وحرف صغير على الأقل.', + 'numbers' => 'يجب أن يحتوي حقل :attribute على رقم واحد على الأقل.', + 'symbols' => 'يجب أن يحتوي حقل :attribute على رمز واحد على الأقل.', + 'uncompromised' => 'ظهر حقل :attribute المُدخل في تسريب بيانات. يرجى اختيار :attribute مختلف.', + ], + 'present' => 'يجب أن يكون حقل :attribute موجودًا.', + 'present_if' => 'يجب أن يكون حقل :attribute موجودًا عندما يكون :other مساويًا لـ :value.', + 'present_unless' => 'يجب أن يكون حقل :attribute موجودًا ما لم يكن :other مساويًا لـ :value.', + 'present_with' => 'يجب أن يكون حقل :attribute موجودًا عند وجود :values.', + 'present_with_all' => 'يجب أن يكون حقل :attribute موجودًا عند وجود :values.', + 'prohibited' => 'حقل :attribute محظور.', + 'prohibited_if' => 'حقل :attribute محظور عندما يكون :other مساويًا لـ :value.', + 'prohibited_if_accepted' => 'حقل :attribute محظور عند قبول :other.', + 'prohibited_if_declined' => 'حقل :attribute محظور عند رفض :other.', + 'prohibited_unless' => 'حقل :attribute محظور ما لم يكن :other ضمن :values.', + 'prohibits' => 'يمنع حقل :attribute وجود :other.', + 'regex' => 'صيغة حقل :attribute غير صالحة.', + 'required' => 'حقل :attribute مطلوب.', + 'required_array_keys' => 'يجب أن يحتوي حقل :attribute على إدخالات لـ: :values.', + 'required_if' => 'حقل :attribute مطلوب عندما يكون :other مساويًا لـ :value.', + 'required_if_accepted' => 'حقل :attribute مطلوب عند قبول :other.', + 'required_if_declined' => 'حقل :attribute مطلوب عند رفض :other.', + 'required_unless' => 'حقل :attribute مطلوب ما لم يكن :other ضمن :values.', + 'required_with' => 'حقل :attribute مطلوب عند وجود :values.', + 'required_with_all' => 'حقل :attribute مطلوب عند وجود :values.', + 'required_without' => 'حقل :attribute مطلوب عند عدم وجود :values.', + 'required_without_all' => 'حقل :attribute مطلوب عند عدم وجود أي من :values.', + 'same' => 'يجب أن يطابق حقل :attribute قيمة :other.', + 'size' => [ + 'array' => 'يجب أن يحتوي حقل :attribute على :size عنصرًا.', + 'file' => 'يجب أن يكون حجم حقل :attribute :size كيلوبايت.', + 'numeric' => 'يجب أن تكون قيمة حقل :attribute :size.', + 'string' => 'يجب أن يكون طول حقل :attribute :size حرفًا.', + ], + 'starts_with' => 'يجب أن يبدأ حقل :attribute بأحد ما يلي: :values.', + 'string' => 'يجب أن يكون حقل :attribute نصًا.', + 'timezone' => 'يجب أن يكون حقل :attribute منطقة زمنية صالحة.', + 'unique' => 'قيمة :attribute مُستخدمة بالفعل.', + 'uploaded' => 'فشل رفع :attribute.', + 'uppercase' => 'يجب أن يكون حقل :attribute بأحرف كبيرة.', + 'url' => 'يجب أن يكون حقل :attribute رابطًا صالحًا.', + 'ulid' => 'يجب أن يكون حقل :attribute معرّف ULID صالحًا.', + 'uuid' => 'يجب أن يكون حقل :attribute معرّف UUID صالحًا.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/ar/workspaces.php b/lang/ar/workspaces.php new file mode 100644 index 00000000..d1347a91 --- /dev/null +++ b/lang/ar/workspaces.php @@ -0,0 +1,50 @@ + 'مساحات العمل', + 'select_title' => 'مساحات العمل الخاصة بك', + 'select_description' => 'اختر مساحة عمل للمتابعة', + 'current' => 'الحالية', + 'connections' => ':count اتصال', + 'posts' => ':count منشور', + + 'create' => [ + 'page_title' => 'أنشئ مساحة عملك', + 'title' => 'إعداد مساحة عملك', + 'description' => 'أخبرنا قليلًا عنك أو عن مشروعك. سنستخدم ذلك لتخصيص المنشورات المُنشأة بالذكاء الاصطناعي لتتناسب مع أسلوبك.', + 'website' => 'الموقع الإلكتروني', + 'website_placeholder' => 'https://yourbrand.com', + 'autofill' => 'تعبئة تلقائية من الموقع', + 'autofill_missing_url' => 'أدخل رابطًا أولًا.', + 'autofill_success' => 'تم تحميل معلومات العلامة التجارية.', + 'autofill_error' => 'تعذرت التعبئة التلقائية. يمكنك ملء الحقول يدويًا.', + 'autofill_errors' => [ + 'unreachable' => 'تعذر الوصول إلى ذلك الموقع (:reason).', + 'http_status' => 'أعاد الموقع حالة غير متوقعة (:status).', + 'invalid_scheme' => 'يتم دعم روابط http وhttps فقط.', + 'missing_host' => 'الرابط يفتقد إلى المضيف.', + 'unresolvable_host' => 'تعذر التعرف على المضيف (:host).', + 'private_network' => 'الروابط التي تشير إلى الشبكات الخاصة غير مسموح بها.', + ], + 'logo_captured' => 'تم التقاط الشعار من موقعك الإلكتروني.', + 'name' => 'اسم مساحة العمل', + 'name_placeholder' => 'مثال: Acme Inc', + 'brand_description' => 'وصف العلامة التجارية', + 'brand_description_placeholder' => 'ماذا تفعل علامتك التجارية؟', + 'content_language' => 'لغة المحتوى', + 'content_language_description' => 'ستُكتب التسميات التوضيحية المُنشأة بالذكاء الاصطناعي بهذه اللغة.', + 'brand_color' => 'لون العلامة التجارية', + 'background_color' => 'لون الخلفية', + 'text_color' => 'لون النص', + 'submit' => 'إنشاء مساحة عمل', + 'success' => 'تم إنشاء مساحة العمل. اربط حسابًا اجتماعيًا لبدء النشر.', + ], + + 'cannot_delete_last' => 'لا يمكنك حذف مساحة العمل الوحيدة لديك. ألغِ اشتراكك من إعدادات الفوترة لإغلاق حسابك.', + + 'flash' => [ + 'deleted' => 'تم حذف مساحة العمل بنجاح.', + ], +]; diff --git a/lang/de/accounts.php b/lang/de/accounts.php new file mode 100644 index 00000000..183c3a29 --- /dev/null +++ b/lang/de/accounts.php @@ -0,0 +1,150 @@ + 'Verbindungen', + 'page_title' => 'Social-Media-Konten', + 'description' => 'Übersicht über alle deine verbundenen Social-Media-Konten', + 'connect_cta' => 'Verbinden', + + 'not_connected' => 'Nicht verbunden', + 'connect' => 'Verbinden', + 'connection_lost' => 'Verbindung verloren', + 'reconnect' => 'Erneut verbinden', + 'reconnect_account' => 'Konto erneut verbinden', + 'view_profile' => 'Profil ansehen', + 'disconnect' => 'Trennen', + + 'descriptions' => [ + 'linkedin' => 'Verbinde dein LinkedIn-Profil oder deine Unternehmensseite', + 'linkedin-page' => 'Verbinde eine LinkedIn-Unternehmensseite', + 'x' => 'Verbinde dein X-Konto (Twitter)', + 'tiktok' => 'Verbinde dein TikTok-Konto', + 'youtube' => 'Verbinde einen YouTube-Kanal', + 'facebook' => 'Verbinde eine Facebook-Seite', + 'instagram' => 'Verbinde ein professionelles Instagram-Konto', + 'instagram-facebook' => 'Verbinde Instagram über eine Facebook-Seite', + 'threads' => 'Verbinde dein Threads-Konto', + 'pinterest' => 'Verbinde dein Pinterest-Konto', + 'bluesky' => 'Verbinde dein Bluesky-Konto', + 'mastodon' => 'Verbinde dein Mastodon-Konto', + 'telegram' => 'Verbinde einen Telegram-Kanal oder eine Telegram-Gruppe', + 'discord' => 'Verbinde einen Discord-Server', + ], + + 'disconnect_modal' => [ + 'title' => 'Konto trennen', + 'description' => 'Möchtest du dieses Konto wirklich trennen? Du kannst es jederzeit wieder verbinden.', + 'confirm' => 'Trennen', + 'cancel' => 'Abbrechen', + ], + + 'bluesky' => [ + 'title' => 'Bluesky verbinden', + 'description' => 'Gib deine Zugangsdaten ein, um dich zu verbinden', + 'email' => 'E-Mail', + 'email_placeholder' => 'yourhandle.bsky.social', + 'app_password' => 'App-Passwort', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'Verwende aus Sicherheitsgründen ein App-Passwort. Erstelle eines unter bsky.app/settings.', + 'submit' => 'Bluesky verbinden', + 'submitting' => 'Verbindung wird hergestellt...', + ], + + 'mastodon' => [ + 'title' => 'Mastodon verbinden', + 'description' => 'Gib deine Mastodon-Instanz ein', + 'instance_url' => 'Instanz-URL', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Gib die URL deiner Mastodon-Instanz ein (z. B. mastodon.social, techhub.social)', + 'submit' => 'Mit Mastodon fortfahren', + 'submitting' => 'Verbindung wird hergestellt...', + ], + + 'telegram' => [ + 'title' => 'Telegram verbinden', + 'description' => 'Einen Kanal oder eine Gruppe verknüpfen', + 'step_admin' => 'Füge :bot als Administrator zu deinem Telegram-Kanal oder deiner Telegram-Gruppe hinzu.', + 'step_command' => 'Poste diesen Befehl im Kanal oder in der Gruppe:', + 'waiting' => 'Warten auf die Verbindung des Kanals…', + 'connected' => 'Kanal verbunden!', + 'connected_toast' => 'Telegram-Kanal erfolgreich verbunden!', + 'copied_toast' => 'Befehl in die Zwischenablage kopiert', + 'copy_tooltip' => 'Befehl kopieren', + 'expired' => 'Dieser Code ist abgelaufen. Erstelle einen neuen, um es erneut zu versuchen.', + 'new_code' => 'Neuen Code erstellen', + 'retry' => 'Erneut versuchen', + 'error_generic' => 'Die Verbindung konnte nicht gestartet werden. Bitte versuche es erneut.', + 'network_taken' => 'Dieser Workspace hat bereits einen verbundenen Telegram-Kanal. Trenne ihn zuerst.', + ], + + 'facebook' => [ + 'title' => 'Facebook-Seite auswählen', + 'description' => 'Wähle die Seite aus, die du verbinden möchtest', + 'no_pages' => 'Keine Seiten gefunden', + 'no_pages_description' => 'Du bist kein Administrator einer Facebook-Seite.', + 'page_label' => 'Facebook-Seite', + 'view' => 'Ansehen', + 'choose' => 'Auswählen', + ], + + 'instagram_facebook' => [ + 'title' => 'Instagram-Konto auswählen', + 'description' => 'Wähle das Instagram-Konto aus, das du verbinden möchtest', + 'no_pages' => 'Keine Instagram-Konten gefunden', + 'no_pages_description' => 'Es wurden keine Facebook-Seiten mit verknüpften Instagram-Business-Konten gefunden.', + 'view' => 'Ansehen', + 'choose' => 'Auswählen', + ], + + 'linkedin' => [ + 'title' => 'LinkedIn-Seite auswählen', + 'description' => 'Wähle die Seite aus, die du verbinden möchtest', + 'no_pages' => 'Keine Seiten gefunden', + 'no_pages_description' => 'Du bist kein Administrator einer LinkedIn-Seite.', + 'page_label' => 'LinkedIn-Seite', + 'select_title' => 'Wo möchtest du posten?', + 'select_subtitle' => 'Poste als du selbst oder wähle eine Unternehmensseite, die du verwaltest.', + 'person_tag' => 'Person', + 'organization_tag' => 'Organisation', + 'view' => 'Ansehen', + 'choose' => 'Auswählen', + ], + + 'flash' => [ + 'disconnected' => 'Konto erfolgreich getrennt!', + 'connected' => 'Konto erfolgreich verbunden!', + 'session_expired' => 'Sitzung abgelaufen. Bitte versuche es erneut.', + 'workspace_not_found' => 'Workspace nicht gefunden.', + 'activated' => 'Konto aktiviert!', + 'deactivated' => 'Konto deaktiviert!', + 'already_connected' => 'Diese Plattform ist bereits verbunden.', + 'no_youtube_channels' => 'Keine YouTube-Kanäle gefunden. Bitte erstelle zuerst einen Kanal.', + ], + + 'popup_callback' => [ + 'title_success' => 'Verbunden', + 'title_error' => 'Fehler', + 'closing' => 'Dieses Fenster wird automatisch geschlossen...', + 'manual_close' => 'Du kannst dieses Fenster schließen.', + 'popup_blocked' => 'Das Verbindungsfenster konnte nicht geöffnet werden. Bitte erlaube Pop-ups und versuche es erneut.', + 'connected' => 'Konto verbunden!', + 'reconnected' => 'Konto erneut verbunden!', + 'error_connecting' => 'Fehler beim Verbinden des Kontos. Bitte versuche es erneut.', + 'network_taken' => 'Dieser Workspace hat bereits ein Konto für dieses Netzwerk. Trenne es zuerst.', + 'error_connecting_page' => 'Fehler beim Verbinden der Seite. Bitte versuche es erneut.', + 'error_connecting_channel' => 'Fehler beim Verbinden des Kanals. Bitte versuche es erneut.', + 'session_expired' => 'Sitzung abgelaufen. Bitte versuche es erneut.', + 'workspace_not_found' => 'Workspace nicht gefunden.', + 'invalid_state' => 'Ungültiger Status. Bitte versuche es erneut.', + 'failed_to_authenticate' => 'Authentifizierung fehlgeschlagen.', + 'failed_to_get_profile' => 'Profil konnte nicht abgerufen werden.', + 'page_not_found' => 'Seite nicht gefunden.', + 'channel_not_found' => 'Kanal nicht gefunden.', + 'no_facebook_pages' => 'Keine Facebook-Seiten gefunden. Du musst Administrator mindestens einer Seite sein.', + 'no_facebook_instagram_pages' => 'Keine Facebook-Seiten mit verknüpften Instagram-Konten gefunden.', + 'no_youtube_channels' => 'Keine YouTube-Kanäle gefunden. Bitte erstelle zuerst einen Kanal.', + 'not_linkedin_admin' => 'Du bist kein Administrator einer LinkedIn-Seite.', + ], +]; diff --git a/lang/de/analytics.php b/lang/de/analytics.php new file mode 100644 index 00000000..57e97d26 --- /dev/null +++ b/lang/de/analytics.php @@ -0,0 +1,57 @@ + 'Keine verbundenen Konten mit Analysedaten.', + 'no_accounts_match' => 'Keine passenden Konten.', + 'search_account' => 'Konto suchen…', + 'select_account' => 'Wähle ein Konto, um die Analysedaten anzuzeigen.', + 'no_data' => 'Keine Analysedaten verfügbar.', + + 'metrics' => [ + 'avg_view_duration' => 'Durchschn. Wiedergabedauer (s)', + 'avg_view_percentage' => 'Durchschn. Wiedergabeanteil', + 'bookmarks' => 'Lesezeichen', + 'clicks' => 'Klicks', + 'comments' => 'Kommentare', + 'custom_reaction' => 'Benutzerdefiniert', + 'engagement' => 'Engagement', + 'favourites' => 'Favoriten', + 'followers' => 'Follower', + 'following' => 'Abonniert', + 'impressions' => 'Impressionen', + 'interactions' => 'Interaktionen', + 'likes' => 'Likes', + 'members' => 'Mitglieder', + 'minutes_watched' => 'Angesehene Minuten', + 'organic_followers' => 'Organische Follower', + 'outbound_clicks' => 'Ausgehende Klicks', + 'page_followers' => 'Seiten-Follower', + 'page_reach' => 'Seiten-Reichweite', + 'page_views' => 'Seitenaufrufe', + 'paid_followers' => 'Bezahlte Follower', + 'pin_click_rate' => 'Pin-Klickrate', + 'pin_clicks' => 'Pin-Klicks', + 'posts_engagement' => 'Beitrags-Engagement', + 'posts_reach' => 'Beitrags-Reichweite', + 'quotes' => 'Zitate', + 'reach' => 'Reichweite', + 'reblogs' => 'Reblogs', + 'recent_comments' => 'Neueste Kommentare', + 'recent_likes' => 'Neueste Likes', + 'recent_shares' => 'Neueste Shares', + 'replies' => 'Antworten', + 'reposts' => 'Reposts', + 'retweets' => 'Retweets', + 'saves' => 'Gespeichert', + 'shares' => 'Shares', + 'subscribers' => 'Abonnenten', + 'subscribers_gained' => 'Gewonnene Abonnenten', + 'subscribers_lost' => 'Verlorene Abonnenten', + 'total_likes' => 'Likes gesamt', + 'video_views' => 'Videoaufrufe', + 'videos' => 'Videos', + 'views' => 'Aufrufe', + ], +]; diff --git a/lang/de/assets.php b/lang/de/assets.php new file mode 100644 index 00000000..8386c33d --- /dev/null +++ b/lang/de/assets.php @@ -0,0 +1,54 @@ + 'Assets', + + 'tabs' => [ + 'my_uploads' => 'Meine Uploads', + 'stock_photos' => 'Stockfotos', + 'gifs' => 'GIFs', + ], + + 'upload' => [ + 'drag_drop' => 'Dateien hierher ziehen und ablegen oder zum Auswählen klicken', + 'formats' => 'JPEG, PNG, GIF, WebP, MP4, PDF', + 'uploading' => 'Wird hochgeladen...', + 'failed' => ':file konnte nicht hochgeladen werden. Bitte versuche es erneut.', + ], + + 'empty' => [ + 'title' => 'Noch keine Assets', + 'description' => 'Lade Bilder und Videos hoch, um deine Medienbibliothek aufzubauen.', + ], + + 'save_to_assets' => 'In Assets speichern', + 'saved' => 'In deinen Assets gespeichert!', + 'create_post' => 'Beitrag erstellen', + 'add_to_post' => 'Zum Beitrag hinzufügen', + 'search_placeholder' => 'Medien suchen...', + + 'delete' => [ + 'title' => 'Asset löschen', + 'description' => 'Möchtest du dieses Asset wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.', + 'confirm' => 'Löschen', + 'cancel' => 'Abbrechen', + ], + + 'unsplash' => [ + 'search_placeholder' => 'Kostenlose Fotos suchen...', + 'no_results' => 'Keine Fotos gefunden', + 'no_results_description' => 'Versuche einen anderen Suchbegriff.', + 'trending' => 'Beliebt auf Unsplash', + 'start_searching' => 'Suche nach kostenlosen Stockfotos von Unsplash', + ], + + 'giphy' => [ + 'trending' => 'Beliebt auf Giphy', + 'search_placeholder' => 'GIFs suchen...', + 'no_results' => 'Keine GIFs gefunden', + 'no_results_description' => 'Versuche einen anderen Suchbegriff.', + 'powered_by' => 'Bereitgestellt von GIPHY', + ], +]; diff --git a/lang/de/auth.php b/lang/de/auth.php new file mode 100644 index 00000000..481d5b34 --- /dev/null +++ b/lang/de/auth.php @@ -0,0 +1,143 @@ + 'Diese Zugangsdaten stimmen nicht mit unseren Aufzeichnungen überein.', + 'password' => 'Das angegebene Passwort ist falsch.', + 'throttle' => 'Zu viele Anmeldeversuche. Bitte versuche es in :seconds Sekunden erneut.', + + 'flash' => [ + 'welcome' => 'Willkommen bei TryPost!', + 'welcome_trial' => 'Willkommen bei TryPost! Deine Testphase hat begonnen.', + ], + + 'legal' => 'Indem du fortfährst, stimmst du unseren Nutzungsbedingungen und unserer Datenschutzerklärung zu.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'Visueller Kalender', + 'description' => 'Plane und terminiere deine Inhalte mit einem intuitiven Drag-and-drop-Kalender für alle deine Social-Media-Konten.', + ], + 'scheduling' => [ + 'title' => 'Intelligente Planung', + 'description' => 'Plane Beiträge für LinkedIn, X, Instagram, TikTok, YouTube und mehr – alles von einem Ort aus.', + ], + 'media' => [ + 'title' => 'Rich Media', + 'description' => 'Veröffentliche Bilder, Karussells, Storys und Reels. Jede Plattform erhält automatisch das richtige Format.', + ], + 'video' => [ + 'title' => 'Video-Veröffentlichung', + 'description' => 'Lade Videos einmal hoch und veröffentliche sie auf TikTok, YouTube Shorts, Instagram Reels und Facebook Reels.', + ], + 'team' => [ + 'title' => 'Team-Workspaces', + 'description' => 'Lade dein Team ein, weise Rollen zu und verwalte mehrere Marken in separaten Workspaces.', + ], + 'signatures' => [ + 'title' => 'Signaturen', + 'description' => 'Speichere wiederverwendbare Signaturen (Hashtags, Links, Grußformeln) und füge sie mit einem Klick zu Beiträgen hinzu.', + ], + ], + + 'or_continue_with' => 'Oder fortfahren mit', + 'or_continue_with_email' => 'Oder mit E-Mail fortfahren', + 'google_login' => 'Mit Google anmelden', + 'google_signup' => 'Mit Google registrieren', + 'github_login' => 'Mit GitHub anmelden', + 'github_signup' => 'Mit GitHub registrieren', + 'github_email_unavailable' => 'Deine E-Mail-Adresse konnte nicht von GitHub abgerufen werden. Mache deine GitHub-E-Mail-Adresse öffentlich oder erteile die Berechtigung für den E-Mail-Zugriff und versuche es dann erneut.', + + 'signup_success' => [ + 'page_title' => 'Willkommen', + 'title' => 'Dein Konto wird eingerichtet', + 'description' => 'Das dauert normalerweise nur wenige Sekunden...', + ], + + 'login' => [ + 'title' => 'Melde dich bei deinem Konto an', + 'description' => 'Gib unten deine E-Mail-Adresse und dein Passwort ein, um dich anzumelden', + 'page_title' => 'Anmelden', + 'email' => 'E-Mail-Adresse', + 'password' => 'Passwort', + 'forgot_password' => 'Passwort vergessen?', + 'remember_me' => 'Angemeldet bleiben', + 'submit' => 'Anmelden', + 'no_account' => 'Noch kein Konto?', + 'sign_up' => 'Registrieren', + ], + + 'register' => [ + 'title' => 'Dein gesamter Social-Media-Kalender an einem Ort', + 'description' => 'Erstelle dein Konto und beginne, Beiträge für jedes Netzwerk zu planen.', + 'page_title' => 'Registrieren', + 'signup_with_email' => 'Mit E-Mail registrieren', + 'name' => 'Name', + 'name_placeholder' => 'Vollständiger Name', + 'email' => 'E-Mail-Adresse', + 'password' => 'Passwort', + 'show_password' => 'Passwort anzeigen', + 'hide_password' => 'Passwort verbergen', + 'submit' => 'Konto erstellen', + 'has_account' => 'Hast du bereits ein Konto?', + 'log_in' => 'Anmelden', + ], + + 'forgot_password' => [ + 'title' => 'Passwort vergessen', + 'description' => 'Gib deine E-Mail-Adresse ein, um einen Link zum Zurücksetzen des Passworts zu erhalten', + 'page_title' => 'Passwort vergessen', + 'email' => 'E-Mail-Adresse', + 'submit' => 'Link zum Zurücksetzen des Passworts senden', + 'return_to' => 'Oder zurück zur', + 'log_in' => 'Anmeldung', + ], + + 'reset_password' => [ + 'title' => 'Passwort zurücksetzen', + 'description' => 'Bitte gib unten dein neues Passwort ein', + 'page_title' => 'Passwort zurücksetzen', + 'email' => 'E-Mail', + 'password' => 'Passwort', + 'confirm_password' => 'Passwort bestätigen', + 'confirm_placeholder' => 'Passwort bestätigen', + 'submit' => 'Passwort zurücksetzen', + ], + + 'verify_email' => [ + 'title' => 'E-Mail bestätigen', + 'description' => 'Bitte bestätige deine E-Mail-Adresse, indem du auf den Link klickst, den wir dir gerade per E-Mail gesendet haben.', + 'page_title' => 'E-Mail-Bestätigung', + 'link_sent' => 'Ein neuer Bestätigungslink wurde an die E-Mail-Adresse gesendet, die du bei der Registrierung angegeben hast.', + 'resend' => 'Bestätigungs-E-Mail erneut senden', + 'log_out' => 'Abmelden', + ], + + 'accept_invite' => [ + 'page_title' => 'Einladung annehmen', + 'title' => 'Du wurdest eingeladen!', + 'description' => 'Du wurdest eingeladen, dem Workspace :workspace beizutreten.', + 'workspace' => 'Workspace', + 'your_role' => 'Deine Rolle', + 'email' => 'E-Mail', + 'accept' => 'Einladung annehmen', + 'decline' => 'Einladung ablehnen', + 'login_prompt' => 'Melde dich an oder erstelle ein Konto, um diese Einladung anzunehmen.', + 'log_in' => 'Anmelden', + 'create_account' => 'Konto erstellen', + ], + +]; diff --git a/lang/de/automations.php b/lang/de/automations.php new file mode 100644 index 00000000..221ee5e9 --- /dev/null +++ b/lang/de/automations.php @@ -0,0 +1,411 @@ + 'Automatisierungen', + 'default_name' => 'Neue Automatisierung', + + 'actions' => [ + 'new' => 'Neue Automatisierung', + 'edit' => 'Bearbeiten', + 'save' => 'Speichern', + 'activate' => 'Aktivieren', + 'pause' => 'Pausieren', + 'delete' => 'Löschen', + 'retry' => 'Erneut versuchen', + 'guide' => 'So funktioniert es', + ], + + 'tabs' => [ + 'build' => 'Erstellen', + 'variables' => 'Variablen', + 'test' => 'Test', + ], + + 'nav' => [ + 'workflow' => 'Workflow', + 'invocations' => 'Ausführungen', + 'metrics' => 'Kennzahlen', + 'settings' => 'Einstellungen', + ], + + 'settings' => [ + 'general' => 'Allgemein', + 'general_description' => 'Benenne diese Automatisierung um.', + 'name_label' => 'Name', + 'name_saved' => 'Automatisierung umbenannt.', + 'status_title' => 'Status', + 'status_description' => 'Aktiviere sie, um sie auszuführen, oder pausiere sie, um sie zu stoppen.', + 'activated_at' => 'Aktiviert :date', + 'paused_at' => 'Pausiert :date', + 'created_at' => 'Erstellt :date', + 'danger_title' => 'Gefahrenzone', + 'danger_description' => 'Unumkehrbare Aktionen.', + 'delete_title' => 'Diese Automatisierung löschen', + 'delete_description' => 'Entfernt die Automatisierung und ihren Ausführungsverlauf dauerhaft.', + ], + + 'status_run' => [ + 'pending' => 'Ausstehend', + 'running' => 'Läuft', + 'waiting' => 'Wartet', + 'completed' => 'Abgeschlossen', + 'failed' => 'Fehlgeschlagen', + 'cancelled' => 'Abgebrochen', + ], + + 'node_type' => [ + 'trigger' => 'Trigger', + 'generate' => 'Inhalt generieren', + 'delay' => 'Verzögerung', + 'condition' => 'Bedingung', + 'publish' => 'Veröffentlichen', + 'webhook' => 'Webhook', + 'end' => 'Ende', + 'fetch_rss' => 'RSS abrufen', + 'http_request' => 'HTTP-Anfrage', + ], + + 'invocations' => [ + 'empty' => 'Noch keine Ausführungen.', + 'refresh' => 'Aktualisieren', + 'search_placeholder' => 'Nach Ausführungs-ID suchen…', + 'copied' => 'Ausführungs-ID kopiert.', + 'loading' => 'Schritte werden geladen…', + 'no_steps' => 'Keine Schritte aufgezeichnet.', + 'load_error' => 'Schritte konnten nicht geladen werden.', + 'steps' => '{0}Keine Schritte|{1}:count Schritt|[2,*]:count Schritte', + 'filter' => [ + 'all' => 'Alle Status', + ], + 'columns' => [ + 'timestamp' => 'Zeitstempel', + 'run' => 'Ausführung', + 'status' => 'Status', + 'message' => 'Letzte Meldung', + 'duration' => 'Dauer', + ], + 'summary' => [ + 'completed' => 'Workflow abgeschlossen', + 'failed' => 'Workflow fehlgeschlagen', + 'running' => 'Workflow läuft', + 'cancelled' => 'Workflow abgebrochen', + 'pending' => 'Workflow ausstehend', + ], + ], + + 'metrics' => [ + 'overview' => 'Übersicht', + 'runs_over_time' => 'Ausführungen im Zeitverlauf', + 'posts_by_platform' => 'Beiträge nach Plattform', + 'no_posts' => 'In diesem Zeitraum wurden keine Beiträge veröffentlicht.', + 'cards' => [ + 'runs' => 'Ausführungen gesamt', + 'completed' => 'Abgeschlossen', + 'failed' => 'Fehlgeschlagen', + 'in_progress' => 'In Bearbeitung', + 'success_rate' => 'Erfolgsquote', + 'avg_duration' => 'Durchschn. Dauer', + 'posts_created' => 'Erstellte Beiträge', + ], + 'legend' => [ + 'started' => 'Gestartet', + 'completed' => 'Abgeschlossen', + 'failed' => 'Fehlgeschlagen', + ], + ], + + 'categories' => [ + 'sources' => 'Quellen', + 'content' => 'Inhalt', + 'flow' => 'Ablauf', + 'output' => 'Ausgabe', + ], + + 'variables' => [ + 'title' => 'Workflow-Variablen', + 'hint' => 'Wiederverwendbare Werte, die überall mit {{ variables.KEY }} referenziert werden. Verschlüsselt gespeichert.', + 'empty' => 'Noch keine Variablen.', + 'key' => 'Schlüssel', + 'value' => 'Wert', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'Wert', + 'add' => 'Neue Variable', + ], + + 'expr' => [ + 'trigger_event' => 'Name des Trigger-Events', + 'trigger_fired_at' => 'Wann der Trigger ausgelöst wurde', + 'trigger_post_id' => 'ID des auslösenden Beitrags', + 'trigger_post_content' => 'Inhalt des auslösenden Beitrags', + 'trigger_post_status' => 'Status des auslösenden Beitrags', + 'trigger_post_scheduled_at' => 'Wann der Beitrag geplant ist', + 'trigger_post_published_at' => 'Wann der Beitrag veröffentlicht wurde', + 'fetched_title' => 'Titel des abgerufenen Eintrags', + 'fetched_link' => 'Link des abgerufenen Eintrags', + 'fetched_date' => 'Veröffentlichungsdatum des abgerufenen Eintrags', + 'fetched_content' => 'Vollständiger Inhalt des abgerufenen Eintrags', + 'fetched_description' => 'Zusammenfassung des abgerufenen Eintrags', + 'fetched_author' => 'Autor des abgerufenen Eintrags', + 'fetched_image' => 'Bild-URL des abgerufenen Eintrags', + 'fetched_categories' => 'Kategorien des abgerufenen Eintrags', + 'fetched_enclosure' => 'Medien des abgerufenen Eintrags (Audio/Video/Datei)', + 'fetched_pubdate' => 'Veröffentlichungsdatum des abgerufenen Eintrags', + 'fetched_http' => 'Abgerufener HTTP-Eintrag (Feld anhängen)', + 'generated_content' => 'KI-generierter Beitragsinhalt', + 'generated_post_url' => 'URL des KI-generierten Beitrags', + 'variable' => 'Workflow-Variable', + 'now' => 'Aktuelles Datum & Uhrzeit', + ], + + 'test' => [ + 'description' => 'Führt die Automatisierung durchgängig mit einer synthetisierten Trigger-Nutzlast aus. Nützlich, um jeden Node zu validieren, ohne auf den echten Zeitplan oder Feed zu warten.', + 'starting' => 'Testlauf wird gestartet…', + 'in_progress' => 'In Bearbeitung', + 'completed' => 'Abgeschlossen', + 'failed' => 'Fehlgeschlagen', + 'waiting' => 'Wartet', + 'close' => 'Schließen', + 'no_node_runs' => 'Warten auf den Start des ersten Nodes…', + 'node_input' => 'Eingabe', + 'node_output' => 'Ausgabe', + 'node_error' => 'Fehler', + 'no_new_items' => 'Keine neuen Einträge – nichts Nachgelagertes wurde ausgeführt.', + 'error_starting' => 'Der Testlauf konnte nicht gestartet werden.', + 'with_real_data' => 'Mit echten Daten', + 'run' => 'Test ausführen', + 'idle_hint' => 'Klicke auf „Test ausführen", um die Automatisierung durchgängig auszuführen.', + 'real_data_hint' => 'Dieser Test veröffentlicht Beiträge, setzt Polling-Markierungen fort und löst externe Seiteneffekte aus.', + 'dry_badge' => 'Probelauf', + ], + + 'status' => [ + 'draft' => 'Entwurf', + 'active' => 'Aktiv', + 'paused' => 'Pausiert', + ], + + 'index' => [ + 'empty_title' => 'Noch keine Automatisierungen', + 'empty_description' => 'Erstelle deine erste Automatisierung, um auf Autopilot zu veröffentlichen.', + 'columns' => [ + 'name' => 'Name', + 'status' => 'Status', + 'created' => 'Erstellt', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'Automatisierung konnte nicht aktiviert werden.', + 'pause_error_fallback' => 'Automatisierung konnte nicht pausiert werden.', + 'save_error_fallback' => 'Automatisierung konnte nicht gespeichert werden.', + 'save_success' => 'Automatisierung gespeichert.', + 'empty_canvas_title' => 'Beginne mit dem Aufbau deiner Automatisierung', + 'empty_canvas_description' => 'Ziehe einen Node aus dem linken Bereich, um zu starten.', + 'name_placeholder' => 'Unbenannte Automatisierung', + ], + + 'nodes' => [ + 'trigger' => 'Trigger', + 'generate' => 'Generieren', + 'delay' => 'Verzögerung', + 'condition' => 'Bedingung', + 'publish' => 'Veröffentlichen', + 'webhook' => 'Webhook', + 'end' => 'Ende', + 'end_summary' => 'Stoppt die Automatisierung hier', + 'fetch_rss' => 'RSS abrufen', + 'http_request' => 'HTTP-Anfrage', + 'handles' => [ + 'items' => 'hat Einträge', + 'no_items' => 'keine Einträge', + ], + ], + + 'config' => [ + 'select_placeholder' => 'Auswählen…', + 'invalid_json' => 'Das ist noch kein gültiges JSON.', + 'expand_editor' => 'Editor vergrößern', + 'minimize_editor' => 'Verkleinern', + + 'trigger' => [ + 'type' => 'Trigger-Typ', + 'types' => [ + 'schedule' => 'Zeitplan', + 'post_published' => 'Wenn ein Beitrag veröffentlicht wird', + 'post_scheduled' => 'Wenn ein Beitrag geplant wird', + ], + 'post_published_hint' => 'Läuft, wann immer ein Beitrag in diesem Workspace veröffentlicht wird. Der veröffentlichte Beitrag steht unter {{ trigger.post }} für nachgelagerte Nodes zur Verfügung.', + 'post_scheduled_hint' => 'Läuft, wann immer ein Beitrag in diesem Workspace geplant wird. Der geplante Beitrag steht unter {{ trigger.post }} zur Verfügung.', + + 'schedule' => [ + 'field' => 'Trigger-Intervall', + 'fields' => [ + 'minutes' => 'Minuten', + 'hours' => 'Stunden', + 'days' => 'Tage', + 'weeks' => 'Wochen', + 'months' => 'Monate', + ], + 'minutes_interval' => 'Minuten zwischen den Triggern', + 'hours_interval' => 'Stunden zwischen den Triggern', + 'days_interval' => 'Tage zwischen den Triggern', + 'hour' => 'Auslösen zur Stunde', + 'minute' => 'Auslösen zur Minute', + 'weekdays' => 'An Wochentagen auslösen', + 'day_of_month' => 'Tag des Monats', + 'weekday_names' => [ + 'sun' => 'So', + 'mon' => 'Mo', + 'tue' => 'Di', + 'wed' => 'Mi', + 'thu' => 'Do', + 'fri' => 'Fr', + 'sat' => 'Sa', + ], + 'summary' => [ + 'every_n_minutes' => 'Läuft jede Minute|Läuft alle :count Minuten', + 'every_n_hours' => 'Läuft jede Stunde zur Minute :minute|Läuft alle :count Stunden zur Minute :minute', + 'every_n_days' => 'Läuft täglich um :time|Läuft alle :count Tage um :time', + 'weekly' => 'Läuft :days um :time', + 'monthly' => 'Läuft an Tag :day jedes Monats um :time', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'Social-Media-Konten', + 'social_accounts_empty' => 'Keine verbundenen Social-Media-Konten. Verbinde zuerst eines.', + 'target_slide_count' => 'Zu generierende Slides', + 'prompt_template' => 'Prompt-Vorlage', + 'prompt_template_hint' => 'Tippe {{, um Daten aus vorherigen Schritten einzufügen.', + 'image_count' => 'Zu generierende Bilder', + 'image_count_hint' => '0 = reiner Textbeitrag (kein Bild). 1 = einzelnes Bild. 2+ = Karussell.', + 'use_brand_voice' => 'Markenton verwenden', + 'use_brand_voice_hint' => 'Wende deine Markenbeschreibung und deinen Markenton an. Deaktiviere dies für die originalgetreue Kuratierung von Drittquellen (News, RSS).', + 'use_brand_visuals' => 'Marken-Visuals verwenden', + 'use_brand_visuals_hint' => 'Steuere KI-Bilder mit deinen Markenfarben und deiner Markenidentität. Deaktiviere dies für neutrale Bilder, die nur vom Beitragsthema bestimmt werden.', + 'style' => 'Stil', + 'account_summary' => ':count Konto · :format|:count Konten · :format', + 'formats' => [ + 'single' => 'Einzeln', + 'carousel' => 'Karussell', + ], + ], + 'delay' => [ + 'duration' => 'Dauer', + 'unit' => 'Einheit', + 'units' => [ + 'minutes' => 'Minuten', + 'hours' => 'Stunden', + 'days' => 'Tage', + ], + ], + 'condition' => [ + 'field' => 'Feld', + 'operator' => 'Operator', + 'operators' => [ + 'contains' => 'enthält', + 'not_contains' => 'enthält nicht', + 'equals' => 'ist gleich', + 'not_equals' => 'ist ungleich', + 'matches' => 'entspricht (Regex)', + 'greater_than' => 'größer als', + 'less_than' => 'kleiner als', + ], + 'value' => 'Wert', + ], + 'publish' => [ + 'mode' => 'Modus', + 'modes' => [ + 'now' => 'Jetzt veröffentlichen', + 'scheduled' => 'Planen', + 'draft' => 'Als Entwurf speichern', + ], + 'scheduled_offset' => 'Versatz zum Trigger (Minuten)', + 'offset_summary' => ':mode · +:offset Min.', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'Methode', + 'payload_template' => 'Payload-Vorlage (JSON)', + ], + 'end' => [ + 'reason' => 'Grund (optional)', + 'reason_placeholder' => 'z. B. Durch Bedingung herausgefiltert', + ], + 'fetch_rss' => [ + 'feed_url' => 'Feed-URL', + 'feed_url_hint' => 'Beim ersten Durchlauf wird die Markierung auf "now" gesetzt, damit historische Einträge die nachgelagerten Nodes nicht überfluten. Nachfolgende Durchläufe sehen nur Einträge, die neuer sind als die vorherige Abfrage.', + 'inspect' => 'Feed prüfen', + 'inspecting' => 'Wird geprüft…', + 'inspect_hint' => 'Rufe ein Beispiel ab, um die verfügbaren Felder für nachgelagerte Nodes zu ermitteln.', + 'inspect_error' => 'Dieser Feed konnte nicht gelesen werden. Prüfe die URL und versuche es erneut.', + 'discovered_fields' => 'Verfügbare Felder', + 'discovered_empty' => 'Keine Felder im neuesten Eintrag gefunden.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'Methode', + 'auth_type' => 'Authentifizierung', + 'auth' => [ + 'none' => 'Keine (öffentlich)', + 'bearer' => 'Bearer-Token', + 'basic' => 'Basic Auth', + 'api_key' => 'API-Key-Header', + ], + 'bearer_token' => 'Bearer-Token', + 'basic_username' => 'Benutzername', + 'basic_password' => 'Passwort', + 'api_key_header' => 'Header-Name', + 'api_key_value' => 'API-Key', + 'body_template' => 'Body-Vorlage (JSON)', + 'headers' => 'Header', + 'header_name' => 'Header-Name', + 'header_value' => 'Wert', + 'add_header' => 'Header hinzufügen', + 'polling_section' => 'Liste & Deduplizierung (optional)', + 'polling_hint' => 'Wenn die Antwort eine Liste ist, durchläuft jeder Eintrag den Workflow separat. Ein einzelnes Objekt wird einmal ausgeführt.', + 'items_path' => 'Pfad zu den Einträgen', + 'items_path_hint' => 'Leer lassen, wenn die Antwort bereits ein Array ist. Verwende einen Punkt-Pfad (z. B. data.items) für ein verschachteltes Array oder * für ein nach ID indiziertes Objekt.', + 'item_key_path' => 'Pfad zum Eintragsschlüssel', + 'item_key_path_hint' => 'JSON-Pfad zu einer eindeutigen ID (z. B. id). Bereits gesehene Einträge werden übersprungen, sodass ein Feed ohne Datumsangaben trotzdem nur neue Einträge weiterleitet.', + 'item_date_path' => 'Pfad zum Eintragsdatum', + 'item_date_path_hint' => 'JSON-Pfad zum Zeitstempel des Eintrags (z. B. published_at). Wird, sofern verfügbar, dem Schlüssel-Pfad vorgezogen. Die erste Abfrage erfasst den Ausgangswert und leitet nichts weiter, sodass ein bestehender Feed am ersten Tag niemals überflutet.', + ], + ], + + 'delete' => [ + 'title' => 'Automatisierung löschen', + 'description' => 'Möchtest du diese Automatisierung wirklich löschen? Alle Ausführungen und Trigger-Einträge werden ebenfalls entfernt. Diese Aktion kann nicht rückgängig gemacht werden.', + 'confirm' => 'Löschen', + 'cancel' => 'Abbrechen', + ], + + 'flash' => [ + 'deleted' => 'Automatisierung erfolgreich gelöscht!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'Für diese Automatisierung sind keine aktiven Social-Media-Konten konfiguriert.', + 'must_have_one_trigger' => 'Eine Automatisierung muss genau einen Trigger-Node haben.', + 'trigger_must_be_connected' => 'Der Trigger-Node muss mit mindestens einem Node verbunden sein.', + 'graph_contains_cycle' => 'Der Automatisierungsgraph enthält einen Zyklus.', + 'only_failed_can_retry' => 'Nur fehlgeschlagene Ausführungen können wiederholt werden.', + 'no_generated_post' => 'Bei der Ausführung wurde kein generierter Beitrag gefunden.', + 'webhook_server_error' => 'Webhook-Serverfehler.', + 'webhook_request_failed' => 'Die Webhook-Anfrage konnte nicht abgeschlossen werden.', + 'webhook_missing_url' => 'Dem Webhook-Node fehlt eine URL.', + 'webhook_invalid_payload_json' => 'Die Payload-Vorlage ist kein gültiges JSON.', + 'url_not_allowed' => 'Die Anfrage-URL verweist auf eine private oder nicht erreichbare Adresse und wurde blockiert.', + 'node_no_longer_exists' => 'Node :node_id existiert in der Automatisierung nicht mehr.', + 'no_trigger_connection' => 'Kein Node mit dem Trigger-Node verbunden.', + 'fetch_rss_missing_url' => 'Dem Node „RSS abrufen" fehlt eine Feed-URL.', + 'fetch_rss_request_failed' => 'Die Anfrage an den RSS-Feed ist fehlgeschlagen.', + 'fetch_rss_malformed' => 'Der RSS-Feed ist fehlerhaft.', + 'http_missing_url' => 'Dem HTTP-Anfrage-Node fehlt eine URL.', + 'http_request_exception' => 'Die HTTP-Anfrage hat eine Ausnahme ausgelöst.', + 'http_request_failed' => 'Die HTTP-Anfrage ist fehlgeschlagen.', + 'http_items_path_not_array' => 'Der Pfad zu den Einträgen ergab keine Liste.', + ], +]; diff --git a/lang/de/billing.php b/lang/de/billing.php new file mode 100644 index 00000000..b977e9f3 --- /dev/null +++ b/lang/de/billing.php @@ -0,0 +1,78 @@ + 'Abrechnung', + + 'past_due_notice' => [ + 'title' => 'Zahlung überfällig', + 'description' => 'Aktualisiere deine Zahlungsmethode, um dein Abonnement aktiv zu halten.', + 'cta' => 'Zahlung aktualisieren', + ], + + 'annual_banner' => [ + 'title' => '2 Monate gratis erhalten', + 'description' => 'Wechsle zur jährlichen Abrechnung und zahle jeden Monat weniger – gleicher Tarif, sonst ändert sich nichts.', + 'cta' => 'Auf jährlich upgraden', + ], + + 'subscribe' => [ + 'billed_monthly' => 'Monatlich abgerechnet', + 'billed_yearly' => 'Jährlich abgerechnet', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'Tarif', + 'description' => 'Verwalte deinen Abonnement-Tarif.', + 'label' => 'Tarif', + 'workspaces' => '{1}:count Workspace|[2,*]:count Workspaces', + 'per_workspace' => 'pro Workspace', + 'price' => 'Preis', + 'month' => 'Monat', + 'trial' => 'Testphase', + 'active' => 'Aktiv', + 'past_due' => 'Überfällig', + 'cancelling' => 'Wird gekündigt', + 'trial_ends' => 'Testphase endet', + ], + + 'subscription' => [ + 'title' => 'Abonnement', + 'description' => 'Verwalte deine Zahlungsmethode, Rechnungsdaten und dein Abonnement.', + 'payment_method' => 'Zahlungsmethode', + 'no_payment_method' => 'Noch keine Zahlungsmethode hinterlegt.', + 'expires_on' => 'Läuft ab :month/:year', + 'manage_label' => 'Abonnement', + 'manage_stripe' => 'Bei Stripe verwalten', + ], + + 'invoices' => [ + 'title' => 'Rechnungen', + 'description' => 'Lade deine bisherigen Rechnungen herunter.', + 'empty' => 'Keine Rechnungen gefunden', + 'paid' => 'Bezahlt', + ], + + 'flash' => [ + 'plan_changed' => 'Du nutzt jetzt den Tarif :plan.', + 'switched_to_yearly' => 'Du nutzt jetzt die jährliche Abrechnung.', + 'cannot_manage' => 'Nur der Kontoinhaber kann die Abrechnung verwalten.', + 'credits_exhausted' => 'Keine KI-Credits mehr – dein monatliches Kontingent von :limit ist aufgebraucht. Führe ein Upgrade durch oder warte bis zum nächsten Monat.', + 'subscription_required' => 'Für die Nutzung der KI-Funktionen ist ein aktives Abonnement erforderlich.', + ], + + 'processing' => [ + 'page_title' => 'Wird verarbeitet...', + 'title' => 'Dein Abonnement wird verarbeitet', + 'description' => 'Bitte warte, während wir dein Konto einrichten. Das dauert nur einen Moment.', + 'success_title' => 'Alles bereit!', + 'success_description' => 'Dein Abonnement ist aktiv. Du wirst zu deinen Workspaces weitergeleitet...', + 'cancelled_title' => 'Bezahlvorgang abgebrochen', + 'cancelled_description' => 'Dein Bezahlvorgang wurde abgebrochen. Es wurden keine Kosten berechnet.', + 'retry' => 'Erneut versuchen', + ], +]; diff --git a/lang/de/brands.php b/lang/de/brands.php new file mode 100644 index 00000000..fc7c5f0b --- /dev/null +++ b/lang/de/brands.php @@ -0,0 +1,41 @@ + 'Neue Marke', + 'no_brands_yet' => 'Noch keine Marken', + 'no_brands_description' => 'Erstelle Marken, um deine Social-Media-Konten nach Kunde oder Projekt zu organisieren', + 'accounts_count' => ':count Konten', + + 'create' => [ + 'title' => 'Marke erstellen', + 'description' => 'Gib deiner Marke einen Namen, um Social-Media-Konten zu gruppieren', + 'name' => 'Markenname', + 'name_placeholder' => 'z. B. Acme Corp, Privat', + 'submit' => 'Marke erstellen', + 'submitting' => 'Wird erstellt...', + ], + + 'edit' => [ + 'title' => 'Marke bearbeiten', + 'description' => 'Aktualisiere den Namen dieser Marke', + 'name' => 'Markenname', + 'name_placeholder' => 'z. B. Acme Corp, Privat', + 'submit' => 'Änderungen speichern', + 'submitting' => 'Wird gespeichert...', + ], + + 'delete' => [ + 'title' => 'Marke löschen', + 'description' => 'Möchtest du diese Marke wirklich löschen? Die Zuordnung der Social-Media-Konten wird aufgehoben, sie werden aber nicht gelöscht.', + 'confirm' => 'Löschen', + 'cancel' => 'Abbrechen', + ], + + 'flash' => [ + 'created' => 'Marke erfolgreich erstellt!', + 'updated' => 'Marke erfolgreich aktualisiert!', + 'deleted' => 'Marke erfolgreich gelöscht!', + ], +]; diff --git a/lang/de/calendar.php b/lang/de/calendar.php new file mode 100644 index 00000000..5eaf8c2d --- /dev/null +++ b/lang/de/calendar.php @@ -0,0 +1,14 @@ + 'Kalender', + 'today' => 'Heute', + 'day' => 'Tag', + 'week' => 'Woche', + 'month' => 'Monat', + 'new_post' => 'Neuer Beitrag', + 'no_content' => 'Kein Inhalt', + 'more' => '+:count weitere', +]; diff --git a/lang/de/comments.php b/lang/de/comments.php new file mode 100644 index 00000000..ce1ae4c0 --- /dev/null +++ b/lang/de/comments.php @@ -0,0 +1,20 @@ + 'Schreibe einen Kommentar...', + 'reply_placeholder' => 'Schreibe eine Antwort...', + 'reply' => 'Antworten', + 'edit' => 'Bearbeiten', + 'delete' => 'Löschen', + 'edited' => 'bearbeitet', + 'save' => 'Speichern', + 'cancel' => 'Abbrechen', + 'send' => 'Senden', + 'replying_to' => 'Antwort an :name', + 'empty' => 'Noch keine Kommentare. Starte die Unterhaltung.', + 'load_more' => 'Ältere Kommentare laden', + 'today' => 'Heute', + 'yesterday' => 'Gestern', +]; diff --git a/lang/de/common.php b/lang/de/common.php new file mode 100644 index 00000000..c059b336 --- /dev/null +++ b/lang/de/common.php @@ -0,0 +1,59 @@ + 'Zurück', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'Dies kann nicht rückgängig gemacht werden.', + 'type' => 'Gib', + 'to_confirm' => 'zur Bestätigung ein.', + 'copy_to_clipboard' => 'In die Zwischenablage kopieren', + 'delete_keyword' => 'löschen', + ], + + 'photo_upload' => [ + 'upload' => 'Hochladen', + 'uploading' => 'Wird hochgeladen...', + 'remove' => 'Foto entfernen', + 'hint' => 'Empfohlen: quadratisches Bild, max. 2 MB.', + ], + + 'timezone' => [ + 'select' => 'Zeitzone auswählen', + 'search' => 'Zeitzone suchen...', + 'empty' => 'Keine Zeitzone gefunden', + ], + + 'date_picker' => [ + 'select' => 'Datum auswählen', + ], + + 'date_range_picker' => [ + 'placeholder' => 'Zeitraum wählen', + 'today' => 'Heute', + 'yesterday' => 'Gestern', + 'last_7_days' => 'Letzte 7 Tage', + 'last_30_days' => 'Letzte 30 Tage', + 'last_3_months' => 'Letzte 3 Monate', + 'last_6_months' => 'Letzte 6 Monate', + 'last_12_months' => 'Letzte 12 Monate', + 'this_month' => 'Dieser Monat', + 'last_month' => 'Letzter Monat', + 'year_to_date' => 'Seit Jahresbeginn', + 'last_year' => 'Letztes Jahr', + ], + + 'cancel' => 'Abbrechen', + 'clear' => 'Zurücksetzen', + 'close' => 'Schließen', + 'loading_more' => 'Weitere werden geladen...', + + 'actions' => [ + 'copy' => 'Kopieren', + 'copied' => 'Kopiert', + 'copy_failed' => 'Kopieren in die Zwischenablage fehlgeschlagen', + ], +]; diff --git a/lang/de/labels.php b/lang/de/labels.php new file mode 100644 index 00000000..e1c8364f --- /dev/null +++ b/lang/de/labels.php @@ -0,0 +1,56 @@ + 'Labels', + 'description' => 'Erstelle Labels, um deine Beiträge zu organisieren und zu kategorisieren', + 'search' => 'Labels suchen...', + 'new_label' => 'Neues Label', + 'no_labels_yet' => 'Noch keine Labels', + 'no_search_results' => 'Keine Labels passen zu deiner Suche', + 'try_different_search' => 'Versuche ein anderes Stichwort oder setze die Suche zurück.', + 'create_first_label' => 'Erstelle dein erstes Label', + 'table' => [ + 'name' => 'Name', + 'created_at' => 'Erstellt', + ], + + 'actions' => [ + 'edit' => 'Label bearbeiten', + 'delete' => 'Label löschen', + ], + + 'create' => [ + 'title' => 'Label erstellen', + 'description' => 'Gib deinem Label einen Namen und wähle eine Farbe', + 'name' => 'Name', + 'name_placeholder' => 'Label-Namen eingeben...', + 'color' => 'Farbe', + 'submit' => 'Label erstellen', + 'submitting' => 'Wird erstellt...', + ], + + 'edit' => [ + 'title' => 'Label bearbeiten', + 'description' => 'Aktualisiere Name und Farbe für dieses Label', + 'name' => 'Name', + 'name_placeholder' => 'Label-Namen eingeben...', + 'color' => 'Farbe', + 'submit' => 'Änderungen speichern', + 'submitting' => 'Wird gespeichert...', + ], + + 'delete' => [ + 'title' => 'Label löschen', + 'description' => 'Möchtest du dieses Label wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.', + 'confirm' => 'Löschen', + 'cancel' => 'Abbrechen', + ], + + 'flash' => [ + 'created' => 'Label erfolgreich erstellt!', + 'updated' => 'Label erfolgreich aktualisiert!', + 'deleted' => 'Label erfolgreich gelöscht!', + ], +]; diff --git a/lang/de/mail.php b/lang/de/mail.php new file mode 100644 index 00000000..4a44b52a --- /dev/null +++ b/lang/de/mail.php @@ -0,0 +1,24 @@ + [ + 'subject' => ':name hat dich auf TryPost erwähnt', + 'title' => ':name hat dich erwähnt', + 'intro' => ':name hat dich in einem Beitragskommentar erwähnt.', + 'cta' => 'Kommentar ansehen', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :count Konto muss in :workspace erneut verbunden werden|[2,*] :count Konten müssen in :workspace erneut verbunden werden', + 'title' => 'Konten müssen erneut verbunden werden', + 'intro' => 'Die folgenden Social-Media-Konten in deinem Workspace :workspace wurden getrennt und müssen erneut verbunden werden:', + 'reasons_title' => 'Das kann folgende Gründe haben:', + 'reason_expired' => 'Zugriffstokens sind abgelaufen', + 'reason_revoked' => 'Du hast den Zugriff von TryPost auf der Plattform widerrufen', + 'reason_changed' => 'Die Plattform hat ihre Authentifizierungsanforderungen geändert', + 'reconnect_cta' => 'Bitte verbinde diese Konten erneut, um weiterhin Beiträge zu planen und zu veröffentlichen.', + 'button' => 'Konten erneut verbinden', + ], +]; diff --git a/lang/de/notifications.php b/lang/de/notifications.php new file mode 100644 index 00000000..9d91e8d8 --- /dev/null +++ b/lang/de/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'Dein Beitrag ist fertig', + 'body' => 'Die KI ist gerade fertig geworden. Tippe, um ihn zu prüfen und zu veröffentlichen.', + ], + 'account_disconnected' => [ + 'title' => ':platform-Konto getrennt', + 'body' => ':account muss erneut verbunden werden', + ], + 'account_token_expired' => [ + 'title' => ':platform-Konto muss erneut verbunden werden', + 'body' => 'Sitzung von :account abgelaufen – bitte verbinde es erneut, um weiter zu posten', + ], +]; diff --git a/lang/de/onboarding.php b/lang/de/onboarding.php new file mode 100644 index 00000000..a3b93c47 --- /dev/null +++ b/lang/de/onboarding.php @@ -0,0 +1,41 @@ + 'Willkommen bei TryPost', + 'description' => 'Sag uns, was dich oder dein Unternehmen am besten beschreibt, damit wir dein Erlebnis anpassen können.', + 'continue' => 'Weiter', + 'personas' => [ + 'creator' => 'Content Creator', + 'freelancer' => 'Freelancer', + 'developer' => 'Entwickler', + 'startup' => 'Startup', + 'agency' => 'Agentur', + 'small_business' => 'Kleinunternehmen', + 'marketer' => 'Marketer', + 'online_store' => 'Onlineshop', + 'other' => 'Sonstiges', + ], + 'goals_title' => 'Was ist dein Ziel mit TryPost?', + 'goals_description' => 'Wähle alles aus, was passt, und wir richten TryPost für dich ein.', + 'goals' => [ + 'save_time' => 'Zeit sparen, indem ich überall gleichzeitig poste', + 'ai_content' => 'Beiträge schneller mit KI erstellen', + 'plan_calendar' => 'Meine Beiträge in einem Kalender planen', + 'stay_on_brand' => 'Jeden Beitrag markenkonform halten', + 'grow_audience' => 'Meine Reichweite und mein Engagement steigern', + 'drive_sales' => 'Mehr Traffic und Verkäufe erzielen', + 'manage_clients' => 'Mehrere Marken oder Kunden verwalten', + 'team_collaboration' => 'Mit meinem Team arbeiten', + 'automate_api' => 'Das Posten per API, MCP oder Code automatisieren', + 'track_performance' => 'Sehen, wie meine Beiträge performen', + 'just_exploring' => 'Ich schaue mich vorerst nur um', + 'other' => 'Etwas anderes', + ], + 'connect' => [ + 'title' => 'Verbinde dein erstes Netzwerk', + 'description' => 'Verknüpfe mindestens ein Social-Media-Konto, um mit der Planung zu beginnen. Du kannst jederzeit weitere hinzufügen.', + 'must_connect' => 'Verbinde mindestens ein Netzwerk, um fortzufahren.', + ], +]; diff --git a/lang/de/pagination.php b/lang/de/pagination.php new file mode 100644 index 00000000..3ececf3c --- /dev/null +++ b/lang/de/pagination.php @@ -0,0 +1,21 @@ + '« Zurück', + 'next' => 'Weiter »', + +]; diff --git a/lang/de/passwords.php b/lang/de/passwords.php new file mode 100644 index 00000000..c0b44d84 --- /dev/null +++ b/lang/de/passwords.php @@ -0,0 +1,24 @@ + 'Dein Passwort wurde zurückgesetzt.', + 'sent' => 'Wir haben dir den Link zum Zurücksetzen deines Passworts per E-Mail gesendet.', + 'throttled' => 'Bitte warte, bevor du es erneut versuchst.', + 'token' => 'Dieser Token zum Zurücksetzen des Passworts ist ungültig.', + 'user' => 'Wir können keinen Benutzer mit dieser E-Mail-Adresse finden.', + +]; diff --git a/lang/de/posts.php b/lang/de/posts.php new file mode 100644 index 00000000..f07a1de4 --- /dev/null +++ b/lang/de/posts.php @@ -0,0 +1,673 @@ + 'Beiträge', + 'search' => 'Beiträge suchen...', + 'all_posts' => 'Alle Beiträge', + 'new_post' => 'Neuer Beitrag', + 'no_posts' => 'Keine Beiträge gefunden', + 'no_search_results' => 'Keine Beiträge passen zu deiner Suche', + 'try_different_search' => 'Versuche ein anderes Stichwort oder setze die Suche zurück.', + 'start_creating' => 'Beginne, indem du deinen ersten Beitrag erstellst.', + 'filter_by_label' => 'Nach Label filtern', + 'label_search_placeholder' => 'Labels suchen...', + 'no_labels' => 'Keine Labels gefunden.', + 'clear_label_filter' => 'Label-Filter zurücksetzen', + 'table' => [ + 'post' => 'Beitrag', + 'status' => 'Status', + 'content' => 'Inhalt', + 'platforms' => 'Plattformen', + 'labels' => 'Labels', + 'scheduled_at' => 'Datum', + 'actions' => '', + ], + 'manage_posts' => 'Verwalte all deine Beiträge', + 'delete_confirm' => 'Möchtest du diesen Beitrag wirklich löschen?', + 'by' => 'von', + + 'actions' => [ + 'view' => 'Beitrag ansehen', + 'delete' => 'Löschen', + 'duplicate' => 'Duplizieren', + 'copy_id' => 'ID kopieren', + 'copied' => 'ID in die Zwischenablage kopiert', + ], + + 'form' => [ + 'post_type' => 'Beitragstyp', + 'board' => 'Pinnwand', + 'select_board' => 'Pinnwand auswählen', + 'search_board' => 'Pinnwand suchen...', + 'no_board_found' => 'Keine Pinnwand gefunden', + 'media' => 'Medien', + 'min' => 'Min.', + 'uploading' => 'Wird hochgeladen...', + 'drop_to_upload' => 'Zum Hochladen ablegen', + 'drag_and_drop' => 'Ziehen & ablegen oder zum Hochladen klicken', + 'photos_and_videos' => 'Fotos und Videos', + 'photos_only' => 'Nur Fotos', + 'videos_only' => 'Nur Videos', + 'drag_to_reorder' => 'Zum Neuordnen ziehen', + 'caption' => 'Bildunterschrift', + 'write_caption' => 'Schreibe deine Bildunterschrift...', + 'content_exceeds_platform' => ':platform: um :over Zeichen zu lang (max. :limit).', + 'tiktok' => [ + 'settings' => 'TikTok-Einstellungen', + 'variant_label' => 'Beitragstyp', + 'variant' => [ + 'video' => 'Video', + 'photo' => 'Foto-Karussell', + ], + 'posting_to' => 'Veröffentlichen auf', + 'privacy_level' => 'Wer kann dieses Video sehen?', + 'privacy_placeholder' => 'Wähle, wer diesen Beitrag sehen kann', + 'privacy' => [ + 'public' => 'Öffentlich für alle', + 'friends' => 'Freunde, denen du gegenseitig folgst', + 'followers' => 'Follower', + 'private' => 'Nur ich', + 'private_disabled_branded' => 'Die Sichtbarkeit von Branded Content kann nicht auf privat gesetzt werden.', + ], + 'privacy_hint' => 'Die verfügbaren Optionen hängen von deinen TikTok-Kontoeinstellungen ab.', + 'auto_add_music' => 'Musik automatisch hinzufügen', + 'auto_add_music_hint' => 'Diese Funktion ist nur für Fotos verfügbar. Sie fügt eine Standardmusik hinzu, die du später ändern kannst.', + 'yes' => 'Ja', + 'no' => 'Nein', + 'allow_users' => 'Nutzern erlauben:', + 'comments' => 'Kommentieren', + 'duet' => 'Duett', + 'stitch' => 'Stitch', + 'is_aigc' => 'Mit KI erstelltes Video', + 'disclose' => 'Videoinhalt offenlegen', + 'disclose_hint' => 'Aktivieren, um offenzulegen, dass dieses Video Waren oder Dienstleistungen gegen einen Gegenwert bewirbt. Dein Video kann dich selbst, einen Dritten oder beide bewerben.', + 'promotional_organic_title' => 'Dein Foto/Video wird als „Werbeinhalt" gekennzeichnet.', + 'promotional_paid_title' => 'Dein Foto/Video wird als „Bezahlte Partnerschaft" gekennzeichnet.', + 'promotional_description' => 'Dies kann nach der Veröffentlichung deines Videos nicht mehr geändert werden.', + 'compliance_incomplete' => 'Du musst angeben, ob dein Inhalt dich selbst, einen Dritten oder beide bewirbt.', + 'privacy_required' => 'Bei der Veröffentlichung ist die TikTok-Datenschutzstufe erforderlich.', + 'branded_cleared_private' => 'Die Privatsphäre wurde zurückgesetzt, da Branded Content nicht privat sein kann.', + 'interaction_disabled_by_creator' => 'In deinen TikTok-Kontoeinstellungen deaktiviert', + 'max_duration_exceeded' => 'Das Video ist :duration s lang, aber dieses Konto kann nur Videos mit bis zu :max s veröffentlichen.', + 'processing_hint' => 'Nach der Veröffentlichung kann es einige Minuten dauern, bis der Inhalt verarbeitet ist und in deinem TikTok-Profil erscheint.', + 'brand_organic' => 'Deine Marke', + 'brand_organic_hint' => 'Du bewirbst dich selbst oder deine eigene Marke. Dieses Video wird als Brand Organic klassifiziert.', + 'brand_content' => 'Branded Content', + 'brand_content_hint' => 'Du bewirbst eine andere Marke oder einen Dritten. Dieses Video wird als Branded Content klassifiziert.', + 'compliance' => [ + 'agree' => 'Mit dem Veröffentlichen akzeptierst du TikToks', + 'music_usage' => 'Bestätigung zur Musiknutzung', + 'and' => 'und', + 'branded_policy' => 'Richtlinie für Branded Content', + ], + ], + 'instagram' => [ + 'settings' => 'Instagram-Einstellungen', + 'posting_to' => 'Veröffentlichen auf', + 'variant_label' => 'Beitragstyp', + 'variant' => [ + 'feed' => 'Feed-Beitrag', + 'reel' => 'Reel', + 'story' => 'Story', + ], + 'aspect_label' => 'Seitenverhältnis', + 'aspect' => [ + 'square' => 'Quadratisch (1:1)', + 'portrait' => 'Hochformat (4:5)', + 'landscape' => 'Querformat (16:9)', + 'original' => 'Original', + ], + ], + 'facebook' => [ + 'settings' => 'Facebook-Einstellungen', + 'posting_to' => 'Veröffentlichen auf', + 'variant_label' => 'Beitragstyp', + 'variant' => [ + 'post' => 'Beitrag', + 'reel' => 'Reel', + 'story' => 'Story', + ], + 'aspect_label' => 'Seitenverhältnis', + 'aspect' => [ + 'square' => 'Quadratisch (1:1)', + 'portrait' => 'Hochformat (4:5)', + 'landscape' => 'Querformat (16:9)', + 'original' => 'Original', + ], + ], + 'linkedin' => [ + 'settings' => 'LinkedIn-Einstellungen', + 'settings_page' => 'LinkedIn-Seiteneinstellungen', + 'posting_to' => 'Veröffentlichen auf', + 'document_title' => 'Dokumenttitel', + 'document_title_placeholder' => 'Wird bei deinem PDF-Dokument-Beitrag angezeigt', + ], + 'pinterest' => [ + 'settings' => 'Pinterest-Einstellungen', + 'posting_to' => 'Veröffentlichen auf', + 'variant_label' => 'Pin-Typ', + 'variant' => [ + 'pin' => 'Pin', + 'video_pin' => 'Video-Pin', + 'carousel' => 'Karussell', + ], + 'board' => 'Pinnwand', + 'select_board' => 'Pinnwand auswählen', + 'no_boards' => 'Keine Pinterest-Pinnwände gefunden. Erstelle zuerst eine in deinem Pinterest-Konto.', + 'search_board' => 'Pinnwände suchen...', + 'no_board_found' => 'Keine Pinnwand passt zu deiner Suche.', + 'board_required' => 'Wähle eine Pinterest-Pinnwand, um diesen Beitrag zu veröffentlichen.', + ], + 'discord' => [ + 'settings' => 'Discord-Einstellungen', + 'posting_to' => 'Veröffentlichen auf', + 'channel' => 'Kanal', + 'select_channel' => 'Kanal auswählen', + 'loading_channels' => 'Kanäle werden geladen…', + 'search_channel' => 'Kanäle suchen…', + 'no_channels' => 'Keine Kanäle gefunden.', + 'channel_required' => 'Wähle einen Discord-Kanal, um diesen Beitrag zu veröffentlichen.', + 'mentions' => 'Erwähnungen', + 'search_mention' => 'Eine Rolle oder ein Mitglied erwähnen…', + 'embeds' => 'Embeds', + 'embed' => 'Embed', + 'add_embed' => 'Embed hinzufügen', + 'embed_title' => 'Embed-Titel', + 'embed_description' => 'Embed-Beschreibung', + 'embed_url' => 'Embed-URL', + 'embed_image' => 'Bild-URL', + 'embed_color' => 'Farbe', + ], + 'warnings' => [ + 'no_variant' => 'Wähle einen Beitragstyp, um fortzufahren.', + 'requires_media' => 'Dieser Beitragstyp erfordert mindestens ein Bild oder Video.', + 'max_files_exceeded' => 'Dieser Beitragstyp akzeptiert bis zu :max Mediendateien (du hast :current).', + 'min_files_required' => 'Dieser Beitragstyp erfordert mindestens :min Mediendateien (du hast :current).', + 'no_video_allowed' => 'Dieser Beitragstyp akzeptiert keine Videos.', + 'no_image_allowed' => 'Dieser Beitragstyp akzeptiert nur Videos.', + 'no_document_allowed' => 'Dieser Beitragstyp akzeptiert keine PDF-Dokumente.', + 'no_mixed_media' => 'Bilder und ein Video können nicht im selben Beitrag kombiniert werden.', + 'document_not_alone' => 'Ein PDF muss einzeln veröffentlicht werden, ohne andere Bilder oder Videos.', + 'gif_not_allowed' => 'Diese Plattform akzeptiert keine GIFs. Entferne das GIF oder wähle ein anderes Netzwerk.', + 'image_too_large' => 'Das Bild überschreitet das Limit von :max für diesen Beitragstyp (deins hat :current).', + 'video_too_large' => 'Das Video überschreitet das Limit von :max für diesen Beitragstyp (deins hat :current).', + 'document_too_large' => 'Das PDF überschreitet das Limit von :max für diesen Beitragstyp (deins hat :current).', + 'video_too_long' => 'Das Video ist :current lang, aber dieser Beitragstyp erlaubt bis zu :max.', + 'aspect_ratio_too_narrow' => 'Das Seitenverhältnis :current ist zu hoch für diesen Beitragstyp (min. :min).', + 'aspect_ratio_too_wide' => 'Das Seitenverhältnis :current ist zu breit für diesen Beitragstyp (max. :max).', + ], + ], + + 'status' => [ + 'pending' => 'Ausstehend', + 'draft' => 'Entwurf', + 'scheduled' => 'Geplant', + 'publishing' => 'Wird veröffentlicht', + 'retrying' => 'Erneuter Versuch', + 'published' => 'Veröffentlicht', + 'partially_published' => 'Teilweise veröffentlicht', + 'failed' => 'Fehlgeschlagen', + ], + + 'descriptions' => [ + 'draft' => 'Beiträge, die auf Planung warten', + 'scheduled' => 'Zur Veröffentlichung geplante Beiträge', + 'published' => 'Bereits veröffentlichte Beiträge', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'Mit KI generieren', + 'title' => 'Beitrag mit KI generieren', + 'description' => 'Beschreibe, worum es in dem Beitrag gehen soll. Die KI verwendet deinen Markenkontext, um ihn zu schreiben.', + 'prompt_label' => 'Worum geht es in diesem Beitrag?', + 'prompt_placeholder' => 'z. B. Unser neues Bildgenerierungs-Feature für Karussells ankündigen', + 'preview_label' => 'Vorschau', + 'start' => 'Generieren', + 'apply' => 'Diesen Inhalt verwenden', + 'retry' => 'Erneut versuchen', + 'cancel' => 'Abbrechen', + ], + 'review' => [ + 'button_tooltip' => 'Mit KI prüfen', + 'title' => 'Beitrag mit KI prüfen', + 'description' => 'Die KI prüft Grammatik, Rechtschreibung und Verständlichkeit. Übernimm die Vorschläge, denen du zustimmst.', + 'loading' => 'Dein Text wird geprüft...', + 'no_issues' => 'Keine Probleme gefunden. Sieht gut aus.', + 'original' => 'Original', + 'suggestion' => 'Vorschlag', + 'apply' => 'Übernehmen', + 'apply_all' => 'Alle übernehmen', + 'applied' => 'Übernommen', + 'cancel' => 'Abbrechen', + ], + 'image_regenerate' => [ + 'button' => 'Anpassen', + 'title' => 'KI-Bild anpassen', + 'description' => 'Beschreibe die Korrektur. Das neue Bild ersetzt das aktuelle und behält seine Position im Karussell.', + 'instruction_label' => 'Anweisung', + 'instruction_placeholder' => 'z. B. Korrigiere den Tippfehler in der Überschrift und mache den Hintergrund heller.', + 'processing' => 'Bild wird neu generiert... das kann einige Sekunden dauern.', + 'submit' => 'Bild neu generieren', + 'cancel' => 'Abbrechen', + 'success' => 'Bild aktualisiert. Die neue Version hat die vorherige in deinem Beitrag ersetzt.', + 'fallback_title' => 'Diesen Bildtext verbessern', + 'errors' => [ + 'required' => 'Eine Anweisung ist erforderlich.', + 'start_failed' => 'Neugenerierung konnte nicht gestartet werden.', + 'unavailable' => 'Dieses Bild kann derzeit nicht neu generiert werden.', + 'timeout' => 'Die Neugenerierung dauert länger als erwartet. Versuche es gleich noch einmal.', + 'media_not_found' => 'Medienelement nicht gefunden.', + 'not_ai_media' => 'Nur KI-generierte Medien können neu generiert werden.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'Bildbeitrag', + 'description' => 'KI-Bild mit Überschrift und Bildunterschrift.', + ], + 'carousel' => [ + 'name' => 'Karussell', + 'description' => 'Karussell mit mehreren Slides und einer Bildunterschrift.', + ], + 'tweet_card' => [ + 'name' => 'Tweet-Karte', + 'description' => 'Dein Beitrag im Stil eines X/Twitter-Beitrags.', + ], + 'tweet_card_image' => [ + 'name' => 'Tweet-Karte mit Foto', + 'description' => 'Dein Beitrag als X/Twitter-Karte über einem unscharfen Foto.', + ], + ], + ], + + 'show' => [ + 'title' => 'Beitragsdetails', + 'edit' => 'Bearbeiten', + 'back' => 'Zurück', + 'no_content' => 'Keine Bildunterschrift', + 'platforms' => 'Plattformen', + 'no_platforms' => 'Keine Plattformen ausgewählt.', + 'view_on_platform' => 'Auf der Plattform ansehen', + 'published_on' => 'Veröffentlicht am :date', + 'scheduled_for' => 'Geplant für :date', + 'draft' => 'Entwurf', + 'status_pending' => 'Ausstehend', + 'metrics' => 'Kennzahlen', + 'metrics_loading' => 'Kennzahlen werden geladen…', + 'metrics_unavailable' => 'Kennzahlen für diese Plattform sind noch nicht verfügbar.', + 'metrics_empty' => 'Keine Kennzahlen zurückgegeben.', + ], + + 'edit' => [ + 'title' => 'Beitrag bearbeiten', + 'view_title' => 'Beitrag ansehen', + 'labels' => 'Labels', + 'no_labels' => 'Noch keine Labels erstellt', + 'schedule' => 'Planen', + 'pick_time' => 'Uhrzeit wählen', + 'pick_time_past' => 'Wähle ein zukünftiges Datum und eine zukünftige Uhrzeit.', + 'post_now' => 'Jetzt veröffentlichen', + 'time' => 'Uhrzeit', + 'cancel' => 'Abbrechen', + 'delete' => 'Löschen', + 'schedule_for' => 'Planen für', + 'schedule_date' => 'Datum planen', + 'unschedule' => 'Planung aufheben', + 'saving' => 'Wird gespeichert...', + 'saved' => 'Gespeichert', + 'draft' => 'Entwurf', + 'media' => 'Medien', + 'add_media' => 'Medien hinzufügen', + 'caption' => 'Bildunterschrift', + 'caption_placeholder' => 'Schreibe deine Bildunterschrift...', + 'compose_title' => 'Beitrag erstellen', + 'compose_subtitle' => 'Verfasse deine Nachricht und füge Medien hinzu', + 'preview_empty' => [ + 'title' => 'Keine Plattform ausgewählt', + 'description' => 'Wähle eine Plattform zum Veröffentlichen, um die Vorschau zu sehen.', + ], + 'drop_zone_title' => 'Medien hinzufügen', + 'drop_zone_subtitle' => 'Dateien ziehen & ablegen oder zum Durchsuchen klicken', + 'add' => 'Hinzufügen', + 'publish_to' => 'Veröffentlichen auf', + 'organize' => 'Organisieren', + 'signatures' => 'Signaturen', + 'view_on_platform' => 'Auf der Plattform ansehen', + 'platform_status' => 'Plattform-Status', + 'compliance_incomplete' => 'Einige Plattform-Einstellungen sind unvollständig oder nicht mit den angehängten Medien kompatibel.', + 'compliance' => [ + 'requires_content_or_media' => 'Füge Text oder Medien hinzu, um zu veröffentlichen.', + 'requires_media' => 'Füge ein Bild oder Video hinzu, um hier zu veröffentlichen.', + 'too_many_files' => 'Für dieses Format sind nur :max Datei(en) erlaubt.', + 'too_few_files' => 'Füge mindestens :min Dateien für dieses Format hinzu.', + 'no_videos' => 'Für dieses Format sind nur Bilder erlaubt.', + 'no_images' => 'Für dieses Format sind nur Videos erlaubt.', + 'no_mixed_media' => 'Bilder und Videos können nicht im selben Beitrag kombiniert werden.', + 'no_gifs' => 'GIFs werden hier nicht unterstützt.', + 'no_documents' => 'PDF-Dokumente werden von diesem Format nicht unterstützt.', + 'document_not_alone' => 'Ein PDF muss einzeln veröffentlicht werden, ohne andere Bilder oder Videos.', + 'video_too_large' => 'Das Video überschreitet das Größenlimit für diese Plattform.', + 'video_too_long' => 'Das Video muss für dieses Format kürzer als :seconds Sekunden sein.', + 'image_too_large' => 'Das Bild überschreitet das Größenlimit für diese Plattform.', + 'document_too_large' => 'Das PDF überschreitet das Größenlimit für diese Plattform.', + 'aspect_ratio_invalid' => 'Das Seitenverhältnis wird von diesem Format nicht unterstützt.', + 'no_content_type' => 'Wähle einen Inhaltstyp für diese Plattform.', + 'requires_text' => 'Füge Text hinzu – dieses Format benötigt einen Titel.', + ], + 'publishing' => 'Wird veröffentlicht...', + 'publishing_overlay_title' => 'Dein Beitrag wird veröffentlicht', + 'publishing_overlay_subtitle' => 'Das kann einen Moment dauern. Du kannst diese Seite bedenkenlos verlassen.', + 'scheduled_overlay_title' => 'Dieser Beitrag ist geplant', + 'scheduled_overlay_subtitle' => 'Geplant für :date. Hebe die Planung zuerst auf, um Änderungen vorzunehmen.', + 'unschedule_cta' => 'Zum Bearbeiten Planung aufheben', + + 'tabs' => [ + 'preview' => 'Vorschau', + 'channels' => 'Kanäle', + 'comments' => 'Kommentare', + 'comments_empty' => 'Noch keine Kommentare.', + ], + + 'media_picker' => [ + 'title' => 'Aus Galerie auswählen', + 'search' => 'Medien suchen...', + 'empty' => 'Noch keine Medien in deiner Galerie', + 'cancel' => 'Abbrechen', + 'add' => 'Hinzufügen', + 'add_count' => ':count hinzufügen', + ], + + 'emoji_picker' => [ + 'search' => 'Emoji suchen', + 'empty' => 'Keine Emojis gefunden', + 'recent' => 'Häufig verwendet', + 'smileys' => 'Smileys & Emotionen', + 'people' => 'Menschen & Körper', + 'nature' => 'Tiere & Natur', + 'food' => 'Essen & Trinken', + 'activities' => 'Aktivitäten', + 'travel' => 'Reisen & Orte', + 'objects' => 'Objekte', + 'symbols' => 'Symbole', + 'flags' => 'Flaggen', + ], + + 'status' => [ + 'pending' => 'Ausstehend', + 'scheduled' => 'Geplant', + 'published' => 'Veröffentlicht', + 'publishing' => 'Wird veröffentlicht...', + 'retrying' => 'Erneuter Versuch...', + 'failed' => 'Fehlgeschlagen', + ], + + 'delete_modal' => [ + 'title' => 'Beitrag löschen', + 'description' => 'Möchtest du diesen Beitrag wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.', + 'action' => 'Löschen', + 'cancel' => 'Abbrechen', + ], + + 'sync_enable' => [ + 'title' => 'Synchronisierung aktivieren?', + 'description' => 'Alle Plattformen teilen denselben Inhalt. Alle individuellen Anpassungen an einzelnen Plattformen werden durch den aktuellen Inhalt ersetzt.', + 'cancel' => 'Abbrechen', + 'action' => 'Synchronisierung aktivieren', + ], + + 'sync_disable' => [ + 'title' => 'Synchronisierung deaktivieren?', + 'description' => 'Jede Plattform behält ihren aktuellen Inhalt, aber zukünftige Änderungen gelten nur für die Plattform, die du gerade bearbeitest.', + 'customize_note' => 'Du kannst den Inhalt für jede Plattform einzeln anpassen.', + 'cancel' => 'Abbrechen', + 'action' => 'Synchronisierung deaktivieren', + ], + + 'platforms_dialog' => [ + 'title' => 'Plattformen auswählen', + 'description' => 'Wähle, auf welchen Plattformen dieser Beitrag veröffentlicht werden soll.', + ], + + 'signatures_modal' => [ + 'search' => 'Signaturen suchen...', + 'no_results' => 'Keine Signaturen gefunden.', + ], + + 'validation' => [ + 'select_board' => 'Pinnwand auswählen', + 'images_not_supported' => 'Bilder nicht unterstützt', + 'videos_not_supported' => 'Videos nicht unterstützt', + 'max_images' => 'Max. :count Bilder', + 'requires_media' => 'Medien erforderlich', + 'requires_content' => 'Textinhalt ist erforderlich', + 'exceeded' => ':count überschritten', + 'does_not_support_images' => ':platform unterstützt keine Bilder', + 'supports_up_to_images' => ':platform unterstützt bis zu :count Bilder', + 'does_not_support_videos' => ':platform unterstützt keine Videos', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'Feed-Beitrag', + 'description' => 'Erscheint in deinem Feed und Profil', + ], + 'instagram_reel' => [ + 'label' => 'Reel', + 'description' => 'Kurzes Video bis zu 90 Sekunden', + ], + 'instagram_story' => [ + 'label' => 'Story', + 'description' => 'Verschwindet nach 24 Stunden', + ], + 'linkedin_post' => [ + 'label' => 'Beitrag', + 'description' => 'Standardbeitrag – Einzelbild, mehrere Bilder, Video oder PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'Beitrag', + 'description' => 'Standardbeitrag – Einzelbild, mehrere Bilder, Video oder PDF', + ], + 'facebook_post' => [ + 'label' => 'Beitrag', + 'description' => 'Standardbeitrag auf deiner Seite', + ], + 'facebook_reel' => [ + 'label' => 'Reel', + 'description' => 'Kurzes Video bis zu 90 Sekunden', + ], + 'facebook_story' => [ + 'label' => 'Story', + 'description' => 'Vertikale Videostory, bis zu 60 Sekunden', + ], + 'tiktok_video' => [ + 'label' => 'Video', + 'description' => 'Kurzvideo-Inhalt', + ], + 'tiktok_photo' => [ + 'label' => 'Foto-Karussell', + 'description' => 'Bis zu 35 Fotos als wischbares Karussell', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => 'Vertikales Video bis zu 60 Sekunden', + ], + 'x_post' => [ + 'label' => 'Beitrag', + 'description' => 'Tweet mit Text und Medien', + ], + 'threads_post' => [ + 'label' => 'Beitrag', + 'description' => 'Textbeitrag mit optionalen Medien', + ], + 'pinterest_pin' => [ + 'label' => 'Pin', + 'description' => 'Standard-Bild-Pin', + ], + 'pinterest_video_pin' => [ + 'label' => 'Video-Pin', + 'description' => 'Video-Pin (4 Sek. – 15 Min.)', + ], + 'pinterest_carousel' => [ + 'label' => 'Karussell', + 'description' => 'Karussell mit mehreren Bildern (2–5 Bilder)', + ], + 'bluesky_post' => [ + 'label' => 'Beitrag', + 'description' => 'Textbeitrag mit optionalen Bildern', + ], + 'mastodon_post' => [ + 'label' => 'Beitrag', + 'description' => 'Textbeitrag mit optionalen Medien', + ], + 'telegram_post' => [ + 'label' => 'Beitrag', + 'description' => 'Textbeitrag mit optionalen Medien', + ], + 'discord_message' => [ + 'label' => 'Nachricht', + 'description' => 'Nachricht an einen Discord-Kanal mit optionalen Medien & Embeds', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'LinkedIn-Seite', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Facebook-Seite', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'Beitrag erfolgreich geplant!', + 'deleted' => 'Beitrag erfolgreich gelöscht!', + 'duplicated' => 'Beitrag als Entwurf dupliziert.', + 'cannot_edit_finalized' => 'Dieser Beitrag wurde bereits verarbeitet und kann nicht erneut veröffentlicht werden. Dupliziere ihn, um es noch einmal zu versuchen.', + 'cannot_delete_published' => 'Veröffentlichte Beiträge können nicht gelöscht werden.', + 'connect_first' => 'Verbinde mindestens ein soziales Netzwerk, bevor du einen Beitrag erstellst.', + ], + + 'errors' => [ + 'account_disconnected' => 'Social-Media-Konto ist getrennt', + 'account_inactive' => 'Social-Media-Konto ist deaktiviert', + 'account_token_expired' => 'Sitzung des Social-Media-Kontos abgelaufen – bitte erneut verbinden', + ], + + 'delete' => [ + 'title' => 'Beitrag löschen?', + 'description' => 'Diese Aktion kann nicht rückgängig gemacht werden. Der Beitrag und alle zugehörigen Medien werden dauerhaft entfernt.', + 'confirm' => 'Ja, löschen', + 'cancel' => 'Abbrechen', + ], + + 'create' => [ + 'title' => 'Neuen Beitrag erstellen', + 'description' => 'Wähle, wie du beginnen möchtest.', + 'scratch_title' => 'Von Grund auf beginnen', + 'scratch_description' => 'Öffne einen leeren Beitrag und schreibe alles selbst.', + 'ai_title' => 'Mit KI generieren', + 'ai_description' => 'Beschreibe, was du möchtest, und die KI generiert den Inhalt für dich.', + 'ai_configure_description' => 'Wähle ein Format und beschreibe den Beitrag, den du erstellen möchtest.', + 'ai_pick_template_description' => 'Wähle einen Stil für deinen KI-generierten Beitrag.', + 'template_title' => 'Vorlage verwenden', + 'template_description' => 'Wähle aus unseren kuratierten Vorlagen und passe sie an.', + 'coming_soon' => 'Demnächst verfügbar', + + 'preview' => [ + 'image_title' => 'Bildtitel', + 'image_body' => 'Bildtext', + ], + + 'steps' => [ + 'template_picker_title' => 'Wähle einen Stil', + 'format_title' => 'Wähle ein Format', + 'format_description' => 'Wähle die Art des Beitrags, den du erstellen möchtest.', + 'account_title' => 'Wähle ein Konto', + 'account_description' => 'Wähle das Social-Media-Konto zum Veröffentlichen.', + 'media_title' => 'Medienoptionen', + 'media_carousel' => 'Wie viele Slides?', + 'media_optional' => 'Bilder einbeziehen?', + 'media_optional_label' => 'Wie viele Bilder?', + 'media_none' => 'Keine', + 'media_count_label' => 'Anzahl der Bilder', + 'prompt_title' => 'Beschreibe deinen Beitrag', + 'prompt_label' => 'Worum geht es in diesem Beitrag?', + 'prompt_placeholder' => 'z. B. Unser neues Karussell-Feature für Instagram ankündigen', + 'preview_error' => 'Etwas ist schiefgelaufen. Bitte versuche es erneut.', + 'loading_page_title' => 'Dein Beitrag wird generiert', + 'loading_eta' => 'Geschätzte Zeit: etwa :minutes.', + 'loading_eta_minute_one' => '1 Minute', + 'loading_eta_minute_other' => ':count Minuten', + 'loading_leave_title' => 'Du kannst weiterarbeiten.', + 'loading_leave_body' => 'Wir benachrichtigen dich, wenn der Beitrag fertig ist.', + 'loading_leave_cta' => 'Zum Kalender', + 'loading_create_another_cta' => 'Weiteren Beitrag erstellen', + 'loading_tip_credits' => 'Jedes KI-Bild verbraucht etwa 15 Credits.', + 'loading_tip_edit' => 'Du kannst alles bearbeiten, sobald der Beitrag fertig ist.', + 'loading_tip_draft' => 'Generierte Beiträge landen in deinen Entwürfen.', + 'loading_tip_brand' => 'Passe deine Markeneinstellungen an, um zukünftige Beiträge zu beeinflussen.', + 'loading_tip_carousel' => 'Karussells liefern pro hochgeladenem Bild ein Slide.', + 'loading_tip_quality' => 'Die Bildqualität ist auf ein Gleichgewicht aus Geschwindigkeit und Kosten eingestellt.', + 'create' => 'Beitrag erstellen', + 'back' => 'Zurück', + 'next' => 'Weiter', + 'cancel' => 'Abbrechen', + 'discard' => 'Verwerfen', + 'retry' => 'Erneut versuchen', + 'no_platforms' => 'Keine verbundenen Konten', + 'connect_first' => 'Verbinde mindestens ein Social-Media-Konto, um die KI-Generierung zu nutzen.', + 'no_account_for_template' => 'Verbinde ein kompatibles Konto, um diese Vorlage zu verwenden.', + + 'format' => [ + 'instagram_feed' => 'Instagram-Feed-Beitrag', + 'instagram_carousel' => 'Instagram-Karussell', + 'linkedin_post' => 'LinkedIn-Beitrag', + 'linkedin_page_post' => 'LinkedIn-Seiten-Beitrag', + 'x_post' => 'X-Beitrag', + 'bluesky_post' => 'Bluesky-Beitrag', + 'threads_post' => 'Threads-Beitrag', + 'mastodon_post' => 'Mastodon-Beitrag', + 'telegram_post' => 'Telegram-Beitrag', + 'discord_message' => 'Discord-Nachricht', + 'facebook_post' => 'Facebook-Beitrag', + 'pinterest_pin' => 'Pinterest-Pin', + 'instagram_story' => 'Instagram-Story', + 'facebook_story' => 'Facebook-Story', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'Wähle eine Vorlage', + 'browser_description' => 'Beginne mit einer kuratierten Vorlage und passe sie an.', + 'search_placeholder' => 'Vorlagen suchen…', + 'no_search_results' => 'Keine Vorlagen passen zu deiner Suche', + 'try_different_search' => 'Versuche ein anderes Stichwort oder setze die Suche zurück.', + 'slides_count' => '{count} Slide|{count} Slides', + 'all_platforms' => 'Alle Plattformen', + 'platform_search_placeholder' => 'Plattform suchen…', + 'no_platform_match' => 'Keine passende Plattform.', + 'use_this' => 'Diese Vorlage verwenden', + 'no_templates' => 'Keine Vorlagen verfügbar.', + 'applying' => 'Vorlage wird angewendet…', + 'category' => [ + 'product_launch' => 'Produkteinführung', + 'promotion' => 'Aktion', + 'educational' => 'Lehrreich', + 'behind_the_scenes' => 'Hinter den Kulissen', + 'testimonial' => 'Kundenstimme', + 'industry_tip' => 'Branchentipp', + 'event' => 'Event', + 'engagement' => 'Engagement', + ], + ], +]; diff --git a/lang/de/settings.php b/lang/de/settings.php new file mode 100644 index 00000000..4ea0da01 --- /dev/null +++ b/lang/de/settings.php @@ -0,0 +1,358 @@ + 'Einstellungen', + 'description' => 'Verwalte dein Profil und deine Kontoeinstellungen', + + 'hub' => [ + 'title' => 'Einstellungen', + 'description' => 'Wähle, was du verwalten möchtest.', + 'profile' => [ + 'title' => 'Profil', + 'description' => 'Aktualisiere deine persönlichen Daten, dein Passwort und deine Benachrichtigungseinstellungen.', + ], + 'workspace' => [ + 'title' => 'Workspace', + 'description' => 'Konfiguriere deinen Workspace, deine Marke, deine Mitglieder und deine API-Keys.', + ], + 'account' => [ + 'title' => 'Konto', + 'description' => 'Verwalte deine Kontoinformationen, deine Nutzung und deine Abrechnung.', + ], + ], + + 'nav' => [ + 'profile' => 'Profil', + 'authentication' => 'Authentifizierung', + 'workspace' => 'Workspace', + 'members' => 'Mitglieder', + 'notifications' => 'Benachrichtigungen', + 'billing' => 'Abrechnung', + ], + + 'notifications' => [ + 'title' => 'Benachrichtigungseinstellungen', + 'heading' => 'E-Mail-Benachrichtigungen', + 'description' => 'Wähle, welche E-Mail-Benachrichtigungen du erhalten möchtest', + 'post_published' => 'Beitrag veröffentlicht', + 'post_published_description' => 'Erhalte eine E-Mail, wenn dein Beitrag erfolgreich veröffentlicht wurde', + 'post_failed' => 'Beitrag fehlgeschlagen', + 'post_failed_description' => 'Erhalte eine E-Mail, wenn die Veröffentlichung deines Beitrags fehlschlägt', + 'account_disconnected' => 'Konto getrennt', + 'account_disconnected_description' => 'Erhalte eine E-Mail, wenn ein Social-Media-Konto getrennt wird', + 'save' => 'Einstellungen speichern', + ], + + 'profile' => [ + 'title' => 'Profileinstellungen', + 'photo_heading' => 'Profilfoto', + 'photo_description' => 'Lade ein Profilfoto hoch', + 'heading' => 'Profilinformationen', + 'description' => 'Aktualisiere deinen Namen und deine E-Mail-Adresse', + 'avatar' => 'Avatar', + 'name' => 'Name', + 'name_placeholder' => 'Vollständiger Name', + 'email' => 'E-Mail-Adresse', + 'email_placeholder' => 'E-Mail-Adresse', + 'email_unverified' => 'Deine E-Mail-Adresse ist nicht bestätigt.', + 'resend_verification' => 'Klicke hier, um die Bestätigungs-E-Mail erneut zu senden.', + 'verification_sent' => 'Ein neuer Bestätigungslink wurde an deine E-Mail-Adresse gesendet.', + 'save' => 'Speichern', + ], + + 'authentication' => [ + 'title' => 'Authentifizierung', + 'page_title' => 'Authentifizierungseinstellungen', + 'sessions' => [ + 'title' => 'Aktive Sitzungen', + 'description' => 'Wenn dir etwas Verdächtiges auffällt, melde dich von anderen Geräten ab.', + 'unknown_browser' => 'Unbekannter Browser', + 'unknown_ip' => 'Unbekannte IP', + 'on' => 'am', + 'active_now' => 'Jetzt aktiv', + 'log_out_others' => 'Andere Geräte abmelden', + 'modal_title' => 'Andere Geräte abmelden', + 'modal_description_password' => 'Gib dein aktuelles Passwort ein, um zu bestätigen, dass du andere Browser-Sitzungen abmelden möchtest.', + 'modal_description_email' => 'Gib deine E-Mail-Adresse ein, um zu bestätigen, dass du andere Browser-Sitzungen abmelden möchtest.', + 'password_placeholder' => 'Aktuelles Passwort', + 'email_placeholder' => 'E-Mail deines Kontos', + 'cancel' => 'Abbrechen', + 'submit' => 'Andere Geräte abmelden', + 'email_mismatch' => 'Die E-Mail-Adresse stimmt nicht mit deinem Konto überein.', + 'flash_logged_out' => 'Du wurdest von anderen Geräten abgemeldet.', + ], + 'password' => [ + 'update_title' => 'Passwort aktualisieren', + 'set_title' => 'Passwort festlegen', + 'update_description' => 'Stelle sicher, dass dein Konto ein langes, zufälliges Passwort verwendet, um sicher zu bleiben.', + 'set_description' => 'Füge ein Passwort hinzu, damit du dich ohne verbundenen Anbieter anmelden kannst.', + 'current_password' => 'Aktuelles Passwort', + 'new_password' => 'Neues Passwort', + 'confirm_password' => 'Passwort bestätigen', + 'save' => 'Passwort speichern', + 'set' => 'Passwort festlegen', + ], + 'providers' => [ + 'title' => 'Verbundene Konten', + 'description' => 'Melde dich schneller mit diesen verbundenen Anbietern an.', + 'connected' => 'Verbunden', + 'not_connected' => 'Nicht verbunden', + 'connect' => 'Verbinden', + 'disconnect' => 'Trennen', + 'flash_disconnected' => ':provider erfolgreich getrennt.', + 'flash_connected' => ':provider erfolgreich verbunden.', + 'flash_already_linked' => 'Dieses :provider-Konto ist bereits mit einem anderen Benutzer verknüpft.', + 'flash_cannot_disconnect' => 'Du kannst deine einzige Anmeldemethode nicht trennen. Lege zuerst ein Passwort fest oder verbinde einen anderen Anbieter.', + ], + ], + + 'delete_account' => [ + 'heading' => 'Konto löschen', + 'description' => 'Lösche dein Konto und alle zugehörigen Ressourcen', + 'warning' => 'Warnung', + 'warning_message' => 'Bitte gehe mit Vorsicht vor, dies kann nicht rückgängig gemacht werden.', + 'button' => 'Konto löschen', + 'modal_title' => 'Möchtest du dein Konto wirklich löschen?', + 'modal_description_password' => 'Sobald dein Konto gelöscht ist, werden auch alle zugehörigen Ressourcen und Daten dauerhaft gelöscht. Bitte gib dein Passwort ein, um zu bestätigen.', + 'modal_description_email' => 'Sobald dein Konto gelöscht ist, werden auch alle zugehörigen Ressourcen und Daten dauerhaft gelöscht. Bitte gib deine E-Mail-Adresse :email ein, um zu bestätigen.', + 'password' => 'Passwort', + 'password_placeholder' => 'Passwort', + 'email_placeholder' => 'E-Mail deines Kontos', + 'email_mismatch' => 'Die E-Mail-Adresse stimmt nicht mit deinem Konto überein.', + 'cancel' => 'Abbrechen', + 'confirm' => 'Konto löschen', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'Workspace', + 'brand' => 'Marke', + 'users' => 'Mitglieder', + 'api_keys' => 'API-Keys', + ], + 'title' => 'Workspace-Einstellungen', + 'logo_heading' => 'Workspace-Logo', + 'logo_description' => 'Lade ein Logo für deinen Workspace hoch', + 'heading' => 'Workspace-Name', + 'description' => 'Aktualisiere den Namen deines Workspace', + 'members_heading' => 'Mitglieder', + 'members_description' => 'Verwalte die Mitglieder und Einladungen des Workspace', + 'name' => 'Name', + 'name_placeholder' => 'Mein Workspace', + 'save' => 'Speichern', + ], + + 'brand' => [ + 'title' => 'Marke', + 'description' => 'Konfiguriere deine Markenidentität für KI-generierte Inhalte.', + 'name' => 'Workspace-Name', + 'name_placeholder' => 'Meine Marke', + 'website' => 'Website', + 'website_placeholder' => 'https://yourbrand.com', + 'brand_description' => 'Beschreibung', + 'brand_description_placeholder' => 'Erzähl uns von deiner Marke, was du machst und wer deine Zielgruppe ist...', + 'voice' => 'Markenton', + 'voice_description' => 'Wähle die Eigenschaften, die den Klang deiner Inhalte bestimmen.', + 'voice_group' => [ + 'pov' => 'Perspektive', + 'formality' => 'Förmlichkeit', + 'energy' => 'Energie', + 'humor' => 'Humor', + 'attitude' => 'Haltung', + 'warmth' => 'Wärme', + 'confidence' => 'Selbstbewusstsein', + 'style' => 'Stil', + ], + 'voice_trait' => [ + 'first_person' => 'Erste Person', + 'second_person' => 'Zweite Person (du)', + 'third_person' => 'Dritte Person', + 'formal' => 'Förmlich', + 'balanced' => 'Ausgewogen', + 'casual' => 'Locker', + 'calm' => 'Ruhig', + 'moderate' => 'Moderat', + 'enthusiastic' => 'Enthusiastisch', + 'vibrant' => 'Lebhaft', + 'serious' => 'Ernst', + 'dry' => 'Trocken / subtil', + 'witty' => 'Geistreich', + 'playful' => 'Verspielt', + 'respectful' => 'Respektvoll', + 'even_handed' => 'Unparteiisch', + 'bold' => 'Mutig', + 'provocative' => 'Provokativ', + 'neutral' => 'Neutral', + 'friendly' => 'Freundlich', + 'empathetic' => 'Einfühlsam', + 'humble' => 'Bescheiden', + 'confident' => 'Selbstbewusst', + 'assertive' => 'Durchsetzungsstark', + 'direct' => 'Direkt', + 'concise' => 'Prägnant', + 'transparent' => 'Transparent', + 'no_hype' => 'Ohne Hype', + 'practical' => 'Praktisch', + 'data_driven' => 'Datenbasiert', + 'storytelling' => 'Storytelling', + 'inspirational' => 'Inspirierend', + 'educational' => 'Lehrreich', + 'technical' => 'Technisch', + 'minimalist' => 'Wenige Emojis', + ], + 'brand_color' => 'Markenfarbe', + 'background_color' => 'Hintergrundfarbe', + 'text_color' => 'Textfarbe', + 'font' => 'Schriftart', + 'image_style' => 'Bildstil', + 'image_style_description' => 'Visueller Stil, der beim Generieren von Slide- und Coverbildern für KI-Beiträge angewendet wird.', + 'image_style_cinematic' => 'Filmisch', + 'image_style_illustration' => 'Illustration', + 'image_style_isometric_3d' => 'Isometrisch', + 'image_style_cartoon' => 'Cartoon', + 'image_style_typographic' => 'Typografisch', + 'image_style_infographic' => 'Infografik', + 'image_style_minimalist' => 'Minimalistisch', + 'image_style_mockup' => 'Mockup', + 'content_language' => 'Inhaltssprache', + 'content_language_description' => 'Sprache für KI-generierte Bildunterschriften, Hashtags und jeglichen Text in generierten Bildern oder Videos.', + ], + + 'members' => [ + 'title' => 'Mitglieder', + 'heading' => 'Teammitglieder', + 'description' => 'Verwalte Mitglieder und Einladungen für diesen Workspace', + + 'cancel' => 'Abbrechen', + 'remove' => 'Entfernen', + 'make_role' => 'Zu :role machen', + + 'invite' => [ + 'title' => 'Mitglied einladen', + 'description' => 'Sende eine E-Mail-Einladung, um Mitarbeiter hinzuzufügen', + 'email' => 'E-Mail', + 'email_placeholder' => 'mitarbeiter@email.com', + 'role' => 'Rolle', + 'role_placeholder' => 'Rolle auswählen', + 'submit' => 'Einladung senden', + ], + + 'pending' => [ + 'title' => 'Ausstehende Einladungen', + 'description' => 'Einladungen, die auf Annahme warten', + 'empty' => 'Keine ausstehenden Einladungen', + ], + + 'list' => [ + 'title' => 'Mitglieder', + 'description' => 'Personen mit Zugriff auf diesen Workspace', + 'empty' => 'Keine Mitglieder außer dem Inhaber', + ], + + 'remove_modal' => [ + 'title' => 'Mitglied entfernen', + 'description' => 'Möchtest du dieses Mitglied wirklich aus dem Workspace entfernen? Es verliert den Zugriff auf alle Workspace-Ressourcen.', + 'action' => 'Mitglied entfernen', + ], + + 'cancel_invite_modal' => [ + 'title' => 'Einladung zurückziehen', + 'description' => 'Möchtest du diese Einladung wirklich zurückziehen?', + 'action' => 'Einladung zurückziehen', + ], + + 'roles' => [ + 'owner' => 'Inhaber', + 'admin' => 'Admin', + 'member' => 'Mitglied', + 'viewer' => 'Betrachter', + ], + + 'flash' => [ + 'invite_sent' => 'Einladung erfolgreich gesendet!', + 'invite_deleted' => 'Einladung gelöscht.', + 'member_removed' => 'Mitglied erfolgreich entfernt.', + 'role_updated' => 'Rolle des Mitglieds aktualisiert.', + 'wrong_email' => 'Diese Einladung gilt für eine andere E-Mail-Adresse.', + 'already_member' => 'Du bist bereits Mitglied dieses Workspace.', + 'invite_accepted' => 'Willkommen! Du bist jetzt Mitglied des Workspace.', + 'invite_declined' => 'Einladung abgelehnt.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'Konto', + 'usage' => 'Nutzung', + 'billing' => 'Abrechnung', + ], + 'title' => 'Kontoeinstellungen', + 'description' => 'Verwalte deinen Kontonamen und deine Rechnungs-E-Mail', + 'name' => 'Kontoname', + 'name_placeholder' => 'Meine Firma', + 'billing_email' => 'Rechnungs-E-Mail', + 'billing_email_placeholder' => 'rechnung@firma.com', + 'billing_email_hint' => 'Diese E-Mail-Adresse wird für Rechnungen und Abrechnungskommunikation von Stripe verwendet.', + 'submit' => 'Speichern', + ], + + 'flash' => [ + 'account_updated' => 'Konto erfolgreich aktualisiert!', + 'profile_updated' => 'Profil erfolgreich aktualisiert!', + 'password_updated' => 'Passwort erfolgreich aktualisiert!', + 'workspace_updated' => 'Einstellungen erfolgreich aktualisiert!', + 'photo_updated' => 'Foto erfolgreich aktualisiert!', + 'photo_deleted' => 'Foto erfolgreich entfernt!', + 'logo_updated' => 'Logo erfolgreich hochgeladen!', + 'logo_deleted' => 'Logo erfolgreich entfernt!', + 'notifications_updated' => 'Benachrichtigungseinstellungen aktualisiert!', + ], + + 'api_keys' => [ + 'title' => 'API-Keys', + 'page_title' => 'API-Keys', + 'heading' => 'API-Keys', + 'description' => 'Verwalte API-Keys für den programmatischen Zugriff auf deinen Workspace.', + 'create' => 'API-Key erstellen', + 'copy' => 'Kopieren', + 'new_token_message' => 'Dein neuer API-Key wurde erstellt. Kopiere ihn jetzt – du kannst ihn danach nicht mehr sehen.', + 'table' => [ + 'name' => 'Name', + 'key' => 'Key', + 'status' => 'Status', + 'expires' => 'Läuft ab', + 'last_used' => 'Zuletzt verwendet', + 'never' => 'Nie', + ], + 'actions' => [ + 'copy_id' => 'API-Key-ID kopieren', + 'copy_id_success' => 'API-Key-ID in die Zwischenablage kopiert', + 'delete' => 'Löschen', + ], + 'empty' => [ + 'title' => 'Noch keine API-Keys', + 'description' => 'Erstelle einen API-Key, um programmatisch auf deinen Workspace zuzugreifen.', + ], + 'delete_modal' => [ + 'title' => 'API-Key löschen', + 'description' => 'Möchtest du diesen API-Key wirklich löschen? Alle Anwendungen, die diesen Key verwenden, verlieren sofort den Zugriff.', + 'action' => 'API-Key löschen', + ], + 'create_dialog' => [ + 'title' => 'API-Key erstellen', + 'description' => 'Erstelle einen neuen API-Key für den programmatischen Zugriff auf deinen Workspace.', + 'name' => 'Name', + 'name_placeholder' => 'z. B. Produktions-API-Key', + 'expires' => 'Ablaufdatum (optional)', + 'expires_placeholder' => 'Kein Ablauf', + 'submit' => 'Erstellen', + 'cancel' => 'Abbrechen', + ], + 'flash' => [ + 'created' => 'API-Key erfolgreich erstellt!', + 'deleted' => 'API-Key erfolgreich gelöscht!', + ], + ], +]; diff --git a/lang/de/sidebar.php b/lang/de/sidebar.php new file mode 100644 index 00000000..c9a593f9 --- /dev/null +++ b/lang/de/sidebar.php @@ -0,0 +1,61 @@ + 'Workspaces', + 'select_workspace' => 'Workspace auswählen', + 'create_workspace' => 'Workspace erstellen', + 'create_post' => 'Beitrag erstellen', + 'profile' => 'Profil', + 'log_out' => 'Abmelden', + + 'workspace' => 'Workspace: :name', + 'workspace_select' => 'Workspace: Auswählen', + + 'theme' => 'Design: :name', + 'theme_light' => 'Hell', + 'theme_dark' => 'Dunkel', + 'theme_system' => 'System', + + 'language' => 'Sprache: :name', + 'language_select' => 'Sprache: Auswählen', + + 'groups' => [ + 'posts' => 'Beiträge', + 'workspace' => 'Workspace', + 'others' => 'Sonstiges', + ], + + 'analytics' => 'Analytics', + 'automations' => 'Automatisierungen', + 'settings' => 'Einstellungen', + + 'posts' => [ + 'calendar' => 'Kalender', + 'all' => 'Alle', + 'scheduled' => 'Geplant', + 'posted' => 'Veröffentlicht', + 'drafts' => 'Entwürfe', + ], + + 'workspace' => [ + 'connections' => 'Verbindungen', + 'signatures' => 'Signaturen', + 'labels' => 'Labels', + 'assets' => 'Assets', + 'api_keys' => 'API-Keys', + ], + + 'notifications' => 'Benachrichtigungen', + 'mark_all_read' => 'Alle als gelesen markieren', + 'mark_as_read' => 'Als gelesen markieren', + 'archive_all' => 'Alle archivieren', + 'no_notifications' => 'Keine Benachrichtigungen', + + 'support' => [ + 'docs' => 'Dokumentation', + 'referral' => '30% Provision verdienen', + 'stay_updated' => 'Auf dem Laufenden bleiben', + ], +]; diff --git a/lang/de/signatures.php b/lang/de/signatures.php new file mode 100644 index 00000000..b8d16bf4 --- /dev/null +++ b/lang/de/signatures.php @@ -0,0 +1,61 @@ + 'Signaturen', + 'description' => 'Erstelle wiederverwendbare Signaturen, um sie schnell an deine Beiträge anzuhängen', + 'search' => 'Signaturen suchen...', + 'new' => 'Neue Signatur', + 'empty_title' => 'Noch keine Signaturen', + 'empty_description' => 'Erstelle Signaturen, um schnell Hashtags, Links oder beliebige wiederverwendbare Texte an deine Beiträge anzuhängen', + 'no_search_results' => 'Keine Signaturen passen zu deiner Suche', + 'try_different_search' => 'Versuche ein anderes Stichwort oder setze die Suche zurück.', + 'table' => [ + 'name' => 'Name', + 'content' => 'Inhalt', + 'created_at' => 'Erstellt', + ], + + 'actions' => [ + 'edit' => 'Signatur bearbeiten', + 'delete' => 'Signatur löschen', + ], + + 'create' => [ + 'title' => 'Signatur erstellen', + 'description' => 'Gib deiner Signatur einen Namen und den Inhalt zum Anhängen (Hashtags, Links, individueller Text – alles, was du wiederverwendest).', + 'name' => 'Name', + 'name_placeholder' => 'z. B. Marketing, Reisen, Marken-Grußformel', + 'content' => 'Inhalt', + 'content_placeholder' => "#marketing #socialmedia\nMehr erfahren: https://yourbrand.com", + 'content_hint' => 'Hashtags, Links, individuelle Einleitungen, Grußformeln – alles, was du an Beiträge anhängst.', + 'submit' => 'Signatur erstellen', + 'submitting' => 'Wird erstellt...', + ], + + 'edit' => [ + 'title' => 'Signatur bearbeiten', + 'description' => 'Aktualisiere Name und Inhalt für diese Signatur.', + 'name' => 'Name', + 'name_placeholder' => 'z. B. Marketing, Reisen, Marken-Grußformel', + 'content' => 'Inhalt', + 'content_placeholder' => "#marketing #socialmedia\nMehr erfahren: https://yourbrand.com", + 'content_hint' => 'Hashtags, Links, individuelle Einleitungen, Grußformeln – alles, was du an Beiträge anhängst.', + 'submit' => 'Änderungen speichern', + 'submitting' => 'Wird gespeichert...', + ], + + 'delete' => [ + 'title' => 'Signatur löschen', + 'description' => 'Möchtest du diese Signatur wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.', + 'confirm' => 'Löschen', + 'cancel' => 'Abbrechen', + ], + + 'flash' => [ + 'created' => 'Signatur erstellt.', + 'updated' => 'Signatur aktualisiert.', + 'deleted' => 'Signatur gelöscht.', + ], +]; diff --git a/lang/de/usage.php b/lang/de/usage.php new file mode 100644 index 00000000..fd6cf4de --- /dev/null +++ b/lang/de/usage.php @@ -0,0 +1,17 @@ + 'Nutzung', + + 'section_account' => 'Konto', + 'section_account_description' => 'Kontingente und Limits für deinen Tarif.', + 'section_ai' => 'KI-Credits', + 'section_ai_description' => 'Credits werden bei der Nutzung von KI-Funktionen abgezogen. Sie werden am Ersten jedes Monats zurückgesetzt.', + + 'workspaces' => 'Workspaces', + 'social_accounts' => 'Social-Media-Konten', + 'members' => 'Mitglieder', + 'credits' => 'Credits', +]; diff --git a/lang/de/validation.php b/lang/de/validation.php new file mode 100644 index 00000000..726293ce --- /dev/null +++ b/lang/de/validation.php @@ -0,0 +1,202 @@ + ':attribute muss akzeptiert werden.', + 'accepted_if' => ':attribute muss akzeptiert werden, wenn :other :value ist.', + 'active_url' => ':attribute muss eine gültige URL sein.', + 'after' => ':attribute muss ein Datum nach :date sein.', + 'after_or_equal' => ':attribute muss ein Datum nach oder gleich :date sein.', + 'alpha' => ':attribute darf nur Buchstaben enthalten.', + 'alpha_dash' => ':attribute darf nur Buchstaben, Zahlen, Bindestriche und Unterstriche enthalten.', + 'alpha_num' => ':attribute darf nur Buchstaben und Zahlen enthalten.', + 'any_of' => ':attribute ist ungültig.', + 'array' => ':attribute muss ein Array sein.', + 'ascii' => ':attribute darf nur alphanumerische Ein-Byte-Zeichen und Symbole enthalten.', + 'before' => ':attribute muss ein Datum vor :date sein.', + 'before_or_equal' => ':attribute muss ein Datum vor oder gleich :date sein.', + 'between' => [ + 'array' => ':attribute muss zwischen :min und :max Elemente haben.', + 'file' => ':attribute muss zwischen :min und :max Kilobyte groß sein.', + 'numeric' => ':attribute muss zwischen :min und :max liegen.', + 'string' => ':attribute muss zwischen :min und :max Zeichen lang sein.', + ], + 'boolean' => ':attribute muss wahr oder falsch sein.', + 'can' => ':attribute enthält einen unzulässigen Wert.', + 'confirmed' => 'Die Bestätigung von :attribute stimmt nicht überein.', + 'contains' => ':attribute fehlt ein erforderlicher Wert.', + 'current_password' => 'Das Passwort ist falsch.', + 'date' => ':attribute muss ein gültiges Datum sein.', + 'date_equals' => ':attribute muss ein Datum gleich :date sein.', + 'date_format' => ':attribute muss dem Format :format entsprechen.', + 'decimal' => ':attribute muss :decimal Dezimalstellen haben.', + 'declined' => ':attribute muss abgelehnt werden.', + 'declined_if' => ':attribute muss abgelehnt werden, wenn :other :value ist.', + 'different' => ':attribute und :other müssen unterschiedlich sein.', + 'digits' => ':attribute muss :digits Ziffern lang sein.', + 'digits_between' => ':attribute muss zwischen :min und :max Ziffern lang sein.', + 'dimensions' => ':attribute hat ungültige Bildabmessungen.', + 'distinct' => ':attribute hat einen doppelten Wert.', + 'doesnt_contain' => ':attribute darf keinen der folgenden Werte enthalten: :values.', + 'doesnt_end_with' => ':attribute darf nicht mit einem der folgenden Werte enden: :values.', + 'doesnt_start_with' => ':attribute darf nicht mit einem der folgenden Werte beginnen: :values.', + 'email' => ':attribute muss eine gültige E-Mail-Adresse sein.', + 'encoding' => ':attribute muss in :encoding kodiert sein.', + 'ends_with' => ':attribute muss mit einem der folgenden Werte enden: :values.', + 'enum' => 'Das ausgewählte :attribute ist ungültig.', + 'exists' => 'Das ausgewählte :attribute ist ungültig.', + 'extensions' => ':attribute muss eine der folgenden Dateiendungen haben: :values.', + 'file' => ':attribute muss eine Datei sein.', + 'filled' => ':attribute muss einen Wert haben.', + 'gt' => [ + 'array' => ':attribute muss mehr als :value Elemente haben.', + 'file' => ':attribute muss größer als :value Kilobyte sein.', + 'numeric' => ':attribute muss größer als :value sein.', + 'string' => ':attribute muss länger als :value Zeichen sein.', + ], + 'gte' => [ + 'array' => ':attribute muss :value oder mehr Elemente haben.', + 'file' => ':attribute muss größer oder gleich :value Kilobyte sein.', + 'numeric' => ':attribute muss größer oder gleich :value sein.', + 'string' => ':attribute muss mindestens :value Zeichen lang sein.', + ], + 'hex_color' => ':attribute muss eine gültige Hexadezimalfarbe sein.', + 'image' => ':attribute muss ein Bild sein.', + 'in' => 'Das ausgewählte :attribute ist ungültig.', + 'in_array' => ':attribute muss in :other vorhanden sein.', + 'in_array_keys' => ':attribute muss mindestens einen der folgenden Schlüssel enthalten: :values.', + 'integer' => ':attribute muss eine ganze Zahl sein.', + 'ip' => ':attribute muss eine gültige IP-Adresse sein.', + 'ipv4' => ':attribute muss eine gültige IPv4-Adresse sein.', + 'ipv6' => ':attribute muss eine gültige IPv6-Adresse sein.', + 'json' => ':attribute muss eine gültige JSON-Zeichenkette sein.', + 'list' => ':attribute muss eine Liste sein.', + 'lowercase' => ':attribute muss in Kleinbuchstaben geschrieben sein.', + 'lt' => [ + 'array' => ':attribute muss weniger als :value Elemente haben.', + 'file' => ':attribute muss kleiner als :value Kilobyte sein.', + 'numeric' => ':attribute muss kleiner als :value sein.', + 'string' => ':attribute muss kürzer als :value Zeichen sein.', + ], + 'lte' => [ + 'array' => ':attribute darf nicht mehr als :value Elemente haben.', + 'file' => ':attribute muss kleiner oder gleich :value Kilobyte sein.', + 'numeric' => ':attribute muss kleiner oder gleich :value sein.', + 'string' => ':attribute darf höchstens :value Zeichen lang sein.', + ], + 'mac_address' => ':attribute muss eine gültige MAC-Adresse sein.', + 'max' => [ + 'array' => ':attribute darf nicht mehr als :max Elemente haben.', + 'file' => ':attribute darf nicht größer als :max Kilobyte sein.', + 'numeric' => ':attribute darf nicht größer als :max sein.', + 'string' => ':attribute darf nicht länger als :max Zeichen sein.', + ], + 'max_digits' => ':attribute darf nicht mehr als :max Ziffern haben.', + 'mimes' => ':attribute muss eine Datei des folgenden Typs sein: :values.', + 'mimetypes' => ':attribute muss eine Datei des folgenden Typs sein: :values.', + 'min' => [ + 'array' => ':attribute muss mindestens :min Elemente haben.', + 'file' => ':attribute muss mindestens :min Kilobyte groß sein.', + 'numeric' => ':attribute muss mindestens :min sein.', + 'string' => ':attribute muss mindestens :min Zeichen lang sein.', + ], + 'min_digits' => ':attribute muss mindestens :min Ziffern haben.', + 'missing' => ':attribute muss fehlen.', + 'missing_if' => ':attribute muss fehlen, wenn :other :value ist.', + 'missing_unless' => ':attribute muss fehlen, es sei denn :other ist :value.', + 'missing_with' => ':attribute muss fehlen, wenn :values vorhanden ist.', + 'missing_with_all' => ':attribute muss fehlen, wenn :values vorhanden sind.', + 'multiple_of' => ':attribute muss ein Vielfaches von :value sein.', + 'not_in' => 'Das ausgewählte :attribute ist ungültig.', + 'not_regex' => 'Das Format von :attribute ist ungültig.', + 'numeric' => ':attribute muss eine Zahl sein.', + 'password' => [ + 'letters' => ':attribute muss mindestens einen Buchstaben enthalten.', + 'mixed' => ':attribute muss mindestens einen Groß- und einen Kleinbuchstaben enthalten.', + 'numbers' => ':attribute muss mindestens eine Zahl enthalten.', + 'symbols' => ':attribute muss mindestens ein Symbol enthalten.', + 'uncompromised' => 'Das angegebene :attribute ist in einem Datenleck aufgetaucht. Bitte wähle ein anderes :attribute.', + ], + 'present' => ':attribute muss vorhanden sein.', + 'present_if' => ':attribute muss vorhanden sein, wenn :other :value ist.', + 'present_unless' => ':attribute muss vorhanden sein, es sei denn :other ist :value.', + 'present_with' => ':attribute muss vorhanden sein, wenn :values vorhanden ist.', + 'present_with_all' => ':attribute muss vorhanden sein, wenn :values vorhanden sind.', + 'prohibited' => ':attribute ist unzulässig.', + 'prohibited_if' => ':attribute ist unzulässig, wenn :other :value ist.', + 'prohibited_if_accepted' => ':attribute ist unzulässig, wenn :other akzeptiert wurde.', + 'prohibited_if_declined' => ':attribute ist unzulässig, wenn :other abgelehnt wurde.', + 'prohibited_unless' => ':attribute ist unzulässig, es sei denn :other ist in :values enthalten.', + 'prohibits' => ':attribute verhindert, dass :other vorhanden ist.', + 'regex' => 'Das Format von :attribute ist ungültig.', + 'required' => ':attribute muss ausgefüllt werden.', + 'required_array_keys' => ':attribute muss Einträge für Folgendes enthalten: :values.', + 'required_if' => ':attribute muss ausgefüllt werden, wenn :other :value ist.', + 'required_if_accepted' => ':attribute muss ausgefüllt werden, wenn :other akzeptiert wurde.', + 'required_if_declined' => ':attribute muss ausgefüllt werden, wenn :other abgelehnt wurde.', + 'required_unless' => ':attribute muss ausgefüllt werden, es sei denn :other ist in :values enthalten.', + 'required_with' => ':attribute muss ausgefüllt werden, wenn :values vorhanden ist.', + 'required_with_all' => ':attribute muss ausgefüllt werden, wenn :values vorhanden sind.', + 'required_without' => ':attribute muss ausgefüllt werden, wenn :values nicht vorhanden ist.', + 'required_without_all' => ':attribute muss ausgefüllt werden, wenn keiner der Werte :values vorhanden ist.', + 'same' => ':attribute muss mit :other übereinstimmen.', + 'size' => [ + 'array' => ':attribute muss :size Elemente enthalten.', + 'file' => ':attribute muss :size Kilobyte groß sein.', + 'numeric' => ':attribute muss :size sein.', + 'string' => ':attribute muss :size Zeichen lang sein.', + ], + 'starts_with' => ':attribute muss mit einem der folgenden Werte beginnen: :values.', + 'string' => ':attribute muss eine Zeichenkette sein.', + 'timezone' => ':attribute muss eine gültige Zeitzone sein.', + 'unique' => ':attribute ist bereits vergeben.', + 'uploaded' => ':attribute konnte nicht hochgeladen werden.', + 'uppercase' => ':attribute muss in Großbuchstaben geschrieben sein.', + 'url' => ':attribute muss eine gültige URL sein.', + 'ulid' => ':attribute muss eine gültige ULID sein.', + 'uuid' => ':attribute muss eine gültige UUID sein.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/de/workspaces.php b/lang/de/workspaces.php new file mode 100644 index 00000000..f5eac38e --- /dev/null +++ b/lang/de/workspaces.php @@ -0,0 +1,50 @@ + 'Workspaces', + 'select_title' => 'Deine Workspaces', + 'select_description' => 'Wähle einen Workspace, um fortzufahren', + 'current' => 'Aktuell', + 'connections' => ':count Verbindungen', + 'posts' => ':count Beiträge', + + 'create' => [ + 'page_title' => 'Erstelle deinen Workspace', + 'title' => 'Richte deinen Workspace ein', + 'description' => 'Erzähl uns ein wenig über dich oder dein Projekt. Wir nutzen das, um KI-generierte Beiträge an deinen Ton anzupassen.', + 'website' => 'Website', + 'website_placeholder' => 'https://yourbrand.com', + 'autofill' => 'Von Website automatisch ausfüllen', + 'autofill_missing_url' => 'Gib zuerst eine URL ein.', + 'autofill_success' => 'Markeninformationen geladen.', + 'autofill_error' => 'Automatisches Ausfüllen nicht möglich. Du kannst die Felder manuell ausfüllen.', + 'autofill_errors' => [ + 'unreachable' => 'Wir konnten diese Website nicht erreichen (:reason).', + 'http_status' => 'Die Website hat einen unerwarteten Status zurückgegeben (:status).', + 'invalid_scheme' => 'Nur http- und https-URLs werden unterstützt.', + 'missing_host' => 'Der URL fehlt ein Host.', + 'unresolvable_host' => 'Wir konnten den Host nicht auflösen (:host).', + 'private_network' => 'URLs, die auf private Netzwerke verweisen, sind nicht zulässig.', + ], + 'logo_captured' => 'Logo von deiner Website übernommen.', + 'name' => 'Workspace-Name', + 'name_placeholder' => 'z. B. Acme Inc', + 'brand_description' => 'Markenbeschreibung', + 'brand_description_placeholder' => 'Was macht deine Marke?', + 'content_language' => 'Inhaltssprache', + 'content_language_description' => 'KI-generierte Bildunterschriften werden in dieser Sprache verfasst.', + 'brand_color' => 'Markenfarbe', + 'background_color' => 'Hintergrundfarbe', + 'text_color' => 'Textfarbe', + 'submit' => 'Workspace erstellen', + 'success' => 'Workspace erstellt. Verbinde ein Social-Media-Konto, um mit dem Posten zu beginnen.', + ], + + 'cannot_delete_last' => 'Du kannst deinen einzigen Workspace nicht löschen. Kündige dein Abonnement in den Abrechnungseinstellungen, um dein Konto zu schließen.', + + 'flash' => [ + 'deleted' => 'Workspace erfolgreich gelöscht.', + ], +]; diff --git a/lang/el/accounts.php b/lang/el/accounts.php new file mode 100644 index 00000000..e79c740b --- /dev/null +++ b/lang/el/accounts.php @@ -0,0 +1,148 @@ + 'Συνδέσεις', + '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', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'Χρησιμοποιήστε ένα App Password για ασφάλεια. Δημιουργήστε ένα στο bsky.app/settings.', + 'submit' => 'Σύνδεση Bluesky', + 'submitting' => 'Σύνδεση...', + ], + + 'mastodon' => [ + 'title' => 'Σύνδεση Mastodon', + 'description' => 'Εισάγετε το instance του Mastodon σας', + 'instance_url' => 'URL instance', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Εισάγετε τη διεύθυνση URL του instance 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' => 'Αυτό το workspace έχει ήδη συνδεδεμένο ένα κανάλι 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' => 'Το workspace δεν βρέθηκε.', + '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' => 'Αυτό το workspace έχει ήδη λογαριασμό για αυτό το δίκτυο. Αποσυνδέστε τον πρώτα.', + 'error_connecting_page' => 'Σφάλμα κατά τη σύνδεση της σελίδας. Παρακαλούμε δοκιμάστε ξανά.', + 'error_connecting_channel' => 'Σφάλμα κατά τη σύνδεση του καναλιού. Παρακαλούμε δοκιμάστε ξανά.', + 'session_expired' => 'Η συνεδρία έληξε. Παρακαλούμε δοκιμάστε ξανά.', + 'workspace_not_found' => 'Το workspace δεν βρέθηκε.', + '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.', + ], +]; diff --git a/lang/el/analytics.php b/lang/el/analytics.php new file mode 100644 index 00000000..779ecc22 --- /dev/null +++ b/lang/el/analytics.php @@ -0,0 +1,55 @@ + 'Δεν υπάρχουν συνδεδεμένοι λογαριασμοί με στατιστικά.', + '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' => 'Ποσοστό κλικ pin', + 'pin_clicks' => 'Κλικ pin', + 'posts_engagement' => 'Αλληλεπίδραση δημοσιεύσεων', + 'posts_reach' => 'Απήχηση δημοσιεύσεων', + 'quotes' => 'Παραθέσεις', + 'reach' => 'Απήχηση', + 'reblogs' => 'Αναδημοσιεύσεις', + 'recent_comments' => 'Πρόσφατα σχόλια', + 'recent_likes' => 'Πρόσφατα μου αρέσει', + 'recent_shares' => 'Πρόσφατες κοινοποιήσεις', + 'replies' => 'Απαντήσεις', + 'reposts' => 'Αναδημοσιεύσεις', + 'retweets' => 'Retweets', + 'saves' => 'Αποθηκεύσεις', + 'shares' => 'Κοινοποιήσεις', + 'subscribers' => 'Συνδρομητές', + 'subscribers_gained' => 'Νέοι συνδρομητές', + 'subscribers_lost' => 'Συνδρομητές που χάθηκαν', + 'total_likes' => 'Συνολικά μου αρέσει', + 'video_views' => 'Προβολές βίντεο', + 'videos' => 'Βίντεο', + 'views' => 'Προβολές', + ], +]; diff --git a/lang/el/assets.php b/lang/el/assets.php new file mode 100644 index 00000000..9b971ea0 --- /dev/null +++ b/lang/el/assets.php @@ -0,0 +1,52 @@ + 'Στοιχεία', + + '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' => 'Powered by GIPHY', + ], +]; diff --git a/lang/el/auth.php b/lang/el/auth.php new file mode 100644 index 00000000..e9b1e9f3 --- /dev/null +++ b/lang/el/auth.php @@ -0,0 +1,141 @@ + 'Αυτά τα στοιχεία δεν ταιριάζουν με τα αρχεία μας.', + 'password' => 'Ο κωδικός πρόσβασης που δώσατε είναι εσφαλμένος.', + 'throttle' => 'Πάρα πολλές προσπάθειες σύνδεσης. Παρακαλούμε δοκιμάστε ξανά σε :seconds δευτερόλεπτα.', + + 'flash' => [ + 'welcome' => 'Καλώς ήρθατε στο TryPost!', + 'welcome_trial' => 'Καλώς ήρθατε στο TryPost! Η δοκιμαστική σας περίοδος ξεκίνησε.', + ], + + 'legal' => 'Συνεχίζοντας, συμφωνείτε με τους Όρους Χρήσης και την Πολιτική Απορρήτου μας.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'Οπτικό ημερολόγιο', + 'description' => 'Σχεδιάστε και προγραμματίστε το περιεχόμενό σας με ένα διαισθητικό ημερολόγιο drag-and-drop σε όλους τους λογαριασμούς κοινωνικών δικτύων σας.', + ], + 'scheduling' => [ + 'title' => 'Έξυπνος προγραμματισμός', + 'description' => 'Προγραμματίστε δημοσιεύσεις σε LinkedIn, X, Instagram, TikTok, YouTube και άλλα — όλα από ένα μέρος.', + ], + 'media' => [ + 'title' => 'Πλούσια πολυμέσα', + 'description' => 'Δημοσιεύστε εικόνες, carousels, stories και reels. Κάθε πλατφόρμα λαμβάνει αυτόματα τη σωστή μορφή.', + ], + 'video' => [ + 'title' => 'Δημοσίευση βίντεο', + 'description' => 'Μεταφορτώστε βίντεο μία φορά και δημοσιεύστε σε TikTok, YouTube Shorts, Instagram Reels και Facebook Reels.', + ], + 'team' => [ + 'title' => 'Workspaces ομάδας', + 'description' => 'Προσκαλέστε την ομάδα σας, αναθέστε ρόλους και διαχειριστείτε πολλές μάρκες από ξεχωριστά workspaces.', + ], + 'signatures' => [ + 'title' => 'Υπογραφές', + 'description' => 'Αποθηκεύστε επαναχρησιμοποιήσιμες υπογραφές (hashtags, συνδέσμους, κλεισίματα) και προσθέστε τις στις δημοσιεύσεις με ένα κλικ.', + ], + ], + + 'or_continue_with' => 'Ή συνεχίστε με', + 'or_continue_with_email' => 'Ή συνεχίστε με email', + 'google_login' => 'Σύνδεση με Google', + 'google_signup' => 'Εγγραφή με Google', + 'github_login' => 'Σύνδεση με GitHub', + 'github_signup' => 'Εγγραφή με GitHub', + 'github_email_unavailable' => 'Δεν ήταν δυνατή η ανάκτηση του email σας από το GitHub. Κάντε δημόσιο το email σας στο GitHub ή παραχωρήστε το scope email και δοκιμάστε ξανά.', + + 'signup_success' => [ + 'page_title' => 'Καλώς ήρθατε', + 'title' => 'Ρύθμιση του λογαριασμού σας', + 'description' => 'Αυτό συνήθως διαρκεί μόνο λίγα δευτερόλεπτα...', + ], + + 'login' => [ + 'title' => 'Συνδεθείτε στον λογαριασμό σας', + 'description' => 'Εισάγετε το email και τον κωδικό πρόσβασής σας παρακάτω για να συνδεθείτε', + 'page_title' => 'Σύνδεση', + 'email' => 'Διεύθυνση email', + 'password' => 'Κωδικός πρόσβασης', + 'forgot_password' => 'Ξεχάσατε τον κωδικό;', + 'remember_me' => 'Να με θυμάσαι', + 'submit' => 'Σύνδεση', + 'no_account' => 'Δεν έχετε λογαριασμό;', + 'sign_up' => 'Εγγραφή', + ], + + 'register' => [ + 'title' => 'Όλο το κοινωνικό σας ημερολόγιο, σε ένα μέρος', + 'description' => 'Δημιουργήστε τον λογαριασμό σας και ξεκινήστε να προγραμματίζετε δημοσιεύσεις σε κάθε δίκτυο.', + 'page_title' => 'Εγγραφή', + 'signup_with_email' => 'Εγγραφή με email', + 'name' => 'Όνομα', + 'name_placeholder' => 'Ονοματεπώνυμο', + 'email' => 'Διεύθυνση email', + 'password' => 'Κωδικός πρόσβασης', + 'show_password' => 'Εμφάνιση κωδικού', + 'hide_password' => 'Απόκρυψη κωδικού', + 'submit' => 'Δημιουργία λογαριασμού', + 'has_account' => 'Έχετε ήδη λογαριασμό;', + 'log_in' => 'Σύνδεση', + ], + + 'forgot_password' => [ + 'title' => 'Ξεχάσατε τον κωδικό', + 'description' => 'Εισάγετε το email σας για να λάβετε έναν σύνδεσμο επαναφοράς κωδικού', + 'page_title' => 'Ξεχάσατε τον κωδικό', + 'email' => 'Διεύθυνση email', + 'submit' => 'Αποστολή συνδέσμου επαναφοράς μέσω email', + 'return_to' => 'Ή, επιστρέψτε στη', + 'log_in' => 'σύνδεση', + ], + + 'reset_password' => [ + 'title' => 'Επαναφορά κωδικού', + 'description' => 'Παρακαλούμε εισάγετε τον νέο κωδικό πρόσβασής σας παρακάτω', + 'page_title' => 'Επαναφορά κωδικού', + 'email' => 'Email', + 'password' => 'Κωδικός πρόσβασης', + 'confirm_password' => 'Επιβεβαίωση κωδικού', + 'confirm_placeholder' => 'Επιβεβαίωση κωδικού', + 'submit' => 'Επαναφορά κωδικού', + ], + + 'verify_email' => [ + 'title' => 'Επαλήθευση email', + 'description' => 'Παρακαλούμε επαληθεύστε τη διεύθυνση email σας κάνοντας κλικ στον σύνδεσμο που μόλις σας στείλαμε.', + 'page_title' => 'Επαλήθευση email', + 'link_sent' => 'Ένας νέος σύνδεσμος επαλήθευσης στάλθηκε στη διεύθυνση email που δώσατε κατά την εγγραφή.', + 'resend' => 'Επαναποστολή email επαλήθευσης', + 'log_out' => 'Αποσύνδεση', + ], + + 'accept_invite' => [ + 'page_title' => 'Αποδοχή πρόσκλησης', + 'title' => 'Λάβατε πρόσκληση!', + 'description' => 'Λάβατε πρόσκληση να συμμετάσχετε στο workspace :workspace.', + 'workspace' => 'Workspace', + 'your_role' => 'Ο ρόλος σας', + 'email' => 'Email', + 'accept' => 'Αποδοχή πρόσκλησης', + 'decline' => 'Απόρριψη πρόσκλησης', + 'login_prompt' => 'Συνδεθείτε ή δημιουργήστε λογαριασμό για να αποδεχτείτε αυτή την πρόσκληση.', + 'log_in' => 'Σύνδεση', + 'create_account' => 'Δημιουργία λογαριασμού', + ], + +]; diff --git a/lang/el/automations.php b/lang/el/automations.php new file mode 100644 index 00000000..1fb558f1 --- /dev/null +++ b/lang/el/automations.php @@ -0,0 +1,411 @@ + 'Αυτοματισμοί', + 'default_name' => 'Νέος αυτοματισμός', + + 'actions' => [ + 'new' => 'Νέος αυτοματισμός', + 'edit' => 'Επεξεργασία', + 'save' => 'Αποθήκευση', + 'activate' => 'Ενεργοποίηση', + 'pause' => 'Παύση', + 'delete' => 'Διαγραφή', + 'retry' => 'Επανάληψη', + 'guide' => 'Μάθετε πώς λειτουργεί', + ], + + 'tabs' => [ + 'build' => 'Δημιουργία', + 'variables' => 'Μεταβλητές', + 'test' => 'Δοκιμή', + ], + + 'nav' => [ + 'workflow' => 'Ροή εργασίας', + 'invocations' => 'Εκτελέσεις', + 'metrics' => 'Μετρήσεις', + 'settings' => 'Ρυθμίσεις', + ], + + 'settings' => [ + 'general' => 'Γενικά', + 'general_description' => 'Μετονομάστε αυτόν τον αυτοματισμό.', + 'name_label' => 'Όνομα', + 'name_saved' => 'Ο αυτοματισμός μετονομάστηκε.', + 'status_title' => 'Κατάσταση', + 'status_description' => 'Ενεργοποιήστε για να ξεκινήσει η εκτέλεση ή κάντε παύση για να σταματήσει.', + 'activated_at' => 'Ενεργοποιήθηκε :date', + 'paused_at' => 'Σε παύση :date', + 'created_at' => 'Δημιουργήθηκε :date', + 'danger_title' => 'Ζώνη κινδύνου', + 'danger_description' => 'Μη αναστρέψιμες ενέργειες.', + 'delete_title' => 'Διαγραφή αυτού του αυτοματισμού', + 'delete_description' => 'Αφαιρεί οριστικά τον αυτοματισμό και το ιστορικό εκτελέσεών του.', + ], + + 'status_run' => [ + 'pending' => 'Σε εκκρεμότητα', + 'running' => 'Σε εξέλιξη', + 'waiting' => 'Σε αναμονή', + 'completed' => 'Ολοκληρώθηκε', + 'failed' => 'Απέτυχε', + 'cancelled' => 'Ακυρώθηκε', + ], + + 'node_type' => [ + 'trigger' => 'Έναυσμα', + 'generate' => 'Δημιουργία περιεχομένου', + 'delay' => 'Καθυστέρηση', + 'condition' => 'Συνθήκη', + 'publish' => 'Δημοσίευση', + 'webhook' => 'Webhook', + 'end' => 'Τέλος', + 'fetch_rss' => 'Ανάκτηση RSS', + 'http_request' => 'Αίτημα HTTP', + ], + + 'invocations' => [ + 'empty' => 'Δεν υπάρχουν εκτελέσεις ακόμη.', + 'refresh' => 'Ανανέωση', + 'search_placeholder' => 'Αναζήτηση με ID εκτέλεσης…', + 'copied' => 'Το ID εκτέλεσης αντιγράφηκε.', + 'loading' => 'Φόρτωση βημάτων…', + 'no_steps' => 'Δεν καταγράφηκαν βήματα.', + 'load_error' => 'Δεν ήταν δυνατή η φόρτωση των βημάτων.', + 'steps' => '{0}Κανένα βήμα|{1}:count βήμα|[2,*]:count βήματα', + 'filter' => [ + 'all' => 'Όλες οι καταστάσεις', + ], + 'columns' => [ + 'timestamp' => 'Χρονική σήμανση', + 'run' => 'Εκτέλεση', + 'status' => 'Κατάσταση', + 'message' => 'Τελευταίο μήνυμα', + 'duration' => 'Διάρκεια', + ], + 'summary' => [ + 'completed' => 'Η ροή εργασίας ολοκληρώθηκε', + 'failed' => 'Η ροή εργασίας απέτυχε', + 'running' => 'Η ροή εργασίας εκτελείται', + 'cancelled' => 'Η ροή εργασίας ακυρώθηκε', + 'pending' => 'Η ροή εργασίας εκκρεμεί', + ], + ], + + 'metrics' => [ + 'overview' => 'Επισκόπηση', + 'runs_over_time' => 'Εκτελέσεις με την πάροδο του χρόνου', + 'posts_by_platform' => 'Δημοσιεύσεις ανά πλατφόρμα', + 'no_posts' => 'Δεν δημοσιεύτηκαν δημοσιεύσεις σε αυτή την περίοδο.', + 'cards' => [ + 'runs' => 'Συνολικές εκτελέσεις', + 'completed' => 'Ολοκληρώθηκαν', + 'failed' => 'Απέτυχαν', + 'in_progress' => 'Σε εξέλιξη', + 'success_rate' => 'Ποσοστό επιτυχίας', + 'avg_duration' => 'Μέση διάρκεια', + 'posts_created' => 'Δημοσιεύσεις που δημιουργήθηκαν', + ], + 'legend' => [ + 'started' => 'Ξεκίνησαν', + 'completed' => 'Ολοκληρώθηκαν', + 'failed' => 'Απέτυχαν', + ], + ], + + 'categories' => [ + 'sources' => 'Πηγές', + 'content' => 'Περιεχόμενο', + 'flow' => 'Ροή', + 'output' => 'Έξοδος', + ], + + 'variables' => [ + 'title' => 'Μεταβλητές ροής εργασίας', + 'hint' => 'Επαναχρησιμοποιήσιμες τιμές που αναφέρονται οπουδήποτε με {{ variables.KEY }}. Αποθηκεύονται κρυπτογραφημένες.', + 'empty' => 'Δεν υπάρχουν μεταβλητές ακόμη.', + 'key' => 'Κλειδί', + 'value' => 'Τιμή', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'Τιμή', + 'add' => 'Νέα μεταβλητή', + ], + + 'expr' => [ + 'trigger_event' => 'Όνομα συμβάντος εναύσματος', + 'trigger_fired_at' => 'Πότε ενεργοποιήθηκε το έναυσμα', + 'trigger_post_id' => 'ID δημοσίευσης εναύσματος', + 'trigger_post_content' => 'Περιεχόμενο δημοσίευσης εναύσματος', + 'trigger_post_status' => 'Κατάσταση δημοσίευσης εναύσματος', + 'trigger_post_scheduled_at' => 'Πότε είναι προγραμματισμένη η δημοσίευση', + 'trigger_post_published_at' => 'Πότε δημοσιεύτηκε η δημοσίευση', + 'fetched_title' => 'Τίτλος ανακτηθέντος στοιχείου', + 'fetched_link' => 'Σύνδεσμος ανακτηθέντος στοιχείου', + 'fetched_date' => 'Ημερομηνία δημοσίευσης ανακτηθέντος στοιχείου', + 'fetched_content' => 'Πλήρες περιεχόμενο ανακτηθέντος στοιχείου', + 'fetched_description' => 'Σύνοψη ανακτηθέντος στοιχείου', + 'fetched_author' => 'Συντάκτης ανακτηθέντος στοιχείου', + 'fetched_image' => 'URL εικόνας ανακτηθέντος στοιχείου', + 'fetched_categories' => 'Κατηγορίες ανακτηθέντος στοιχείου', + 'fetched_enclosure' => 'Πολυμέσα ανακτηθέντος στοιχείου (ήχος/βίντεο/αρχείο)', + 'fetched_pubdate' => 'Ημερομηνία δημοσίευσης ανακτηθέντος στοιχείου', + 'fetched_http' => 'Ανακτηθέν στοιχείο HTTP (προσθέστε ένα πεδίο)', + 'generated_content' => 'Περιεχόμενο δημοσίευσης που δημιούργησε το AI', + 'generated_post_url' => 'URL δημοσίευσης που δημιούργησε το AI', + 'variable' => 'Μεταβλητή ροής εργασίας', + 'now' => 'Τρέχουσα ημερομηνία και ώρα', + ], + + 'test' => [ + 'description' => 'Εκτελεί τον αυτοματισμό από άκρη σε άκρη χρησιμοποιώντας ένα συνθετικό payload εναύσματος. Χρήσιμο για την επικύρωση κάθε κόμβου χωρίς αναμονή για το πραγματικό χρονοδιάγραμμα ή τη ροή.', + 'starting' => 'Έναρξη δοκιμαστικής εκτέλεσης…', + 'in_progress' => 'Σε εξέλιξη', + 'completed' => 'Ολοκληρώθηκε', + 'failed' => 'Απέτυχε', + 'waiting' => 'Σε αναμονή', + 'close' => 'Κλείσιμο', + 'no_node_runs' => 'Αναμονή για την έναρξη του πρώτου κόμβου…', + 'node_input' => 'Είσοδος', + 'node_output' => 'Έξοδος', + 'node_error' => 'Σφάλμα', + 'no_new_items' => 'Δεν υπάρχουν νέα στοιχεία — τίποτα δεν εκτελέστηκε παρακάτω.', + 'error_starting' => 'Δεν ήταν δυνατή η έναρξη της δοκιμαστικής εκτέλεσης.', + 'with_real_data' => 'Με πραγματικά δεδομένα', + 'run' => 'Εκτέλεση δοκιμής', + 'idle_hint' => 'Πατήστε Εκτέλεση δοκιμής για να εκτελέσετε τον αυτοματισμό από άκρη σε άκρη.', + 'real_data_hint' => 'Αυτή η δοκιμή θα δημοσιεύσει δημοσιεύσεις, θα προωθήσει τα σημεία ελέγχου polling και θα ενεργοποιήσει εξωτερικές παρενέργειες.', + 'dry_badge' => 'Δοκιμαστική εκτέλεση', + ], + + 'status' => [ + 'draft' => 'Πρόχειρο', + 'active' => 'Ενεργός', + 'paused' => 'Σε παύση', + ], + + 'index' => [ + 'empty_title' => 'Δεν υπάρχουν αυτοματισμοί ακόμη', + 'empty_description' => 'Δημιουργήστε τον πρώτο σας αυτοματισμό για να ξεκινήσετε να δημοσιεύετε αυτόματα.', + 'columns' => [ + 'name' => 'Όνομα', + 'status' => 'Κατάσταση', + 'created' => 'Δημιουργήθηκε', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'Δεν ήταν δυνατή η ενεργοποίηση του αυτοματισμού.', + 'pause_error_fallback' => 'Δεν ήταν δυνατή η παύση του αυτοματισμού.', + 'save_error_fallback' => 'Δεν ήταν δυνατή η αποθήκευση του αυτοματισμού.', + 'save_success' => 'Ο αυτοματισμός αποθηκεύτηκε.', + 'empty_canvas_title' => 'Ξεκινήστε να δημιουργείτε τον αυτοματισμό σας', + 'empty_canvas_description' => 'Σύρετε έναν κόμβο από τον αριστερό πίνακα για να ξεκινήσετε.', + 'name_placeholder' => 'Αυτοματισμός χωρίς τίτλο', + ], + + 'nodes' => [ + 'trigger' => 'Έναυσμα', + 'generate' => 'Δημιουργία', + 'delay' => 'Καθυστέρηση', + 'condition' => 'Συνθήκη', + 'publish' => 'Δημοσίευση', + 'webhook' => 'Webhook', + 'end' => 'Τέλος', + 'end_summary' => 'Σταματά τον αυτοματισμό εδώ', + 'fetch_rss' => 'Ανάκτηση RSS', + 'http_request' => 'Αίτημα HTTP', + 'handles' => [ + 'items' => 'έχει στοιχεία', + 'no_items' => 'κανένα στοιχείο', + ], + ], + + 'config' => [ + 'select_placeholder' => 'Επιλέξτε…', + 'invalid_json' => 'Αυτό δεν είναι ακόμη έγκυρο JSON.', + 'expand_editor' => 'Ανάπτυξη επεξεργαστή', + 'minimize_editor' => 'Ελαχιστοποίηση', + + 'trigger' => [ + 'type' => 'Τύπος εναύσματος', + 'types' => [ + 'schedule' => 'Χρονοδιάγραμμα', + 'post_published' => 'Όταν δημοσιεύεται μια δημοσίευση', + 'post_scheduled' => 'Όταν προγραμματίζεται μια δημοσίευση', + ], + 'post_published_hint' => 'Εκτελείται κάθε φορά που δημοσιεύεται οποιαδήποτε δημοσίευση σε αυτό το workspace. Η δημοσιευμένη δημοσίευση γίνεται διαθέσιμη στο {{ trigger.post }} για τους επόμενους κόμβους.', + 'post_scheduled_hint' => 'Εκτελείται κάθε φορά που προγραμματίζεται οποιαδήποτε δημοσίευση σε αυτό το workspace. Η προγραμματισμένη δημοσίευση είναι διαθέσιμη στο {{ trigger.post }}.', + + 'schedule' => [ + 'field' => 'Διάστημα εναύσματος', + 'fields' => [ + 'minutes' => 'Λεπτά', + 'hours' => 'Ώρες', + 'days' => 'Ημέρες', + 'weeks' => 'Εβδομάδες', + 'months' => 'Μήνες', + ], + 'minutes_interval' => 'Λεπτά μεταξύ εναυσμάτων', + 'hours_interval' => 'Ώρες μεταξύ εναυσμάτων', + 'days_interval' => 'Ημέρες μεταξύ εναυσμάτων', + 'hour' => 'Έναυσμα στην ώρα', + 'minute' => 'Έναυσμα στο λεπτό', + 'weekdays' => 'Έναυσμα σε ημέρες της εβδομάδας', + 'day_of_month' => 'Ημέρα του μήνα', + 'weekday_names' => [ + 'sun' => 'Κυρ', + 'mon' => 'Δευ', + 'tue' => 'Τρί', + 'wed' => 'Τετ', + 'thu' => 'Πέμ', + 'fri' => 'Παρ', + 'sat' => 'Σάβ', + ], + 'summary' => [ + 'every_n_minutes' => 'Εκτελείται κάθε λεπτό|Εκτελείται κάθε :count λεπτά', + 'every_n_hours' => 'Εκτελείται κάθε ώρα στο λεπτό :minute|Εκτελείται κάθε :count ώρες στο λεπτό :minute', + 'every_n_days' => 'Εκτελείται κάθε ημέρα στις :time|Εκτελείται κάθε :count ημέρες στις :time', + 'weekly' => 'Εκτελείται κάθε :days στις :time', + 'monthly' => 'Εκτελείται την ημέρα :day κάθε μήνα στις :time', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'Λογαριασμοί κοινωνικών δικτύων', + 'social_accounts_empty' => 'Δεν υπάρχουν συνδεδεμένοι λογαριασμοί κοινωνικών δικτύων. Συνδέστε πρώτα έναν.', + 'target_slide_count' => 'Slides προς δημιουργία', + 'prompt_template' => 'Πρότυπο prompt', + 'prompt_template_hint' => 'Πληκτρολογήστε {{ για εισαγωγή δεδομένων από προηγούμενα βήματα.', + 'image_count' => 'Εικόνες προς δημιουργία', + 'image_count_hint' => '0 = δημοσίευση μόνο με κείμενο (χωρίς εικόνα). 1 = μία εικόνα. 2+ = carousel.', + 'use_brand_voice' => 'Χρήση φωνής μάρκας', + 'use_brand_voice_hint' => 'Εφαρμόστε την περιγραφή και τη φωνή της μάρκας σας. Απενεργοποιήστε το για πιστή επιμέλεια πηγών τρίτων (ειδήσεις, RSS).', + 'use_brand_visuals' => 'Χρήση οπτικών στοιχείων μάρκας', + 'use_brand_visuals_hint' => 'Κατευθύνετε τις εικόνες AI με τα χρώματα και την ταυτότητα της μάρκας σας. Απενεργοποιήστε το για ουδέτερες εικόνες που καθορίζονται μόνο από το θέμα της δημοσίευσης.', + 'style' => 'Ύφος', + 'account_summary' => ':count λογαριασμός · :format|:count λογαριασμοί · :format', + 'formats' => [ + 'single' => 'μεμονωμένο', + 'carousel' => 'carousel', + ], + ], + 'delay' => [ + 'duration' => 'Διάρκεια', + 'unit' => 'Μονάδα', + 'units' => [ + 'minutes' => 'Λεπτά', + 'hours' => 'Ώρες', + 'days' => 'Ημέρες', + ], + ], + 'condition' => [ + 'field' => 'Πεδίο', + 'operator' => 'Τελεστής', + 'operators' => [ + 'contains' => 'περιέχει', + 'not_contains' => 'δεν περιέχει', + 'equals' => 'ισούται με', + 'not_equals' => 'δεν ισούται με', + 'matches' => 'ταιριάζει (regex)', + 'greater_than' => 'μεγαλύτερο από', + 'less_than' => 'μικρότερο από', + ], + 'value' => 'Τιμή', + ], + 'publish' => [ + 'mode' => 'Λειτουργία', + 'modes' => [ + 'now' => 'Δημοσίευση τώρα', + 'scheduled' => 'Χρονοδιάγραμμα', + 'draft' => 'Αποθήκευση ως πρόχειρο', + ], + 'scheduled_offset' => 'Μετατόπιση από το έναυσμα (λεπτά)', + 'offset_summary' => ':mode · +:offset λεπτά', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'Μέθοδος', + 'payload_template' => 'Πρότυπο payload (JSON)', + ], + 'end' => [ + 'reason' => 'Αιτία (προαιρετικό)', + 'reason_placeholder' => 'π.χ. Φιλτραρίστηκε από τη συνθήκη', + ], + 'fetch_rss' => [ + 'feed_url' => 'URL ροής', + 'feed_url_hint' => 'Στην πρώτη εκτέλεση, το σημείο ελέγχου ορίζεται στο «τώρα» ώστε τα παλαιότερα στοιχεία να μην πλημμυρίσουν τους επόμενους κόμβους. Οι επόμενες εκτελέσεις βλέπουν μόνο στοιχεία νεότερα από το προηγούμενο poll.', + 'inspect' => 'Επιθεώρηση ροής', + 'inspecting' => 'Επιθεώρηση…', + 'inspect_hint' => 'Ανακτήστε ένα δείγμα για να ανακαλύψετε τα διαθέσιμα πεδία προς χρήση στους επόμενους κόμβους.', + 'inspect_error' => 'Δεν ήταν δυνατή η ανάγνωση αυτής της ροής. Ελέγξτε τη διεύθυνση URL και δοκιμάστε ξανά.', + 'discovered_fields' => 'Διαθέσιμα πεδία', + 'discovered_empty' => 'Δεν βρέθηκαν πεδία στο πιο πρόσφατο στοιχείο.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'Μέθοδος', + 'auth_type' => 'Ταυτοποίηση', + 'auth' => [ + 'none' => 'Καμία (δημόσιο)', + 'bearer' => 'Bearer token', + 'basic' => 'Basic auth', + 'api_key' => 'Κεφαλίδα κλειδιού API', + ], + 'bearer_token' => 'Bearer token', + 'basic_username' => 'Όνομα χρήστη', + 'basic_password' => 'Κωδικός πρόσβασης', + 'api_key_header' => 'Όνομα κεφαλίδας', + 'api_key_value' => 'Κλειδί API', + 'body_template' => 'Πρότυπο σώματος (JSON)', + 'headers' => 'Κεφαλίδες', + 'header_name' => 'Όνομα κεφαλίδας', + 'header_value' => 'Τιμή', + 'add_header' => 'Προσθήκη κεφαλίδας', + 'polling_section' => 'Λίστα και αφαίρεση διπλότυπων (προαιρετικό)', + 'polling_hint' => 'Όταν η απόκριση είναι λίστα, κάθε στοιχείο εκτελεί τη ροή εργασίας ξεχωριστά. Ένα μεμονωμένο αντικείμενο εκτελείται μία φορά.', + 'items_path' => 'Διαδρομή στοιχείων', + 'items_path_hint' => 'Αφήστε το κενό αν η απόκριση είναι ήδη πίνακας. Χρησιμοποιήστε διαδρομή με τελείες (π.χ. data.items) για εμφωλευμένο πίνακα ή * για αντικείμενο με κλειδί το id.', + 'item_key_path' => 'Διαδρομή κλειδιού στοιχείου', + 'item_key_path_hint' => 'Διαδρομή JSON προς ένα μοναδικό id (π.χ. id). Τα στοιχεία που έχουν ήδη εμφανιστεί παραλείπονται, ώστε μια ροή χωρίς ημερομηνίες να προωθεί μόνο νέες καταχωρίσεις.', + 'item_date_path' => 'Διαδρομή ημερομηνίας στοιχείου', + 'item_date_path_hint' => 'Διαδρομή JSON προς τη χρονική σήμανση του στοιχείου (π.χ. published_at). Προτιμάται έναντι της διαδρομής κλειδιού όταν είναι διαθέσιμη. Το πρώτο poll καταγράφει τη γραμμή βάσης και δεν προωθεί τίποτα, ώστε μια υπάρχουσα ροή να μην πλημμυρίζει την πρώτη ημέρα.', + ], + ], + + 'delete' => [ + 'title' => 'Διαγραφή αυτοματισμού', + 'description' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον αυτοματισμό; Όλες οι εκτελέσεις και τα στοιχεία εναύσματος θα αφαιρεθούν επίσης. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.', + 'confirm' => 'Διαγραφή', + 'cancel' => 'Ακύρωση', + ], + + 'flash' => [ + 'deleted' => 'Ο αυτοματισμός διαγράφηκε με επιτυχία!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'Δεν έχουν ρυθμιστεί ενεργοί λογαριασμοί κοινωνικών δικτύων για αυτόν τον αυτοματισμό.', + 'must_have_one_trigger' => 'Ο αυτοματισμός πρέπει να έχει ακριβώς έναν κόμβο εναύσματος.', + 'trigger_must_be_connected' => 'Ο κόμβος εναύσματος πρέπει να είναι συνδεδεμένος με τουλάχιστον έναν κόμβο.', + 'graph_contains_cycle' => 'Το γράφημα του αυτοματισμού περιέχει κύκλο.', + 'only_failed_can_retry' => 'Μόνο οι αποτυχημένες εκτελέσεις μπορούν να επαναληφθούν.', + 'no_generated_post' => 'Δεν βρέθηκε δημιουργημένη δημοσίευση στην εκτέλεση.', + 'webhook_server_error' => 'Σφάλμα διακομιστή webhook.', + 'webhook_request_failed' => 'Το αίτημα webhook δεν ήταν δυνατό να ολοκληρωθεί.', + 'webhook_missing_url' => 'Από τον κόμβο webhook λείπει μια διεύθυνση URL.', + 'webhook_invalid_payload_json' => 'Το πρότυπο payload δεν είναι έγκυρο JSON.', + 'url_not_allowed' => 'Η διεύθυνση URL του αιτήματος δείχνει σε ιδιωτική ή μη προσβάσιμη διεύθυνση και αποκλείστηκε.', + 'node_no_longer_exists' => 'Ο κόμβος :node_id δεν υπάρχει πλέον στον αυτοματισμό.', + 'no_trigger_connection' => 'Κανένας κόμβος δεν είναι συνδεδεμένος με τον κόμβο εναύσματος.', + 'fetch_rss_missing_url' => 'Από τον κόμβο Ανάκτησης RSS λείπει μια διεύθυνση URL ροής.', + 'fetch_rss_request_failed' => 'Το αίτημα της ροής RSS απέτυχε.', + 'fetch_rss_malformed' => 'Η ροή RSS είναι δυσμορφική.', + 'http_missing_url' => 'Από τον κόμβο αιτήματος HTTP λείπει μια διεύθυνση URL.', + 'http_request_exception' => 'Το αίτημα HTTP προκάλεσε εξαίρεση.', + 'http_request_failed' => 'Το αίτημα HTTP απέτυχε.', + 'http_items_path_not_array' => 'Η διαδρομή στοιχείων δεν αντιστοιχήθηκε σε λίστα.', + ], +]; diff --git a/lang/el/billing.php b/lang/el/billing.php new file mode 100644 index 00000000..fa643fe7 --- /dev/null +++ b/lang/el/billing.php @@ -0,0 +1,76 @@ + 'Χρέωση', + + 'past_due_notice' => [ + 'title' => 'Ληξιπρόθεσμη πληρωμή', + 'description' => 'Ενημερώστε τη μέθοδο πληρωμής σας για να διατηρήσετε ενεργή τη συνδρομή σας.', + 'cta' => 'Ενημέρωση πληρωμής', + ], + + 'annual_banner' => [ + 'title' => 'Κερδίστε 2 μήνες δωρεάν', + 'description' => 'Μεταβείτε σε ετήσια χρέωση και πληρώνετε λιγότερα κάθε μήνα — ίδιο πρόγραμμα, τίποτα άλλο δεν αλλάζει.', + 'cta' => 'Αναβάθμιση σε ετήσιο', + ], + + 'subscribe' => [ + 'billed_monthly' => 'Μηνιαία χρέωση', + 'billed_yearly' => 'Ετήσια χρέωση', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'Πρόγραμμα', + 'description' => 'Διαχειριστείτε το πρόγραμμα συνδρομής σας.', + 'label' => 'Πρόγραμμα', + 'workspaces' => '{1}:count workspace|[2,*]:count workspaces', + 'per_workspace' => 'ανά workspace', + 'price' => 'Τιμή', + 'month' => 'μήνας', + 'trial' => 'Δοκιμαστική περίοδος', + 'active' => 'Ενεργό', + 'past_due' => 'Ληξιπρόθεσμο', + 'cancelling' => 'Ακυρώνεται', + 'trial_ends' => 'Η δοκιμαστική περίοδος λήγει', + ], + + 'subscription' => [ + 'title' => 'Συνδρομή', + 'description' => 'Διαχειριστείτε τη μέθοδο πληρωμής, τα στοιχεία χρέωσης και τη συνδρομή σας.', + 'payment_method' => 'Μέθοδος πληρωμής', + 'no_payment_method' => 'Δεν υπάρχει καταχωρημένη μέθοδος πληρωμής ακόμη.', + 'expires_on' => 'Λήγει :month/:year', + 'manage_label' => 'Συνδρομή', + 'manage_stripe' => 'Διαχείριση στο Stripe', + ], + + 'invoices' => [ + 'title' => 'Τιμολόγια', + 'description' => 'Κατεβάστε τα προηγούμενα τιμολόγιά σας.', + 'empty' => 'Δεν βρέθηκαν τιμολόγια', + 'paid' => 'Πληρωμένο', + ], + + 'flash' => [ + 'plan_changed' => 'Είστε πλέον στο πρόγραμμα :plan.', + 'switched_to_yearly' => 'Είστε πλέον σε ετήσια χρέωση.', + 'cannot_manage' => 'Μόνο ο κάτοχος του λογαριασμού μπορεί να διαχειρίζεται τη χρέωση.', + 'credits_exhausted' => 'Εξαντλήθηκαν τα credits AI — το μηνιαίο σας όριο των :limit έχει χρησιμοποιηθεί. Αναβαθμίστε το πρόγραμμά σας ή περιμένετε μέχρι τον επόμενο μήνα.', + 'subscription_required' => 'Απαιτείται ενεργή συνδρομή για τη χρήση των λειτουργιών AI.', + ], + + 'processing' => [ + 'page_title' => 'Επεξεργασία...', + 'title' => 'Επεξεργασία της συνδρομής σας', + 'description' => 'Παρακαλούμε περιμένετε όσο ρυθμίζουμε τον λογαριασμό σας. Θα πάρει μόνο μια στιγμή.', + 'success_title' => 'Είστε έτοιμοι!', + 'success_description' => 'Η συνδρομή σας είναι ενεργή. Σας ανακατευθύνουμε στα workspaces σας...', + 'cancelled_title' => 'Η πληρωμή ακυρώθηκε', + 'cancelled_description' => 'Η πληρωμή σας ακυρώθηκε. Δεν έγινε καμία χρέωση.', + 'retry' => 'Δοκιμάστε ξανά', + ], +]; diff --git a/lang/el/brands.php b/lang/el/brands.php new file mode 100644 index 00000000..9b6768e7 --- /dev/null +++ b/lang/el/brands.php @@ -0,0 +1,39 @@ + 'Νέα μάρκα', + 'no_brands_yet' => 'Δεν υπάρχουν μάρκες ακόμη', + 'no_brands_description' => 'Δημιουργήστε μάρκες για να οργανώσετε τους λογαριασμούς κοινωνικών δικτύων σας ανά πελάτη ή έργο', + 'accounts_count' => ':count λογαριασμοί', + + 'create' => [ + 'title' => 'Δημιουργία μάρκας', + 'description' => 'Δώστε ένα όνομα στη μάρκα σας για να ομαδοποιήσετε λογαριασμούς κοινωνικών δικτύων', + 'name' => 'Όνομα μάρκας', + 'name_placeholder' => 'π.χ. Acme Corp, Προσωπική', + 'submit' => 'Δημιουργία μάρκας', + 'submitting' => 'Δημιουργία...', + ], + + 'edit' => [ + 'title' => 'Επεξεργασία μάρκας', + 'description' => 'Ενημερώστε το όνομα αυτής της μάρκας', + 'name' => 'Όνομα μάρκας', + 'name_placeholder' => 'π.χ. Acme Corp, Προσωπική', + 'submit' => 'Αποθήκευση αλλαγών', + 'submitting' => 'Αποθήκευση...', + ], + + 'delete' => [ + 'title' => 'Διαγραφή μάρκας', + 'description' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη μάρκα; Οι λογαριασμοί κοινωνικών δικτύων θα αποδεσμευτούν αλλά δεν θα διαγραφούν.', + 'confirm' => 'Διαγραφή', + 'cancel' => 'Ακύρωση', + ], + + 'flash' => [ + 'created' => 'Η μάρκα δημιουργήθηκε με επιτυχία!', + 'updated' => 'Η μάρκα ενημερώθηκε με επιτυχία!', + 'deleted' => 'Η μάρκα διαγράφηκε με επιτυχία!', + ], +]; diff --git a/lang/el/calendar.php b/lang/el/calendar.php new file mode 100644 index 00000000..ba1c6762 --- /dev/null +++ b/lang/el/calendar.php @@ -0,0 +1,12 @@ + 'Ημερολόγιο', + 'today' => 'Σήμερα', + 'day' => 'Ημέρα', + 'week' => 'Εβδομάδα', + 'month' => 'Μήνας', + 'new_post' => 'Νέα δημοσίευση', + 'no_content' => 'Χωρίς περιεχόμενο', + 'more' => '+:count ακόμη', +]; diff --git a/lang/el/comments.php b/lang/el/comments.php new file mode 100644 index 00000000..a3967ac1 --- /dev/null +++ b/lang/el/comments.php @@ -0,0 +1,18 @@ + 'Γράψτε ένα σχόλιο...', + 'reply_placeholder' => 'Γράψτε μια απάντηση...', + 'reply' => 'Απάντηση', + 'edit' => 'Επεξεργασία', + 'delete' => 'Διαγραφή', + 'edited' => 'επεξεργάστηκε', + 'save' => 'Αποθήκευση', + 'cancel' => 'Ακύρωση', + 'send' => 'Αποστολή', + 'replying_to' => 'Απάντηση προς :name', + 'empty' => 'Δεν υπάρχουν σχόλια ακόμη. Ξεκινήστε τη συζήτηση.', + 'load_more' => 'Φόρτωση παλαιότερων σχολίων', + 'today' => 'Σήμερα', + 'yesterday' => 'Χθες', +]; diff --git a/lang/el/common.php b/lang/el/common.php new file mode 100644 index 00000000..fc8fc86a --- /dev/null +++ b/lang/el/common.php @@ -0,0 +1,59 @@ + 'Πίσω', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'Αυτό δεν μπορεί να αναιρεθεί.', + 'type' => 'Πληκτρολογήστε', + 'to_confirm' => 'για επιβεβαίωση.', + 'copy_to_clipboard' => 'Αντιγραφή στο πρόχειρο', + 'delete_keyword' => 'delete', + ], + + 'photo_upload' => [ + 'upload' => 'Μεταφόρτωση', + 'uploading' => 'Μεταφόρτωση...', + 'remove' => 'Αφαίρεση φωτογραφίας', + 'hint' => 'Συνιστάται: τετράγωνη εικόνα, έως 2 MB.', + ], + + 'timezone' => [ + 'select' => 'Επιλογή ζώνης ώρας', + 'search' => 'Αναζήτηση ζώνης ώρας...', + 'empty' => 'Δεν βρέθηκε ζώνη ώρας', + ], + + 'date_picker' => [ + 'select' => 'Επιλογή ημερομηνίας', + ], + + 'date_range_picker' => [ + 'placeholder' => 'Επιλέξτε εύρος ημερομηνιών', + 'today' => 'Σήμερα', + 'yesterday' => 'Χθες', + 'last_7_days' => 'Τελευταίες 7 ημέρες', + 'last_30_days' => 'Τελευταίες 30 ημέρες', + 'last_3_months' => 'Τελευταίοι 3 μήνες', + 'last_6_months' => 'Τελευταίοι 6 μήνες', + 'last_12_months' => 'Τελευταίοι 12 μήνες', + 'this_month' => 'Αυτόν τον μήνα', + 'last_month' => 'Προηγούμενος μήνας', + 'year_to_date' => 'Από την αρχή του έτους', + 'last_year' => 'Πέρσι', + ], + + 'cancel' => 'Ακύρωση', + 'clear' => 'Καθαρισμός', + 'close' => 'Κλείσιμο', + 'loading_more' => 'Φόρτωση περισσότερων...', + + 'actions' => [ + 'copy' => 'Αντιγραφή', + 'copied' => 'Αντιγράφηκε', + 'copy_failed' => 'Αποτυχία αντιγραφής στο πρόχειρο', + ], +]; diff --git a/lang/el/labels.php b/lang/el/labels.php new file mode 100644 index 00000000..a8e46a5f --- /dev/null +++ b/lang/el/labels.php @@ -0,0 +1,54 @@ + 'Ετικέτες', + 'description' => 'Δημιουργήστε ετικέτες για να οργανώσετε και να κατηγοριοποιήσετε τις δημοσιεύσεις σας', + 'search' => 'Αναζήτηση ετικετών...', + 'new_label' => 'Νέα ετικέτα', + 'no_labels_yet' => 'Δεν υπάρχουν ετικέτες ακόμη', + 'no_search_results' => 'Καμία ετικέτα δεν ταιριάζει με την αναζήτησή σας', + 'try_different_search' => 'Δοκιμάστε διαφορετική λέξη-κλειδί ή καθαρίστε την αναζήτηση.', + 'create_first_label' => 'Δημιουργήστε την πρώτη σας ετικέτα', + 'table' => [ + 'name' => 'Όνομα', + 'created_at' => 'Δημιουργήθηκε', + ], + + 'actions' => [ + 'edit' => 'Επεξεργασία ετικέτας', + 'delete' => 'Διαγραφή ετικέτας', + ], + + 'create' => [ + 'title' => 'Δημιουργία ετικέτας', + 'description' => 'Δώστε ένα όνομα στην ετικέτα σας και επιλέξτε ένα χρώμα', + 'name' => 'Όνομα', + 'name_placeholder' => 'Εισάγετε το όνομα της ετικέτας...', + 'color' => 'Χρώμα', + 'submit' => 'Δημιουργία ετικέτας', + 'submitting' => 'Δημιουργία...', + ], + + 'edit' => [ + 'title' => 'Επεξεργασία ετικέτας', + 'description' => 'Ενημερώστε το όνομα και το χρώμα αυτής της ετικέτας', + 'name' => 'Όνομα', + 'name_placeholder' => 'Εισάγετε το όνομα της ετικέτας...', + 'color' => 'Χρώμα', + 'submit' => 'Αποθήκευση αλλαγών', + 'submitting' => 'Αποθήκευση...', + ], + + 'delete' => [ + 'title' => 'Διαγραφή ετικέτας', + 'description' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή την ετικέτα; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.', + 'confirm' => 'Διαγραφή', + 'cancel' => 'Ακύρωση', + ], + + 'flash' => [ + 'created' => 'Η ετικέτα δημιουργήθηκε με επιτυχία!', + 'updated' => 'Η ετικέτα ενημερώθηκε με επιτυχία!', + 'deleted' => 'Η ετικέτα διαγράφηκε με επιτυχία!', + ], +]; diff --git a/lang/el/mail.php b/lang/el/mail.php new file mode 100644 index 00000000..770372ca --- /dev/null +++ b/lang/el/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => 'Ο/Η :name σας ανέφερε στο TryPost', + 'title' => 'Ο/Η :name σας ανέφερε', + 'intro' => 'Ο/Η :name σας ανέφερε σε σχόλιο μιας δημοσίευσης.', + 'cta' => 'Προβολή σχολίου', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :count λογαριασμός χρειάζεται επανασύνδεση στο :workspace|[2,*] :count λογαριασμοί χρειάζονται επανασύνδεση στο :workspace', + 'title' => 'Λογαριασμοί που χρειάζονται επανασύνδεση', + 'intro' => 'Οι παρακάτω λογαριασμοί κοινωνικών δικτύων στο workspace :workspace αποσυνδέθηκαν και χρειάζονται επανασύνδεση:', + 'reasons_title' => 'Αυτό μπορεί να συνέβη επειδή:', + 'reason_expired' => 'Τα tokens πρόσβασης έληξαν', + 'reason_revoked' => 'Ανακαλέσατε την πρόσβαση του TryPost στην πλατφόρμα', + 'reason_changed' => 'Η πλατφόρμα άλλαξε τις απαιτήσεις ταυτοποίησής της', + 'reconnect_cta' => 'Παρακαλούμε επανασυνδέστε αυτούς τους λογαριασμούς για να συνεχίσετε τον προγραμματισμό και τη δημοσίευση.', + 'button' => 'Επανασύνδεση λογαριασμών', + ], +]; diff --git a/lang/el/notifications.php b/lang/el/notifications.php new file mode 100644 index 00000000..88f8ff08 --- /dev/null +++ b/lang/el/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'Η δημοσίευσή σας είναι έτοιμη', + 'body' => 'Το AI μόλις ολοκλήρωσε. Πατήστε για έλεγχο και δημοσίευση.', + ], + 'account_disconnected' => [ + 'title' => 'Ο λογαριασμός :platform αποσυνδέθηκε', + 'body' => 'Ο λογαριασμός :account χρειάζεται επανασύνδεση', + ], + 'account_token_expired' => [ + 'title' => 'Ο λογαριασμός :platform χρειάζεται επανασύνδεση', + 'body' => 'Η συνεδρία :account έληξε — επανασυνδεθείτε για να συνεχίσετε να δημοσιεύετε', + ], +]; diff --git a/lang/el/onboarding.php b/lang/el/onboarding.php new file mode 100644 index 00000000..4da5de0a --- /dev/null +++ b/lang/el/onboarding.php @@ -0,0 +1,41 @@ + 'Καλώς ήρθατε στο TryPost', + 'description' => 'Πείτε μας τι σας περιγράφει καλύτερα, εσάς ή την επιχείρησή σας, ώστε να προσαρμόσουμε την εμπειρία σας.', + 'continue' => 'Συνέχεια', + 'personas' => [ + 'creator' => 'Δημιουργός περιεχομένου', + 'freelancer' => 'Ελεύθερος επαγγελματίας', + 'developer' => 'Προγραμματιστής', + 'startup' => 'Startup', + 'agency' => 'Πρακτορείο', + 'small_business' => 'Μικρή επιχείρηση', + 'marketer' => 'Marketer', + 'online_store' => 'Ηλεκτρονικό κατάστημα', + 'other' => 'Άλλο', + ], + 'goals_title' => 'Ποιος είναι ο στόχος σας με το TryPost;', + 'goals_description' => 'Επιλέξτε ό,τι σας ταιριάζει και θα ρυθμίσουμε το TryPost για εσάς.', + 'goals' => [ + 'save_time' => 'Εξοικονόμηση χρόνου δημοσιεύοντας παντού ταυτόχρονα', + 'ai_content' => 'Δημιουργία δημοσιεύσεων ταχύτερα με AI', + 'plan_calendar' => 'Προγραμματισμός των δημοσιεύσεών μου σε ημερολόγιο', + 'stay_on_brand' => 'Διατήρηση κάθε δημοσίευσης εναρμονισμένης με τη μάρκα', + 'grow_audience' => 'Ανάπτυξη του κοινού και της αλληλεπίδρασής μου', + 'drive_sales' => 'Περισσότερη επισκεψιμότητα και πωλήσεις', + 'manage_clients' => 'Διαχείριση πολλών μαρκών ή πελατών', + 'team_collaboration' => 'Συνεργασία με την ομάδα μου', + 'automate_api' => 'Αυτοματοποίηση δημοσιεύσεων με το API, το MCP ή κώδικα', + 'track_performance' => 'Παρακολούθηση της απόδοσης των δημοσιεύσεών μου', + 'just_exploring' => 'Απλώς εξερευνώ προς το παρόν', + 'other' => 'Κάτι άλλο', + ], + 'connect' => [ + 'title' => 'Συνδέστε το πρώτο σας δίκτυο', + 'description' => 'Συνδέστε τουλάχιστον έναν λογαριασμό κοινωνικού δικτύου για να ξεκινήσετε τον προγραμματισμό. Μπορείτε να προσθέσετε κι άλλους ανά πάσα στιγμή.', + 'must_connect' => 'Συνδέστε τουλάχιστον ένα δίκτυο για να συνεχίσετε.', + ], +]; diff --git a/lang/el/pagination.php b/lang/el/pagination.php new file mode 100644 index 00000000..3f186c7a --- /dev/null +++ b/lang/el/pagination.php @@ -0,0 +1,19 @@ + '« Προηγούμενο', + 'next' => 'Επόμενο »', + +]; diff --git a/lang/el/passwords.php b/lang/el/passwords.php new file mode 100644 index 00000000..7f67588f --- /dev/null +++ b/lang/el/passwords.php @@ -0,0 +1,22 @@ + 'Ο κωδικός πρόσβασής σας επαναφέρθηκε.', + 'sent' => 'Σας στείλαμε με email τον σύνδεσμο επαναφοράς κωδικού πρόσβασης.', + 'throttled' => 'Παρακαλούμε περιμένετε πριν προσπαθήσετε ξανά.', + 'token' => 'Αυτό το token επαναφοράς κωδικού πρόσβασης δεν είναι έγκυρο.', + 'user' => 'Δεν βρίσκουμε χρήστη με αυτή τη διεύθυνση email.', + +]; diff --git a/lang/el/posts.php b/lang/el/posts.php new file mode 100644 index 00000000..b32f2dd8 --- /dev/null +++ b/lang/el/posts.php @@ -0,0 +1,671 @@ + 'Δημοσιεύσεις', + 'search' => 'Αναζήτηση δημοσιεύσεων...', + 'all_posts' => 'Όλες οι δημοσιεύσεις', + 'new_post' => 'Νέα δημοσίευση', + 'no_posts' => 'Δεν βρέθηκαν δημοσιεύσεις', + 'no_search_results' => 'Καμία δημοσίευση δεν ταιριάζει με την αναζήτησή σας', + 'try_different_search' => 'Δοκιμάστε διαφορετική λέξη-κλειδί ή καθαρίστε την αναζήτηση.', + 'start_creating' => 'Ξεκινήστε δημιουργώντας την πρώτη σας δημοσίευση.', + 'filter_by_label' => 'Φιλτράρισμα ανά ετικέτα', + 'label_search_placeholder' => 'Αναζήτηση ετικετών...', + 'no_labels' => 'Δεν βρέθηκαν ετικέτες.', + 'clear_label_filter' => 'Καθαρισμός φίλτρου ετικετών', + 'table' => [ + 'post' => 'Δημοσίευση', + 'status' => 'Κατάσταση', + 'content' => 'Περιεχόμενο', + 'platforms' => 'Πλατφόρμες', + 'labels' => 'Ετικέτες', + 'scheduled_at' => 'Ημερομηνία', + 'actions' => '', + ], + 'manage_posts' => 'Διαχειριστείτε όλες τις δημοσιεύσεις σας', + 'delete_confirm' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη δημοσίευση;', + 'by' => 'από', + + 'actions' => [ + 'view' => 'Προβολή δημοσίευσης', + 'delete' => 'Διαγραφή', + 'duplicate' => 'Αντιγραφή', + 'copy_id' => 'Αντιγραφή ID', + 'copied' => 'Το ID αντιγράφηκε στο πρόχειρο', + ], + + 'form' => [ + 'post_type' => 'Τύπος δημοσίευσης', + 'board' => 'Πίνακας', + 'select_board' => 'Επιλέξτε έναν πίνακα', + 'search_board' => 'Αναζήτηση πίνακα...', + 'no_board_found' => 'Δεν βρέθηκε πίνακας', + 'media' => 'Πολυμέσα', + 'min' => 'Ελάχ.', + 'uploading' => 'Μεταφόρτωση...', + 'drop_to_upload' => 'Αποθέστε για μεταφόρτωση', + 'drag_and_drop' => 'Σύρετε και αποθέστε ή κάντε κλικ για μεταφόρτωση', + 'photos_and_videos' => 'Φωτογραφίες και βίντεο', + 'photos_only' => 'Μόνο φωτογραφίες', + 'videos_only' => 'Μόνο βίντεο', + 'drag_to_reorder' => 'Σύρετε για αναδιάταξη', + 'caption' => 'Λεζάντα', + 'write_caption' => 'Γράψτε τη λεζάντα σας...', + 'content_exceeds_platform' => ':platform: υπερβαίνει κατά :over χαρακτήρες (μέγ. :limit).', + 'tiktok' => [ + 'settings' => 'Ρυθμίσεις TikTok', + 'variant_label' => 'Τύπος δημοσίευσης', + 'variant' => [ + 'video' => 'Βίντεο', + 'photo' => 'Carousel φωτογραφιών', + ], + 'posting_to' => 'Δημοσίευση σε', + 'privacy_level' => 'Ποιος μπορεί να δει αυτό το βίντεο;', + 'privacy_placeholder' => 'Επιλέξτε ποιος μπορεί να δει αυτή τη δημοσίευση', + 'privacy' => [ + 'public' => 'Δημόσιο για όλους', + 'friends' => 'Αμοιβαίοι φίλοι που ακολουθείτε', + 'followers' => 'Ακόλουθοι', + 'private' => 'Μόνο εγώ', + 'private_disabled_branded' => 'Η ορατότητα του χορηγούμενου περιεχομένου δεν μπορεί να οριστεί ως ιδιωτική.', + ], + 'privacy_hint' => 'Οι διαθέσιμες επιλογές εξαρτώνται από τις ρυθμίσεις του λογαριασμού σας TikTok.', + 'auto_add_music' => 'Αυτόματη προσθήκη μουσικής', + 'auto_add_music_hint' => 'Αυτή η λειτουργία είναι διαθέσιμη μόνο για φωτογραφίες. Θα προσθέσει μια προεπιλεγμένη μουσική που μπορείτε να αλλάξετε αργότερα.', + 'yes' => 'Ναι', + 'no' => 'Όχι', + 'allow_users' => 'Επιτρέψτε στους χρήστες να:', + 'comments' => 'Σχολιάζουν', + 'duet' => 'Duet', + 'stitch' => 'Stitch', + 'is_aigc' => 'Βίντεο φτιαγμένο με AI', + 'disclose' => 'Γνωστοποίηση περιεχομένου βίντεο', + 'disclose_hint' => 'Ενεργοποιήστε το για να γνωστοποιήσετε ότι αυτό το βίντεο προωθεί αγαθά ή υπηρεσίες με αντάλλαγμα κάτι αξίας. Το βίντεό σας μπορεί να προωθεί εσάς, ένα τρίτο μέρος ή και τα δύο.', + 'promotional_organic_title' => 'Η φωτογραφία/βίντεό σας θα επισημανθεί ως «Προωθητικό περιεχόμενο».', + 'promotional_paid_title' => 'Η φωτογραφία/βίντεό σας θα επισημανθεί ως «Πληρωμένη συνεργασία».', + 'promotional_description' => 'Αυτό δεν μπορεί να αλλάξει μόλις δημοσιευτεί το βίντεό σας.', + 'compliance_incomplete' => 'Πρέπει να υποδείξετε αν το περιεχόμενό σας προωθεί εσάς, ένα τρίτο μέρος ή και τα δύο.', + 'privacy_required' => 'Το επίπεδο απορρήτου του TikTok είναι υποχρεωτικό κατά τη δημοσίευση.', + 'branded_cleared_private' => 'Το απόρρητο καθαρίστηκε επειδή το χορηγούμενο περιεχόμενο δεν μπορεί να είναι ιδιωτικό.', + 'interaction_disabled_by_creator' => 'Απενεργοποιημένο στις ρυθμίσεις του λογαριασμού σας TikTok', + 'max_duration_exceeded' => 'Το βίντεο διαρκεί :duration δευτ., αλλά αυτός ο λογαριασμός μπορεί να δημοσιεύσει βίντεο έως :max δευτ.', + 'processing_hint' => 'Μετά τη δημοσίευση, μπορεί να χρειαστούν λίγα λεπτά για να επεξεργαστεί το περιεχόμενο και να εμφανιστεί στο προφίλ σας TikTok.', + 'brand_organic' => 'Η μάρκα σας', + 'brand_organic_hint' => 'Προωθείτε τον εαυτό σας ή τη δική σας μάρκα. Αυτό το βίντεο θα ταξινομηθεί ως Brand Organic.', + 'brand_content' => 'Χορηγούμενο περιεχόμενο', + 'brand_content_hint' => 'Προωθείτε μια άλλη μάρκα ή ένα τρίτο μέρος. Αυτό το βίντεο θα ταξινομηθεί ως Branded Content.', + 'compliance' => [ + 'agree' => 'Δημοσιεύοντας, συμφωνείτε με την', + 'music_usage' => 'Επιβεβαίωση χρήσης μουσικής', + 'and' => 'και', + 'branded_policy' => 'Πολιτική χορηγούμενου περιεχομένου', + ], + ], + 'instagram' => [ + 'settings' => 'Ρυθμίσεις Instagram', + 'posting_to' => 'Δημοσίευση σε', + 'variant_label' => 'Τύπος δημοσίευσης', + 'variant' => [ + 'feed' => 'Δημοσίευση feed', + 'reel' => 'Reel', + 'story' => 'Story', + ], + 'aspect_label' => 'Αναλογία διαστάσεων', + 'aspect' => [ + 'square' => 'Τετράγωνο (1:1)', + 'portrait' => 'Κατακόρυφο (4:5)', + 'landscape' => 'Οριζόντιο (16:9)', + 'original' => 'Πρωτότυπο', + ], + ], + 'facebook' => [ + 'settings' => 'Ρυθμίσεις Facebook', + 'posting_to' => 'Δημοσίευση σε', + 'variant_label' => 'Τύπος δημοσίευσης', + 'variant' => [ + 'post' => 'Δημοσίευση', + 'reel' => 'Reel', + 'story' => 'Story', + ], + 'aspect_label' => 'Αναλογία διαστάσεων', + 'aspect' => [ + 'square' => 'Τετράγωνο (1:1)', + 'portrait' => 'Κατακόρυφο (4:5)', + 'landscape' => 'Οριζόντιο (16:9)', + 'original' => 'Πρωτότυπο', + ], + ], + 'linkedin' => [ + 'settings' => 'Ρυθμίσεις LinkedIn', + 'settings_page' => 'Ρυθμίσεις σελίδας LinkedIn', + 'posting_to' => 'Δημοσίευση σε', + 'document_title' => 'Τίτλος εγγράφου', + 'document_title_placeholder' => 'Εμφανίζεται στη δημοσίευση εγγράφου PDF σας', + ], + 'pinterest' => [ + 'settings' => 'Ρυθμίσεις Pinterest', + 'posting_to' => 'Δημοσίευση σε', + 'variant_label' => 'Τύπος pin', + 'variant' => [ + 'pin' => 'Pin', + 'video_pin' => 'Video Pin', + 'carousel' => 'Carousel', + ], + 'board' => 'Πίνακας', + 'select_board' => 'Επιλέξτε έναν πίνακα', + 'no_boards' => 'Δεν βρέθηκαν πίνακες Pinterest. Δημιουργήστε πρώτα έναν στον λογαριασμό σας Pinterest.', + 'search_board' => 'Αναζήτηση πινάκων...', + 'no_board_found' => 'Κανένας πίνακας δεν ταιριάζει με την αναζήτησή σας.', + 'board_required' => 'Επιλέξτε έναν πίνακα Pinterest για να δημοσιεύσετε αυτή τη δημοσίευση.', + ], + 'discord' => [ + 'settings' => 'Ρυθμίσεις Discord', + 'posting_to' => 'Δημοσίευση σε', + 'channel' => 'Κανάλι', + 'select_channel' => 'Επιλέξτε ένα κανάλι', + 'loading_channels' => 'Φόρτωση καναλιών…', + 'search_channel' => 'Αναζήτηση καναλιών…', + 'no_channels' => 'Δεν βρέθηκαν κανάλια.', + 'channel_required' => 'Επιλέξτε ένα κανάλι Discord για να δημοσιεύσετε αυτή τη δημοσίευση.', + 'mentions' => 'Αναφορές', + 'search_mention' => 'Αναφέρετε έναν ρόλο ή μέλος…', + 'embeds' => 'Embeds', + 'embed' => 'Embed', + 'add_embed' => 'Προσθήκη embed', + 'embed_title' => 'Τίτλος embed', + 'embed_description' => 'Περιγραφή embed', + 'embed_url' => 'URL embed', + 'embed_image' => 'URL εικόνας', + 'embed_color' => 'Χρώμα', + ], + 'warnings' => [ + 'no_variant' => 'Επιλέξτε έναν τύπο δημοσίευσης για να συνεχίσετε.', + 'requires_media' => 'Αυτός ο τύπος δημοσίευσης απαιτεί τουλάχιστον μία εικόνα ή βίντεο.', + 'max_files_exceeded' => 'Αυτός ο τύπος δημοσίευσης δέχεται έως :max αρχεία πολυμέσων (έχετε :current).', + 'min_files_required' => 'Αυτός ο τύπος δημοσίευσης απαιτεί τουλάχιστον :min αρχεία πολυμέσων (έχετε :current).', + 'no_video_allowed' => 'Αυτός ο τύπος δημοσίευσης δεν δέχεται βίντεο.', + 'no_image_allowed' => 'Αυτός ο τύπος δημοσίευσης δέχεται μόνο βίντεο.', + 'no_document_allowed' => 'Αυτός ο τύπος δημοσίευσης δεν δέχεται έγγραφα PDF.', + 'no_mixed_media' => 'Οι εικόνες και ένα βίντεο δεν μπορούν να συνδυαστούν στην ίδια δημοσίευση.', + 'document_not_alone' => 'Ένα PDF πρέπει να δημοσιεύεται μόνο του, χωρίς άλλες εικόνες ή βίντεο.', + 'gif_not_allowed' => 'Αυτή η πλατφόρμα δεν δέχεται GIF. Αφαιρέστε το GIF ή επιλέξτε διαφορετικό δίκτυο.', + 'image_too_large' => 'Η εικόνα υπερβαίνει το όριο :max για αυτόν τον τύπο δημοσίευσης (η δική σας είναι :current).', + 'video_too_large' => 'Το βίντεο υπερβαίνει το όριο :max για αυτόν τον τύπο δημοσίευσης (το δικό σας είναι :current).', + 'document_too_large' => 'Το PDF υπερβαίνει το όριο :max για αυτόν τον τύπο δημοσίευσης (το δικό σας είναι :current).', + 'video_too_long' => 'Το βίντεο διαρκεί :current, αλλά αυτός ο τύπος δημοσίευσης επιτρέπει έως :max.', + 'aspect_ratio_too_narrow' => 'Η αναλογία διαστάσεων :current είναι πολύ ψηλή για αυτόν τον τύπο δημοσίευσης (ελάχ. :min).', + 'aspect_ratio_too_wide' => 'Η αναλογία διαστάσεων :current είναι πολύ πλατιά για αυτόν τον τύπο δημοσίευσης (μέγ. :max).', + ], + ], + + 'status' => [ + 'pending' => 'Σε εκκρεμότητα', + 'draft' => 'Πρόχειρο', + 'scheduled' => 'Προγραμματισμένη', + 'publishing' => 'Δημοσιεύεται', + 'retrying' => 'Επανάληψη', + 'published' => 'Δημοσιεύτηκε', + 'partially_published' => 'Δημοσιεύτηκε εν μέρει', + 'failed' => 'Απέτυχε', + ], + + 'descriptions' => [ + 'draft' => 'Δημοσιεύσεις που αναμένουν προγραμματισμό', + 'scheduled' => 'Δημοσιεύσεις προγραμματισμένες για δημοσίευση', + 'published' => 'Δημοσιεύσεις που έχουν ήδη δημοσιευτεί', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'Δημιουργία με AI', + 'title' => 'Δημιουργία δημοσίευσης με AI', + 'description' => 'Περιγράψτε ποιο πρέπει να είναι το θέμα της δημοσίευσης. Το AI θα χρησιμοποιήσει το πλαίσιο της μάρκας σας για να τη γράψει.', + 'prompt_label' => 'Ποιο είναι το θέμα αυτής της δημοσίευσης;', + 'prompt_placeholder' => 'π.χ. Ανακοινώστε τη νέα μας λειτουργία δημιουργίας εικόνων για carousels', + 'preview_label' => 'Προεπισκόπηση', + 'start' => 'Δημιουργία', + 'apply' => 'Χρήση αυτού του περιεχομένου', + 'retry' => 'Δοκιμάστε ξανά', + 'cancel' => 'Ακύρωση', + ], + 'review' => [ + 'button_tooltip' => 'Έλεγχος με AI', + 'title' => 'Έλεγχος δημοσίευσης με AI', + 'description' => 'Το AI ελέγχει για γραμματική, ορθογραφία και σαφήνεια. Εφαρμόστε τις προτάσεις με τις οποίες συμφωνείτε.', + 'loading' => 'Έλεγχος του κειμένου σας...', + 'no_issues' => 'Δεν βρέθηκαν προβλήματα. Φαίνεται καλό.', + 'original' => 'Πρωτότυπο', + 'suggestion' => 'Πρόταση', + 'apply' => 'Εφαρμογή', + 'apply_all' => 'Εφαρμογή όλων', + 'applied' => 'Εφαρμόστηκε', + 'cancel' => 'Ακύρωση', + ], + 'image_regenerate' => [ + 'button' => 'Προσαρμογή', + 'title' => 'Προσαρμογή εικόνας AI', + 'description' => 'Περιγράψτε τη διόρθωση. Η νέα εικόνα αντικαθιστά την τρέχουσα και διατηρεί τη θέση της στο carousel.', + 'instruction_label' => 'Οδηγία', + 'instruction_placeholder' => 'π.χ. Διορθώστε το ορθογραφικό λάθος στον τίτλο και κάντε το φόντο πιο φωτεινό.', + 'processing' => 'Αναδημιουργία εικόνας... αυτό μπορεί να πάρει λίγα δευτερόλεπτα.', + 'submit' => 'Αναδημιουργία εικόνας', + 'cancel' => 'Ακύρωση', + 'success' => 'Η εικόνα ενημερώθηκε. Η νέα έκδοση αντικατέστησε την προηγούμενη στη δημοσίευσή σας.', + 'fallback_title' => 'Βελτιώστε αυτό το κείμενο εικόνας', + 'errors' => [ + 'required' => 'Η οδηγία είναι υποχρεωτική.', + 'start_failed' => 'Η έναρξη της αναδημιουργίας απέτυχε.', + 'unavailable' => 'Δεν είναι δυνατή η αναδημιουργία αυτής της εικόνας αυτή τη στιγμή.', + 'timeout' => 'Η αναδημιουργία διαρκεί περισσότερο από το αναμενόμενο. Δοκιμάστε ξανά σε λίγο.', + 'media_not_found' => 'Το στοιχείο πολυμέσων δεν βρέθηκε.', + 'not_ai_media' => 'Μόνο πολυμέσα που δημιουργούνται από AI μπορούν να αναδημιουργηθούν.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'Δημοσίευση εικόνας', + 'description' => 'Εικόνα AI με τίτλο και λεζάντα.', + ], + 'carousel' => [ + 'name' => 'Carousel', + 'description' => 'Carousel πολλαπλών slides με λεζάντα.', + ], + 'tweet_card' => [ + 'name' => 'Κάρτα tweet', + 'description' => 'Η δημοσίευσή σας σε στυλ δημοσίευσης X/Twitter.', + ], + 'tweet_card_image' => [ + 'name' => 'Κάρτα tweet με φωτογραφία', + 'description' => 'Η δημοσίευσή σας ως κάρτα X/Twitter πάνω σε θολή φωτογραφία.', + ], + ], + ], + + 'show' => [ + 'title' => 'Λεπτομέρειες δημοσίευσης', + 'edit' => 'Επεξεργασία', + 'back' => 'Πίσω', + 'no_content' => 'Χωρίς λεζάντα', + 'platforms' => 'Πλατφόρμες', + 'no_platforms' => 'Δεν επιλέχθηκαν πλατφόρμες.', + 'view_on_platform' => 'Προβολή στην πλατφόρμα', + 'published_on' => 'Δημοσιεύτηκε στις :date', + 'scheduled_for' => 'Προγραμματισμένη για :date', + 'draft' => 'Πρόχειρο', + 'status_pending' => 'Σε εκκρεμότητα', + 'metrics' => 'Μετρήσεις', + 'metrics_loading' => 'Φόρτωση μετρήσεων…', + 'metrics_unavailable' => 'Οι μετρήσεις δεν είναι ακόμη διαθέσιμες για αυτή την πλατφόρμα.', + 'metrics_empty' => 'Δεν επιστράφηκαν μετρήσεις.', + ], + + 'edit' => [ + 'title' => 'Επεξεργασία δημοσίευσης', + 'view_title' => 'Προβολή δημοσίευσης', + 'labels' => 'Ετικέτες', + 'no_labels' => 'Δεν έχουν δημιουργηθεί ετικέτες ακόμη', + 'schedule' => 'Χρονοδιάγραμμα', + 'pick_time' => 'Επιλέξτε ώρα', + 'pick_time_past' => 'Επιλέξτε μελλοντική ημερομηνία και ώρα.', + 'post_now' => 'Δημοσίευση τώρα', + 'time' => 'Ώρα', + 'cancel' => 'Ακύρωση', + 'delete' => 'Διαγραφή', + 'schedule_for' => 'Προγραμματισμός για', + 'schedule_date' => 'Ημερομηνία προγραμματισμού', + 'unschedule' => 'Αναίρεση προγραμματισμού', + 'saving' => 'Αποθήκευση...', + 'saved' => 'Αποθηκεύτηκε', + 'draft' => 'Πρόχειρο', + 'media' => 'Πολυμέσα', + 'add_media' => 'Προσθήκη πολυμέσων', + 'caption' => 'Λεζάντα', + 'caption_placeholder' => 'Γράψτε τη λεζάντα σας...', + 'compose_title' => 'Δημιουργήστε μια δημοσίευση', + 'compose_subtitle' => 'Συνθέστε το μήνυμά σας και προσθέστε πολυμέσα', + 'preview_empty' => [ + 'title' => 'Δεν επιλέχθηκε πλατφόρμα', + 'description' => 'Επιλέξτε μια πλατφόρμα για δημοσίευση για να δείτε την προεπισκόπηση.', + ], + 'drop_zone_title' => 'Προσθήκη πολυμέσων', + 'drop_zone_subtitle' => 'Σύρετε και αποθέστε αρχεία ή κάντε κλικ για αναζήτηση', + 'add' => 'Προσθήκη', + 'publish_to' => 'Δημοσίευση σε', + 'organize' => 'Οργάνωση', + 'signatures' => 'Υπογραφές', + 'view_on_platform' => 'Προβολή στην πλατφόρμα', + 'platform_status' => 'Κατάσταση πλατφόρμας', + 'compliance_incomplete' => 'Ορισμένες ρυθμίσεις πλατφόρμας είναι ελλιπείς ή ασύμβατες με τα συνημμένα πολυμέσα.', + 'compliance' => [ + 'requires_content_or_media' => 'Προσθέστε κείμενο ή πολυμέσα για δημοσίευση.', + 'requires_media' => 'Προσθέστε μια εικόνα ή βίντεο για δημοσίευση εδώ.', + 'too_many_files' => 'Επιτρέπονται μόνο :max αρχεία για αυτή τη μορφή.', + 'too_few_files' => 'Προσθέστε τουλάχιστον :min αρχεία για αυτή τη μορφή.', + 'no_videos' => 'Επιτρέπονται μόνο εικόνες για αυτή τη μορφή.', + 'no_images' => 'Επιτρέπονται μόνο βίντεο για αυτή τη μορφή.', + 'no_mixed_media' => 'Οι εικόνες και τα βίντεο δεν μπορούν να συνδυαστούν στην ίδια δημοσίευση.', + 'no_gifs' => 'Τα GIF δεν υποστηρίζονται εδώ.', + 'no_documents' => 'Τα έγγραφα PDF δεν υποστηρίζονται από αυτή τη μορφή.', + 'document_not_alone' => 'Ένα PDF πρέπει να δημοσιεύεται μόνο του, χωρίς άλλες εικόνες ή βίντεο.', + 'video_too_large' => 'Το βίντεο υπερβαίνει το όριο μεγέθους για αυτή την πλατφόρμα.', + 'video_too_long' => 'Το βίντεο πρέπει να είναι κάτω από :seconds δευτερόλεπτα για αυτή τη μορφή.', + 'image_too_large' => 'Η εικόνα υπερβαίνει το όριο μεγέθους για αυτή την πλατφόρμα.', + 'document_too_large' => 'Το PDF υπερβαίνει το όριο μεγέθους για αυτή την πλατφόρμα.', + 'aspect_ratio_invalid' => 'Η αναλογία διαστάσεων δεν υποστηρίζεται από αυτή τη μορφή.', + 'no_content_type' => 'Επιλέξτε έναν τύπο περιεχομένου για αυτή την πλατφόρμα.', + 'requires_text' => 'Προσθέστε κείμενο — αυτή η μορφή χρειάζεται τίτλο.', + ], + 'publishing' => 'Δημοσίευση...', + 'publishing_overlay_title' => 'Η δημοσίευσή σας δημοσιεύεται', + 'publishing_overlay_subtitle' => 'Αυτό μπορεί να πάρει λίγες στιγμές. Μπορείτε με ασφάλεια να φύγετε από αυτή τη σελίδα.', + 'scheduled_overlay_title' => 'Αυτή η δημοσίευση είναι προγραμματισμένη', + 'scheduled_overlay_subtitle' => 'Προγραμματισμένη για :date. Αναιρέστε πρώτα τον προγραμματισμό της για να κάνετε αλλαγές.', + 'unschedule_cta' => 'Αναίρεση προγραμματισμού για επεξεργασία', + + 'tabs' => [ + 'preview' => 'Προεπισκόπηση', + 'channels' => 'Κανάλια', + 'comments' => 'Σχόλια', + 'comments_empty' => 'Δεν υπάρχουν σχόλια ακόμη.', + ], + + 'media_picker' => [ + 'title' => 'Επιλογή από τη συλλογή', + 'search' => 'Αναζήτηση πολυμέσων...', + 'empty' => 'Δεν υπάρχουν πολυμέσα στη συλλογή σας ακόμη', + 'cancel' => 'Ακύρωση', + 'add' => 'Προσθήκη', + 'add_count' => 'Προσθήκη :count', + ], + + 'emoji_picker' => [ + 'search' => 'Αναζήτηση emoji', + 'empty' => 'Δεν βρέθηκαν emoji', + 'recent' => 'Συχνά χρησιμοποιούμενα', + 'smileys' => 'Φατσούλες και συναισθήματα', + 'people' => 'Άτομα και σώμα', + 'nature' => 'Ζώα και φύση', + 'food' => 'Φαγητό και ποτό', + 'activities' => 'Δραστηριότητες', + 'travel' => 'Ταξίδια και τοποθεσίες', + 'objects' => 'Αντικείμενα', + 'symbols' => 'Σύμβολα', + 'flags' => 'Σημαίες', + ], + + 'status' => [ + 'pending' => 'Σε εκκρεμότητα', + 'scheduled' => 'Προγραμματισμένη', + 'published' => 'Δημοσιεύτηκε', + 'publishing' => 'Δημοσίευση...', + 'retrying' => 'Επανάληψη...', + 'failed' => 'Απέτυχε', + ], + + 'delete_modal' => [ + 'title' => 'Διαγραφή δημοσίευσης', + 'description' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη δημοσίευση; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.', + 'action' => 'Διαγραφή', + 'cancel' => 'Ακύρωση', + ], + + 'sync_enable' => [ + 'title' => 'Ενεργοποίηση συγχρονισμού;', + 'description' => 'Όλες οι πλατφόρμες θα μοιράζονται το ίδιο περιεχόμενο. Οποιεσδήποτε προσαρμοσμένες αλλαγές έγιναν σε μεμονωμένες πλατφόρμες θα αντικατασταθούν με το τρέχον περιεχόμενο.', + 'cancel' => 'Ακύρωση', + 'action' => 'Ενεργοποίηση συγχρονισμού', + ], + + 'sync_disable' => [ + 'title' => 'Απενεργοποίηση συγχρονισμού;', + 'description' => 'Κάθε πλατφόρμα θα διατηρήσει το τρέχον περιεχόμενό της, αλλά οι μελλοντικές αλλαγές θα εφαρμόζονται μόνο στην πλατφόρμα που επεξεργάζεστε.', + 'customize_note' => 'Θα μπορείτε να προσαρμόζετε το περιεχόμενο για κάθε πλατφόρμα ξεχωριστά.', + 'cancel' => 'Ακύρωση', + 'action' => 'Απενεργοποίηση συγχρονισμού', + ], + + 'platforms_dialog' => [ + 'title' => 'Επιλογή πλατφορμών', + 'description' => 'Επιλέξτε σε ποιες πλατφόρμες θα δημοσιευτεί αυτή η δημοσίευση.', + ], + + 'signatures_modal' => [ + 'search' => 'Αναζήτηση υπογραφών...', + 'no_results' => 'Δεν βρέθηκαν υπογραφές.', + ], + + 'validation' => [ + 'select_board' => 'Επιλέξτε έναν πίνακα', + 'images_not_supported' => 'Οι εικόνες δεν υποστηρίζονται', + 'videos_not_supported' => 'Τα βίντεο δεν υποστηρίζονται', + 'max_images' => 'Μέγ. :count εικόνες', + 'requires_media' => 'Απαιτεί πολυμέσα', + 'requires_content' => 'Απαιτείται περιεχόμενο κειμένου', + 'exceeded' => ':count υπέρβαση', + 'does_not_support_images' => 'Το :platform δεν υποστηρίζει εικόνες', + 'supports_up_to_images' => 'Το :platform υποστηρίζει έως :count εικόνες', + 'does_not_support_videos' => 'Το :platform δεν υποστηρίζει βίντεο', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'Δημοσίευση feed', + 'description' => 'Εμφανίζεται στο feed και το προφίλ σας', + ], + 'instagram_reel' => [ + 'label' => 'Reel', + 'description' => 'Σύντομο βίντεο έως 90 δευτερόλεπτα', + ], + 'instagram_story' => [ + 'label' => 'Story', + 'description' => 'Εξαφανίζεται μετά από 24 ώρες', + ], + 'linkedin_post' => [ + 'label' => 'Δημοσίευση', + 'description' => 'Τυπική δημοσίευση — μία εικόνα, πολλές εικόνες, βίντεο ή PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'Δημοσίευση', + 'description' => 'Τυπική δημοσίευση — μία εικόνα, πολλές εικόνες, βίντεο ή PDF', + ], + 'facebook_post' => [ + 'label' => 'Δημοσίευση', + 'description' => 'Τυπική δημοσίευση στη σελίδα σας', + ], + 'facebook_reel' => [ + 'label' => 'Reel', + 'description' => 'Σύντομο βίντεο έως 90 δευτερόλεπτα', + ], + 'facebook_story' => [ + 'label' => 'Story', + 'description' => 'Κατακόρυφο story βίντεο, έως 60 δευτερόλεπτα', + ], + 'tiktok_video' => [ + 'label' => 'Βίντεο', + 'description' => 'Περιεχόμενο βίντεο σύντομης μορφής', + ], + 'tiktok_photo' => [ + 'label' => 'Carousel φωτογραφιών', + 'description' => 'Έως 35 φωτογραφίες ως carousel με ολίσθηση', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => 'Κατακόρυφο βίντεο έως 60 δευτερόλεπτα', + ], + 'x_post' => [ + 'label' => 'Δημοσίευση', + 'description' => 'Tweet με κείμενο και πολυμέσα', + ], + 'threads_post' => [ + 'label' => 'Δημοσίευση', + 'description' => 'Δημοσίευση κειμένου με προαιρετικά πολυμέσα', + ], + 'pinterest_pin' => [ + 'label' => 'Pin', + 'description' => 'Τυπικό pin εικόνας', + ], + 'pinterest_video_pin' => [ + 'label' => 'Video Pin', + 'description' => 'Video pin (4δ - 15λ)', + ], + 'pinterest_carousel' => [ + 'label' => 'Carousel', + 'description' => 'Carousel πολλαπλών εικόνων (2-5 εικόνες)', + ], + 'bluesky_post' => [ + 'label' => 'Δημοσίευση', + 'description' => 'Δημοσίευση κειμένου με προαιρετικές εικόνες', + ], + 'mastodon_post' => [ + 'label' => 'Δημοσίευση', + 'description' => 'Δημοσίευση κειμένου με προαιρετικά πολυμέσα', + ], + 'telegram_post' => [ + 'label' => 'Δημοσίευση', + 'description' => 'Δημοσίευση κειμένου με προαιρετικά πολυμέσα', + ], + 'discord_message' => [ + 'label' => 'Μήνυμα', + 'description' => 'Μήνυμα σε κανάλι Discord με προαιρετικά πολυμέσα και embeds', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'Σελίδα LinkedIn', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Σελίδα Facebook', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'Η δημοσίευση προγραμματίστηκε με επιτυχία!', + 'deleted' => 'Η δημοσίευση διαγράφηκε με επιτυχία!', + 'duplicated' => 'Η δημοσίευση αντιγράφηκε ως πρόχειρο.', + 'cannot_edit_finalized' => 'Αυτή η δημοσίευση έχει ήδη επεξεργαστεί και δεν μπορεί να δημοσιευτεί ξανά. Αντιγράψτε την για να δοκιμάσετε ξανά.', + 'cannot_delete_published' => 'Οι δημοσιευμένες δημοσιεύσεις δεν μπορούν να διαγραφούν.', + 'connect_first' => 'Συνδέστε τουλάχιστον ένα κοινωνικό δίκτυο πριν δημιουργήσετε μια δημοσίευση.', + ], + + 'errors' => [ + 'account_disconnected' => 'Ο λογαριασμός κοινωνικού δικτύου έχει αποσυνδεθεί', + 'account_inactive' => 'Ο λογαριασμός κοινωνικού δικτύου έχει απενεργοποιηθεί', + 'account_token_expired' => 'Η συνεδρία του λογαριασμού κοινωνικού δικτύου έληξε — επανασυνδεθείτε', + ], + + 'delete' => [ + 'title' => 'Διαγραφή δημοσίευσης;', + 'description' => 'Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Η δημοσίευση και όλα τα πολυμέσα της θα αφαιρεθούν οριστικά.', + 'confirm' => 'Ναι, διαγραφή', + 'cancel' => 'Ακύρωση', + ], + + 'create' => [ + 'title' => 'Δημιουργία νέας δημοσίευσης', + 'description' => 'Επιλέξτε πώς θέλετε να ξεκινήσετε.', + 'scratch_title' => 'Ξεκινήστε από την αρχή', + 'scratch_description' => 'Ανοίξτε μια κενή δημοσίευση και γράψτε τα πάντα μόνοι σας.', + 'ai_title' => 'Δημιουργία με AI', + 'ai_description' => 'Περιγράψτε τι θέλετε και το AI δημιουργεί το περιεχόμενο για εσάς.', + 'ai_configure_description' => 'Επιλέξτε μια μορφή και περιγράψτε τη δημοσίευση που θέλετε να δημιουργήσετε.', + 'ai_pick_template_description' => 'Επιλέξτε ένα στυλ για τη δημοσίευσή σας που δημιουργείται από AI.', + 'template_title' => 'Χρήση προτύπου', + 'template_description' => 'Επιλέξτε από τα επιμελημένα πρότυπά μας και προσαρμόστε.', + 'coming_soon' => 'Έρχεται σύντομα', + + 'preview' => [ + 'image_title' => 'Τίτλος εικόνας', + 'image_body' => 'Σώμα εικόνας', + ], + + 'steps' => [ + 'template_picker_title' => 'Επιλέξτε ένα στυλ', + 'format_title' => 'Επιλέξτε μια μορφή', + 'format_description' => 'Επιλέξτε τον τύπο δημοσίευσης που θέλετε να δημιουργήσετε.', + 'account_title' => 'Επιλέξτε έναν λογαριασμό', + 'account_description' => 'Επιλέξτε τον λογαριασμό κοινωνικού δικτύου για δημοσίευση.', + 'media_title' => 'Επιλογές πολυμέσων', + 'media_carousel' => 'Πόσα slides;', + 'media_optional' => 'Να συμπεριληφθούν εικόνες;', + 'media_optional_label' => 'Πόσες εικόνες;', + 'media_none' => 'Καμία', + 'media_count_label' => 'Αριθμός εικόνων', + 'prompt_title' => 'Περιγράψτε τη δημοσίευσή σας', + 'prompt_label' => 'Ποιο είναι το θέμα αυτής της δημοσίευσης;', + 'prompt_placeholder' => 'π.χ. Ανακοινώστε τη νέα μας λειτουργία carousel για το Instagram', + 'preview_error' => 'Κάτι πήγε στραβά. Παρακαλούμε δοκιμάστε ξανά.', + 'loading_page_title' => 'Δημιουργία της δημοσίευσής σας', + 'loading_eta' => 'Εκτιμώμενος χρόνος: περίπου :minutes.', + 'loading_eta_minute_one' => '1 λεπτό', + 'loading_eta_minute_other' => ':count λεπτά', + 'loading_leave_title' => 'Μπορείτε να συνεχίσετε να εργάζεστε.', + 'loading_leave_body' => 'Θα σας ειδοποιήσουμε όταν η δημοσίευση είναι έτοιμη.', + 'loading_leave_cta' => 'Μετάβαση στο ημερολόγιο', + 'loading_create_another_cta' => 'Δημιουργία άλλης δημοσίευσης', + 'loading_tip_credits' => 'Κάθε εικόνα AI χρησιμοποιεί περίπου 15 credits.', + 'loading_tip_edit' => 'Θα μπορείτε να επεξεργαστείτε τα πάντα μόλις η δημοσίευση είναι έτοιμη.', + 'loading_tip_draft' => 'Οι δημιουργημένες δημοσιεύσεις καταλήγουν στα πρόχειρά σας.', + 'loading_tip_brand' => 'Προσαρμόστε τις ρυθμίσεις της μάρκας σας για να επηρεάσετε μελλοντικές δημοσιεύσεις.', + 'loading_tip_carousel' => 'Τα carousels παρέχουν ένα slide ανά μεταφορτωμένη εικόνα.', + 'loading_tip_quality' => 'Η ποιότητα εικόνας ρυθμίζεται για ισορροπία ταχύτητας και κόστους.', + 'create' => 'Δημιουργία δημοσίευσης', + 'back' => 'Πίσω', + 'next' => 'Συνέχεια', + 'cancel' => 'Ακύρωση', + 'discard' => 'Απόρριψη', + 'retry' => 'Δοκιμάστε ξανά', + 'no_platforms' => 'Δεν υπάρχουν συνδεδεμένοι λογαριασμοί', + 'connect_first' => 'Συνδέστε τουλάχιστον έναν λογαριασμό κοινωνικού δικτύου για να χρησιμοποιήσετε τη δημιουργία με AI.', + 'no_account_for_template' => 'Συνδέστε έναν συμβατό λογαριασμό για να χρησιμοποιήσετε αυτό το πρότυπο.', + + 'format' => [ + 'instagram_feed' => 'Δημοσίευση feed Instagram', + 'instagram_carousel' => 'Carousel Instagram', + 'linkedin_post' => 'Δημοσίευση LinkedIn', + 'linkedin_page_post' => 'Δημοσίευση σελίδας LinkedIn', + 'x_post' => 'Δημοσίευση X', + 'bluesky_post' => 'Δημοσίευση Bluesky', + 'threads_post' => 'Δημοσίευση Threads', + 'mastodon_post' => 'Δημοσίευση Mastodon', + 'telegram_post' => 'Δημοσίευση Telegram', + 'discord_message' => 'Μήνυμα Discord', + 'facebook_post' => 'Δημοσίευση Facebook', + 'pinterest_pin' => 'Pin Pinterest', + 'instagram_story' => 'Story Instagram', + 'facebook_story' => 'Story Facebook', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'Επιλέξτε ένα πρότυπο', + 'browser_description' => 'Ξεκινήστε από ένα επιμελημένο πρότυπο και προσαρμόστε το.', + 'search_placeholder' => 'Αναζήτηση προτύπων…', + 'no_search_results' => 'Κανένα πρότυπο δεν ταιριάζει με την αναζήτησή σας', + 'try_different_search' => 'Δοκιμάστε διαφορετική λέξη-κλειδί ή καθαρίστε την αναζήτηση.', + 'slides_count' => '{count} slide|{count} slides', + 'all_platforms' => 'Όλες οι πλατφόρμες', + 'platform_search_placeholder' => 'Αναζήτηση πλατφόρμας…', + 'no_platform_match' => 'Καμία πλατφόρμα δεν ταιριάζει.', + 'use_this' => 'Χρήση αυτού του προτύπου', + 'no_templates' => 'Δεν υπάρχουν διαθέσιμα πρότυπα.', + 'applying' => 'Εφαρμογή προτύπου…', + 'category' => [ + 'product_launch' => 'Κυκλοφορία προϊόντος', + 'promotion' => 'Προώθηση', + 'educational' => 'Εκπαιδευτικό', + 'behind_the_scenes' => 'Παρασκήνια', + 'testimonial' => 'Μαρτυρία', + 'industry_tip' => 'Συμβουλή του κλάδου', + 'event' => 'Εκδήλωση', + 'engagement' => 'Αλληλεπίδραση', + ], + ], +]; diff --git a/lang/el/settings.php b/lang/el/settings.php new file mode 100644 index 00000000..0696855e --- /dev/null +++ b/lang/el/settings.php @@ -0,0 +1,356 @@ + 'Ρυθμίσεις', + 'description' => 'Διαχειριστείτε το προφίλ και τις ρυθμίσεις του λογαριασμού σας', + + 'hub' => [ + 'title' => 'Ρυθμίσεις', + 'description' => 'Επιλέξτε τι θέλετε να διαχειριστείτε.', + 'profile' => [ + 'title' => 'Προφίλ', + 'description' => 'Ενημερώστε τα προσωπικά σας στοιχεία, τον κωδικό πρόσβασης και τις προτιμήσεις ειδοποιήσεων.', + ], + 'workspace' => [ + 'title' => 'Workspace', + 'description' => 'Ρυθμίστε το workspace, τη μάρκα, τα μέλη και τα κλειδιά API σας.', + ], + 'account' => [ + 'title' => 'Λογαριασμός', + 'description' => 'Διαχειριστείτε τα στοιχεία του λογαριασμού σας, τη χρήση και τη χρέωση.', + ], + ], + + 'nav' => [ + 'profile' => 'Προφίλ', + 'authentication' => 'Ταυτοποίηση', + 'workspace' => 'Workspace', + 'members' => 'Μέλη', + 'notifications' => 'Ειδοποιήσεις', + 'billing' => 'Χρέωση', + ], + + 'notifications' => [ + 'title' => 'Προτιμήσεις ειδοποιήσεων', + 'heading' => 'Ειδοποιήσεις email', + 'description' => 'Επιλέξτε ποιες ειδοποιήσεις email θέλετε να λαμβάνετε', + 'post_published' => 'Δημοσίευση δημοσιεύτηκε', + 'post_published_description' => 'Λάβετε email όταν η δημοσίευσή σας δημοσιευτεί με επιτυχία', + 'post_failed' => 'Αποτυχία δημοσίευσης', + 'post_failed_description' => 'Λάβετε email όταν η δημοσίευσή σας αποτύχει να δημοσιευτεί', + 'account_disconnected' => 'Λογαριασμός αποσυνδέθηκε', + 'account_disconnected_description' => 'Λάβετε email όταν ένας λογαριασμός κοινωνικού δικτύου αποσυνδεθεί', + 'save' => 'Αποθήκευση προτιμήσεων', + ], + + 'profile' => [ + 'title' => 'Ρυθμίσεις προφίλ', + 'photo_heading' => 'Φωτογραφία προφίλ', + 'photo_description' => 'Μεταφορτώστε μια φωτογραφία προφίλ', + 'heading' => 'Στοιχεία προφίλ', + 'description' => 'Ενημερώστε το όνομα και τη διεύθυνση email σας', + 'avatar' => 'Άβαταρ', + 'name' => 'Όνομα', + 'name_placeholder' => 'Ονοματεπώνυμο', + 'email' => 'Διεύθυνση email', + 'email_placeholder' => 'Διεύθυνση email', + 'email_unverified' => 'Η διεύθυνση email σας δεν έχει επαληθευτεί.', + 'resend_verification' => 'Κάντε κλικ εδώ για επαναποστολή του email επαλήθευσης.', + 'verification_sent' => 'Ένας νέος σύνδεσμος επαλήθευσης στάλθηκε στη διεύθυνση email σας.', + 'save' => 'Αποθήκευση', + ], + + 'authentication' => [ + 'title' => 'Ταυτοποίηση', + 'page_title' => 'Ρυθμίσεις ταυτοποίησης', + 'sessions' => [ + 'title' => 'Ενεργές συνεδρίες', + 'description' => 'Αν παρατηρήσετε κάτι ύποπτο, αποσυνδεθείτε από τις άλλες συσκευές.', + 'unknown_browser' => 'Άγνωστο πρόγραμμα περιήγησης', + 'unknown_ip' => 'Άγνωστη IP', + 'on' => 'στις', + 'active_now' => 'Ενεργό τώρα', + 'log_out_others' => 'Αποσύνδεση από άλλες συσκευές', + 'modal_title' => 'Αποσύνδεση από άλλες συσκευές', + 'modal_description_password' => 'Εισάγετε τον τρέχοντα κωδικό πρόσβασής σας για να επιβεβαιώσετε ότι θέλετε να αποσυνδεθείτε από άλλες συνεδρίες περιήγησης.', + 'modal_description_email' => 'Πληκτρολογήστε τη διεύθυνση email σας για να επιβεβαιώσετε ότι θέλετε να αποσυνδεθείτε από άλλες συνεδρίες περιήγησης.', + 'password_placeholder' => 'Τρέχων κωδικός πρόσβασης', + 'email_placeholder' => 'Το email του λογαριασμού σας', + 'cancel' => 'Ακύρωση', + 'submit' => 'Αποσύνδεση από άλλες συσκευές', + 'email_mismatch' => 'Η διεύθυνση email δεν ταιριάζει με τον λογαριασμό σας.', + 'flash_logged_out' => 'Αποσυνδεθήκατε από τις άλλες συσκευές.', + ], + 'password' => [ + 'update_title' => 'Ενημέρωση κωδικού πρόσβασης', + 'set_title' => 'Ορισμός κωδικού πρόσβασης', + 'update_description' => 'Βεβαιωθείτε ότι ο λογαριασμός σας χρησιμοποιεί έναν μακρύ, τυχαίο κωδικό πρόσβασης για να παραμείνει ασφαλής.', + 'set_description' => 'Προσθέστε έναν κωδικό πρόσβασης ώστε να μπορείτε να συνδέεστε χωρίς συνδεδεμένο πάροχο.', + 'current_password' => 'Τρέχων κωδικός πρόσβασης', + 'new_password' => 'Νέος κωδικός πρόσβασης', + 'confirm_password' => 'Επιβεβαίωση κωδικού', + 'save' => 'Αποθήκευση κωδικού', + 'set' => 'Ορισμός κωδικού', + ], + 'providers' => [ + 'title' => 'Συνδεδεμένοι λογαριασμοί', + 'description' => 'Συνδεθείτε ταχύτερα με αυτούς τους συνδεδεμένους παρόχους.', + 'connected' => 'Συνδεδεμένος', + 'not_connected' => 'Μη συνδεδεμένος', + 'connect' => 'Σύνδεση', + 'disconnect' => 'Αποσύνδεση', + 'flash_disconnected' => 'Ο πάροχος :provider αποσυνδέθηκε με επιτυχία.', + 'flash_connected' => 'Ο πάροχος :provider συνδέθηκε με επιτυχία.', + 'flash_already_linked' => 'Αυτός ο λογαριασμός :provider είναι ήδη συνδεδεμένος με άλλον χρήστη.', + 'flash_cannot_disconnect' => 'Δεν μπορείτε να αποσυνδέσετε τη μοναδική σας μέθοδο σύνδεσης. Ορίστε πρώτα έναν κωδικό πρόσβασης ή συνδέστε άλλον πάροχο.', + ], + ], + + 'delete_account' => [ + 'heading' => 'Διαγραφή λογαριασμού', + 'description' => 'Διαγράψτε τον λογαριασμό σας και όλους τους πόρους του', + 'warning' => 'Προειδοποίηση', + 'warning_message' => 'Παρακαλούμε προχωρήστε με προσοχή, αυτό δεν μπορεί να αναιρεθεί.', + 'button' => 'Διαγραφή λογαριασμού', + 'modal_title' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε τον λογαριασμό σας;', + 'modal_description_password' => 'Μόλις διαγραφεί ο λογαριασμός σας, όλοι οι πόροι και τα δεδομένα του θα διαγραφούν επίσης οριστικά. Παρακαλούμε εισάγετε τον κωδικό πρόσβασής σας για επιβεβαίωση.', + 'modal_description_email' => 'Μόλις διαγραφεί ο λογαριασμός σας, όλοι οι πόροι και τα δεδομένα του θα διαγραφούν επίσης οριστικά. Παρακαλούμε πληκτρολογήστε τη διεύθυνση email σας :email για επιβεβαίωση.', + 'password' => 'Κωδικός πρόσβασης', + 'password_placeholder' => 'Κωδικός πρόσβασης', + 'email_placeholder' => 'Το email του λογαριασμού σας', + 'email_mismatch' => 'Η διεύθυνση email δεν ταιριάζει με τον λογαριασμό σας.', + 'cancel' => 'Ακύρωση', + 'confirm' => 'Διαγραφή λογαριασμού', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'Workspace', + 'brand' => 'Μάρκα', + 'users' => 'Μέλη', + 'api_keys' => 'Κλειδιά API', + ], + 'title' => 'Ρυθμίσεις workspace', + 'logo_heading' => 'Λογότυπο workspace', + 'logo_description' => 'Μεταφορτώστε ένα λογότυπο για το workspace σας', + 'heading' => 'Όνομα workspace', + 'description' => 'Ενημερώστε το όνομα του workspace σας', + 'members_heading' => 'Μέλη', + 'members_description' => 'Διαχειριστείτε τα μέλη και τις προσκλήσεις του workspace', + 'name' => 'Όνομα', + 'name_placeholder' => 'Το workspace μου', + 'save' => 'Αποθήκευση', + ], + + 'brand' => [ + 'title' => 'Μάρκα', + 'description' => 'Ρυθμίστε την ταυτότητα της μάρκας σας για περιεχόμενο που δημιουργεί το AI.', + 'name' => 'Όνομα workspace', + 'name_placeholder' => 'Η μάρκα μου', + 'website' => 'Ιστότοπος', + 'website_placeholder' => 'https://yourbrand.com', + 'brand_description' => 'Περιγραφή', + 'brand_description_placeholder' => 'Πείτε μας για τη μάρκα σας, τι κάνετε και ποιο είναι το κοινό σας...', + 'voice' => 'Φωνή μάρκας', + 'voice_description' => 'Επιλέξτε τα χαρακτηριστικά που ορίζουν πώς ακούγεται το περιεχόμενό σας.', + 'voice_group' => [ + 'pov' => 'Οπτική γωνία', + 'formality' => 'Επισημότητα', + 'energy' => 'Ενέργεια', + 'humor' => 'Χιούμορ', + 'attitude' => 'Στάση', + 'warmth' => 'Θερμότητα', + 'confidence' => 'Αυτοπεποίθηση', + 'style' => 'Ύφος', + ], + 'voice_trait' => [ + 'first_person' => 'Πρώτο πρόσωπο', + 'second_person' => 'Δεύτερο πρόσωπο (εσείς)', + 'third_person' => 'Τρίτο πρόσωπο', + 'formal' => 'Επίσημο', + 'balanced' => 'Ισορροπημένο', + 'casual' => 'Ανεπίσημο', + 'calm' => 'Ήρεμο', + 'moderate' => 'Μέτριο', + 'enthusiastic' => 'Ενθουσιώδες', + 'vibrant' => 'Ζωντανό', + 'serious' => 'Σοβαρό', + 'dry' => 'Ξηρό / υπαινικτικό', + 'witty' => 'Πνευματώδες', + 'playful' => 'Παιχνιδιάρικο', + 'respectful' => 'Με σεβασμό', + 'even_handed' => 'Αμερόληπτο', + 'bold' => 'Τολμηρό', + 'provocative' => 'Προκλητικό', + 'neutral' => 'Ουδέτερο', + 'friendly' => 'Φιλικό', + 'empathetic' => 'Με ενσυναίσθηση', + 'humble' => 'Ταπεινό', + 'confident' => 'Με αυτοπεποίθηση', + 'assertive' => 'Δυναμικό', + 'direct' => 'Άμεσο', + 'concise' => 'Περιεκτικό', + 'transparent' => 'Διαφανές', + 'no_hype' => 'Χωρίς υπερβολές', + 'practical' => 'Πρακτικό', + 'data_driven' => 'Βασισμένο σε δεδομένα', + 'storytelling' => 'Αφηγηματικό', + 'inspirational' => 'Εμπνευστικό', + 'educational' => 'Εκπαιδευτικό', + 'technical' => 'Τεχνικό', + 'minimalist' => 'Λίγα emoji', + ], + 'brand_color' => 'Χρώμα μάρκας', + 'background_color' => 'Χρώμα φόντου', + 'text_color' => 'Χρώμα κειμένου', + 'font' => 'Γραμματοσειρά', + 'image_style' => 'Ύφος εικόνας', + 'image_style_description' => 'Οπτικό ύφος που εφαρμόζεται κατά τη δημιουργία εικόνων slide και εξωφύλλου για δημοσιεύσεις AI.', + 'image_style_cinematic' => 'Κινηματογραφικό', + 'image_style_illustration' => 'Εικονογράφηση', + 'image_style_isometric_3d' => 'Ισομετρικό', + 'image_style_cartoon' => 'Καρτούν', + 'image_style_typographic' => 'Τυπογραφικό', + 'image_style_infographic' => 'Infographic', + 'image_style_minimalist' => 'Μινιμαλιστικό', + 'image_style_mockup' => 'Mockup', + 'content_language' => 'Γλώσσα περιεχομένου', + 'content_language_description' => 'Γλώσσα που χρησιμοποιείται για λεζάντες, hashtags και οποιοδήποτε κείμενο μέσα σε εικόνες ή βίντεο που δημιουργεί το AI.', + ], + + 'members' => [ + 'title' => 'Μέλη', + 'heading' => 'Μέλη ομάδας', + 'description' => 'Διαχειριστείτε τα μέλη και τις προσκλήσεις για αυτό το workspace', + + 'cancel' => 'Ακύρωση', + 'remove' => 'Αφαίρεση', + 'make_role' => 'Ορισμός ως :role', + + 'invite' => [ + 'title' => 'Πρόσκληση μέλους', + 'description' => 'Στείλτε μια πρόσκληση email για να προσθέσετε συνεργάτες', + 'email' => 'Email', + 'email_placeholder' => 'collaborator@email.com', + 'role' => 'Ρόλος', + 'role_placeholder' => 'Επιλέξτε έναν ρόλο', + 'submit' => 'Αποστολή πρόσκλησης', + ], + + 'pending' => [ + 'title' => 'Εκκρεμείς προσκλήσεις', + 'description' => 'Προσκλήσεις που αναμένουν αποδοχή', + 'empty' => 'Δεν υπάρχουν εκκρεμείς προσκλήσεις', + ], + + 'list' => [ + 'title' => 'Μέλη', + 'description' => 'Άτομα με πρόσβαση σε αυτό το workspace', + 'empty' => 'Δεν υπάρχουν μέλη εκτός από τον κάτοχο', + ], + + 'remove_modal' => [ + 'title' => 'Αφαίρεση μέλους', + 'description' => 'Είστε βέβαιοι ότι θέλετε να αφαιρέσετε αυτό το μέλος από το workspace; Θα χάσει την πρόσβαση σε όλους τους πόρους του workspace.', + 'action' => 'Αφαίρεση μέλους', + ], + + 'cancel_invite_modal' => [ + 'title' => 'Ακύρωση πρόσκλησης', + 'description' => 'Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτή την πρόσκληση;', + 'action' => 'Ακύρωση πρόσκλησης', + ], + + 'roles' => [ + 'owner' => 'Κάτοχος', + 'admin' => 'Διαχειριστής', + 'member' => 'Μέλος', + 'viewer' => 'Θεατής', + ], + + 'flash' => [ + 'invite_sent' => 'Η πρόσκληση στάλθηκε με επιτυχία!', + 'invite_deleted' => 'Η πρόσκληση διαγράφηκε.', + 'member_removed' => 'Το μέλος αφαιρέθηκε με επιτυχία.', + 'role_updated' => 'Ο ρόλος του μέλους ενημερώθηκε.', + 'wrong_email' => 'Αυτή η πρόσκληση αφορά διαφορετική διεύθυνση email.', + 'already_member' => 'Είστε ήδη μέλος αυτού του workspace.', + 'invite_accepted' => 'Καλώς ήρθατε! Είστε πλέον μέλος του workspace.', + 'invite_declined' => 'Η πρόσκληση απορρίφθηκε.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'Λογαριασμός', + 'usage' => 'Χρήση', + 'billing' => 'Χρέωση', + ], + 'title' => 'Ρυθμίσεις λογαριασμού', + 'description' => 'Διαχειριστείτε το όνομα του λογαριασμού σας και το email χρέωσης', + 'name' => 'Όνομα λογαριασμού', + 'name_placeholder' => 'Η εταιρεία μου', + 'billing_email' => 'Email χρέωσης', + 'billing_email_placeholder' => 'billing@company.com', + 'billing_email_hint' => 'Αυτό το email θα χρησιμοποιηθεί για τιμολόγια και επικοινωνίες χρέωσης από το Stripe.', + 'submit' => 'Αποθήκευση', + ], + + 'flash' => [ + 'account_updated' => 'Ο λογαριασμός ενημερώθηκε με επιτυχία!', + 'profile_updated' => 'Το προφίλ ενημερώθηκε με επιτυχία!', + 'password_updated' => 'Ο κωδικός πρόσβασης ενημερώθηκε με επιτυχία!', + 'workspace_updated' => 'Οι ρυθμίσεις ενημερώθηκαν με επιτυχία!', + 'photo_updated' => 'Η φωτογραφία ενημερώθηκε με επιτυχία!', + 'photo_deleted' => 'Η φωτογραφία αφαιρέθηκε με επιτυχία!', + 'logo_updated' => 'Το λογότυπο μεταφορτώθηκε με επιτυχία!', + 'logo_deleted' => 'Το λογότυπο αφαιρέθηκε με επιτυχία!', + 'notifications_updated' => 'Οι προτιμήσεις ειδοποιήσεων ενημερώθηκαν!', + ], + + 'api_keys' => [ + 'title' => 'Κλειδιά API', + 'page_title' => 'Κλειδιά API', + 'heading' => 'Κλειδιά API', + 'description' => 'Διαχειριστείτε κλειδιά API για προγραμματιστική πρόσβαση στο workspace σας.', + 'create' => 'Δημιουργία κλειδιού API', + 'copy' => 'Αντιγραφή', + 'new_token_message' => 'Το νέο σας κλειδί API δημιουργήθηκε. Αντιγράψτε το τώρα — δεν θα μπορέσετε να το δείτε ξανά.', + 'table' => [ + 'name' => 'Όνομα', + 'key' => 'Κλειδί', + 'status' => 'Κατάσταση', + 'expires' => 'Λήγει', + 'last_used' => 'Τελευταία χρήση', + 'never' => 'Ποτέ', + ], + 'actions' => [ + 'copy_id' => 'Αντιγραφή ID κλειδιού API', + 'copy_id_success' => 'Το ID κλειδιού API αντιγράφηκε στο πρόχειρο', + 'delete' => 'Διαγραφή', + ], + 'empty' => [ + 'title' => 'Δεν υπάρχουν κλειδιά API ακόμη', + 'description' => 'Δημιουργήστε ένα κλειδί API για προγραμματιστική πρόσβαση στο workspace σας.', + ], + 'delete_modal' => [ + 'title' => 'Διαγραφή κλειδιού API', + 'description' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το κλειδί API; Οποιεσδήποτε εφαρμογές χρησιμοποιούν αυτό το κλειδί θα χάσουν αμέσως την πρόσβαση.', + 'action' => 'Διαγραφή κλειδιού API', + ], + 'create_dialog' => [ + 'title' => 'Δημιουργία κλειδιού API', + 'description' => 'Δημιουργήστε ένα νέο κλειδί API για προγραμματιστική πρόσβαση στο workspace σας.', + 'name' => 'Όνομα', + 'name_placeholder' => 'π.χ. Production API Key', + 'expires' => 'Ημερομηνία λήξης (προαιρετικό)', + 'expires_placeholder' => 'Χωρίς λήξη', + 'submit' => 'Δημιουργία', + 'cancel' => 'Ακύρωση', + ], + 'flash' => [ + 'created' => 'Το κλειδί API δημιουργήθηκε με επιτυχία!', + 'deleted' => 'Το κλειδί API διαγράφηκε με επιτυχία!', + ], + ], +]; diff --git a/lang/el/sidebar.php b/lang/el/sidebar.php new file mode 100644 index 00000000..a19adb71 --- /dev/null +++ b/lang/el/sidebar.php @@ -0,0 +1,61 @@ + 'Workspaces', + 'select_workspace' => 'Επιλογή workspace', + 'create_workspace' => 'Δημιουργία workspace', + 'create_post' => 'Δημιουργία δημοσίευσης', + 'profile' => 'Προφίλ', + 'log_out' => 'Αποσύνδεση', + + 'workspace' => 'Workspace: :name', + 'workspace_select' => 'Workspace: Επιλογή', + + 'theme' => 'Θέμα: :name', + 'theme_light' => 'Φωτεινό', + 'theme_dark' => 'Σκοτεινό', + 'theme_system' => 'Συστήματος', + + 'language' => 'Γλώσσα: :name', + 'language_select' => 'Γλώσσα: Επιλογή', + + 'groups' => [ + 'posts' => 'Δημοσιεύσεις', + 'workspace' => 'Workspace', + 'others' => 'Άλλα', + ], + + 'analytics' => 'Στατιστικά', + 'automations' => 'Αυτοματισμοί', + 'settings' => 'Ρυθμίσεις', + + 'posts' => [ + 'calendar' => 'Ημερολόγιο', + 'all' => 'Όλες', + 'scheduled' => 'Προγραμματισμένες', + 'posted' => 'Δημοσιευμένες', + 'drafts' => 'Πρόχειρα', + ], + + 'workspace' => [ + 'connections' => 'Συνδέσεις', + 'signatures' => 'Υπογραφές', + 'labels' => 'Ετικέτες', + 'assets' => 'Στοιχεία', + 'api_keys' => 'Κλειδιά API', + ], + + 'notifications' => 'Ειδοποιήσεις', + 'mark_all_read' => 'Επισήμανση όλων ως αναγνωσμένων', + 'mark_as_read' => 'Επισήμανση ως αναγνωσμένου', + 'archive_all' => 'Αρχειοθέτηση όλων', + 'no_notifications' => 'Δεν υπάρχουν ειδοποιήσεις', + + 'support' => [ + 'docs' => 'Τεκμηρίωση', + 'referral' => 'Κερδίστε 30% από συστάσεις', + 'stay_updated' => 'Μείνετε ενημερωμένοι', + ], +]; diff --git a/lang/el/signatures.php b/lang/el/signatures.php new file mode 100644 index 00000000..93a8bf25 --- /dev/null +++ b/lang/el/signatures.php @@ -0,0 +1,59 @@ + 'Υπογραφές', + 'description' => 'Δημιουργήστε επαναχρησιμοποιήσιμες υπογραφές για να τις προσθέτετε γρήγορα στις δημοσιεύσεις σας', + 'search' => 'Αναζήτηση υπογραφών...', + 'new' => 'Νέα υπογραφή', + 'empty_title' => 'Δεν υπάρχουν υπογραφές ακόμη', + 'empty_description' => 'Δημιουργήστε υπογραφές για να προσθέτετε γρήγορα hashtags, συνδέσμους ή οποιοδήποτε επαναχρησιμοποιήσιμο κείμενο στις δημοσιεύσεις σας', + 'no_search_results' => 'Καμία υπογραφή δεν ταιριάζει με την αναζήτησή σας', + 'try_different_search' => 'Δοκιμάστε διαφορετική λέξη-κλειδί ή καθαρίστε την αναζήτηση.', + 'table' => [ + 'name' => 'Όνομα', + 'content' => 'Περιεχόμενο', + 'created_at' => 'Δημιουργήθηκε', + ], + + 'actions' => [ + 'edit' => 'Επεξεργασία υπογραφής', + 'delete' => 'Διαγραφή υπογραφής', + ], + + 'create' => [ + 'title' => 'Δημιουργία υπογραφής', + 'description' => 'Δώστε ένα όνομα στην υπογραφή σας και το περιεχόμενο που θα προστίθεται (hashtags, συνδέσμους, προσαρμοσμένο κείμενο — οτιδήποτε επαναχρησιμοποιείτε).', + 'name' => 'Όνομα', + 'name_placeholder' => 'π.χ. Marketing, Ταξίδια, Κλείσιμο μάρκας', + 'content' => 'Περιεχόμενο', + 'content_placeholder' => "#marketing #socialmedia\nΜάθετε περισσότερα: https://yourbrand.com", + 'content_hint' => 'Hashtags, σύνδεσμοι, προσαρμοσμένες εισαγωγές, κλεισίματα — οτιδήποτε προσθέτετε στις δημοσιεύσεις.', + 'submit' => 'Δημιουργία υπογραφής', + 'submitting' => 'Δημιουργία...', + ], + + 'edit' => [ + 'title' => 'Επεξεργασία υπογραφής', + 'description' => 'Ενημερώστε το όνομα και το περιεχόμενο αυτής της υπογραφής.', + 'name' => 'Όνομα', + 'name_placeholder' => 'π.χ. Marketing, Ταξίδια, Κλείσιμο μάρκας', + 'content' => 'Περιεχόμενο', + 'content_placeholder' => "#marketing #socialmedia\nΜάθετε περισσότερα: https://yourbrand.com", + 'content_hint' => 'Hashtags, σύνδεσμοι, προσαρμοσμένες εισαγωγές, κλεισίματα — οτιδήποτε προσθέτετε στις δημοσιεύσεις.', + 'submit' => 'Αποθήκευση αλλαγών', + 'submitting' => 'Αποθήκευση...', + ], + + 'delete' => [ + 'title' => 'Διαγραφή υπογραφής', + 'description' => 'Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή την υπογραφή; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.', + 'confirm' => 'Διαγραφή', + 'cancel' => 'Ακύρωση', + ], + + 'flash' => [ + 'created' => 'Η υπογραφή δημιουργήθηκε.', + 'updated' => 'Η υπογραφή ενημερώθηκε.', + 'deleted' => 'Η υπογραφή διαγράφηκε.', + ], +]; diff --git a/lang/el/usage.php b/lang/el/usage.php new file mode 100644 index 00000000..4b694645 --- /dev/null +++ b/lang/el/usage.php @@ -0,0 +1,15 @@ + 'Χρήση', + + 'section_account' => 'Λογαριασμός', + 'section_account_description' => 'Όρια και ποσοστώσεις για το πρόγραμμά σας.', + 'section_ai' => 'Credits AI', + 'section_ai_description' => 'Τα credits χρεώνονται καθώς χρησιμοποιείτε τις λειτουργίες AI. Μηδενίζονται την πρώτη κάθε μήνα.', + + 'workspaces' => 'Workspaces', + 'social_accounts' => 'Λογαριασμοί κοινωνικών δικτύων', + 'members' => 'Μέλη', + 'credits' => 'Credits', +]; diff --git a/lang/el/validation.php b/lang/el/validation.php new file mode 100644 index 00000000..a1936931 --- /dev/null +++ b/lang/el/validation.php @@ -0,0 +1,200 @@ + 'Το πεδίο :attribute πρέπει να γίνει αποδεκτό.', + 'accepted_if' => 'Το πεδίο :attribute πρέπει να γίνει αποδεκτό όταν το :other είναι :value.', + 'active_url' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη διεύθυνση URL.', + 'after' => 'Το πεδίο :attribute πρέπει να είναι ημερομηνία μετά τις :date.', + 'after_or_equal' => 'Το πεδίο :attribute πρέπει να είναι ημερομηνία μετά ή ίση με τις :date.', + 'alpha' => 'Το πεδίο :attribute πρέπει να περιέχει μόνο γράμματα.', + 'alpha_dash' => 'Το πεδίο :attribute πρέπει να περιέχει μόνο γράμματα, αριθμούς, παύλες και κάτω παύλες.', + 'alpha_num' => 'Το πεδίο :attribute πρέπει να περιέχει μόνο γράμματα και αριθμούς.', + 'any_of' => 'Το πεδίο :attribute δεν είναι έγκυρο.', + 'array' => 'Το πεδίο :attribute πρέπει να είναι πίνακας.', + 'ascii' => 'Το πεδίο :attribute πρέπει να περιέχει μόνο αλφαριθμητικούς χαρακτήρες και σύμβολα ενός byte.', + 'before' => 'Το πεδίο :attribute πρέπει να είναι ημερομηνία πριν τις :date.', + 'before_or_equal' => 'Το πεδίο :attribute πρέπει να είναι ημερομηνία πριν ή ίση με τις :date.', + 'between' => [ + 'array' => 'Το πεδίο :attribute πρέπει να έχει μεταξύ :min και :max στοιχεία.', + 'file' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ :min και :max kilobytes.', + 'numeric' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ :min και :max.', + 'string' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ :min και :max χαρακτήρων.', + ], + 'boolean' => 'Το πεδίο :attribute πρέπει να είναι αληθές ή ψευδές.', + 'can' => 'Το πεδίο :attribute περιέχει μη εξουσιοδοτημένη τιμή.', + 'confirmed' => 'Η επιβεβαίωση του πεδίου :attribute δεν ταιριάζει.', + 'contains' => 'Από το πεδίο :attribute λείπει μια απαιτούμενη τιμή.', + 'current_password' => 'Ο κωδικός πρόσβασης είναι εσφαλμένος.', + 'date' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη ημερομηνία.', + 'date_equals' => 'Το πεδίο :attribute πρέπει να είναι ημερομηνία ίση με τις :date.', + 'date_format' => 'Το πεδίο :attribute πρέπει να ταιριάζει με τη μορφή :format.', + 'decimal' => 'Το πεδίο :attribute πρέπει να έχει :decimal δεκαδικά ψηφία.', + 'declined' => 'Το πεδίο :attribute πρέπει να απορριφθεί.', + 'declined_if' => 'Το πεδίο :attribute πρέπει να απορριφθεί όταν το :other είναι :value.', + 'different' => 'Τα πεδία :attribute και :other πρέπει να είναι διαφορετικά.', + 'digits' => 'Το πεδίο :attribute πρέπει να έχει :digits ψηφία.', + 'digits_between' => 'Το πεδίο :attribute πρέπει να έχει μεταξύ :min και :max ψηφία.', + 'dimensions' => 'Το πεδίο :attribute έχει μη έγκυρες διαστάσεις εικόνας.', + 'distinct' => 'Το πεδίο :attribute έχει διπλότυπη τιμή.', + 'doesnt_contain' => 'Το πεδίο :attribute δεν πρέπει να περιέχει κανένα από τα ακόλουθα: :values.', + 'doesnt_end_with' => 'Το πεδίο :attribute δεν πρέπει να τελειώνει με ένα από τα ακόλουθα: :values.', + 'doesnt_start_with' => 'Το πεδίο :attribute δεν πρέπει να ξεκινά με ένα από τα ακόλουθα: :values.', + 'email' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη διεύθυνση email.', + 'encoding' => 'Το πεδίο :attribute πρέπει να είναι κωδικοποιημένο σε :encoding.', + 'ends_with' => 'Το πεδίο :attribute πρέπει να τελειώνει με ένα από τα ακόλουθα: :values.', + 'enum' => 'Η επιλεγμένη τιμή :attribute δεν είναι έγκυρη.', + 'exists' => 'Η επιλεγμένη τιμή :attribute δεν είναι έγκυρη.', + 'extensions' => 'Το πεδίο :attribute πρέπει να έχει μία από τις ακόλουθες επεκτάσεις: :values.', + 'file' => 'Το πεδίο :attribute πρέπει να είναι αρχείο.', + 'filled' => 'Το πεδίο :attribute πρέπει να έχει τιμή.', + 'gt' => [ + 'array' => 'Το πεδίο :attribute πρέπει να έχει περισσότερα από :value στοιχεία.', + 'file' => 'Το πεδίο :attribute πρέπει να είναι μεγαλύτερο από :value kilobytes.', + 'numeric' => 'Το πεδίο :attribute πρέπει να είναι μεγαλύτερο από :value.', + 'string' => 'Το πεδίο :attribute πρέπει να είναι μεγαλύτερο από :value χαρακτήρες.', + ], + 'gte' => [ + 'array' => 'Το πεδίο :attribute πρέπει να έχει :value στοιχεία ή περισσότερα.', + 'file' => 'Το πεδίο :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value kilobytes.', + 'numeric' => 'Το πεδίο :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value.', + 'string' => 'Το πεδίο :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value χαρακτήρες.', + ], + 'hex_color' => 'Το πεδίο :attribute πρέπει να είναι έγκυρο δεκαεξαδικό χρώμα.', + 'image' => 'Το πεδίο :attribute πρέπει να είναι εικόνα.', + 'in' => 'Η επιλεγμένη τιμή :attribute δεν είναι έγκυρη.', + 'in_array' => 'Το πεδίο :attribute πρέπει να υπάρχει στο :other.', + 'in_array_keys' => 'Το πεδίο :attribute πρέπει να περιέχει τουλάχιστον ένα από τα ακόλουθα κλειδιά: :values.', + 'integer' => 'Το πεδίο :attribute πρέπει να είναι ακέραιος.', + 'ip' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη διεύθυνση IP.', + 'ipv4' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη διεύθυνση IPv4.', + 'ipv6' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη διεύθυνση IPv6.', + 'json' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη συμβολοσειρά JSON.', + 'list' => 'Το πεδίο :attribute πρέπει να είναι λίστα.', + 'lowercase' => 'Το πεδίο :attribute πρέπει να είναι με πεζά γράμματα.', + 'lt' => [ + 'array' => 'Το πεδίο :attribute πρέπει να έχει λιγότερα από :value στοιχεία.', + 'file' => 'Το πεδίο :attribute πρέπει να είναι μικρότερο από :value kilobytes.', + 'numeric' => 'Το πεδίο :attribute πρέπει να είναι μικρότερο από :value.', + 'string' => 'Το πεδίο :attribute πρέπει να είναι μικρότερο από :value χαρακτήρες.', + ], + 'lte' => [ + 'array' => 'Το πεδίο :attribute δεν πρέπει να έχει περισσότερα από :value στοιχεία.', + 'file' => 'Το πεδίο :attribute πρέπει να είναι μικρότερο ή ίσο με :value kilobytes.', + 'numeric' => 'Το πεδίο :attribute πρέπει να είναι μικρότερο ή ίσο με :value.', + 'string' => 'Το πεδίο :attribute πρέπει να είναι μικρότερο ή ίσο με :value χαρακτήρες.', + ], + 'mac_address' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη διεύθυνση MAC.', + 'max' => [ + 'array' => 'Το πεδίο :attribute δεν πρέπει να έχει περισσότερα από :max στοιχεία.', + 'file' => 'Το πεδίο :attribute δεν πρέπει να είναι μεγαλύτερο από :max kilobytes.', + 'numeric' => 'Το πεδίο :attribute δεν πρέπει να είναι μεγαλύτερο από :max.', + 'string' => 'Το πεδίο :attribute δεν πρέπει να είναι μεγαλύτερο από :max χαρακτήρες.', + ], + 'max_digits' => 'Το πεδίο :attribute δεν πρέπει να έχει περισσότερα από :max ψηφία.', + 'mimes' => 'Το πεδίο :attribute πρέπει να είναι αρχείο τύπου: :values.', + 'mimetypes' => 'Το πεδίο :attribute πρέπει να είναι αρχείο τύπου: :values.', + 'min' => [ + 'array' => 'Το πεδίο :attribute πρέπει να έχει τουλάχιστον :min στοιχεία.', + 'file' => 'Το πεδίο :attribute πρέπει να είναι τουλάχιστον :min kilobytes.', + 'numeric' => 'Το πεδίο :attribute πρέπει να είναι τουλάχιστον :min.', + 'string' => 'Το πεδίο :attribute πρέπει να είναι τουλάχιστον :min χαρακτήρες.', + ], + 'min_digits' => 'Το πεδίο :attribute πρέπει να έχει τουλάχιστον :min ψηφία.', + 'missing' => 'Το πεδίο :attribute πρέπει να λείπει.', + 'missing_if' => 'Το πεδίο :attribute πρέπει να λείπει όταν το :other είναι :value.', + 'missing_unless' => 'Το πεδίο :attribute πρέπει να λείπει εκτός αν το :other είναι :value.', + 'missing_with' => 'Το πεδίο :attribute πρέπει να λείπει όταν υπάρχει το :values.', + 'missing_with_all' => 'Το πεδίο :attribute πρέπει να λείπει όταν υπάρχουν τα :values.', + 'multiple_of' => 'Το πεδίο :attribute πρέπει να είναι πολλαπλάσιο του :value.', + 'not_in' => 'Η επιλεγμένη τιμή :attribute δεν είναι έγκυρη.', + 'not_regex' => 'Η μορφή του πεδίου :attribute δεν είναι έγκυρη.', + 'numeric' => 'Το πεδίο :attribute πρέπει να είναι αριθμός.', + 'password' => [ + 'letters' => 'Το πεδίο :attribute πρέπει να περιέχει τουλάχιστον ένα γράμμα.', + 'mixed' => 'Το πεδίο :attribute πρέπει να περιέχει τουλάχιστον ένα κεφαλαίο και ένα πεζό γράμμα.', + 'numbers' => 'Το πεδίο :attribute πρέπει να περιέχει τουλάχιστον έναν αριθμό.', + 'symbols' => 'Το πεδίο :attribute πρέπει να περιέχει τουλάχιστον ένα σύμβολο.', + 'uncompromised' => 'Το δοθέν :attribute έχει εμφανιστεί σε διαρροή δεδομένων. Παρακαλούμε επιλέξτε διαφορετικό :attribute.', + ], + 'present' => 'Το πεδίο :attribute πρέπει να υπάρχει.', + 'present_if' => 'Το πεδίο :attribute πρέπει να υπάρχει όταν το :other είναι :value.', + 'present_unless' => 'Το πεδίο :attribute πρέπει να υπάρχει εκτός αν το :other είναι :value.', + 'present_with' => 'Το πεδίο :attribute πρέπει να υπάρχει όταν υπάρχει το :values.', + 'present_with_all' => 'Το πεδίο :attribute πρέπει να υπάρχει όταν υπάρχουν τα :values.', + 'prohibited' => 'Το πεδίο :attribute απαγορεύεται.', + 'prohibited_if' => 'Το πεδίο :attribute απαγορεύεται όταν το :other είναι :value.', + 'prohibited_if_accepted' => 'Το πεδίο :attribute απαγορεύεται όταν το :other γίνεται αποδεκτό.', + 'prohibited_if_declined' => 'Το πεδίο :attribute απαγορεύεται όταν το :other απορρίπτεται.', + 'prohibited_unless' => 'Το πεδίο :attribute απαγορεύεται εκτός αν το :other είναι στο :values.', + 'prohibits' => 'Το πεδίο :attribute απαγορεύει την ύπαρξη του :other.', + 'regex' => 'Η μορφή του πεδίου :attribute δεν είναι έγκυρη.', + 'required' => 'Το πεδίο :attribute είναι υποχρεωτικό.', + 'required_array_keys' => 'Το πεδίο :attribute πρέπει να περιέχει καταχωρίσεις για: :values.', + 'required_if' => 'Το πεδίο :attribute είναι υποχρεωτικό όταν το :other είναι :value.', + 'required_if_accepted' => 'Το πεδίο :attribute είναι υποχρεωτικό όταν το :other γίνεται αποδεκτό.', + 'required_if_declined' => 'Το πεδίο :attribute είναι υποχρεωτικό όταν το :other απορρίπτεται.', + 'required_unless' => 'Το πεδίο :attribute είναι υποχρεωτικό εκτός αν το :other είναι στο :values.', + 'required_with' => 'Το πεδίο :attribute είναι υποχρεωτικό όταν υπάρχει το :values.', + 'required_with_all' => 'Το πεδίο :attribute είναι υποχρεωτικό όταν υπάρχουν τα :values.', + 'required_without' => 'Το πεδίο :attribute είναι υποχρεωτικό όταν δεν υπάρχει το :values.', + 'required_without_all' => 'Το πεδίο :attribute είναι υποχρεωτικό όταν δεν υπάρχει κανένα από τα :values.', + 'same' => 'Το πεδίο :attribute πρέπει να ταιριάζει με το :other.', + 'size' => [ + 'array' => 'Το πεδίο :attribute πρέπει να περιέχει :size στοιχεία.', + 'file' => 'Το πεδίο :attribute πρέπει να είναι :size kilobytes.', + 'numeric' => 'Το πεδίο :attribute πρέπει να είναι :size.', + 'string' => 'Το πεδίο :attribute πρέπει να είναι :size χαρακτήρες.', + ], + 'starts_with' => 'Το πεδίο :attribute πρέπει να ξεκινά με ένα από τα ακόλουθα: :values.', + 'string' => 'Το πεδίο :attribute πρέπει να είναι συμβολοσειρά.', + 'timezone' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη ζώνη ώρας.', + 'unique' => 'Το :attribute χρησιμοποιείται ήδη.', + 'uploaded' => 'Η μεταφόρτωση του :attribute απέτυχε.', + 'uppercase' => 'Το πεδίο :attribute πρέπει να είναι με κεφαλαία γράμματα.', + 'url' => 'Το πεδίο :attribute πρέπει να είναι έγκυρη διεύθυνση URL.', + 'ulid' => 'Το πεδίο :attribute πρέπει να είναι έγκυρο ULID.', + 'uuid' => 'Το πεδίο :attribute πρέπει να είναι έγκυρο UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/el/workspaces.php b/lang/el/workspaces.php new file mode 100644 index 00000000..aec30cae --- /dev/null +++ b/lang/el/workspaces.php @@ -0,0 +1,50 @@ + 'Workspaces', + 'select_title' => 'Τα workspaces σας', + 'select_description' => 'Επιλέξτε ένα workspace για να συνεχίσετε', + 'current' => 'Τρέχον', + 'connections' => ':count συνδέσεις', + 'posts' => ':count δημοσιεύσεις', + + 'create' => [ + 'page_title' => 'Δημιουργήστε το workspace σας', + 'title' => 'Ρυθμίστε το workspace σας', + 'description' => 'Πείτε μας λίγα πράγματα για εσάς ή το έργο σας. Θα τα χρησιμοποιήσουμε για να προσαρμόσουμε τις δημοσιεύσεις που δημιουργεί το AI στο ύφος σας.', + 'website' => 'Ιστότοπος', + 'website_placeholder' => 'https://yourbrand.com', + 'autofill' => 'Αυτόματη συμπλήρωση από ιστότοπο', + 'autofill_missing_url' => 'Εισάγετε πρώτα μια διεύθυνση URL.', + 'autofill_success' => 'Οι πληροφορίες μάρκας φορτώθηκαν.', + 'autofill_error' => 'Δεν ήταν δυνατή η αυτόματη συμπλήρωση. Μπορείτε να συμπληρώσετε τα πεδία χειροκίνητα.', + 'autofill_errors' => [ + 'unreachable' => 'Δεν μπορέσαμε να προσπελάσουμε αυτόν τον ιστότοπο (:reason).', + 'http_status' => 'Ο ιστότοπος επέστρεψε μη αναμενόμενη κατάσταση (:status).', + 'invalid_scheme' => 'Υποστηρίζονται μόνο διευθύνσεις URL http και https.', + 'missing_host' => 'Από τη διεύθυνση URL λείπει ο host.', + 'unresolvable_host' => 'Δεν μπορέσαμε να επιλύσουμε τον host (:host).', + 'private_network' => 'Δεν επιτρέπονται διευθύνσεις URL που δείχνουν σε ιδιωτικά δίκτυα.', + ], + 'logo_captured' => 'Το λογότυπο ελήφθη από τον ιστότοπό σας.', + 'name' => 'Όνομα workspace', + 'name_placeholder' => 'π.χ. Acme Inc', + 'brand_description' => 'Περιγραφή μάρκας', + 'brand_description_placeholder' => 'Τι κάνει η μάρκα σας;', + 'content_language' => 'Γλώσσα περιεχομένου', + 'content_language_description' => 'Οι λεζάντες που δημιουργεί το AI θα γράφονται σε αυτή τη γλώσσα.', + 'brand_color' => 'Χρώμα μάρκας', + 'background_color' => 'Χρώμα φόντου', + 'text_color' => 'Χρώμα κειμένου', + 'submit' => 'Δημιουργία workspace', + 'success' => 'Το workspace δημιουργήθηκε. Συνδέστε έναν λογαριασμό κοινωνικού δικτύου για να ξεκινήσετε να δημοσιεύετε.', + ], + + 'cannot_delete_last' => 'Δεν μπορείτε να διαγράψετε το μοναδικό σας workspace. Ακυρώστε τη συνδρομή σας στις ρυθμίσεις χρέωσης για να κλείσετε τον λογαριασμό σας.', + + 'flash' => [ + 'deleted' => 'Το workspace διαγράφηκε με επιτυχία.', + ], +]; diff --git a/lang/fr/accounts.php b/lang/fr/accounts.php new file mode 100644 index 00000000..23d94a42 --- /dev/null +++ b/lang/fr/accounts.php @@ -0,0 +1,148 @@ + 'Connexions', + 'page_title' => 'Comptes sociaux', + 'description' => 'Vue d\'ensemble de tous vos comptes sociaux connectés', + 'connect_cta' => 'Connecter', + + 'not_connected' => 'Non connecté', + 'connect' => 'Connecter', + 'connection_lost' => 'Connexion perdue', + 'reconnect' => 'Reconnecter', + 'reconnect_account' => 'Reconnecter le compte', + 'view_profile' => 'Voir le profil', + 'disconnect' => 'Déconnecter', + + 'descriptions' => [ + 'linkedin' => 'Connectez votre profil LinkedIn ou votre page entreprise', + 'linkedin-page' => 'Connectez une page entreprise LinkedIn', + 'x' => 'Connectez votre compte X (Twitter)', + 'tiktok' => 'Connectez votre compte TikTok', + 'youtube' => 'Connectez une chaîne YouTube', + 'facebook' => 'Connectez une page Facebook', + 'instagram' => 'Connectez un compte professionnel Instagram', + 'instagram-facebook' => 'Connectez Instagram via une page Facebook', + 'threads' => 'Connectez votre compte Threads', + 'pinterest' => 'Connectez votre compte Pinterest', + 'bluesky' => 'Connectez votre compte Bluesky', + 'mastodon' => 'Connectez votre compte Mastodon', + 'telegram' => 'Connectez un canal ou un groupe Telegram', + 'discord' => 'Connectez un serveur Discord', + ], + + 'disconnect_modal' => [ + 'title' => 'Déconnecter le compte', + 'description' => 'Voulez-vous vraiment déconnecter ce compte ? Vous pourrez le reconnecter à tout moment.', + 'confirm' => 'Déconnecter', + 'cancel' => 'Annuler', + ], + + 'bluesky' => [ + 'title' => 'Connecter Bluesky', + 'description' => 'Saisissez vos identifiants pour vous connecter', + 'email' => 'E-mail', + 'email_placeholder' => 'yourhandle.bsky.social', + 'app_password' => 'Mot de passe d\'application', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'Utilisez un mot de passe d\'application pour plus de sécurité. Créez-en un sur bsky.app/settings.', + 'submit' => 'Connecter Bluesky', + 'submitting' => 'Connexion...', + ], + + 'mastodon' => [ + 'title' => 'Connecter Mastodon', + 'description' => 'Saisissez votre instance Mastodon', + 'instance_url' => 'URL de l\'instance', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Saisissez l\'URL de votre instance Mastodon (par ex. mastodon.social, techhub.social)', + 'submit' => 'Continuer avec Mastodon', + 'submitting' => 'Connexion...', + ], + + 'telegram' => [ + 'title' => 'Connecter Telegram', + 'description' => 'Associez un canal ou un groupe', + 'step_admin' => 'Ajoutez :bot comme administrateur de votre canal ou groupe Telegram.', + 'step_command' => 'Publiez cette commande dans le canal ou le groupe :', + 'waiting' => 'En attente de connexion du canal…', + 'connected' => 'Canal connecté !', + 'connected_toast' => 'Canal Telegram connecté avec succès !', + 'copied_toast' => 'Commande copiée dans le presse-papiers', + 'copy_tooltip' => 'Copier la commande', + 'expired' => 'Ce code a expiré. Générez-en un nouveau pour réessayer.', + 'new_code' => 'Générer un nouveau code', + 'retry' => 'Réessayer', + 'error_generic' => 'Impossible de démarrer la connexion. Veuillez réessayer.', + 'network_taken' => 'Cet espace de travail a déjà un canal Telegram connecté. Déconnectez-le d\'abord.', + ], + + 'facebook' => [ + 'title' => 'Sélectionner une page Facebook', + 'description' => 'Choisissez la page que vous souhaitez connecter', + 'no_pages' => 'Aucune page trouvée', + 'no_pages_description' => 'Vous n\'êtes administrateur d\'aucune page Facebook.', + 'page_label' => 'Page Facebook', + 'view' => 'Voir', + 'choose' => 'Choisir', + ], + + 'instagram_facebook' => [ + 'title' => 'Sélectionner un compte Instagram', + 'description' => 'Choisissez le compte Instagram que vous souhaitez connecter', + 'no_pages' => 'Aucun compte Instagram trouvé', + 'no_pages_description' => 'Aucune page Facebook associée à un compte Instagram Business n\'a été trouvée.', + 'view' => 'Voir', + 'choose' => 'Choisir', + ], + + 'linkedin' => [ + 'title' => 'Sélectionner une page LinkedIn', + 'description' => 'Choisissez la page que vous souhaitez connecter', + 'no_pages' => 'Aucune page trouvée', + 'no_pages_description' => 'Vous n\'êtes administrateur d\'aucune page LinkedIn.', + 'page_label' => 'Page LinkedIn', + 'select_title' => 'Où souhaitez-vous publier ?', + 'select_subtitle' => 'Publiez en votre nom ou choisissez une page entreprise que vous gérez.', + 'person_tag' => 'Personne', + 'organization_tag' => 'Organisation', + 'view' => 'Voir', + 'choose' => 'Choisir', + ], + + 'flash' => [ + 'disconnected' => 'Compte déconnecté avec succès !', + 'connected' => 'Compte connecté avec succès !', + 'session_expired' => 'Session expirée. Veuillez réessayer.', + 'workspace_not_found' => 'Espace de travail introuvable.', + 'activated' => 'Compte activé !', + 'deactivated' => 'Compte désactivé !', + 'already_connected' => 'Cette plateforme est déjà connectée.', + 'no_youtube_channels' => 'Aucune chaîne YouTube trouvée. Veuillez d\'abord créer une chaîne.', + ], + + 'popup_callback' => [ + 'title_success' => 'Connecté', + 'title_error' => 'Erreur', + 'closing' => 'Cette fenêtre se fermera automatiquement...', + 'manual_close' => 'Vous pouvez fermer cette fenêtre.', + 'popup_blocked' => 'Impossible d\'ouvrir la fenêtre de connexion. Veuillez autoriser les pop-ups et réessayer.', + 'connected' => 'Compte connecté !', + 'reconnected' => 'Compte reconnecté !', + 'error_connecting' => 'Erreur lors de la connexion du compte. Veuillez réessayer.', + 'network_taken' => 'Cet espace de travail a déjà un compte pour ce réseau. Déconnectez-le d\'abord.', + 'error_connecting_page' => 'Erreur lors de la connexion de la page. Veuillez réessayer.', + 'error_connecting_channel' => 'Erreur lors de la connexion de la chaîne. Veuillez réessayer.', + 'session_expired' => 'Session expirée. Veuillez réessayer.', + 'workspace_not_found' => 'Espace de travail introuvable.', + 'invalid_state' => 'État invalide. Veuillez réessayer.', + 'failed_to_authenticate' => 'Échec de l\'authentification.', + 'failed_to_get_profile' => 'Impossible de récupérer le profil.', + 'page_not_found' => 'Page introuvable.', + 'channel_not_found' => 'Chaîne introuvable.', + 'no_facebook_pages' => 'Aucune page Facebook trouvée. Vous devez être administrateur d\'au moins une page.', + 'no_facebook_instagram_pages' => 'Aucune page Facebook associée à un compte Instagram trouvée.', + 'no_youtube_channels' => 'Aucune chaîne YouTube trouvée. Veuillez d\'abord créer une chaîne.', + 'not_linkedin_admin' => 'Vous n\'êtes administrateur d\'aucune page LinkedIn.', + ], +]; diff --git a/lang/fr/analytics.php b/lang/fr/analytics.php new file mode 100644 index 00000000..c26d20b1 --- /dev/null +++ b/lang/fr/analytics.php @@ -0,0 +1,55 @@ + 'Aucun compte connecté avec des statistiques.', + 'no_accounts_match' => 'Aucun compte correspondant.', + 'search_account' => 'Rechercher un compte…', + 'select_account' => 'Sélectionnez un compte pour voir les statistiques.', + 'no_data' => 'Aucune donnée statistique disponible.', + + 'metrics' => [ + 'avg_view_duration' => 'Durée de visionnage moy. (s)', + 'avg_view_percentage' => 'Pourcentage de visionnage moy.', + 'bookmarks' => 'Signets', + 'clicks' => 'Clics', + 'comments' => 'Commentaires', + 'custom_reaction' => 'Personnalisé', + 'engagement' => 'Engagement', + 'favourites' => 'Favoris', + 'followers' => 'Abonnés', + 'following' => 'Abonnements', + 'impressions' => 'Impressions', + 'interactions' => 'Interactions', + 'likes' => 'J\'aime', + 'members' => 'Membres', + 'minutes_watched' => 'Minutes visionnées', + 'organic_followers' => 'Abonnés organiques', + 'outbound_clicks' => 'Clics sortants', + 'page_followers' => 'Abonnés de la Page', + 'page_reach' => 'Portée de la Page', + 'page_views' => 'Vues de la Page', + 'paid_followers' => 'Abonnés payants', + 'pin_click_rate' => 'Taux de clics sur épingle', + 'pin_clicks' => 'Clics sur épingle', + 'posts_engagement' => 'Engagement des publications', + 'posts_reach' => 'Portée des publications', + 'quotes' => 'Citations', + 'reach' => 'Portée', + 'reblogs' => 'Repartages', + 'recent_comments' => 'Commentaires récents', + 'recent_likes' => 'J\'aime récents', + 'recent_shares' => 'Partages récents', + 'replies' => 'Réponses', + 'reposts' => 'Republications', + 'retweets' => 'Retweets', + 'saves' => 'Enregistrements', + 'shares' => 'Partages', + 'subscribers' => 'Abonnés', + 'subscribers_gained' => 'Abonnés gagnés', + 'subscribers_lost' => 'Abonnés perdus', + 'total_likes' => 'Total des J\'aime', + 'video_views' => 'Vues de la vidéo', + 'videos' => 'Vidéos', + 'views' => 'Vues', + ], +]; diff --git a/lang/fr/assets.php b/lang/fr/assets.php new file mode 100644 index 00000000..6787392d --- /dev/null +++ b/lang/fr/assets.php @@ -0,0 +1,52 @@ + 'Médias', + + 'tabs' => [ + 'my_uploads' => 'Mes imports', + 'stock_photos' => 'Banque d\'images', + 'gifs' => 'GIF', + ], + + 'upload' => [ + 'drag_drop' => 'Glissez-déposez vos fichiers ici, ou cliquez pour sélectionner', + 'formats' => 'JPEG, PNG, GIF, WebP, MP4, PDF', + 'uploading' => 'Import en cours...', + 'failed' => 'Impossible d\'importer :file. Veuillez réessayer.', + ], + + 'empty' => [ + 'title' => 'Aucun média pour le moment', + 'description' => 'Importez des images et des vidéos pour construire votre bibliothèque de médias.', + ], + + 'save_to_assets' => 'Enregistrer dans les médias', + 'saved' => 'Enregistré dans vos médias !', + 'create_post' => 'Créer une publication', + 'add_to_post' => 'Ajouter à la publication', + 'search_placeholder' => 'Rechercher un média...', + + 'delete' => [ + 'title' => 'Supprimer le média', + 'description' => 'Voulez-vous vraiment supprimer ce média ? Cette action est irréversible.', + 'confirm' => 'Supprimer', + 'cancel' => 'Annuler', + ], + + 'unsplash' => [ + 'search_placeholder' => 'Rechercher des photos gratuites...', + 'no_results' => 'Aucune photo trouvée', + 'no_results_description' => 'Essayez un autre terme de recherche.', + 'trending' => 'Tendances sur Unsplash', + 'start_searching' => 'Recherchez des photos libres de droits sur Unsplash', + ], + + 'giphy' => [ + 'trending' => 'Tendances sur Giphy', + 'search_placeholder' => 'Rechercher des GIF...', + 'no_results' => 'Aucun GIF trouvé', + 'no_results_description' => 'Essayez un autre terme de recherche.', + 'powered_by' => 'Propulsé par GIPHY', + ], +]; diff --git a/lang/fr/auth.php b/lang/fr/auth.php new file mode 100644 index 00000000..a06b4864 --- /dev/null +++ b/lang/fr/auth.php @@ -0,0 +1,141 @@ + 'Ces identifiants ne correspondent pas à nos enregistrements.', + 'password' => 'Le mot de passe fourni est incorrect.', + 'throttle' => 'Trop de tentatives de connexion. Veuillez réessayer dans :seconds secondes.', + + 'flash' => [ + 'welcome' => 'Bienvenue sur TryPost !', + 'welcome_trial' => 'Bienvenue sur TryPost ! Votre essai a commencé.', + ], + + 'legal' => 'En continuant, vous acceptez nos Conditions d\'utilisation et notre Politique de confidentialité.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'Calendrier visuel', + 'description' => 'Planifiez et programmez votre contenu avec un calendrier intuitif en glisser-déposer, sur tous vos comptes sociaux.', + ], + 'scheduling' => [ + 'title' => 'Programmation intelligente', + 'description' => 'Programmez des publications sur LinkedIn, X, Instagram, TikTok, YouTube et plus encore — le tout depuis un seul endroit.', + ], + 'media' => [ + 'title' => 'Médias riches', + 'description' => 'Publiez des images, des carrousels, des stories et des reels. Chaque plateforme reçoit automatiquement le bon format.', + ], + 'video' => [ + 'title' => 'Publication de vidéos', + 'description' => 'Importez vos vidéos une seule fois et publiez-les sur TikTok, YouTube Shorts, Instagram Reels et Facebook Reels.', + ], + 'team' => [ + 'title' => 'Espaces de travail d\'équipe', + 'description' => 'Invitez votre équipe, attribuez des rôles et gérez plusieurs marques depuis des espaces de travail distincts.', + ], + 'signatures' => [ + 'title' => 'Signatures', + 'description' => 'Enregistrez des signatures réutilisables (hashtags, liens, formules de fin) et ajoutez-les à vos publications en un clic.', + ], + ], + + 'or_continue_with' => 'Ou continuer avec', + 'or_continue_with_email' => 'Ou continuer avec l\'e-mail', + 'google_login' => 'Se connecter avec Google', + 'google_signup' => 'S\'inscrire avec Google', + 'github_login' => 'Se connecter avec GitHub', + 'github_signup' => 'S\'inscrire avec GitHub', + 'github_email_unavailable' => 'Impossible de récupérer votre e-mail depuis GitHub. Rendez votre e-mail GitHub public ou accordez l\'autorisation d\'accès à l\'e-mail, puis réessayez.', + + 'signup_success' => [ + 'page_title' => 'Bienvenue', + 'title' => 'Configuration de votre compte', + 'description' => 'Cela ne prend généralement que quelques secondes...', + ], + + 'login' => [ + 'title' => 'Connectez-vous à votre compte', + 'description' => 'Saisissez votre e-mail et votre mot de passe ci-dessous pour vous connecter', + 'page_title' => 'Connexion', + 'email' => 'Adresse e-mail', + 'password' => 'Mot de passe', + 'forgot_password' => 'Mot de passe oublié ?', + 'remember_me' => 'Se souvenir de moi', + 'submit' => 'Se connecter', + 'no_account' => 'Vous n\'avez pas de compte ?', + 'sign_up' => 'S\'inscrire', + ], + + 'register' => [ + 'title' => 'Tout votre calendrier social, au même endroit', + 'description' => 'Créez votre compte et commencez à programmer des publications sur tous les réseaux.', + 'page_title' => 'Inscription', + 'signup_with_email' => 'S\'inscrire avec un e-mail', + 'name' => 'Nom', + 'name_placeholder' => 'Nom complet', + 'email' => 'Adresse e-mail', + 'password' => 'Mot de passe', + 'show_password' => 'Afficher le mot de passe', + 'hide_password' => 'Masquer le mot de passe', + 'submit' => 'Créer un compte', + 'has_account' => 'Vous avez déjà un compte ?', + 'log_in' => 'Se connecter', + ], + + 'forgot_password' => [ + 'title' => 'Mot de passe oublié', + 'description' => 'Saisissez votre e-mail pour recevoir un lien de réinitialisation du mot de passe', + 'page_title' => 'Mot de passe oublié', + 'email' => 'Adresse e-mail', + 'submit' => 'Envoyer le lien de réinitialisation', + 'return_to' => 'Ou revenez à la', + 'log_in' => 'connexion', + ], + + 'reset_password' => [ + 'title' => 'Réinitialiser le mot de passe', + 'description' => 'Veuillez saisir votre nouveau mot de passe ci-dessous', + 'page_title' => 'Réinitialiser le mot de passe', + 'email' => 'E-mail', + 'password' => 'Mot de passe', + 'confirm_password' => 'Confirmer le mot de passe', + 'confirm_placeholder' => 'Confirmer le mot de passe', + 'submit' => 'Réinitialiser le mot de passe', + ], + + 'verify_email' => [ + 'title' => 'Vérifier l\'e-mail', + 'description' => 'Veuillez vérifier votre adresse e-mail en cliquant sur le lien que nous venons de vous envoyer.', + 'page_title' => 'Vérification de l\'e-mail', + 'link_sent' => 'Un nouveau lien de vérification a été envoyé à l\'adresse e-mail que vous avez fournie lors de l\'inscription.', + 'resend' => 'Renvoyer l\'e-mail de vérification', + 'log_out' => 'Se déconnecter', + ], + + 'accept_invite' => [ + 'page_title' => 'Accepter l\'invitation', + 'title' => 'Vous avez été invité !', + 'description' => 'Vous avez été invité à rejoindre l\'espace de travail :workspace.', + 'workspace' => 'Espace de travail', + 'your_role' => 'Votre rôle', + 'email' => 'E-mail', + 'accept' => 'Accepter l\'invitation', + 'decline' => 'Refuser l\'invitation', + 'login_prompt' => 'Connectez-vous ou créez un compte pour accepter cette invitation.', + 'log_in' => 'Se connecter', + 'create_account' => 'Créer un compte', + ], + +]; diff --git a/lang/fr/automations.php b/lang/fr/automations.php new file mode 100644 index 00000000..a036d4af --- /dev/null +++ b/lang/fr/automations.php @@ -0,0 +1,411 @@ + 'Automatisations', + 'default_name' => 'Nouvelle automatisation', + + 'actions' => [ + 'new' => 'Nouvelle automatisation', + 'edit' => 'Modifier', + 'save' => 'Enregistrer', + 'activate' => 'Activer', + 'pause' => 'Mettre en pause', + 'delete' => 'Supprimer', + 'retry' => 'Réessayer', + 'guide' => 'Découvrir comment ça marche', + ], + + 'tabs' => [ + 'build' => 'Construire', + 'variables' => 'Variables', + 'test' => 'Tester', + ], + + 'nav' => [ + 'workflow' => 'Workflow', + 'invocations' => 'Invocations', + 'metrics' => 'Métriques', + 'settings' => 'Paramètres', + ], + + 'settings' => [ + 'general' => 'Général', + 'general_description' => 'Renommez cette automatisation.', + 'name_label' => 'Nom', + 'name_saved' => 'Automatisation renommée.', + 'status_title' => 'Statut', + 'status_description' => 'Activez pour la lancer, ou mettez en pause pour l\'arrêter.', + 'activated_at' => 'Activée le :date', + 'paused_at' => 'Mise en pause le :date', + 'created_at' => 'Créée le :date', + 'danger_title' => 'Zone de danger', + 'danger_description' => 'Actions irréversibles.', + 'delete_title' => 'Supprimer cette automatisation', + 'delete_description' => 'Supprime définitivement l\'automatisation et son historique d\'exécution.', + ], + + 'status_run' => [ + 'pending' => 'En attente', + 'running' => 'En cours', + 'waiting' => 'En attente', + 'completed' => 'Terminée', + 'failed' => 'Échouée', + 'cancelled' => 'Annulée', + ], + + 'node_type' => [ + 'trigger' => 'Déclencheur', + 'generate' => 'Générer du contenu', + 'delay' => 'Délai', + 'condition' => 'Condition', + 'publish' => 'Publier', + 'webhook' => 'Webhook', + 'end' => 'Fin', + 'fetch_rss' => 'Récupérer RSS', + 'http_request' => 'Requête HTTP', + ], + + 'invocations' => [ + 'empty' => 'Aucune invocation pour le moment.', + 'refresh' => 'Actualiser', + 'search_placeholder' => 'Rechercher par ID d\'exécution…', + 'copied' => 'ID d\'exécution copié.', + 'loading' => 'Chargement des étapes…', + 'no_steps' => 'Aucune étape enregistrée.', + 'load_error' => 'Impossible de charger les étapes.', + 'steps' => '{0}Aucune étape|{1}:count étape|[2,*]:count étapes', + 'filter' => [ + 'all' => 'Tous les statuts', + ], + 'columns' => [ + 'timestamp' => 'Horodatage', + 'run' => 'Exécution', + 'status' => 'Statut', + 'message' => 'Dernier message', + 'duration' => 'Durée', + ], + 'summary' => [ + 'completed' => 'Workflow terminé', + 'failed' => 'Workflow échoué', + 'running' => 'Workflow en cours', + 'cancelled' => 'Workflow annulé', + 'pending' => 'Workflow en attente', + ], + ], + + 'metrics' => [ + 'overview' => 'Vue d\'ensemble', + 'runs_over_time' => 'Exécutions dans le temps', + 'posts_by_platform' => 'Publications par plateforme', + 'no_posts' => 'Aucune publication publiée sur cette période.', + 'cards' => [ + 'runs' => 'Total des exécutions', + 'completed' => 'Terminées', + 'failed' => 'Échouées', + 'in_progress' => 'En cours', + 'success_rate' => 'Taux de réussite', + 'avg_duration' => 'Durée moyenne', + 'posts_created' => 'Publications créées', + ], + 'legend' => [ + 'started' => 'Démarrées', + 'completed' => 'Terminées', + 'failed' => 'Échouées', + ], + ], + + 'categories' => [ + 'sources' => 'Sources', + 'content' => 'Contenu', + 'flow' => 'Flux', + 'output' => 'Sortie', + ], + + 'variables' => [ + 'title' => 'Variables du workflow', + 'hint' => 'Valeurs réutilisables référencées partout avec {{ variables.KEY }}. Stockées de manière chiffrée.', + 'empty' => 'Aucune variable pour le moment.', + 'key' => 'Clé', + 'value' => 'Valeur', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'Valeur', + 'add' => 'Nouvelle variable', + ], + + 'expr' => [ + 'trigger_event' => 'Nom de l\'événement déclencheur', + 'trigger_fired_at' => 'Moment du déclenchement', + 'trigger_post_id' => 'ID de la publication déclencheuse', + 'trigger_post_content' => 'Contenu de la publication déclencheuse', + 'trigger_post_status' => 'Statut de la publication déclencheuse', + 'trigger_post_scheduled_at' => 'Moment de programmation de la publication', + 'trigger_post_published_at' => 'Moment de publication de la publication', + 'fetched_title' => 'Titre de l\'élément récupéré', + 'fetched_link' => 'Lien de l\'élément récupéré', + 'fetched_date' => 'Date de publication de l\'élément récupéré', + 'fetched_content' => 'Contenu complet de l\'élément récupéré', + 'fetched_description' => 'Résumé de l\'élément récupéré', + 'fetched_author' => 'Auteur de l\'élément récupéré', + 'fetched_image' => 'URL de l\'image de l\'élément récupéré', + 'fetched_categories' => 'Catégories de l\'élément récupéré', + 'fetched_enclosure' => 'Média de l\'élément récupéré (audio/vidéo/fichier)', + 'fetched_pubdate' => 'Date de publication de l\'élément récupéré', + 'fetched_http' => 'Élément HTTP récupéré (ajoutez un champ)', + 'generated_content' => 'Contenu de publication généré par l\'IA', + 'generated_post_url' => 'URL de la publication générée par l\'IA', + 'variable' => 'Variable du workflow', + 'now' => 'Date et heure actuelles', + ], + + 'test' => [ + 'description' => 'Exécute l\'automatisation de bout en bout à l\'aide d\'un déclencheur synthétisé. Utile pour valider chaque nœud sans attendre la programmation réelle ou le flux.', + 'starting' => 'Démarrage du test…', + 'in_progress' => 'En cours', + 'completed' => 'Terminé', + 'failed' => 'Échoué', + 'waiting' => 'En attente', + 'close' => 'Fermer', + 'no_node_runs' => 'En attente du démarrage du premier nœud…', + 'node_input' => 'Entrée', + 'node_output' => 'Sortie', + 'node_error' => 'Erreur', + 'no_new_items' => 'Aucun nouvel élément — rien n\'a été exécuté en aval.', + 'error_starting' => 'Impossible de démarrer le test.', + 'with_real_data' => 'Avec des données réelles', + 'run' => 'Lancer le test', + 'idle_hint' => 'Cliquez sur Lancer le test pour exécuter l\'automatisation de bout en bout.', + 'real_data_hint' => 'Ce test publiera des publications, fera avancer les repères de polling et déclenchera des effets externes.', + 'dry_badge' => 'Simulation', + ], + + 'status' => [ + 'draft' => 'Brouillon', + 'active' => 'Active', + 'paused' => 'En pause', + ], + + 'index' => [ + 'empty_title' => 'Aucune automatisation pour le moment', + 'empty_description' => 'Créez votre première automatisation pour commencer à publier en pilote automatique.', + 'columns' => [ + 'name' => 'Nom', + 'status' => 'Statut', + 'created' => 'Créée le', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'Impossible d\'activer l\'automatisation.', + 'pause_error_fallback' => 'Impossible de mettre en pause l\'automatisation.', + 'save_error_fallback' => 'Impossible d\'enregistrer l\'automatisation.', + 'save_success' => 'Automatisation enregistrée.', + 'empty_canvas_title' => 'Commencez à construire votre automatisation', + 'empty_canvas_description' => 'Faites glisser un nœud depuis le panneau de gauche pour commencer.', + 'name_placeholder' => 'Automatisation sans titre', + ], + + 'nodes' => [ + 'trigger' => 'Déclencheur', + 'generate' => 'Générer', + 'delay' => 'Délai', + 'condition' => 'Condition', + 'publish' => 'Publier', + 'webhook' => 'Webhook', + 'end' => 'Fin', + 'end_summary' => 'Arrête l\'automatisation ici', + 'fetch_rss' => 'Récupérer RSS', + 'http_request' => 'Requête HTTP', + 'handles' => [ + 'items' => 'a des éléments', + 'no_items' => 'aucun élément', + ], + ], + + 'config' => [ + 'select_placeholder' => 'Sélectionner…', + 'invalid_json' => 'Ce n\'est pas encore du JSON valide.', + 'expand_editor' => 'Agrandir l\'éditeur', + 'minimize_editor' => 'Réduire', + + 'trigger' => [ + 'type' => 'Type de déclencheur', + 'types' => [ + 'schedule' => 'Programmation', + 'post_published' => 'Lorsqu\'une publication est publiée', + 'post_scheduled' => 'Lorsqu\'une publication est programmée', + ], + 'post_published_hint' => 'S\'exécute chaque fois qu\'une publication de cet espace de travail est publiée. La publication publiée est disponible via {{ trigger.post }} pour les nœuds en aval.', + 'post_scheduled_hint' => 'S\'exécute chaque fois qu\'une publication de cet espace de travail est programmée. La publication programmée est disponible via {{ trigger.post }}.', + + 'schedule' => [ + 'field' => 'Intervalle de déclenchement', + 'fields' => [ + 'minutes' => 'Minutes', + 'hours' => 'Heures', + 'days' => 'Jours', + 'weeks' => 'Semaines', + 'months' => 'Mois', + ], + 'minutes_interval' => 'Minutes entre les déclenchements', + 'hours_interval' => 'Heures entre les déclenchements', + 'days_interval' => 'Jours entre les déclenchements', + 'hour' => 'Déclencher à l\'heure', + 'minute' => 'Déclencher à la minute', + 'weekdays' => 'Déclencher les jours de la semaine', + 'day_of_month' => 'Jour du mois', + 'weekday_names' => [ + 'sun' => 'Dim', + 'mon' => 'Lun', + 'tue' => 'Mar', + 'wed' => 'Mer', + 'thu' => 'Jeu', + 'fri' => 'Ven', + 'sat' => 'Sam', + ], + 'summary' => [ + 'every_n_minutes' => 'S\'exécute chaque minute|S\'exécute toutes les :count minutes', + 'every_n_hours' => 'S\'exécute chaque heure à la minute :minute|S\'exécute toutes les :count heures à la minute :minute', + 'every_n_days' => 'S\'exécute chaque jour à :time|S\'exécute tous les :count jours à :time', + 'weekly' => 'S\'exécute chaque :days à :time', + 'monthly' => 'S\'exécute le :day de chaque mois à :time', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'Comptes sociaux', + 'social_accounts_empty' => 'Aucun compte social connecté. Connectez-en un d\'abord.', + 'target_slide_count' => 'Diapositives à générer', + 'prompt_template' => 'Modèle de prompt', + 'prompt_template_hint' => 'Tapez {{ pour insérer des données des étapes précédentes.', + 'image_count' => 'Images à générer', + 'image_count_hint' => '0 = publication texte seul (sans image). 1 = image unique. 2+ = carrousel.', + 'use_brand_voice' => 'Utiliser la voix de la marque', + 'use_brand_voice_hint' => 'Appliquez la description et la voix de votre marque. Désactivez pour une curation fidèle de sources tierces (actualités, RSS).', + 'use_brand_visuals' => 'Utiliser les visuels de la marque', + 'use_brand_visuals_hint' => 'Orientez les images de l\'IA avec les couleurs et l\'identité de votre marque. Désactivez pour des visuels neutres guidés uniquement par le sujet de la publication.', + 'style' => 'Style', + 'account_summary' => ':count compte · :format|:count comptes · :format', + 'formats' => [ + 'single' => 'unique', + 'carousel' => 'carrousel', + ], + ], + 'delay' => [ + 'duration' => 'Durée', + 'unit' => 'Unité', + 'units' => [ + 'minutes' => 'Minutes', + 'hours' => 'Heures', + 'days' => 'Jours', + ], + ], + 'condition' => [ + 'field' => 'Champ', + 'operator' => 'Opérateur', + 'operators' => [ + 'contains' => 'contient', + 'not_contains' => 'ne contient pas', + 'equals' => 'égal à', + 'not_equals' => 'différent de', + 'matches' => 'correspond (regex)', + 'greater_than' => 'supérieur à', + 'less_than' => 'inférieur à', + ], + 'value' => 'Valeur', + ], + 'publish' => [ + 'mode' => 'Mode', + 'modes' => [ + 'now' => 'Publier maintenant', + 'scheduled' => 'Programmer', + 'draft' => 'Enregistrer comme brouillon', + ], + 'scheduled_offset' => 'Décalage par rapport au déclencheur (minutes)', + 'offset_summary' => ':mode · +:offset min', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'Méthode', + 'payload_template' => 'Modèle de payload (JSON)', + ], + 'end' => [ + 'reason' => 'Raison (facultatif)', + 'reason_placeholder' => 'par ex. Filtré par la condition', + ], + 'fetch_rss' => [ + 'feed_url' => 'URL du flux', + 'feed_url_hint' => 'Lors de la première exécution, le repère est fixé à « maintenant » afin que les éléments historiques n\'inondent pas les nœuds en aval. Les exécutions suivantes ne voient que les éléments plus récents que le dernier relevé.', + 'inspect' => 'Inspecter le flux', + 'inspecting' => 'Inspection…', + 'inspect_hint' => 'Récupérez un échantillon pour découvrir les champs disponibles pour les nœuds en aval.', + 'inspect_error' => 'Impossible de lire ce flux. Vérifiez l\'URL et réessayez.', + 'discovered_fields' => 'Champs disponibles', + 'discovered_empty' => 'Aucun champ trouvé dans le dernier élément.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'Méthode', + 'auth_type' => 'Authentification', + 'auth' => [ + 'none' => 'Aucune (public)', + 'bearer' => 'Jeton Bearer', + 'basic' => 'Authentification basique', + 'api_key' => 'En-tête de clé API', + ], + 'bearer_token' => 'Jeton Bearer', + 'basic_username' => 'Nom d\'utilisateur', + 'basic_password' => 'Mot de passe', + 'api_key_header' => 'Nom de l\'en-tête', + 'api_key_value' => 'Clé API', + 'body_template' => 'Modèle de corps (JSON)', + 'headers' => 'En-têtes', + 'header_name' => 'Nom de l\'en-tête', + 'header_value' => 'Valeur', + 'add_header' => 'Ajouter un en-tête', + 'polling_section' => 'Liste et déduplication (facultatif)', + 'polling_hint' => 'Lorsque la réponse est une liste, chaque élément exécute le workflow séparément. Un objet unique s\'exécute une fois.', + 'items_path' => 'Chemin des éléments', + 'items_path_hint' => 'Laissez vide si la réponse est déjà un tableau. Utilisez un chemin à points (par ex. data.items) pour un tableau imbriqué, ou * pour un objet indexé par id.', + 'item_key_path' => 'Chemin de la clé d\'élément', + 'item_key_path_hint' => 'Chemin JSON vers un id unique (par ex. id). Les éléments déjà vus sont ignorés, de sorte qu\'un flux sans dates ne transmet que les nouvelles entrées.', + 'item_date_path' => 'Chemin de la date d\'élément', + 'item_date_path_hint' => 'Chemin JSON vers l\'horodatage de l\'élément (par ex. published_at). Privilégié au chemin de clé lorsqu\'il est disponible. Le premier relevé enregistre la référence et ne transmet rien, de sorte qu\'un flux existant n\'inonde jamais dès le premier jour.', + ], + ], + + 'delete' => [ + 'title' => 'Supprimer l\'automatisation', + 'description' => 'Voulez-vous vraiment supprimer cette automatisation ? Toutes les exécutions et les éléments déclencheurs seront également supprimés. Cette action est irréversible.', + 'confirm' => 'Supprimer', + 'cancel' => 'Annuler', + ], + + 'flash' => [ + 'deleted' => 'Automatisation supprimée avec succès !', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'Aucun compte social actif configuré pour cette automatisation.', + 'must_have_one_trigger' => 'L\'automatisation doit comporter exactement un nœud déclencheur.', + 'trigger_must_be_connected' => 'Le nœud déclencheur doit être connecté à au moins un nœud.', + 'graph_contains_cycle' => 'Le graphe de l\'automatisation contient un cycle.', + 'only_failed_can_retry' => 'Seules les exécutions échouées peuvent être relancées.', + 'no_generated_post' => 'Aucune publication générée trouvée pour cette exécution.', + 'webhook_server_error' => 'Erreur du serveur webhook.', + 'webhook_request_failed' => 'La requête webhook n\'a pas pu être exécutée.', + 'webhook_missing_url' => 'Il manque une URL au nœud webhook.', + 'webhook_invalid_payload_json' => 'Le modèle de payload n\'est pas du JSON valide.', + 'url_not_allowed' => 'L\'URL de la requête pointe vers une adresse privée ou inaccessible et a été bloquée.', + 'node_no_longer_exists' => 'Le nœud :node_id n\'existe plus dans l\'automatisation.', + 'no_trigger_connection' => 'Aucun nœud connecté au nœud déclencheur.', + 'fetch_rss_missing_url' => 'Il manque une URL de flux au nœud Récupérer RSS.', + 'fetch_rss_request_failed' => 'La requête du flux RSS a échoué.', + 'fetch_rss_malformed' => 'Le flux RSS est mal formé.', + 'http_missing_url' => 'Il manque une URL au nœud de requête HTTP.', + 'http_request_exception' => 'La requête HTTP a levé une exception.', + 'http_request_failed' => 'La requête HTTP a échoué.', + 'http_items_path_not_array' => 'Le chemin des éléments ne correspond pas à une liste.', + ], +]; diff --git a/lang/fr/billing.php b/lang/fr/billing.php new file mode 100644 index 00000000..d423e220 --- /dev/null +++ b/lang/fr/billing.php @@ -0,0 +1,76 @@ + 'Facturation', + + 'past_due_notice' => [ + 'title' => 'Paiement en retard', + 'description' => 'Mettez à jour votre moyen de paiement pour conserver votre abonnement actif.', + 'cta' => 'Mettre à jour le paiement', + ], + + 'annual_banner' => [ + 'title' => 'Obtenez 2 mois gratuits', + 'description' => 'Passez à la facturation annuelle et payez moins chaque mois — même forfait, rien d\'autre ne change.', + 'cta' => 'Passer à l\'annuel', + ], + + 'subscribe' => [ + 'billed_monthly' => 'Facturé mensuellement', + 'billed_yearly' => 'Facturé annuellement', + 'prices' => [ + 'workspace' => ['monthly' => '12 $', 'yearly_per_month' => '10 $', 'yearly' => '120 $'], + ], + ], + + 'plan' => [ + 'title' => 'Forfait', + 'description' => 'Gérez votre forfait d\'abonnement.', + 'label' => 'Forfait', + 'workspaces' => '{1}:count espace de travail|[2,*]:count espaces de travail', + 'per_workspace' => 'par espace de travail', + 'price' => 'Prix', + 'month' => 'mois', + 'trial' => 'Essai', + 'active' => 'Actif', + 'past_due' => 'En retard', + 'cancelling' => 'Annulation en cours', + 'trial_ends' => 'Fin de l\'essai', + ], + + 'subscription' => [ + 'title' => 'Abonnement', + 'description' => 'Gérez votre moyen de paiement, vos informations de facturation et votre abonnement.', + 'payment_method' => 'Moyen de paiement', + 'no_payment_method' => 'Aucun moyen de paiement enregistré pour le moment.', + 'expires_on' => 'Expire le :month/:year', + 'manage_label' => 'Abonnement', + 'manage_stripe' => 'Gérer sur Stripe', + ], + + 'invoices' => [ + 'title' => 'Factures', + 'description' => 'Téléchargez vos factures passées.', + 'empty' => 'Aucune facture trouvée', + 'paid' => 'Payée', + ], + + 'flash' => [ + 'plan_changed' => 'Vous êtes maintenant sur le forfait :plan.', + 'switched_to_yearly' => 'Vous êtes maintenant en facturation annuelle.', + 'cannot_manage' => 'Seul le propriétaire du compte peut gérer la facturation.', + 'credits_exhausted' => 'Crédits IA épuisés — votre quota mensuel de :limit a été utilisé. Améliorez votre forfait ou attendez le mois prochain.', + 'subscription_required' => 'Un abonnement actif est requis pour utiliser les fonctionnalités d\'IA.', + ], + + 'processing' => [ + 'page_title' => 'Traitement...', + 'title' => 'Traitement de votre abonnement', + 'description' => 'Veuillez patienter pendant que nous configurons votre compte. Cela ne prendra qu\'un instant.', + 'success_title' => 'Tout est prêt !', + 'success_description' => 'Votre abonnement est actif. Redirection vers vos espaces de travail...', + 'cancelled_title' => 'Paiement annulé', + 'cancelled_description' => 'Votre paiement a été annulé. Aucun montant n\'a été débité.', + 'retry' => 'Réessayer', + ], +]; diff --git a/lang/fr/brands.php b/lang/fr/brands.php new file mode 100644 index 00000000..0e1ecd06 --- /dev/null +++ b/lang/fr/brands.php @@ -0,0 +1,39 @@ + 'Nouvelle marque', + 'no_brands_yet' => 'Aucune marque pour le moment', + 'no_brands_description' => 'Créez des marques pour organiser vos comptes sociaux par client ou par projet', + 'accounts_count' => ':count comptes', + + 'create' => [ + 'title' => 'Créer une marque', + 'description' => 'Donnez un nom à votre marque pour regrouper des comptes sociaux', + 'name' => 'Nom de la marque', + 'name_placeholder' => 'par ex. Acme Corp, Personnel', + 'submit' => 'Créer la marque', + 'submitting' => 'Création...', + ], + + 'edit' => [ + 'title' => 'Modifier la marque', + 'description' => 'Mettez à jour le nom de cette marque', + 'name' => 'Nom de la marque', + 'name_placeholder' => 'par ex. Acme Corp, Personnel', + 'submit' => 'Enregistrer les modifications', + 'submitting' => 'Enregistrement...', + ], + + 'delete' => [ + 'title' => 'Supprimer la marque', + 'description' => 'Voulez-vous vraiment supprimer cette marque ? Les comptes sociaux seront dissociés mais pas supprimés.', + 'confirm' => 'Supprimer', + 'cancel' => 'Annuler', + ], + + 'flash' => [ + 'created' => 'Marque créée avec succès !', + 'updated' => 'Marque mise à jour avec succès !', + 'deleted' => 'Marque supprimée avec succès !', + ], +]; diff --git a/lang/fr/calendar.php b/lang/fr/calendar.php new file mode 100644 index 00000000..d29f63a9 --- /dev/null +++ b/lang/fr/calendar.php @@ -0,0 +1,12 @@ + 'Calendrier', + 'today' => 'Aujourd\'hui', + 'day' => 'Jour', + 'week' => 'Semaine', + 'month' => 'Mois', + 'new_post' => 'Nouvelle publication', + 'no_content' => 'Aucun contenu', + 'more' => '+:count de plus', +]; diff --git a/lang/fr/comments.php b/lang/fr/comments.php new file mode 100644 index 00000000..f52e3db1 --- /dev/null +++ b/lang/fr/comments.php @@ -0,0 +1,18 @@ + 'Écrire un commentaire...', + 'reply_placeholder' => 'Écrire une réponse...', + 'reply' => 'Répondre', + 'edit' => 'Modifier', + 'delete' => 'Supprimer', + 'edited' => 'modifié', + 'save' => 'Enregistrer', + 'cancel' => 'Annuler', + 'send' => 'Envoyer', + 'replying_to' => 'En réponse à :name', + 'empty' => 'Aucun commentaire pour le moment. Lancez la conversation.', + 'load_more' => 'Charger les commentaires plus anciens', + 'today' => 'Aujourd\'hui', + 'yesterday' => 'Hier', +]; diff --git a/lang/fr/common.php b/lang/fr/common.php new file mode 100644 index 00000000..deef0b33 --- /dev/null +++ b/lang/fr/common.php @@ -0,0 +1,59 @@ + 'Retour', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'Cette action est irréversible.', + 'type' => 'Saisissez', + 'to_confirm' => 'pour confirmer.', + 'copy_to_clipboard' => 'Copier dans le presse-papiers', + 'delete_keyword' => 'supprimer', + ], + + 'photo_upload' => [ + 'upload' => 'Importer', + 'uploading' => 'Import en cours...', + 'remove' => 'Supprimer la photo', + 'hint' => 'Recommandé : image carrée, 2 Mo maximum.', + ], + + 'timezone' => [ + 'select' => 'Sélectionner un fuseau horaire', + 'search' => 'Rechercher un fuseau horaire...', + 'empty' => 'Aucun fuseau horaire trouvé', + ], + + 'date_picker' => [ + 'select' => 'Sélectionner une date', + ], + + 'date_range_picker' => [ + 'placeholder' => 'Choisir une plage de dates', + 'today' => 'Aujourd\'hui', + 'yesterday' => 'Hier', + 'last_7_days' => '7 derniers jours', + 'last_30_days' => '30 derniers jours', + 'last_3_months' => '3 derniers mois', + 'last_6_months' => '6 derniers mois', + 'last_12_months' => '12 derniers mois', + 'this_month' => 'Ce mois-ci', + 'last_month' => 'Le mois dernier', + 'year_to_date' => 'Depuis le début de l\'année', + 'last_year' => 'L\'année dernière', + ], + + 'cancel' => 'Annuler', + 'clear' => 'Effacer', + 'close' => 'Fermer', + 'loading_more' => 'Chargement...', + + 'actions' => [ + 'copy' => 'Copier', + 'copied' => 'Copié', + 'copy_failed' => 'Échec de la copie dans le presse-papiers', + ], +]; diff --git a/lang/fr/labels.php b/lang/fr/labels.php new file mode 100644 index 00000000..a9d8038c --- /dev/null +++ b/lang/fr/labels.php @@ -0,0 +1,54 @@ + 'Étiquettes', + 'description' => 'Créez des étiquettes pour organiser et catégoriser vos publications', + 'search' => 'Rechercher des étiquettes...', + 'new_label' => 'Nouvelle étiquette', + 'no_labels_yet' => 'Aucune étiquette pour le moment', + 'no_search_results' => 'Aucune étiquette ne correspond à votre recherche', + 'try_different_search' => 'Essayez un autre mot-clé ou effacez la recherche.', + 'create_first_label' => 'Créez votre première étiquette', + 'table' => [ + 'name' => 'Nom', + 'created_at' => 'Créée le', + ], + + 'actions' => [ + 'edit' => 'Modifier l\'étiquette', + 'delete' => 'Supprimer l\'étiquette', + ], + + 'create' => [ + 'title' => 'Créer une étiquette', + 'description' => 'Donnez un nom à votre étiquette et choisissez une couleur', + 'name' => 'Nom', + 'name_placeholder' => 'Saisissez le nom de l\'étiquette...', + 'color' => 'Couleur', + 'submit' => 'Créer l\'étiquette', + 'submitting' => 'Création...', + ], + + 'edit' => [ + 'title' => 'Modifier l\'étiquette', + 'description' => 'Mettez à jour le nom et la couleur de cette étiquette', + 'name' => 'Nom', + 'name_placeholder' => 'Saisissez le nom de l\'étiquette...', + 'color' => 'Couleur', + 'submit' => 'Enregistrer les modifications', + 'submitting' => 'Enregistrement...', + ], + + 'delete' => [ + 'title' => 'Supprimer l\'étiquette', + 'description' => 'Voulez-vous vraiment supprimer cette étiquette ? Cette action est irréversible.', + 'confirm' => 'Supprimer', + 'cancel' => 'Annuler', + ], + + 'flash' => [ + 'created' => 'Étiquette créée avec succès !', + 'updated' => 'Étiquette mise à jour avec succès !', + 'deleted' => 'Étiquette supprimée avec succès !', + ], +]; diff --git a/lang/fr/mail.php b/lang/fr/mail.php new file mode 100644 index 00000000..bcd6a204 --- /dev/null +++ b/lang/fr/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => ':name vous a mentionné sur TryPost', + 'title' => ':name vous a mentionné', + 'intro' => ':name vous a mentionné dans le commentaire d\'une publication.', + 'cta' => 'Voir le commentaire', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :count compte doit être reconnecté dans :workspace|[2,*] :count comptes doivent être reconnectés dans :workspace', + 'title' => 'Des comptes doivent être reconnectés', + 'intro' => 'Les comptes sociaux suivants de votre espace de travail :workspace ont été déconnectés et doivent être reconnectés :', + 'reasons_title' => 'Cela peut être dû à l\'une des raisons suivantes :', + 'reason_expired' => 'Les jetons d\'accès ont expiré', + 'reason_revoked' => 'Vous avez révoqué l\'accès de TryPost sur la plateforme', + 'reason_changed' => 'La plateforme a modifié ses exigences d\'authentification', + 'reconnect_cta' => 'Veuillez reconnecter ces comptes pour continuer à programmer et publier vos publications.', + 'button' => 'Reconnecter les comptes', + ], +]; diff --git a/lang/fr/notifications.php b/lang/fr/notifications.php new file mode 100644 index 00000000..dd8b0b47 --- /dev/null +++ b/lang/fr/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'Votre publication est prête', + 'body' => 'L\'IA vient de terminer. Touchez pour relire et publier.', + ], + 'account_disconnected' => [ + 'title' => 'Compte :platform déconnecté', + 'body' => ':account doit être reconnecté', + ], + 'account_token_expired' => [ + 'title' => 'Le compte :platform doit être reconnecté', + 'body' => 'La session de :account a expiré — veuillez reconnecter pour continuer à publier', + ], +]; diff --git a/lang/fr/onboarding.php b/lang/fr/onboarding.php new file mode 100644 index 00000000..15181f96 --- /dev/null +++ b/lang/fr/onboarding.php @@ -0,0 +1,41 @@ + 'Bienvenue sur TryPost', + 'description' => 'Dites-nous ce qui vous décrit le mieux, vous ou votre entreprise, afin que nous puissions personnaliser votre expérience.', + 'continue' => 'Continuer', + 'personas' => [ + 'creator' => 'Créateur de contenu', + 'freelancer' => 'Freelance', + 'developer' => 'Développeur', + 'startup' => 'Startup', + 'agency' => 'Agence', + 'small_business' => 'Petite entreprise', + 'marketer' => 'Marketeur', + 'online_store' => 'Boutique en ligne', + 'other' => 'Autre', + ], + 'goals_title' => 'Quel est votre objectif avec TryPost ?', + 'goals_description' => 'Choisissez tout ce qui vous correspond et nous configurerons TryPost pour vous.', + 'goals' => [ + 'save_time' => 'Gagner du temps en publiant partout à la fois', + 'ai_content' => 'Créer des publications plus vite avec l\'IA', + 'plan_calendar' => 'Planifier mes publications sur un calendrier', + 'stay_on_brand' => 'Garder chaque publication fidèle à ma marque', + 'grow_audience' => 'Développer mon audience et mon engagement', + 'drive_sales' => 'Obtenir plus de trafic et de ventes', + 'manage_clients' => 'Gérer plusieurs marques ou clients', + 'team_collaboration' => 'Travailler avec mon équipe', + 'automate_api' => 'Automatiser la publication avec l\'API, le MCP ou du code', + 'track_performance' => 'Voir les performances de mes publications', + 'just_exploring' => 'Je découvre pour l\'instant', + 'other' => 'Autre chose', + ], + 'connect' => [ + 'title' => 'Connectez votre premier réseau', + 'description' => 'Associez au moins un compte social pour commencer à programmer. Vous pourrez en ajouter d\'autres à tout moment.', + 'must_connect' => 'Connectez au moins un réseau pour continuer.', + ], +]; diff --git a/lang/fr/pagination.php b/lang/fr/pagination.php new file mode 100644 index 00000000..8eff3746 --- /dev/null +++ b/lang/fr/pagination.php @@ -0,0 +1,19 @@ + '« Précédent', + 'next' => 'Suivant »', + +]; diff --git a/lang/fr/passwords.php b/lang/fr/passwords.php new file mode 100644 index 00000000..8f4f8abb --- /dev/null +++ b/lang/fr/passwords.php @@ -0,0 +1,22 @@ + 'Votre mot de passe a été réinitialisé.', + 'sent' => 'Nous vous avons envoyé par e-mail le lien de réinitialisation de votre mot de passe.', + 'throttled' => 'Veuillez patienter avant de réessayer.', + 'token' => 'Ce jeton de réinitialisation de mot de passe est invalide.', + 'user' => 'Aucun utilisateur ne correspond à cette adresse e-mail.', + +]; diff --git a/lang/fr/posts.php b/lang/fr/posts.php new file mode 100644 index 00000000..e228799f --- /dev/null +++ b/lang/fr/posts.php @@ -0,0 +1,671 @@ + 'Publications', + 'search' => 'Rechercher des publications...', + 'all_posts' => 'Toutes les publications', + 'new_post' => 'Nouvelle publication', + 'no_posts' => 'Aucune publication trouvée', + 'no_search_results' => 'Aucune publication ne correspond à votre recherche', + 'try_different_search' => 'Essayez un autre mot-clé ou effacez la recherche.', + 'start_creating' => 'Commencez par créer votre première publication.', + 'filter_by_label' => 'Filtrer par étiquette', + 'label_search_placeholder' => 'Rechercher des étiquettes...', + 'no_labels' => 'Aucune étiquette trouvée.', + 'clear_label_filter' => 'Effacer le filtre d\'étiquette', + 'table' => [ + 'post' => 'Publication', + 'status' => 'Statut', + 'content' => 'Contenu', + 'platforms' => 'Plateformes', + 'labels' => 'Étiquettes', + 'scheduled_at' => 'Date', + 'actions' => '', + ], + 'manage_posts' => 'Gérez toutes vos publications', + 'delete_confirm' => 'Voulez-vous vraiment supprimer cette publication ?', + 'by' => 'par', + + 'actions' => [ + 'view' => 'Voir la publication', + 'delete' => 'Supprimer', + 'duplicate' => 'Dupliquer', + 'copy_id' => 'Copier l\'ID', + 'copied' => 'ID copié dans le presse-papiers', + ], + + 'form' => [ + 'post_type' => 'Type de publication', + 'board' => 'Tableau', + 'select_board' => 'Sélectionner un tableau', + 'search_board' => 'Rechercher un tableau...', + 'no_board_found' => 'Aucun tableau trouvé', + 'media' => 'Médias', + 'min' => 'Min', + 'uploading' => 'Import en cours...', + 'drop_to_upload' => 'Déposez pour importer', + 'drag_and_drop' => 'Glissez-déposez ou cliquez pour importer', + 'photos_and_videos' => 'Photos et vidéos', + 'photos_only' => 'Photos uniquement', + 'videos_only' => 'Vidéos uniquement', + 'drag_to_reorder' => 'Glissez pour réorganiser', + 'caption' => 'Légende', + 'write_caption' => 'Rédigez votre légende...', + 'content_exceeds_platform' => ':platform : trop long de :over caractères (max :limit).', + 'tiktok' => [ + 'settings' => 'Paramètres TikTok', + 'variant_label' => 'Type de publication', + 'variant' => [ + 'video' => 'Vidéo', + 'photo' => 'Carrousel photo', + ], + 'posting_to' => 'Publier sur', + 'privacy_level' => 'Qui peut voir cette vidéo ?', + 'privacy_placeholder' => 'Sélectionnez qui peut voir cette publication', + 'privacy' => [ + 'public' => 'Public pour tous', + 'friends' => 'Amis qui s\'abonnent mutuellement', + 'followers' => 'Abonnés', + 'private' => 'Moi uniquement', + 'private_disabled_branded' => 'La visibilité d\'un contenu de marque ne peut pas être définie sur privé.', + ], + 'privacy_hint' => 'Les options disponibles dépendent des paramètres de votre compte TikTok.', + 'auto_add_music' => 'Ajouter automatiquement de la musique', + 'auto_add_music_hint' => 'Cette fonctionnalité est disponible uniquement pour les photos. Elle ajoutera une musique par défaut que vous pourrez changer plus tard.', + 'yes' => 'Oui', + 'no' => 'Non', + 'allow_users' => 'Autoriser les utilisateurs à :', + 'comments' => 'Commenter', + 'duet' => 'Duo', + 'stitch' => 'Stitch', + 'is_aigc' => 'Vidéo réalisée avec l\'IA', + 'disclose' => 'Divulguer le contenu de la vidéo', + 'disclose_hint' => 'Activez pour indiquer que cette vidéo fait la promotion de biens ou de services en échange d\'une contrepartie. Votre vidéo peut vous promouvoir, promouvoir un tiers, ou les deux.', + 'promotional_organic_title' => 'Votre photo/vidéo sera étiquetée « Contenu promotionnel ».', + 'promotional_paid_title' => 'Votre photo/vidéo sera étiquetée « Partenariat rémunéré ».', + 'promotional_description' => 'Cela ne peut pas être modifié une fois votre vidéo publiée.', + 'compliance_incomplete' => 'Vous devez indiquer si votre contenu fait votre propre promotion, celle d\'un tiers, ou les deux.', + 'privacy_required' => 'Le niveau de confidentialité TikTok est requis lors de la publication.', + 'branded_cleared_private' => 'La confidentialité a été réinitialisée car un contenu de marque ne peut pas être privé.', + 'interaction_disabled_by_creator' => 'Désactivé dans les paramètres de votre compte TikTok', + 'max_duration_exceeded' => 'La vidéo dure :duration s, mais ce compte ne peut publier que des vidéos jusqu\'à :max s.', + 'processing_hint' => 'Après la publication, le traitement du contenu et son apparition sur votre profil TikTok peuvent prendre quelques minutes.', + 'brand_organic' => 'Votre marque', + 'brand_organic_hint' => 'Vous faites votre propre promotion ou celle de votre marque. Cette vidéo sera classée comme Contenu de marque organique.', + 'brand_content' => 'Contenu de marque', + 'brand_content_hint' => 'Vous faites la promotion d\'une autre marque ou d\'un tiers. Cette vidéo sera classée comme Contenu de marque.', + 'compliance' => [ + 'agree' => 'En publiant, vous acceptez la', + 'music_usage' => 'Confirmation d\'utilisation de la musique', + 'and' => 'et la', + 'branded_policy' => 'Politique de contenu de marque de TikTok', + ], + ], + 'instagram' => [ + 'settings' => 'Paramètres Instagram', + 'posting_to' => 'Publier sur', + 'variant_label' => 'Type de publication', + 'variant' => [ + 'feed' => 'Publication', + 'reel' => 'Reel', + 'story' => 'Story', + ], + 'aspect_label' => 'Format', + 'aspect' => [ + 'square' => 'Carré (1:1)', + 'portrait' => 'Portrait (4:5)', + 'landscape' => 'Paysage (16:9)', + 'original' => 'Original', + ], + ], + 'facebook' => [ + 'settings' => 'Paramètres Facebook', + 'posting_to' => 'Publier sur', + 'variant_label' => 'Type de publication', + 'variant' => [ + 'post' => 'Publication', + 'reel' => 'Reel', + 'story' => 'Story', + ], + 'aspect_label' => 'Format', + 'aspect' => [ + 'square' => 'Carré (1:1)', + 'portrait' => 'Portrait (4:5)', + 'landscape' => 'Paysage (16:9)', + 'original' => 'Original', + ], + ], + 'linkedin' => [ + 'settings' => 'Paramètres LinkedIn', + 'settings_page' => 'Paramètres de la page LinkedIn', + 'posting_to' => 'Publier sur', + 'document_title' => 'Titre du document', + 'document_title_placeholder' => 'Affiché sur votre publication de document PDF', + ], + 'pinterest' => [ + 'settings' => 'Paramètres Pinterest', + 'posting_to' => 'Publier sur', + 'variant_label' => 'Type d\'épingle', + 'variant' => [ + 'pin' => 'Épingle', + 'video_pin' => 'Épingle vidéo', + 'carousel' => 'Carrousel', + ], + 'board' => 'Tableau', + 'select_board' => 'Sélectionner un tableau', + 'no_boards' => 'Aucun tableau Pinterest trouvé. Créez-en un dans votre compte Pinterest d\'abord.', + 'search_board' => 'Rechercher des tableaux...', + 'no_board_found' => 'Aucun tableau ne correspond à votre recherche.', + 'board_required' => 'Sélectionnez un tableau Pinterest pour publier cette publication.', + ], + 'discord' => [ + 'settings' => 'Paramètres Discord', + 'posting_to' => 'Publier sur', + 'channel' => 'Salon', + 'select_channel' => 'Sélectionner un salon', + 'loading_channels' => 'Chargement des salons…', + 'search_channel' => 'Rechercher des salons…', + 'no_channels' => 'Aucun salon trouvé.', + 'channel_required' => 'Sélectionnez un salon Discord pour publier cette publication.', + 'mentions' => 'Mentions', + 'search_mention' => 'Mentionner un rôle ou un membre…', + 'embeds' => 'Embeds', + 'embed' => 'Embed', + 'add_embed' => 'Ajouter un embed', + 'embed_title' => 'Titre de l\'embed', + 'embed_description' => 'Description de l\'embed', + 'embed_url' => 'URL de l\'embed', + 'embed_image' => 'URL de l\'image', + 'embed_color' => 'Couleur', + ], + 'warnings' => [ + 'no_variant' => 'Choisissez un type de publication pour continuer.', + 'requires_media' => 'Ce type de publication nécessite au moins une image ou une vidéo.', + 'max_files_exceeded' => 'Ce type de publication accepte jusqu\'à :max fichiers médias (vous en avez :current).', + 'min_files_required' => 'Ce type de publication nécessite au moins :min fichiers médias (vous en avez :current).', + 'no_video_allowed' => 'Ce type de publication n\'accepte pas les vidéos.', + 'no_image_allowed' => 'Ce type de publication n\'accepte que les vidéos.', + 'no_document_allowed' => 'Ce type de publication n\'accepte pas les documents PDF.', + 'no_mixed_media' => 'Les images et une vidéo ne peuvent pas être combinées dans la même publication.', + 'document_not_alone' => 'Un PDF doit être publié seul, sans autres images ou vidéos.', + 'gif_not_allowed' => 'Cette plateforme n\'accepte pas les GIF. Supprimez le GIF ou choisissez un autre réseau.', + 'image_too_large' => 'L\'image dépasse la limite de :max pour ce type de publication (la vôtre est de :current).', + 'video_too_large' => 'La vidéo dépasse la limite de :max pour ce type de publication (la vôtre est de :current).', + 'document_too_large' => 'Le PDF dépasse la limite de :max pour ce type de publication (le vôtre est de :current).', + 'video_too_long' => 'La vidéo dure :current, mais ce type de publication autorise jusqu\'à :max.', + 'aspect_ratio_too_narrow' => 'Le format :current est trop haut pour ce type de publication (min :min).', + 'aspect_ratio_too_wide' => 'Le format :current est trop large pour ce type de publication (max :max).', + ], + ], + + 'status' => [ + 'pending' => 'En attente', + 'draft' => 'Brouillon', + 'scheduled' => 'Programmée', + 'publishing' => 'Publication en cours', + 'retrying' => 'Nouvelle tentative', + 'published' => 'Publiée', + 'partially_published' => 'Partiellement publiée', + 'failed' => 'Échec', + ], + + 'descriptions' => [ + 'draft' => 'Publications en attente de programmation', + 'scheduled' => 'Publications programmées pour publication', + 'published' => 'Publications déjà publiées', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'Générer avec l\'IA', + 'title' => 'Générer une publication avec l\'IA', + 'description' => 'Décrivez le sujet de la publication. L\'IA utilisera le contexte de votre marque pour la rédiger.', + 'prompt_label' => 'De quoi parle cette publication ?', + 'prompt_placeholder' => 'par ex. Annoncer notre nouvelle fonctionnalité de génération d\'images pour les carrousels', + 'preview_label' => 'Aperçu', + 'start' => 'Générer', + 'apply' => 'Utiliser ce contenu', + 'retry' => 'Réessayer', + 'cancel' => 'Annuler', + ], + 'review' => [ + 'button_tooltip' => 'Relire avec l\'IA', + 'title' => 'Relire la publication avec l\'IA', + 'description' => 'L\'IA analyse la grammaire, l\'orthographe et la clarté. Appliquez les suggestions qui vous conviennent.', + 'loading' => 'Relecture de votre texte...', + 'no_issues' => 'Aucun problème détecté. C\'est parfait.', + 'original' => 'Original', + 'suggestion' => 'Suggestion', + 'apply' => 'Appliquer', + 'apply_all' => 'Tout appliquer', + 'applied' => 'Appliqué', + 'cancel' => 'Annuler', + ], + 'image_regenerate' => [ + 'button' => 'Ajuster', + 'title' => 'Ajuster l\'image IA', + 'description' => 'Décrivez la correction. La nouvelle image remplace l\'actuelle et conserve sa position dans le carrousel.', + 'instruction_label' => 'Instruction', + 'instruction_placeholder' => 'par ex. Corrigez la faute dans le titre et éclaircissez l\'arrière-plan.', + 'processing' => 'Régénération de l\'image... cela peut prendre quelques secondes.', + 'submit' => 'Régénérer l\'image', + 'cancel' => 'Annuler', + 'success' => 'Image mise à jour. La nouvelle version a remplacé la précédente dans votre publication.', + 'fallback_title' => 'Améliorer le texte de cette image', + 'errors' => [ + 'required' => 'L\'instruction est obligatoire.', + 'start_failed' => 'Impossible de démarrer la régénération.', + 'unavailable' => 'Impossible de régénérer cette image pour le moment.', + 'timeout' => 'La régénération prend plus de temps que prévu. Réessayez dans un instant.', + 'media_not_found' => 'Élément média introuvable.', + 'not_ai_media' => 'Seuls les médias générés par l\'IA peuvent être régénérés.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'Publication image', + 'description' => 'Image IA avec un titre et une légende.', + ], + 'carousel' => [ + 'name' => 'Carrousel', + 'description' => 'Carrousel à plusieurs diapositives avec une légende.', + ], + 'tweet_card' => [ + 'name' => 'Carte tweet', + 'description' => 'Votre publication mise en forme comme une publication X/Twitter.', + ], + 'tweet_card_image' => [ + 'name' => 'Carte tweet avec photo', + 'description' => 'Votre publication en carte X/Twitter sur une photo floutée.', + ], + ], + ], + + 'show' => [ + 'title' => 'Détails de la publication', + 'edit' => 'Modifier', + 'back' => 'Retour', + 'no_content' => 'Aucune légende', + 'platforms' => 'Plateformes', + 'no_platforms' => 'Aucune plateforme sélectionnée.', + 'view_on_platform' => 'Voir sur la plateforme', + 'published_on' => 'Publiée le :date', + 'scheduled_for' => 'Programmée pour le :date', + 'draft' => 'Brouillon', + 'status_pending' => 'En attente', + 'metrics' => 'Métriques', + 'metrics_loading' => 'Chargement des métriques…', + 'metrics_unavailable' => 'Métriques pas encore disponibles pour cette plateforme.', + 'metrics_empty' => 'Aucune métrique renvoyée.', + ], + + 'edit' => [ + 'title' => 'Modifier la publication', + 'view_title' => 'Voir la publication', + 'labels' => 'Étiquettes', + 'no_labels' => 'Aucune étiquette créée pour le moment', + 'schedule' => 'Programmer', + 'pick_time' => 'Choisir l\'heure', + 'pick_time_past' => 'Choisissez une date et une heure futures.', + 'post_now' => 'Publier maintenant', + 'time' => 'Heure', + 'cancel' => 'Annuler', + 'delete' => 'Supprimer', + 'schedule_for' => 'Programmer pour le', + 'schedule_date' => 'Date de programmation', + 'unschedule' => 'Déprogrammer', + 'saving' => 'Enregistrement...', + 'saved' => 'Enregistré', + 'draft' => 'Brouillon', + 'media' => 'Médias', + 'add_media' => 'Ajouter un média', + 'caption' => 'Légende', + 'caption_placeholder' => 'Rédigez votre légende...', + 'compose_title' => 'Créer une publication', + 'compose_subtitle' => 'Composez votre message et ajoutez des médias', + 'preview_empty' => [ + 'title' => 'Aucune plateforme sélectionnée', + 'description' => 'Sélectionnez une plateforme de publication pour voir l\'aperçu.', + ], + 'drop_zone_title' => 'Ajouter un média', + 'drop_zone_subtitle' => 'Glissez-déposez des fichiers ou cliquez pour parcourir', + 'add' => 'Ajouter', + 'publish_to' => 'Publier sur', + 'organize' => 'Organiser', + 'signatures' => 'Signatures', + 'view_on_platform' => 'Voir sur la plateforme', + 'platform_status' => 'Statut de la plateforme', + 'compliance_incomplete' => 'Certains paramètres de plateforme sont incomplets ou incompatibles avec les médias joints.', + 'compliance' => [ + 'requires_content_or_media' => 'Ajoutez du texte ou un média pour publier.', + 'requires_media' => 'Ajoutez une image ou une vidéo pour publier ici.', + 'too_many_files' => 'Seulement :max fichier(s) autorisé(s) pour ce format.', + 'too_few_files' => 'Ajoutez au moins :min fichiers pour ce format.', + 'no_videos' => 'Seules les images sont autorisées pour ce format.', + 'no_images' => 'Seules les vidéos sont autorisées pour ce format.', + 'no_mixed_media' => 'Les images et les vidéos ne peuvent pas être combinées dans la même publication.', + 'no_gifs' => 'Les GIF ne sont pas pris en charge ici.', + 'no_documents' => 'Les documents PDF ne sont pas pris en charge par ce format.', + 'document_not_alone' => 'Un PDF doit être publié seul, sans autres images ou vidéos.', + 'video_too_large' => 'La vidéo dépasse la limite de taille pour cette plateforme.', + 'video_too_long' => 'La vidéo doit durer moins de :seconds secondes pour ce format.', + 'image_too_large' => 'L\'image dépasse la limite de taille pour cette plateforme.', + 'document_too_large' => 'Le PDF dépasse la limite de taille pour cette plateforme.', + 'aspect_ratio_invalid' => 'Le format d\'image n\'est pas pris en charge par ce format.', + 'no_content_type' => 'Choisissez un type de contenu pour cette plateforme.', + 'requires_text' => 'Ajoutez du texte — ce format nécessite un titre.', + ], + 'publishing' => 'Publication en cours...', + 'publishing_overlay_title' => 'Votre publication est en cours de publication', + 'publishing_overlay_subtitle' => 'Cela peut prendre quelques instants. Vous pouvez quitter cette page en toute sécurité.', + 'scheduled_overlay_title' => 'Cette publication est programmée', + 'scheduled_overlay_subtitle' => 'Programmée pour le :date. Déprogrammez-la d\'abord pour la modifier.', + 'unschedule_cta' => 'Déprogrammer pour modifier', + + 'tabs' => [ + 'preview' => 'Aperçu', + 'channels' => 'Canaux', + 'comments' => 'Commentaires', + 'comments_empty' => 'Aucun commentaire pour le moment.', + ], + + 'media_picker' => [ + 'title' => 'Choisir dans la galerie', + 'search' => 'Rechercher un média...', + 'empty' => 'Aucun média dans votre galerie pour le moment', + 'cancel' => 'Annuler', + 'add' => 'Ajouter', + 'add_count' => 'Ajouter :count', + ], + + 'emoji_picker' => [ + 'search' => 'Rechercher un émoji', + 'empty' => 'Aucun émoji trouvé', + 'recent' => 'Fréquemment utilisés', + 'smileys' => 'Smileys et émotion', + 'people' => 'Personnes et corps', + 'nature' => 'Animaux et nature', + 'food' => 'Nourriture et boissons', + 'activities' => 'Activités', + 'travel' => 'Voyage et lieux', + 'objects' => 'Objets', + 'symbols' => 'Symboles', + 'flags' => 'Drapeaux', + ], + + 'status' => [ + 'pending' => 'En attente', + 'scheduled' => 'Programmée', + 'published' => 'Publiée', + 'publishing' => 'Publication en cours...', + 'retrying' => 'Nouvelle tentative...', + 'failed' => 'Échec', + ], + + 'delete_modal' => [ + 'title' => 'Supprimer la publication', + 'description' => 'Voulez-vous vraiment supprimer cette publication ? Cette action est irréversible.', + 'action' => 'Supprimer', + 'cancel' => 'Annuler', + ], + + 'sync_enable' => [ + 'title' => 'Activer la synchronisation ?', + 'description' => 'Toutes les plateformes partageront le même contenu. Toutes les modifications personnalisées apportées à des plateformes individuelles seront remplacées par le contenu actuel.', + 'cancel' => 'Annuler', + 'action' => 'Activer la synchronisation', + ], + + 'sync_disable' => [ + 'title' => 'Désactiver la synchronisation ?', + 'description' => 'Chaque plateforme conservera son contenu actuel, mais les modifications futures ne s\'appliqueront qu\'à la plateforme que vous modifiez.', + 'customize_note' => 'Vous pourrez personnaliser le contenu de chaque plateforme individuellement.', + 'cancel' => 'Annuler', + 'action' => 'Désactiver la synchronisation', + ], + + 'platforms_dialog' => [ + 'title' => 'Sélectionner les plateformes', + 'description' => 'Choisissez les plateformes sur lesquelles publier cette publication.', + ], + + 'signatures_modal' => [ + 'search' => 'Rechercher des signatures...', + 'no_results' => 'Aucune signature trouvée.', + ], + + 'validation' => [ + 'select_board' => 'Sélectionner un tableau', + 'images_not_supported' => 'Images non prises en charge', + 'videos_not_supported' => 'Vidéos non prises en charge', + 'max_images' => ':count images max', + 'requires_media' => 'Média requis', + 'requires_content' => 'Un contenu texte est requis', + 'exceeded' => ':count dépassé', + 'does_not_support_images' => ':platform ne prend pas en charge les images', + 'supports_up_to_images' => ':platform prend en charge jusqu\'à :count images', + 'does_not_support_videos' => ':platform ne prend pas en charge les vidéos', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'Publication', + 'description' => 'Apparaît dans votre fil et votre profil', + ], + 'instagram_reel' => [ + 'label' => 'Reel', + 'description' => 'Courte vidéo jusqu\'à 90 secondes', + ], + 'instagram_story' => [ + 'label' => 'Story', + 'description' => 'Disparaît après 24 heures', + ], + 'linkedin_post' => [ + 'label' => 'Publication', + 'description' => 'Publication standard — image unique, multi-images, vidéo ou PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'Publication', + 'description' => 'Publication standard — image unique, multi-images, vidéo ou PDF', + ], + 'facebook_post' => [ + 'label' => 'Publication', + 'description' => 'Publication standard sur votre page', + ], + 'facebook_reel' => [ + 'label' => 'Reel', + 'description' => 'Courte vidéo jusqu\'à 90 secondes', + ], + 'facebook_story' => [ + 'label' => 'Story', + 'description' => 'Story vidéo verticale, jusqu\'à 60 secondes', + ], + 'tiktok_video' => [ + 'label' => 'Vidéo', + 'description' => 'Contenu vidéo au format court', + ], + 'tiktok_photo' => [ + 'label' => 'Carrousel photo', + 'description' => 'Jusqu\'à 35 photos en carrousel à faire défiler', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => 'Vidéo verticale jusqu\'à 60 secondes', + ], + 'x_post' => [ + 'label' => 'Publication', + 'description' => 'Tweet avec texte et médias', + ], + 'threads_post' => [ + 'label' => 'Publication', + 'description' => 'Publication texte avec média facultatif', + ], + 'pinterest_pin' => [ + 'label' => 'Épingle', + 'description' => 'Épingle image standard', + ], + 'pinterest_video_pin' => [ + 'label' => 'Épingle vidéo', + 'description' => 'Épingle vidéo (4 s à 15 min)', + ], + 'pinterest_carousel' => [ + 'label' => 'Carrousel', + 'description' => 'Carrousel multi-images (2 à 5 images)', + ], + 'bluesky_post' => [ + 'label' => 'Publication', + 'description' => 'Publication texte avec images facultatives', + ], + 'mastodon_post' => [ + 'label' => 'Publication', + 'description' => 'Publication texte avec média facultatif', + ], + 'telegram_post' => [ + 'label' => 'Publication', + 'description' => 'Publication texte avec média facultatif', + ], + 'discord_message' => [ + 'label' => 'Message', + 'description' => 'Message vers un salon Discord avec médias et embeds facultatifs', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'Page LinkedIn', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Page Facebook', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'Publication programmée avec succès !', + 'deleted' => 'Publication supprimée avec succès !', + 'duplicated' => 'Publication dupliquée en brouillon.', + 'cannot_edit_finalized' => 'Cette publication a déjà été traitée et ne peut pas être republiée. Dupliquez-la pour réessayer.', + 'cannot_delete_published' => 'Les publications publiées ne peuvent pas être supprimées.', + 'connect_first' => 'Connectez au moins un réseau social avant de créer une publication.', + ], + + 'errors' => [ + 'account_disconnected' => 'Le compte social est déconnecté', + 'account_inactive' => 'Le compte social est désactivé', + 'account_token_expired' => 'La session du compte social a expiré — veuillez reconnecter', + ], + + 'delete' => [ + 'title' => 'Supprimer la publication ?', + 'description' => 'Cette action est irréversible. La publication et tous ses médias seront définitivement supprimés.', + 'confirm' => 'Oui, supprimer', + 'cancel' => 'Annuler', + ], + + 'create' => [ + 'title' => 'Créer une nouvelle publication', + 'description' => 'Choisissez comment vous souhaitez commencer.', + 'scratch_title' => 'Partir de zéro', + 'scratch_description' => 'Ouvrez une publication vierge et rédigez tout vous-même.', + 'ai_title' => 'Générer avec l\'IA', + 'ai_description' => 'Décrivez ce que vous voulez et l\'IA génère le contenu pour vous.', + 'ai_configure_description' => 'Choisissez un format et décrivez la publication que vous souhaitez créer.', + 'ai_pick_template_description' => 'Choisissez un style pour votre publication générée par l\'IA.', + 'template_title' => 'Utiliser un modèle', + 'template_description' => 'Choisissez parmi nos modèles sélectionnés et personnalisez.', + 'coming_soon' => 'Bientôt disponible', + + 'preview' => [ + 'image_title' => 'Titre de l\'image', + 'image_body' => 'Corps de l\'image', + ], + + 'steps' => [ + 'template_picker_title' => 'Choisissez un style', + 'format_title' => 'Choisissez un format', + 'format_description' => 'Sélectionnez le type de publication que vous souhaitez créer.', + 'account_title' => 'Choisissez un compte', + 'account_description' => 'Sélectionnez le compte social sur lequel publier.', + 'media_title' => 'Options de médias', + 'media_carousel' => 'Combien de diapositives ?', + 'media_optional' => 'Inclure des images ?', + 'media_optional_label' => 'Combien d\'images ?', + 'media_none' => 'Aucune', + 'media_count_label' => 'Nombre d\'images', + 'prompt_title' => 'Décrivez votre publication', + 'prompt_label' => 'De quoi parle cette publication ?', + 'prompt_placeholder' => 'par ex. Annoncer notre nouvelle fonctionnalité de carrousel pour Instagram', + 'preview_error' => 'Une erreur s\'est produite. Veuillez réessayer.', + 'loading_page_title' => 'Génération de votre publication', + 'loading_eta' => 'Temps estimé : environ :minutes.', + 'loading_eta_minute_one' => '1 minute', + 'loading_eta_minute_other' => ':count minutes', + 'loading_leave_title' => 'Vous pouvez continuer à travailler.', + 'loading_leave_body' => 'Nous vous préviendrons lorsque la publication sera prête.', + 'loading_leave_cta' => 'Aller au calendrier', + 'loading_create_another_cta' => 'Créer une autre publication', + 'loading_tip_credits' => 'Chaque image IA utilise environ 15 crédits.', + 'loading_tip_edit' => 'Vous pourrez tout modifier une fois la publication prête.', + 'loading_tip_draft' => 'Les publications générées arrivent dans vos brouillons.', + 'loading_tip_brand' => 'Ajustez les paramètres de votre marque pour influencer les futures publications.', + 'loading_tip_carousel' => 'Les carrousels affichent une diapositive par image importée.', + 'loading_tip_quality' => 'La qualité des images est réglée pour équilibrer vitesse et coût.', + 'create' => 'Créer la publication', + 'back' => 'Retour', + 'next' => 'Continuer', + 'cancel' => 'Annuler', + 'discard' => 'Abandonner', + 'retry' => 'Réessayer', + 'no_platforms' => 'Aucun compte connecté', + 'connect_first' => 'Connectez au moins un compte social pour utiliser la génération par IA.', + 'no_account_for_template' => 'Connectez un compte compatible pour utiliser ce modèle.', + + 'format' => [ + 'instagram_feed' => 'Publication Instagram (fil)', + 'instagram_carousel' => 'Carrousel Instagram', + 'linkedin_post' => 'Publication LinkedIn', + 'linkedin_page_post' => 'Publication de page LinkedIn', + 'x_post' => 'Publication X', + 'bluesky_post' => 'Publication Bluesky', + 'threads_post' => 'Publication Threads', + 'mastodon_post' => 'Publication Mastodon', + 'telegram_post' => 'Publication Telegram', + 'discord_message' => 'Message Discord', + 'facebook_post' => 'Publication Facebook', + 'pinterest_pin' => 'Épingle Pinterest', + 'instagram_story' => 'Story Instagram', + 'facebook_story' => 'Story Facebook', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'Choisissez un modèle', + 'browser_description' => 'Partez d\'un modèle sélectionné et adaptez-le.', + 'search_placeholder' => 'Rechercher des modèles…', + 'no_search_results' => 'Aucun modèle ne correspond à votre recherche', + 'try_different_search' => 'Essayez un autre mot-clé ou effacez la recherche.', + 'slides_count' => '{count} diapositive|{count} diapositives', + 'all_platforms' => 'Toutes les plateformes', + 'platform_search_placeholder' => 'Rechercher une plateforme…', + 'no_platform_match' => 'Aucune plateforme ne correspond.', + 'use_this' => 'Utiliser ce modèle', + 'no_templates' => 'Aucun modèle disponible.', + 'applying' => 'Application du modèle…', + 'category' => [ + 'product_launch' => 'Lancement de produit', + 'promotion' => 'Promotion', + 'educational' => 'Éducatif', + 'behind_the_scenes' => 'Coulisses', + 'testimonial' => 'Témoignage', + 'industry_tip' => 'Astuce du secteur', + 'event' => 'Événement', + 'engagement' => 'Engagement', + ], + ], +]; diff --git a/lang/fr/settings.php b/lang/fr/settings.php new file mode 100644 index 00000000..f83725f6 --- /dev/null +++ b/lang/fr/settings.php @@ -0,0 +1,356 @@ + 'Paramètres', + 'description' => 'Gérez votre profil et les paramètres de votre compte', + + 'hub' => [ + 'title' => 'Paramètres', + 'description' => 'Choisissez ce que vous souhaitez gérer.', + 'profile' => [ + 'title' => 'Profil', + 'description' => 'Mettez à jour vos informations personnelles, votre mot de passe et vos préférences de notification.', + ], + 'workspace' => [ + 'title' => 'Espace de travail', + 'description' => 'Configurez votre espace de travail, votre marque, vos membres et vos clés API.', + ], + 'account' => [ + 'title' => 'Compte', + 'description' => 'Gérez les informations, l\'utilisation et la facturation de votre compte.', + ], + ], + + 'nav' => [ + 'profile' => 'Profil', + 'authentication' => 'Authentification', + 'workspace' => 'Espace de travail', + 'members' => 'Membres', + 'notifications' => 'Notifications', + 'billing' => 'Facturation', + ], + + 'notifications' => [ + 'title' => 'Préférences de notification', + 'heading' => 'Notifications par e-mail', + 'description' => 'Choisissez les notifications par e-mail que vous souhaitez recevoir', + 'post_published' => 'Publication publiée', + 'post_published_description' => 'Recevez un e-mail lorsque votre publication est publiée avec succès', + 'post_failed' => 'Échec de la publication', + 'post_failed_description' => 'Recevez un e-mail lorsque la publication de votre contenu échoue', + 'account_disconnected' => 'Compte déconnecté', + 'account_disconnected_description' => 'Recevez un e-mail lorsqu\'un compte social est déconnecté', + 'save' => 'Enregistrer les préférences', + ], + + 'profile' => [ + 'title' => 'Paramètres du profil', + 'photo_heading' => 'Photo de profil', + 'photo_description' => 'Importez une photo de profil', + 'heading' => 'Informations du profil', + 'description' => 'Mettez à jour votre nom et votre adresse e-mail', + 'avatar' => 'Avatar', + 'name' => 'Nom', + 'name_placeholder' => 'Nom complet', + 'email' => 'Adresse e-mail', + 'email_placeholder' => 'Adresse e-mail', + 'email_unverified' => 'Votre adresse e-mail n\'est pas vérifiée.', + 'resend_verification' => 'Cliquez ici pour renvoyer l\'e-mail de vérification.', + 'verification_sent' => 'Un nouveau lien de vérification a été envoyé à votre adresse e-mail.', + 'save' => 'Enregistrer', + ], + + 'authentication' => [ + 'title' => 'Authentification', + 'page_title' => 'Paramètres d\'authentification', + 'sessions' => [ + 'title' => 'Sessions actives', + 'description' => 'Si vous remarquez quelque chose de suspect, déconnectez les autres appareils.', + 'unknown_browser' => 'Navigateur inconnu', + 'unknown_ip' => 'IP inconnue', + 'on' => 'le', + 'active_now' => 'Actif maintenant', + 'log_out_others' => 'Déconnecter les autres appareils', + 'modal_title' => 'Déconnecter les autres appareils', + 'modal_description_password' => 'Saisissez votre mot de passe actuel pour confirmer que vous souhaitez déconnecter les autres sessions de navigateur.', + 'modal_description_email' => 'Saisissez votre adresse e-mail pour confirmer que vous souhaitez déconnecter les autres sessions de navigateur.', + 'password_placeholder' => 'Mot de passe actuel', + 'email_placeholder' => 'L\'e-mail de votre compte', + 'cancel' => 'Annuler', + 'submit' => 'Déconnecter les autres appareils', + 'email_mismatch' => 'L\'adresse e-mail ne correspond pas à votre compte.', + 'flash_logged_out' => 'Vous avez été déconnecté des autres appareils.', + ], + 'password' => [ + 'update_title' => 'Modifier le mot de passe', + 'set_title' => 'Définir un mot de passe', + 'update_description' => 'Assurez-vous que votre compte utilise un mot de passe long et aléatoire pour rester sécurisé.', + 'set_description' => 'Ajoutez un mot de passe pour pouvoir vous connecter sans fournisseur associé.', + 'current_password' => 'Mot de passe actuel', + 'new_password' => 'Nouveau mot de passe', + 'confirm_password' => 'Confirmer le mot de passe', + 'save' => 'Enregistrer le mot de passe', + 'set' => 'Définir le mot de passe', + ], + 'providers' => [ + 'title' => 'Comptes connectés', + 'description' => 'Connectez-vous plus rapidement grâce à ces fournisseurs associés.', + 'connected' => 'Connecté', + 'not_connected' => 'Non connecté', + 'connect' => 'Connecter', + 'disconnect' => 'Déconnecter', + 'flash_disconnected' => ':provider déconnecté avec succès.', + 'flash_connected' => ':provider connecté avec succès.', + 'flash_already_linked' => 'Ce compte :provider est déjà associé à un autre utilisateur.', + 'flash_cannot_disconnect' => 'Vous ne pouvez pas déconnecter votre seule méthode de connexion. Définissez d\'abord un mot de passe ou connectez un autre fournisseur.', + ], + ], + + 'delete_account' => [ + 'heading' => 'Supprimer le compte', + 'description' => 'Supprimez votre compte et toutes ses ressources', + 'warning' => 'Avertissement', + 'warning_message' => 'Veuillez procéder avec prudence, cette action est irréversible.', + 'button' => 'Supprimer le compte', + 'modal_title' => 'Voulez-vous vraiment supprimer votre compte ?', + 'modal_description_password' => 'Une fois votre compte supprimé, toutes ses ressources et données seront également supprimées définitivement. Veuillez saisir votre mot de passe pour confirmer.', + 'modal_description_email' => 'Une fois votre compte supprimé, toutes ses ressources et données seront également supprimées définitivement. Veuillez saisir votre adresse e-mail :email pour confirmer.', + 'password' => 'Mot de passe', + 'password_placeholder' => 'Mot de passe', + 'email_placeholder' => 'L\'e-mail de votre compte', + 'email_mismatch' => 'L\'adresse e-mail ne correspond pas à votre compte.', + 'cancel' => 'Annuler', + 'confirm' => 'Supprimer le compte', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'Espace de travail', + 'brand' => 'Marque', + 'users' => 'Membres', + 'api_keys' => 'Clés API', + ], + 'title' => 'Paramètres de l\'espace de travail', + 'logo_heading' => 'Logo de l\'espace de travail', + 'logo_description' => 'Importez un logo pour votre espace de travail', + 'heading' => 'Nom de l\'espace de travail', + 'description' => 'Mettez à jour le nom de votre espace de travail', + 'members_heading' => 'Membres', + 'members_description' => 'Gérez les membres et les invitations de l\'espace de travail', + 'name' => 'Nom', + 'name_placeholder' => 'Mon espace de travail', + 'save' => 'Enregistrer', + ], + + 'brand' => [ + 'title' => 'Marque', + 'description' => 'Configurez l\'identité de votre marque pour le contenu généré par l\'IA.', + 'name' => 'Nom de l\'espace de travail', + 'name_placeholder' => 'Ma marque', + 'website' => 'Site web', + 'website_placeholder' => 'https://yourbrand.com', + 'brand_description' => 'Description', + 'brand_description_placeholder' => 'Parlez-nous de votre marque, de ce que vous faites et de votre audience...', + 'voice' => 'Voix de la marque', + 'voice_description' => 'Choisissez les traits qui définissent le ton de votre contenu.', + 'voice_group' => [ + 'pov' => 'Point de vue', + 'formality' => 'Formalité', + 'energy' => 'Énergie', + 'humor' => 'Humour', + 'attitude' => 'Attitude', + 'warmth' => 'Chaleur', + 'confidence' => 'Assurance', + 'style' => 'Style', + ], + 'voice_trait' => [ + 'first_person' => 'Première personne', + 'second_person' => 'Deuxième personne (vous)', + 'third_person' => 'Troisième personne', + 'formal' => 'Formel', + 'balanced' => 'Équilibré', + 'casual' => 'Décontracté', + 'calm' => 'Calme', + 'moderate' => 'Modéré', + 'enthusiastic' => 'Enthousiaste', + 'vibrant' => 'Vibrant', + 'serious' => 'Sérieux', + 'dry' => 'Pince-sans-rire', + 'witty' => 'Spirituel', + 'playful' => 'Enjoué', + 'respectful' => 'Respectueux', + 'even_handed' => 'Impartial', + 'bold' => 'Audacieux', + 'provocative' => 'Provocateur', + 'neutral' => 'Neutre', + 'friendly' => 'Amical', + 'empathetic' => 'Empathique', + 'humble' => 'Humble', + 'confident' => 'Assuré', + 'assertive' => 'Affirmé', + 'direct' => 'Direct', + 'concise' => 'Concis', + 'transparent' => 'Transparent', + 'no_hype' => 'Sans esbroufe', + 'practical' => 'Pratique', + 'data_driven' => 'Axé sur les données', + 'storytelling' => 'Narratif', + 'inspirational' => 'Inspirant', + 'educational' => 'Éducatif', + 'technical' => 'Technique', + 'minimalist' => 'Peu d\'émojis', + ], + 'brand_color' => 'Couleur de la marque', + 'background_color' => 'Couleur de fond', + 'text_color' => 'Couleur du texte', + 'font' => 'Police', + 'image_style' => 'Style d\'image', + 'image_style_description' => 'Style visuel appliqué lors de la génération des images de diapositives et de couverture des publications IA.', + 'image_style_cinematic' => 'Cinématographique', + 'image_style_illustration' => 'Illustration', + 'image_style_isometric_3d' => 'Isométrique', + 'image_style_cartoon' => 'Dessin animé', + 'image_style_typographic' => 'Typographique', + 'image_style_infographic' => 'Infographie', + 'image_style_minimalist' => 'Minimaliste', + 'image_style_mockup' => 'Maquette', + 'content_language' => 'Langue du contenu', + 'content_language_description' => 'Langue utilisée pour les légendes, les hashtags générés par l\'IA et tout texte à l\'intérieur des images ou vidéos générées.', + ], + + 'members' => [ + 'title' => 'Membres', + 'heading' => 'Membres de l\'équipe', + 'description' => 'Gérez les membres et les invitations de cet espace de travail', + + 'cancel' => 'Annuler', + 'remove' => 'Retirer', + 'make_role' => 'Nommer :role', + + 'invite' => [ + 'title' => 'Inviter un membre', + 'description' => 'Envoyez une invitation par e-mail pour ajouter des collaborateurs', + 'email' => 'E-mail', + 'email_placeholder' => 'collaborateur@email.com', + 'role' => 'Rôle', + 'role_placeholder' => 'Sélectionner un rôle', + 'submit' => 'Envoyer l\'invitation', + ], + + 'pending' => [ + 'title' => 'Invitations en attente', + 'description' => 'Invitations en attente d\'acceptation', + 'empty' => 'Aucune invitation en attente', + ], + + 'list' => [ + 'title' => 'Membres', + 'description' => 'Personnes ayant accès à cet espace de travail', + 'empty' => 'Aucun membre en dehors du propriétaire', + ], + + 'remove_modal' => [ + 'title' => 'Retirer le membre', + 'description' => 'Voulez-vous vraiment retirer ce membre de l\'espace de travail ? Il perdra l\'accès à toutes les ressources de l\'espace de travail.', + 'action' => 'Retirer le membre', + ], + + 'cancel_invite_modal' => [ + 'title' => 'Annuler l\'invitation', + 'description' => 'Voulez-vous vraiment annuler cette invitation ?', + 'action' => 'Annuler l\'invitation', + ], + + 'roles' => [ + 'owner' => 'Propriétaire', + 'admin' => 'Administrateur', + 'member' => 'Membre', + 'viewer' => 'Lecteur', + ], + + 'flash' => [ + 'invite_sent' => 'Invitation envoyée avec succès !', + 'invite_deleted' => 'Invitation supprimée.', + 'member_removed' => 'Membre retiré avec succès.', + 'role_updated' => 'Rôle du membre mis à jour.', + 'wrong_email' => 'Cette invitation concerne une autre adresse e-mail.', + 'already_member' => 'Vous êtes déjà membre de cet espace de travail.', + 'invite_accepted' => 'Bienvenue ! Vous êtes maintenant membre de l\'espace de travail.', + 'invite_declined' => 'Invitation refusée.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'Compte', + 'usage' => 'Utilisation', + 'billing' => 'Facturation', + ], + 'title' => 'Paramètres du compte', + 'description' => 'Gérez le nom de votre compte et l\'e-mail de facturation', + 'name' => 'Nom du compte', + 'name_placeholder' => 'Mon entreprise', + 'billing_email' => 'E-mail de facturation', + 'billing_email_placeholder' => 'facturation@entreprise.com', + 'billing_email_hint' => 'Cet e-mail sera utilisé pour les factures et les communications de facturation de Stripe.', + 'submit' => 'Enregistrer', + ], + + 'flash' => [ + 'account_updated' => 'Compte mis à jour avec succès !', + 'profile_updated' => 'Profil mis à jour avec succès !', + 'password_updated' => 'Mot de passe mis à jour avec succès !', + 'workspace_updated' => 'Paramètres mis à jour avec succès !', + 'photo_updated' => 'Photo mise à jour avec succès !', + 'photo_deleted' => 'Photo supprimée avec succès !', + 'logo_updated' => 'Logo importé avec succès !', + 'logo_deleted' => 'Logo supprimé avec succès !', + 'notifications_updated' => 'Préférences de notification mises à jour !', + ], + + 'api_keys' => [ + 'title' => 'Clés API', + 'page_title' => 'Clés API', + 'heading' => 'Clés API', + 'description' => 'Gérez les clés API pour l\'accès programmatique à votre espace de travail.', + 'create' => 'Créer une clé API', + 'copy' => 'Copier', + 'new_token_message' => 'Votre nouvelle clé API a été créée. Copiez-la maintenant — vous ne pourrez plus la voir par la suite.', + 'table' => [ + 'name' => 'Nom', + 'key' => 'Clé', + 'status' => 'Statut', + 'expires' => 'Expire le', + 'last_used' => 'Dernière utilisation', + 'never' => 'Jamais', + ], + 'actions' => [ + 'copy_id' => 'Copier l\'ID de la clé API', + 'copy_id_success' => 'ID de la clé API copié dans le presse-papiers', + 'delete' => 'Supprimer', + ], + 'empty' => [ + 'title' => 'Aucune clé API pour le moment', + 'description' => 'Créez une clé API pour accéder à votre espace de travail de manière programmatique.', + ], + 'delete_modal' => [ + 'title' => 'Supprimer la clé API', + 'description' => 'Voulez-vous vraiment supprimer cette clé API ? Toutes les applications utilisant cette clé perdront immédiatement l\'accès.', + 'action' => 'Supprimer la clé API', + ], + 'create_dialog' => [ + 'title' => 'Créer une clé API', + 'description' => 'Créez une nouvelle clé API pour l\'accès programmatique à votre espace de travail.', + 'name' => 'Nom', + 'name_placeholder' => 'par ex. Clé API de production', + 'expires' => 'Date d\'expiration (facultatif)', + 'expires_placeholder' => 'Aucune expiration', + 'submit' => 'Créer', + 'cancel' => 'Annuler', + ], + 'flash' => [ + 'created' => 'Clé API créée avec succès !', + 'deleted' => 'Clé API supprimée avec succès !', + ], + ], +]; diff --git a/lang/fr/sidebar.php b/lang/fr/sidebar.php new file mode 100644 index 00000000..a6325025 --- /dev/null +++ b/lang/fr/sidebar.php @@ -0,0 +1,61 @@ + 'Espaces de travail', + 'select_workspace' => 'Sélectionner un espace de travail', + 'create_workspace' => 'Créer un espace de travail', + 'create_post' => 'Créer une publication', + 'profile' => 'Profil', + 'log_out' => 'Se déconnecter', + + 'workspace' => 'Espace de travail : :name', + 'workspace_select' => 'Espace de travail : Sélectionner', + + 'theme' => 'Thème : :name', + 'theme_light' => 'Clair', + 'theme_dark' => 'Sombre', + 'theme_system' => 'Système', + + 'language' => 'Langue : :name', + 'language_select' => 'Langue : Sélectionner', + + 'groups' => [ + 'posts' => 'Publications', + 'workspace' => 'Espace de travail', + 'others' => 'Autres', + ], + + 'analytics' => 'Statistiques', + 'automations' => 'Automatisations', + 'settings' => 'Paramètres', + + 'posts' => [ + 'calendar' => 'Calendrier', + 'all' => 'Toutes', + 'scheduled' => 'Programmées', + 'posted' => 'Publiées', + 'drafts' => 'Brouillons', + ], + + 'workspace' => [ + 'connections' => 'Connexions', + 'signatures' => 'Signatures', + 'labels' => 'Étiquettes', + 'assets' => 'Médias', + 'api_keys' => 'Clés API', + ], + + 'notifications' => 'Notifications', + 'mark_all_read' => 'Tout marquer comme lu', + 'mark_as_read' => 'Marquer comme lu', + 'archive_all' => 'Tout archiver', + 'no_notifications' => 'Aucune notification', + + 'support' => [ + 'docs' => 'Documentation', + 'referral' => 'Gagnez 30 % de parrainage', + 'stay_updated' => 'Rester informé', + ], +]; diff --git a/lang/fr/signatures.php b/lang/fr/signatures.php new file mode 100644 index 00000000..988be272 --- /dev/null +++ b/lang/fr/signatures.php @@ -0,0 +1,59 @@ + 'Signatures', + 'description' => 'Créez des signatures réutilisables à ajouter rapidement à vos publications', + 'search' => 'Rechercher des signatures...', + 'new' => 'Nouvelle signature', + 'empty_title' => 'Aucune signature pour le moment', + 'empty_description' => 'Créez des signatures pour ajouter rapidement des hashtags, des liens ou tout texte réutilisable à vos publications', + 'no_search_results' => 'Aucune signature ne correspond à votre recherche', + 'try_different_search' => 'Essayez un autre mot-clé ou effacez la recherche.', + 'table' => [ + 'name' => 'Nom', + 'content' => 'Contenu', + 'created_at' => 'Créée le', + ], + + 'actions' => [ + 'edit' => 'Modifier la signature', + 'delete' => 'Supprimer la signature', + ], + + 'create' => [ + 'title' => 'Créer une signature', + 'description' => 'Donnez un nom à votre signature et le contenu à ajouter (hashtags, liens, texte personnalisé — tout ce que vous réutilisez).', + 'name' => 'Nom', + 'name_placeholder' => 'par ex. Marketing, Voyage, Formule de fin', + 'content' => 'Contenu', + 'content_placeholder' => "#marketing #socialmedia\nEn savoir plus : https://yourbrand.com", + 'content_hint' => 'Hashtags, liens, introductions personnalisées, formules de fin — tout ce que vous ajoutez à vos publications.', + 'submit' => 'Créer la signature', + 'submitting' => 'Création...', + ], + + 'edit' => [ + 'title' => 'Modifier la signature', + 'description' => 'Mettez à jour le nom et le contenu de cette signature.', + 'name' => 'Nom', + 'name_placeholder' => 'par ex. Marketing, Voyage, Formule de fin', + 'content' => 'Contenu', + 'content_placeholder' => "#marketing #socialmedia\nEn savoir plus : https://yourbrand.com", + 'content_hint' => 'Hashtags, liens, introductions personnalisées, formules de fin — tout ce que vous ajoutez à vos publications.', + 'submit' => 'Enregistrer les modifications', + 'submitting' => 'Enregistrement...', + ], + + 'delete' => [ + 'title' => 'Supprimer la signature', + 'description' => 'Voulez-vous vraiment supprimer cette signature ? Cette action est irréversible.', + 'confirm' => 'Supprimer', + 'cancel' => 'Annuler', + ], + + 'flash' => [ + 'created' => 'Signature créée.', + 'updated' => 'Signature mise à jour.', + 'deleted' => 'Signature supprimée.', + ], +]; diff --git a/lang/fr/usage.php b/lang/fr/usage.php new file mode 100644 index 00000000..8444698d --- /dev/null +++ b/lang/fr/usage.php @@ -0,0 +1,15 @@ + 'Utilisation', + + 'section_account' => 'Compte', + 'section_account_description' => 'Quotas et limites de votre forfait.', + 'section_ai' => 'Crédits IA', + 'section_ai_description' => 'Les crédits sont débités à mesure que vous utilisez les fonctionnalités d\'IA. Ils sont réinitialisés le premier de chaque mois.', + + 'workspaces' => 'Espaces de travail', + 'social_accounts' => 'Comptes sociaux', + 'members' => 'Membres', + 'credits' => 'Crédits', +]; diff --git a/lang/fr/validation.php b/lang/fr/validation.php new file mode 100644 index 00000000..e2138542 --- /dev/null +++ b/lang/fr/validation.php @@ -0,0 +1,200 @@ + 'Le champ :attribute doit être accepté.', + 'accepted_if' => 'Le champ :attribute doit être accepté lorsque :other vaut :value.', + 'active_url' => 'Le champ :attribute doit être une URL valide.', + 'after' => 'Le champ :attribute doit être une date postérieure au :date.', + 'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.', + 'alpha' => 'Le champ :attribute ne doit contenir que des lettres.', + 'alpha_dash' => 'Le champ :attribute ne doit contenir que des lettres, des chiffres, des tirets et des traits de soulignement.', + 'alpha_num' => 'Le champ :attribute ne doit contenir que des lettres et des chiffres.', + 'any_of' => 'Le champ :attribute est invalide.', + 'array' => 'Le champ :attribute doit être un tableau.', + 'ascii' => 'Le champ :attribute ne doit contenir que des caractères alphanumériques et des symboles sur un seul octet.', + 'before' => 'Le champ :attribute doit être une date antérieure au :date.', + 'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.', + 'between' => [ + 'array' => 'Le champ :attribute doit comporter entre :min et :max éléments.', + 'file' => 'Le champ :attribute doit peser entre :min et :max kilo-octets.', + 'numeric' => 'Le champ :attribute doit être compris entre :min et :max.', + 'string' => 'Le champ :attribute doit comporter entre :min et :max caractères.', + ], + 'boolean' => 'Le champ :attribute doit être vrai ou faux.', + 'can' => 'Le champ :attribute contient une valeur non autorisée.', + 'confirmed' => 'La confirmation du champ :attribute ne correspond pas.', + 'contains' => 'Le champ :attribute ne contient pas une valeur requise.', + 'current_password' => 'Le mot de passe est incorrect.', + 'date' => 'Le champ :attribute doit être une date valide.', + 'date_equals' => 'Le champ :attribute doit être une date égale au :date.', + 'date_format' => 'Le champ :attribute doit respecter le format :format.', + 'decimal' => 'Le champ :attribute doit comporter :decimal décimales.', + 'declined' => 'Le champ :attribute doit être refusé.', + 'declined_if' => 'Le champ :attribute doit être refusé lorsque :other vaut :value.', + 'different' => 'Les champs :attribute et :other doivent être différents.', + 'digits' => 'Le champ :attribute doit comporter :digits chiffres.', + 'digits_between' => 'Le champ :attribute doit comporter entre :min et :max chiffres.', + 'dimensions' => 'Le champ :attribute a des dimensions d\'image invalides.', + 'distinct' => 'Le champ :attribute a une valeur en double.', + 'doesnt_contain' => 'Le champ :attribute ne doit contenir aucune des valeurs suivantes : :values.', + 'doesnt_end_with' => 'Le champ :attribute ne doit pas se terminer par l\'un des éléments suivants : :values.', + 'doesnt_start_with' => 'Le champ :attribute ne doit pas commencer par l\'un des éléments suivants : :values.', + 'email' => 'Le champ :attribute doit être une adresse e-mail valide.', + 'encoding' => 'Le champ :attribute doit être encodé en :encoding.', + 'ends_with' => 'Le champ :attribute doit se terminer par l\'un des éléments suivants : :values.', + 'enum' => 'La valeur sélectionnée pour :attribute est invalide.', + 'exists' => 'La valeur sélectionnée pour :attribute est invalide.', + 'extensions' => 'Le champ :attribute doit avoir l\'une des extensions suivantes : :values.', + 'file' => 'Le champ :attribute doit être un fichier.', + 'filled' => 'Le champ :attribute doit avoir une valeur.', + 'gt' => [ + 'array' => 'Le champ :attribute doit comporter plus de :value éléments.', + 'file' => 'Le champ :attribute doit peser plus de :value kilo-octets.', + 'numeric' => 'Le champ :attribute doit être supérieur à :value.', + 'string' => 'Le champ :attribute doit comporter plus de :value caractères.', + ], + 'gte' => [ + 'array' => 'Le champ :attribute doit comporter au moins :value éléments.', + 'file' => 'Le champ :attribute doit peser au moins :value kilo-octets.', + 'numeric' => 'Le champ :attribute doit être supérieur ou égal à :value.', + 'string' => 'Le champ :attribute doit comporter au moins :value caractères.', + ], + 'hex_color' => 'Le champ :attribute doit être une couleur hexadécimale valide.', + 'image' => 'Le champ :attribute doit être une image.', + 'in' => 'La valeur sélectionnée pour :attribute est invalide.', + 'in_array' => 'Le champ :attribute doit exister dans :other.', + 'in_array_keys' => 'Le champ :attribute doit contenir au moins l\'une des clés suivantes : :values.', + 'integer' => 'Le champ :attribute doit être un entier.', + 'ip' => 'Le champ :attribute doit être une adresse IP valide.', + 'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.', + 'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.', + 'json' => 'Le champ :attribute doit être une chaîne JSON valide.', + 'list' => 'Le champ :attribute doit être une liste.', + 'lowercase' => 'Le champ :attribute doit être en minuscules.', + 'lt' => [ + 'array' => 'Le champ :attribute doit comporter moins de :value éléments.', + 'file' => 'Le champ :attribute doit peser moins de :value kilo-octets.', + 'numeric' => 'Le champ :attribute doit être inférieur à :value.', + 'string' => 'Le champ :attribute doit comporter moins de :value caractères.', + ], + 'lte' => [ + 'array' => 'Le champ :attribute ne doit pas comporter plus de :value éléments.', + 'file' => 'Le champ :attribute doit peser au maximum :value kilo-octets.', + 'numeric' => 'Le champ :attribute doit être inférieur ou égal à :value.', + 'string' => 'Le champ :attribute doit comporter au maximum :value caractères.', + ], + 'mac_address' => 'Le champ :attribute doit être une adresse MAC valide.', + 'max' => [ + 'array' => 'Le champ :attribute ne doit pas comporter plus de :max éléments.', + 'file' => 'Le champ :attribute ne doit pas peser plus de :max kilo-octets.', + 'numeric' => 'Le champ :attribute ne doit pas être supérieur à :max.', + 'string' => 'Le champ :attribute ne doit pas comporter plus de :max caractères.', + ], + 'max_digits' => 'Le champ :attribute ne doit pas comporter plus de :max chiffres.', + 'mimes' => 'Le champ :attribute doit être un fichier de type : :values.', + 'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.', + 'min' => [ + 'array' => 'Le champ :attribute doit comporter au moins :min éléments.', + 'file' => 'Le champ :attribute doit peser au moins :min kilo-octets.', + 'numeric' => 'Le champ :attribute doit être au moins égal à :min.', + 'string' => 'Le champ :attribute doit comporter au moins :min caractères.', + ], + 'min_digits' => 'Le champ :attribute doit comporter au moins :min chiffres.', + 'missing' => 'Le champ :attribute doit être absent.', + 'missing_if' => 'Le champ :attribute doit être absent lorsque :other vaut :value.', + 'missing_unless' => 'Le champ :attribute doit être absent sauf si :other vaut :value.', + 'missing_with' => 'Le champ :attribute doit être absent lorsque :values est présent.', + 'missing_with_all' => 'Le champ :attribute doit être absent lorsque :values sont présents.', + 'multiple_of' => 'Le champ :attribute doit être un multiple de :value.', + 'not_in' => 'La valeur sélectionnée pour :attribute est invalide.', + 'not_regex' => 'Le format du champ :attribute est invalide.', + 'numeric' => 'Le champ :attribute doit être un nombre.', + 'password' => [ + 'letters' => 'Le champ :attribute doit contenir au moins une lettre.', + 'mixed' => 'Le champ :attribute doit contenir au moins une lettre majuscule et une lettre minuscule.', + 'numbers' => 'Le champ :attribute doit contenir au moins un chiffre.', + 'symbols' => 'Le champ :attribute doit contenir au moins un symbole.', + 'uncompromised' => 'Le champ :attribute est apparu dans une fuite de données. Veuillez choisir un autre :attribute.', + ], + 'present' => 'Le champ :attribute doit être présent.', + 'present_if' => 'Le champ :attribute doit être présent lorsque :other vaut :value.', + 'present_unless' => 'Le champ :attribute doit être présent sauf si :other vaut :value.', + 'present_with' => 'Le champ :attribute doit être présent lorsque :values est présent.', + 'present_with_all' => 'Le champ :attribute doit être présent lorsque :values sont présents.', + 'prohibited' => 'Le champ :attribute est interdit.', + 'prohibited_if' => 'Le champ :attribute est interdit lorsque :other vaut :value.', + 'prohibited_if_accepted' => 'Le champ :attribute est interdit lorsque :other est accepté.', + 'prohibited_if_declined' => 'Le champ :attribute est interdit lorsque :other est refusé.', + 'prohibited_unless' => 'Le champ :attribute est interdit sauf si :other est dans :values.', + 'prohibits' => 'Le champ :attribute empêche :other d\'être présent.', + 'regex' => 'Le format du champ :attribute est invalide.', + 'required' => 'Le champ :attribute est obligatoire.', + 'required_array_keys' => 'Le champ :attribute doit contenir des entrées pour : :values.', + 'required_if' => 'Le champ :attribute est obligatoire lorsque :other vaut :value.', + 'required_if_accepted' => 'Le champ :attribute est obligatoire lorsque :other est accepté.', + 'required_if_declined' => 'Le champ :attribute est obligatoire lorsque :other est refusé.', + 'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est dans :values.', + 'required_with' => 'Le champ :attribute est obligatoire lorsque :values est présent.', + 'required_with_all' => 'Le champ :attribute est obligatoire lorsque :values sont présents.', + 'required_without' => 'Le champ :attribute est obligatoire lorsque :values est absent.', + 'required_without_all' => 'Le champ :attribute est obligatoire lorsque aucun des :values n\'est présent.', + 'same' => 'Le champ :attribute doit correspondre à :other.', + 'size' => [ + 'array' => 'Le champ :attribute doit contenir :size éléments.', + 'file' => 'Le champ :attribute doit peser :size kilo-octets.', + 'numeric' => 'Le champ :attribute doit être égal à :size.', + 'string' => 'Le champ :attribute doit comporter :size caractères.', + ], + 'starts_with' => 'Le champ :attribute doit commencer par l\'un des éléments suivants : :values.', + 'string' => 'Le champ :attribute doit être une chaîne de caractères.', + 'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.', + 'unique' => 'La valeur du champ :attribute est déjà utilisée.', + 'uploaded' => 'Le champ :attribute n\'a pas pu être importé.', + 'uppercase' => 'Le champ :attribute doit être en majuscules.', + 'url' => 'Le champ :attribute doit être une URL valide.', + 'ulid' => 'Le champ :attribute doit être un ULID valide.', + 'uuid' => 'Le champ :attribute doit être un UUID valide.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/fr/workspaces.php b/lang/fr/workspaces.php new file mode 100644 index 00000000..1bff9811 --- /dev/null +++ b/lang/fr/workspaces.php @@ -0,0 +1,50 @@ + 'Espaces de travail', + 'select_title' => 'Vos espaces de travail', + 'select_description' => 'Sélectionnez un espace de travail pour continuer', + 'current' => 'Actuel', + 'connections' => ':count connexions', + 'posts' => ':count publications', + + 'create' => [ + 'page_title' => 'Créer votre espace de travail', + 'title' => 'Configurez votre espace de travail', + 'description' => 'Parlez-nous un peu de vous ou de votre projet. Nous l\'utiliserons pour adapter les publications générées par l\'IA à votre voix.', + 'website' => 'Site web', + 'website_placeholder' => 'https://yourbrand.com', + 'autofill' => 'Remplir automatiquement depuis le site web', + 'autofill_missing_url' => 'Saisissez d\'abord une URL.', + 'autofill_success' => 'Informations de la marque chargées.', + 'autofill_error' => 'Le remplissage automatique a échoué. Vous pouvez remplir les champs manuellement.', + 'autofill_errors' => [ + 'unreachable' => 'Nous n\'avons pas pu accéder à ce site web (:reason).', + 'http_status' => 'Le site web a renvoyé un statut inattendu (:status).', + 'invalid_scheme' => 'Seules les URL http et https sont prises en charge.', + 'missing_host' => 'L\'URL ne comporte pas d\'hôte.', + 'unresolvable_host' => 'Nous n\'avons pas pu résoudre l\'hôte (:host).', + 'private_network' => 'Les URL pointant vers des réseaux privés ne sont pas autorisées.', + ], + 'logo_captured' => 'Logo récupéré depuis votre site web.', + 'name' => 'Nom de l\'espace de travail', + 'name_placeholder' => 'par ex. Acme Inc', + 'brand_description' => 'Description de la marque', + 'brand_description_placeholder' => 'Que fait votre marque ?', + 'content_language' => 'Langue du contenu', + 'content_language_description' => 'Les légendes générées par l\'IA seront rédigées dans cette langue.', + 'brand_color' => 'Couleur de la marque', + 'background_color' => 'Couleur de fond', + 'text_color' => 'Couleur du texte', + 'submit' => 'Créer l\'espace de travail', + 'success' => 'Espace de travail créé. Connectez un compte social pour commencer à publier.', + ], + + 'cannot_delete_last' => 'Vous ne pouvez pas supprimer votre unique espace de travail. Annulez votre abonnement dans les paramètres de facturation pour fermer votre compte.', + + 'flash' => [ + 'deleted' => 'Espace de travail supprimé avec succès.', + ], +]; diff --git a/lang/it/accounts.php b/lang/it/accounts.php new file mode 100644 index 00000000..bbdfd6e6 --- /dev/null +++ b/lang/it/accounts.php @@ -0,0 +1,148 @@ + 'Connessioni', + 'page_title' => 'Account social', + 'description' => 'Panoramica di tutti i tuoi account social collegati', + 'connect_cta' => 'Collega', + + 'not_connected' => 'Non collegato', + 'connect' => 'Collega', + 'connection_lost' => 'Connessione persa', + 'reconnect' => 'Ricollega', + 'reconnect_account' => 'Ricollega account', + 'view_profile' => 'Visualizza profilo', + 'disconnect' => 'Scollega', + + 'descriptions' => [ + 'linkedin' => 'Collega il tuo profilo LinkedIn o la pagina aziendale', + 'linkedin-page' => 'Collega una pagina aziendale LinkedIn', + 'x' => 'Collega il tuo account X (Twitter)', + 'tiktok' => 'Collega il tuo account TikTok', + 'youtube' => 'Collega un canale YouTube', + 'facebook' => 'Collega una pagina Facebook', + 'instagram' => 'Collega un account professionale Instagram', + 'instagram-facebook' => 'Collega Instagram tramite una pagina Facebook', + 'threads' => 'Collega il tuo account Threads', + 'pinterest' => 'Collega il tuo account Pinterest', + 'bluesky' => 'Collega il tuo account Bluesky', + 'mastodon' => 'Collega il tuo account Mastodon', + 'telegram' => 'Collega un canale o gruppo Telegram', + 'discord' => 'Collega un server Discord', + ], + + 'disconnect_modal' => [ + 'title' => 'Scollega account', + 'description' => 'Vuoi davvero scollegare questo account? Puoi ricollegarlo in qualsiasi momento.', + 'confirm' => 'Scollega', + 'cancel' => 'Annulla', + ], + + 'bluesky' => [ + 'title' => 'Collega Bluesky', + 'description' => 'Inserisci le tue credenziali per collegarti', + 'email' => 'Email', + 'email_placeholder' => 'iltuohandle.bsky.social', + 'app_password' => 'Password per app', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'Usa una Password per app per maggiore sicurezza. Creane una su bsky.app/settings.', + 'submit' => 'Collega Bluesky', + 'submitting' => 'Collegamento in corso...', + ], + + 'mastodon' => [ + 'title' => 'Collega Mastodon', + 'description' => 'Inserisci la tua istanza Mastodon', + 'instance_url' => 'URL dell\'istanza', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Inserisci l\'URL della tua istanza Mastodon (es. mastodon.social, techhub.social)', + 'submit' => 'Continua con Mastodon', + 'submitting' => 'Collegamento in corso...', + ], + + 'telegram' => [ + 'title' => 'Collega Telegram', + 'description' => 'Collega un canale o un gruppo', + 'step_admin' => 'Aggiungi :bot come amministratore al tuo canale o gruppo Telegram.', + 'step_command' => 'Pubblica questo comando nel canale o nel gruppo:', + 'waiting' => 'In attesa del collegamento del canale…', + 'connected' => 'Canale collegato!', + 'connected_toast' => 'Canale Telegram collegato con successo!', + 'copied_toast' => 'Comando copiato negli appunti', + 'copy_tooltip' => 'Copia comando', + 'expired' => 'Questo codice è scaduto. Generane uno nuovo per riprovare.', + 'new_code' => 'Genera un nuovo codice', + 'retry' => 'Riprova', + 'error_generic' => 'Impossibile avviare il collegamento. Riprova.', + 'network_taken' => 'Questo workspace ha già un canale Telegram collegato. Scollegalo prima.', + ], + + 'facebook' => [ + 'title' => 'Seleziona pagina Facebook', + 'description' => 'Scegli quale pagina vuoi collegare', + 'no_pages' => 'Nessuna pagina trovata', + 'no_pages_description' => 'Non sei amministratore di alcuna pagina Facebook.', + 'page_label' => 'Pagina Facebook', + 'view' => 'Visualizza', + 'choose' => 'Scegli', + ], + + 'instagram_facebook' => [ + 'title' => 'Seleziona account Instagram', + 'description' => 'Scegli quale account Instagram vuoi collegare', + 'no_pages' => 'Nessun account Instagram trovato', + 'no_pages_description' => 'Nessuna pagina Facebook con account Instagram Business collegati è stata trovata.', + 'view' => 'Visualizza', + 'choose' => 'Scegli', + ], + + 'linkedin' => [ + 'title' => 'Seleziona pagina LinkedIn', + 'description' => 'Scegli quale pagina vuoi collegare', + 'no_pages' => 'Nessuna pagina trovata', + 'no_pages_description' => 'Non sei amministratore di alcuna pagina LinkedIn.', + 'page_label' => 'Pagina LinkedIn', + 'select_title' => 'Dove vuoi pubblicare?', + 'select_subtitle' => 'Pubblica a tuo nome o scegli una pagina aziendale che gestisci.', + 'person_tag' => 'Persona', + 'organization_tag' => 'Organizzazione', + 'view' => 'Visualizza', + 'choose' => 'Scegli', + ], + + 'flash' => [ + 'disconnected' => 'Account scollegato con successo!', + 'connected' => 'Account collegato con successo!', + 'session_expired' => 'Sessione scaduta. Riprova.', + 'workspace_not_found' => 'Workspace non trovato.', + 'activated' => 'Account attivato!', + 'deactivated' => 'Account disattivato!', + 'already_connected' => 'Questa piattaforma è già collegata.', + 'no_youtube_channels' => 'Nessun canale YouTube trovato. Crea prima un canale.', + ], + + 'popup_callback' => [ + 'title_success' => 'Collegato', + 'title_error' => 'Errore', + 'closing' => 'Questa finestra si chiuderà automaticamente...', + 'manual_close' => 'Puoi chiudere questa finestra.', + 'popup_blocked' => 'Impossibile aprire la finestra di collegamento. Consenti i popup e riprova.', + 'connected' => 'Account collegato!', + 'reconnected' => 'Account ricollegato!', + 'error_connecting' => 'Errore durante il collegamento dell\'account. Riprova.', + 'network_taken' => 'Questo workspace ha già un account per questa rete. Scollegalo prima.', + 'error_connecting_page' => 'Errore durante il collegamento della pagina. Riprova.', + 'error_connecting_channel' => 'Errore durante il collegamento del canale. Riprova.', + 'session_expired' => 'Sessione scaduta. Riprova.', + 'workspace_not_found' => 'Workspace non trovato.', + 'invalid_state' => 'Stato non valido. Riprova.', + 'failed_to_authenticate' => 'Autenticazione non riuscita.', + 'failed_to_get_profile' => 'Impossibile ottenere il profilo.', + 'page_not_found' => 'Pagina non trovata.', + 'channel_not_found' => 'Canale non trovato.', + 'no_facebook_pages' => 'Nessuna pagina Facebook trovata. Devi essere amministratore di almeno una pagina.', + 'no_facebook_instagram_pages' => 'Nessuna pagina Facebook con account Instagram collegati trovata.', + 'no_youtube_channels' => 'Nessun canale YouTube trovato. Crea prima un canale.', + 'not_linkedin_admin' => 'Non sei amministratore di alcuna pagina LinkedIn.', + ], +]; diff --git a/lang/it/analytics.php b/lang/it/analytics.php new file mode 100644 index 00000000..2bce4a93 --- /dev/null +++ b/lang/it/analytics.php @@ -0,0 +1,55 @@ + 'Nessun account collegato con statistiche.', + 'no_accounts_match' => 'Nessun account corrisponde.', + 'search_account' => 'Cerca account…', + 'select_account' => 'Seleziona un account per visualizzare le statistiche.', + 'no_data' => 'Nessun dato statistico disponibile.', + + 'metrics' => [ + 'avg_view_duration' => 'Durata media visualizzazione (s)', + 'avg_view_percentage' => 'Percentuale media di visualizzazione', + 'bookmarks' => 'Segnalibri', + 'clicks' => 'Clic', + 'comments' => 'Commenti', + 'custom_reaction' => 'Personalizzata', + 'engagement' => 'Coinvolgimento', + 'favourites' => 'Preferiti', + 'followers' => 'Follower', + 'following' => 'Seguiti', + 'impressions' => 'Impressioni', + 'interactions' => 'Interazioni', + 'likes' => 'Mi piace', + 'members' => 'Membri', + 'minutes_watched' => 'Minuti guardati', + 'organic_followers' => 'Follower organici', + 'outbound_clicks' => 'Clic in uscita', + 'page_followers' => 'Follower della pagina', + 'page_reach' => 'Copertura della pagina', + 'page_views' => 'Visualizzazioni della pagina', + 'paid_followers' => 'Follower a pagamento', + 'pin_click_rate' => 'Tasso di clic sui Pin', + 'pin_clicks' => 'Clic sui Pin', + 'posts_engagement' => 'Coinvolgimento dei post', + 'posts_reach' => 'Copertura dei post', + 'quotes' => 'Citazioni', + 'reach' => 'Copertura', + 'reblogs' => 'Reblog', + 'recent_comments' => 'Commenti recenti', + 'recent_likes' => 'Mi piace recenti', + 'recent_shares' => 'Condivisioni recenti', + 'replies' => 'Risposte', + 'reposts' => 'Repost', + 'retweets' => 'Retweet', + 'saves' => 'Salvataggi', + 'shares' => 'Condivisioni', + 'subscribers' => 'Iscritti', + 'subscribers_gained' => 'Iscritti acquisiti', + 'subscribers_lost' => 'Iscritti persi', + 'total_likes' => 'Mi piace totali', + 'video_views' => 'Visualizzazioni video', + 'videos' => 'Video', + 'views' => 'Visualizzazioni', + ], +]; diff --git a/lang/it/assets.php b/lang/it/assets.php new file mode 100644 index 00000000..be12bdeb --- /dev/null +++ b/lang/it/assets.php @@ -0,0 +1,52 @@ + 'Risorse', + + 'tabs' => [ + 'my_uploads' => 'I miei caricamenti', + 'stock_photos' => 'Foto stock', + 'gifs' => 'GIF', + ], + + 'upload' => [ + 'drag_drop' => 'Trascina qui i tuoi file oppure clicca per selezionarli', + 'formats' => 'JPEG, PNG, GIF, WebP, MP4, PDF', + 'uploading' => 'Caricamento in corso...', + 'failed' => 'Impossibile caricare :file. Riprova.', + ], + + 'empty' => [ + 'title' => 'Ancora nessuna risorsa', + 'description' => 'Carica immagini e video per creare la tua libreria multimediale.', + ], + + 'save_to_assets' => 'Salva nelle risorse', + 'saved' => 'Salvato nelle tue risorse!', + 'create_post' => 'Crea post', + 'add_to_post' => 'Aggiungi al post', + 'search_placeholder' => 'Cerca media...', + + 'delete' => [ + 'title' => 'Elimina risorsa', + 'description' => 'Vuoi davvero eliminare questa risorsa? Questa azione non può essere annullata.', + 'confirm' => 'Elimina', + 'cancel' => 'Annulla', + ], + + 'unsplash' => [ + 'search_placeholder' => 'Cerca foto gratuite...', + 'no_results' => 'Nessuna foto trovata', + 'no_results_description' => 'Prova un altro termine di ricerca.', + 'trending' => 'Di tendenza su Unsplash', + 'start_searching' => 'Cerca foto stock gratuite da Unsplash', + ], + + 'giphy' => [ + 'trending' => 'Di tendenza su Giphy', + 'search_placeholder' => 'Cerca GIF...', + 'no_results' => 'Nessuna GIF trovata', + 'no_results_description' => 'Prova un altro termine di ricerca.', + 'powered_by' => 'Powered by GIPHY', + ], +]; diff --git a/lang/it/auth.php b/lang/it/auth.php new file mode 100644 index 00000000..f60925a2 --- /dev/null +++ b/lang/it/auth.php @@ -0,0 +1,141 @@ + 'Queste credenziali non corrispondono ai nostri dati.', + 'password' => 'La password fornita non è corretta.', + 'throttle' => 'Troppi tentativi di accesso. Riprova tra :seconds secondi.', + + 'flash' => [ + 'welcome' => 'Benvenuto su TryPost!', + 'welcome_trial' => 'Benvenuto su TryPost! La tua prova è iniziata.', + ], + + 'legal' => 'Continuando, accetti i nostri Termini di servizio e la nostra Informativa sulla privacy.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'Calendario visivo', + 'description' => 'Pianifica e programma i tuoi contenuti con un calendario drag-and-drop intuitivo su tutti i tuoi account social.', + ], + 'scheduling' => [ + 'title' => 'Pianificazione intelligente', + 'description' => 'Programma i post su LinkedIn, X, Instagram, TikTok, YouTube e altro ancora, tutto da un unico posto.', + ], + 'media' => [ + 'title' => 'Contenuti multimediali', + 'description' => 'Pubblica immagini, caroselli, storie e reel. Ogni piattaforma riceve automaticamente il formato giusto.', + ], + 'video' => [ + 'title' => 'Pubblicazione video', + 'description' => 'Carica i video una volta sola e pubblicali su TikTok, YouTube Shorts, Instagram Reels e Facebook Reels.', + ], + 'team' => [ + 'title' => 'Workspace per team', + 'description' => 'Invita il tuo team, assegna i ruoli e gestisci più brand da workspace separati.', + ], + 'signatures' => [ + 'title' => 'Firme', + 'description' => 'Salva firme riutilizzabili (hashtag, link, saluti) e aggiungile ai post con un clic.', + ], + ], + + 'or_continue_with' => 'Oppure continua con', + 'or_continue_with_email' => 'Oppure continua con l\'email', + 'google_login' => 'Accedi con Google', + 'google_signup' => 'Registrati con Google', + 'github_login' => 'Accedi con GitHub', + 'github_signup' => 'Registrati con GitHub', + 'github_email_unavailable' => 'Impossibile recuperare la tua email da GitHub. Rendi pubblica la tua email GitHub o concedi l\'ambito email, poi riprova.', + + 'signup_success' => [ + 'page_title' => 'Benvenuto', + 'title' => 'Configurazione del tuo account', + 'description' => 'Di solito ci vogliono solo pochi secondi...', + ], + + 'login' => [ + 'title' => 'Accedi al tuo account', + 'description' => 'Inserisci la tua email e la password qui sotto per accedere', + 'page_title' => 'Accedi', + 'email' => 'Indirizzo email', + 'password' => 'Password', + 'forgot_password' => 'Password dimenticata?', + 'remember_me' => 'Ricordami', + 'submit' => 'Accedi', + 'no_account' => 'Non hai un account?', + 'sign_up' => 'Registrati', + ], + + 'register' => [ + 'title' => 'Tutto il tuo calendario social, in un unico posto', + 'description' => 'Crea il tuo account e inizia a programmare i post su ogni rete.', + 'page_title' => 'Registrati', + 'signup_with_email' => 'Registrati con l\'email', + 'name' => 'Nome', + 'name_placeholder' => 'Nome completo', + 'email' => 'Indirizzo email', + 'password' => 'Password', + 'show_password' => 'Mostra password', + 'hide_password' => 'Nascondi password', + 'submit' => 'Crea account', + 'has_account' => 'Hai già un account?', + 'log_in' => 'Accedi', + ], + + 'forgot_password' => [ + 'title' => 'Password dimenticata', + 'description' => 'Inserisci la tua email per ricevere un link di reimpostazione della password', + 'page_title' => 'Password dimenticata', + 'email' => 'Indirizzo email', + 'submit' => 'Invia il link di reimpostazione', + 'return_to' => 'Oppure torna a', + 'log_in' => 'accedi', + ], + + 'reset_password' => [ + 'title' => 'Reimposta password', + 'description' => 'Inserisci la tua nuova password qui sotto', + 'page_title' => 'Reimposta password', + 'email' => 'Email', + 'password' => 'Password', + 'confirm_password' => 'Conferma password', + 'confirm_placeholder' => 'Conferma password', + 'submit' => 'Reimposta password', + ], + + 'verify_email' => [ + 'title' => 'Verifica email', + 'description' => 'Verifica il tuo indirizzo email cliccando sul link che ti abbiamo appena inviato.', + 'page_title' => 'Verifica email', + 'link_sent' => 'Un nuovo link di verifica è stato inviato all\'indirizzo email fornito durante la registrazione.', + 'resend' => 'Invia di nuovo l\'email di verifica', + 'log_out' => 'Esci', + ], + + 'accept_invite' => [ + 'page_title' => 'Accetta invito', + 'title' => 'Sei stato invitato!', + 'description' => 'Sei stato invitato a unirti al workspace :workspace.', + 'workspace' => 'Workspace', + 'your_role' => 'Il tuo ruolo', + 'email' => 'Email', + 'accept' => 'Accetta invito', + 'decline' => 'Rifiuta invito', + 'login_prompt' => 'Accedi o crea un account per accettare questo invito.', + 'log_in' => 'Accedi', + 'create_account' => 'Crea account', + ], + +]; diff --git a/lang/it/automations.php b/lang/it/automations.php new file mode 100644 index 00000000..9ec57a28 --- /dev/null +++ b/lang/it/automations.php @@ -0,0 +1,411 @@ + 'Automazioni', + 'default_name' => 'Nuova automazione', + + 'actions' => [ + 'new' => 'Nuova automazione', + 'edit' => 'Modifica', + 'save' => 'Salva', + 'activate' => 'Attiva', + 'pause' => 'Metti in pausa', + 'delete' => 'Elimina', + 'retry' => 'Riprova', + 'guide' => 'Scopri come funziona', + ], + + 'tabs' => [ + 'build' => 'Crea', + 'variables' => 'Variabili', + 'test' => 'Test', + ], + + 'nav' => [ + 'workflow' => 'Flusso di lavoro', + 'invocations' => 'Esecuzioni', + 'metrics' => 'Metriche', + 'settings' => 'Impostazioni', + ], + + 'settings' => [ + 'general' => 'Generale', + 'general_description' => 'Rinomina questa automazione.', + 'name_label' => 'Nome', + 'name_saved' => 'Automazione rinominata.', + 'status_title' => 'Stato', + 'status_description' => 'Attiva per avviarla, o metti in pausa per fermarla.', + 'activated_at' => 'Attivata il :date', + 'paused_at' => 'Messa in pausa il :date', + 'created_at' => 'Creata il :date', + 'danger_title' => 'Zona pericolosa', + 'danger_description' => 'Azioni irreversibili.', + 'delete_title' => 'Elimina questa automazione', + 'delete_description' => 'Rimuove definitivamente l\'automazione e la sua cronologia di esecuzioni.', + ], + + 'status_run' => [ + 'pending' => 'In sospeso', + 'running' => 'In esecuzione', + 'waiting' => 'In attesa', + 'completed' => 'Completata', + 'failed' => 'Non riuscita', + 'cancelled' => 'Annullata', + ], + + 'node_type' => [ + 'trigger' => 'Trigger', + 'generate' => 'Genera contenuto', + 'delay' => 'Ritardo', + 'condition' => 'Condizione', + 'publish' => 'Pubblica', + 'webhook' => 'Webhook', + 'end' => 'Fine', + 'fetch_rss' => 'Recupera RSS', + 'http_request' => 'Richiesta HTTP', + ], + + 'invocations' => [ + 'empty' => 'Ancora nessuna esecuzione.', + 'refresh' => 'Aggiorna', + 'search_placeholder' => 'Cerca per ID esecuzione…', + 'copied' => 'ID esecuzione copiato.', + 'loading' => 'Caricamento passaggi…', + 'no_steps' => 'Nessun passaggio registrato.', + 'load_error' => 'Impossibile caricare i passaggi.', + 'steps' => '{0}Nessun passaggio|{1}:count passaggio|[2,*]:count passaggi', + 'filter' => [ + 'all' => 'Tutti gli stati', + ], + 'columns' => [ + 'timestamp' => 'Data e ora', + 'run' => 'Esecuzione', + 'status' => 'Stato', + 'message' => 'Ultimo messaggio', + 'duration' => 'Durata', + ], + 'summary' => [ + 'completed' => 'Flusso di lavoro completato', + 'failed' => 'Flusso di lavoro non riuscito', + 'running' => 'Flusso di lavoro in esecuzione', + 'cancelled' => 'Flusso di lavoro annullato', + 'pending' => 'Flusso di lavoro in sospeso', + ], + ], + + 'metrics' => [ + 'overview' => 'Panoramica', + 'runs_over_time' => 'Esecuzioni nel tempo', + 'posts_by_platform' => 'Post per piattaforma', + 'no_posts' => 'Nessun post pubblicato in questo periodo.', + 'cards' => [ + 'runs' => 'Esecuzioni totali', + 'completed' => 'Completate', + 'failed' => 'Non riuscite', + 'in_progress' => 'In corso', + 'success_rate' => 'Tasso di successo', + 'avg_duration' => 'Durata media', + 'posts_created' => 'Post creati', + ], + 'legend' => [ + 'started' => 'Avviate', + 'completed' => 'Completate', + 'failed' => 'Non riuscite', + ], + ], + + 'categories' => [ + 'sources' => 'Fonti', + 'content' => 'Contenuto', + 'flow' => 'Flusso', + 'output' => 'Output', + ], + + 'variables' => [ + 'title' => 'Variabili del flusso di lavoro', + 'hint' => 'Valori riutilizzabili richiamabili ovunque con {{ variables.KEY }}. Memorizzati in forma cifrata.', + 'empty' => 'Ancora nessuna variabile.', + 'key' => 'Chiave', + 'value' => 'Valore', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'Valore', + 'add' => 'Nuova variabile', + ], + + 'expr' => [ + 'trigger_event' => 'Nome dell\'evento trigger', + 'trigger_fired_at' => 'Quando il trigger è scattato', + 'trigger_post_id' => 'ID del post che ha attivato', + 'trigger_post_content' => 'Contenuto del post che ha attivato', + 'trigger_post_status' => 'Stato del post che ha attivato', + 'trigger_post_scheduled_at' => 'Quando il post è programmato', + 'trigger_post_published_at' => 'Quando il post è stato pubblicato', + 'fetched_title' => 'Titolo dell\'elemento recuperato', + 'fetched_link' => 'Link dell\'elemento recuperato', + 'fetched_date' => 'Data di pubblicazione dell\'elemento recuperato', + 'fetched_content' => 'Contenuto completo dell\'elemento recuperato', + 'fetched_description' => 'Riassunto dell\'elemento recuperato', + 'fetched_author' => 'Autore dell\'elemento recuperato', + 'fetched_image' => 'URL immagine dell\'elemento recuperato', + 'fetched_categories' => 'Categorie dell\'elemento recuperato', + 'fetched_enclosure' => 'Media dell\'elemento recuperato (audio/video/file)', + 'fetched_pubdate' => 'Data di pubblicazione dell\'elemento recuperato', + 'fetched_http' => 'Elemento HTTP recuperato (aggiungi un campo)', + 'generated_content' => 'Contenuto del post generato dall\'IA', + 'generated_post_url' => 'URL del post generato dall\'IA', + 'variable' => 'Variabile del flusso di lavoro', + 'now' => 'Data e ora correnti', + ], + + 'test' => [ + 'description' => 'Esegue l\'automazione dall\'inizio alla fine usando un payload di trigger sintetizzato. Utile per convalidare ogni nodo senza aspettare la pianificazione o il feed reali.', + 'starting' => 'Avvio dell\'esecuzione di test…', + 'in_progress' => 'In corso', + 'completed' => 'Completata', + 'failed' => 'Non riuscita', + 'waiting' => 'In attesa', + 'close' => 'Chiudi', + 'no_node_runs' => 'In attesa dell\'avvio del primo nodo…', + 'node_input' => 'Input', + 'node_output' => 'Output', + 'node_error' => 'Errore', + 'no_new_items' => 'Nessun nuovo elemento — nessun nodo a valle è stato eseguito.', + 'error_starting' => 'Impossibile avviare l\'esecuzione di test.', + 'with_real_data' => 'Con dati reali', + 'run' => 'Esegui test', + 'idle_hint' => 'Premi Esegui test per eseguire l\'automazione dall\'inizio alla fine.', + 'real_data_hint' => 'Questo test pubblicherà i post, farà avanzare i watermark di polling e attiverà effetti collaterali esterni.', + 'dry_badge' => 'Simulazione', + ], + + 'status' => [ + 'draft' => 'Bozza', + 'active' => 'Attiva', + 'paused' => 'In pausa', + ], + + 'index' => [ + 'empty_title' => 'Ancora nessuna automazione', + 'empty_description' => 'Crea la tua prima automazione per iniziare a pubblicare in automatico.', + 'columns' => [ + 'name' => 'Nome', + 'status' => 'Stato', + 'created' => 'Creata', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'Impossibile attivare l\'automazione.', + 'pause_error_fallback' => 'Impossibile mettere in pausa l\'automazione.', + 'save_error_fallback' => 'Impossibile salvare l\'automazione.', + 'save_success' => 'Automazione salvata.', + 'empty_canvas_title' => 'Inizia a creare la tua automazione', + 'empty_canvas_description' => 'Trascina un nodo dal pannello di sinistra per iniziare.', + 'name_placeholder' => 'Automazione senza titolo', + ], + + 'nodes' => [ + 'trigger' => 'Trigger', + 'generate' => 'Genera', + 'delay' => 'Ritardo', + 'condition' => 'Condizione', + 'publish' => 'Pubblica', + 'webhook' => 'Webhook', + 'end' => 'Fine', + 'end_summary' => 'Interrompe l\'automazione qui', + 'fetch_rss' => 'Recupera RSS', + 'http_request' => 'Richiesta HTTP', + 'handles' => [ + 'items' => 'ha elementi', + 'no_items' => 'nessun elemento', + ], + ], + + 'config' => [ + 'select_placeholder' => 'Seleziona…', + 'invalid_json' => 'Questo non è ancora un JSON valido.', + 'expand_editor' => 'Espandi editor', + 'minimize_editor' => 'Riduci', + + 'trigger' => [ + 'type' => 'Tipo di trigger', + 'types' => [ + 'schedule' => 'Pianificazione', + 'post_published' => 'Quando un post viene pubblicato', + 'post_scheduled' => 'Quando un post viene programmato', + ], + 'post_published_hint' => 'Viene eseguito ogni volta che un post di questo workspace viene pubblicato. Il post pubblicato diventa disponibile in {{ trigger.post }} per i nodi a valle.', + 'post_scheduled_hint' => 'Viene eseguito ogni volta che un post di questo workspace viene programmato. Il post programmato è disponibile in {{ trigger.post }}.', + + 'schedule' => [ + 'field' => 'Intervallo del trigger', + 'fields' => [ + 'minutes' => 'Minuti', + 'hours' => 'Ore', + 'days' => 'Giorni', + 'weeks' => 'Settimane', + 'months' => 'Mesi', + ], + 'minutes_interval' => 'Minuti tra un trigger e l\'altro', + 'hours_interval' => 'Ore tra un trigger e l\'altro', + 'days_interval' => 'Giorni tra un trigger e l\'altro', + 'hour' => 'Attiva all\'ora', + 'minute' => 'Attiva al minuto', + 'weekdays' => 'Attiva nei giorni della settimana', + 'day_of_month' => 'Giorno del mese', + 'weekday_names' => [ + 'sun' => 'Dom', + 'mon' => 'Lun', + 'tue' => 'Mar', + 'wed' => 'Mer', + 'thu' => 'Gio', + 'fri' => 'Ven', + 'sat' => 'Sab', + ], + 'summary' => [ + 'every_n_minutes' => 'Viene eseguito ogni minuto|Viene eseguito ogni :count minuti', + 'every_n_hours' => 'Viene eseguito ogni ora al minuto :minute|Viene eseguito ogni :count ore al minuto :minute', + 'every_n_days' => 'Viene eseguito ogni giorno alle :time|Viene eseguito ogni :count giorni alle :time', + 'weekly' => 'Viene eseguito ogni :days alle :time', + 'monthly' => 'Viene eseguito il giorno :day di ogni mese alle :time', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'Account social', + 'social_accounts_empty' => 'Nessun account social collegato. Collegane uno prima.', + 'target_slide_count' => 'Slide da generare', + 'prompt_template' => 'Modello di prompt', + 'prompt_template_hint' => 'Digita {{ per inserire dati dai passaggi precedenti.', + 'image_count' => 'Immagini da generare', + 'image_count_hint' => '0 = post di solo testo (nessuna immagine). 1 = immagine singola. 2+ = carosello.', + 'use_brand_voice' => 'Usa il tono del brand', + 'use_brand_voice_hint' => 'Applica la descrizione e il tono del tuo brand. Disattiva per una curatela fedele di fonti di terze parti (notizie, RSS).', + 'use_brand_visuals' => 'Usa la grafica del brand', + 'use_brand_visuals_hint' => 'Orienta le immagini IA con i colori e l\'identità del tuo brand. Disattiva per immagini neutre guidate solo dall\'argomento del post.', + 'style' => 'Stile', + 'account_summary' => ':count account · :format|:count account · :format', + 'formats' => [ + 'single' => 'singola', + 'carousel' => 'carosello', + ], + ], + 'delay' => [ + 'duration' => 'Durata', + 'unit' => 'Unità', + 'units' => [ + 'minutes' => 'Minuti', + 'hours' => 'Ore', + 'days' => 'Giorni', + ], + ], + 'condition' => [ + 'field' => 'Campo', + 'operator' => 'Operatore', + 'operators' => [ + 'contains' => 'contiene', + 'not_contains' => 'non contiene', + 'equals' => 'uguale a', + 'not_equals' => 'diverso da', + 'matches' => 'corrisponde (regex)', + 'greater_than' => 'maggiore di', + 'less_than' => 'minore di', + ], + 'value' => 'Valore', + ], + 'publish' => [ + 'mode' => 'Modalità', + 'modes' => [ + 'now' => 'Pubblica ora', + 'scheduled' => 'Programma', + 'draft' => 'Salva come bozza', + ], + 'scheduled_offset' => 'Scostamento dal trigger (minuti)', + 'offset_summary' => ':mode · +:offset min', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'Metodo', + 'payload_template' => 'Modello di payload (JSON)', + ], + 'end' => [ + 'reason' => 'Motivo (facoltativo)', + 'reason_placeholder' => 'es. Escluso dalla condizione', + ], + 'fetch_rss' => [ + 'feed_url' => 'URL del feed', + 'feed_url_hint' => 'Alla prima esecuzione, il watermark viene impostato su "adesso" così gli elementi storici non inondano i nodi a valle. Le esecuzioni successive vedono solo gli elementi più recenti del polling precedente.', + 'inspect' => 'Ispeziona feed', + 'inspecting' => 'Ispezione in corso…', + 'inspect_hint' => 'Recupera un campione per scoprire i campi disponibili da usare nei nodi a valle.', + 'inspect_error' => 'Impossibile leggere questo feed. Controlla l\'URL e riprova.', + 'discovered_fields' => 'Campi disponibili', + 'discovered_empty' => 'Nessun campo trovato nell\'ultimo elemento.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'Metodo', + 'auth_type' => 'Autenticazione', + 'auth' => [ + 'none' => 'Nessuna (pubblica)', + 'bearer' => 'Token Bearer', + 'basic' => 'Autenticazione di base', + 'api_key' => 'Header con chiave API', + ], + 'bearer_token' => 'Token Bearer', + 'basic_username' => 'Nome utente', + 'basic_password' => 'Password', + 'api_key_header' => 'Nome dell\'header', + 'api_key_value' => 'Chiave API', + 'body_template' => 'Modello del corpo (JSON)', + 'headers' => 'Header', + 'header_name' => 'Nome dell\'header', + 'header_value' => 'Valore', + 'add_header' => 'Aggiungi header', + 'polling_section' => 'Elenco e deduplicazione (facoltativo)', + 'polling_hint' => 'Quando la risposta è un elenco, ogni elemento esegue il flusso di lavoro separatamente. Un singolo oggetto viene eseguito una volta.', + 'items_path' => 'Percorso degli elementi', + 'items_path_hint' => 'Lascia vuoto se la risposta è già un array. Usa un percorso con punti (es. data.items) per un array annidato, oppure * per un oggetto con chiave per id.', + 'item_key_path' => 'Percorso della chiave elemento', + 'item_key_path_hint' => 'Percorso JSON a un id univoco (es. id). Gli elementi già visti vengono saltati, così un feed senza date inoltra comunque solo le voci nuove.', + 'item_date_path' => 'Percorso della data elemento', + 'item_date_path_hint' => 'Percorso JSON al timestamp dell\'elemento (es. published_at). Preferito rispetto al percorso della chiave quando disponibile. Il primo polling registra la baseline e non inoltra nulla, così un feed esistente non inonda mai il primo giorno.', + ], + ], + + 'delete' => [ + 'title' => 'Elimina automazione', + 'description' => 'Vuoi davvero eliminare questa automazione? Verranno rimossi anche tutte le esecuzioni e gli elementi trigger. Questa azione non può essere annullata.', + 'confirm' => 'Elimina', + 'cancel' => 'Annulla', + ], + + 'flash' => [ + 'deleted' => 'Automazione eliminata con successo!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'Nessun account social attivo configurato per questa automazione.', + 'must_have_one_trigger' => 'L\'automazione deve avere esattamente un nodo trigger.', + 'trigger_must_be_connected' => 'Il nodo trigger deve essere collegato ad almeno un nodo.', + 'graph_contains_cycle' => 'Il grafo dell\'automazione contiene un ciclo.', + 'only_failed_can_retry' => 'Solo le esecuzioni non riuscite possono essere ritentate.', + 'no_generated_post' => 'Nessun post generato trovato nell\'esecuzione.', + 'webhook_server_error' => 'Errore del server webhook.', + 'webhook_request_failed' => 'Impossibile completare la richiesta webhook.', + 'webhook_missing_url' => 'Al nodo webhook manca un URL.', + 'webhook_invalid_payload_json' => 'Il modello di payload non è un JSON valido.', + 'url_not_allowed' => 'L\'URL della richiesta punta a un indirizzo privato o irraggiungibile ed è stato bloccato.', + 'node_no_longer_exists' => 'Il nodo :node_id non esiste più nell\'automazione.', + 'no_trigger_connection' => 'Nessun nodo collegato al nodo Trigger.', + 'fetch_rss_missing_url' => 'Al nodo Recupera RSS manca un URL del feed.', + 'fetch_rss_request_failed' => 'La richiesta al feed RSS non è riuscita.', + 'fetch_rss_malformed' => 'Il feed RSS è malformato.', + 'http_missing_url' => 'Al nodo richiesta HTTP manca un URL.', + 'http_request_exception' => 'La richiesta HTTP ha generato un\'eccezione.', + 'http_request_failed' => 'La richiesta HTTP non è riuscita.', + 'http_items_path_not_array' => 'Il percorso degli elementi non ha restituito un elenco.', + ], +]; diff --git a/lang/it/billing.php b/lang/it/billing.php new file mode 100644 index 00000000..2af61f74 --- /dev/null +++ b/lang/it/billing.php @@ -0,0 +1,76 @@ + 'Fatturazione', + + 'past_due_notice' => [ + 'title' => 'Pagamento scaduto', + 'description' => 'Aggiorna il tuo metodo di pagamento per mantenere attivo l\'abbonamento.', + 'cta' => 'Aggiorna pagamento', + ], + + 'annual_banner' => [ + 'title' => 'Ottieni 2 mesi gratis', + 'description' => 'Passa alla fatturazione annuale e paga meno ogni mese: stesso piano, nient\'altro cambia.', + 'cta' => 'Passa all\'annuale', + ], + + 'subscribe' => [ + 'billed_monthly' => 'Fatturazione mensile', + 'billed_yearly' => 'Fatturazione annuale', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'Piano', + 'description' => 'Gestisci il tuo piano di abbonamento.', + 'label' => 'Piano', + 'workspaces' => '{1}:count workspace|[2,*]:count workspace', + 'per_workspace' => 'per workspace', + 'price' => 'Prezzo', + 'month' => 'mese', + 'trial' => 'Prova', + 'active' => 'Attivo', + 'past_due' => 'Scaduto', + 'cancelling' => 'In cancellazione', + 'trial_ends' => 'La prova termina', + ], + + 'subscription' => [ + 'title' => 'Abbonamento', + 'description' => 'Gestisci il tuo metodo di pagamento, i dati di fatturazione e l\'abbonamento.', + 'payment_method' => 'Metodo di pagamento', + 'no_payment_method' => 'Nessun metodo di pagamento ancora registrato.', + 'expires_on' => 'Scade il :month/:year', + 'manage_label' => 'Abbonamento', + 'manage_stripe' => 'Gestisci su Stripe', + ], + + 'invoices' => [ + 'title' => 'Fatture', + 'description' => 'Scarica le tue fatture passate.', + 'empty' => 'Nessuna fattura trovata', + 'paid' => 'Pagata', + ], + + 'flash' => [ + 'plan_changed' => 'Ora sei sul piano :plan.', + 'switched_to_yearly' => 'Ora hai la fatturazione annuale.', + 'cannot_manage' => 'Solo il proprietario dell\'account può gestire la fatturazione.', + 'credits_exhausted' => 'Crediti IA esauriti: la tua quota mensile di :limit è stata utilizzata. Aggiorna il tuo piano o attendi il mese prossimo.', + 'subscription_required' => 'È richiesto un abbonamento attivo per usare le funzioni IA.', + ], + + 'processing' => [ + 'page_title' => 'Elaborazione...', + 'title' => 'Elaborazione del tuo abbonamento', + 'description' => 'Attendi mentre configuriamo il tuo account. Ci vorrà solo un momento.', + 'success_title' => 'Tutto pronto!', + 'success_description' => 'Il tuo abbonamento è attivo. Ti stiamo reindirizzando ai tuoi workspace...', + 'cancelled_title' => 'Pagamento annullato', + 'cancelled_description' => 'Il tuo pagamento è stato annullato. Non è stato effettuato alcun addebito.', + 'retry' => 'Riprova', + ], +]; diff --git a/lang/it/brands.php b/lang/it/brands.php new file mode 100644 index 00000000..2a7ffb13 --- /dev/null +++ b/lang/it/brands.php @@ -0,0 +1,39 @@ + 'Nuovo brand', + 'no_brands_yet' => 'Ancora nessun brand', + 'no_brands_description' => 'Crea brand per organizzare i tuoi account social per cliente o progetto', + 'accounts_count' => ':count account', + + 'create' => [ + 'title' => 'Crea brand', + 'description' => 'Dai un nome al tuo brand per raggruppare gli account social', + 'name' => 'Nome del brand', + 'name_placeholder' => 'es. Acme Corp, Personale', + 'submit' => 'Crea brand', + 'submitting' => 'Creazione in corso...', + ], + + 'edit' => [ + 'title' => 'Modifica brand', + 'description' => 'Aggiorna il nome di questo brand', + 'name' => 'Nome del brand', + 'name_placeholder' => 'es. Acme Corp, Personale', + 'submit' => 'Salva modifiche', + 'submitting' => 'Salvataggio in corso...', + ], + + 'delete' => [ + 'title' => 'Elimina brand', + 'description' => 'Vuoi davvero eliminare questo brand? Gli account social verranno rimossi dall\'assegnazione ma non eliminati.', + 'confirm' => 'Elimina', + 'cancel' => 'Annulla', + ], + + 'flash' => [ + 'created' => 'Brand creato con successo!', + 'updated' => 'Brand aggiornato con successo!', + 'deleted' => 'Brand eliminato con successo!', + ], +]; diff --git a/lang/it/calendar.php b/lang/it/calendar.php new file mode 100644 index 00000000..a5ee048c --- /dev/null +++ b/lang/it/calendar.php @@ -0,0 +1,12 @@ + 'Calendario', + 'today' => 'Oggi', + 'day' => 'Giorno', + 'week' => 'Settimana', + 'month' => 'Mese', + 'new_post' => 'Nuovo post', + 'no_content' => 'Nessun contenuto', + 'more' => '+:count in più', +]; diff --git a/lang/it/comments.php b/lang/it/comments.php new file mode 100644 index 00000000..ecc96dc1 --- /dev/null +++ b/lang/it/comments.php @@ -0,0 +1,18 @@ + 'Scrivi un commento...', + 'reply_placeholder' => 'Scrivi una risposta...', + 'reply' => 'Rispondi', + 'edit' => 'Modifica', + 'delete' => 'Elimina', + 'edited' => 'modificato', + 'save' => 'Salva', + 'cancel' => 'Annulla', + 'send' => 'Invia', + 'replying_to' => 'In risposta a :name', + 'empty' => 'Ancora nessun commento. Inizia la conversazione.', + 'load_more' => 'Carica commenti meno recenti', + 'today' => 'Oggi', + 'yesterday' => 'Ieri', +]; diff --git a/lang/it/common.php b/lang/it/common.php new file mode 100644 index 00000000..5149397f --- /dev/null +++ b/lang/it/common.php @@ -0,0 +1,59 @@ + 'Indietro', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'Questa azione non può essere annullata.', + 'type' => 'Digita', + 'to_confirm' => 'per confermare.', + 'copy_to_clipboard' => 'Copia negli appunti', + 'delete_keyword' => 'elimina', + ], + + 'photo_upload' => [ + 'upload' => 'Carica', + 'uploading' => 'Caricamento in corso...', + 'remove' => 'Rimuovi foto', + 'hint' => 'Consigliato: immagine quadrata, max 2 MB.', + ], + + 'timezone' => [ + 'select' => 'Seleziona fuso orario', + 'search' => 'Cerca fuso orario...', + 'empty' => 'Nessun fuso orario trovato', + ], + + 'date_picker' => [ + 'select' => 'Seleziona data', + ], + + 'date_range_picker' => [ + 'placeholder' => 'Scegli un intervallo di date', + 'today' => 'Oggi', + 'yesterday' => 'Ieri', + 'last_7_days' => 'Ultimi 7 giorni', + 'last_30_days' => 'Ultimi 30 giorni', + 'last_3_months' => 'Ultimi 3 mesi', + 'last_6_months' => 'Ultimi 6 mesi', + 'last_12_months' => 'Ultimi 12 mesi', + 'this_month' => 'Questo mese', + 'last_month' => 'Mese scorso', + 'year_to_date' => 'Da inizio anno', + 'last_year' => 'Anno scorso', + ], + + 'cancel' => 'Annulla', + 'clear' => 'Cancella', + 'close' => 'Chiudi', + 'loading_more' => 'Caricamento in corso...', + + 'actions' => [ + 'copy' => 'Copia', + 'copied' => 'Copiato', + 'copy_failed' => 'Impossibile copiare negli appunti', + ], +]; diff --git a/lang/it/labels.php b/lang/it/labels.php new file mode 100644 index 00000000..288b8a37 --- /dev/null +++ b/lang/it/labels.php @@ -0,0 +1,54 @@ + 'Etichette', + 'description' => 'Crea etichette per organizzare e categorizzare i tuoi post', + 'search' => 'Cerca etichette...', + 'new_label' => 'Nuova etichetta', + 'no_labels_yet' => 'Ancora nessuna etichetta', + 'no_search_results' => 'Nessuna etichetta corrisponde alla ricerca', + 'try_different_search' => 'Prova con un\'altra parola chiave o cancella la ricerca.', + 'create_first_label' => 'Crea la tua prima etichetta', + 'table' => [ + 'name' => 'Nome', + 'created_at' => 'Creata', + ], + + 'actions' => [ + 'edit' => 'Modifica etichetta', + 'delete' => 'Elimina etichetta', + ], + + 'create' => [ + 'title' => 'Crea etichetta', + 'description' => 'Dai un nome alla tua etichetta e scegli un colore', + 'name' => 'Nome', + 'name_placeholder' => 'Inserisci il nome dell\'etichetta...', + 'color' => 'Colore', + 'submit' => 'Crea etichetta', + 'submitting' => 'Creazione in corso...', + ], + + 'edit' => [ + 'title' => 'Modifica etichetta', + 'description' => 'Aggiorna il nome e il colore di questa etichetta', + 'name' => 'Nome', + 'name_placeholder' => 'Inserisci il nome dell\'etichetta...', + 'color' => 'Colore', + 'submit' => 'Salva modifiche', + 'submitting' => 'Salvataggio in corso...', + ], + + 'delete' => [ + 'title' => 'Elimina etichetta', + 'description' => 'Vuoi davvero eliminare questa etichetta? Questa azione non può essere annullata.', + 'confirm' => 'Elimina', + 'cancel' => 'Annulla', + ], + + 'flash' => [ + 'created' => 'Etichetta creata con successo!', + 'updated' => 'Etichetta aggiornata con successo!', + 'deleted' => 'Etichetta eliminata con successo!', + ], +]; diff --git a/lang/it/mail.php b/lang/it/mail.php new file mode 100644 index 00000000..78bbc91d --- /dev/null +++ b/lang/it/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => ':name ti ha menzionato su TryPost', + 'title' => ':name ti ha menzionato', + 'intro' => ':name ti ha menzionato nel commento a un post.', + 'cta' => 'Visualizza commento', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :count account deve essere ricollegato in :workspace|[2,*] :count account devono essere ricollegati in :workspace', + 'title' => 'Alcuni account devono essere ricollegati', + 'intro' => 'I seguenti account social nel tuo workspace :workspace sono stati scollegati e devono essere ricollegati:', + 'reasons_title' => 'Questo potrebbe essere accaduto perché:', + 'reason_expired' => 'I token di accesso sono scaduti', + 'reason_revoked' => 'Hai revocato l\'accesso a TryPost sulla piattaforma', + 'reason_changed' => 'La piattaforma ha modificato i propri requisiti di autenticazione', + 'reconnect_cta' => 'Ricollega questi account per continuare a programmare e pubblicare i post.', + 'button' => 'Ricollega account', + ], +]; diff --git a/lang/it/notifications.php b/lang/it/notifications.php new file mode 100644 index 00000000..23e60250 --- /dev/null +++ b/lang/it/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'Il tuo post è pronto', + 'body' => 'L\'IA ha appena finito. Tocca per rivedere e pubblicare.', + ], + 'account_disconnected' => [ + 'title' => 'Account :platform scollegato', + 'body' => ':account deve essere ricollegato', + ], + 'account_token_expired' => [ + 'title' => 'L\'account :platform deve essere ricollegato', + 'body' => 'Sessione di :account scaduta — ricollegalo per continuare a pubblicare', + ], +]; diff --git a/lang/it/onboarding.php b/lang/it/onboarding.php new file mode 100644 index 00000000..120827b1 --- /dev/null +++ b/lang/it/onboarding.php @@ -0,0 +1,41 @@ + 'Benvenuto su TryPost', + 'description' => 'Dicci cosa descrive meglio te o la tua attività così possiamo personalizzare la tua esperienza.', + 'continue' => 'Continua', + 'personas' => [ + 'creator' => 'Creatore di contenuti', + 'freelancer' => 'Freelance', + 'developer' => 'Sviluppatore', + 'startup' => 'Startup', + 'agency' => 'Agenzia', + 'small_business' => 'Piccola impresa', + 'marketer' => 'Marketer', + 'online_store' => 'Negozio online', + 'other' => 'Altro', + ], + 'goals_title' => 'Qual è il tuo obiettivo con TryPost?', + 'goals_description' => 'Scegli tutto ciò che fa per te e configureremo TryPost per te.', + 'goals' => [ + 'save_time' => 'Risparmiare tempo pubblicando ovunque in una volta', + 'ai_content' => 'Creare post più velocemente con l\'IA', + 'plan_calendar' => 'Pianificare i miei post su un calendario', + 'stay_on_brand' => 'Mantenere ogni post in linea con il brand', + 'grow_audience' => 'Far crescere il mio pubblico e il coinvolgimento', + 'drive_sales' => 'Ottenere più traffico e vendite', + 'manage_clients' => 'Gestire più brand o clienti', + 'team_collaboration' => 'Lavorare con il mio team', + 'automate_api' => 'Automatizzare la pubblicazione con API, MCP o codice', + 'track_performance' => 'Vedere come vanno i miei post', + 'just_exploring' => 'Sto solo dando un\'occhiata', + 'other' => 'Qualcos\'altro', + ], + 'connect' => [ + 'title' => 'Collega la tua prima rete', + 'description' => 'Collega almeno un account social per iniziare a programmare. Puoi aggiungerne altri in qualsiasi momento.', + 'must_connect' => 'Collega almeno una rete per continuare.', + ], +]; diff --git a/lang/it/pagination.php b/lang/it/pagination.php new file mode 100644 index 00000000..9d6a2e2b --- /dev/null +++ b/lang/it/pagination.php @@ -0,0 +1,19 @@ + '« Precedente', + 'next' => 'Successivo »', + +]; diff --git a/lang/it/passwords.php b/lang/it/passwords.php new file mode 100644 index 00000000..556d8e76 --- /dev/null +++ b/lang/it/passwords.php @@ -0,0 +1,22 @@ + 'La tua password è stata reimpostata.', + 'sent' => 'Ti abbiamo inviato via email il link per reimpostare la password.', + 'throttled' => 'Attendi prima di riprovare.', + 'token' => 'Questo token di reimpostazione della password non è valido.', + 'user' => 'Non riusciamo a trovare un utente con questo indirizzo email.', + +]; diff --git a/lang/it/posts.php b/lang/it/posts.php new file mode 100644 index 00000000..e98a6a98 --- /dev/null +++ b/lang/it/posts.php @@ -0,0 +1,671 @@ + 'Post', + 'search' => 'Cerca post...', + 'all_posts' => 'Tutti i post', + 'new_post' => 'Nuovo post', + 'no_posts' => 'Nessun post trovato', + 'no_search_results' => 'Nessun post corrisponde alla ricerca', + 'try_different_search' => 'Prova con un\'altra parola chiave o cancella la ricerca.', + 'start_creating' => 'Inizia creando il tuo primo post.', + 'filter_by_label' => 'Filtra per etichetta', + 'label_search_placeholder' => 'Cerca etichette...', + 'no_labels' => 'Nessuna etichetta trovata.', + 'clear_label_filter' => 'Cancella filtro etichetta', + 'table' => [ + 'post' => 'Post', + 'status' => 'Stato', + 'content' => 'Contenuto', + 'platforms' => 'Piattaforme', + 'labels' => 'Etichette', + 'scheduled_at' => 'Data', + 'actions' => '', + ], + 'manage_posts' => 'Gestisci tutti i tuoi post', + 'delete_confirm' => 'Vuoi davvero eliminare questo post?', + 'by' => 'di', + + 'actions' => [ + 'view' => 'Visualizza post', + 'delete' => 'Elimina', + 'duplicate' => 'Duplica', + 'copy_id' => 'Copia ID', + 'copied' => 'ID copiato negli appunti', + ], + + 'form' => [ + 'post_type' => 'Tipo di post', + 'board' => 'Bacheca', + 'select_board' => 'Seleziona una bacheca', + 'search_board' => 'Cerca bacheca...', + 'no_board_found' => 'Nessuna bacheca trovata', + 'media' => 'Media', + 'min' => 'Min', + 'uploading' => 'Caricamento in corso...', + 'drop_to_upload' => 'Rilascia per caricare', + 'drag_and_drop' => 'Trascina e rilascia oppure clicca per caricare', + 'photos_and_videos' => 'Foto e video', + 'photos_only' => 'Solo foto', + 'videos_only' => 'Solo video', + 'drag_to_reorder' => 'Trascina per riordinare', + 'caption' => 'Didascalia', + 'write_caption' => 'Scrivi la tua didascalia...', + 'content_exceeds_platform' => ':platform: troppo lungo di :over caratteri (max :limit).', + 'tiktok' => [ + 'settings' => 'Impostazioni TikTok', + 'variant_label' => 'Tipo di post', + 'variant' => [ + 'video' => 'Video', + 'photo' => 'Carosello di foto', + ], + 'posting_to' => 'Pubblicazione su', + 'privacy_level' => 'Chi può vedere questo video?', + 'privacy_placeholder' => 'Seleziona chi può vedere questo post', + 'privacy' => [ + 'public' => 'Pubblico per tutti', + 'friends' => 'Amici che segui reciprocamente', + 'followers' => 'Follower', + 'private' => 'Solo io', + 'private_disabled_branded' => 'La visibilità dei contenuti brandizzati non può essere impostata su privata.', + ], + 'privacy_hint' => 'Le opzioni disponibili dipendono dalle impostazioni del tuo account TikTok.', + 'auto_add_music' => 'Aggiungi musica automaticamente', + 'auto_add_music_hint' => 'Questa funzione è disponibile solo per le foto. Aggiungerà una musica predefinita che potrai cambiare in seguito.', + 'yes' => 'Sì', + 'no' => 'No', + 'allow_users' => 'Consenti agli utenti di:', + 'comments' => 'Commentare', + 'duet' => 'Duetto', + 'stitch' => 'Stitch', + 'is_aigc' => 'Video creato con l\'IA', + 'disclose' => 'Dichiara il contenuto del video', + 'disclose_hint' => 'Attiva per dichiarare che questo video promuove beni o servizi in cambio di qualcosa di valore. Il tuo video può promuovere te stesso, terze parti o entrambi.', + 'promotional_organic_title' => 'La tua foto/video sarà etichettata come "Contenuto promozionale".', + 'promotional_paid_title' => 'La tua foto/video sarà etichettata come "Partnership retribuita".', + 'promotional_description' => 'Questo non può essere modificato una volta pubblicato il video.', + 'compliance_incomplete' => 'Devi indicare se il tuo contenuto promuove te stesso, terze parti o entrambi.', + 'privacy_required' => 'Il livello di privacy di TikTok è obbligatorio per la pubblicazione.', + 'branded_cleared_private' => 'La privacy è stata azzerata perché i contenuti brandizzati non possono essere privati.', + 'interaction_disabled_by_creator' => 'Disattivato nelle impostazioni del tuo account TikTok', + 'max_duration_exceeded' => 'Il video dura :duration s ma questo account può pubblicare solo video fino a :max s.', + 'processing_hint' => 'Dopo la pubblicazione, potrebbero volerci alcuni minuti perché il contenuto venga elaborato e appaia sul tuo profilo TikTok.', + 'brand_organic' => 'Il tuo brand', + 'brand_organic_hint' => 'Stai promuovendo te stesso o il tuo brand. Questo video sarà classificato come Brand Organic.', + 'brand_content' => 'Contenuto brandizzato', + 'brand_content_hint' => 'Stai promuovendo un altro brand o una terza parte. Questo video sarà classificato come Branded Content.', + 'compliance' => [ + 'agree' => 'Pubblicando, accetti la', + 'music_usage' => 'Conferma sull\'uso della musica', + 'and' => 'e la', + 'branded_policy' => 'Policy sui contenuti brandizzati di TikTok', + ], + ], + 'instagram' => [ + 'settings' => 'Impostazioni Instagram', + 'posting_to' => 'Pubblicazione su', + 'variant_label' => 'Tipo di post', + 'variant' => [ + 'feed' => 'Post nel feed', + 'reel' => 'Reel', + 'story' => 'Storia', + ], + 'aspect_label' => 'Proporzioni', + 'aspect' => [ + 'square' => 'Quadrato (1:1)', + 'portrait' => 'Verticale (4:5)', + 'landscape' => 'Orizzontale (16:9)', + 'original' => 'Originale', + ], + ], + 'facebook' => [ + 'settings' => 'Impostazioni Facebook', + 'posting_to' => 'Pubblicazione su', + 'variant_label' => 'Tipo di post', + 'variant' => [ + 'post' => 'Post', + 'reel' => 'Reel', + 'story' => 'Storia', + ], + 'aspect_label' => 'Proporzioni', + 'aspect' => [ + 'square' => 'Quadrato (1:1)', + 'portrait' => 'Verticale (4:5)', + 'landscape' => 'Orizzontale (16:9)', + 'original' => 'Originale', + ], + ], + 'linkedin' => [ + 'settings' => 'Impostazioni LinkedIn', + 'settings_page' => 'Impostazioni pagina LinkedIn', + 'posting_to' => 'Pubblicazione su', + 'document_title' => 'Titolo del documento', + 'document_title_placeholder' => 'Mostrato sul tuo post con documento PDF', + ], + 'pinterest' => [ + 'settings' => 'Impostazioni Pinterest', + 'posting_to' => 'Pubblicazione su', + 'variant_label' => 'Tipo di Pin', + 'variant' => [ + 'pin' => 'Pin', + 'video_pin' => 'Pin video', + 'carousel' => 'Carosello', + ], + 'board' => 'Bacheca', + 'select_board' => 'Seleziona una bacheca', + 'no_boards' => 'Nessuna bacheca Pinterest trovata. Creane una nel tuo account Pinterest prima.', + 'search_board' => 'Cerca bacheche...', + 'no_board_found' => 'Nessuna bacheca corrisponde alla ricerca.', + 'board_required' => 'Seleziona una bacheca Pinterest per pubblicare questo post.', + ], + 'discord' => [ + 'settings' => 'Impostazioni Discord', + 'posting_to' => 'Pubblicazione su', + 'channel' => 'Canale', + 'select_channel' => 'Seleziona un canale', + 'loading_channels' => 'Caricamento canali…', + 'search_channel' => 'Cerca canali…', + 'no_channels' => 'Nessun canale trovato.', + 'channel_required' => 'Seleziona un canale Discord per pubblicare questo post.', + 'mentions' => 'Menzioni', + 'search_mention' => 'Menziona un ruolo o un membro…', + 'embeds' => 'Embed', + 'embed' => 'Embed', + 'add_embed' => 'Aggiungi embed', + 'embed_title' => 'Titolo dell\'embed', + 'embed_description' => 'Descrizione dell\'embed', + 'embed_url' => 'URL dell\'embed', + 'embed_image' => 'URL immagine', + 'embed_color' => 'Colore', + ], + 'warnings' => [ + 'no_variant' => 'Scegli un tipo di post per continuare.', + 'requires_media' => 'Questo tipo di post richiede almeno un\'immagine o un video.', + 'max_files_exceeded' => 'Questo tipo di post accetta fino a :max file multimediali (ne hai :current).', + 'min_files_required' => 'Questo tipo di post richiede almeno :min file multimediali (ne hai :current).', + 'no_video_allowed' => 'Questo tipo di post non accetta video.', + 'no_image_allowed' => 'Questo tipo di post accetta solo video.', + 'no_document_allowed' => 'Questo tipo di post non accetta documenti PDF.', + 'no_mixed_media' => 'Immagini e video non possono essere combinati nello stesso post.', + 'document_not_alone' => 'Un PDF deve essere pubblicato da solo, senza altre immagini o video.', + 'gif_not_allowed' => 'Questa piattaforma non accetta GIF. Rimuovi la GIF o scegli un\'altra rete.', + 'image_too_large' => 'L\'immagine supera il limite di :max per questo tipo di post (la tua è :current).', + 'video_too_large' => 'Il video supera il limite di :max per questo tipo di post (il tuo è :current).', + 'document_too_large' => 'Il PDF supera il limite di :max per questo tipo di post (il tuo è :current).', + 'video_too_long' => 'Il video dura :current, ma questo tipo di post consente fino a :max.', + 'aspect_ratio_too_narrow' => 'Le proporzioni :current sono troppo alte per questo tipo di post (min :min).', + 'aspect_ratio_too_wide' => 'Le proporzioni :current sono troppo larghe per questo tipo di post (max :max).', + ], + ], + + 'status' => [ + 'pending' => 'In attesa', + 'draft' => 'Bozza', + 'scheduled' => 'Programmato', + 'publishing' => 'In pubblicazione', + 'retrying' => 'Nuovo tentativo', + 'published' => 'Pubblicato', + 'partially_published' => 'Pubblicato parzialmente', + 'failed' => 'Non riuscito', + ], + + 'descriptions' => [ + 'draft' => 'Post in attesa di essere programmati', + 'scheduled' => 'Post programmati per la pubblicazione', + 'published' => 'Post già pubblicati', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'Genera con l\'IA', + 'title' => 'Genera post con l\'IA', + 'description' => 'Descrivi di cosa deve parlare il post. L\'IA userà il contesto del tuo brand per scriverlo.', + 'prompt_label' => 'Di cosa parla questo post?', + 'prompt_placeholder' => 'es. Annuncia la nostra nuova funzione di generazione immagini per i caroselli', + 'preview_label' => 'Anteprima', + 'start' => 'Genera', + 'apply' => 'Usa questo contenuto', + 'retry' => 'Riprova', + 'cancel' => 'Annulla', + ], + 'review' => [ + 'button_tooltip' => 'Rivedi con l\'IA', + 'title' => 'Rivedi il post con l\'IA', + 'description' => 'L\'IA controlla grammatica, ortografia e chiarezza. Applica i suggerimenti con cui sei d\'accordo.', + 'loading' => 'Revisione del tuo testo...', + 'no_issues' => 'Nessun problema trovato. Sembra tutto a posto.', + 'original' => 'Originale', + 'suggestion' => 'Suggerimento', + 'apply' => 'Applica', + 'apply_all' => 'Applica tutti', + 'applied' => 'Applicato', + 'cancel' => 'Annulla', + ], + 'image_regenerate' => [ + 'button' => 'Regola', + 'title' => 'Regola immagine IA', + 'description' => 'Descrivi la correzione. La nuova immagine sostituisce quella attuale e mantiene la sua posizione nel carosello.', + 'instruction_label' => 'Istruzione', + 'instruction_placeholder' => 'es. Correggi il refuso nel titolo e schiarisci lo sfondo.', + 'processing' => 'Rigenerazione dell\'immagine... può richiedere alcuni secondi.', + 'submit' => 'Rigenera immagine', + 'cancel' => 'Annulla', + 'success' => 'Immagine aggiornata. La nuova versione ha sostituito quella precedente nel tuo post.', + 'fallback_title' => 'Migliora il testo di questa immagine', + 'errors' => [ + 'required' => 'L\'istruzione è obbligatoria.', + 'start_failed' => 'Impossibile avviare la rigenerazione.', + 'unavailable' => 'Impossibile rigenerare questa immagine in questo momento.', + 'timeout' => 'La rigenerazione sta richiedendo più tempo del previsto. Riprova tra un momento.', + 'media_not_found' => 'Elemento multimediale non trovato.', + 'not_ai_media' => 'Solo i media generati dall\'IA possono essere rigenerati.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'Post con immagine', + 'description' => 'Immagine IA con titolo e didascalia.', + ], + 'carousel' => [ + 'name' => 'Carosello', + 'description' => 'Carosello multi-slide con una didascalia.', + ], + 'tweet_card' => [ + 'name' => 'Tweet card', + 'description' => 'Il tuo post con lo stile di un post X/Twitter.', + ], + 'tweet_card_image' => [ + 'name' => 'Tweet card con foto', + 'description' => 'Il tuo post come card X/Twitter su una foto sfocata.', + ], + ], + ], + + 'show' => [ + 'title' => 'Dettagli del post', + 'edit' => 'Modifica', + 'back' => 'Indietro', + 'no_content' => 'Nessuna didascalia', + 'platforms' => 'Piattaforme', + 'no_platforms' => 'Nessuna piattaforma selezionata.', + 'view_on_platform' => 'Visualizza sulla piattaforma', + 'published_on' => 'Pubblicato il :date', + 'scheduled_for' => 'Programmato per il :date', + 'draft' => 'Bozza', + 'status_pending' => 'In attesa', + 'metrics' => 'Metriche', + 'metrics_loading' => 'Caricamento metriche…', + 'metrics_unavailable' => 'Metriche non ancora disponibili per questa piattaforma.', + 'metrics_empty' => 'Nessuna metrica restituita.', + ], + + 'edit' => [ + 'title' => 'Modifica post', + 'view_title' => 'Visualizza post', + 'labels' => 'Etichette', + 'no_labels' => 'Nessuna etichetta ancora creata', + 'schedule' => 'Programma', + 'pick_time' => 'Scegli orario', + 'pick_time_past' => 'Scegli una data e un\'ora future.', + 'post_now' => 'Pubblica ora', + 'time' => 'Orario', + 'cancel' => 'Annulla', + 'delete' => 'Elimina', + 'schedule_for' => 'Programma per', + 'schedule_date' => 'Data di programmazione', + 'unschedule' => 'Annulla programmazione', + 'saving' => 'Salvataggio in corso...', + 'saved' => 'Salvato', + 'draft' => 'Bozza', + 'media' => 'Media', + 'add_media' => 'Aggiungi media', + 'caption' => 'Didascalia', + 'caption_placeholder' => 'Scrivi la tua didascalia...', + 'compose_title' => 'Crea un post', + 'compose_subtitle' => 'Componi il tuo messaggio e aggiungi media', + 'preview_empty' => [ + 'title' => 'Nessuna piattaforma selezionata', + 'description' => 'Seleziona una piattaforma su cui pubblicare per vedere l\'anteprima.', + ], + 'drop_zone_title' => 'Aggiungi media', + 'drop_zone_subtitle' => 'Trascina e rilascia i file oppure clicca per sfogliare', + 'add' => 'Aggiungi', + 'publish_to' => 'Pubblica su', + 'organize' => 'Organizza', + 'signatures' => 'Firme', + 'view_on_platform' => 'Visualizza sulla piattaforma', + 'platform_status' => 'Stato della piattaforma', + 'compliance_incomplete' => 'Alcune impostazioni della piattaforma sono incomplete o incompatibili con i media allegati.', + 'compliance' => [ + 'requires_content_or_media' => 'Aggiungi testo o media per pubblicare.', + 'requires_media' => 'Aggiungi un\'immagine o un video per pubblicare qui.', + 'too_many_files' => 'Sono consentiti solo :max file per questo formato.', + 'too_few_files' => 'Aggiungi almeno :min file per questo formato.', + 'no_videos' => 'Per questo formato sono consentite solo immagini.', + 'no_images' => 'Per questo formato sono consentiti solo video.', + 'no_mixed_media' => 'Immagini e video non possono essere combinati nello stesso post.', + 'no_gifs' => 'Le GIF non sono supportate qui.', + 'no_documents' => 'I documenti PDF non sono supportati da questo formato.', + 'document_not_alone' => 'Un PDF deve essere pubblicato da solo, senza altre immagini o video.', + 'video_too_large' => 'Il video supera il limite di dimensione per questa piattaforma.', + 'video_too_long' => 'Il video deve durare meno di :seconds secondi per questo formato.', + 'image_too_large' => 'L\'immagine supera il limite di dimensione per questa piattaforma.', + 'document_too_large' => 'Il PDF supera il limite di dimensione per questa piattaforma.', + 'aspect_ratio_invalid' => 'Le proporzioni non sono supportate da questo formato.', + 'no_content_type' => 'Scegli un tipo di contenuto per questa piattaforma.', + 'requires_text' => 'Aggiungi testo: questo formato richiede un titolo.', + ], + 'publishing' => 'Pubblicazione in corso...', + 'publishing_overlay_title' => 'Il tuo post è in fase di pubblicazione', + 'publishing_overlay_subtitle' => 'Può richiedere qualche istante. Puoi tranquillamente lasciare questa pagina.', + 'scheduled_overlay_title' => 'Questo post è programmato', + 'scheduled_overlay_subtitle' => 'Programmato per il :date. Annulla prima la programmazione per apportare modifiche.', + 'unschedule_cta' => 'Annulla programmazione per modificare', + + 'tabs' => [ + 'preview' => 'Anteprima', + 'channels' => 'Canali', + 'comments' => 'Commenti', + 'comments_empty' => 'Ancora nessun commento.', + ], + + 'media_picker' => [ + 'title' => 'Scegli dalla galleria', + 'search' => 'Cerca media...', + 'empty' => 'Ancora nessun media nella tua galleria', + 'cancel' => 'Annulla', + 'add' => 'Aggiungi', + 'add_count' => 'Aggiungi :count', + ], + + 'emoji_picker' => [ + 'search' => 'Cerca emoji', + 'empty' => 'Nessuna emoji trovata', + 'recent' => 'Usate di frequente', + 'smileys' => 'Smiley ed emozioni', + 'people' => 'Persone e corpo', + 'nature' => 'Animali e natura', + 'food' => 'Cibo e bevande', + 'activities' => 'Attività', + 'travel' => 'Viaggi e luoghi', + 'objects' => 'Oggetti', + 'symbols' => 'Simboli', + 'flags' => 'Bandiere', + ], + + 'status' => [ + 'pending' => 'In attesa', + 'scheduled' => 'Programmato', + 'published' => 'Pubblicato', + 'publishing' => 'Pubblicazione in corso...', + 'retrying' => 'Nuovo tentativo...', + 'failed' => 'Non riuscito', + ], + + 'delete_modal' => [ + 'title' => 'Elimina post', + 'description' => 'Vuoi davvero eliminare questo post? Questa azione non può essere annullata.', + 'action' => 'Elimina', + 'cancel' => 'Annulla', + ], + + 'sync_enable' => [ + 'title' => 'Abilitare la sincronizzazione?', + 'description' => 'Tutte le piattaforme condivideranno lo stesso contenuto. Eventuali modifiche personalizzate apportate alle singole piattaforme saranno sostituite con il contenuto attuale.', + 'cancel' => 'Annulla', + 'action' => 'Abilita sincronizzazione', + ], + + 'sync_disable' => [ + 'title' => 'Disabilitare la sincronizzazione?', + 'description' => 'Ogni piattaforma manterrà il proprio contenuto attuale, ma le modifiche future si applicheranno solo alla piattaforma che stai modificando.', + 'customize_note' => 'Potrai personalizzare il contenuto per ogni piattaforma singolarmente.', + 'cancel' => 'Annulla', + 'action' => 'Disabilita sincronizzazione', + ], + + 'platforms_dialog' => [ + 'title' => 'Seleziona piattaforme', + 'description' => 'Scegli su quali piattaforme pubblicare questo post.', + ], + + 'signatures_modal' => [ + 'search' => 'Cerca firme...', + 'no_results' => 'Nessuna firma trovata.', + ], + + 'validation' => [ + 'select_board' => 'Seleziona una bacheca', + 'images_not_supported' => 'Immagini non supportate', + 'videos_not_supported' => 'Video non supportati', + 'max_images' => 'Max :count immagini', + 'requires_media' => 'Richiede media', + 'requires_content' => 'Il contenuto testuale è obbligatorio', + 'exceeded' => ':count in eccesso', + 'does_not_support_images' => ':platform non supporta le immagini', + 'supports_up_to_images' => ':platform supporta fino a :count immagini', + 'does_not_support_videos' => ':platform non supporta i video', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'Post nel feed', + 'description' => 'Appare nel tuo feed e nel profilo', + ], + 'instagram_reel' => [ + 'label' => 'Reel', + 'description' => 'Video breve fino a 90 secondi', + ], + 'instagram_story' => [ + 'label' => 'Storia', + 'description' => 'Scompare dopo 24 ore', + ], + 'linkedin_post' => [ + 'label' => 'Post', + 'description' => 'Post standard: immagine singola, multi-immagine, video o PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'Post', + 'description' => 'Post standard: immagine singola, multi-immagine, video o PDF', + ], + 'facebook_post' => [ + 'label' => 'Post', + 'description' => 'Post standard sulla tua pagina', + ], + 'facebook_reel' => [ + 'label' => 'Reel', + 'description' => 'Video breve fino a 90 secondi', + ], + 'facebook_story' => [ + 'label' => 'Storia', + 'description' => 'Storia video verticale, fino a 60 secondi', + ], + 'tiktok_video' => [ + 'label' => 'Video', + 'description' => 'Contenuto video in formato breve', + ], + 'tiktok_photo' => [ + 'label' => 'Carosello di foto', + 'description' => 'Fino a 35 foto come carosello scorrevole', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => 'Video verticale fino a 60 secondi', + ], + 'x_post' => [ + 'label' => 'Post', + 'description' => 'Tweet con testo e media', + ], + 'threads_post' => [ + 'label' => 'Post', + 'description' => 'Post di testo con media facoltativi', + ], + 'pinterest_pin' => [ + 'label' => 'Pin', + 'description' => 'Pin immagine standard', + ], + 'pinterest_video_pin' => [ + 'label' => 'Pin video', + 'description' => 'Pin video (4s - 15min)', + ], + 'pinterest_carousel' => [ + 'label' => 'Carosello', + 'description' => 'Carosello multi-immagine (2-5 immagini)', + ], + 'bluesky_post' => [ + 'label' => 'Post', + 'description' => 'Post di testo con immagini facoltative', + ], + 'mastodon_post' => [ + 'label' => 'Post', + 'description' => 'Post di testo con media facoltativi', + ], + 'telegram_post' => [ + 'label' => 'Post', + 'description' => 'Post di testo con media facoltativi', + ], + 'discord_message' => [ + 'label' => 'Messaggio', + 'description' => 'Messaggio a un canale Discord con media ed embed facoltativi', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'Pagina LinkedIn', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Pagina Facebook', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'Post programmato con successo!', + 'deleted' => 'Post eliminato con successo!', + 'duplicated' => 'Post duplicato come bozza.', + 'cannot_edit_finalized' => 'Questo post è già stato elaborato e non può essere ripubblicato. Duplicalo per riprovare.', + 'cannot_delete_published' => 'I post pubblicati non possono essere eliminati.', + 'connect_first' => 'Collega almeno una rete social prima di creare un post.', + ], + + 'errors' => [ + 'account_disconnected' => 'L\'account social è scollegato', + 'account_inactive' => 'L\'account social è disattivato', + 'account_token_expired' => 'Sessione dell\'account social scaduta — ricollegalo', + ], + + 'delete' => [ + 'title' => 'Eliminare il post?', + 'description' => 'Questa azione non può essere annullata. Il post e tutti i suoi media saranno rimossi definitivamente.', + 'confirm' => 'Sì, elimina', + 'cancel' => 'Annulla', + ], + + 'create' => [ + 'title' => 'Crea un nuovo post', + 'description' => 'Scegli come vuoi iniziare.', + 'scratch_title' => 'Inizia da zero', + 'scratch_description' => 'Apri un post vuoto e scrivi tutto da solo.', + 'ai_title' => 'Genera con l\'IA', + 'ai_description' => 'Descrivi ciò che vuoi e l\'IA genera il contenuto per te.', + 'ai_configure_description' => 'Scegli un formato e descrivi il post che vuoi creare.', + 'ai_pick_template_description' => 'Scegli uno stile per il tuo post generato dall\'IA.', + 'template_title' => 'Usa un modello', + 'template_description' => 'Scegli tra i nostri modelli curati e personalizza.', + 'coming_soon' => 'Prossimamente', + + 'preview' => [ + 'image_title' => 'Titolo immagine', + 'image_body' => 'Corpo immagine', + ], + + 'steps' => [ + 'template_picker_title' => 'Scegli uno stile', + 'format_title' => 'Scegli un formato', + 'format_description' => 'Seleziona il tipo di post che vuoi creare.', + 'account_title' => 'Scegli un account', + 'account_description' => 'Seleziona l\'account social su cui pubblicare.', + 'media_title' => 'Opzioni media', + 'media_carousel' => 'Quante slide?', + 'media_optional' => 'Includere immagini?', + 'media_optional_label' => 'Quante immagini?', + 'media_none' => 'Nessuna', + 'media_count_label' => 'Numero di immagini', + 'prompt_title' => 'Descrivi il tuo post', + 'prompt_label' => 'Di cosa parla questo post?', + 'prompt_placeholder' => 'es. Annuncia la nostra nuova funzione carosello per Instagram', + 'preview_error' => 'Qualcosa è andato storto. Riprova.', + 'loading_page_title' => 'Generazione del tuo post', + 'loading_eta' => 'Tempo stimato: circa :minutes.', + 'loading_eta_minute_one' => '1 minuto', + 'loading_eta_minute_other' => ':count minuti', + 'loading_leave_title' => 'Puoi continuare a lavorare.', + 'loading_leave_body' => 'Ti avviseremo quando il post sarà pronto.', + 'loading_leave_cta' => 'Vai al calendario', + 'loading_create_another_cta' => 'Crea un altro post', + 'loading_tip_credits' => 'Ogni immagine IA usa circa 15 crediti.', + 'loading_tip_edit' => 'Potrai modificare tutto una volta che il post sarà pronto.', + 'loading_tip_draft' => 'I post generati finiscono nelle tue bozze.', + 'loading_tip_brand' => 'Modifica le impostazioni del tuo brand per influenzare i post futuri.', + 'loading_tip_carousel' => 'I caroselli producono una slide per ogni immagine caricata.', + 'loading_tip_quality' => 'La qualità dell\'immagine è impostata per bilanciare velocità e costo.', + 'create' => 'Crea post', + 'back' => 'Indietro', + 'next' => 'Continua', + 'cancel' => 'Annulla', + 'discard' => 'Scarta', + 'retry' => 'Riprova', + 'no_platforms' => 'Nessun account collegato', + 'connect_first' => 'Collega almeno un account social per usare la generazione IA.', + 'no_account_for_template' => 'Collega un account compatibile per usare questo modello.', + + 'format' => [ + 'instagram_feed' => 'Post nel feed Instagram', + 'instagram_carousel' => 'Carosello Instagram', + 'linkedin_post' => 'Post LinkedIn', + 'linkedin_page_post' => 'Post pagina LinkedIn', + 'x_post' => 'Post X', + 'bluesky_post' => 'Post Bluesky', + 'threads_post' => 'Post Threads', + 'mastodon_post' => 'Post Mastodon', + 'telegram_post' => 'Post Telegram', + 'discord_message' => 'Messaggio Discord', + 'facebook_post' => 'Post Facebook', + 'pinterest_pin' => 'Pin Pinterest', + 'instagram_story' => 'Storia Instagram', + 'facebook_story' => 'Storia Facebook', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'Scegli un modello', + 'browser_description' => 'Parti da un modello curato e adattalo.', + 'search_placeholder' => 'Cerca modelli…', + 'no_search_results' => 'Nessun modello corrisponde alla ricerca', + 'try_different_search' => 'Prova con un\'altra parola chiave o cancella la ricerca.', + 'slides_count' => '{count} slide|{count} slide', + 'all_platforms' => 'Tutte le piattaforme', + 'platform_search_placeholder' => 'Cerca piattaforma…', + 'no_platform_match' => 'Nessuna piattaforma corrisponde.', + 'use_this' => 'Usa questo modello', + 'no_templates' => 'Nessun modello disponibile.', + 'applying' => 'Applicazione del modello…', + 'category' => [ + 'product_launch' => 'Lancio prodotto', + 'promotion' => 'Promozione', + 'educational' => 'Educativo', + 'behind_the_scenes' => 'Dietro le quinte', + 'testimonial' => 'Testimonianza', + 'industry_tip' => 'Consiglio di settore', + 'event' => 'Evento', + 'engagement' => 'Coinvolgimento', + ], + ], +]; diff --git a/lang/it/settings.php b/lang/it/settings.php new file mode 100644 index 00000000..98979ee9 --- /dev/null +++ b/lang/it/settings.php @@ -0,0 +1,356 @@ + 'Impostazioni', + 'description' => 'Gestisci il tuo profilo e le impostazioni dell\'account', + + 'hub' => [ + 'title' => 'Impostazioni', + 'description' => 'Scegli cosa vuoi gestire.', + 'profile' => [ + 'title' => 'Profilo', + 'description' => 'Aggiorna le tue informazioni personali, la password e le preferenze di notifica.', + ], + 'workspace' => [ + 'title' => 'Workspace', + 'description' => 'Configura il tuo workspace, il brand, i membri e le chiavi API.', + ], + 'account' => [ + 'title' => 'Account', + 'description' => 'Gestisci le informazioni del tuo account, l\'utilizzo e la fatturazione.', + ], + ], + + 'nav' => [ + 'profile' => 'Profilo', + 'authentication' => 'Autenticazione', + 'workspace' => 'Workspace', + 'members' => 'Membri', + 'notifications' => 'Notifiche', + 'billing' => 'Fatturazione', + ], + + 'notifications' => [ + 'title' => 'Preferenze di notifica', + 'heading' => 'Notifiche email', + 'description' => 'Scegli quali notifiche email vuoi ricevere', + 'post_published' => 'Post pubblicato', + 'post_published_description' => 'Ricevi un\'email quando il tuo post viene pubblicato con successo', + 'post_failed' => 'Pubblicazione non riuscita', + 'post_failed_description' => 'Ricevi un\'email quando la pubblicazione del tuo post non riesce', + 'account_disconnected' => 'Account scollegato', + 'account_disconnected_description' => 'Ricevi un\'email quando un account social viene scollegato', + 'save' => 'Salva preferenze', + ], + + 'profile' => [ + 'title' => 'Impostazioni profilo', + 'photo_heading' => 'Foto del profilo', + 'photo_description' => 'Carica una foto del profilo', + 'heading' => 'Informazioni del profilo', + 'description' => 'Aggiorna il tuo nome e indirizzo email', + 'avatar' => 'Avatar', + 'name' => 'Nome', + 'name_placeholder' => 'Nome completo', + 'email' => 'Indirizzo email', + 'email_placeholder' => 'Indirizzo email', + 'email_unverified' => 'Il tuo indirizzo email non è verificato.', + 'resend_verification' => 'Clicca qui per inviare di nuovo l\'email di verifica.', + 'verification_sent' => 'Un nuovo link di verifica è stato inviato al tuo indirizzo email.', + 'save' => 'Salva', + ], + + 'authentication' => [ + 'title' => 'Autenticazione', + 'page_title' => 'Impostazioni di autenticazione', + 'sessions' => [ + 'title' => 'Sessioni attive', + 'description' => 'Se noti qualcosa di sospetto, disconnetti gli altri dispositivi.', + 'unknown_browser' => 'Browser sconosciuto', + 'unknown_ip' => 'IP sconosciuto', + 'on' => 'su', + 'active_now' => 'Attivo ora', + 'log_out_others' => 'Disconnetti gli altri dispositivi', + 'modal_title' => 'Disconnetti gli altri dispositivi', + 'modal_description_password' => 'Inserisci la tua password attuale per confermare che vuoi disconnettere le altre sessioni del browser.', + 'modal_description_email' => 'Digita il tuo indirizzo email per confermare che vuoi disconnettere le altre sessioni del browser.', + 'password_placeholder' => 'Password attuale', + 'email_placeholder' => 'L\'email del tuo account', + 'cancel' => 'Annulla', + 'submit' => 'Disconnetti gli altri dispositivi', + 'email_mismatch' => 'L\'indirizzo email non corrisponde al tuo account.', + 'flash_logged_out' => 'Sei stato disconnesso dagli altri dispositivi.', + ], + 'password' => [ + 'update_title' => 'Aggiorna password', + 'set_title' => 'Imposta una password', + 'update_description' => 'Assicurati che il tuo account usi una password lunga e casuale per restare al sicuro.', + 'set_description' => 'Aggiungi una password così puoi accedere senza un provider collegato.', + 'current_password' => 'Password attuale', + 'new_password' => 'Nuova password', + 'confirm_password' => 'Conferma password', + 'save' => 'Salva password', + 'set' => 'Imposta password', + ], + 'providers' => [ + 'title' => 'Account collegati', + 'description' => 'Accedi più velocemente con questi provider collegati.', + 'connected' => 'Collegato', + 'not_connected' => 'Non collegato', + 'connect' => 'Collega', + 'disconnect' => 'Scollega', + 'flash_disconnected' => ':provider scollegato con successo.', + 'flash_connected' => ':provider collegato con successo.', + 'flash_already_linked' => 'Quell\'account :provider è già collegato a un altro utente.', + 'flash_cannot_disconnect' => 'Non puoi scollegare il tuo unico metodo di accesso. Imposta prima una password o collega un altro provider.', + ], + ], + + 'delete_account' => [ + 'heading' => 'Elimina account', + 'description' => 'Elimina il tuo account e tutte le sue risorse', + 'warning' => 'Attenzione', + 'warning_message' => 'Procedi con cautela, questa azione non può essere annullata.', + 'button' => 'Elimina account', + 'modal_title' => 'Vuoi davvero eliminare il tuo account?', + 'modal_description_password' => 'Una volta eliminato il tuo account, tutte le sue risorse e i suoi dati saranno eliminati definitivamente. Inserisci la tua password per confermare.', + 'modal_description_email' => 'Una volta eliminato il tuo account, tutte le sue risorse e i suoi dati saranno eliminati definitivamente. Digita il tuo indirizzo email :email per confermare.', + 'password' => 'Password', + 'password_placeholder' => 'Password', + 'email_placeholder' => 'L\'email del tuo account', + 'email_mismatch' => 'L\'indirizzo email non corrisponde al tuo account.', + 'cancel' => 'Annulla', + 'confirm' => 'Elimina account', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'Workspace', + 'brand' => 'Brand', + 'users' => 'Membri', + 'api_keys' => 'Chiavi API', + ], + 'title' => 'Impostazioni del workspace', + 'logo_heading' => 'Logo del workspace', + 'logo_description' => 'Carica un logo per il tuo workspace', + 'heading' => 'Nome del workspace', + 'description' => 'Aggiorna il nome del tuo workspace', + 'members_heading' => 'Membri', + 'members_description' => 'Gestisci i membri e gli inviti del workspace', + 'name' => 'Nome', + 'name_placeholder' => 'Il mio workspace', + 'save' => 'Salva', + ], + + 'brand' => [ + 'title' => 'Brand', + 'description' => 'Configura l\'identità del tuo brand per i contenuti generati dall\'IA.', + 'name' => 'Nome del workspace', + 'name_placeholder' => 'Il mio brand', + 'website' => 'Sito web', + 'website_placeholder' => 'https://iltuobrand.com', + 'brand_description' => 'Descrizione', + 'brand_description_placeholder' => 'Raccontaci del tuo brand, cosa fai e chi è il tuo pubblico...', + 'voice' => 'Tono del brand', + 'voice_description' => 'Scegli i tratti che definiscono come suonano i tuoi contenuti.', + 'voice_group' => [ + 'pov' => 'Punto di vista', + 'formality' => 'Formalità', + 'energy' => 'Energia', + 'humor' => 'Umorismo', + 'attitude' => 'Atteggiamento', + 'warmth' => 'Calore', + 'confidence' => 'Sicurezza', + 'style' => 'Stile', + ], + 'voice_trait' => [ + 'first_person' => 'Prima persona', + 'second_person' => 'Seconda persona (tu)', + 'third_person' => 'Terza persona', + 'formal' => 'Formale', + 'balanced' => 'Equilibrato', + 'casual' => 'Informale', + 'calm' => 'Calmo', + 'moderate' => 'Moderato', + 'enthusiastic' => 'Entusiasta', + 'vibrant' => 'Vivace', + 'serious' => 'Serio', + 'dry' => 'Pacato / sottile', + 'witty' => 'Arguto', + 'playful' => 'Giocoso', + 'respectful' => 'Rispettoso', + 'even_handed' => 'Imparziale', + 'bold' => 'Audace', + 'provocative' => 'Provocatorio', + 'neutral' => 'Neutro', + 'friendly' => 'Amichevole', + 'empathetic' => 'Empatico', + 'humble' => 'Umile', + 'confident' => 'Sicuro', + 'assertive' => 'Assertivo', + 'direct' => 'Diretto', + 'concise' => 'Conciso', + 'transparent' => 'Trasparente', + 'no_hype' => 'Senza esagerazioni', + 'practical' => 'Pratico', + 'data_driven' => 'Basato sui dati', + 'storytelling' => 'Narrativo', + 'inspirational' => 'Ispirazionale', + 'educational' => 'Educativo', + 'technical' => 'Tecnico', + 'minimalist' => 'Poche emoji', + ], + 'brand_color' => 'Colore del brand', + 'background_color' => 'Colore di sfondo', + 'text_color' => 'Colore del testo', + 'font' => 'Font', + 'image_style' => 'Stile immagine', + 'image_style_description' => 'Stile visivo applicato quando si generano le immagini delle slide e di copertina per i post IA.', + 'image_style_cinematic' => 'Cinematografico', + 'image_style_illustration' => 'Illustrazione', + 'image_style_isometric_3d' => 'Isometrico', + 'image_style_cartoon' => 'Cartone animato', + 'image_style_typographic' => 'Tipografico', + 'image_style_infographic' => 'Infografica', + 'image_style_minimalist' => 'Minimalista', + 'image_style_mockup' => 'Mockup', + 'content_language' => 'Lingua dei contenuti', + 'content_language_description' => 'Lingua usata per didascalie, hashtag generati dall\'IA e qualsiasi testo all\'interno di immagini o video generati.', + ], + + 'members' => [ + 'title' => 'Membri', + 'heading' => 'Membri del team', + 'description' => 'Gestisci membri e inviti per questo workspace', + + 'cancel' => 'Annulla', + 'remove' => 'Rimuovi', + 'make_role' => 'Rendi :role', + + 'invite' => [ + 'title' => 'Invita membro', + 'description' => 'Invia un invito via email per aggiungere collaboratori', + 'email' => 'Email', + 'email_placeholder' => 'collaboratore@email.com', + 'role' => 'Ruolo', + 'role_placeholder' => 'Seleziona un ruolo', + 'submit' => 'Invia invito', + ], + + 'pending' => [ + 'title' => 'Inviti in sospeso', + 'description' => 'Inviti in attesa di accettazione', + 'empty' => 'Nessun invito in sospeso', + ], + + 'list' => [ + 'title' => 'Membri', + 'description' => 'Persone con accesso a questo workspace', + 'empty' => 'Nessun membro oltre al proprietario', + ], + + 'remove_modal' => [ + 'title' => 'Rimuovi membro', + 'description' => 'Vuoi davvero rimuovere questo membro dal workspace? Perderà l\'accesso a tutte le risorse del workspace.', + 'action' => 'Rimuovi membro', + ], + + 'cancel_invite_modal' => [ + 'title' => 'Annulla invito', + 'description' => 'Vuoi davvero annullare questo invito?', + 'action' => 'Annulla invito', + ], + + 'roles' => [ + 'owner' => 'Proprietario', + 'admin' => 'Amministratore', + 'member' => 'Membro', + 'viewer' => 'Visualizzatore', + ], + + 'flash' => [ + 'invite_sent' => 'Invito inviato con successo!', + 'invite_deleted' => 'Invito eliminato.', + 'member_removed' => 'Membro rimosso con successo.', + 'role_updated' => 'Ruolo del membro aggiornato.', + 'wrong_email' => 'Questo invito è per un indirizzo email diverso.', + 'already_member' => 'Sei già membro di questo workspace.', + 'invite_accepted' => 'Benvenuto! Ora sei membro del workspace.', + 'invite_declined' => 'Invito rifiutato.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'Account', + 'usage' => 'Utilizzo', + 'billing' => 'Fatturazione', + ], + 'title' => 'Impostazioni dell\'account', + 'description' => 'Gestisci il nome del tuo account e l\'email di fatturazione', + 'name' => 'Nome dell\'account', + 'name_placeholder' => 'La mia azienda', + 'billing_email' => 'Email di fatturazione', + 'billing_email_placeholder' => 'fatturazione@azienda.com', + 'billing_email_hint' => 'Questa email sarà usata per le fatture e le comunicazioni di fatturazione da Stripe.', + 'submit' => 'Salva', + ], + + 'flash' => [ + 'account_updated' => 'Account aggiornato con successo!', + 'profile_updated' => 'Profilo aggiornato con successo!', + 'password_updated' => 'Password aggiornata con successo!', + 'workspace_updated' => 'Impostazioni aggiornate con successo!', + 'photo_updated' => 'Foto aggiornata con successo!', + 'photo_deleted' => 'Foto rimossa con successo!', + 'logo_updated' => 'Logo caricato con successo!', + 'logo_deleted' => 'Logo rimosso con successo!', + 'notifications_updated' => 'Preferenze di notifica aggiornate!', + ], + + 'api_keys' => [ + 'title' => 'Chiavi API', + 'page_title' => 'Chiavi API', + 'heading' => 'Chiavi API', + 'description' => 'Gestisci le chiavi API per l\'accesso programmatico al tuo workspace.', + 'create' => 'Crea chiave API', + 'copy' => 'Copia', + 'new_token_message' => 'La tua nuova chiave API è stata creata. Copiala ora — non potrai vederla di nuovo.', + 'table' => [ + 'name' => 'Nome', + 'key' => 'Chiave', + 'status' => 'Stato', + 'expires' => 'Scadenza', + 'last_used' => 'Ultimo utilizzo', + 'never' => 'Mai', + ], + 'actions' => [ + 'copy_id' => 'Copia ID chiave API', + 'copy_id_success' => 'ID chiave API copiato negli appunti', + 'delete' => 'Elimina', + ], + 'empty' => [ + 'title' => 'Ancora nessuna chiave API', + 'description' => 'Crea una chiave API per accedere al tuo workspace in modo programmatico.', + ], + 'delete_modal' => [ + 'title' => 'Elimina chiave API', + 'description' => 'Vuoi davvero eliminare questa chiave API? Tutte le applicazioni che usano questa chiave perderanno immediatamente l\'accesso.', + 'action' => 'Elimina chiave API', + ], + 'create_dialog' => [ + 'title' => 'Crea chiave API', + 'description' => 'Crea una nuova chiave API per l\'accesso programmatico al tuo workspace.', + 'name' => 'Nome', + 'name_placeholder' => 'es. Chiave API di produzione', + 'expires' => 'Data di scadenza (facoltativa)', + 'expires_placeholder' => 'Nessuna scadenza', + 'submit' => 'Crea', + 'cancel' => 'Annulla', + ], + 'flash' => [ + 'created' => 'Chiave API creata con successo!', + 'deleted' => 'Chiave API eliminata con successo!', + ], + ], +]; diff --git a/lang/it/sidebar.php b/lang/it/sidebar.php new file mode 100644 index 00000000..fa517924 --- /dev/null +++ b/lang/it/sidebar.php @@ -0,0 +1,61 @@ + 'Workspace', + 'select_workspace' => 'Seleziona workspace', + 'create_workspace' => 'Crea workspace', + 'create_post' => 'Crea post', + 'profile' => 'Profilo', + 'log_out' => 'Esci', + + 'workspace' => 'Workspace: :name', + 'workspace_select' => 'Workspace: Seleziona', + + 'theme' => 'Tema: :name', + 'theme_light' => 'Chiaro', + 'theme_dark' => 'Scuro', + 'theme_system' => 'Sistema', + + 'language' => 'Lingua: :name', + 'language_select' => 'Lingua: Seleziona', + + 'groups' => [ + 'posts' => 'Post', + 'workspace' => 'Workspace', + 'others' => 'Altro', + ], + + 'analytics' => 'Statistiche', + 'automations' => 'Automazioni', + 'settings' => 'Impostazioni', + + 'posts' => [ + 'calendar' => 'Calendario', + 'all' => 'Tutti', + 'scheduled' => 'Programmati', + 'posted' => 'Pubblicati', + 'drafts' => 'Bozze', + ], + + 'workspace' => [ + 'connections' => 'Connessioni', + 'signatures' => 'Firme', + 'labels' => 'Etichette', + 'assets' => 'Risorse', + 'api_keys' => 'Chiavi API', + ], + + 'notifications' => 'Notifiche', + 'mark_all_read' => 'Segna tutte come lette', + 'mark_as_read' => 'Segna come letta', + 'archive_all' => 'Archivia tutte', + 'no_notifications' => 'Nessuna notifica', + + 'support' => [ + 'docs' => 'Documentazione', + 'referral' => 'Guadagna il 30% di referral', + 'stay_updated' => 'Resta aggiornato', + ], +]; diff --git a/lang/it/signatures.php b/lang/it/signatures.php new file mode 100644 index 00000000..52986c6c --- /dev/null +++ b/lang/it/signatures.php @@ -0,0 +1,59 @@ + 'Firme', + 'description' => 'Crea firme riutilizzabili da aggiungere rapidamente ai tuoi post', + 'search' => 'Cerca firme...', + 'new' => 'Nuova firma', + 'empty_title' => 'Ancora nessuna firma', + 'empty_description' => 'Crea firme per aggiungere rapidamente hashtag, link o qualsiasi testo riutilizzabile ai tuoi post', + 'no_search_results' => 'Nessuna firma corrisponde alla ricerca', + 'try_different_search' => 'Prova con un\'altra parola chiave o cancella la ricerca.', + 'table' => [ + 'name' => 'Nome', + 'content' => 'Contenuto', + 'created_at' => 'Creata', + ], + + 'actions' => [ + 'edit' => 'Modifica firma', + 'delete' => 'Elimina firma', + ], + + 'create' => [ + 'title' => 'Crea firma', + 'description' => 'Dai un nome alla tua firma e il contenuto da aggiungere (hashtag, link, testo personalizzato — tutto ciò che riutilizzi).', + 'name' => 'Nome', + 'name_placeholder' => 'es. Marketing, Viaggi, Saluto del brand', + 'content' => 'Contenuto', + 'content_placeholder' => "#marketing #socialmedia\nScopri di più: https://iltuobrand.com", + 'content_hint' => 'Hashtag, link, introduzioni personalizzate, saluti — tutto ciò che aggiungi ai post.', + 'submit' => 'Crea firma', + 'submitting' => 'Creazione in corso...', + ], + + 'edit' => [ + 'title' => 'Modifica firma', + 'description' => 'Aggiorna il nome e il contenuto di questa firma.', + 'name' => 'Nome', + 'name_placeholder' => 'es. Marketing, Viaggi, Saluto del brand', + 'content' => 'Contenuto', + 'content_placeholder' => "#marketing #socialmedia\nScopri di più: https://iltuobrand.com", + 'content_hint' => 'Hashtag, link, introduzioni personalizzate, saluti — tutto ciò che aggiungi ai post.', + 'submit' => 'Salva modifiche', + 'submitting' => 'Salvataggio in corso...', + ], + + 'delete' => [ + 'title' => 'Elimina firma', + 'description' => 'Vuoi davvero eliminare questa firma? Questa azione non può essere annullata.', + 'confirm' => 'Elimina', + 'cancel' => 'Annulla', + ], + + 'flash' => [ + 'created' => 'Firma creata.', + 'updated' => 'Firma aggiornata.', + 'deleted' => 'Firma eliminata.', + ], +]; diff --git a/lang/it/usage.php b/lang/it/usage.php new file mode 100644 index 00000000..0a03ffeb --- /dev/null +++ b/lang/it/usage.php @@ -0,0 +1,15 @@ + 'Utilizzo', + + 'section_account' => 'Account', + 'section_account_description' => 'Quote e limiti del tuo piano.', + 'section_ai' => 'Crediti IA', + 'section_ai_description' => 'I crediti vengono scalati man mano che usi le funzioni IA. Si azzerano il primo di ogni mese.', + + 'workspaces' => 'Workspace', + 'social_accounts' => 'Account social', + 'members' => 'Membri', + 'credits' => 'Crediti', +]; diff --git a/lang/it/validation.php b/lang/it/validation.php new file mode 100644 index 00000000..9b82f6f0 --- /dev/null +++ b/lang/it/validation.php @@ -0,0 +1,200 @@ + 'Il campo :attribute deve essere accettato.', + 'accepted_if' => 'Il campo :attribute deve essere accettato quando :other è :value.', + 'active_url' => 'Il campo :attribute deve essere un URL valido.', + 'after' => 'Il campo :attribute deve essere una data successiva a :date.', + 'after_or_equal' => 'Il campo :attribute deve essere una data successiva o uguale a :date.', + 'alpha' => 'Il campo :attribute può contenere solo lettere.', + 'alpha_dash' => 'Il campo :attribute può contenere solo lettere, numeri, trattini e trattini bassi.', + 'alpha_num' => 'Il campo :attribute può contenere solo lettere e numeri.', + 'any_of' => 'Il campo :attribute non è valido.', + 'array' => 'Il campo :attribute deve essere un array.', + 'ascii' => 'Il campo :attribute può contenere solo caratteri alfanumerici e simboli a byte singolo.', + 'before' => 'Il campo :attribute deve essere una data precedente a :date.', + 'before_or_equal' => 'Il campo :attribute deve essere una data precedente o uguale a :date.', + 'between' => [ + 'array' => 'Il campo :attribute deve avere tra :min e :max elementi.', + 'file' => 'Il campo :attribute deve essere compreso tra :min e :max kilobyte.', + 'numeric' => 'Il campo :attribute deve essere compreso tra :min e :max.', + 'string' => 'Il campo :attribute deve avere tra :min e :max caratteri.', + ], + 'boolean' => 'Il campo :attribute deve essere vero o falso.', + 'can' => 'Il campo :attribute contiene un valore non autorizzato.', + 'confirmed' => 'La conferma del campo :attribute non corrisponde.', + 'contains' => 'Al campo :attribute manca un valore obbligatorio.', + 'current_password' => 'La password non è corretta.', + 'date' => 'Il campo :attribute deve essere una data valida.', + 'date_equals' => 'Il campo :attribute deve essere una data uguale a :date.', + 'date_format' => 'Il campo :attribute deve corrispondere al formato :format.', + 'decimal' => 'Il campo :attribute deve avere :decimal cifre decimali.', + 'declined' => 'Il campo :attribute deve essere rifiutato.', + 'declined_if' => 'Il campo :attribute deve essere rifiutato quando :other è :value.', + 'different' => 'I campi :attribute e :other devono essere diversi.', + 'digits' => 'Il campo :attribute deve essere di :digits cifre.', + 'digits_between' => 'Il campo :attribute deve avere tra :min e :max cifre.', + 'dimensions' => 'Il campo :attribute ha dimensioni dell\'immagine non valide.', + 'distinct' => 'Il campo :attribute ha un valore duplicato.', + 'doesnt_contain' => 'Il campo :attribute non deve contenere nessuno dei seguenti valori: :values.', + 'doesnt_end_with' => 'Il campo :attribute non deve terminare con uno dei seguenti valori: :values.', + 'doesnt_start_with' => 'Il campo :attribute non deve iniziare con uno dei seguenti valori: :values.', + 'email' => 'Il campo :attribute deve essere un indirizzo email valido.', + 'encoding' => 'Il campo :attribute deve essere codificato in :encoding.', + 'ends_with' => 'Il campo :attribute deve terminare con uno dei seguenti valori: :values.', + 'enum' => 'Il valore selezionato per :attribute non è valido.', + 'exists' => 'Il valore selezionato per :attribute non è valido.', + 'extensions' => 'Il campo :attribute deve avere una delle seguenti estensioni: :values.', + 'file' => 'Il campo :attribute deve essere un file.', + 'filled' => 'Il campo :attribute deve avere un valore.', + 'gt' => [ + 'array' => 'Il campo :attribute deve avere più di :value elementi.', + 'file' => 'Il campo :attribute deve essere maggiore di :value kilobyte.', + 'numeric' => 'Il campo :attribute deve essere maggiore di :value.', + 'string' => 'Il campo :attribute deve avere più di :value caratteri.', + ], + 'gte' => [ + 'array' => 'Il campo :attribute deve avere :value elementi o più.', + 'file' => 'Il campo :attribute deve essere maggiore o uguale a :value kilobyte.', + 'numeric' => 'Il campo :attribute deve essere maggiore o uguale a :value.', + 'string' => 'Il campo :attribute deve avere :value caratteri o più.', + ], + 'hex_color' => 'Il campo :attribute deve essere un colore esadecimale valido.', + 'image' => 'Il campo :attribute deve essere un\'immagine.', + 'in' => 'Il valore selezionato per :attribute non è valido.', + 'in_array' => 'Il campo :attribute deve esistere in :other.', + 'in_array_keys' => 'Il campo :attribute deve contenere almeno una delle seguenti chiavi: :values.', + 'integer' => 'Il campo :attribute deve essere un numero intero.', + 'ip' => 'Il campo :attribute deve essere un indirizzo IP valido.', + 'ipv4' => 'Il campo :attribute deve essere un indirizzo IPv4 valido.', + 'ipv6' => 'Il campo :attribute deve essere un indirizzo IPv6 valido.', + 'json' => 'Il campo :attribute deve essere una stringa JSON valida.', + 'list' => 'Il campo :attribute deve essere un elenco.', + 'lowercase' => 'Il campo :attribute deve essere in minuscolo.', + 'lt' => [ + 'array' => 'Il campo :attribute deve avere meno di :value elementi.', + 'file' => 'Il campo :attribute deve essere minore di :value kilobyte.', + 'numeric' => 'Il campo :attribute deve essere minore di :value.', + 'string' => 'Il campo :attribute deve avere meno di :value caratteri.', + ], + 'lte' => [ + 'array' => 'Il campo :attribute non deve avere più di :value elementi.', + 'file' => 'Il campo :attribute deve essere minore o uguale a :value kilobyte.', + 'numeric' => 'Il campo :attribute deve essere minore o uguale a :value.', + 'string' => 'Il campo :attribute deve avere :value caratteri o meno.', + ], + 'mac_address' => 'Il campo :attribute deve essere un indirizzo MAC valido.', + 'max' => [ + 'array' => 'Il campo :attribute non deve avere più di :max elementi.', + 'file' => 'Il campo :attribute non deve essere maggiore di :max kilobyte.', + 'numeric' => 'Il campo :attribute non deve essere maggiore di :max.', + 'string' => 'Il campo :attribute non deve avere più di :max caratteri.', + ], + 'max_digits' => 'Il campo :attribute non deve avere più di :max cifre.', + 'mimes' => 'Il campo :attribute deve essere un file di tipo: :values.', + 'mimetypes' => 'Il campo :attribute deve essere un file di tipo: :values.', + 'min' => [ + 'array' => 'Il campo :attribute deve avere almeno :min elementi.', + 'file' => 'Il campo :attribute deve essere di almeno :min kilobyte.', + 'numeric' => 'Il campo :attribute deve essere almeno :min.', + 'string' => 'Il campo :attribute deve avere almeno :min caratteri.', + ], + 'min_digits' => 'Il campo :attribute deve avere almeno :min cifre.', + 'missing' => 'Il campo :attribute deve essere assente.', + 'missing_if' => 'Il campo :attribute deve essere assente quando :other è :value.', + 'missing_unless' => 'Il campo :attribute deve essere assente a meno che :other non sia :value.', + 'missing_with' => 'Il campo :attribute deve essere assente quando :values è presente.', + 'missing_with_all' => 'Il campo :attribute deve essere assente quando :values sono presenti.', + 'multiple_of' => 'Il campo :attribute deve essere un multiplo di :value.', + 'not_in' => 'Il valore selezionato per :attribute non è valido.', + 'not_regex' => 'Il formato del campo :attribute non è valido.', + 'numeric' => 'Il campo :attribute deve essere un numero.', + 'password' => [ + 'letters' => 'Il campo :attribute deve contenere almeno una lettera.', + 'mixed' => 'Il campo :attribute deve contenere almeno una lettera maiuscola e una minuscola.', + 'numbers' => 'Il campo :attribute deve contenere almeno un numero.', + 'symbols' => 'Il campo :attribute deve contenere almeno un simbolo.', + 'uncompromised' => 'Il valore di :attribute è comparso in una violazione di dati. Scegli un valore di :attribute diverso.', + ], + 'present' => 'Il campo :attribute deve essere presente.', + 'present_if' => 'Il campo :attribute deve essere presente quando :other è :value.', + 'present_unless' => 'Il campo :attribute deve essere presente a meno che :other non sia :value.', + 'present_with' => 'Il campo :attribute deve essere presente quando :values è presente.', + 'present_with_all' => 'Il campo :attribute deve essere presente quando :values sono presenti.', + 'prohibited' => 'Il campo :attribute è proibito.', + 'prohibited_if' => 'Il campo :attribute è proibito quando :other è :value.', + 'prohibited_if_accepted' => 'Il campo :attribute è proibito quando :other è accettato.', + 'prohibited_if_declined' => 'Il campo :attribute è proibito quando :other è rifiutato.', + 'prohibited_unless' => 'Il campo :attribute è proibito a meno che :other non sia in :values.', + 'prohibits' => 'Il campo :attribute impedisce a :other di essere presente.', + 'regex' => 'Il formato del campo :attribute non è valido.', + 'required' => 'Il campo :attribute è obbligatorio.', + 'required_array_keys' => 'Il campo :attribute deve contenere voci per: :values.', + 'required_if' => 'Il campo :attribute è obbligatorio quando :other è :value.', + 'required_if_accepted' => 'Il campo :attribute è obbligatorio quando :other è accettato.', + 'required_if_declined' => 'Il campo :attribute è obbligatorio quando :other è rifiutato.', + 'required_unless' => 'Il campo :attribute è obbligatorio a meno che :other non sia in :values.', + 'required_with' => 'Il campo :attribute è obbligatorio quando :values è presente.', + 'required_with_all' => 'Il campo :attribute è obbligatorio quando :values sono presenti.', + 'required_without' => 'Il campo :attribute è obbligatorio quando :values non è presente.', + 'required_without_all' => 'Il campo :attribute è obbligatorio quando nessuno di :values è presente.', + 'same' => 'Il campo :attribute deve corrispondere a :other.', + 'size' => [ + 'array' => 'Il campo :attribute deve contenere :size elementi.', + 'file' => 'Il campo :attribute deve essere di :size kilobyte.', + 'numeric' => 'Il campo :attribute deve essere :size.', + 'string' => 'Il campo :attribute deve essere di :size caratteri.', + ], + 'starts_with' => 'Il campo :attribute deve iniziare con uno dei seguenti valori: :values.', + 'string' => 'Il campo :attribute deve essere una stringa.', + 'timezone' => 'Il campo :attribute deve essere un fuso orario valido.', + 'unique' => 'Il valore di :attribute è già stato utilizzato.', + 'uploaded' => 'Il caricamento di :attribute non è riuscito.', + 'uppercase' => 'Il campo :attribute deve essere in maiuscolo.', + 'url' => 'Il campo :attribute deve essere un URL valido.', + 'ulid' => 'Il campo :attribute deve essere un ULID valido.', + 'uuid' => 'Il campo :attribute deve essere un UUID valido.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/it/workspaces.php b/lang/it/workspaces.php new file mode 100644 index 00000000..15c2c659 --- /dev/null +++ b/lang/it/workspaces.php @@ -0,0 +1,50 @@ + 'Workspace', + 'select_title' => 'I tuoi workspace', + 'select_description' => 'Seleziona un workspace per continuare', + 'current' => 'Attuale', + 'connections' => ':count connessioni', + 'posts' => ':count post', + + 'create' => [ + 'page_title' => 'Crea il tuo workspace', + 'title' => 'Configura il tuo workspace', + 'description' => 'Raccontaci un po\' di te o del tuo progetto. Lo useremo per adattare i post generati dall\'IA al tuo tono.', + 'website' => 'Sito web', + 'website_placeholder' => 'https://iltuobrand.com', + 'autofill' => 'Compila automaticamente dal sito web', + 'autofill_missing_url' => 'Inserisci prima un URL.', + 'autofill_success' => 'Informazioni del brand caricate.', + 'autofill_error' => 'Impossibile compilare automaticamente. Puoi compilare i campi manualmente.', + 'autofill_errors' => [ + 'unreachable' => 'Non siamo riusciti a raggiungere quel sito web (:reason).', + 'http_status' => 'Il sito web ha restituito uno stato inatteso (:status).', + 'invalid_scheme' => 'Sono supportati solo URL http e https.', + 'missing_host' => 'All\'URL manca un host.', + 'unresolvable_host' => 'Non siamo riusciti a risolvere l\'host (:host).', + 'private_network' => 'Gli URL che puntano a reti private non sono consentiti.', + ], + 'logo_captured' => 'Logo acquisito dal tuo sito web.', + 'name' => 'Nome del workspace', + 'name_placeholder' => 'es. Acme Inc', + 'brand_description' => 'Descrizione del brand', + 'brand_description_placeholder' => 'Cosa fa il tuo brand?', + 'content_language' => 'Lingua dei contenuti', + 'content_language_description' => 'Le didascalie generate dall\'IA saranno scritte in questa lingua.', + 'brand_color' => 'Colore del brand', + 'background_color' => 'Colore di sfondo', + 'text_color' => 'Colore del testo', + 'submit' => 'Crea workspace', + 'success' => 'Workspace creato. Collega un account social per iniziare a pubblicare.', + ], + + 'cannot_delete_last' => 'Non puoi eliminare il tuo unico workspace. Annulla il tuo abbonamento nelle impostazioni di fatturazione per chiudere il tuo account.', + + 'flash' => [ + 'deleted' => 'Workspace eliminato con successo.', + ], +]; diff --git a/lang/ja/accounts.php b/lang/ja/accounts.php new file mode 100644 index 00000000..05c44ece --- /dev/null +++ b/lang/ja/accounts.php @@ -0,0 +1,148 @@ + '接続', + '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' => 'Facebook ページ経由で Instagram を接続', + 'threads' => 'Threads アカウントを接続', + 'pinterest' => 'Pinterest アカウントを接続', + 'bluesky' => 'Bluesky アカウントを接続', + 'mastodon' => 'Mastodon アカウントを接続', + 'telegram' => 'Telegram チャンネルまたはグループを接続', + 'discord' => 'Discord サーバーを接続', + ], + + 'disconnect_modal' => [ + 'title' => 'アカウントの接続解除', + 'description' => 'このアカウントの接続を解除してもよろしいですか?いつでも再接続できます。', + 'confirm' => '接続解除', + 'cancel' => 'キャンセル', + ], + + 'bluesky' => [ + 'title' => 'Bluesky を接続', + 'description' => '接続するには認証情報を入力してください', + 'email' => 'メールアドレス', + 'email_placeholder' => 'yourhandle.bsky.social', + 'app_password' => 'アプリパスワード', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'セキュリティのためアプリパスワードを使用してください。bsky.app/settings で作成できます。', + 'submit' => 'Bluesky を接続', + 'submitting' => '接続中...', + ], + + 'mastodon' => [ + 'title' => 'Mastodon を接続', + 'description' => 'Mastodon のインスタンスを入力してください', + 'instance_url' => 'インスタンス URL', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Mastodon のインスタンス URL を入力してください(例: 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' => 'Instagram ビジネスアカウントが連携された Facebook ページが見つかりませんでした。', + '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 ページが見つかりません。少なくとも 1 つのページの管理者である必要があります。', + 'no_facebook_instagram_pages' => 'Instagram アカウントが連携された Facebook ページが見つかりません。', + 'no_youtube_channels' => 'YouTube チャンネルが見つかりません。先にチャンネルを作成してください。', + 'not_linkedin_admin' => 'あなたは管理者となっている LinkedIn ページがありません。', + ], +]; diff --git a/lang/ja/analytics.php b/lang/ja/analytics.php new file mode 100644 index 00000000..22f01515 --- /dev/null +++ b/lang/ja/analytics.php @@ -0,0 +1,55 @@ + 'アナリティクスを利用できる接続済みアカウントがありません。', + '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' => 'ピンクリック率', + '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' => '再生数', + ], +]; diff --git a/lang/ja/assets.php b/lang/ja/assets.php new file mode 100644 index 00000000..f953e2c0 --- /dev/null +++ b/lang/ja/assets.php @@ -0,0 +1,52 @@ + 'アセット', + + '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' => 'Powered by GIPHY', + ], +]; diff --git a/lang/ja/auth.php b/lang/ja/auth.php new file mode 100644 index 00000000..9ddb7627 --- /dev/null +++ b/lang/ja/auth.php @@ -0,0 +1,141 @@ + '認証情報が記録と一致しません。', + 'password' => '入力されたパスワードが正しくありません。', + 'throttle' => 'ログインの試行回数が多すぎます。:seconds 秒後にもう一度お試しください。', + + 'flash' => [ + 'welcome' => 'TryPost へようこそ!', + 'welcome_trial' => 'TryPost へようこそ!トライアルが開始されました。', + ], + + 'legal' => '続行すると、利用規約およびプライバシーポリシーに同意したものとみなされます。', + + 'slides' => [ + 'calendar' => [ + 'title' => 'ビジュアルカレンダー', + 'description' => '直感的なドラッグ&ドロップのカレンダーで、すべてのソーシャルアカウントのコンテンツを計画・スケジュールできます。', + ], + 'scheduling' => [ + 'title' => 'スマートスケジューリング', + 'description' => 'LinkedIn、X、Instagram、TikTok、YouTube など、複数のプラットフォームへの投稿を 1 か所からスケジュールできます。', + ], + 'media' => [ + 'title' => 'リッチメディア', + 'description' => '画像、カルーセル、ストーリー、リールを公開できます。各プラットフォームに最適な形式が自動で適用されます。', + ], + 'video' => [ + 'title' => '動画の公開', + 'description' => '動画を一度アップロードすれば、TikTok、YouTube ショート、Instagram リール、Facebook リールに公開できます。', + ], + 'team' => [ + 'title' => 'チームワークスペース', + 'description' => 'チームを招待し、役割を割り当て、複数のブランドを別々のワークスペースで管理できます。', + ], + 'signatures' => [ + 'title' => '署名', + 'description' => '再利用できる署名(ハッシュタグ、リンク、締めの一言)を保存し、ワンクリックで投稿に追加できます。', + ], + ], + + 'or_continue_with' => 'または次で続行', + 'or_continue_with_email' => 'またはメールで続行', + 'google_login' => 'Google でログイン', + 'google_signup' => 'Google で登録', + 'github_login' => 'GitHub でログイン', + 'github_signup' => 'GitHub で登録', + 'github_email_unavailable' => 'GitHub からメールアドレスを取得できませんでした。GitHub のメールアドレスを公開するか、email スコープを許可してから、もう一度お試しください。', + + 'signup_success' => [ + 'page_title' => 'ようこそ', + 'title' => 'アカウントを設定しています', + 'description' => '通常は数秒で完了します...', + ], + + 'login' => [ + 'title' => 'アカウントにログイン', + 'description' => 'ログインするにはメールアドレスとパスワードを入力してください', + 'page_title' => 'ログイン', + 'email' => 'メールアドレス', + 'password' => 'パスワード', + 'forgot_password' => 'パスワードをお忘れですか?', + 'remember_me' => 'ログイン状態を保持', + 'submit' => 'ログイン', + 'no_account' => 'アカウントをお持ちでないですか?', + 'sign_up' => '登録', + ], + + 'register' => [ + 'title' => 'すべてのソーシャルカレンダーを 1 か所に', + 'description' => 'アカウントを作成して、あらゆるネットワークへの投稿スケジュールを始めましょう。', + 'page_title' => '登録', + 'signup_with_email' => 'メールで登録', + 'name' => '名前', + 'name_placeholder' => '氏名', + 'email' => 'メールアドレス', + 'password' => 'パスワード', + 'show_password' => 'パスワードを表示', + 'hide_password' => 'パスワードを隠す', + 'submit' => 'アカウントを作成', + 'has_account' => 'すでにアカウントをお持ちですか?', + 'log_in' => 'ログイン', + ], + + 'forgot_password' => [ + 'title' => 'パスワードをお忘れの方', + 'description' => 'パスワード再設定リンクを受け取るにはメールアドレスを入力してください', + 'page_title' => 'パスワードをお忘れの方', + 'email' => 'メールアドレス', + 'submit' => 'パスワード再設定リンクを送信', + 'return_to' => 'または、次に戻る', + 'log_in' => 'ログイン', + ], + + 'reset_password' => [ + 'title' => 'パスワードを再設定', + 'description' => '新しいパスワードを入力してください', + 'page_title' => 'パスワードの再設定', + 'email' => 'メールアドレス', + 'password' => 'パスワード', + 'confirm_password' => 'パスワードの確認', + 'confirm_placeholder' => 'パスワードを確認', + 'submit' => 'パスワードを再設定', + ], + + 'verify_email' => [ + 'title' => 'メールアドレスの確認', + 'description' => 'ただいまお送りしたメール内のリンクをクリックして、メールアドレスを確認してください。', + 'page_title' => 'メールアドレスの確認', + 'link_sent' => '登録時に入力されたメールアドレスに、新しい確認リンクを送信しました。', + 'resend' => '確認メールを再送信', + 'log_out' => 'ログアウト', + ], + + 'accept_invite' => [ + 'page_title' => '招待を承諾', + 'title' => '招待されました!', + 'description' => ':workspace ワークスペースへの参加に招待されました。', + 'workspace' => 'ワークスペース', + 'your_role' => 'あなたの役割', + 'email' => 'メールアドレス', + 'accept' => '招待を承諾', + 'decline' => '招待を辞退', + 'login_prompt' => 'この招待を承諾するには、ログインまたはアカウントを作成してください。', + 'log_in' => 'ログイン', + 'create_account' => 'アカウントを作成', + ], + +]; diff --git a/lang/ja/automations.php b/lang/ja/automations.php new file mode 100644 index 00000000..d356c2a3 --- /dev/null +++ b/lang/ja/automations.php @@ -0,0 +1,411 @@ + 'オートメーション', + 'default_name' => '新しいオートメーション', + + 'actions' => [ + 'new' => '新しいオートメーション', + 'edit' => '編集', + 'save' => '保存', + 'activate' => '有効化', + 'pause' => '一時停止', + 'delete' => '削除', + 'retry' => '再試行', + 'guide' => '仕組みを学ぶ', + ], + + 'tabs' => [ + 'build' => '作成', + 'variables' => '変数', + 'test' => 'テスト', + ], + + 'nav' => [ + 'workflow' => 'ワークフロー', + 'invocations' => '実行履歴', + 'metrics' => 'メトリクス', + 'settings' => '設定', + ], + + 'settings' => [ + 'general' => '一般', + 'general_description' => 'このオートメーションの名前を変更します。', + 'name_label' => '名前', + 'name_saved' => 'オートメーションの名前を変更しました。', + 'status_title' => 'ステータス', + 'status_description' => '有効化すると実行を開始し、一時停止すると停止します。', + 'activated_at' => ':date に有効化', + 'paused_at' => ':date に一時停止', + 'created_at' => ':date に作成', + 'danger_title' => '危険な操作', + 'danger_description' => '取り消せない操作です。', + 'delete_title' => 'このオートメーションを削除', + 'delete_description' => 'オートメーションとその実行履歴を完全に削除します。', + ], + + 'status_run' => [ + 'pending' => '保留中', + 'running' => '実行中', + 'waiting' => '待機中', + 'completed' => '完了', + 'failed' => '失敗', + 'cancelled' => 'キャンセル済み', + ], + + 'node_type' => [ + 'trigger' => 'トリガー', + 'generate' => 'コンテンツを生成', + 'delay' => '遅延', + 'condition' => '条件', + 'publish' => '公開', + 'webhook' => 'Webhook', + 'end' => '終了', + 'fetch_rss' => 'RSS を取得', + 'http_request' => 'HTTP リクエスト', + ], + + 'invocations' => [ + 'empty' => 'まだ実行履歴がありません。', + 'refresh' => '更新', + 'search_placeholder' => '実行 ID で検索…', + 'copied' => '実行 ID をコピーしました。', + 'loading' => 'ステップを読み込み中…', + 'no_steps' => '記録されたステップがありません。', + 'load_error' => 'ステップを読み込めませんでした。', + 'steps' => '{0}ステップなし|{1}:count 件のステップ|[2,*]:count 件のステップ', + 'filter' => [ + 'all' => 'すべてのステータス', + ], + 'columns' => [ + 'timestamp' => 'タイムスタンプ', + 'run' => '実行', + 'status' => 'ステータス', + 'message' => '最新メッセージ', + 'duration' => '所要時間', + ], + 'summary' => [ + 'completed' => 'ワークフローが完了しました', + 'failed' => 'ワークフローが失敗しました', + 'running' => 'ワークフローを実行中', + 'cancelled' => 'ワークフローをキャンセルしました', + 'pending' => 'ワークフローは保留中です', + ], + ], + + 'metrics' => [ + 'overview' => '概要', + 'runs_over_time' => '実行数の推移', + 'posts_by_platform' => 'プラットフォーム別の投稿', + 'no_posts' => 'この期間に公開された投稿はありません。', + 'cards' => [ + 'runs' => '総実行数', + 'completed' => '完了', + 'failed' => '失敗', + 'in_progress' => '進行中', + 'success_rate' => '成功率', + 'avg_duration' => '平均所要時間', + 'posts_created' => '作成された投稿数', + ], + 'legend' => [ + 'started' => '開始', + 'completed' => '完了', + 'failed' => '失敗', + ], + ], + + 'categories' => [ + 'sources' => 'ソース', + 'content' => 'コンテンツ', + 'flow' => 'フロー', + 'output' => '出力', + ], + + 'variables' => [ + 'title' => 'ワークフロー変数', + 'hint' => '{{ variables.KEY }} でどこからでも参照できる再利用可能な値です。暗号化して保存されます。', + 'empty' => 'まだ変数がありません。', + 'key' => 'キー', + 'value' => '値', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => '値', + 'add' => '新しい変数', + ], + + 'expr' => [ + 'trigger_event' => 'トリガーイベント名', + 'trigger_fired_at' => 'トリガーが発火した時刻', + 'trigger_post_id' => 'トリガーとなった投稿 ID', + 'trigger_post_content' => 'トリガーとなった投稿の内容', + 'trigger_post_status' => 'トリガーとなった投稿のステータス', + 'trigger_post_scheduled_at' => '投稿の予約日時', + 'trigger_post_published_at' => '投稿が公開された日時', + 'fetched_title' => '取得したアイテムのタイトル', + 'fetched_link' => '取得したアイテムのリンク', + 'fetched_date' => '取得したアイテムの公開日', + 'fetched_content' => '取得したアイテムの全文', + 'fetched_description' => '取得したアイテムの概要', + 'fetched_author' => '取得したアイテムの作成者', + 'fetched_image' => '取得したアイテムの画像 URL', + 'fetched_categories' => '取得したアイテムのカテゴリ', + 'fetched_enclosure' => '取得したアイテムのメディア(音声・動画・ファイル)', + 'fetched_pubdate' => '取得したアイテムの公開日', + 'fetched_http' => '取得した HTTP アイテム(フィールドを追加)', + 'generated_content' => 'AI が生成した投稿の内容', + 'generated_post_url' => 'AI が生成した投稿の URL', + 'variable' => 'ワークフロー変数', + 'now' => '現在の日時', + ], + + 'test' => [ + 'description' => '合成したトリガーペイロードを使って、オートメーションを最初から最後まで実行します。実際のスケジュールやフィードを待たずに各ノードを検証するのに便利です。', + 'starting' => 'テスト実行を開始しています…', + 'in_progress' => '進行中', + 'completed' => '完了', + 'failed' => '失敗', + 'waiting' => '待機中', + 'close' => '閉じる', + 'no_node_runs' => '最初のノードの開始を待っています…', + 'node_input' => '入力', + 'node_output' => '出力', + 'node_error' => 'エラー', + 'no_new_items' => '新しいアイテムがありません — 後続の処理は実行されませんでした。', + 'error_starting' => 'テスト実行を開始できませんでした。', + 'with_real_data' => '実データを使用', + 'run' => 'テストを実行', + 'idle_hint' => '「テストを実行」を押すと、オートメーションを最初から最後まで実行します。', + 'real_data_hint' => 'このテストは投稿を公開し、ポーリングの基準を進め、外部への副作用を発生させます。', + 'dry_badge' => 'ドライラン', + ], + + 'status' => [ + 'draft' => '下書き', + 'active' => '有効', + 'paused' => '一時停止中', + ], + + 'index' => [ + 'empty_title' => 'まだオートメーションがありません', + 'empty_description' => '最初のオートメーションを作成して、自動で投稿を公開しましょう。', + 'columns' => [ + 'name' => '名前', + 'status' => 'ステータス', + 'created' => '作成日', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'オートメーションを有効化できませんでした。', + 'pause_error_fallback' => 'オートメーションを一時停止できませんでした。', + 'save_error_fallback' => 'オートメーションを保存できませんでした。', + 'save_success' => 'オートメーションを保存しました。', + 'empty_canvas_title' => 'オートメーションの作成を始めましょう', + 'empty_canvas_description' => '左側のパネルからノードをドラッグして始めましょう。', + 'name_placeholder' => '無題のオートメーション', + ], + + 'nodes' => [ + 'trigger' => 'トリガー', + 'generate' => '生成', + 'delay' => '遅延', + 'condition' => '条件', + 'publish' => '公開', + 'webhook' => 'Webhook', + 'end' => '終了', + 'end_summary' => 'ここでオートメーションを停止します', + 'fetch_rss' => 'RSS を取得', + 'http_request' => 'HTTP リクエスト', + 'handles' => [ + 'items' => 'アイテムあり', + 'no_items' => 'アイテムなし', + ], + ], + + 'config' => [ + 'select_placeholder' => '選択…', + 'invalid_json' => 'まだ有効な JSON ではありません。', + 'expand_editor' => 'エディターを拡大', + 'minimize_editor' => '最小化', + + 'trigger' => [ + 'type' => 'トリガーの種類', + 'types' => [ + 'schedule' => 'スケジュール', + 'post_published' => '投稿が公開されたとき', + 'post_scheduled' => '投稿が予約されたとき', + ], + 'post_published_hint' => 'このワークスペースで投稿が公開されるたびに実行されます。公開された投稿は {{ trigger.post }} として後続のノードで利用できます。', + 'post_scheduled_hint' => 'このワークスペースで投稿が予約されるたびに実行されます。予約された投稿は {{ trigger.post }} で利用できます。', + + 'schedule' => [ + 'field' => 'トリガー間隔', + 'fields' => [ + 'minutes' => '分', + 'hours' => '時間', + 'days' => '日', + 'weeks' => '週', + 'months' => '月', + ], + 'minutes_interval' => 'トリガー間の分数', + 'hours_interval' => 'トリガー間の時間数', + 'days_interval' => 'トリガー間の日数', + 'hour' => '実行する時', + 'minute' => '実行する分', + 'weekdays' => '実行する曜日', + 'day_of_month' => '実行する日', + 'weekday_names' => [ + 'sun' => '日', + 'mon' => '月', + 'tue' => '火', + 'wed' => '水', + 'thu' => '木', + 'fri' => '金', + 'sat' => '土', + ], + 'summary' => [ + 'every_n_minutes' => ':count 分ごとに実行|:count 分ごとに実行', + 'every_n_hours' => ':count 時間ごとに :minute 分に実行|:count 時間ごとに :minute 分に実行', + 'every_n_days' => ':count 日ごとに :time に実行|:count 日ごとに :time に実行', + 'weekly' => '毎週 :days の :time に実行', + 'monthly' => '毎月 :day 日の :time に実行', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'ソーシャルアカウント', + 'social_accounts_empty' => '接続済みのソーシャルアカウントがありません。まず 1 つ接続してください。', + 'target_slide_count' => '生成するスライド数', + 'prompt_template' => 'プロンプトテンプレート', + 'prompt_template_hint' => '{{ と入力すると、前のステップのデータを挿入できます。', + 'image_count' => '生成する画像数', + 'image_count_hint' => '0 = テキストのみの投稿(画像なし)。1 = 単一画像。2 以上 = カルーセル。', + 'use_brand_voice' => 'ブランドボイスを使用', + 'use_brand_voice_hint' => 'ブランドの説明とボイスを適用します。第三者ソース(ニュース、RSS)を忠実にキュレーションする場合はオフにしてください。', + 'use_brand_visuals' => 'ブランドビジュアルを使用', + 'use_brand_visuals_hint' => 'AI 画像をブランドカラーとアイデンティティで方向づけます。投稿のトピックのみに基づく中立的な画像にする場合はオフにしてください。', + 'style' => 'スタイル', + 'account_summary' => ':count 件のアカウント · :format|:count 件のアカウント · :format', + 'formats' => [ + 'single' => '単一', + 'carousel' => 'カルーセル', + ], + ], + 'delay' => [ + 'duration' => '期間', + 'unit' => '単位', + 'units' => [ + 'minutes' => '分', + 'hours' => '時間', + 'days' => '日', + ], + ], + 'condition' => [ + 'field' => 'フィールド', + 'operator' => '演算子', + 'operators' => [ + 'contains' => '含む', + 'not_contains' => '含まない', + 'equals' => '等しい', + 'not_equals' => '等しくない', + 'matches' => '一致(正規表現)', + 'greater_than' => 'より大きい', + 'less_than' => 'より小さい', + ], + 'value' => '値', + ], + 'publish' => [ + 'mode' => 'モード', + 'modes' => [ + 'now' => '今すぐ公開', + 'scheduled' => '予約', + 'draft' => '下書きとして保存', + ], + 'scheduled_offset' => 'トリガーからのオフセット(分)', + 'offset_summary' => ':mode · +:offset 分', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'メソッド', + 'payload_template' => 'ペイロードテンプレート(JSON)', + ], + 'end' => [ + 'reason' => '理由(任意)', + 'reason_placeholder' => '例: 条件により除外', + ], + 'fetch_rss' => [ + 'feed_url' => 'フィード URL', + 'feed_url_hint' => '初回実行時、基準は「現在」に設定され、過去のアイテムが後続ノードに大量に流れ込まないようにします。以降の実行では、前回のポーリングより新しいアイテムのみが対象になります。', + 'inspect' => 'フィードを確認', + 'inspecting' => '確認中…', + 'inspect_hint' => 'サンプルを取得して、後続のノードで使用できるフィールドを確認します。', + 'inspect_error' => 'このフィードを読み込めませんでした。URL を確認してもう一度お試しください。', + 'discovered_fields' => '利用可能なフィールド', + 'discovered_empty' => '最新のアイテムにフィールドが見つかりませんでした。', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'メソッド', + 'auth_type' => '認証', + 'auth' => [ + 'none' => 'なし(公開)', + 'bearer' => 'ベアラートークン', + 'basic' => 'Basic 認証', + 'api_key' => 'API キーヘッダー', + ], + 'bearer_token' => 'ベアラートークン', + 'basic_username' => 'ユーザー名', + 'basic_password' => 'パスワード', + 'api_key_header' => 'ヘッダー名', + 'api_key_value' => 'API キー', + 'body_template' => 'ボディテンプレート(JSON)', + 'headers' => 'ヘッダー', + 'header_name' => 'ヘッダー名', + 'header_value' => '値', + 'add_header' => 'ヘッダーを追加', + 'polling_section' => 'リストと重複排除(任意)', + 'polling_hint' => 'レスポンスがリストの場合、各アイテムがワークフローを個別に実行します。単一のオブジェクトの場合は 1 回だけ実行されます。', + 'items_path' => 'アイテムのパス', + 'items_path_hint' => 'レスポンスがすでに配列の場合は空欄にしてください。ネストされた配列にはドット区切りのパス(例: data.items)を、id をキーとするオブジェクトには * を使用します。', + 'item_key_path' => 'アイテムキーのパス', + 'item_key_path_hint' => '一意の id への JSON パス(例: id)。すでに処理済みのアイテムはスキップされるため、日付のないフィードでも新しいエントリのみが転送されます。', + 'item_date_path' => 'アイテム日付のパス', + 'item_date_path_hint' => 'アイテムのタイムスタンプへの JSON パス(例: published_at)。利用可能な場合はキーのパスより優先されます。初回のポーリングでは基準を記録し何も転送しないため、既存のフィードでも初日から大量に流れ込むことはありません。', + ], + ], + + 'delete' => [ + 'title' => 'オートメーションを削除', + 'description' => 'このオートメーションを削除してもよろしいですか?すべての実行とトリガーアイテムも削除されます。この操作は取り消せません。', + 'confirm' => '削除', + 'cancel' => 'キャンセル', + ], + + 'flash' => [ + 'deleted' => 'オートメーションを正常に削除しました!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'このオートメーションに有効なソーシャルアカウントが設定されていません。', + 'must_have_one_trigger' => 'オートメーションにはトリガーノードが 1 つだけ必要です。', + 'trigger_must_be_connected' => 'トリガーノードは少なくとも 1 つのノードに接続されている必要があります。', + 'graph_contains_cycle' => 'オートメーションのグラフに循環が含まれています。', + 'only_failed_can_retry' => '失敗した実行のみ再試行できます。', + 'no_generated_post' => '実行で生成された投稿が見つかりません。', + 'webhook_server_error' => 'Webhook サーバーエラー。', + 'webhook_request_failed' => 'Webhook リクエストを完了できませんでした。', + 'webhook_missing_url' => 'Webhook ノードに URL がありません。', + 'webhook_invalid_payload_json' => 'ペイロードテンプレートが有効な JSON ではありません。', + 'url_not_allowed' => 'リクエスト URL がプライベートまたは到達不能なアドレスを指しているためブロックされました。', + 'node_no_longer_exists' => 'ノード :node_id はオートメーションに存在しなくなりました。', + 'no_trigger_connection' => 'トリガーノードに接続されたノードがありません。', + 'fetch_rss_missing_url' => 'RSS 取得ノードにフィード URL がありません。', + 'fetch_rss_request_failed' => 'RSS フィードのリクエストが失敗しました。', + 'fetch_rss_malformed' => 'RSS フィードの形式が不正です。', + 'http_missing_url' => 'HTTP リクエストノードに URL がありません。', + 'http_request_exception' => 'HTTP リクエストで例外が発生しました。', + 'http_request_failed' => 'HTTP リクエストが失敗しました。', + 'http_items_path_not_array' => 'アイテムのパスがリストとして解決されませんでした。', + ], +]; diff --git a/lang/ja/billing.php b/lang/ja/billing.php new file mode 100644 index 00000000..3b73b4ce --- /dev/null +++ b/lang/ja/billing.php @@ -0,0 +1,76 @@ + 'お支払い', + + 'past_due_notice' => [ + 'title' => 'お支払いが延滞しています', + 'description' => 'サブスクリプションを継続するには、お支払い方法を更新してください。', + 'cta' => 'お支払いを更新', + ], + + 'annual_banner' => [ + 'title' => '2 か月分無料', + 'description' => '年払いに切り替えると、毎月のお支払いが安くなります — プランは同じで、他は何も変わりません。', + 'cta' => '年払いにアップグレード', + ], + + 'subscribe' => [ + 'billed_monthly' => '月払い', + 'billed_yearly' => '年払い', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'プラン', + 'description' => 'サブスクリプションプランを管理します。', + 'label' => 'プラン', + 'workspaces' => '{1}:count 個のワークスペース|[2,*]:count 個のワークスペース', + 'per_workspace' => 'ワークスペースあたり', + 'price' => '料金', + 'month' => '月', + 'trial' => 'トライアル', + 'active' => '有効', + 'past_due' => '延滞中', + 'cancelling' => '解約手続き中', + 'trial_ends' => 'トライアル終了', + ], + + 'subscription' => [ + 'title' => 'サブスクリプション', + 'description' => 'お支払い方法、請求情報、サブスクリプションを管理します。', + 'payment_method' => 'お支払い方法', + 'no_payment_method' => 'まだ登録されたお支払い方法がありません。', + 'expires_on' => '有効期限 :month/:year', + 'manage_label' => 'サブスクリプション', + 'manage_stripe' => 'Stripe で管理', + ], + + 'invoices' => [ + 'title' => '請求書', + 'description' => '過去の請求書をダウンロードできます。', + 'empty' => '請求書が見つかりません', + 'paid' => '支払い済み', + ], + + 'flash' => [ + 'plan_changed' => ':plan プランに変更されました。', + 'switched_to_yearly' => '年払いに変更されました。', + 'cannot_manage' => 'お支払いを管理できるのはアカウントのオーナーのみです。', + 'credits_exhausted' => 'AI クレジットが不足しています — 今月の :limit の割り当てをすべて使い切りました。プランをアップグレードするか、来月までお待ちください。', + 'subscription_required' => 'AI 機能を使用するには有効なサブスクリプションが必要です。', + ], + + 'processing' => [ + 'page_title' => '処理中...', + 'title' => 'サブスクリプションを処理しています', + 'description' => 'アカウントを設定していますので、しばらくお待ちください。すぐに完了します。', + 'success_title' => '準備が整いました!', + 'success_description' => 'サブスクリプションが有効になりました。ワークスペースにリダイレクトしています...', + 'cancelled_title' => 'チェックアウトがキャンセルされました', + 'cancelled_description' => 'チェックアウトはキャンセルされました。料金は請求されていません。', + 'retry' => 'もう一度試す', + ], +]; diff --git a/lang/ja/brands.php b/lang/ja/brands.php new file mode 100644 index 00000000..ac23e358 --- /dev/null +++ b/lang/ja/brands.php @@ -0,0 +1,39 @@ + '新しいブランド', + 'no_brands_yet' => 'まだブランドがありません', + 'no_brands_description' => 'ブランドを作成して、ソーシャルアカウントをクライアントやプロジェクトごとに整理しましょう', + 'accounts_count' => ':count 件のアカウント', + + 'create' => [ + 'title' => 'ブランドを作成', + 'description' => 'ソーシャルアカウントをまとめるブランドに名前を付けてください', + 'name' => 'ブランド名', + 'name_placeholder' => '例: Acme Corp、個人', + 'submit' => 'ブランドを作成', + 'submitting' => '作成中...', + ], + + 'edit' => [ + 'title' => 'ブランドを編集', + 'description' => 'このブランドの名前を変更します', + 'name' => 'ブランド名', + 'name_placeholder' => '例: Acme Corp、個人', + 'submit' => '変更を保存', + 'submitting' => '保存中...', + ], + + 'delete' => [ + 'title' => 'ブランドを削除', + 'description' => 'このブランドを削除してもよろしいですか?ソーシャルアカウントは割り当てが解除されますが、削除はされません。', + 'confirm' => '削除', + 'cancel' => 'キャンセル', + ], + + 'flash' => [ + 'created' => 'ブランドを正常に作成しました!', + 'updated' => 'ブランドを正常に更新しました!', + 'deleted' => 'ブランドを正常に削除しました!', + ], +]; diff --git a/lang/ja/calendar.php b/lang/ja/calendar.php new file mode 100644 index 00000000..ff29215c --- /dev/null +++ b/lang/ja/calendar.php @@ -0,0 +1,12 @@ + 'カレンダー', + 'today' => '今日', + 'day' => '日', + 'week' => '週', + 'month' => '月', + 'new_post' => '新規投稿', + 'no_content' => 'コンテンツなし', + 'more' => '他 :count 件', +]; diff --git a/lang/ja/comments.php b/lang/ja/comments.php new file mode 100644 index 00000000..9c7f3755 --- /dev/null +++ b/lang/ja/comments.php @@ -0,0 +1,18 @@ + 'コメントを書く...', + 'reply_placeholder' => '返信を書く...', + 'reply' => '返信', + 'edit' => '編集', + 'delete' => '削除', + 'edited' => '編集済み', + 'save' => '保存', + 'cancel' => 'キャンセル', + 'send' => '送信', + 'replying_to' => ':name への返信', + 'empty' => 'まだコメントがありません。会話を始めましょう。', + 'load_more' => '過去のコメントを読み込む', + 'today' => '今日', + 'yesterday' => '昨日', +]; diff --git a/lang/ja/common.php b/lang/ja/common.php new file mode 100644 index 00000000..16a3d19e --- /dev/null +++ b/lang/ja/common.php @@ -0,0 +1,59 @@ + '戻る', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'この操作は取り消せません。', + 'type' => '入力', + 'to_confirm' => 'で確認してください。', + 'copy_to_clipboard' => 'クリップボードにコピー', + 'delete_keyword' => 'delete', + ], + + 'photo_upload' => [ + 'upload' => 'アップロード', + 'uploading' => 'アップロード中...', + 'remove' => '写真を削除', + 'hint' => '推奨: 正方形の画像、最大 2 MB。', + ], + + 'timezone' => [ + 'select' => 'タイムゾーンを選択', + 'search' => 'タイムゾーンを検索...', + 'empty' => 'タイムゾーンが見つかりません', + ], + + 'date_picker' => [ + 'select' => '日付を選択', + ], + + 'date_range_picker' => [ + 'placeholder' => '期間を選択', + 'today' => '今日', + 'yesterday' => '昨日', + 'last_7_days' => '過去 7 日間', + 'last_30_days' => '過去 30 日間', + 'last_3_months' => '過去 3 か月', + 'last_6_months' => '過去 6 か月', + 'last_12_months' => '過去 12 か月', + 'this_month' => '今月', + 'last_month' => '先月', + 'year_to_date' => '今年(年初から)', + 'last_year' => '昨年', + ], + + 'cancel' => 'キャンセル', + 'clear' => 'クリア', + 'close' => '閉じる', + 'loading_more' => 'さらに読み込み中...', + + 'actions' => [ + 'copy' => 'コピー', + 'copied' => 'コピーしました', + 'copy_failed' => 'クリップボードへのコピーに失敗しました', + ], +]; diff --git a/lang/ja/labels.php b/lang/ja/labels.php new file mode 100644 index 00000000..85fbc019 --- /dev/null +++ b/lang/ja/labels.php @@ -0,0 +1,54 @@ + 'ラベル', + 'description' => 'ラベルを作成して、投稿を整理・分類しましょう', + 'search' => 'ラベルを検索...', + 'new_label' => '新しいラベル', + 'no_labels_yet' => 'まだラベルがありません', + 'no_search_results' => '検索に一致するラベルがありません', + 'try_different_search' => '別のキーワードを試すか、検索をクリアしてください。', + 'create_first_label' => '最初のラベルを作成', + 'table' => [ + 'name' => '名前', + 'created_at' => '作成日', + ], + + 'actions' => [ + 'edit' => 'ラベルを編集', + 'delete' => 'ラベルを削除', + ], + + 'create' => [ + 'title' => 'ラベルを作成', + 'description' => 'ラベルに名前を付けて色を選んでください', + 'name' => '名前', + 'name_placeholder' => 'ラベル名を入力...', + 'color' => '色', + 'submit' => 'ラベルを作成', + 'submitting' => '作成中...', + ], + + 'edit' => [ + 'title' => 'ラベルを編集', + 'description' => 'このラベルの名前と色を変更します', + 'name' => '名前', + 'name_placeholder' => 'ラベル名を入力...', + 'color' => '色', + 'submit' => '変更を保存', + 'submitting' => '保存中...', + ], + + 'delete' => [ + 'title' => 'ラベルを削除', + 'description' => 'このラベルを削除してもよろしいですか?この操作は取り消せません。', + 'confirm' => '削除', + 'cancel' => 'キャンセル', + ], + + 'flash' => [ + 'created' => 'ラベルを正常に作成しました!', + 'updated' => 'ラベルを正常に更新しました!', + 'deleted' => 'ラベルを正常に削除しました!', + ], +]; diff --git a/lang/ja/mail.php b/lang/ja/mail.php new file mode 100644 index 00000000..caf7357f --- /dev/null +++ b/lang/ja/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => ':name さんが TryPost であなたにメンションしました', + 'title' => ':name さんがあなたにメンションしました', + 'intro' => ':name さんが投稿のコメントであなたにメンションしました。', + 'cta' => 'コメントを表示', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :workspace で :count 件のアカウントを再接続する必要があります|[2,*] :workspace で :count 件のアカウントを再接続する必要があります', + 'title' => 'アカウントの再接続が必要です', + 'intro' => ':workspace ワークスペースの以下のソーシャルアカウントが接続解除されており、再接続が必要です:', + 'reasons_title' => '次の理由が考えられます:', + 'reason_expired' => 'アクセストークンの有効期限が切れた', + 'reason_revoked' => 'プラットフォーム上で TryPost へのアクセスを取り消した', + 'reason_changed' => 'プラットフォームが認証要件を変更した', + 'reconnect_cta' => '投稿のスケジュールと公開を続けるには、これらのアカウントを再接続してください。', + 'button' => 'アカウントを再接続', + ], +]; diff --git a/lang/ja/notifications.php b/lang/ja/notifications.php new file mode 100644 index 00000000..f2f2ccb2 --- /dev/null +++ b/lang/ja/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => '投稿の準備ができました', + 'body' => 'AI の処理が完了しました。タップして確認・公開してください。', + ], + 'account_disconnected' => [ + 'title' => ':platform アカウントの接続が解除されました', + 'body' => ':account の再接続が必要です', + ], + 'account_token_expired' => [ + 'title' => ':platform アカウントの再接続が必要です', + 'body' => ':account のセッションの有効期限が切れました — 投稿を続けるには再接続してください', + ], +]; diff --git a/lang/ja/onboarding.php b/lang/ja/onboarding.php new file mode 100644 index 00000000..a0eda22b --- /dev/null +++ b/lang/ja/onboarding.php @@ -0,0 +1,41 @@ + 'TryPost へようこそ', + 'description' => 'あなたやあなたのビジネスに最も当てはまるものを教えてください。体験を最適化します。', + 'continue' => '続ける', + 'personas' => [ + 'creator' => 'コンテンツクリエイター', + 'freelancer' => 'フリーランス', + 'developer' => '開発者', + 'startup' => 'スタートアップ', + 'agency' => '代理店', + 'small_business' => '中小企業', + 'marketer' => 'マーケター', + 'online_store' => 'オンラインストア', + 'other' => 'その他', + ], + 'goals_title' => 'TryPost での目標は何ですか?', + 'goals_description' => '当てはまるものをすべて選んでください。TryPost をあなた向けに設定します。', + 'goals' => [ + 'save_time' => 'すべての場所へ一度に投稿して時間を節約する', + 'ai_content' => 'AI でより速く投稿を作成する', + 'plan_calendar' => 'カレンダーで投稿を計画する', + 'stay_on_brand' => 'すべての投稿をブランドに沿ったものにする', + 'grow_audience' => 'オーディエンスとエンゲージメントを増やす', + 'drive_sales' => 'トラフィックと売上を増やす', + 'manage_clients' => '複数のブランドやクライアントを管理する', + 'team_collaboration' => 'チームで作業する', + 'automate_api' => 'API、MCP、コードで投稿を自動化する', + 'track_performance' => '投稿のパフォーマンスを確認する', + 'just_exploring' => '今はまだ様子を見ている', + 'other' => 'その他', + ], + 'connect' => [ + 'title' => '最初のネットワークを接続', + 'description' => 'スケジュールを始めるには、少なくとも 1 つのソーシャルアカウントを連携してください。後からいつでも追加できます。', + 'must_connect' => '続けるには、少なくとも 1 つのネットワークを接続してください。', + ], +]; diff --git a/lang/ja/pagination.php b/lang/ja/pagination.php new file mode 100644 index 00000000..46e88f9d --- /dev/null +++ b/lang/ja/pagination.php @@ -0,0 +1,19 @@ + '« 前へ', + 'next' => '次へ »', + +]; diff --git a/lang/ja/passwords.php b/lang/ja/passwords.php new file mode 100644 index 00000000..a0ae6dbe --- /dev/null +++ b/lang/ja/passwords.php @@ -0,0 +1,22 @@ + 'パスワードが再設定されました。', + 'sent' => 'パスワード再設定リンクをメールで送信しました。', + 'throttled' => 'しばらく待ってから再試行してください。', + 'token' => 'このパスワード再設定トークンは無効です。', + 'user' => 'そのメールアドレスのユーザーが見つかりません。', + +]; diff --git a/lang/ja/posts.php b/lang/ja/posts.php new file mode 100644 index 00000000..2bbc2efa --- /dev/null +++ b/lang/ja/posts.php @@ -0,0 +1,671 @@ + '投稿', + 'search' => '投稿を検索...', + 'all_posts' => 'すべての投稿', + 'new_post' => '新規投稿', + 'no_posts' => '投稿が見つかりません', + 'no_search_results' => '検索に一致する投稿がありません', + 'try_different_search' => '別のキーワードを試すか、検索をクリアしてください。', + 'start_creating' => 'まずは最初の投稿を作成しましょう。', + 'filter_by_label' => 'ラベルで絞り込む', + 'label_search_placeholder' => 'ラベルを検索...', + 'no_labels' => 'ラベルが見つかりません。', + 'clear_label_filter' => 'ラベルの絞り込みをクリア', + 'table' => [ + 'post' => '投稿', + 'status' => 'ステータス', + 'content' => '内容', + 'platforms' => 'プラットフォーム', + 'labels' => 'ラベル', + 'scheduled_at' => '日付', + 'actions' => '', + ], + 'manage_posts' => 'すべての投稿を管理', + 'delete_confirm' => 'この投稿を削除してもよろしいですか?', + 'by' => '投稿者', + + 'actions' => [ + 'view' => '投稿を表示', + 'delete' => '削除', + 'duplicate' => '複製', + 'copy_id' => 'ID をコピー', + 'copied' => 'ID をクリップボードにコピーしました', + ], + + 'form' => [ + 'post_type' => '投稿タイプ', + 'board' => 'ボード', + 'select_board' => 'ボードを選択', + 'search_board' => 'ボードを検索...', + 'no_board_found' => 'ボードが見つかりません', + 'media' => 'メディア', + 'min' => '最小', + 'uploading' => 'アップロード中...', + 'drop_to_upload' => 'ドロップしてアップロード', + 'drag_and_drop' => 'ドラッグ&ドロップまたはクリックしてアップロード', + 'photos_and_videos' => '写真と動画', + 'photos_only' => '写真のみ', + 'videos_only' => '動画のみ', + 'drag_to_reorder' => 'ドラッグして並べ替え', + 'caption' => 'キャプション', + 'write_caption' => 'キャプションを書く...', + 'content_exceeds_platform' => ':platform: :over 文字超過しています(最大 :limit)。', + 'tiktok' => [ + 'settings' => 'TikTok 設定', + 'variant_label' => '投稿タイプ', + 'variant' => [ + 'video' => '動画', + 'photo' => '写真カルーセル', + ], + 'posting_to' => '投稿先', + 'privacy_level' => 'この動画を見られるのは誰ですか?', + 'privacy_placeholder' => 'この投稿を見られる範囲を選択', + 'privacy' => [ + 'public' => '全員に公開', + 'friends' => '相互フォローの友達', + 'followers' => 'フォロワー', + 'private' => '自分のみ', + 'private_disabled_branded' => 'ブランドコンテンツの公開範囲は「自分のみ」に設定できません。', + ], + 'privacy_hint' => '利用可能な選択肢は TikTok アカウントの設定によって異なります。', + 'auto_add_music' => '音楽を自動追加', + 'auto_add_music_hint' => 'この機能は写真のみで利用できます。後で変更できるデフォルトの音楽が追加されます。', + 'yes' => 'はい', + 'no' => 'いいえ', + 'allow_users' => 'ユーザーに許可する操作:', + 'comments' => 'コメント', + 'duet' => 'デュエット', + 'stitch' => 'ステッチ', + 'is_aigc' => 'AI で作成した動画', + 'disclose' => '動画コンテンツを開示', + 'disclose_hint' => 'この動画が対価と引き換えに商品やサービスを宣伝していることを開示するにはオンにしてください。自分自身、第三者、またはその両方を宣伝している可能性があります。', + 'promotional_organic_title' => 'あなたの写真・動画には「プロモーションコンテンツ」というラベルが付きます。', + 'promotional_paid_title' => 'あなたの写真・動画には「有料パートナーシップ」というラベルが付きます。', + 'promotional_description' => 'これは動画を投稿した後は変更できません。', + 'compliance_incomplete' => 'コンテンツが自分自身、第三者、またはその両方のいずれを宣伝しているかを示す必要があります。', + 'privacy_required' => '公開する際には TikTok の公開範囲が必須です。', + 'branded_cleared_private' => 'ブランドコンテンツは非公開にできないため、公開範囲がクリアされました。', + 'interaction_disabled_by_creator' => 'TikTok アカウントの設定でオフになっています', + 'max_duration_exceeded' => '動画の長さは :duration 秒ですが、このアカウントでは最大 :max 秒までの動画しか投稿できません。', + 'processing_hint' => '公開後、コンテンツが処理されて TikTok プロフィールに表示されるまで数分かかる場合があります。', + 'brand_organic' => 'あなたのブランド', + 'brand_organic_hint' => '自分自身または自分のブランドを宣伝しています。この動画は「ブランドオーガニック」に分類されます。', + 'brand_content' => 'ブランドコンテンツ', + 'brand_content_hint' => '別のブランドまたは第三者を宣伝しています。この動画は「ブランドコンテンツ」に分類されます。', + 'compliance' => [ + 'agree' => '投稿することで、TikTok の以下に同意したことになります', + 'music_usage' => '音楽利用確認', + 'and' => 'および', + 'branded_policy' => 'ブランドコンテンツポリシー', + ], + ], + 'instagram' => [ + 'settings' => 'Instagram 設定', + 'posting_to' => '投稿先', + 'variant_label' => '投稿タイプ', + 'variant' => [ + 'feed' => 'フィード投稿', + 'reel' => 'リール', + 'story' => 'ストーリー', + ], + 'aspect_label' => 'アスペクト比', + 'aspect' => [ + 'square' => '正方形 (1:1)', + 'portrait' => '縦長 (4:5)', + 'landscape' => '横長 (16:9)', + 'original' => 'オリジナル', + ], + ], + 'facebook' => [ + 'settings' => 'Facebook 設定', + 'posting_to' => '投稿先', + 'variant_label' => '投稿タイプ', + 'variant' => [ + 'post' => '投稿', + 'reel' => 'リール', + 'story' => 'ストーリー', + ], + 'aspect_label' => 'アスペクト比', + 'aspect' => [ + 'square' => '正方形 (1:1)', + 'portrait' => '縦長 (4:5)', + 'landscape' => '横長 (16:9)', + 'original' => 'オリジナル', + ], + ], + 'linkedin' => [ + 'settings' => 'LinkedIn 設定', + 'settings_page' => 'LinkedIn ページ設定', + 'posting_to' => '投稿先', + 'document_title' => 'ドキュメントタイトル', + 'document_title_placeholder' => 'PDF ドキュメント投稿に表示されます', + ], + 'pinterest' => [ + 'settings' => 'Pinterest 設定', + 'posting_to' => '投稿先', + 'variant_label' => 'ピンタイプ', + 'variant' => [ + 'pin' => 'ピン', + 'video_pin' => '動画ピン', + 'carousel' => 'カルーセル', + ], + 'board' => 'ボード', + 'select_board' => 'ボードを選択', + 'no_boards' => 'Pinterest ボードが見つかりません。先に Pinterest アカウントで作成してください。', + 'search_board' => 'ボードを検索...', + 'no_board_found' => '検索に一致するボードがありません。', + 'board_required' => 'この投稿を公開する Pinterest ボードを選択してください。', + ], + 'discord' => [ + 'settings' => 'Discord 設定', + 'posting_to' => '投稿先', + 'channel' => 'チャンネル', + 'select_channel' => 'チャンネルを選択', + 'loading_channels' => 'チャンネルを読み込み中…', + 'search_channel' => 'チャンネルを検索…', + 'no_channels' => 'チャンネルが見つかりません。', + 'channel_required' => 'この投稿を公開する Discord チャンネルを選択してください。', + 'mentions' => 'メンション', + 'search_mention' => 'ロールまたはメンバーにメンション…', + 'embeds' => '埋め込み', + 'embed' => '埋め込み', + 'add_embed' => '埋め込みを追加', + 'embed_title' => '埋め込みのタイトル', + 'embed_description' => '埋め込みの説明', + 'embed_url' => '埋め込みの URL', + 'embed_image' => '画像 URL', + 'embed_color' => '色', + ], + 'warnings' => [ + 'no_variant' => '続けるには投稿タイプを選択してください。', + 'requires_media' => 'この投稿タイプには少なくとも 1 つの画像または動画が必要です。', + 'max_files_exceeded' => 'この投稿タイプでは最大 :max 個のメディアファイルまで使用できます(現在 :current 個)。', + 'min_files_required' => 'この投稿タイプには少なくとも :min 個のメディアファイルが必要です(現在 :current 個)。', + 'no_video_allowed' => 'この投稿タイプは動画を受け付けません。', + 'no_image_allowed' => 'この投稿タイプは動画のみを受け付けます。', + 'no_document_allowed' => 'この投稿タイプは PDF ドキュメントを受け付けません。', + 'no_mixed_media' => '画像と動画を同じ投稿にまとめることはできません。', + 'document_not_alone' => 'PDF は単独で投稿する必要があり、他の画像や動画と一緒には投稿できません。', + 'gif_not_allowed' => 'このプラットフォームは GIF を受け付けません。GIF を削除するか、別のネットワークを選択してください。', + 'image_too_large' => '画像がこの投稿タイプの上限 :max を超えています(現在 :current)。', + 'video_too_large' => '動画がこの投稿タイプの上限 :max を超えています(現在 :current)。', + 'document_too_large' => 'PDF がこの投稿タイプの上限 :max を超えています(現在 :current)。', + 'video_too_long' => '動画の長さは :current ですが、この投稿タイプでは最大 :max までです。', + 'aspect_ratio_too_narrow' => 'アスペクト比 :current はこの投稿タイプには縦長すぎます(最小 :min)。', + 'aspect_ratio_too_wide' => 'アスペクト比 :current はこの投稿タイプには横長すぎます(最大 :max)。', + ], + ], + + 'status' => [ + 'pending' => '保留中', + 'draft' => '下書き', + 'scheduled' => '予約済み', + 'publishing' => '公開中', + 'retrying' => '再試行中', + 'published' => '公開済み', + 'partially_published' => '一部公開済み', + 'failed' => '失敗', + ], + + 'descriptions' => [ + 'draft' => 'スケジュール待ちの投稿', + 'scheduled' => '公開が予約された投稿', + 'published' => 'すでに公開済みの投稿', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'AI で生成', + 'title' => 'AI で投稿を生成', + 'description' => 'どんな投稿にするかを説明してください。AI があなたのブランドコンテキストを使って作成します。', + 'prompt_label' => 'この投稿は何についてですか?', + 'prompt_placeholder' => '例: カルーセル向けの新しい画像生成機能を発表', + 'preview_label' => 'プレビュー', + 'start' => '生成', + 'apply' => 'この内容を使用', + 'retry' => 'もう一度試す', + 'cancel' => 'キャンセル', + ], + 'review' => [ + 'button_tooltip' => 'AI でレビュー', + 'title' => 'AI で投稿をレビュー', + 'description' => 'AI が文法、スペル、明確さをチェックします。同意できる提案を適用してください。', + 'loading' => 'テキストをレビュー中...', + 'no_issues' => '問題は見つかりませんでした。良さそうです。', + 'original' => '元の文', + 'suggestion' => '提案', + 'apply' => '適用', + 'apply_all' => 'すべて適用', + 'applied' => '適用済み', + 'cancel' => 'キャンセル', + ], + 'image_regenerate' => [ + 'button' => '調整', + 'title' => 'AI 画像を調整', + 'description' => '修正内容を説明してください。新しい画像が現在の画像を置き換え、カルーセル内の位置はそのまま保たれます。', + 'instruction_label' => '指示', + 'instruction_placeholder' => '例: 見出しの誤字を直して、背景を明るくして。', + 'processing' => '画像を再生成中... 数秒かかる場合があります。', + 'submit' => '画像を再生成', + 'cancel' => 'キャンセル', + 'success' => '画像を更新しました。新しいバージョンが投稿内の以前の画像を置き換えました。', + 'fallback_title' => 'この画像のコピーを改善', + 'errors' => [ + 'required' => '指示は必須です。', + 'start_failed' => '再生成を開始できませんでした。', + 'unavailable' => '現在この画像を再生成できません。', + 'timeout' => '再生成に予想以上の時間がかかっています。しばらくしてからもう一度お試しください。', + 'media_not_found' => 'メディアアイテムが見つかりません。', + 'not_ai_media' => 'AI 生成メディアのみ再生成できます。', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => '画像投稿', + 'description' => '見出しとキャプション付きの AI 画像。', + ], + 'carousel' => [ + 'name' => 'カルーセル', + 'description' => 'キャプション付きの複数スライドのカルーセル。', + ], + 'tweet_card' => [ + 'name' => 'ツイートカード', + 'description' => 'X/Twitter の投稿風にスタイリングした投稿。', + ], + 'tweet_card_image' => [ + 'name' => '写真付きツイートカード', + 'description' => 'ぼかした写真の上に X/Twitter カード風にした投稿。', + ], + ], + ], + + 'show' => [ + 'title' => '投稿の詳細', + 'edit' => '編集', + 'back' => '戻る', + 'no_content' => 'キャプションなし', + 'platforms' => 'プラットフォーム', + 'no_platforms' => 'プラットフォームが選択されていません。', + 'view_on_platform' => 'プラットフォームで表示', + 'published_on' => ':date に公開', + 'scheduled_for' => ':date に予約', + 'draft' => '下書き', + 'status_pending' => '保留中', + 'metrics' => 'メトリクス', + 'metrics_loading' => 'メトリクスを読み込み中…', + 'metrics_unavailable' => 'このプラットフォームのメトリクスはまだ利用できません。', + 'metrics_empty' => 'メトリクスが返されませんでした。', + ], + + 'edit' => [ + 'title' => '投稿を編集', + 'view_title' => '投稿を表示', + 'labels' => 'ラベル', + 'no_labels' => 'まだラベルが作成されていません', + 'schedule' => '予約', + 'pick_time' => '時刻を選択', + 'pick_time_past' => '未来の日時を選択してください。', + 'post_now' => '今すぐ投稿', + 'time' => '時刻', + 'cancel' => 'キャンセル', + 'delete' => '削除', + 'schedule_for' => '予約日時', + 'schedule_date' => '予約日', + 'unschedule' => '予約を解除', + 'saving' => '保存中...', + 'saved' => '保存しました', + 'draft' => '下書き', + 'media' => 'メディア', + 'add_media' => 'メディアを追加', + 'caption' => 'キャプション', + 'caption_placeholder' => 'キャプションを書く...', + 'compose_title' => '投稿を作成', + 'compose_subtitle' => 'メッセージを作成してメディアを追加', + 'preview_empty' => [ + 'title' => 'プラットフォームが選択されていません', + 'description' => 'プレビューを表示するには、公開先のプラットフォームを選択してください。', + ], + 'drop_zone_title' => 'メディアを追加', + 'drop_zone_subtitle' => 'ファイルをドラッグ&ドロップするか、クリックして参照', + 'add' => '追加', + 'publish_to' => '公開先', + 'organize' => '整理', + 'signatures' => '署名', + 'view_on_platform' => 'プラットフォームで表示', + 'platform_status' => 'プラットフォームのステータス', + 'compliance_incomplete' => '一部のプラットフォーム設定が未完了か、添付メディアと互換性がありません。', + 'compliance' => [ + 'requires_content_or_media' => '公開するにはテキストまたはメディアを追加してください。', + 'requires_media' => 'ここに公開するには画像または動画を追加してください。', + 'too_many_files' => 'この形式ではファイルは :max 個までです。', + 'too_few_files' => 'この形式には少なくとも :min 個のファイルを追加してください。', + 'no_videos' => 'この形式では画像のみ使用できます。', + 'no_images' => 'この形式では動画のみ使用できます。', + 'no_mixed_media' => '画像と動画を同じ投稿にまとめることはできません。', + 'no_gifs' => 'ここでは GIF はサポートされていません。', + 'no_documents' => 'この形式では PDF ドキュメントはサポートされていません。', + 'document_not_alone' => 'PDF は単独で投稿する必要があり、他の画像や動画と一緒には投稿できません。', + 'video_too_large' => '動画がこのプラットフォームのサイズ上限を超えています。', + 'video_too_long' => 'この形式では動画は :seconds 秒未満である必要があります。', + 'image_too_large' => '画像がこのプラットフォームのサイズ上限を超えています。', + 'document_too_large' => 'PDF がこのプラットフォームのサイズ上限を超えています。', + 'aspect_ratio_invalid' => 'この形式ではこのアスペクト比はサポートされていません。', + 'no_content_type' => 'このプラットフォームのコンテンツタイプを選択してください。', + 'requires_text' => 'テキストを追加してください — この形式にはタイトルが必要です。', + ], + 'publishing' => '公開中...', + 'publishing_overlay_title' => '投稿を公開しています', + 'publishing_overlay_subtitle' => 'これには少し時間がかかる場合があります。このページを離れても問題ありません。', + 'scheduled_overlay_title' => 'この投稿は予約されています', + 'scheduled_overlay_subtitle' => ':date に予約されています。変更するには、まず予約を解除してください。', + 'unschedule_cta' => '予約を解除して編集', + + 'tabs' => [ + 'preview' => 'プレビュー', + 'channels' => 'チャンネル', + 'comments' => 'コメント', + 'comments_empty' => 'まだコメントがありません。', + ], + + 'media_picker' => [ + 'title' => 'ギャラリーから選択', + 'search' => 'メディアを検索...', + 'empty' => 'ギャラリーにはまだメディアがありません', + 'cancel' => 'キャンセル', + 'add' => '追加', + 'add_count' => ':count 件を追加', + ], + + 'emoji_picker' => [ + 'search' => '絵文字を検索', + 'empty' => '絵文字が見つかりません', + 'recent' => 'よく使う項目', + 'smileys' => 'スマイリー・感情', + 'people' => '人・体', + 'nature' => '動物・自然', + 'food' => '食べ物・飲み物', + 'activities' => 'アクティビティ', + 'travel' => '旅行・場所', + 'objects' => 'オブジェクト', + 'symbols' => '記号', + 'flags' => '旗', + ], + + 'status' => [ + 'pending' => '保留中', + 'scheduled' => '予約済み', + 'published' => '公開済み', + 'publishing' => '公開中...', + 'retrying' => '再試行中...', + 'failed' => '失敗', + ], + + 'delete_modal' => [ + 'title' => '投稿を削除', + 'description' => 'この投稿を削除してもよろしいですか?この操作は取り消せません。', + 'action' => '削除', + 'cancel' => 'キャンセル', + ], + + 'sync_enable' => [ + 'title' => '同期を有効にしますか?', + 'description' => 'すべてのプラットフォームで同じ内容が共有されます。個別のプラットフォームに加えたカスタム編集は、現在の内容に置き換えられます。', + 'cancel' => 'キャンセル', + 'action' => '同期を有効化', + ], + + 'sync_disable' => [ + 'title' => '同期を無効にしますか?', + 'description' => '各プラットフォームは現在の内容を保持しますが、今後の編集は編集中のプラットフォームにのみ適用されます。', + 'customize_note' => '各プラットフォームの内容を個別にカスタマイズできるようになります。', + 'cancel' => 'キャンセル', + 'action' => '同期を無効化', + ], + + 'platforms_dialog' => [ + 'title' => 'プラットフォームを選択', + 'description' => 'この投稿を公開するプラットフォームを選択してください。', + ], + + 'signatures_modal' => [ + 'search' => '署名を検索...', + 'no_results' => '署名が見つかりません。', + ], + + 'validation' => [ + 'select_board' => 'ボードを選択', + 'images_not_supported' => '画像はサポートされていません', + 'videos_not_supported' => '動画はサポートされていません', + 'max_images' => '画像は最大 :count 枚', + 'requires_media' => 'メディアが必要です', + 'requires_content' => 'テキストコンテンツが必要です', + 'exceeded' => ':count 超過', + 'does_not_support_images' => ':platform は画像をサポートしていません', + 'supports_up_to_images' => ':platform は画像を最大 :count 枚までサポートします', + 'does_not_support_videos' => ':platform は動画をサポートしていません', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'フィード投稿', + 'description' => 'フィードとプロフィールに表示されます', + ], + 'instagram_reel' => [ + 'label' => 'リール', + 'description' => '最大 90 秒のショート動画', + ], + 'instagram_story' => [ + 'label' => 'ストーリー', + 'description' => '24 時間で消えます', + ], + 'linkedin_post' => [ + 'label' => '投稿', + 'description' => '標準の投稿 — 単一画像、複数画像、動画、または PDF', + ], + 'linkedin_page_post' => [ + 'label' => '投稿', + 'description' => '標準の投稿 — 単一画像、複数画像、動画、または PDF', + ], + 'facebook_post' => [ + 'label' => '投稿', + 'description' => 'ページ上の標準の投稿', + ], + 'facebook_reel' => [ + 'label' => 'リール', + 'description' => '最大 90 秒のショート動画', + ], + 'facebook_story' => [ + 'label' => 'ストーリー', + 'description' => '最大 60 秒の縦型動画ストーリー', + ], + 'tiktok_video' => [ + 'label' => '動画', + 'description' => 'ショート動画コンテンツ', + ], + 'tiktok_photo' => [ + 'label' => '写真カルーセル', + 'description' => '最大 35 枚の写真をスワイプ可能なカルーセルに', + ], + 'youtube_short' => [ + 'label' => 'ショート', + 'description' => '最大 60 秒の縦型動画', + ], + 'x_post' => [ + 'label' => '投稿', + 'description' => 'テキストとメディア付きのツイート', + ], + 'threads_post' => [ + 'label' => '投稿', + 'description' => 'メディア(任意)付きのテキスト投稿', + ], + 'pinterest_pin' => [ + 'label' => 'ピン', + 'description' => '標準の画像ピン', + ], + 'pinterest_video_pin' => [ + 'label' => '動画ピン', + 'description' => '動画ピン(4 秒〜15 分)', + ], + 'pinterest_carousel' => [ + 'label' => 'カルーセル', + 'description' => '複数画像のカルーセル(2〜5 枚)', + ], + 'bluesky_post' => [ + 'label' => '投稿', + 'description' => '画像(任意)付きのテキスト投稿', + ], + 'mastodon_post' => [ + 'label' => '投稿', + 'description' => 'メディア(任意)付きのテキスト投稿', + ], + 'telegram_post' => [ + 'label' => '投稿', + 'description' => 'メディア(任意)付きのテキスト投稿', + ], + 'discord_message' => [ + 'label' => 'メッセージ', + 'description' => 'メディアと埋め込み(任意)付きの Discord チャンネルへのメッセージ', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'LinkedIn ページ', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube ショート', + 'facebook' => 'Facebook ページ', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => '投稿を正常に予約しました!', + 'deleted' => '投稿を正常に削除しました!', + 'duplicated' => '投稿を下書きとして複製しました。', + 'cannot_edit_finalized' => 'この投稿はすでに処理済みのため、再公開できません。もう一度試すには複製してください。', + 'cannot_delete_published' => '公開済みの投稿は削除できません。', + 'connect_first' => '投稿を作成する前に、少なくとも 1 つのソーシャルネットワークを接続してください。', + ], + + 'errors' => [ + 'account_disconnected' => 'ソーシャルアカウントの接続が解除されています', + 'account_inactive' => 'ソーシャルアカウントが無効化されています', + 'account_token_expired' => 'ソーシャルアカウントのセッションの有効期限が切れました — 再接続してください', + ], + + 'delete' => [ + 'title' => '投稿を削除しますか?', + 'description' => 'この操作は取り消せません。投稿とそのすべてのメディアが完全に削除されます。', + 'confirm' => 'はい、削除します', + 'cancel' => 'キャンセル', + ], + + 'create' => [ + 'title' => '新しい投稿を作成', + 'description' => 'どのように始めるかを選んでください。', + 'scratch_title' => '最初から作成', + 'scratch_description' => '空の投稿を開いて、すべて自分で書きます。', + 'ai_title' => 'AI で生成', + 'ai_description' => '作りたい内容を説明すると、AI がコンテンツを生成します。', + 'ai_configure_description' => '形式を選んで、作成したい投稿を説明してください。', + 'ai_pick_template_description' => 'AI が生成する投稿のスタイルを選んでください。', + 'template_title' => 'テンプレートを使用', + 'template_description' => '厳選されたテンプレートから選んでカスタマイズします。', + 'coming_soon' => '近日公開', + + 'preview' => [ + 'image_title' => '画像のタイトル', + 'image_body' => '画像の本文', + ], + + 'steps' => [ + 'template_picker_title' => 'スタイルを選択', + 'format_title' => '形式を選択', + 'format_description' => '作成したい投稿の種類を選択してください。', + 'account_title' => 'アカウントを選択', + 'account_description' => '公開先のソーシャルアカウントを選択してください。', + 'media_title' => 'メディアオプション', + 'media_carousel' => 'スライドは何枚にしますか?', + 'media_optional' => '画像を含めますか?', + 'media_optional_label' => '画像は何枚にしますか?', + 'media_none' => 'なし', + 'media_count_label' => '画像の枚数', + 'prompt_title' => '投稿を説明', + 'prompt_label' => 'この投稿は何についてですか?', + 'prompt_placeholder' => '例: Instagram 向けの新しいカルーセル機能を発表', + 'preview_error' => '問題が発生しました。もう一度お試しください。', + 'loading_page_title' => '投稿を生成中', + 'loading_eta' => '推定時間: 約 :minutes。', + 'loading_eta_minute_one' => '1 分', + 'loading_eta_minute_other' => ':count 分', + 'loading_leave_title' => '作業を続けても大丈夫です。', + 'loading_leave_body' => '投稿の準備ができたらお知らせします。', + 'loading_leave_cta' => 'カレンダーへ移動', + 'loading_create_another_cta' => '別の投稿を作成', + 'loading_tip_credits' => 'AI 画像 1 枚につき約 15 クレジットを使用します。', + 'loading_tip_edit' => '投稿の準備ができたら、すべてを編集できます。', + 'loading_tip_draft' => '生成された投稿は下書きに保存されます。', + 'loading_tip_brand' => 'ブランド設定を調整すると、今後の投稿に反映されます。', + 'loading_tip_carousel' => 'カルーセルはアップロードした画像 1 枚につき 1 スライドを作成します。', + 'loading_tip_quality' => '画像の品質は、速度とコストのバランスを取るよう設定されています。', + 'create' => '投稿を作成', + 'back' => '戻る', + 'next' => '続ける', + 'cancel' => 'キャンセル', + 'discard' => '破棄', + 'retry' => 'もう一度試す', + 'no_platforms' => '接続済みのアカウントがありません', + 'connect_first' => 'AI 生成を使用するには、少なくとも 1 つのソーシャルアカウントを接続してください。', + 'no_account_for_template' => 'このテンプレートを使用するには、対応するアカウントを接続してください。', + + 'format' => [ + 'instagram_feed' => 'Instagram フィード投稿', + 'instagram_carousel' => 'Instagram カルーセル', + 'linkedin_post' => 'LinkedIn 投稿', + 'linkedin_page_post' => 'LinkedIn ページ投稿', + 'x_post' => 'X 投稿', + 'bluesky_post' => 'Bluesky 投稿', + 'threads_post' => 'Threads 投稿', + 'mastodon_post' => 'Mastodon 投稿', + 'telegram_post' => 'Telegram 投稿', + 'discord_message' => 'Discord メッセージ', + 'facebook_post' => 'Facebook 投稿', + 'pinterest_pin' => 'Pinterest ピン', + 'instagram_story' => 'Instagram ストーリー', + 'facebook_story' => 'Facebook ストーリー', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'テンプレートを選択', + 'browser_description' => '厳選されたテンプレートから始めてアレンジしましょう。', + 'search_placeholder' => 'テンプレートを検索…', + 'no_search_results' => '検索に一致するテンプレートがありません', + 'try_different_search' => '別のキーワードを試すか、検索をクリアしてください。', + 'slides_count' => '{count} 枚のスライド|{count} 枚のスライド', + 'all_platforms' => 'すべてのプラットフォーム', + 'platform_search_placeholder' => 'プラットフォームを検索…', + 'no_platform_match' => '一致するプラットフォームがありません。', + 'use_this' => 'このテンプレートを使用', + 'no_templates' => '利用できるテンプレートがありません。', + 'applying' => 'テンプレートを適用中…', + 'category' => [ + 'product_launch' => '製品ローンチ', + 'promotion' => 'プロモーション', + 'educational' => '教育', + 'behind_the_scenes' => '舞台裏', + 'testimonial' => 'お客様の声', + 'industry_tip' => '業界のヒント', + 'event' => 'イベント', + 'engagement' => 'エンゲージメント', + ], + ], +]; diff --git a/lang/ja/settings.php b/lang/ja/settings.php new file mode 100644 index 00000000..c0c0b95f --- /dev/null +++ b/lang/ja/settings.php @@ -0,0 +1,356 @@ + '設定', + 'description' => 'プロフィールとアカウントの設定を管理します', + + 'hub' => [ + 'title' => '設定', + 'description' => '管理する項目を選んでください。', + 'profile' => [ + 'title' => 'プロフィール', + 'description' => '個人情報、パスワード、通知設定を更新します。', + ], + 'workspace' => [ + 'title' => 'ワークスペース', + 'description' => 'ワークスペース、ブランド、メンバー、API キーを設定します。', + ], + 'account' => [ + 'title' => 'アカウント', + 'description' => 'アカウント情報、使用状況、お支払いを管理します。', + ], + ], + + 'nav' => [ + 'profile' => 'プロフィール', + 'authentication' => '認証', + 'workspace' => 'ワークスペース', + 'members' => 'メンバー', + 'notifications' => '通知', + 'billing' => 'お支払い', + ], + + 'notifications' => [ + 'title' => '通知設定', + 'heading' => 'メール通知', + 'description' => '受け取りたいメール通知を選んでください', + 'post_published' => '投稿が公開されたとき', + 'post_published_description' => '投稿が正常に公開されたときにメールを受け取ります', + 'post_failed' => '投稿が失敗したとき', + 'post_failed_description' => '投稿の公開に失敗したときにメールを受け取ります', + 'account_disconnected' => 'アカウントの接続が解除されたとき', + 'account_disconnected_description' => 'ソーシャルアカウントの接続が解除されたときにメールを受け取ります', + 'save' => '設定を保存', + ], + + 'profile' => [ + 'title' => 'プロフィール設定', + 'photo_heading' => 'プロフィール写真', + 'photo_description' => 'プロフィール写真をアップロード', + 'heading' => 'プロフィール情報', + 'description' => '名前とメールアドレスを更新します', + 'avatar' => 'アバター', + 'name' => '名前', + 'name_placeholder' => '氏名', + 'email' => 'メールアドレス', + 'email_placeholder' => 'メールアドレス', + 'email_unverified' => 'メールアドレスが未確認です。', + 'resend_verification' => 'こちらをクリックして確認メールを再送信してください。', + 'verification_sent' => '新しい確認リンクをメールアドレスに送信しました。', + 'save' => '保存', + ], + + 'authentication' => [ + 'title' => '認証', + 'page_title' => '認証設定', + 'sessions' => [ + 'title' => 'アクティブなセッション', + 'description' => '不審な点に気づいた場合は、他のデバイスからログアウトしてください。', + 'unknown_browser' => '不明なブラウザ', + 'unknown_ip' => '不明な IP', + 'on' => '·', + 'active_now' => '現在アクティブ', + 'log_out_others' => '他のデバイスからログアウト', + 'modal_title' => '他のデバイスからログアウト', + 'modal_description_password' => '他のブラウザセッションからログアウトすることを確認するため、現在のパスワードを入力してください。', + 'modal_description_email' => '他のブラウザセッションからログアウトすることを確認するため、メールアドレスを入力してください。', + 'password_placeholder' => '現在のパスワード', + 'email_placeholder' => 'アカウントのメールアドレス', + 'cancel' => 'キャンセル', + 'submit' => '他のデバイスからログアウト', + 'email_mismatch' => 'メールアドレスがアカウントと一致しません。', + 'flash_logged_out' => '他のデバイスからログアウトしました。', + ], + 'password' => [ + 'update_title' => 'パスワードを更新', + 'set_title' => 'パスワードを設定', + 'update_description' => 'セキュリティを保つため、長くランダムなパスワードを使用してください。', + 'set_description' => '接続済みのプロバイダーなしでサインインできるよう、パスワードを追加してください。', + 'current_password' => '現在のパスワード', + 'new_password' => '新しいパスワード', + 'confirm_password' => 'パスワードの確認', + 'save' => 'パスワードを保存', + 'set' => 'パスワードを設定', + ], + 'providers' => [ + 'title' => '接続済みのアカウント', + 'description' => 'これらの接続済みプロバイダーで、より速くサインインできます。', + 'connected' => '接続済み', + 'not_connected' => '未接続', + 'connect' => '接続', + 'disconnect' => '接続解除', + 'flash_disconnected' => ':provider の接続を解除しました。', + 'flash_connected' => ':provider を接続しました。', + 'flash_already_linked' => 'その :provider アカウントはすでに別のユーザーに連携されています。', + 'flash_cannot_disconnect' => '唯一のサインイン方法は接続解除できません。先にパスワードを設定するか、別のプロバイダーを接続してください。', + ], + ], + + 'delete_account' => [ + 'heading' => 'アカウントを削除', + 'description' => 'アカウントとそのすべてのリソースを削除します', + 'warning' => '警告', + 'warning_message' => '慎重に進めてください。この操作は取り消せません。', + 'button' => 'アカウントを削除', + 'modal_title' => 'アカウントを削除してもよろしいですか?', + 'modal_description_password' => 'アカウントを削除すると、そのすべてのリソースとデータも完全に削除されます。確認のためパスワードを入力してください。', + 'modal_description_email' => 'アカウントを削除すると、そのすべてのリソースとデータも完全に削除されます。確認のためメールアドレス :email を入力してください。', + 'password' => 'パスワード', + 'password_placeholder' => 'パスワード', + 'email_placeholder' => 'アカウントのメールアドレス', + 'email_mismatch' => 'メールアドレスがアカウントと一致しません。', + 'cancel' => 'キャンセル', + 'confirm' => 'アカウントを削除', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'ワークスペース', + 'brand' => 'ブランド', + 'users' => 'メンバー', + 'api_keys' => 'API キー', + ], + 'title' => 'ワークスペース設定', + 'logo_heading' => 'ワークスペースのロゴ', + 'logo_description' => 'ワークスペースのロゴをアップロード', + 'heading' => 'ワークスペース名', + 'description' => 'ワークスペース名を更新します', + 'members_heading' => 'メンバー', + 'members_description' => 'ワークスペースのメンバーと招待を管理します', + 'name' => '名前', + 'name_placeholder' => 'マイワークスペース', + 'save' => '保存', + ], + + 'brand' => [ + 'title' => 'ブランド', + 'description' => 'AI 生成コンテンツ向けにブランドアイデンティティを設定します。', + 'name' => 'ワークスペース名', + 'name_placeholder' => 'マイブランド', + 'website' => 'ウェブサイト', + 'website_placeholder' => 'https://yourbrand.com', + 'brand_description' => '説明', + 'brand_description_placeholder' => 'ブランドについて、何をしているか、対象となるオーディエンスは誰かを教えてください...', + 'voice' => 'ブランドボイス', + 'voice_description' => 'コンテンツの印象を決める特性を選んでください。', + 'voice_group' => [ + 'pov' => '視点', + 'formality' => 'フォーマルさ', + 'energy' => 'エネルギー', + 'humor' => 'ユーモア', + 'attitude' => '姿勢', + 'warmth' => '温かみ', + 'confidence' => '自信', + 'style' => 'スタイル', + ], + 'voice_trait' => [ + 'first_person' => '一人称', + 'second_person' => '二人称(あなた)', + 'third_person' => '三人称', + 'formal' => 'フォーマル', + 'balanced' => 'バランス型', + 'casual' => 'カジュアル', + 'calm' => '落ち着いた', + 'moderate' => '控えめ', + 'enthusiastic' => '熱意のある', + 'vibrant' => '活気のある', + 'serious' => '真面目', + 'dry' => 'ドライ・控えめ', + 'witty' => '機知に富んだ', + 'playful' => '遊び心のある', + 'respectful' => '礼儀正しい', + 'even_handed' => '公平な', + 'bold' => '大胆', + 'provocative' => '挑発的', + 'neutral' => '中立', + 'friendly' => 'フレンドリー', + 'empathetic' => '共感的', + 'humble' => '謙虚', + 'confident' => '自信のある', + 'assertive' => '力強い', + 'direct' => 'ストレート', + 'concise' => '簡潔', + 'transparent' => '透明性のある', + 'no_hype' => '誇張しない', + 'practical' => '実用的', + 'data_driven' => 'データ重視', + 'storytelling' => 'ストーリーテリング', + 'inspirational' => 'インスピレーションを与える', + 'educational' => '教育的', + 'technical' => '技術的', + 'minimalist' => '絵文字控えめ', + ], + 'brand_color' => 'ブランドカラー', + 'background_color' => '背景色', + 'text_color' => 'テキストの色', + 'font' => 'フォント', + 'image_style' => '画像スタイル', + 'image_style_description' => 'AI 投稿のスライドやカバー画像を生成する際に適用されるビジュアルスタイルです。', + 'image_style_cinematic' => 'シネマティック', + 'image_style_illustration' => 'イラスト', + 'image_style_isometric_3d' => 'アイソメトリック', + 'image_style_cartoon' => 'カートゥーン', + 'image_style_typographic' => 'タイポグラフィ', + 'image_style_infographic' => 'インフォグラフィック', + 'image_style_minimalist' => 'ミニマリスト', + 'image_style_mockup' => 'モックアップ', + 'content_language' => 'コンテンツの言語', + 'content_language_description' => 'AI が生成するキャプション、ハッシュタグ、生成された画像や動画内のテキストに使用される言語です。', + ], + + 'members' => [ + 'title' => 'メンバー', + 'heading' => 'チームメンバー', + 'description' => 'このワークスペースのメンバーと招待を管理します', + + 'cancel' => 'キャンセル', + 'remove' => '削除', + 'make_role' => ':role にする', + + 'invite' => [ + 'title' => 'メンバーを招待', + 'description' => 'メールで招待を送り、コラボレーターを追加します', + 'email' => 'メールアドレス', + 'email_placeholder' => 'collaborator@email.com', + 'role' => '役割', + 'role_placeholder' => '役割を選択', + 'submit' => '招待を送信', + ], + + 'pending' => [ + 'title' => '保留中の招待', + 'description' => '承諾待ちの招待', + 'empty' => '保留中の招待はありません', + ], + + 'list' => [ + 'title' => 'メンバー', + 'description' => 'このワークスペースにアクセスできる人', + 'empty' => 'オーナー以外のメンバーはいません', + ], + + 'remove_modal' => [ + 'title' => 'メンバーを削除', + 'description' => 'このメンバーをワークスペースから削除してもよろしいですか?ワークスペースのすべてのリソースへのアクセスを失います。', + 'action' => 'メンバーを削除', + ], + + 'cancel_invite_modal' => [ + 'title' => '招待をキャンセル', + 'description' => 'この招待をキャンセルしてもよろしいですか?', + 'action' => '招待をキャンセル', + ], + + 'roles' => [ + 'owner' => 'オーナー', + 'admin' => '管理者', + 'member' => 'メンバー', + 'viewer' => '閲覧者', + ], + + 'flash' => [ + 'invite_sent' => '招待を正常に送信しました!', + 'invite_deleted' => '招待を削除しました。', + 'member_removed' => 'メンバーを正常に削除しました。', + 'role_updated' => 'メンバーの役割を更新しました。', + 'wrong_email' => 'この招待は別のメールアドレス宛てです。', + 'already_member' => 'あなたはすでにこのワークスペースのメンバーです。', + 'invite_accepted' => 'ようこそ!これでワークスペースのメンバーになりました。', + 'invite_declined' => '招待を辞退しました。', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'アカウント', + 'usage' => '使用状況', + 'billing' => 'お支払い', + ], + 'title' => 'アカウント設定', + 'description' => 'アカウント名と請求用メールアドレスを管理します', + 'name' => 'アカウント名', + 'name_placeholder' => 'マイカンパニー', + 'billing_email' => '請求用メールアドレス', + 'billing_email_placeholder' => 'billing@company.com', + 'billing_email_hint' => 'このメールアドレスは、Stripe からの請求書や請求関連の連絡に使用されます。', + 'submit' => '保存', + ], + + 'flash' => [ + 'account_updated' => 'アカウントを正常に更新しました!', + 'profile_updated' => 'プロフィールを正常に更新しました!', + 'password_updated' => 'パスワードを正常に更新しました!', + 'workspace_updated' => '設定を正常に更新しました!', + 'photo_updated' => '写真を正常に更新しました!', + 'photo_deleted' => '写真を正常に削除しました!', + 'logo_updated' => 'ロゴを正常にアップロードしました!', + 'logo_deleted' => 'ロゴを正常に削除しました!', + 'notifications_updated' => '通知設定を更新しました!', + ], + + 'api_keys' => [ + 'title' => 'API キー', + 'page_title' => 'API キー', + 'heading' => 'API キー', + 'description' => 'ワークスペースへのプログラムによるアクセス用の API キーを管理します。', + 'create' => 'API キーを作成', + 'copy' => 'コピー', + 'new_token_message' => '新しい API キーが作成されました。二度と表示されないので、今すぐコピーしてください。', + 'table' => [ + 'name' => '名前', + 'key' => 'キー', + 'status' => 'ステータス', + 'expires' => '有効期限', + 'last_used' => '最終使用', + 'never' => 'なし', + ], + 'actions' => [ + 'copy_id' => 'API キー ID をコピー', + 'copy_id_success' => 'API キー ID をクリップボードにコピーしました', + 'delete' => '削除', + ], + 'empty' => [ + 'title' => 'まだ API キーがありません', + 'description' => 'API キーを作成して、ワークスペースにプログラムからアクセスしましょう。', + ], + 'delete_modal' => [ + 'title' => 'API キーを削除', + 'description' => 'この API キーを削除してもよろしいですか?このキーを使用しているアプリケーションは、直ちにアクセスを失います。', + 'action' => 'API キーを削除', + ], + 'create_dialog' => [ + 'title' => 'API キーを作成', + 'description' => 'ワークスペースへのプログラムによるアクセス用に、新しい API キーを作成します。', + 'name' => '名前', + 'name_placeholder' => '例: 本番用 API キー', + 'expires' => '有効期限(任意)', + 'expires_placeholder' => '有効期限なし', + 'submit' => '作成', + 'cancel' => 'キャンセル', + ], + 'flash' => [ + 'created' => 'API キーを正常に作成しました!', + 'deleted' => 'API キーを正常に削除しました!', + ], + ], +]; diff --git a/lang/ja/sidebar.php b/lang/ja/sidebar.php new file mode 100644 index 00000000..09ff7c59 --- /dev/null +++ b/lang/ja/sidebar.php @@ -0,0 +1,61 @@ + 'ワークスペース', + 'select_workspace' => 'ワークスペースを選択', + 'create_workspace' => 'ワークスペースを作成', + 'create_post' => '投稿を作成', + 'profile' => 'プロフィール', + 'log_out' => 'ログアウト', + + 'workspace' => 'ワークスペース: :name', + 'workspace_select' => 'ワークスペース: 選択', + + 'theme' => 'テーマ: :name', + 'theme_light' => 'ライト', + 'theme_dark' => 'ダーク', + 'theme_system' => 'システム', + + 'language' => '言語: :name', + 'language_select' => '言語: 選択', + + 'groups' => [ + 'posts' => '投稿', + 'workspace' => 'ワークスペース', + 'others' => 'その他', + ], + + 'analytics' => 'アナリティクス', + 'automations' => 'オートメーション', + 'settings' => '設定', + + 'posts' => [ + 'calendar' => 'カレンダー', + 'all' => 'すべて', + 'scheduled' => '予約済み', + 'posted' => '公開済み', + 'drafts' => '下書き', + ], + + 'workspace' => [ + 'connections' => '接続', + 'signatures' => '署名', + 'labels' => 'ラベル', + 'assets' => 'アセット', + 'api_keys' => 'API キー', + ], + + 'notifications' => '通知', + 'mark_all_read' => 'すべて既読にする', + 'mark_as_read' => '既読にする', + 'archive_all' => 'すべてアーカイブ', + 'no_notifications' => '通知はありません', + + 'support' => [ + 'docs' => 'ドキュメント', + 'referral' => '30% の紹介報酬を獲得', + 'stay_updated' => '最新情報を受け取る', + ], +]; diff --git a/lang/ja/signatures.php b/lang/ja/signatures.php new file mode 100644 index 00000000..c4426544 --- /dev/null +++ b/lang/ja/signatures.php @@ -0,0 +1,59 @@ + '署名', + 'description' => '再利用できる署名を作成して、投稿にすばやく追加しましょう', + 'search' => '署名を検索...', + 'new' => '新しい署名', + 'empty_title' => 'まだ署名がありません', + 'empty_description' => '署名を作成して、ハッシュタグ、リンク、再利用したいテキストを投稿にすばやく追加しましょう', + 'no_search_results' => '検索に一致する署名がありません', + 'try_different_search' => '別のキーワードを試すか、検索をクリアしてください。', + 'table' => [ + 'name' => '名前', + 'content' => '内容', + 'created_at' => '作成日', + ], + + 'actions' => [ + 'edit' => '署名を編集', + 'delete' => '署名を削除', + ], + + 'create' => [ + 'title' => '署名を作成', + 'description' => '署名に名前を付け、追加する内容(ハッシュタグ、リンク、カスタムテキストなど、再利用するもの)を入力してください。', + 'name' => '名前', + 'name_placeholder' => '例: マーケティング、旅行、締めの一言', + 'content' => '内容', + 'content_placeholder' => "#マーケティング #ソーシャルメディア\n詳しくは: https://yourbrand.com", + 'content_hint' => 'ハッシュタグ、リンク、カスタムの導入文、締めの一言など、投稿に追加するものは何でも。', + 'submit' => '署名を作成', + 'submitting' => '作成中...', + ], + + 'edit' => [ + 'title' => '署名を編集', + 'description' => 'この署名の名前と内容を更新します。', + 'name' => '名前', + 'name_placeholder' => '例: マーケティング、旅行、締めの一言', + 'content' => '内容', + 'content_placeholder' => "#マーケティング #ソーシャルメディア\n詳しくは: https://yourbrand.com", + 'content_hint' => 'ハッシュタグ、リンク、カスタムの導入文、締めの一言など、投稿に追加するものは何でも。', + 'submit' => '変更を保存', + 'submitting' => '保存中...', + ], + + 'delete' => [ + 'title' => '署名を削除', + 'description' => 'この署名を削除してもよろしいですか?この操作は取り消せません。', + 'confirm' => '削除', + 'cancel' => 'キャンセル', + ], + + 'flash' => [ + 'created' => '署名を作成しました。', + 'updated' => '署名を更新しました。', + 'deleted' => '署名を削除しました。', + ], +]; diff --git a/lang/ja/usage.php b/lang/ja/usage.php new file mode 100644 index 00000000..07b78ab8 --- /dev/null +++ b/lang/ja/usage.php @@ -0,0 +1,15 @@ + '使用状況', + + 'section_account' => 'アカウント', + 'section_account_description' => 'プランのクォータと上限。', + 'section_ai' => 'AI クレジット', + 'section_ai_description' => 'クレジットは AI 機能の利用に応じて消費されます。毎月 1 日にリセットされます。', + + 'workspaces' => 'ワークスペース', + 'social_accounts' => 'ソーシャルアカウント', + 'members' => 'メンバー', + 'credits' => 'クレジット', +]; diff --git a/lang/ja/validation.php b/lang/ja/validation.php new file mode 100644 index 00000000..6b041e26 --- /dev/null +++ b/lang/ja/validation.php @@ -0,0 +1,200 @@ + ':attribute を承認してください。', + 'accepted_if' => ':other が :value の場合、:attribute を承認してください。', + 'active_url' => ':attribute には有効な URL を指定してください。', + 'after' => ':attribute には :date より後の日付を指定してください。', + 'after_or_equal' => ':attribute には :date 以降の日付を指定してください。', + 'alpha' => ':attribute には英字のみを指定してください。', + 'alpha_dash' => ':attribute には英数字、ハイフン、アンダースコアのみを指定してください。', + 'alpha_num' => ':attribute には英数字のみを指定してください。', + 'any_of' => ':attribute が無効です。', + 'array' => ':attribute には配列を指定してください。', + 'ascii' => ':attribute には半角の英数字と記号のみを指定してください。', + 'before' => ':attribute には :date より前の日付を指定してください。', + 'before_or_equal' => ':attribute には :date 以前の日付を指定してください。', + 'between' => [ + 'array' => ':attribute の項目数は :min 個から :max 個の間にしてください。', + 'file' => ':attribute のサイズは :min キロバイトから :max キロバイトの間にしてください。', + 'numeric' => ':attribute は :min から :max の間にしてください。', + 'string' => ':attribute は :min 文字から :max 文字の間にしてください。', + ], + 'boolean' => ':attribute には true または false を指定してください。', + 'can' => ':attribute に許可されていない値が含まれています。', + 'confirmed' => ':attribute の確認が一致しません。', + 'contains' => ':attribute に必須の値が含まれていません。', + 'current_password' => 'パスワードが正しくありません。', + 'date' => ':attribute には有効な日付を指定してください。', + 'date_equals' => ':attribute には :date と等しい日付を指定してください。', + 'date_format' => ':attribute は :format の形式と一致していません。', + 'decimal' => ':attribute には小数点以下 :decimal 桁を指定してください。', + 'declined' => ':attribute を拒否してください。', + 'declined_if' => ':other が :value の場合、:attribute を拒否してください。', + 'different' => ':attribute と :other には異なる値を指定してください。', + 'digits' => ':attribute は :digits 桁で指定してください。', + 'digits_between' => ':attribute は :min 桁から :max 桁の間で指定してください。', + 'dimensions' => ':attribute の画像サイズが無効です。', + 'distinct' => ':attribute に重複した値があります。', + 'doesnt_contain' => ':attribute に次のいずれも含めないでください: :values。', + 'doesnt_end_with' => ':attribute の末尾に次のいずれも使用しないでください: :values。', + 'doesnt_start_with' => ':attribute の先頭に次のいずれも使用しないでください: :values。', + 'email' => ':attribute には有効なメールアドレスを指定してください。', + 'encoding' => ':attribute は :encoding でエンコードしてください。', + 'ends_with' => ':attribute の末尾には次のいずれかを指定してください: :values。', + 'enum' => '選択された :attribute は無効です。', + 'exists' => '選択された :attribute は無効です。', + 'extensions' => ':attribute には次のいずれかの拡張子を指定してください: :values。', + 'file' => ':attribute にはファイルを指定してください。', + 'filled' => ':attribute には値を指定してください。', + 'gt' => [ + 'array' => ':attribute の項目数は :value 個より多くしてください。', + 'file' => ':attribute のサイズは :value キロバイトより大きくしてください。', + 'numeric' => ':attribute は :value より大きくしてください。', + 'string' => ':attribute は :value 文字より多くしてください。', + ], + 'gte' => [ + 'array' => ':attribute の項目数は :value 個以上にしてください。', + 'file' => ':attribute のサイズは :value キロバイト以上にしてください。', + 'numeric' => ':attribute は :value 以上にしてください。', + 'string' => ':attribute は :value 文字以上にしてください。', + ], + 'hex_color' => ':attribute には有効な 16 進数カラーを指定してください。', + 'image' => ':attribute には画像を指定してください。', + 'in' => '選択された :attribute は無効です。', + 'in_array' => ':attribute は :other に存在する必要があります。', + 'in_array_keys' => ':attribute には次のキーのうち少なくとも 1 つを含めてください: :values。', + 'integer' => ':attribute には整数を指定してください。', + 'ip' => ':attribute には有効な IP アドレスを指定してください。', + 'ipv4' => ':attribute には有効な IPv4 アドレスを指定してください。', + 'ipv6' => ':attribute には有効な IPv6 アドレスを指定してください。', + 'json' => ':attribute には有効な JSON 文字列を指定してください。', + 'list' => ':attribute にはリストを指定してください。', + 'lowercase' => ':attribute は小文字で指定してください。', + 'lt' => [ + 'array' => ':attribute の項目数は :value 個より少なくしてください。', + 'file' => ':attribute のサイズは :value キロバイトより小さくしてください。', + 'numeric' => ':attribute は :value より小さくしてください。', + 'string' => ':attribute は :value 文字より少なくしてください。', + ], + 'lte' => [ + 'array' => ':attribute の項目数は :value 個以下にしてください。', + 'file' => ':attribute のサイズは :value キロバイト以下にしてください。', + 'numeric' => ':attribute は :value 以下にしてください。', + 'string' => ':attribute は :value 文字以下にしてください。', + ], + 'mac_address' => ':attribute には有効な MAC アドレスを指定してください。', + 'max' => [ + 'array' => ':attribute の項目数は :max 個以下にしてください。', + 'file' => ':attribute のサイズは :max キロバイト以下にしてください。', + 'numeric' => ':attribute は :max 以下にしてください。', + 'string' => ':attribute は :max 文字以下にしてください。', + ], + 'max_digits' => ':attribute の桁数は :max 桁以下にしてください。', + 'mimes' => ':attribute には次のいずれかの種類のファイルを指定してください: :values。', + 'mimetypes' => ':attribute には次のいずれかの種類のファイルを指定してください: :values。', + 'min' => [ + 'array' => ':attribute の項目数は :min 個以上にしてください。', + 'file' => ':attribute のサイズは :min キロバイト以上にしてください。', + 'numeric' => ':attribute は :min 以上にしてください。', + 'string' => ':attribute は :min 文字以上にしてください。', + ], + 'min_digits' => ':attribute の桁数は :min 桁以上にしてください。', + 'missing' => ':attribute は含めないでください。', + 'missing_if' => ':other が :value の場合、:attribute は含めないでください。', + 'missing_unless' => ':other が :value でない限り、:attribute は含めないでください。', + 'missing_with' => ':values が存在する場合、:attribute は含めないでください。', + 'missing_with_all' => ':values がすべて存在する場合、:attribute は含めないでください。', + 'multiple_of' => ':attribute は :value の倍数にしてください。', + 'not_in' => '選択された :attribute は無効です。', + 'not_regex' => ':attribute の形式が無効です。', + 'numeric' => ':attribute には数値を指定してください。', + 'password' => [ + 'letters' => ':attribute には少なくとも 1 文字の英字を含めてください。', + 'mixed' => ':attribute には少なくとも 1 文字の大文字と 1 文字の小文字を含めてください。', + 'numbers' => ':attribute には少なくとも 1 つの数字を含めてください。', + 'symbols' => ':attribute には少なくとも 1 つの記号を含めてください。', + 'uncompromised' => '指定された :attribute はデータ漏洩で見つかっています。別の :attribute を選択してください。', + ], + 'present' => ':attribute が存在している必要があります。', + 'present_if' => ':other が :value の場合、:attribute が存在している必要があります。', + 'present_unless' => ':other が :value でない限り、:attribute が存在している必要があります。', + 'present_with' => ':values が存在する場合、:attribute が存在している必要があります。', + 'present_with_all' => ':values がすべて存在する場合、:attribute が存在している必要があります。', + 'prohibited' => ':attribute は使用できません。', + 'prohibited_if' => ':other が :value の場合、:attribute は使用できません。', + 'prohibited_if_accepted' => ':other が承認されている場合、:attribute は使用できません。', + 'prohibited_if_declined' => ':other が拒否されている場合、:attribute は使用できません。', + 'prohibited_unless' => ':other が :values に含まれていない限り、:attribute は使用できません。', + 'prohibits' => ':attribute があると :other は使用できません。', + 'regex' => ':attribute の形式が無効です。', + 'required' => ':attribute は必須です。', + 'required_array_keys' => ':attribute には次の項目を含めてください: :values。', + 'required_if' => ':other が :value の場合、:attribute は必須です。', + 'required_if_accepted' => ':other が承認されている場合、:attribute は必須です。', + 'required_if_declined' => ':other が拒否されている場合、:attribute は必須です。', + 'required_unless' => ':other が :values に含まれていない限り、:attribute は必須です。', + 'required_with' => ':values が存在する場合、:attribute は必須です。', + 'required_with_all' => ':values がすべて存在する場合、:attribute は必須です。', + 'required_without' => ':values が存在しない場合、:attribute は必須です。', + 'required_without_all' => ':values がいずれも存在しない場合、:attribute は必須です。', + 'same' => ':attribute は :other と一致している必要があります。', + 'size' => [ + 'array' => ':attribute の項目数は :size 個にしてください。', + 'file' => ':attribute のサイズは :size キロバイトにしてください。', + 'numeric' => ':attribute は :size にしてください。', + 'string' => ':attribute は :size 文字にしてください。', + ], + 'starts_with' => ':attribute の先頭には次のいずれかを指定してください: :values。', + 'string' => ':attribute には文字列を指定してください。', + 'timezone' => ':attribute には有効なタイムゾーンを指定してください。', + 'unique' => ':attribute はすでに使用されています。', + 'uploaded' => ':attribute のアップロードに失敗しました。', + 'uppercase' => ':attribute は大文字で指定してください。', + 'url' => ':attribute には有効な URL を指定してください。', + 'ulid' => ':attribute には有効な ULID を指定してください。', + 'uuid' => ':attribute には有効な UUID を指定してください。', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/ja/workspaces.php b/lang/ja/workspaces.php new file mode 100644 index 00000000..013fbfd6 --- /dev/null +++ b/lang/ja/workspaces.php @@ -0,0 +1,50 @@ + 'ワークスペース', + 'select_title' => 'あなたのワークスペース', + 'select_description' => '続けるワークスペースを選択してください', + 'current' => '現在', + 'connections' => ':count 件の接続', + 'posts' => ':count 件の投稿', + + 'create' => [ + 'page_title' => 'ワークスペースを作成', + 'title' => 'ワークスペースを設定', + 'description' => 'あなたやプロジェクトについて少し教えてください。AI が生成する投稿をあなたのボイスに合わせるために使用します。', + 'website' => 'ウェブサイト', + 'website_placeholder' => 'https://yourbrand.com', + 'autofill' => 'ウェブサイトから自動入力', + 'autofill_missing_url' => 'まず URL を入力してください。', + 'autofill_success' => 'ブランド情報を読み込みました。', + 'autofill_error' => '自動入力できませんでした。手動でフィールドを入力できます。', + 'autofill_errors' => [ + 'unreachable' => 'そのウェブサイトに接続できませんでした(:reason)。', + 'http_status' => 'ウェブサイトが予期しないステータスを返しました(:status)。', + 'invalid_scheme' => 'http と https の URL のみサポートされています。', + 'missing_host' => 'URL にホストがありません。', + 'unresolvable_host' => 'ホストを解決できませんでした(:host)。', + 'private_network' => 'プライベートネットワークを指す URL は許可されていません。', + ], + 'logo_captured' => 'ウェブサイトからロゴを取得しました。', + 'name' => 'ワークスペース名', + 'name_placeholder' => '例: Acme Inc', + 'brand_description' => 'ブランドの説明', + 'brand_description_placeholder' => 'あなたのブランドは何をしていますか?', + 'content_language' => 'コンテンツの言語', + 'content_language_description' => 'AI が生成するキャプションはこの言語で書かれます。', + 'brand_color' => 'ブランドカラー', + 'background_color' => '背景色', + 'text_color' => 'テキストの色', + 'submit' => 'ワークスペースを作成', + 'success' => 'ワークスペースを作成しました。ソーシャルアカウントを接続して投稿を始めましょう。', + ], + + 'cannot_delete_last' => '唯一のワークスペースは削除できません。アカウントを閉じるには、お支払い設定でサブスクリプションを解約してください。', + + 'flash' => [ + 'deleted' => 'ワークスペースを正常に削除しました。', + ], +]; diff --git a/lang/ko/accounts.php b/lang/ko/accounts.php new file mode 100644 index 00000000..1534b795 --- /dev/null +++ b/lang/ko/accounts.php @@ -0,0 +1,148 @@ + '연결', + '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' => 'Facebook 페이지를 통해 Instagram을 연결하세요', + 'threads' => 'Threads 계정을 연결하세요', + 'pinterest' => 'Pinterest 계정을 연결하세요', + 'bluesky' => 'Bluesky 계정을 연결하세요', + 'mastodon' => 'Mastodon 계정을 연결하세요', + 'telegram' => 'Telegram 채널 또는 그룹을 연결하세요', + 'discord' => 'Discord 서버를 연결하세요', + ], + + 'disconnect_modal' => [ + 'title' => '계정 연결 해제', + 'description' => '이 계정의 연결을 해제하시겠습니까? 언제든지 다시 연결할 수 있습니다.', + 'confirm' => '연결 해제', + 'cancel' => '취소', + ], + + 'bluesky' => [ + 'title' => 'Bluesky 연결', + 'description' => '연결하려면 인증 정보를 입력하세요', + 'email' => '이메일', + 'email_placeholder' => 'yourhandle.bsky.social', + 'app_password' => '앱 비밀번호', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => '보안을 위해 앱 비밀번호를 사용하세요. bsky.app/settings에서 생성할 수 있습니다.', + 'submit' => 'Bluesky 연결', + 'submitting' => '연결 중...', + ], + + 'mastodon' => [ + 'title' => 'Mastodon 연결', + 'description' => 'Mastodon 인스턴스를 입력하세요', + 'instance_url' => '인스턴스 URL', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Mastodon 인스턴스 URL을 입력하세요 (예: 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' => 'Instagram 비즈니스 계정이 연결된 Facebook 페이지를 찾을 수 없습니다.', + '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' => 'Instagram 계정이 연결된 Facebook 페이지를 찾을 수 없습니다.', + 'no_youtube_channels' => 'YouTube 채널을 찾을 수 없습니다. 먼저 채널을 만드세요.', + 'not_linkedin_admin' => '관리자로 있는 LinkedIn 페이지가 없습니다.', + ], +]; diff --git a/lang/ko/analytics.php b/lang/ko/analytics.php new file mode 100644 index 00000000..946ba066 --- /dev/null +++ b/lang/ko/analytics.php @@ -0,0 +1,55 @@ + '분석을 사용할 수 있는 연결된 계정이 없습니다.', + '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' => '핀 클릭률', + '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' => '조회수', + ], +]; diff --git a/lang/ko/assets.php b/lang/ko/assets.php new file mode 100644 index 00000000..328b595e --- /dev/null +++ b/lang/ko/assets.php @@ -0,0 +1,52 @@ + '에셋', + + '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 인기 GIF', + 'search_placeholder' => 'GIF 검색...', + 'no_results' => 'GIF를 찾을 수 없습니다', + 'no_results_description' => '다른 검색어로 시도해 보세요.', + 'powered_by' => 'Powered by GIPHY', + ], +]; diff --git a/lang/ko/auth.php b/lang/ko/auth.php new file mode 100644 index 00000000..4220afec --- /dev/null +++ b/lang/ko/auth.php @@ -0,0 +1,141 @@ + '입력하신 인증 정보가 기록과 일치하지 않습니다.', + 'password' => '입력하신 비밀번호가 올바르지 않습니다.', + 'throttle' => '로그인 시도가 너무 많습니다. :seconds초 후에 다시 시도해 주세요.', + + 'flash' => [ + 'welcome' => 'TryPost에 오신 것을 환영합니다!', + 'welcome_trial' => 'TryPost에 오신 것을 환영합니다! 체험이 시작되었습니다.', + ], + + 'legal' => '계속 진행하면 서비스 약관개인정보 처리방침에 동의하는 것입니다.', + + 'slides' => [ + 'calendar' => [ + 'title' => '비주얼 캘린더', + 'description' => '직관적인 드래그 앤 드롭 캘린더로 모든 소셜 계정의 콘텐츠를 계획하고 예약하세요.', + ], + 'scheduling' => [ + 'title' => '스마트 예약', + 'description' => 'LinkedIn, X, Instagram, TikTok, YouTube 등 여러 채널의 게시물을 한 곳에서 예약하세요.', + ], + 'media' => [ + 'title' => '리치 미디어', + 'description' => '이미지, 캐러셀, 스토리, 릴스를 게시하세요. 각 플랫폼에 맞는 형식이 자동으로 적용됩니다.', + ], + 'video' => [ + 'title' => '동영상 게시', + 'description' => '동영상을 한 번 업로드하여 TikTok, YouTube Shorts, Instagram Reels, Facebook Reels에 게시하세요.', + ], + 'team' => [ + 'title' => '팀 워크스페이스', + 'description' => '팀을 초대하고 역할을 지정하며 별도의 워크스페이스에서 여러 브랜드를 관리하세요.', + ], + 'signatures' => [ + 'title' => '서명', + 'description' => '재사용 가능한 서명(해시태그, 링크, 맺음말)을 저장하고 클릭 한 번으로 게시물에 추가하세요.', + ], + ], + + 'or_continue_with' => '또는 다음으로 계속하기', + 'or_continue_with_email' => '또는 이메일로 계속하기', + 'google_login' => 'Google로 로그인', + 'google_signup' => 'Google로 가입하기', + 'github_login' => 'GitHub으로 로그인', + 'github_signup' => 'GitHub으로 가입하기', + 'github_email_unavailable' => 'GitHub에서 이메일을 가져올 수 없습니다. GitHub 이메일을 공개로 설정하거나 이메일 권한을 부여한 후 다시 시도하세요.', + + 'signup_success' => [ + 'page_title' => '환영합니다', + 'title' => '계정을 설정하는 중', + 'description' => '보통 몇 초면 완료됩니다...', + ], + + 'login' => [ + 'title' => '계정에 로그인', + 'description' => '로그인하려면 아래에 이메일과 비밀번호를 입력하세요', + 'page_title' => '로그인', + 'email' => '이메일 주소', + 'password' => '비밀번호', + 'forgot_password' => '비밀번호를 잊으셨나요?', + 'remember_me' => '로그인 상태 유지', + 'submit' => '로그인', + 'no_account' => '계정이 없으신가요?', + 'sign_up' => '가입하기', + ], + + 'register' => [ + 'title' => '모든 소셜 캘린더를 한 곳에서', + 'description' => '계정을 만들고 모든 네트워크에 게시물 예약을 시작하세요.', + 'page_title' => '회원가입', + 'signup_with_email' => '이메일로 가입하기', + 'name' => '이름', + 'name_placeholder' => '전체 이름', + 'email' => '이메일 주소', + 'password' => '비밀번호', + 'show_password' => '비밀번호 표시', + 'hide_password' => '비밀번호 숨기기', + 'submit' => '계정 만들기', + 'has_account' => '이미 계정이 있으신가요?', + 'log_in' => '로그인', + ], + + 'forgot_password' => [ + 'title' => '비밀번호 찾기', + 'description' => '비밀번호 재설정 링크를 받으려면 이메일을 입력하세요', + 'page_title' => '비밀번호 찾기', + 'email' => '이메일 주소', + 'submit' => '비밀번호 재설정 링크 이메일로 받기', + 'return_to' => '또는 다음으로 돌아가기', + 'log_in' => '로그인', + ], + + 'reset_password' => [ + 'title' => '비밀번호 재설정', + 'description' => '아래에 새 비밀번호를 입력하세요', + 'page_title' => '비밀번호 재설정', + 'email' => '이메일', + 'password' => '비밀번호', + 'confirm_password' => '비밀번호 확인', + 'confirm_placeholder' => '비밀번호 확인', + 'submit' => '비밀번호 재설정', + ], + + 'verify_email' => [ + 'title' => '이메일 인증', + 'description' => '방금 보내드린 이메일의 링크를 클릭하여 이메일 주소를 인증해 주세요.', + 'page_title' => '이메일 인증', + 'link_sent' => '가입 시 입력하신 이메일 주소로 새 인증 링크를 보냈습니다.', + 'resend' => '인증 이메일 재전송', + 'log_out' => '로그아웃', + ], + + 'accept_invite' => [ + 'page_title' => '초대 수락', + 'title' => '초대를 받으셨습니다!', + 'description' => ':workspace 워크스페이스에 참여하도록 초대받으셨습니다.', + 'workspace' => '워크스페이스', + 'your_role' => '내 역할', + 'email' => '이메일', + 'accept' => '초대 수락', + 'decline' => '초대 거절', + 'login_prompt' => '이 초대를 수락하려면 로그인하거나 계정을 만드세요.', + 'log_in' => '로그인', + 'create_account' => '계정 만들기', + ], + +]; diff --git a/lang/ko/automations.php b/lang/ko/automations.php new file mode 100644 index 00000000..ba1e31fa --- /dev/null +++ b/lang/ko/automations.php @@ -0,0 +1,411 @@ + '자동화', + 'default_name' => '새 자동화', + + 'actions' => [ + 'new' => '새 자동화', + 'edit' => '편집', + 'save' => '저장', + 'activate' => '활성화', + 'pause' => '일시정지', + 'delete' => '삭제', + 'retry' => '재시도', + 'guide' => '작동 방식 알아보기', + ], + + 'tabs' => [ + 'build' => '빌드', + 'variables' => '변수', + 'test' => '테스트', + ], + + 'nav' => [ + 'workflow' => '워크플로', + 'invocations' => '실행 기록', + 'metrics' => '지표', + 'settings' => '설정', + ], + + 'settings' => [ + 'general' => '일반', + 'general_description' => '이 자동화의 이름을 변경하세요.', + 'name_label' => '이름', + 'name_saved' => '자동화 이름이 변경되었습니다.', + 'status_title' => '상태', + 'status_description' => '활성화하여 실행을 시작하거나 일시정지하여 중지하세요.', + 'activated_at' => ':date에 활성화됨', + 'paused_at' => ':date에 일시정지됨', + 'created_at' => ':date에 생성됨', + 'danger_title' => '위험 구역', + 'danger_description' => '되돌릴 수 없는 작업입니다.', + 'delete_title' => '이 자동화 삭제', + 'delete_description' => '자동화와 실행 기록을 영구적으로 제거합니다.', + ], + + 'status_run' => [ + 'pending' => '대기 중', + 'running' => '실행 중', + 'waiting' => '기다리는 중', + 'completed' => '완료됨', + 'failed' => '실패', + 'cancelled' => '취소됨', + ], + + 'node_type' => [ + 'trigger' => '트리거', + 'generate' => '콘텐츠 생성', + 'delay' => '지연', + 'condition' => '조건', + 'publish' => '게시', + 'webhook' => '웹훅', + 'end' => '종료', + 'fetch_rss' => 'RSS 가져오기', + 'http_request' => 'HTTP 요청', + ], + + 'invocations' => [ + 'empty' => '아직 실행 기록이 없습니다.', + 'refresh' => '새로고침', + 'search_placeholder' => '실행 ID로 검색…', + 'copied' => '실행 ID가 복사되었습니다.', + 'loading' => '단계를 불러오는 중…', + 'no_steps' => '기록된 단계가 없습니다.', + 'load_error' => '단계를 불러올 수 없습니다.', + 'steps' => '{0}단계 없음|{1}:count개 단계|[2,*]:count개 단계', + 'filter' => [ + 'all' => '모든 상태', + ], + 'columns' => [ + 'timestamp' => '시각', + 'run' => '실행', + 'status' => '상태', + 'message' => '마지막 메시지', + 'duration' => '소요 시간', + ], + 'summary' => [ + 'completed' => '워크플로 완료됨', + 'failed' => '워크플로 실패', + 'running' => '워크플로 실행 중', + 'cancelled' => '워크플로 취소됨', + 'pending' => '워크플로 대기 중', + ], + ], + + 'metrics' => [ + 'overview' => '개요', + 'runs_over_time' => '시간별 실행 횟수', + 'posts_by_platform' => '플랫폼별 게시물', + 'no_posts' => '이 기간에 게시된 게시물이 없습니다.', + 'cards' => [ + 'runs' => '총 실행 횟수', + 'completed' => '완료됨', + 'failed' => '실패', + 'in_progress' => '진행 중', + 'success_rate' => '성공률', + 'avg_duration' => '평균 소요 시간', + 'posts_created' => '생성된 게시물', + ], + 'legend' => [ + 'started' => '시작됨', + 'completed' => '완료됨', + 'failed' => '실패', + ], + ], + + 'categories' => [ + 'sources' => '소스', + 'content' => '콘텐츠', + 'flow' => '흐름', + 'output' => '출력', + ], + + 'variables' => [ + 'title' => '워크플로 변수', + 'hint' => '{{ variables.KEY }}로 어디서나 참조할 수 있는 재사용 가능한 값입니다. 암호화되어 저장됩니다.', + 'empty' => '아직 변수가 없습니다.', + 'key' => '키', + 'value' => '값', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => '값', + 'add' => '새 변수', + ], + + 'expr' => [ + 'trigger_event' => '트리거 이벤트 이름', + 'trigger_fired_at' => '트리거가 발생한 시각', + 'trigger_post_id' => '트리거 게시물 ID', + 'trigger_post_content' => '트리거 게시물 내용', + 'trigger_post_status' => '트리거 게시물 상태', + 'trigger_post_scheduled_at' => '게시물 예약 시각', + 'trigger_post_published_at' => '게시물 게시 시각', + 'fetched_title' => '가져온 항목 제목', + 'fetched_link' => '가져온 항목 링크', + 'fetched_date' => '가져온 항목 게시일', + 'fetched_content' => '가져온 항목 전체 내용', + 'fetched_description' => '가져온 항목 요약', + 'fetched_author' => '가져온 항목 작성자', + 'fetched_image' => '가져온 항목 이미지 URL', + 'fetched_categories' => '가져온 항목 카테고리', + 'fetched_enclosure' => '가져온 항목 미디어 (오디오/동영상/파일)', + 'fetched_pubdate' => '가져온 항목 게시일', + 'fetched_http' => '가져온 HTTP 항목 (필드 추가)', + 'generated_content' => 'AI가 생성한 게시물 내용', + 'generated_post_url' => 'AI가 생성한 게시물 URL', + 'variable' => '워크플로 변수', + 'now' => '현재 날짜 및 시간', + ], + + 'test' => [ + 'description' => '합성된 트리거 페이로드를 사용하여 자동화를 처음부터 끝까지 실행합니다. 실제 일정이나 피드를 기다리지 않고 각 노드를 검증하는 데 유용합니다.', + 'starting' => '테스트 실행을 시작하는 중…', + 'in_progress' => '진행 중', + 'completed' => '완료됨', + 'failed' => '실패', + 'waiting' => '기다리는 중', + 'close' => '닫기', + 'no_node_runs' => '첫 번째 노드가 시작되기를 기다리는 중…', + 'node_input' => '입력', + 'node_output' => '출력', + 'node_error' => '오류', + 'no_new_items' => '새 항목 없음 — 이후 노드가 실행되지 않았습니다.', + 'error_starting' => '테스트 실행을 시작할 수 없습니다.', + 'with_real_data' => '실제 데이터로', + 'run' => '테스트 실행', + 'idle_hint' => '테스트 실행을 눌러 자동화를 처음부터 끝까지 실행하세요.', + 'real_data_hint' => '이 테스트는 게시물을 실제로 게시하고, 폴링 워터마크를 진행시키며, 외부 사이드 이펙트를 트리거합니다.', + 'dry_badge' => '드라이 런', + ], + + 'status' => [ + 'draft' => '초안', + 'active' => '활성', + 'paused' => '일시정지됨', + ], + + 'index' => [ + 'empty_title' => '아직 자동화가 없습니다', + 'empty_description' => '첫 자동화를 만들어 자동으로 게시를 시작하세요.', + 'columns' => [ + 'name' => '이름', + 'status' => '상태', + 'created' => '생성일', + ], + ], + + 'form' => [ + 'activate_error_fallback' => '자동화를 활성화할 수 없습니다.', + 'pause_error_fallback' => '자동화를 일시정지할 수 없습니다.', + 'save_error_fallback' => '자동화를 저장할 수 없습니다.', + 'save_success' => '자동화가 저장되었습니다.', + 'empty_canvas_title' => '자동화 구성 시작하기', + 'empty_canvas_description' => '시작하려면 왼쪽 패널에서 노드를 끌어다 놓으세요.', + 'name_placeholder' => '제목 없는 자동화', + ], + + 'nodes' => [ + 'trigger' => '트리거', + 'generate' => '생성', + 'delay' => '지연', + 'condition' => '조건', + 'publish' => '게시', + 'webhook' => '웹훅', + 'end' => '종료', + 'end_summary' => '여기서 자동화를 중지합니다', + 'fetch_rss' => 'RSS 가져오기', + 'http_request' => 'HTTP 요청', + 'handles' => [ + 'items' => '항목 있음', + 'no_items' => '항목 없음', + ], + ], + + 'config' => [ + 'select_placeholder' => '선택…', + 'invalid_json' => '아직 유효한 JSON이 아닙니다.', + 'expand_editor' => '편집기 확장', + 'minimize_editor' => '최소화', + + 'trigger' => [ + 'type' => '트리거 유형', + 'types' => [ + 'schedule' => '일정', + 'post_published' => '게시물이 게시될 때', + 'post_scheduled' => '게시물이 예약될 때', + ], + 'post_published_hint' => '이 워크스페이스의 게시물이 게시될 때마다 실행됩니다. 게시된 게시물은 이후 노드에서 {{ trigger.post }}로 사용할 수 있습니다.', + 'post_scheduled_hint' => '이 워크스페이스의 게시물이 예약될 때마다 실행됩니다. 예약된 게시물은 {{ trigger.post }}로 사용할 수 있습니다.', + + 'schedule' => [ + 'field' => '트리거 간격', + 'fields' => [ + 'minutes' => '분', + 'hours' => '시간', + 'days' => '일', + 'weeks' => '주', + 'months' => '개월', + ], + 'minutes_interval' => '트리거 간격 (분)', + 'hours_interval' => '트리거 간격 (시간)', + 'days_interval' => '트리거 간격 (일)', + 'hour' => '트리거 시각 (시)', + 'minute' => '트리거 시각 (분)', + 'weekdays' => '실행할 요일', + 'day_of_month' => '매월 며칠', + 'weekday_names' => [ + 'sun' => '일', + 'mon' => '월', + 'tue' => '화', + 'wed' => '수', + 'thu' => '목', + 'fri' => '금', + 'sat' => '토', + ], + 'summary' => [ + 'every_n_minutes' => '매 분마다 실행|:count분마다 실행', + 'every_n_hours' => '매시간 :minute분에 실행|:count시간마다 :minute분에 실행', + 'every_n_days' => '매일 :time에 실행|:count일마다 :time에 실행', + 'weekly' => '매주 :days :time에 실행', + 'monthly' => '매월 :day일 :time에 실행', + ], + ], + ], + 'generate' => [ + 'social_accounts' => '소셜 계정', + 'social_accounts_empty' => '연결된 소셜 계정이 없습니다. 먼저 하나를 연결하세요.', + 'target_slide_count' => '생성할 슬라이드 수', + 'prompt_template' => '프롬프트 템플릿', + 'prompt_template_hint' => '{{를 입력하여 이전 단계의 데이터를 삽입하세요.', + 'image_count' => '생성할 이미지 수', + 'image_count_hint' => '0 = 텍스트 전용 게시물 (이미지 없음). 1 = 단일 이미지. 2+ = 캐러셀.', + 'use_brand_voice' => '브랜드 보이스 사용', + 'use_brand_voice_hint' => '브랜드 설명과 보이스를 적용합니다. 서드파티 소스(뉴스, RSS)를 충실히 큐레이션하려면 끄세요.', + 'use_brand_visuals' => '브랜드 비주얼 사용', + 'use_brand_visuals_hint' => '브랜드 색상과 아이덴티티로 AI 이미지를 조정합니다. 게시물 주제만으로 중립적인 이미지를 만들려면 끄세요.', + 'style' => '스타일', + 'account_summary' => ':count개 계정 · :format|:count개 계정 · :format', + 'formats' => [ + 'single' => '단일', + 'carousel' => '캐러셀', + ], + ], + 'delay' => [ + 'duration' => '기간', + 'unit' => '단위', + 'units' => [ + 'minutes' => '분', + 'hours' => '시간', + 'days' => '일', + ], + ], + 'condition' => [ + 'field' => '필드', + 'operator' => '연산자', + 'operators' => [ + 'contains' => '포함', + 'not_contains' => '포함하지 않음', + 'equals' => '같음', + 'not_equals' => '같지 않음', + 'matches' => '일치 (정규식)', + 'greater_than' => '초과', + 'less_than' => '미만', + ], + 'value' => '값', + ], + 'publish' => [ + 'mode' => '모드', + 'modes' => [ + 'now' => '지금 게시', + 'scheduled' => '예약', + 'draft' => '초안으로 저장', + ], + 'scheduled_offset' => '트리거 기준 오프셋 (분)', + 'offset_summary' => ':mode · +:offset분', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => '메서드', + 'payload_template' => '페이로드 템플릿 (JSON)', + ], + 'end' => [ + 'reason' => '사유 (선택)', + 'reason_placeholder' => '예: 조건에 의해 필터링됨', + ], + 'fetch_rss' => [ + 'feed_url' => '피드 URL', + 'feed_url_hint' => '첫 실행 시 워터마크가 "현재"로 설정되어 과거 항목이 이후 노드로 쏟아지지 않습니다. 이후 실행에서는 이전 폴링보다 새로운 항목만 표시됩니다.', + 'inspect' => '피드 검사', + 'inspecting' => '검사 중…', + 'inspect_hint' => '샘플을 가져와 이후 노드에서 사용할 수 있는 필드를 확인하세요.', + 'inspect_error' => '이 피드를 읽을 수 없습니다. URL을 확인한 후 다시 시도하세요.', + 'discovered_fields' => '사용 가능한 필드', + 'discovered_empty' => '최신 항목에서 필드를 찾을 수 없습니다.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => '메서드', + 'auth_type' => '인증', + 'auth' => [ + 'none' => '없음 (공개)', + 'bearer' => 'Bearer 토큰', + 'basic' => 'Basic 인증', + 'api_key' => 'API 키 헤더', + ], + 'bearer_token' => 'Bearer 토큰', + 'basic_username' => '사용자 이름', + 'basic_password' => '비밀번호', + 'api_key_header' => '헤더 이름', + 'api_key_value' => 'API 키', + 'body_template' => '본문 템플릿 (JSON)', + 'headers' => '헤더', + 'header_name' => '헤더 이름', + 'header_value' => '값', + 'add_header' => '헤더 추가', + 'polling_section' => '목록 및 중복 제거 (선택)', + 'polling_hint' => '응답이 목록인 경우 각 항목이 워크플로를 개별적으로 실행합니다. 단일 객체는 한 번 실행됩니다.', + 'items_path' => '항목 경로', + 'items_path_hint' => '응답이 이미 배열이면 비워 두세요. 중첩 배열의 경우 점 표기 경로(예: data.items)를, id로 키가 지정된 객체의 경우 *를 사용하세요.', + 'item_key_path' => '항목 키 경로', + 'item_key_path_hint' => '고유 id의 JSON 경로(예: id). 이미 본 항목은 건너뛰므로 날짜가 없는 피드도 새 항목만 전달됩니다.', + 'item_date_path' => '항목 날짜 경로', + 'item_date_path_hint' => '항목 타임스탬프의 JSON 경로(예: published_at). 가능한 경우 키 경로보다 우선합니다. 첫 폴링은 기준선을 기록하고 아무것도 전달하지 않으므로 기존 피드가 첫날 쏟아지지 않습니다.', + ], + ], + + 'delete' => [ + 'title' => '자동화 삭제', + 'description' => '이 자동화를 삭제하시겠습니까? 모든 실행 및 트리거 항목도 함께 제거됩니다. 이 작업은 되돌릴 수 없습니다.', + 'confirm' => '삭제', + 'cancel' => '취소', + ], + + 'flash' => [ + 'deleted' => '자동화가 성공적으로 삭제되었습니다!', + ], + + 'errors' => [ + 'no_active_social_accounts' => '이 자동화에 구성된 활성 소셜 계정이 없습니다.', + 'must_have_one_trigger' => '자동화에는 정확히 하나의 트리거 노드가 있어야 합니다.', + 'trigger_must_be_connected' => '트리거 노드는 최소 하나의 노드에 연결되어야 합니다.', + 'graph_contains_cycle' => '자동화 그래프에 순환이 포함되어 있습니다.', + 'only_failed_can_retry' => '실패한 실행만 재시도할 수 있습니다.', + 'no_generated_post' => '실행에서 생성된 게시물을 찾을 수 없습니다.', + 'webhook_server_error' => '웹훅 서버 오류.', + 'webhook_request_failed' => '웹훅 요청을 완료할 수 없습니다.', + 'webhook_missing_url' => '웹훅 노드에 URL이 없습니다.', + 'webhook_invalid_payload_json' => '페이로드 템플릿이 유효한 JSON이 아닙니다.', + 'url_not_allowed' => '요청 URL이 비공개이거나 접근할 수 없는 주소를 가리켜 차단되었습니다.', + 'node_no_longer_exists' => '노드 :node_id이(가) 자동화에 더 이상 존재하지 않습니다.', + 'no_trigger_connection' => '트리거 노드에 연결된 노드가 없습니다.', + 'fetch_rss_missing_url' => 'RSS 가져오기 노드에 피드 URL이 없습니다.', + 'fetch_rss_request_failed' => 'RSS 피드 요청이 실패했습니다.', + 'fetch_rss_malformed' => 'RSS 피드 형식이 잘못되었습니다.', + 'http_missing_url' => 'HTTP 요청 노드에 URL이 없습니다.', + 'http_request_exception' => 'HTTP 요청에서 예외가 발생했습니다.', + 'http_request_failed' => 'HTTP 요청이 실패했습니다.', + 'http_items_path_not_array' => '항목 경로가 목록으로 해석되지 않았습니다.', + ], +]; diff --git a/lang/ko/billing.php b/lang/ko/billing.php new file mode 100644 index 00000000..43b33b21 --- /dev/null +++ b/lang/ko/billing.php @@ -0,0 +1,76 @@ + '결제', + + 'past_due_notice' => [ + 'title' => '결제 연체', + 'description' => '구독을 활성 상태로 유지하려면 결제 수단을 업데이트하세요.', + 'cta' => '결제 수단 업데이트', + ], + + 'annual_banner' => [ + 'title' => '2개월 무료 받기', + 'description' => '연간 결제로 전환하고 매달 더 적게 지불하세요 — 같은 요금제, 그 외에는 아무것도 바뀌지 않습니다.', + 'cta' => '연간 결제로 업그레이드', + ], + + 'subscribe' => [ + 'billed_monthly' => '월간 결제', + 'billed_yearly' => '연간 결제', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => '요금제', + 'description' => '구독 요금제를 관리하세요.', + 'label' => '요금제', + 'workspaces' => '{1}:count개 워크스페이스|[2,*]:count개 워크스페이스', + 'per_workspace' => '워크스페이스당', + 'price' => '가격', + 'month' => '월', + 'trial' => '체험', + 'active' => '활성', + 'past_due' => '연체', + 'cancelling' => '취소 중', + 'trial_ends' => '체험 종료', + ], + + 'subscription' => [ + 'title' => '구독', + 'description' => '결제 수단, 청구 정보, 구독을 관리하세요.', + 'payment_method' => '결제 수단', + 'no_payment_method' => '아직 등록된 결제 수단이 없습니다.', + 'expires_on' => ':month/:year 만료', + 'manage_label' => '구독', + 'manage_stripe' => 'Stripe에서 관리', + ], + + 'invoices' => [ + 'title' => '청구서', + 'description' => '지난 청구서를 다운로드하세요.', + 'empty' => '청구서를 찾을 수 없습니다', + 'paid' => '결제 완료', + ], + + 'flash' => [ + 'plan_changed' => '이제 :plan 요금제를 사용 중입니다.', + 'switched_to_yearly' => '이제 연간 결제를 사용 중입니다.', + 'cannot_manage' => '계정 소유자만 결제를 관리할 수 있습니다.', + 'credits_exhausted' => 'AI 크레딧 소진 — 월 :limit 한도를 모두 사용했습니다. 요금제를 업그레이드하거나 다음 달까지 기다려 주세요.', + 'subscription_required' => 'AI 기능을 사용하려면 활성 구독이 필요합니다.', + ], + + 'processing' => [ + 'page_title' => '처리 중...', + 'title' => '구독을 처리하는 중', + 'description' => '계정을 설정하는 동안 잠시 기다려 주세요. 잠깐이면 됩니다.', + 'success_title' => '모든 준비가 끝났습니다!', + 'success_description' => '구독이 활성화되었습니다. 워크스페이스로 이동하는 중...', + 'cancelled_title' => '결제 취소됨', + 'cancelled_description' => '결제가 취소되었습니다. 요금이 청구되지 않았습니다.', + 'retry' => '다시 시도', + ], +]; diff --git a/lang/ko/brands.php b/lang/ko/brands.php new file mode 100644 index 00000000..e95e7b4c --- /dev/null +++ b/lang/ko/brands.php @@ -0,0 +1,39 @@ + '새 브랜드', + 'no_brands_yet' => '아직 브랜드가 없습니다', + 'no_brands_description' => '브랜드를 만들어 클라이언트나 프로젝트별로 소셜 계정을 정리하세요', + 'accounts_count' => ':count개 계정', + + 'create' => [ + 'title' => '브랜드 만들기', + 'description' => '소셜 계정을 그룹화할 브랜드에 이름을 지정하세요', + 'name' => '브랜드 이름', + 'name_placeholder' => '예: Acme Corp, 개인', + 'submit' => '브랜드 만들기', + 'submitting' => '생성 중...', + ], + + 'edit' => [ + 'title' => '브랜드 편집', + 'description' => '이 브랜드의 이름을 업데이트하세요', + 'name' => '브랜드 이름', + 'name_placeholder' => '예: Acme Corp, 개인', + 'submit' => '변경사항 저장', + 'submitting' => '저장 중...', + ], + + 'delete' => [ + 'title' => '브랜드 삭제', + 'description' => '이 브랜드를 삭제하시겠습니까? 소셜 계정은 할당이 해제되지만 삭제되지는 않습니다.', + 'confirm' => '삭제', + 'cancel' => '취소', + ], + + 'flash' => [ + 'created' => '브랜드가 성공적으로 생성되었습니다!', + 'updated' => '브랜드가 성공적으로 업데이트되었습니다!', + 'deleted' => '브랜드가 성공적으로 삭제되었습니다!', + ], +]; diff --git a/lang/ko/calendar.php b/lang/ko/calendar.php new file mode 100644 index 00000000..bb9000c9 --- /dev/null +++ b/lang/ko/calendar.php @@ -0,0 +1,12 @@ + '캘린더', + 'today' => '오늘', + 'day' => '일', + 'week' => '주', + 'month' => '월', + 'new_post' => '새 게시물', + 'no_content' => '내용 없음', + 'more' => '+:count개 더보기', +]; diff --git a/lang/ko/comments.php b/lang/ko/comments.php new file mode 100644 index 00000000..2744cf85 --- /dev/null +++ b/lang/ko/comments.php @@ -0,0 +1,18 @@ + '댓글을 작성하세요...', + 'reply_placeholder' => '답글을 작성하세요...', + 'reply' => '답글', + 'edit' => '편집', + 'delete' => '삭제', + 'edited' => '수정됨', + 'save' => '저장', + 'cancel' => '취소', + 'send' => '보내기', + 'replying_to' => ':name님에게 답글 작성 중', + 'empty' => '아직 댓글이 없습니다. 대화를 시작하세요.', + 'load_more' => '이전 댓글 불러오기', + 'today' => '오늘', + 'yesterday' => '어제', +]; diff --git a/lang/ko/common.php b/lang/ko/common.php new file mode 100644 index 00000000..19c6d187 --- /dev/null +++ b/lang/ko/common.php @@ -0,0 +1,59 @@ + '뒤로', + + 'confirm_modal' => [ + 'cannot_be_undone' => '이 작업은 되돌릴 수 없습니다.', + 'type' => '입력', + 'to_confirm' => '하여 확인하세요.', + 'copy_to_clipboard' => '클립보드에 복사', + 'delete_keyword' => '삭제', + ], + + 'photo_upload' => [ + 'upload' => '업로드', + 'uploading' => '업로드 중...', + 'remove' => '사진 제거', + 'hint' => '권장: 정사각형 이미지, 최대 2MB.', + ], + + 'timezone' => [ + 'select' => '시간대 선택', + 'search' => '시간대 검색...', + 'empty' => '시간대를 찾을 수 없습니다', + ], + + 'date_picker' => [ + 'select' => '날짜 선택', + ], + + 'date_range_picker' => [ + 'placeholder' => '날짜 범위 선택', + 'today' => '오늘', + 'yesterday' => '어제', + 'last_7_days' => '지난 7일', + 'last_30_days' => '지난 30일', + 'last_3_months' => '지난 3개월', + 'last_6_months' => '지난 6개월', + 'last_12_months' => '지난 12개월', + 'this_month' => '이번 달', + 'last_month' => '지난달', + 'year_to_date' => '올해 누적', + 'last_year' => '작년', + ], + + 'cancel' => '취소', + 'clear' => '지우기', + 'close' => '닫기', + 'loading_more' => '더 불러오는 중...', + + 'actions' => [ + 'copy' => '복사', + 'copied' => '복사됨', + 'copy_failed' => '클립보드에 복사하지 못했습니다', + ], +]; diff --git a/lang/ko/labels.php b/lang/ko/labels.php new file mode 100644 index 00000000..da279ef2 --- /dev/null +++ b/lang/ko/labels.php @@ -0,0 +1,54 @@ + '라벨', + 'description' => '라벨을 만들어 게시물을 정리하고 분류하세요', + 'search' => '라벨 검색...', + 'new_label' => '새 라벨', + 'no_labels_yet' => '아직 라벨이 없습니다', + 'no_search_results' => '검색과 일치하는 라벨이 없습니다', + 'try_different_search' => '다른 키워드로 시도하거나 검색을 지우세요.', + 'create_first_label' => '첫 라벨 만들기', + 'table' => [ + 'name' => '이름', + 'created_at' => '생성일', + ], + + 'actions' => [ + 'edit' => '라벨 편집', + 'delete' => '라벨 삭제', + ], + + 'create' => [ + 'title' => '라벨 만들기', + 'description' => '라벨에 이름을 지정하고 색상을 선택하세요', + 'name' => '이름', + 'name_placeholder' => '라벨 이름을 입력하세요...', + 'color' => '색상', + 'submit' => '라벨 만들기', + 'submitting' => '생성 중...', + ], + + 'edit' => [ + 'title' => '라벨 편집', + 'description' => '이 라벨의 이름과 색상을 업데이트하세요', + 'name' => '이름', + 'name_placeholder' => '라벨 이름을 입력하세요...', + 'color' => '색상', + 'submit' => '변경사항 저장', + 'submitting' => '저장 중...', + ], + + 'delete' => [ + 'title' => '라벨 삭제', + 'description' => '이 라벨을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.', + 'confirm' => '삭제', + 'cancel' => '취소', + ], + + 'flash' => [ + 'created' => '라벨이 성공적으로 생성되었습니다!', + 'updated' => '라벨이 성공적으로 업데이트되었습니다!', + 'deleted' => '라벨이 성공적으로 삭제되었습니다!', + ], +]; diff --git a/lang/ko/mail.php b/lang/ko/mail.php new file mode 100644 index 00000000..e3b95a08 --- /dev/null +++ b/lang/ko/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => ':name님이 TryPost에서 회원님을 멘션했습니다', + 'title' => ':name님이 회원님을 멘션했습니다', + 'intro' => ':name님이 게시물 댓글에서 회원님을 멘션했습니다.', + 'cta' => '댓글 보기', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :workspace에서 :count개 계정을 재연결해야 합니다|[2,*] :workspace에서 :count개 계정을 재연결해야 합니다', + 'title' => '계정 재연결 필요', + 'intro' => ':workspace 워크스페이스의 다음 소셜 계정이 연결 해제되어 재연결이 필요합니다:', + 'reasons_title' => '다음과 같은 이유로 발생했을 수 있습니다:', + 'reason_expired' => '액세스 토큰 만료', + 'reason_revoked' => '플랫폼에서 TryPost에 대한 액세스를 취소함', + 'reason_changed' => '플랫폼이 인증 요구사항을 변경함', + 'reconnect_cta' => '게시물 예약 및 게시를 계속하려면 이 계정들을 재연결해 주세요.', + 'button' => '계정 재연결', + ], +]; diff --git a/lang/ko/notifications.php b/lang/ko/notifications.php new file mode 100644 index 00000000..a7534682 --- /dev/null +++ b/lang/ko/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => '게시물이 준비되었습니다', + 'body' => 'AI 작업이 방금 완료되었습니다. 탭하여 검토하고 게시하세요.', + ], + 'account_disconnected' => [ + 'title' => ':platform 계정 연결 해제됨', + 'body' => ':account을(를) 재연결해야 합니다', + ], + 'account_token_expired' => [ + 'title' => ':platform 계정을 재연결해야 합니다', + 'body' => ':account 세션이 만료되었습니다 — 계속 게시하려면 재연결하세요', + ], +]; diff --git a/lang/ko/onboarding.php b/lang/ko/onboarding.php new file mode 100644 index 00000000..0fa817ae --- /dev/null +++ b/lang/ko/onboarding.php @@ -0,0 +1,41 @@ + 'TryPost에 오신 것을 환영합니다', + 'description' => '회원님이나 비즈니스를 가장 잘 설명하는 항목을 알려주시면 맞춤형 경험을 제공해 드립니다.', + 'continue' => '계속', + 'personas' => [ + 'creator' => '콘텐츠 크리에이터', + 'freelancer' => '프리랜서', + 'developer' => '개발자', + 'startup' => '스타트업', + 'agency' => '에이전시', + 'small_business' => '소상공인', + 'marketer' => '마케터', + 'online_store' => '온라인 스토어', + 'other' => '기타', + ], + 'goals_title' => 'TryPost로 이루려는 목표는 무엇인가요?', + 'goals_description' => '해당되는 항목을 모두 선택하면 TryPost를 맞춤 설정해 드립니다.', + 'goals' => [ + 'save_time' => '한 번에 여러 곳에 게시하여 시간 절약', + 'ai_content' => 'AI로 더 빠르게 게시물 작성', + 'plan_calendar' => '캘린더에서 게시물 계획', + 'stay_on_brand' => '모든 게시물을 브랜드에 맞게 유지', + 'grow_audience' => '팔로워와 참여 늘리기', + 'drive_sales' => '더 많은 트래픽과 판매 유도', + 'manage_clients' => '여러 브랜드 또는 클라이언트 관리', + 'team_collaboration' => '팀과 협업', + 'automate_api' => 'API, MCP 또는 코드로 게시 자동화', + 'track_performance' => '게시물 성과 확인', + 'just_exploring' => '지금은 둘러보는 중', + 'other' => '다른 것', + ], + 'connect' => [ + 'title' => '첫 네트워크 연결', + 'description' => '예약을 시작하려면 소셜 계정을 하나 이상 연결하세요. 언제든지 추가할 수 있습니다.', + 'must_connect' => '계속하려면 네트워크를 하나 이상 연결하세요.', + ], +]; diff --git a/lang/ko/pagination.php b/lang/ko/pagination.php new file mode 100644 index 00000000..6c070773 --- /dev/null +++ b/lang/ko/pagination.php @@ -0,0 +1,19 @@ + '« 이전', + 'next' => '다음 »', + +]; diff --git a/lang/ko/passwords.php b/lang/ko/passwords.php new file mode 100644 index 00000000..2f927e3f --- /dev/null +++ b/lang/ko/passwords.php @@ -0,0 +1,22 @@ + '비밀번호가 재설정되었습니다.', + 'sent' => '비밀번호 재설정 링크를 이메일로 보냈습니다.', + 'throttled' => '다시 시도하기 전에 잠시 기다려 주세요.', + 'token' => '이 비밀번호 재설정 토큰이 유효하지 않습니다.', + 'user' => '해당 이메일 주소를 가진 사용자를 찾을 수 없습니다.', + +]; diff --git a/lang/ko/posts.php b/lang/ko/posts.php new file mode 100644 index 00000000..44fdd030 --- /dev/null +++ b/lang/ko/posts.php @@ -0,0 +1,671 @@ + '게시물', + 'search' => '게시물 검색...', + 'all_posts' => '모든 게시물', + 'new_post' => '새 게시물', + 'no_posts' => '게시물을 찾을 수 없습니다', + 'no_search_results' => '검색과 일치하는 게시물이 없습니다', + 'try_different_search' => '다른 키워드로 시도하거나 검색을 지우세요.', + 'start_creating' => '첫 게시물을 만들어 시작하세요.', + 'filter_by_label' => '라벨로 필터', + 'label_search_placeholder' => '라벨 검색...', + 'no_labels' => '라벨을 찾을 수 없습니다.', + 'clear_label_filter' => '라벨 필터 지우기', + 'table' => [ + 'post' => '게시물', + 'status' => '상태', + 'content' => '내용', + 'platforms' => '플랫폼', + 'labels' => '라벨', + 'scheduled_at' => '날짜', + 'actions' => '', + ], + 'manage_posts' => '모든 게시물 관리', + 'delete_confirm' => '이 게시물을 삭제하시겠습니까?', + 'by' => '작성자', + + 'actions' => [ + 'view' => '게시물 보기', + 'delete' => '삭제', + 'duplicate' => '복제', + 'copy_id' => 'ID 복사', + 'copied' => 'ID가 클립보드에 복사되었습니다', + ], + + 'form' => [ + 'post_type' => '게시물 유형', + 'board' => '보드', + 'select_board' => '보드 선택', + 'search_board' => '보드 검색...', + 'no_board_found' => '보드를 찾을 수 없습니다', + 'media' => '미디어', + 'min' => '최소', + 'uploading' => '업로드 중...', + 'drop_to_upload' => '놓아서 업로드', + 'drag_and_drop' => '끌어다 놓거나 클릭하여 업로드', + 'photos_and_videos' => '사진 및 동영상', + 'photos_only' => '사진만', + 'videos_only' => '동영상만', + 'drag_to_reorder' => '드래그하여 순서 변경', + 'caption' => '캡션', + 'write_caption' => '캡션을 작성하세요...', + 'content_exceeds_platform' => ':platform: :over자 초과 (최대 :limit자).', + 'tiktok' => [ + 'settings' => 'TikTok 설정', + 'variant_label' => '게시물 유형', + 'variant' => [ + 'video' => '동영상', + 'photo' => '사진 캐러셀', + ], + 'posting_to' => '게시 대상', + 'privacy_level' => '이 동영상을 볼 수 있는 사람은?', + 'privacy_placeholder' => '이 게시물을 볼 수 있는 사람을 선택하세요', + 'privacy' => [ + 'public' => '전체 공개', + 'friends' => '맞팔로우 친구', + 'followers' => '팔로워', + 'private' => '나만 보기', + 'private_disabled_branded' => '브랜디드 콘텐츠는 공개 범위를 나만 보기로 설정할 수 없습니다.', + ], + 'privacy_hint' => '사용 가능한 옵션은 TikTok 계정 설정에 따라 다릅니다.', + 'auto_add_music' => '음악 자동 추가', + 'auto_add_music_hint' => '이 기능은 사진에만 사용할 수 있습니다. 나중에 변경할 수 있는 기본 음악이 추가됩니다.', + 'yes' => '예', + 'no' => '아니요', + 'allow_users' => '사용자에게 다음을 허용:', + 'comments' => '댓글', + 'duet' => '듀엣', + 'stitch' => '스티치', + 'is_aigc' => 'AI로 제작한 동영상', + 'disclose' => '동영상 콘텐츠 공개', + 'disclose_hint' => '이 동영상이 대가를 받고 상품이나 서비스를 홍보함을 공개하려면 켜세요. 동영상은 본인, 서드파티 또는 둘 다를 홍보할 수 있습니다.', + 'promotional_organic_title' => '사진/동영상에 "홍보 콘텐츠" 라벨이 표시됩니다.', + 'promotional_paid_title' => '사진/동영상에 "유료 파트너십" 라벨이 표시됩니다.', + 'promotional_description' => '동영상을 게시한 후에는 변경할 수 없습니다.', + 'compliance_incomplete' => '콘텐츠가 본인, 서드파티 또는 둘 다를 홍보하는지 표시해야 합니다.', + 'privacy_required' => '게시할 때 TikTok 공개 범위는 필수입니다.', + 'branded_cleared_private' => '브랜디드 콘텐츠는 나만 보기로 설정할 수 없으므로 공개 범위가 초기화되었습니다.', + 'interaction_disabled_by_creator' => 'TikTok 계정 설정에서 꺼져 있음', + 'max_duration_exceeded' => '동영상 길이가 :duration초이지만 이 계정은 최대 :max초까지만 게시할 수 있습니다.', + 'processing_hint' => '게시 후 콘텐츠가 처리되어 TikTok 프로필에 표시되기까지 몇 분이 걸릴 수 있습니다.', + 'brand_organic' => '내 브랜드', + 'brand_organic_hint' => '본인 또는 본인의 브랜드를 홍보하는 경우입니다. 이 동영상은 브랜드 오가닉으로 분류됩니다.', + 'brand_content' => '브랜디드 콘텐츠', + 'brand_content_hint' => '다른 브랜드나 서드파티를 홍보하는 경우입니다. 이 동영상은 브랜디드 콘텐츠로 분류됩니다.', + 'compliance' => [ + 'agree' => '게시하면 TikTok의 다음 정책에 동의하게 됩니다:', + 'music_usage' => '음악 사용 확인', + 'and' => '및', + 'branded_policy' => '브랜디드 콘텐츠 정책', + ], + ], + 'instagram' => [ + 'settings' => 'Instagram 설정', + 'posting_to' => '게시 대상', + 'variant_label' => '게시물 유형', + 'variant' => [ + 'feed' => '피드 게시물', + 'reel' => '릴스', + 'story' => '스토리', + ], + 'aspect_label' => '가로세로 비율', + 'aspect' => [ + 'square' => '정사각형 (1:1)', + 'portrait' => '세로 (4:5)', + 'landscape' => '가로 (16:9)', + 'original' => '원본', + ], + ], + 'facebook' => [ + 'settings' => 'Facebook 설정', + 'posting_to' => '게시 대상', + 'variant_label' => '게시물 유형', + 'variant' => [ + 'post' => '게시물', + 'reel' => '릴스', + 'story' => '스토리', + ], + 'aspect_label' => '가로세로 비율', + 'aspect' => [ + 'square' => '정사각형 (1:1)', + 'portrait' => '세로 (4:5)', + 'landscape' => '가로 (16:9)', + 'original' => '원본', + ], + ], + 'linkedin' => [ + 'settings' => 'LinkedIn 설정', + 'settings_page' => 'LinkedIn 페이지 설정', + 'posting_to' => '게시 대상', + 'document_title' => '문서 제목', + 'document_title_placeholder' => 'PDF 문서 게시물에 표시됩니다', + ], + 'pinterest' => [ + 'settings' => 'Pinterest 설정', + 'posting_to' => '게시 대상', + 'variant_label' => '핀 유형', + 'variant' => [ + 'pin' => '핀', + 'video_pin' => '동영상 핀', + 'carousel' => '캐러셀', + ], + 'board' => '보드', + 'select_board' => '보드 선택', + 'no_boards' => 'Pinterest 보드를 찾을 수 없습니다. 먼저 Pinterest 계정에서 보드를 만드세요.', + 'search_board' => '보드 검색...', + 'no_board_found' => '검색과 일치하는 보드가 없습니다.', + 'board_required' => '이 게시물을 게시할 Pinterest 보드를 선택하세요.', + ], + 'discord' => [ + 'settings' => 'Discord 설정', + 'posting_to' => '게시 대상', + 'channel' => '채널', + 'select_channel' => '채널 선택', + 'loading_channels' => '채널을 불러오는 중…', + 'search_channel' => '채널 검색…', + 'no_channels' => '채널을 찾을 수 없습니다.', + 'channel_required' => '이 게시물을 게시할 Discord 채널을 선택하세요.', + 'mentions' => '멘션', + 'search_mention' => '역할 또는 멤버 멘션…', + 'embeds' => '임베드', + 'embed' => '임베드', + 'add_embed' => '임베드 추가', + 'embed_title' => '임베드 제목', + 'embed_description' => '임베드 설명', + 'embed_url' => '임베드 URL', + 'embed_image' => '이미지 URL', + 'embed_color' => '색상', + ], + 'warnings' => [ + 'no_variant' => '계속하려면 게시물 유형을 선택하세요.', + 'requires_media' => '이 게시물 유형에는 이미지 또는 동영상이 하나 이상 필요합니다.', + 'max_files_exceeded' => '이 게시물 유형은 최대 :max개의 미디어 파일을 허용합니다 (현재 :current개).', + 'min_files_required' => '이 게시물 유형에는 최소 :min개의 미디어 파일이 필요합니다 (현재 :current개).', + 'no_video_allowed' => '이 게시물 유형은 동영상을 허용하지 않습니다.', + 'no_image_allowed' => '이 게시물 유형은 동영상만 허용합니다.', + 'no_document_allowed' => '이 게시물 유형은 PDF 문서를 허용하지 않습니다.', + 'no_mixed_media' => '이미지와 동영상은 같은 게시물에 함께 넣을 수 없습니다.', + 'document_not_alone' => 'PDF는 다른 이미지나 동영상 없이 단독으로 게시해야 합니다.', + 'gif_not_allowed' => '이 플랫폼은 GIF를 허용하지 않습니다. GIF를 제거하거나 다른 네트워크를 선택하세요.', + 'image_too_large' => '이미지가 이 게시물 유형의 :max 한도를 초과합니다 (현재 :current).', + 'video_too_large' => '동영상이 이 게시물 유형의 :max 한도를 초과합니다 (현재 :current).', + 'document_too_large' => 'PDF가 이 게시물 유형의 :max 한도를 초과합니다 (현재 :current).', + 'video_too_long' => '동영상 길이가 :current이지만 이 게시물 유형은 최대 :max까지 허용합니다.', + 'aspect_ratio_too_narrow' => '가로세로 비율 :current이(가) 이 게시물 유형에는 너무 세로로 깁니다 (최소 :min).', + 'aspect_ratio_too_wide' => '가로세로 비율 :current이(가) 이 게시물 유형에는 너무 가로로 넓습니다 (최대 :max).', + ], + ], + + 'status' => [ + 'pending' => '대기 중', + 'draft' => '초안', + 'scheduled' => '예약됨', + 'publishing' => '게시 중', + 'retrying' => '재시도 중', + 'published' => '게시됨', + 'partially_published' => '부분 게시됨', + 'failed' => '실패', + ], + + 'descriptions' => [ + 'draft' => '예약 대기 중인 게시물', + 'scheduled' => '게시 예약된 게시물', + 'published' => '이미 게시된 게시물', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'AI로 생성', + 'title' => 'AI로 게시물 생성', + 'description' => '게시물의 내용을 설명하세요. AI가 브랜드 컨텍스트를 사용하여 작성합니다.', + 'prompt_label' => '이 게시물은 무엇에 관한 것인가요?', + 'prompt_placeholder' => '예: 캐러셀용 새 이미지 생성 기능 발표', + 'preview_label' => '미리보기', + 'start' => '생성', + 'apply' => '이 콘텐츠 사용', + 'retry' => '다시 시도', + 'cancel' => '취소', + ], + 'review' => [ + 'button_tooltip' => 'AI로 검토', + 'title' => 'AI로 게시물 검토', + 'description' => 'AI가 문법, 맞춤법, 명확성을 검사합니다. 동의하는 제안을 적용하세요.', + 'loading' => '텍스트를 검토하는 중...', + 'no_issues' => '문제가 없습니다. 좋아 보입니다.', + 'original' => '원본', + 'suggestion' => '제안', + 'apply' => '적용', + 'apply_all' => '모두 적용', + 'applied' => '적용됨', + 'cancel' => '취소', + ], + 'image_regenerate' => [ + 'button' => '조정', + 'title' => 'AI 이미지 조정', + 'description' => '수정 사항을 설명하세요. 새 이미지가 현재 이미지를 대체하고 캐러셀 내 위치를 유지합니다.', + 'instruction_label' => '지시사항', + 'instruction_placeholder' => '예: 헤드라인의 오타를 수정하고 배경을 더 밝게 해주세요.', + 'processing' => '이미지를 재생성하는 중... 몇 초 정도 걸릴 수 있습니다.', + 'submit' => '이미지 재생성', + 'cancel' => '취소', + 'success' => '이미지가 업데이트되었습니다. 새 버전이 게시물의 이전 이미지를 대체했습니다.', + 'fallback_title' => '이 이미지 문구 개선', + 'errors' => [ + 'required' => '지시사항은 필수입니다.', + 'start_failed' => '재생성을 시작하지 못했습니다.', + 'unavailable' => '지금은 이 이미지를 재생성할 수 없습니다.', + 'timeout' => '재생성이 예상보다 오래 걸리고 있습니다. 잠시 후 다시 시도하세요.', + 'media_not_found' => '미디어 항목을 찾을 수 없습니다.', + 'not_ai_media' => 'AI가 생성한 미디어만 재생성할 수 있습니다.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => '이미지 게시물', + 'description' => '헤드라인과 캡션이 있는 AI 이미지.', + ], + 'carousel' => [ + 'name' => '캐러셀', + 'description' => '캡션이 있는 다중 슬라이드 캐러셀.', + ], + 'tweet_card' => [ + 'name' => '트윗 카드', + 'description' => 'X/Twitter 게시물 스타일의 게시물.', + ], + 'tweet_card_image' => [ + 'name' => '사진이 있는 트윗 카드', + 'description' => '흐릿한 사진 위에 X/Twitter 카드로 표시된 게시물.', + ], + ], + ], + + 'show' => [ + 'title' => '게시물 세부정보', + 'edit' => '편집', + 'back' => '뒤로', + 'no_content' => '캡션 없음', + 'platforms' => '플랫폼', + 'no_platforms' => '선택된 플랫폼이 없습니다.', + 'view_on_platform' => '플랫폼에서 보기', + 'published_on' => ':date에 게시됨', + 'scheduled_for' => ':date로 예약됨', + 'draft' => '초안', + 'status_pending' => '대기 중', + 'metrics' => '지표', + 'metrics_loading' => '지표를 불러오는 중…', + 'metrics_unavailable' => '아직 이 플랫폼의 지표를 사용할 수 없습니다.', + 'metrics_empty' => '반환된 지표가 없습니다.', + ], + + 'edit' => [ + 'title' => '게시물 편집', + 'view_title' => '게시물 보기', + 'labels' => '라벨', + 'no_labels' => '아직 만든 라벨이 없습니다', + 'schedule' => '예약', + 'pick_time' => '시간 선택', + 'pick_time_past' => '미래의 날짜와 시간을 선택하세요.', + 'post_now' => '지금 게시', + 'time' => '시간', + 'cancel' => '취소', + 'delete' => '삭제', + 'schedule_for' => '예약 대상', + 'schedule_date' => '예약 날짜', + 'unschedule' => '예약 취소', + 'saving' => '저장 중...', + 'saved' => '저장됨', + 'draft' => '초안', + 'media' => '미디어', + 'add_media' => '미디어 추가', + 'caption' => '캡션', + 'caption_placeholder' => '캡션을 작성하세요...', + 'compose_title' => '게시물 만들기', + 'compose_subtitle' => '메시지를 작성하고 미디어를 추가하세요', + 'preview_empty' => [ + 'title' => '선택된 플랫폼이 없습니다', + 'description' => '미리보기를 보려면 게시할 플랫폼을 선택하세요.', + ], + 'drop_zone_title' => '미디어 추가', + 'drop_zone_subtitle' => '파일을 끌어다 놓거나 클릭하여 찾아보기', + 'add' => '추가', + 'publish_to' => '게시 대상', + 'organize' => '정리', + 'signatures' => '서명', + 'view_on_platform' => '플랫폼에서 보기', + 'platform_status' => '플랫폼 상태', + 'compliance_incomplete' => '일부 플랫폼 설정이 불완전하거나 첨부된 미디어와 호환되지 않습니다.', + 'compliance' => [ + 'requires_content_or_media' => '게시하려면 텍스트나 미디어를 추가하세요.', + 'requires_media' => '여기에 게시하려면 이미지나 동영상을 추가하세요.', + 'too_many_files' => '이 형식은 최대 :max개의 파일만 허용됩니다.', + 'too_few_files' => '이 형식에는 최소 :min개의 파일을 추가하세요.', + 'no_videos' => '이 형식은 이미지만 허용됩니다.', + 'no_images' => '이 형식은 동영상만 허용됩니다.', + 'no_mixed_media' => '이미지와 동영상은 같은 게시물에 함께 넣을 수 없습니다.', + 'no_gifs' => '여기에서는 GIF가 지원되지 않습니다.', + 'no_documents' => '이 형식은 PDF 문서를 지원하지 않습니다.', + 'document_not_alone' => 'PDF는 다른 이미지나 동영상 없이 단독으로 게시해야 합니다.', + 'video_too_large' => '동영상이 이 플랫폼의 크기 한도를 초과합니다.', + 'video_too_long' => '이 형식은 동영상이 :seconds초 미만이어야 합니다.', + 'image_too_large' => '이미지가 이 플랫폼의 크기 한도를 초과합니다.', + 'document_too_large' => 'PDF가 이 플랫폼의 크기 한도를 초과합니다.', + 'aspect_ratio_invalid' => '이 형식은 해당 가로세로 비율을 지원하지 않습니다.', + 'no_content_type' => '이 플랫폼의 콘텐츠 유형을 선택하세요.', + 'requires_text' => '텍스트를 추가하세요 — 이 형식에는 제목이 필요합니다.', + ], + 'publishing' => '게시 중...', + 'publishing_overlay_title' => '게시물을 게시하는 중', + 'publishing_overlay_subtitle' => '몇 분 정도 걸릴 수 있습니다. 이 페이지를 나가도 괜찮습니다.', + 'scheduled_overlay_title' => '이 게시물은 예약되었습니다', + 'scheduled_overlay_subtitle' => ':date로 예약됨. 변경하려면 먼저 예약을 취소하세요.', + 'unschedule_cta' => '편집하려면 예약 취소', + + 'tabs' => [ + 'preview' => '미리보기', + 'channels' => '채널', + 'comments' => '댓글', + 'comments_empty' => '아직 댓글이 없습니다.', + ], + + 'media_picker' => [ + 'title' => '갤러리에서 선택', + 'search' => '미디어 검색...', + 'empty' => '아직 갤러리에 미디어가 없습니다', + 'cancel' => '취소', + 'add' => '추가', + 'add_count' => ':count개 추가', + ], + + 'emoji_picker' => [ + 'search' => '이모지 검색', + 'empty' => '이모지를 찾을 수 없습니다', + 'recent' => '자주 사용함', + 'smileys' => '스마일리 및 감정', + 'people' => '사람 및 신체', + 'nature' => '동물 및 자연', + 'food' => '음식 및 음료', + 'activities' => '활동', + 'travel' => '여행 및 장소', + 'objects' => '사물', + 'symbols' => '기호', + 'flags' => '깃발', + ], + + 'status' => [ + 'pending' => '대기 중', + 'scheduled' => '예약됨', + 'published' => '게시됨', + 'publishing' => '게시 중...', + 'retrying' => '재시도 중...', + 'failed' => '실패', + ], + + 'delete_modal' => [ + 'title' => '게시물 삭제', + 'description' => '이 게시물을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.', + 'action' => '삭제', + 'cancel' => '취소', + ], + + 'sync_enable' => [ + 'title' => '동기화를 활성화하시겠어요?', + 'description' => '모든 플랫폼이 동일한 콘텐츠를 공유합니다. 개별 플랫폼에 적용한 맞춤 편집은 현재 콘텐츠로 대체됩니다.', + 'cancel' => '취소', + 'action' => '동기화 활성화', + ], + + 'sync_disable' => [ + 'title' => '동기화를 비활성화하시겠어요?', + 'description' => '각 플랫폼은 현재 콘텐츠를 유지하지만, 이후 편집은 편집 중인 플랫폼에만 적용됩니다.', + 'customize_note' => '각 플랫폼의 콘텐츠를 개별적으로 맞춤 설정할 수 있습니다.', + 'cancel' => '취소', + 'action' => '동기화 비활성화', + ], + + 'platforms_dialog' => [ + 'title' => '플랫폼 선택', + 'description' => '이 게시물을 게시할 플랫폼을 선택하세요.', + ], + + 'signatures_modal' => [ + 'search' => '서명 검색...', + 'no_results' => '서명을 찾을 수 없습니다.', + ], + + 'validation' => [ + 'select_board' => '보드 선택', + 'images_not_supported' => '이미지가 지원되지 않습니다', + 'videos_not_supported' => '동영상이 지원되지 않습니다', + 'max_images' => '최대 :count개 이미지', + 'requires_media' => '미디어 필요', + 'requires_content' => '텍스트 내용이 필요합니다', + 'exceeded' => ':count 초과', + 'does_not_support_images' => ':platform은(는) 이미지를 지원하지 않습니다', + 'supports_up_to_images' => ':platform은(는) 최대 :count개 이미지를 지원합니다', + 'does_not_support_videos' => ':platform은(는) 동영상을 지원하지 않습니다', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => '피드 게시물', + 'description' => '피드와 프로필에 표시됩니다', + ], + 'instagram_reel' => [ + 'label' => '릴스', + 'description' => '최대 90초 짧은 동영상', + ], + 'instagram_story' => [ + 'label' => '스토리', + 'description' => '24시간 후 사라집니다', + ], + 'linkedin_post' => [ + 'label' => '게시물', + 'description' => '표준 게시물 — 단일 이미지, 다중 이미지, 동영상 또는 PDF', + ], + 'linkedin_page_post' => [ + 'label' => '게시물', + 'description' => '표준 게시물 — 단일 이미지, 다중 이미지, 동영상 또는 PDF', + ], + 'facebook_post' => [ + 'label' => '게시물', + 'description' => '페이지의 표준 게시물', + ], + 'facebook_reel' => [ + 'label' => '릴스', + 'description' => '최대 90초 짧은 동영상', + ], + 'facebook_story' => [ + 'label' => '스토리', + 'description' => '최대 60초 세로 동영상 스토리', + ], + 'tiktok_video' => [ + 'label' => '동영상', + 'description' => '숏폼 동영상 콘텐츠', + ], + 'tiktok_photo' => [ + 'label' => '사진 캐러셀', + 'description' => '최대 35장의 사진을 스와이프 캐러셀로', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => '최대 60초 세로 동영상', + ], + 'x_post' => [ + 'label' => '게시물', + 'description' => '텍스트와 미디어가 있는 트윗', + ], + 'threads_post' => [ + 'label' => '게시물', + 'description' => '선택적 미디어가 있는 텍스트 게시물', + ], + 'pinterest_pin' => [ + 'label' => '핀', + 'description' => '표준 이미지 핀', + ], + 'pinterest_video_pin' => [ + 'label' => '동영상 핀', + 'description' => '동영상 핀 (4초 - 15분)', + ], + 'pinterest_carousel' => [ + 'label' => '캐러셀', + 'description' => '다중 이미지 캐러셀 (2-5장)', + ], + 'bluesky_post' => [ + 'label' => '게시물', + 'description' => '선택적 이미지가 있는 텍스트 게시물', + ], + 'mastodon_post' => [ + 'label' => '게시물', + 'description' => '선택적 미디어가 있는 텍스트 게시물', + ], + 'telegram_post' => [ + 'label' => '게시물', + 'description' => '선택적 미디어가 있는 텍스트 게시물', + ], + 'discord_message' => [ + 'label' => '메시지', + 'description' => '선택적 미디어 및 임베드가 있는 Discord 채널 메시지', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'LinkedIn 페이지', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Facebook 페이지', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => '게시물이 성공적으로 예약되었습니다!', + 'deleted' => '게시물이 성공적으로 삭제되었습니다!', + 'duplicated' => '게시물이 초안으로 복제되었습니다.', + 'cannot_edit_finalized' => '이 게시물은 이미 처리되어 다시 게시할 수 없습니다. 다시 시도하려면 복제하세요.', + 'cannot_delete_published' => '게시된 게시물은 삭제할 수 없습니다.', + 'connect_first' => '게시물을 만들기 전에 소셜 네트워크를 하나 이상 연결하세요.', + ], + + 'errors' => [ + 'account_disconnected' => '소셜 계정 연결이 해제되었습니다', + 'account_inactive' => '소셜 계정이 비활성화되었습니다', + 'account_token_expired' => '소셜 계정 세션이 만료되었습니다 — 재연결하세요', + ], + + 'delete' => [ + 'title' => '게시물을 삭제하시겠어요?', + 'description' => '이 작업은 되돌릴 수 없습니다. 게시물과 모든 미디어가 영구적으로 제거됩니다.', + 'confirm' => '예, 삭제합니다', + 'cancel' => '취소', + ], + + 'create' => [ + 'title' => '새 게시물 만들기', + 'description' => '어떻게 시작할지 선택하세요.', + 'scratch_title' => '처음부터 시작', + 'scratch_description' => '빈 게시물을 열고 직접 모든 것을 작성하세요.', + 'ai_title' => 'AI로 생성', + 'ai_description' => '원하는 것을 설명하면 AI가 콘텐츠를 생성해 드립니다.', + 'ai_configure_description' => '형식을 선택하고 만들고 싶은 게시물을 설명하세요.', + 'ai_pick_template_description' => 'AI가 생성할 게시물의 스타일을 선택하세요.', + 'template_title' => '템플릿 사용', + 'template_description' => '엄선된 템플릿에서 선택하고 맞춤 설정하세요.', + 'coming_soon' => '곧 제공 예정', + + 'preview' => [ + 'image_title' => '이미지 제목', + 'image_body' => '이미지 본문', + ], + + 'steps' => [ + 'template_picker_title' => '스타일 선택', + 'format_title' => '형식 선택', + 'format_description' => '만들고 싶은 게시물 유형을 선택하세요.', + 'account_title' => '계정 선택', + 'account_description' => '게시할 소셜 계정을 선택하세요.', + 'media_title' => '미디어 옵션', + 'media_carousel' => '슬라이드는 몇 장인가요?', + 'media_optional' => '이미지를 포함할까요?', + 'media_optional_label' => '이미지는 몇 장인가요?', + 'media_none' => '없음', + 'media_count_label' => '이미지 수', + 'prompt_title' => '게시물을 설명하세요', + 'prompt_label' => '이 게시물은 무엇에 관한 것인가요?', + 'prompt_placeholder' => '예: Instagram용 새 캐러셀 기능 발표', + 'preview_error' => '문제가 발생했습니다. 다시 시도해 주세요.', + 'loading_page_title' => '게시물을 생성하는 중', + 'loading_eta' => '예상 시간: 약 :minutes.', + 'loading_eta_minute_one' => '1분', + 'loading_eta_minute_other' => ':count분', + 'loading_leave_title' => '계속 작업하셔도 됩니다.', + 'loading_leave_body' => '게시물이 준비되면 알려드리겠습니다.', + 'loading_leave_cta' => '캘린더로 이동', + 'loading_create_another_cta' => '다른 게시물 만들기', + 'loading_tip_credits' => '각 AI 이미지는 약 15크레딧을 사용합니다.', + 'loading_tip_edit' => '게시물이 준비되면 모든 것을 편집할 수 있습니다.', + 'loading_tip_draft' => '생성된 게시물은 초안에 저장됩니다.', + 'loading_tip_brand' => '브랜드 설정을 조정하여 향후 게시물에 영향을 주세요.', + 'loading_tip_carousel' => '캐러셀은 업로드한 이미지당 슬라이드 하나를 제공합니다.', + 'loading_tip_quality' => '이미지 품질은 속도와 비용의 균형에 맞게 설정됩니다.', + 'create' => '게시물 만들기', + 'back' => '뒤로', + 'next' => '계속', + 'cancel' => '취소', + 'discard' => '버리기', + 'retry' => '다시 시도', + 'no_platforms' => '연결된 계정 없음', + 'connect_first' => 'AI 생성을 사용하려면 소셜 계정을 하나 이상 연결하세요.', + 'no_account_for_template' => '이 템플릿을 사용하려면 호환되는 계정을 연결하세요.', + + 'format' => [ + 'instagram_feed' => 'Instagram 피드 게시물', + 'instagram_carousel' => 'Instagram 캐러셀', + 'linkedin_post' => 'LinkedIn 게시물', + 'linkedin_page_post' => 'LinkedIn 페이지 게시물', + 'x_post' => 'X 게시물', + 'bluesky_post' => 'Bluesky 게시물', + 'threads_post' => 'Threads 게시물', + 'mastodon_post' => 'Mastodon 게시물', + 'telegram_post' => 'Telegram 게시물', + 'discord_message' => 'Discord 메시지', + 'facebook_post' => 'Facebook 게시물', + 'pinterest_pin' => 'Pinterest 핀', + 'instagram_story' => 'Instagram 스토리', + 'facebook_story' => 'Facebook 스토리', + ], + ], + ], + + 'templates' => [ + 'browser_title' => '템플릿 선택', + 'browser_description' => '엄선된 템플릿에서 시작하여 맞춤 설정하세요.', + 'search_placeholder' => '템플릿 검색…', + 'no_search_results' => '검색과 일치하는 템플릿이 없습니다', + 'try_different_search' => '다른 키워드로 시도하거나 검색을 지우세요.', + 'slides_count' => '슬라이드 {count}장|슬라이드 {count}장', + 'all_platforms' => '모든 플랫폼', + 'platform_search_placeholder' => '플랫폼 검색…', + 'no_platform_match' => '일치하는 플랫폼이 없습니다.', + 'use_this' => '이 템플릿 사용', + 'no_templates' => '사용 가능한 템플릿이 없습니다.', + 'applying' => '템플릿을 적용하는 중…', + 'category' => [ + 'product_launch' => '제품 출시', + 'promotion' => '프로모션', + 'educational' => '교육', + 'behind_the_scenes' => '비하인드', + 'testimonial' => '고객 후기', + 'industry_tip' => '업계 팁', + 'event' => '이벤트', + 'engagement' => '참여', + ], + ], +]; diff --git a/lang/ko/settings.php b/lang/ko/settings.php new file mode 100644 index 00000000..5ff2122c --- /dev/null +++ b/lang/ko/settings.php @@ -0,0 +1,356 @@ + '설정', + 'description' => '프로필 및 계정 설정 관리', + + 'hub' => [ + 'title' => '설정', + 'description' => '관리할 항목을 선택하세요.', + 'profile' => [ + 'title' => '프로필', + 'description' => '개인 정보, 비밀번호, 알림 설정을 업데이트하세요.', + ], + 'workspace' => [ + 'title' => '워크스페이스', + 'description' => '워크스페이스, 브랜드, 멤버, API 키를 구성하세요.', + ], + 'account' => [ + 'title' => '계정', + 'description' => '계정 정보, 사용량, 결제를 관리하세요.', + ], + ], + + 'nav' => [ + 'profile' => '프로필', + 'authentication' => '인증', + 'workspace' => '워크스페이스', + 'members' => '멤버', + 'notifications' => '알림', + 'billing' => '결제', + ], + + 'notifications' => [ + 'title' => '알림 설정', + 'heading' => '이메일 알림', + 'description' => '받고 싶은 이메일 알림을 선택하세요', + 'post_published' => '게시물 게시됨', + 'post_published_description' => '게시물이 성공적으로 게시되면 이메일을 받습니다', + 'post_failed' => '게시물 실패', + 'post_failed_description' => '게시물 게시에 실패하면 이메일을 받습니다', + 'account_disconnected' => '계정 연결 해제됨', + 'account_disconnected_description' => '소셜 계정 연결이 해제되면 이메일을 받습니다', + 'save' => '설정 저장', + ], + + 'profile' => [ + 'title' => '프로필 설정', + 'photo_heading' => '프로필 사진', + 'photo_description' => '프로필 사진을 업로드하세요', + 'heading' => '프로필 정보', + 'description' => '이름과 이메일 주소를 업데이트하세요', + 'avatar' => '아바타', + 'name' => '이름', + 'name_placeholder' => '전체 이름', + 'email' => '이메일 주소', + 'email_placeholder' => '이메일 주소', + 'email_unverified' => '이메일 주소가 인증되지 않았습니다.', + 'resend_verification' => '인증 이메일을 다시 보내려면 여기를 클릭하세요.', + 'verification_sent' => '이메일 주소로 새 인증 링크를 보냈습니다.', + 'save' => '저장', + ], + + 'authentication' => [ + 'title' => '인증', + 'page_title' => '인증 설정', + 'sessions' => [ + 'title' => '활성 세션', + 'description' => '의심스러운 점이 발견되면 다른 기기에서 로그아웃하세요.', + 'unknown_browser' => '알 수 없는 브라우저', + 'unknown_ip' => '알 수 없는 IP', + 'on' => '·', + 'active_now' => '현재 활성', + 'log_out_others' => '다른 기기에서 로그아웃', + 'modal_title' => '다른 기기에서 로그아웃', + 'modal_description_password' => '다른 브라우저 세션에서 로그아웃하려면 현재 비밀번호를 입력하여 확인하세요.', + 'modal_description_email' => '다른 브라우저 세션에서 로그아웃하려면 이메일 주소를 입력하여 확인하세요.', + 'password_placeholder' => '현재 비밀번호', + 'email_placeholder' => '계정 이메일', + 'cancel' => '취소', + 'submit' => '다른 기기에서 로그아웃', + 'email_mismatch' => '이메일 주소가 계정과 일치하지 않습니다.', + 'flash_logged_out' => '다른 기기에서 로그아웃되었습니다.', + ], + 'password' => [ + 'update_title' => '비밀번호 업데이트', + 'set_title' => '비밀번호 설정', + 'update_description' => '보안을 위해 길고 무작위한 비밀번호를 사용하세요.', + 'set_description' => '연결된 제공업체 없이 로그인할 수 있도록 비밀번호를 추가하세요.', + 'current_password' => '현재 비밀번호', + 'new_password' => '새 비밀번호', + 'confirm_password' => '비밀번호 확인', + 'save' => '비밀번호 저장', + 'set' => '비밀번호 설정', + ], + 'providers' => [ + 'title' => '연결된 계정', + 'description' => '연결된 제공업체로 더 빠르게 로그인하세요.', + 'connected' => '연결됨', + 'not_connected' => '연결 안 됨', + 'connect' => '연결', + 'disconnect' => '연결 해제', + 'flash_disconnected' => ':provider 연결이 해제되었습니다.', + 'flash_connected' => ':provider이(가) 연결되었습니다.', + 'flash_already_linked' => '해당 :provider 계정은 이미 다른 사용자에게 연결되어 있습니다.', + 'flash_cannot_disconnect' => '유일한 로그인 방법은 연결을 해제할 수 없습니다. 먼저 비밀번호를 설정하거나 다른 제공업체를 연결하세요.', + ], + ], + + 'delete_account' => [ + 'heading' => '계정 삭제', + 'description' => '계정과 모든 리소스를 삭제하세요', + 'warning' => '경고', + 'warning_message' => '주의하여 진행하세요. 이 작업은 되돌릴 수 없습니다.', + 'button' => '계정 삭제', + 'modal_title' => '정말 계정을 삭제하시겠습니까?', + 'modal_description_password' => '계정이 삭제되면 모든 리소스와 데이터도 영구적으로 삭제됩니다. 확인하려면 비밀번호를 입력하세요.', + 'modal_description_email' => '계정이 삭제되면 모든 리소스와 데이터도 영구적으로 삭제됩니다. 확인하려면 이메일 주소 :email을(를) 입력하세요.', + 'password' => '비밀번호', + 'password_placeholder' => '비밀번호', + 'email_placeholder' => '계정 이메일', + 'email_mismatch' => '이메일 주소가 계정과 일치하지 않습니다.', + 'cancel' => '취소', + 'confirm' => '계정 삭제', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => '워크스페이스', + 'brand' => '브랜드', + 'users' => '멤버', + 'api_keys' => 'API 키', + ], + 'title' => '워크스페이스 설정', + 'logo_heading' => '워크스페이스 로고', + 'logo_description' => '워크스페이스 로고를 업로드하세요', + 'heading' => '워크스페이스 이름', + 'description' => '워크스페이스 이름을 업데이트하세요', + 'members_heading' => '멤버', + 'members_description' => '워크스페이스 멤버와 초대를 관리하세요', + 'name' => '이름', + 'name_placeholder' => '내 워크스페이스', + 'save' => '저장', + ], + + 'brand' => [ + 'title' => '브랜드', + 'description' => 'AI 생성 콘텐츠를 위한 브랜드 아이덴티티를 구성하세요.', + 'name' => '워크스페이스 이름', + 'name_placeholder' => '내 브랜드', + 'website' => '웹사이트', + 'website_placeholder' => 'https://yourbrand.com', + 'brand_description' => '설명', + 'brand_description_placeholder' => '브랜드에 대해, 무엇을 하는지, 대상 고객이 누구인지 알려주세요...', + 'voice' => '브랜드 보이스', + 'voice_description' => '콘텐츠의 어조를 정의하는 특성을 선택하세요.', + 'voice_group' => [ + 'pov' => '관점', + 'formality' => '격식', + 'energy' => '에너지', + 'humor' => '유머', + 'attitude' => '태도', + 'warmth' => '따뜻함', + 'confidence' => '자신감', + 'style' => '스타일', + ], + 'voice_trait' => [ + 'first_person' => '1인칭', + 'second_person' => '2인칭 (당신)', + 'third_person' => '3인칭', + 'formal' => '격식체', + 'balanced' => '균형', + 'casual' => '캐주얼', + 'calm' => '차분함', + 'moderate' => '보통', + 'enthusiastic' => '열정적', + 'vibrant' => '생동감', + 'serious' => '진지함', + 'dry' => '건조함 / 은근함', + 'witty' => '재치 있음', + 'playful' => '장난스러움', + 'respectful' => '정중함', + 'even_handed' => '공정함', + 'bold' => '대담함', + 'provocative' => '도발적', + 'neutral' => '중립적', + 'friendly' => '친근함', + 'empathetic' => '공감적', + 'humble' => '겸손함', + 'confident' => '자신감 있음', + 'assertive' => '단호함', + 'direct' => '직설적', + 'concise' => '간결함', + 'transparent' => '투명함', + 'no_hype' => '과장 없음', + 'practical' => '실용적', + 'data_driven' => '데이터 기반', + 'storytelling' => '스토리텔링', + 'inspirational' => '영감을 주는', + 'educational' => '교육적', + 'technical' => '기술적', + 'minimalist' => '이모지 최소화', + ], + 'brand_color' => '브랜드 색상', + 'background_color' => '배경 색상', + 'text_color' => '텍스트 색상', + 'font' => '글꼴', + 'image_style' => '이미지 스타일', + 'image_style_description' => 'AI 게시물의 슬라이드 및 커버 이미지를 생성할 때 적용되는 비주얼 스타일입니다.', + 'image_style_cinematic' => '시네마틱', + 'image_style_illustration' => '일러스트레이션', + 'image_style_isometric_3d' => '아이소메트릭', + 'image_style_cartoon' => '만화', + 'image_style_typographic' => '타이포그래피', + 'image_style_infographic' => '인포그래픽', + 'image_style_minimalist' => '미니멀리스트', + 'image_style_mockup' => '목업', + 'content_language' => '콘텐츠 언어', + 'content_language_description' => 'AI가 생성하는 캡션, 해시태그, 생성된 이미지나 동영상 내 텍스트에 사용되는 언어입니다.', + ], + + 'members' => [ + 'title' => '멤버', + 'heading' => '팀 멤버', + 'description' => '이 워크스페이스의 멤버와 초대를 관리하세요', + + 'cancel' => '취소', + 'remove' => '제거', + 'make_role' => ':role(으)로 지정', + + 'invite' => [ + 'title' => '멤버 초대', + 'description' => '이메일 초대를 보내 협업자를 추가하세요', + 'email' => '이메일', + 'email_placeholder' => 'collaborator@email.com', + 'role' => '역할', + 'role_placeholder' => '역할 선택', + 'submit' => '초대 보내기', + ], + + 'pending' => [ + 'title' => '대기 중인 초대', + 'description' => '수락 대기 중인 초대', + 'empty' => '대기 중인 초대가 없습니다', + ], + + 'list' => [ + 'title' => '멤버', + 'description' => '이 워크스페이스에 접근할 수 있는 사람', + 'empty' => '소유자 외에 멤버가 없습니다', + ], + + 'remove_modal' => [ + 'title' => '멤버 제거', + 'description' => '이 멤버를 워크스페이스에서 제거하시겠습니까? 모든 워크스페이스 리소스에 대한 접근 권한을 잃게 됩니다.', + 'action' => '멤버 제거', + ], + + 'cancel_invite_modal' => [ + 'title' => '초대 취소', + 'description' => '이 초대를 취소하시겠습니까?', + 'action' => '초대 취소', + ], + + 'roles' => [ + 'owner' => '소유자', + 'admin' => '관리자', + 'member' => '멤버', + 'viewer' => '뷰어', + ], + + 'flash' => [ + 'invite_sent' => '초대가 성공적으로 전송되었습니다!', + 'invite_deleted' => '초대가 삭제되었습니다.', + 'member_removed' => '멤버가 성공적으로 제거되었습니다.', + 'role_updated' => '멤버 역할이 업데이트되었습니다.', + 'wrong_email' => '이 초대는 다른 이메일 주소를 위한 것입니다.', + 'already_member' => '이미 이 워크스페이스의 멤버입니다.', + 'invite_accepted' => '환영합니다! 이제 워크스페이스의 멤버입니다.', + 'invite_declined' => '초대를 거절했습니다.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => '계정', + 'usage' => '사용량', + 'billing' => '결제', + ], + 'title' => '계정 설정', + 'description' => '계정 이름과 결제 이메일을 관리하세요', + 'name' => '계정 이름', + 'name_placeholder' => '내 회사', + 'billing_email' => '결제 이메일', + 'billing_email_placeholder' => 'billing@company.com', + 'billing_email_hint' => '이 이메일은 Stripe의 청구서 및 결제 관련 커뮤니케이션에 사용됩니다.', + 'submit' => '저장', + ], + + 'flash' => [ + 'account_updated' => '계정이 성공적으로 업데이트되었습니다!', + 'profile_updated' => '프로필이 성공적으로 업데이트되었습니다!', + 'password_updated' => '비밀번호가 성공적으로 업데이트되었습니다!', + 'workspace_updated' => '설정이 성공적으로 업데이트되었습니다!', + 'photo_updated' => '사진이 성공적으로 업데이트되었습니다!', + 'photo_deleted' => '사진이 성공적으로 제거되었습니다!', + 'logo_updated' => '로고가 성공적으로 업로드되었습니다!', + 'logo_deleted' => '로고가 성공적으로 제거되었습니다!', + 'notifications_updated' => '알림 설정이 업데이트되었습니다!', + ], + + 'api_keys' => [ + 'title' => 'API 키', + 'page_title' => 'API 키', + 'heading' => 'API 키', + 'description' => '워크스페이스에 프로그래밍 방식으로 접근하기 위한 API 키를 관리하세요.', + 'create' => 'API 키 만들기', + 'copy' => '복사', + 'new_token_message' => '새 API 키가 생성되었습니다. 지금 복사하세요 — 다시 볼 수 없습니다.', + 'table' => [ + 'name' => '이름', + 'key' => '키', + 'status' => '상태', + 'expires' => '만료', + 'last_used' => '마지막 사용', + 'never' => '없음', + ], + 'actions' => [ + 'copy_id' => 'API 키 ID 복사', + 'copy_id_success' => 'API 키 ID가 클립보드에 복사되었습니다', + 'delete' => '삭제', + ], + 'empty' => [ + 'title' => '아직 API 키가 없습니다', + 'description' => '워크스페이스에 프로그래밍 방식으로 접근하려면 API 키를 만드세요.', + ], + 'delete_modal' => [ + 'title' => 'API 키 삭제', + 'description' => '이 API 키를 삭제하시겠습니까? 이 키를 사용하는 모든 애플리케이션이 즉시 접근 권한을 잃게 됩니다.', + 'action' => 'API 키 삭제', + ], + 'create_dialog' => [ + 'title' => 'API 키 만들기', + 'description' => '워크스페이스에 프로그래밍 방식으로 접근하기 위한 새 API 키를 만드세요.', + 'name' => '이름', + 'name_placeholder' => '예: 프로덕션 API 키', + 'expires' => '만료 날짜 (선택)', + 'expires_placeholder' => '만료 없음', + 'submit' => '만들기', + 'cancel' => '취소', + ], + 'flash' => [ + 'created' => 'API 키가 성공적으로 생성되었습니다!', + 'deleted' => 'API 키가 성공적으로 삭제되었습니다!', + ], + ], +]; diff --git a/lang/ko/sidebar.php b/lang/ko/sidebar.php new file mode 100644 index 00000000..3d47a2bf --- /dev/null +++ b/lang/ko/sidebar.php @@ -0,0 +1,61 @@ + '워크스페이스', + 'select_workspace' => '워크스페이스 선택', + 'create_workspace' => '워크스페이스 만들기', + 'create_post' => '게시물 만들기', + 'profile' => '프로필', + 'log_out' => '로그아웃', + + 'workspace' => '워크스페이스: :name', + 'workspace_select' => '워크스페이스: 선택', + + 'theme' => '테마: :name', + 'theme_light' => '라이트', + 'theme_dark' => '다크', + 'theme_system' => '시스템', + + 'language' => '언어: :name', + 'language_select' => '언어: 선택', + + 'groups' => [ + 'posts' => '게시물', + 'workspace' => '워크스페이스', + 'others' => '기타', + ], + + 'analytics' => '분석', + 'automations' => '자동화', + 'settings' => '설정', + + 'posts' => [ + 'calendar' => '캘린더', + 'all' => '전체', + 'scheduled' => '예약됨', + 'posted' => '게시됨', + 'drafts' => '초안', + ], + + 'workspace' => [ + 'connections' => '연결', + 'signatures' => '서명', + 'labels' => '라벨', + 'assets' => '에셋', + 'api_keys' => 'API 키', + ], + + 'notifications' => '알림', + 'mark_all_read' => '모두 읽음으로 표시', + 'mark_as_read' => '읽음으로 표시', + 'archive_all' => '모두 보관', + 'no_notifications' => '알림 없음', + + 'support' => [ + 'docs' => '문서', + 'referral' => '30% 추천 수익 받기', + 'stay_updated' => '최신 소식 받기', + ], +]; diff --git a/lang/ko/signatures.php b/lang/ko/signatures.php new file mode 100644 index 00000000..0051c152 --- /dev/null +++ b/lang/ko/signatures.php @@ -0,0 +1,59 @@ + '서명', + 'description' => '게시물에 빠르게 추가할 수 있는 재사용 가능한 서명을 만드세요', + 'search' => '서명 검색...', + 'new' => '새 서명', + 'empty_title' => '아직 서명이 없습니다', + 'empty_description' => '서명을 만들어 해시태그, 링크 또는 재사용 가능한 텍스트를 게시물에 빠르게 추가하세요', + 'no_search_results' => '검색과 일치하는 서명이 없습니다', + 'try_different_search' => '다른 키워드로 시도하거나 검색을 지우세요.', + 'table' => [ + 'name' => '이름', + 'content' => '내용', + 'created_at' => '생성일', + ], + + 'actions' => [ + 'edit' => '서명 편집', + 'delete' => '서명 삭제', + ], + + 'create' => [ + 'title' => '서명 만들기', + 'description' => '서명에 이름과 추가할 내용(해시태그, 링크, 맞춤 텍스트 등 재사용하는 모든 것)을 지정하세요.', + 'name' => '이름', + 'name_placeholder' => '예: 마케팅, 여행, 브랜드 맺음말', + 'content' => '내용', + 'content_placeholder' => "#marketing #socialmedia\n자세히 보기: https://yourbrand.com", + 'content_hint' => '해시태그, 링크, 맞춤 인트로, 맺음말 등 게시물에 추가하는 모든 것.', + 'submit' => '서명 만들기', + 'submitting' => '생성 중...', + ], + + 'edit' => [ + 'title' => '서명 편집', + 'description' => '이 서명의 이름과 내용을 업데이트하세요.', + 'name' => '이름', + 'name_placeholder' => '예: 마케팅, 여행, 브랜드 맺음말', + 'content' => '내용', + 'content_placeholder' => "#marketing #socialmedia\n자세히 보기: https://yourbrand.com", + 'content_hint' => '해시태그, 링크, 맞춤 인트로, 맺음말 등 게시물에 추가하는 모든 것.', + 'submit' => '변경사항 저장', + 'submitting' => '저장 중...', + ], + + 'delete' => [ + 'title' => '서명 삭제', + 'description' => '이 서명을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.', + 'confirm' => '삭제', + 'cancel' => '취소', + ], + + 'flash' => [ + 'created' => '서명이 생성되었습니다.', + 'updated' => '서명이 업데이트되었습니다.', + 'deleted' => '서명이 삭제되었습니다.', + ], +]; diff --git a/lang/ko/usage.php b/lang/ko/usage.php new file mode 100644 index 00000000..b92e7ff7 --- /dev/null +++ b/lang/ko/usage.php @@ -0,0 +1,15 @@ + '사용량', + + 'section_account' => '계정', + 'section_account_description' => '요금제의 할당량 및 한도.', + 'section_ai' => 'AI 크레딧', + 'section_ai_description' => '크레딧은 AI 기능을 사용할 때 차감됩니다. 매월 1일에 초기화됩니다.', + + 'workspaces' => '워크스페이스', + 'social_accounts' => '소셜 계정', + 'members' => '멤버', + 'credits' => '크레딧', +]; diff --git a/lang/ko/validation.php b/lang/ko/validation.php new file mode 100644 index 00000000..7e810220 --- /dev/null +++ b/lang/ko/validation.php @@ -0,0 +1,200 @@ + ':attribute을(를) 승인해야 합니다.', + 'accepted_if' => ':other이(가) :value일 때 :attribute을(를) 승인해야 합니다.', + 'active_url' => ':attribute은(는) 유효한 URL이어야 합니다.', + 'after' => ':attribute은(는) :date 이후의 날짜여야 합니다.', + 'after_or_equal' => ':attribute은(는) :date 이후이거나 같은 날짜여야 합니다.', + 'alpha' => ':attribute은(는) 문자만 포함해야 합니다.', + 'alpha_dash' => ':attribute은(는) 문자, 숫자, 대시(-), 밑줄(_)만 포함해야 합니다.', + 'alpha_num' => ':attribute은(는) 문자와 숫자만 포함해야 합니다.', + 'any_of' => ':attribute이(가) 유효하지 않습니다.', + 'array' => ':attribute은(는) 배열이어야 합니다.', + 'ascii' => ':attribute은(는) 단일 바이트 영숫자와 기호만 포함해야 합니다.', + 'before' => ':attribute은(는) :date 이전의 날짜여야 합니다.', + 'before_or_equal' => ':attribute은(는) :date 이전이거나 같은 날짜여야 합니다.', + 'between' => [ + 'array' => ':attribute은(는) :min개에서 :max개 사이의 항목이 있어야 합니다.', + 'file' => ':attribute은(는) :min에서 :max킬로바이트 사이여야 합니다.', + 'numeric' => ':attribute은(는) :min에서 :max 사이여야 합니다.', + 'string' => ':attribute은(는) :min자에서 :max자 사이여야 합니다.', + ], + 'boolean' => ':attribute은(는) true 또는 false여야 합니다.', + 'can' => ':attribute에 허가되지 않은 값이 포함되어 있습니다.', + 'confirmed' => ':attribute 확인이 일치하지 않습니다.', + 'contains' => ':attribute에 필수 값이 없습니다.', + 'current_password' => '비밀번호가 올바르지 않습니다.', + 'date' => ':attribute은(는) 유효한 날짜여야 합니다.', + 'date_equals' => ':attribute은(는) :date와 같은 날짜여야 합니다.', + 'date_format' => ':attribute은(는) :format 형식과 일치해야 합니다.', + 'decimal' => ':attribute은(는) 소수점 :decimal자리여야 합니다.', + 'declined' => ':attribute을(를) 거부해야 합니다.', + 'declined_if' => ':other이(가) :value일 때 :attribute을(를) 거부해야 합니다.', + 'different' => ':attribute와(과) :other은(는) 달라야 합니다.', + 'digits' => ':attribute은(는) :digits자리 숫자여야 합니다.', + 'digits_between' => ':attribute은(는) :min에서 :max자리 사이의 숫자여야 합니다.', + 'dimensions' => ':attribute의 이미지 크기가 유효하지 않습니다.', + 'distinct' => ':attribute에 중복된 값이 있습니다.', + 'doesnt_contain' => ':attribute에는 다음 값이 포함되어서는 안 됩니다: :values.', + 'doesnt_end_with' => ':attribute은(는) 다음 중 하나로 끝나서는 안 됩니다: :values.', + 'doesnt_start_with' => ':attribute은(는) 다음 중 하나로 시작해서는 안 됩니다: :values.', + 'email' => ':attribute은(는) 유효한 이메일 주소여야 합니다.', + 'encoding' => ':attribute은(는) :encoding으로 인코딩되어야 합니다.', + 'ends_with' => ':attribute은(는) 다음 중 하나로 끝나야 합니다: :values.', + 'enum' => '선택한 :attribute이(가) 유효하지 않습니다.', + 'exists' => '선택한 :attribute이(가) 유효하지 않습니다.', + 'extensions' => ':attribute은(는) 다음 확장자 중 하나여야 합니다: :values.', + 'file' => ':attribute은(는) 파일이어야 합니다.', + 'filled' => ':attribute에 값이 있어야 합니다.', + 'gt' => [ + 'array' => ':attribute은(는) :value개보다 많은 항목이 있어야 합니다.', + 'file' => ':attribute은(는) :value킬로바이트보다 커야 합니다.', + 'numeric' => ':attribute은(는) :value보다 커야 합니다.', + 'string' => ':attribute은(는) :value자보다 길어야 합니다.', + ], + 'gte' => [ + 'array' => ':attribute은(는) :value개 이상의 항목이 있어야 합니다.', + 'file' => ':attribute은(는) :value킬로바이트 이상이어야 합니다.', + 'numeric' => ':attribute은(는) :value 이상이어야 합니다.', + 'string' => ':attribute은(는) :value자 이상이어야 합니다.', + ], + 'hex_color' => ':attribute은(는) 유효한 16진수 색상이어야 합니다.', + 'image' => ':attribute은(는) 이미지여야 합니다.', + 'in' => '선택한 :attribute이(가) 유효하지 않습니다.', + 'in_array' => ':attribute은(는) :other에 존재해야 합니다.', + 'in_array_keys' => ':attribute에는 다음 키 중 하나 이상이 포함되어야 합니다: :values.', + 'integer' => ':attribute은(는) 정수여야 합니다.', + 'ip' => ':attribute은(는) 유효한 IP 주소여야 합니다.', + 'ipv4' => ':attribute은(는) 유효한 IPv4 주소여야 합니다.', + 'ipv6' => ':attribute은(는) 유효한 IPv6 주소여야 합니다.', + 'json' => ':attribute은(는) 유효한 JSON 문자열이어야 합니다.', + 'list' => ':attribute은(는) 목록이어야 합니다.', + 'lowercase' => ':attribute은(는) 소문자여야 합니다.', + 'lt' => [ + 'array' => ':attribute은(는) :value개보다 적은 항목이 있어야 합니다.', + 'file' => ':attribute은(는) :value킬로바이트보다 작아야 합니다.', + 'numeric' => ':attribute은(는) :value보다 작아야 합니다.', + 'string' => ':attribute은(는) :value자보다 짧아야 합니다.', + ], + 'lte' => [ + 'array' => ':attribute은(는) :value개보다 많은 항목이 있어서는 안 됩니다.', + 'file' => ':attribute은(는) :value킬로바이트 이하여야 합니다.', + 'numeric' => ':attribute은(는) :value 이하여야 합니다.', + 'string' => ':attribute은(는) :value자 이하여야 합니다.', + ], + 'mac_address' => ':attribute은(는) 유효한 MAC 주소여야 합니다.', + 'max' => [ + 'array' => ':attribute은(는) :max개보다 많은 항목이 있어서는 안 됩니다.', + 'file' => ':attribute은(는) :max킬로바이트를 초과해서는 안 됩니다.', + 'numeric' => ':attribute은(는) :max을(를) 초과해서는 안 됩니다.', + 'string' => ':attribute은(는) :max자를 초과해서는 안 됩니다.', + ], + 'max_digits' => ':attribute은(는) :max자리보다 많은 숫자를 가질 수 없습니다.', + 'mimes' => ':attribute은(는) 다음 유형의 파일이어야 합니다: :values.', + 'mimetypes' => ':attribute은(는) 다음 유형의 파일이어야 합니다: :values.', + 'min' => [ + 'array' => ':attribute은(는) 최소 :min개의 항목이 있어야 합니다.', + 'file' => ':attribute은(는) 최소 :min킬로바이트여야 합니다.', + 'numeric' => ':attribute은(는) 최소 :min이어야 합니다.', + 'string' => ':attribute은(는) 최소 :min자여야 합니다.', + ], + 'min_digits' => ':attribute은(는) 최소 :min자리 숫자여야 합니다.', + 'missing' => ':attribute은(는) 없어야 합니다.', + 'missing_if' => ':other이(가) :value일 때 :attribute은(는) 없어야 합니다.', + 'missing_unless' => ':other이(가) :value가 아니면 :attribute은(는) 없어야 합니다.', + 'missing_with' => ':values이(가) 있을 때 :attribute은(는) 없어야 합니다.', + 'missing_with_all' => ':values이(가) 모두 있을 때 :attribute은(는) 없어야 합니다.', + 'multiple_of' => ':attribute은(는) :value의 배수여야 합니다.', + 'not_in' => '선택한 :attribute이(가) 유효하지 않습니다.', + 'not_regex' => ':attribute 형식이 유효하지 않습니다.', + 'numeric' => ':attribute은(는) 숫자여야 합니다.', + 'password' => [ + 'letters' => ':attribute에는 문자가 최소 하나 이상 포함되어야 합니다.', + 'mixed' => ':attribute에는 대문자와 소문자가 각각 최소 하나 이상 포함되어야 합니다.', + 'numbers' => ':attribute에는 숫자가 최소 하나 이상 포함되어야 합니다.', + 'symbols' => ':attribute에는 기호가 최소 하나 이상 포함되어야 합니다.', + 'uncompromised' => '입력한 :attribute이(가) 데이터 유출에 나타났습니다. 다른 :attribute을(를) 선택하세요.', + ], + 'present' => ':attribute이(가) 있어야 합니다.', + 'present_if' => ':other이(가) :value일 때 :attribute이(가) 있어야 합니다.', + 'present_unless' => ':other이(가) :value가 아니면 :attribute이(가) 있어야 합니다.', + 'present_with' => ':values이(가) 있을 때 :attribute이(가) 있어야 합니다.', + 'present_with_all' => ':values이(가) 모두 있을 때 :attribute이(가) 있어야 합니다.', + 'prohibited' => ':attribute은(는) 금지되어 있습니다.', + 'prohibited_if' => ':other이(가) :value일 때 :attribute은(는) 금지됩니다.', + 'prohibited_if_accepted' => ':other이(가) 승인되면 :attribute은(는) 금지됩니다.', + 'prohibited_if_declined' => ':other이(가) 거부되면 :attribute은(는) 금지됩니다.', + 'prohibited_unless' => ':other이(가) :values에 없으면 :attribute은(는) 금지됩니다.', + 'prohibits' => ':attribute은(는) :other이(가) 있는 것을 금지합니다.', + 'regex' => ':attribute 형식이 유효하지 않습니다.', + 'required' => ':attribute은(는) 필수입니다.', + 'required_array_keys' => ':attribute에는 다음 항목이 포함되어야 합니다: :values.', + 'required_if' => ':other이(가) :value일 때 :attribute은(는) 필수입니다.', + 'required_if_accepted' => ':other이(가) 승인되면 :attribute은(는) 필수입니다.', + 'required_if_declined' => ':other이(가) 거부되면 :attribute은(는) 필수입니다.', + 'required_unless' => ':other이(가) :values에 없으면 :attribute은(는) 필수입니다.', + 'required_with' => ':values이(가) 있을 때 :attribute은(는) 필수입니다.', + 'required_with_all' => ':values이(가) 모두 있을 때 :attribute은(는) 필수입니다.', + 'required_without' => ':values이(가) 없을 때 :attribute은(는) 필수입니다.', + 'required_without_all' => ':values 중 어느 것도 없을 때 :attribute은(는) 필수입니다.', + 'same' => ':attribute은(는) :other와(과) 일치해야 합니다.', + 'size' => [ + 'array' => ':attribute은(는) :size개의 항목을 포함해야 합니다.', + 'file' => ':attribute은(는) :size킬로바이트여야 합니다.', + 'numeric' => ':attribute은(는) :size여야 합니다.', + 'string' => ':attribute은(는) :size자여야 합니다.', + ], + 'starts_with' => ':attribute은(는) 다음 중 하나로 시작해야 합니다: :values.', + 'string' => ':attribute은(는) 문자열이어야 합니다.', + 'timezone' => ':attribute은(는) 유효한 시간대여야 합니다.', + 'unique' => ':attribute은(는) 이미 사용 중입니다.', + 'uploaded' => ':attribute 업로드에 실패했습니다.', + 'uppercase' => ':attribute은(는) 대문자여야 합니다.', + 'url' => ':attribute은(는) 유효한 URL이어야 합니다.', + 'ulid' => ':attribute은(는) 유효한 ULID여야 합니다.', + 'uuid' => ':attribute은(는) 유효한 UUID여야 합니다.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/ko/workspaces.php b/lang/ko/workspaces.php new file mode 100644 index 00000000..e1f6b949 --- /dev/null +++ b/lang/ko/workspaces.php @@ -0,0 +1,50 @@ + '워크스페이스', + 'select_title' => '내 워크스페이스', + 'select_description' => '계속하려면 워크스페이스를 선택하세요', + 'current' => '현재', + 'connections' => ':count개 연결', + 'posts' => ':count개 게시물', + + 'create' => [ + 'page_title' => '워크스페이스 만들기', + 'title' => '워크스페이스 설정하기', + 'description' => '회원님이나 프로젝트에 대해 간단히 알려주세요. AI가 생성하는 게시물을 회원님의 보이스에 맞게 조정하는 데 사용됩니다.', + 'website' => '웹사이트', + 'website_placeholder' => 'https://yourbrand.com', + 'autofill' => '웹사이트에서 자동 채우기', + 'autofill_missing_url' => '먼저 URL을 입력하세요.', + 'autofill_success' => '브랜드 정보를 불러왔습니다.', + 'autofill_error' => '자동으로 채울 수 없습니다. 필드를 직접 입력할 수 있습니다.', + 'autofill_errors' => [ + 'unreachable' => '해당 웹사이트에 연결할 수 없습니다 (:reason).', + 'http_status' => '웹사이트가 예상치 못한 상태를 반환했습니다 (:status).', + 'invalid_scheme' => 'http 및 https URL만 지원됩니다.', + 'missing_host' => 'URL에 호스트가 없습니다.', + 'unresolvable_host' => '호스트를 확인할 수 없습니다 (:host).', + 'private_network' => '사설 네트워크를 가리키는 URL은 허용되지 않습니다.', + ], + 'logo_captured' => '웹사이트에서 로고를 가져왔습니다.', + 'name' => '워크스페이스 이름', + 'name_placeholder' => '예: Acme Inc', + 'brand_description' => '브랜드 설명', + 'brand_description_placeholder' => '브랜드는 무엇을 하나요?', + 'content_language' => '콘텐츠 언어', + 'content_language_description' => 'AI가 생성하는 캡션이 이 언어로 작성됩니다.', + 'brand_color' => '브랜드 색상', + 'background_color' => '배경 색상', + 'text_color' => '텍스트 색상', + 'submit' => '워크스페이스 만들기', + 'success' => '워크스페이스가 생성되었습니다. 게시를 시작하려면 소셜 계정을 연결하세요.', + ], + + 'cannot_delete_last' => '유일한 워크스페이스는 삭제할 수 없습니다. 계정을 닫으려면 결제 설정에서 구독을 취소하세요.', + + 'flash' => [ + 'deleted' => '워크스페이스가 성공적으로 삭제되었습니다.', + ], +]; diff --git a/lang/nl/accounts.php b/lang/nl/accounts.php new file mode 100644 index 00000000..3536023c --- /dev/null +++ b/lang/nl/accounts.php @@ -0,0 +1,148 @@ + 'Koppelingen', + 'page_title' => 'Social accounts', + 'description' => 'Overzicht van al je gekoppelde social accounts', + 'connect_cta' => 'Koppelen', + + 'not_connected' => 'Niet gekoppeld', + 'connect' => 'Koppelen', + 'connection_lost' => 'Verbinding verbroken', + 'reconnect' => 'Opnieuw koppelen', + 'reconnect_account' => 'Account opnieuw koppelen', + 'view_profile' => 'Profiel bekijken', + 'disconnect' => 'Loskoppelen', + + 'descriptions' => [ + 'linkedin' => 'Koppel je LinkedIn-profiel of bedrijfspagina', + 'linkedin-page' => 'Koppel een LinkedIn-bedrijfspagina', + 'x' => 'Koppel je X-account (Twitter)', + 'tiktok' => 'Koppel je TikTok-account', + 'youtube' => 'Koppel een YouTube-kanaal', + 'facebook' => 'Koppel een Facebook-pagina', + 'instagram' => 'Koppel een Instagram-professioneel account', + 'instagram-facebook' => 'Koppel Instagram via een Facebook-pagina', + 'threads' => 'Koppel je Threads-account', + 'pinterest' => 'Koppel je Pinterest-account', + 'bluesky' => 'Koppel je Bluesky-account', + 'mastodon' => 'Koppel je Mastodon-account', + 'telegram' => 'Koppel een Telegram-kanaal of -groep', + 'discord' => 'Koppel een Discord-server', + ], + + 'disconnect_modal' => [ + 'title' => 'Account loskoppelen', + 'description' => 'Weet je zeker dat je dit account wilt loskoppelen? Je kunt het op elk moment opnieuw koppelen.', + 'confirm' => 'Loskoppelen', + 'cancel' => 'Annuleren', + ], + + 'bluesky' => [ + 'title' => 'Bluesky koppelen', + 'description' => 'Voer je inloggegevens in om te koppelen', + 'email' => 'E-mail', + 'email_placeholder' => 'jouwhandle.bsky.social', + 'app_password' => 'App-wachtwoord', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'Gebruik voor de veiligheid een App-wachtwoord. Maak er een aan op bsky.app/settings.', + 'submit' => 'Bluesky koppelen', + 'submitting' => 'Koppelen...', + ], + + 'mastodon' => [ + 'title' => 'Mastodon koppelen', + 'description' => 'Voer je Mastodon-instance in', + 'instance_url' => 'Instance-URL', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Voer de URL van je Mastodon-instance in (bijv. mastodon.social, techhub.social)', + 'submit' => 'Doorgaan met Mastodon', + 'submitting' => 'Koppelen...', + ], + + 'telegram' => [ + 'title' => 'Telegram koppelen', + 'description' => 'Koppel een kanaal of groep', + 'step_admin' => 'Voeg :bot toe als beheerder aan je Telegram-kanaal of -groep.', + 'step_command' => 'Plaats deze opdracht in het kanaal of de groep:', + 'waiting' => 'Wachten tot het kanaal koppelt…', + 'connected' => 'Kanaal gekoppeld!', + 'connected_toast' => 'Telegram-kanaal succesvol gekoppeld!', + 'copied_toast' => 'Opdracht gekopieerd naar klembord', + 'copy_tooltip' => 'Opdracht kopiëren', + 'expired' => 'Deze code is verlopen. Genereer een nieuwe om het opnieuw te proberen.', + 'new_code' => 'Genereer een nieuwe code', + 'retry' => 'Opnieuw proberen', + 'error_generic' => 'Kon de koppeling niet starten. Probeer het opnieuw.', + 'network_taken' => 'Deze workspace heeft al een Telegram-kanaal gekoppeld. Koppel dat eerst los.', + ], + + 'facebook' => [ + 'title' => 'Facebook-pagina selecteren', + 'description' => 'Kies welke pagina je wilt koppelen', + 'no_pages' => 'Geen pagina\'s gevonden', + 'no_pages_description' => 'Je bent geen beheerder van een Facebook-pagina.', + 'page_label' => 'Facebook-pagina', + 'view' => 'Bekijken', + 'choose' => 'Kiezen', + ], + + 'instagram_facebook' => [ + 'title' => 'Instagram-account selecteren', + 'description' => 'Kies welk Instagram-account je wilt koppelen', + 'no_pages' => 'Geen Instagram-accounts gevonden', + 'no_pages_description' => 'Er zijn geen Facebook-pagina\'s met gekoppelde Instagram-zakelijke accounts gevonden.', + 'view' => 'Bekijken', + 'choose' => 'Kiezen', + ], + + 'linkedin' => [ + 'title' => 'LinkedIn-pagina selecteren', + 'description' => 'Kies welke pagina je wilt koppelen', + 'no_pages' => 'Geen pagina\'s gevonden', + 'no_pages_description' => 'Je bent geen beheerder van een LinkedIn-pagina.', + 'page_label' => 'LinkedIn-pagina', + 'select_title' => 'Waar wil je posten?', + 'select_subtitle' => 'Post als jezelf of kies een bedrijfspagina die je beheert.', + 'person_tag' => 'Persoon', + 'organization_tag' => 'Organisatie', + 'view' => 'Bekijken', + 'choose' => 'Kiezen', + ], + + 'flash' => [ + 'disconnected' => 'Account succesvol losgekoppeld!', + 'connected' => 'Account succesvol gekoppeld!', + 'session_expired' => 'Sessie verlopen. Probeer het opnieuw.', + 'workspace_not_found' => 'Workspace niet gevonden.', + 'activated' => 'Account geactiveerd!', + 'deactivated' => 'Account gedeactiveerd!', + 'already_connected' => 'Dit platform is al gekoppeld.', + 'no_youtube_channels' => 'Geen YouTube-kanalen gevonden. Maak eerst een kanaal aan.', + ], + + 'popup_callback' => [ + 'title_success' => 'Gekoppeld', + 'title_error' => 'Fout', + 'closing' => 'Dit venster wordt automatisch gesloten...', + 'manual_close' => 'Je kunt dit venster sluiten.', + 'popup_blocked' => 'Kon het koppelvenster niet openen. Sta pop-ups toe en probeer het opnieuw.', + 'connected' => 'Account gekoppeld!', + 'reconnected' => 'Account opnieuw gekoppeld!', + 'error_connecting' => 'Fout bij het koppelen van het account. Probeer het opnieuw.', + 'network_taken' => 'Deze workspace heeft al een account voor dit netwerk. Koppel dat eerst los.', + 'error_connecting_page' => 'Fout bij het koppelen van de pagina. Probeer het opnieuw.', + 'error_connecting_channel' => 'Fout bij het koppelen van het kanaal. Probeer het opnieuw.', + 'session_expired' => 'Sessie verlopen. Probeer het opnieuw.', + 'workspace_not_found' => 'Workspace niet gevonden.', + 'invalid_state' => 'Ongeldige status. Probeer het opnieuw.', + 'failed_to_authenticate' => 'Authenticatie mislukt.', + 'failed_to_get_profile' => 'Kon profiel niet ophalen.', + 'page_not_found' => 'Pagina niet gevonden.', + 'channel_not_found' => 'Kanaal niet gevonden.', + 'no_facebook_pages' => 'Geen Facebook-pagina\'s gevonden. Je moet beheerder zijn van ten minste één pagina.', + 'no_facebook_instagram_pages' => 'Geen Facebook-pagina\'s met gekoppelde Instagram-accounts gevonden.', + 'no_youtube_channels' => 'Geen YouTube-kanalen gevonden. Maak eerst een kanaal aan.', + 'not_linkedin_admin' => 'Je bent geen beheerder van een LinkedIn-pagina.', + ], +]; diff --git a/lang/nl/analytics.php b/lang/nl/analytics.php new file mode 100644 index 00000000..e62378ec --- /dev/null +++ b/lang/nl/analytics.php @@ -0,0 +1,55 @@ + 'Geen gekoppelde accounts met statistieken.', + 'no_accounts_match' => 'Geen accounts komen overeen.', + 'search_account' => 'Account zoeken…', + 'select_account' => 'Selecteer een account om statistieken te bekijken.', + 'no_data' => 'Geen statistieken beschikbaar.', + + 'metrics' => [ + 'avg_view_duration' => 'Gem. kijkduur (s)', + 'avg_view_percentage' => 'Gem. kijkpercentage', + 'bookmarks' => 'Bladwijzers', + 'clicks' => 'Klikken', + 'comments' => 'Reacties', + 'custom_reaction' => 'Aangepast', + 'engagement' => 'Betrokkenheid', + 'favourites' => 'Favorieten', + 'followers' => 'Volgers', + 'following' => 'Volgend', + 'impressions' => 'Weergaven', + 'interactions' => 'Interacties', + 'likes' => 'Likes', + 'members' => 'Leden', + 'minutes_watched' => 'Bekeken minuten', + 'organic_followers' => 'Organische volgers', + 'outbound_clicks' => 'Uitgaande klikken', + 'page_followers' => 'Paginavolgers', + 'page_reach' => 'Paginabereik', + 'page_views' => 'Paginaweergaven', + 'paid_followers' => 'Betaalde volgers', + 'pin_click_rate' => 'Pin-klikpercentage', + 'pin_clicks' => 'Pin-klikken', + 'posts_engagement' => 'Postbetrokkenheid', + 'posts_reach' => 'Postbereik', + 'quotes' => 'Citaten', + 'reach' => 'Bereik', + 'reblogs' => 'Reblogs', + 'recent_comments' => 'Recente reacties', + 'recent_likes' => 'Recente likes', + 'recent_shares' => 'Recent gedeeld', + 'replies' => 'Antwoorden', + 'reposts' => 'Reposts', + 'retweets' => 'Retweets', + 'saves' => 'Opgeslagen', + 'shares' => 'Keer gedeeld', + 'subscribers' => 'Abonnees', + 'subscribers_gained' => 'Nieuwe abonnees', + 'subscribers_lost' => 'Verloren abonnees', + 'total_likes' => 'Totaal likes', + 'video_views' => 'Videoweergaven', + 'videos' => 'Video\'s', + 'views' => 'Weergaven', + ], +]; diff --git a/lang/nl/assets.php b/lang/nl/assets.php new file mode 100644 index 00000000..2261883d --- /dev/null +++ b/lang/nl/assets.php @@ -0,0 +1,52 @@ + 'Assets', + + 'tabs' => [ + 'my_uploads' => 'Mijn uploads', + 'stock_photos' => 'Stockfoto\'s', + 'gifs' => 'GIFs', + ], + + 'upload' => [ + 'drag_drop' => 'Sleep je bestanden hierheen, of klik om te selecteren', + 'formats' => 'JPEG, PNG, GIF, WebP, MP4, PDF', + 'uploading' => 'Uploaden...', + 'failed' => ':file kon niet worden geüpload. Probeer het opnieuw.', + ], + + 'empty' => [ + 'title' => 'Nog geen assets', + 'description' => 'Upload afbeeldingen en video\'s om je mediabibliotheek op te bouwen.', + ], + + 'save_to_assets' => 'Opslaan in assets', + 'saved' => 'Opgeslagen in je assets!', + 'create_post' => 'Post aanmaken', + 'add_to_post' => 'Toevoegen aan post', + 'search_placeholder' => 'Media zoeken...', + + 'delete' => [ + 'title' => 'Asset verwijderen', + 'description' => 'Weet je zeker dat je deze asset wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + 'confirm' => 'Verwijderen', + 'cancel' => 'Annuleren', + ], + + 'unsplash' => [ + 'search_placeholder' => 'Gratis foto\'s zoeken...', + 'no_results' => 'Geen foto\'s gevonden', + 'no_results_description' => 'Probeer een andere zoekterm.', + 'trending' => 'Populair op Unsplash', + 'start_searching' => 'Zoek naar gratis stockfoto\'s van Unsplash', + ], + + 'giphy' => [ + 'trending' => 'Populair op Giphy', + 'search_placeholder' => 'GIFs zoeken...', + 'no_results' => 'Geen GIFs gevonden', + 'no_results_description' => 'Probeer een andere zoekterm.', + 'powered_by' => 'Mogelijk gemaakt door GIPHY', + ], +]; diff --git a/lang/nl/auth.php b/lang/nl/auth.php new file mode 100644 index 00000000..b1cbaaa3 --- /dev/null +++ b/lang/nl/auth.php @@ -0,0 +1,141 @@ + 'Deze gegevens komen niet overeen met onze administratie.', + 'password' => 'Het opgegeven wachtwoord is onjuist.', + 'throttle' => 'Te veel inlogpogingen. Probeer het over :seconds seconden opnieuw.', + + 'flash' => [ + 'welcome' => 'Welkom bij TryPost!', + 'welcome_trial' => 'Welkom bij TryPost! Je proefperiode is gestart.', + ], + + 'legal' => 'Door door te gaan ga je akkoord met onze Servicevoorwaarden en Privacybeleid.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'Visuele kalender', + 'description' => 'Plan en agendeer je content met een intuïtieve drag-and-drop-kalender voor al je social accounts.', + ], + 'scheduling' => [ + 'title' => 'Slim plannen', + 'description' => 'Plan posts voor LinkedIn, X, Instagram, TikTok, YouTube en meer — allemaal vanaf één plek.', + ], + 'media' => [ + 'title' => 'Rijke media', + 'description' => 'Publiceer afbeeldingen, carrousels, stories en reels. Elk platform krijgt automatisch het juiste formaat.', + ], + 'video' => [ + 'title' => 'Video publiceren', + 'description' => 'Upload video\'s één keer en publiceer naar TikTok, YouTube Shorts, Instagram Reels en Facebook Reels.', + ], + 'team' => [ + 'title' => 'Teamworkspaces', + 'description' => 'Nodig je team uit, wijs rollen toe en beheer meerdere merken vanuit aparte workspaces.', + ], + 'signatures' => [ + 'title' => 'Handtekeningen', + 'description' => 'Sla herbruikbare handtekeningen op (hashtags, links, afsluitingen) en voeg ze met één klik aan posts toe.', + ], + ], + + 'or_continue_with' => 'Of ga verder met', + 'or_continue_with_email' => 'Of ga verder met e-mail', + 'google_login' => 'Inloggen met Google', + 'google_signup' => 'Aanmelden met Google', + 'github_login' => 'Inloggen met GitHub', + 'github_signup' => 'Aanmelden met GitHub', + 'github_email_unavailable' => 'Kan je e-mailadres niet ophalen van GitHub. Maak je GitHub-e-mailadres openbaar of verleen de e-mailscope en probeer het opnieuw.', + + 'signup_success' => [ + 'page_title' => 'Welkom', + 'title' => 'Je account wordt ingesteld', + 'description' => 'Dit duurt meestal maar een paar seconden...', + ], + + 'login' => [ + 'title' => 'Log in op je account', + 'description' => 'Voer hieronder je e-mailadres en wachtwoord in om in te loggen', + 'page_title' => 'Inloggen', + 'email' => 'E-mailadres', + 'password' => 'Wachtwoord', + 'forgot_password' => 'Wachtwoord vergeten?', + 'remember_me' => 'Ingelogd blijven', + 'submit' => 'Inloggen', + 'no_account' => 'Nog geen account?', + 'sign_up' => 'Aanmelden', + ], + + 'register' => [ + 'title' => 'Je hele social kalender, op één plek', + 'description' => 'Maak je account aan en begin met het plannen van posts voor elk netwerk.', + 'page_title' => 'Registreren', + 'signup_with_email' => 'Aanmelden met e-mail', + 'name' => 'Naam', + 'name_placeholder' => 'Volledige naam', + 'email' => 'E-mailadres', + 'password' => 'Wachtwoord', + 'show_password' => 'Wachtwoord tonen', + 'hide_password' => 'Wachtwoord verbergen', + 'submit' => 'Account aanmaken', + 'has_account' => 'Heb je al een account?', + 'log_in' => 'Inloggen', + ], + + 'forgot_password' => [ + 'title' => 'Wachtwoord vergeten', + 'description' => 'Voer je e-mailadres in om een link te ontvangen om je wachtwoord opnieuw in te stellen', + 'page_title' => 'Wachtwoord vergeten', + 'email' => 'E-mailadres', + 'submit' => 'Stuur reset-link per e-mail', + 'return_to' => 'Of ga terug naar', + 'log_in' => 'inloggen', + ], + + 'reset_password' => [ + 'title' => 'Wachtwoord opnieuw instellen', + 'description' => 'Voer hieronder je nieuwe wachtwoord in', + 'page_title' => 'Wachtwoord opnieuw instellen', + 'email' => 'E-mail', + 'password' => 'Wachtwoord', + 'confirm_password' => 'Bevestig wachtwoord', + 'confirm_placeholder' => 'Bevestig wachtwoord', + 'submit' => 'Wachtwoord opnieuw instellen', + ], + + 'verify_email' => [ + 'title' => 'E-mail verifiëren', + 'description' => 'Verifieer je e-mailadres door op de link te klikken die we je zojuist per e-mail hebben gestuurd.', + 'page_title' => 'E-mailverificatie', + 'link_sent' => 'Er is een nieuwe verificatielink verstuurd naar het e-mailadres dat je bij registratie hebt opgegeven.', + 'resend' => 'Verificatiemail opnieuw versturen', + 'log_out' => 'Uitloggen', + ], + + 'accept_invite' => [ + 'page_title' => 'Uitnodiging accepteren', + 'title' => 'Je bent uitgenodigd!', + 'description' => 'Je bent uitgenodigd om deel te nemen aan de workspace :workspace.', + 'workspace' => 'Workspace', + 'your_role' => 'Jouw rol', + 'email' => 'E-mail', + 'accept' => 'Uitnodiging accepteren', + 'decline' => 'Uitnodiging weigeren', + 'login_prompt' => 'Log in of maak een account aan om deze uitnodiging te accepteren.', + 'log_in' => 'Inloggen', + 'create_account' => 'Account aanmaken', + ], + +]; diff --git a/lang/nl/automations.php b/lang/nl/automations.php new file mode 100644 index 00000000..91c42751 --- /dev/null +++ b/lang/nl/automations.php @@ -0,0 +1,411 @@ + 'Automatiseringen', + 'default_name' => 'Nieuwe automatisering', + + 'actions' => [ + 'new' => 'Nieuwe automatisering', + 'edit' => 'Bewerken', + 'save' => 'Opslaan', + 'activate' => 'Activeren', + 'pause' => 'Pauzeren', + 'delete' => 'Verwijderen', + 'retry' => 'Opnieuw proberen', + 'guide' => 'Ontdek hoe het werkt', + ], + + 'tabs' => [ + 'build' => 'Bouwen', + 'variables' => 'Variabelen', + 'test' => 'Testen', + ], + + 'nav' => [ + 'workflow' => 'Workflow', + 'invocations' => 'Uitvoeringen', + 'metrics' => 'Statistieken', + 'settings' => 'Instellingen', + ], + + 'settings' => [ + 'general' => 'Algemeen', + 'general_description' => 'Wijzig de naam van deze automatisering.', + 'name_label' => 'Naam', + 'name_saved' => 'Automatisering hernoemd.', + 'status_title' => 'Status', + 'status_description' => 'Activeer om te starten, of pauzeer om te stoppen.', + 'activated_at' => 'Geactiveerd :date', + 'paused_at' => 'Gepauzeerd :date', + 'created_at' => 'Aangemaakt :date', + 'danger_title' => 'Gevarenzone', + 'danger_description' => 'Onomkeerbare acties.', + 'delete_title' => 'Deze automatisering verwijderen', + 'delete_description' => 'Verwijdert de automatisering en de uitvoeringsgeschiedenis permanent.', + ], + + 'status_run' => [ + 'pending' => 'In afwachting', + 'running' => 'Bezig', + 'waiting' => 'Wachten', + 'completed' => 'Voltooid', + 'failed' => 'Mislukt', + 'cancelled' => 'Geannuleerd', + ], + + 'node_type' => [ + 'trigger' => 'Trigger', + 'generate' => 'Content genereren', + 'delay' => 'Vertraging', + 'condition' => 'Voorwaarde', + 'publish' => 'Publiceren', + 'webhook' => 'Webhook', + 'end' => 'Einde', + 'fetch_rss' => 'RSS ophalen', + 'http_request' => 'HTTP-verzoek', + ], + + 'invocations' => [ + 'empty' => 'Nog geen uitvoeringen.', + 'refresh' => 'Vernieuwen', + 'search_placeholder' => 'Zoeken op uitvoerings-ID…', + 'copied' => 'Uitvoerings-ID gekopieerd.', + 'loading' => 'Stappen laden…', + 'no_steps' => 'Geen stappen geregistreerd.', + 'load_error' => 'Kon de stappen niet laden.', + 'steps' => '{0}Geen stappen|{1}:count stap|[2,*]:count stappen', + 'filter' => [ + 'all' => 'Alle statussen', + ], + 'columns' => [ + 'timestamp' => 'Tijdstip', + 'run' => 'Uitvoering', + 'status' => 'Status', + 'message' => 'Laatste bericht', + 'duration' => 'Duur', + ], + 'summary' => [ + 'completed' => 'Workflow voltooid', + 'failed' => 'Workflow mislukt', + 'running' => 'Workflow bezig', + 'cancelled' => 'Workflow geannuleerd', + 'pending' => 'Workflow in afwachting', + ], + ], + + 'metrics' => [ + 'overview' => 'Overzicht', + 'runs_over_time' => 'Uitvoeringen in de tijd', + 'posts_by_platform' => 'Posts per platform', + 'no_posts' => 'Geen posts gepubliceerd in deze periode.', + 'cards' => [ + 'runs' => 'Totaal uitvoeringen', + 'completed' => 'Voltooid', + 'failed' => 'Mislukt', + 'in_progress' => 'Bezig', + 'success_rate' => 'Slagingspercentage', + 'avg_duration' => 'Gem. duur', + 'posts_created' => 'Posts aangemaakt', + ], + 'legend' => [ + 'started' => 'Gestart', + 'completed' => 'Voltooid', + 'failed' => 'Mislukt', + ], + ], + + 'categories' => [ + 'sources' => 'Bronnen', + 'content' => 'Content', + 'flow' => 'Flow', + 'output' => 'Uitvoer', + ], + + 'variables' => [ + 'title' => 'Workflowvariabelen', + 'hint' => 'Herbruikbare waarden die je overal kunt gebruiken met {{ variables.KEY }}. Versleuteld opgeslagen.', + 'empty' => 'Nog geen variabelen.', + 'key' => 'Sleutel', + 'value' => 'Waarde', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'Waarde', + 'add' => 'Nieuwe variabele', + ], + + 'expr' => [ + 'trigger_event' => 'Naam van triggergebeurtenis', + 'trigger_fired_at' => 'Wanneer de trigger afging', + 'trigger_post_id' => 'ID van triggerende post', + 'trigger_post_content' => 'Inhoud van triggerende post', + 'trigger_post_status' => 'Status van triggerende post', + 'trigger_post_scheduled_at' => 'Wanneer de post is gepland', + 'trigger_post_published_at' => 'Wanneer de post is gepubliceerd', + 'fetched_title' => 'Titel van opgehaald item', + 'fetched_link' => 'Link van opgehaald item', + 'fetched_date' => 'Publicatiedatum van opgehaald item', + 'fetched_content' => 'Volledige inhoud van opgehaald item', + 'fetched_description' => 'Samenvatting van opgehaald item', + 'fetched_author' => 'Auteur van opgehaald item', + 'fetched_image' => 'Afbeeldings-URL van opgehaald item', + 'fetched_categories' => 'Categorieën van opgehaald item', + 'fetched_enclosure' => 'Media van opgehaald item (audio/video/bestand)', + 'fetched_pubdate' => 'Publicatiedatum van opgehaald item', + 'fetched_http' => 'Opgehaald HTTP-item (voeg een veld toe)', + 'generated_content' => 'AI-gegenereerde postinhoud', + 'generated_post_url' => 'AI-gegenereerde post-URL', + 'variable' => 'Workflowvariabele', + 'now' => 'Huidige datum en tijd', + ], + + 'test' => [ + 'description' => 'Voert de automatisering van begin tot eind uit met een gesynthetiseerde triggerpayload. Handig om elke node te valideren zonder te wachten op de echte planning of feed.', + 'starting' => 'Testuitvoering starten…', + 'in_progress' => 'Bezig', + 'completed' => 'Voltooid', + 'failed' => 'Mislukt', + 'waiting' => 'Wachten', + 'close' => 'Sluiten', + 'no_node_runs' => 'Wachten tot de eerste node start…', + 'node_input' => 'Invoer', + 'node_output' => 'Uitvoer', + 'node_error' => 'Fout', + 'no_new_items' => 'Geen nieuwe items — er is niets stroomafwaarts uitgevoerd.', + 'error_starting' => 'Kon de testuitvoering niet starten.', + 'with_real_data' => 'Met echte gegevens', + 'run' => 'Test uitvoeren', + 'idle_hint' => 'Klik op Test uitvoeren om de automatisering van begin tot eind uit te voeren.', + 'real_data_hint' => 'Deze test publiceert posts, verplaatst polling-watermerken en activeert externe neveneffecten.', + 'dry_badge' => 'Testuitvoering', + ], + + 'status' => [ + 'draft' => 'Concept', + 'active' => 'Actief', + 'paused' => 'Gepauzeerd', + ], + + 'index' => [ + 'empty_title' => 'Nog geen automatiseringen', + 'empty_description' => 'Maak je eerste automatisering aan om automatisch te gaan publiceren.', + 'columns' => [ + 'name' => 'Naam', + 'status' => 'Status', + 'created' => 'Aangemaakt', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'Kon de automatisering niet activeren.', + 'pause_error_fallback' => 'Kon de automatisering niet pauzeren.', + 'save_error_fallback' => 'Kon de automatisering niet opslaan.', + 'save_success' => 'Automatisering opgeslagen.', + 'empty_canvas_title' => 'Begin met het bouwen van je automatisering', + 'empty_canvas_description' => 'Sleep een node uit het linkerpaneel om te beginnen.', + 'name_placeholder' => 'Naamloze automatisering', + ], + + 'nodes' => [ + 'trigger' => 'Trigger', + 'generate' => 'Genereren', + 'delay' => 'Vertraging', + 'condition' => 'Voorwaarde', + 'publish' => 'Publiceren', + 'webhook' => 'Webhook', + 'end' => 'Einde', + 'end_summary' => 'Stopt de automatisering hier', + 'fetch_rss' => 'RSS ophalen', + 'http_request' => 'HTTP-verzoek', + 'handles' => [ + 'items' => 'heeft items', + 'no_items' => 'geen items', + ], + ], + + 'config' => [ + 'select_placeholder' => 'Selecteren…', + 'invalid_json' => 'Dit is nog geen geldige JSON.', + 'expand_editor' => 'Editor uitvouwen', + 'minimize_editor' => 'Minimaliseren', + + 'trigger' => [ + 'type' => 'Triggertype', + 'types' => [ + 'schedule' => 'Planning', + 'post_published' => 'Wanneer een post wordt gepubliceerd', + 'post_scheduled' => 'Wanneer een post wordt gepland', + ], + 'post_published_hint' => 'Wordt uitgevoerd telkens wanneer een post in deze workspace wordt gepubliceerd. De gepubliceerde post is beschikbaar op {{ trigger.post }} voor stroomafwaartse nodes.', + 'post_scheduled_hint' => 'Wordt uitgevoerd telkens wanneer een post in deze workspace wordt gepland. De geplande post is beschikbaar op {{ trigger.post }}.', + + 'schedule' => [ + 'field' => 'Triggerinterval', + 'fields' => [ + 'minutes' => 'Minuten', + 'hours' => 'Uren', + 'days' => 'Dagen', + 'weeks' => 'Weken', + 'months' => 'Maanden', + ], + 'minutes_interval' => 'Minuten tussen triggers', + 'hours_interval' => 'Uren tussen triggers', + 'days_interval' => 'Dagen tussen triggers', + 'hour' => 'Triggeren op uur', + 'minute' => 'Triggeren op minuut', + 'weekdays' => 'Triggeren op weekdagen', + 'day_of_month' => 'Dag van de maand', + 'weekday_names' => [ + 'sun' => 'Zo', + 'mon' => 'Ma', + 'tue' => 'Di', + 'wed' => 'Wo', + 'thu' => 'Do', + 'fri' => 'Vr', + 'sat' => 'Za', + ], + 'summary' => [ + 'every_n_minutes' => 'Wordt elke minuut uitgevoerd|Wordt elke :count minuten uitgevoerd', + 'every_n_hours' => 'Wordt elk uur uitgevoerd op minuut :minute|Wordt elke :count uur uitgevoerd op minuut :minute', + 'every_n_days' => 'Wordt elke dag uitgevoerd om :time|Wordt elke :count dagen uitgevoerd om :time', + 'weekly' => 'Wordt elke :days uitgevoerd om :time', + 'monthly' => 'Wordt op dag :day van elke maand uitgevoerd om :time', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'Social accounts', + 'social_accounts_empty' => 'Geen gekoppelde social accounts. Koppel er eerst een.', + 'target_slide_count' => 'Te genereren slides', + 'prompt_template' => 'Prompt-sjabloon', + 'prompt_template_hint' => 'Typ {{ om gegevens uit eerdere stappen in te voegen.', + 'image_count' => 'Te genereren afbeeldingen', + 'image_count_hint' => '0 = tekstpost (geen afbeelding). 1 = enkele afbeelding. 2+ = carrousel.', + 'use_brand_voice' => 'Merkstem gebruiken', + 'use_brand_voice_hint' => 'Pas je merkomschrijving en -stem toe. Schakel uit voor getrouwe curatie van externe bronnen (nieuws, RSS).', + 'use_brand_visuals' => 'Merkvisuals gebruiken', + 'use_brand_visuals_hint' => 'Stuur AI-afbeeldingen met je merkkleuren en -identiteit. Schakel uit voor neutrale beelden die alleen door het onderwerp worden bepaald.', + 'style' => 'Stijl', + 'account_summary' => ':count account · :format|:count accounts · :format', + 'formats' => [ + 'single' => 'enkel', + 'carousel' => 'carrousel', + ], + ], + 'delay' => [ + 'duration' => 'Duur', + 'unit' => 'Eenheid', + 'units' => [ + 'minutes' => 'Minuten', + 'hours' => 'Uren', + 'days' => 'Dagen', + ], + ], + 'condition' => [ + 'field' => 'Veld', + 'operator' => 'Operator', + 'operators' => [ + 'contains' => 'bevat', + 'not_contains' => 'bevat niet', + 'equals' => 'is gelijk aan', + 'not_equals' => 'is niet gelijk aan', + 'matches' => 'komt overeen met (regex)', + 'greater_than' => 'groter dan', + 'less_than' => 'kleiner dan', + ], + 'value' => 'Waarde', + ], + 'publish' => [ + 'mode' => 'Modus', + 'modes' => [ + 'now' => 'Nu publiceren', + 'scheduled' => 'Plannen', + 'draft' => 'Opslaan als concept', + ], + 'scheduled_offset' => 'Verschuiving vanaf trigger (minuten)', + 'offset_summary' => ':mode · +:offset min', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'Methode', + 'payload_template' => 'Payload-sjabloon (JSON)', + ], + 'end' => [ + 'reason' => 'Reden (optioneel)', + 'reason_placeholder' => 'bijv. Uitgefilterd door voorwaarde', + ], + 'fetch_rss' => [ + 'feed_url' => 'Feed-URL', + 'feed_url_hint' => 'Bij de eerste uitvoering wordt het watermerk op "nu" gezet, zodat historische items stroomafwaartse nodes niet overspoelen. Volgende uitvoeringen zien alleen items die nieuwer zijn dan de vorige poll.', + 'inspect' => 'Feed inspecteren', + 'inspecting' => 'Inspecteren…', + 'inspect_hint' => 'Haal een voorbeeld op om de beschikbare velden te ontdekken voor gebruik in stroomafwaartse nodes.', + 'inspect_error' => 'Kon deze feed niet lezen. Controleer de URL en probeer het opnieuw.', + 'discovered_fields' => 'Beschikbare velden', + 'discovered_empty' => 'Geen velden gevonden in het laatste item.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'Methode', + 'auth_type' => 'Authenticatie', + 'auth' => [ + 'none' => 'Geen (openbaar)', + 'bearer' => 'Bearer-token', + 'basic' => 'Basic auth', + 'api_key' => 'API-sleutelheader', + ], + 'bearer_token' => 'Bearer-token', + 'basic_username' => 'Gebruikersnaam', + 'basic_password' => 'Wachtwoord', + 'api_key_header' => 'Headernaam', + 'api_key_value' => 'API-sleutel', + 'body_template' => 'Body-sjabloon (JSON)', + 'headers' => 'Headers', + 'header_name' => 'Headernaam', + 'header_value' => 'Waarde', + 'add_header' => 'Header toevoegen', + 'polling_section' => 'Lijst en ontdubbeling (optioneel)', + 'polling_hint' => 'Wanneer het antwoord een lijst is, voert elk item de workflow apart uit. Een enkel object wordt één keer uitgevoerd.', + 'items_path' => 'Itempad', + 'items_path_hint' => 'Laat leeg als het antwoord al een array is. Gebruik een pad met punten (bijv. data.items) voor een geneste array, of * voor een object met id als sleutel.', + 'item_key_path' => 'Itemsleutelpad', + 'item_key_path_hint' => 'JSON-pad naar een uniek id (bijv. id). Al eerder geziene items worden overgeslagen, zodat een feed zonder datums toch alleen nieuwe items doorstuurt.', + 'item_date_path' => 'Itemdatumpad', + 'item_date_path_hint' => 'JSON-pad naar de tijdstempel van het item (bijv. published_at). Heeft de voorkeur boven het sleutelpad indien beschikbaar. De eerste poll legt de basislijn vast en stuurt niets door, zodat een bestaande feed op dag één nooit overspoelt.', + ], + ], + + 'delete' => [ + 'title' => 'Automatisering verwijderen', + 'description' => 'Weet je zeker dat je deze automatisering wilt verwijderen? Alle uitvoeringen en triggeritems worden ook verwijderd. Deze actie kan niet ongedaan worden gemaakt.', + 'confirm' => 'Verwijderen', + 'cancel' => 'Annuleren', + ], + + 'flash' => [ + 'deleted' => 'Automatisering succesvol verwijderd!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'Geen actieve social accounts geconfigureerd voor deze automatisering.', + 'must_have_one_trigger' => 'Een automatisering moet precies één triggernode hebben.', + 'trigger_must_be_connected' => 'De triggernode moet met ten minste één node verbonden zijn.', + 'graph_contains_cycle' => 'De automatiseringsgraaf bevat een cyclus.', + 'only_failed_can_retry' => 'Alleen mislukte uitvoeringen kunnen opnieuw worden geprobeerd.', + 'no_generated_post' => 'Geen gegenereerde post gevonden bij de uitvoering.', + 'webhook_server_error' => 'Serverfout bij de webhook.', + 'webhook_request_failed' => 'Het webhookverzoek kon niet worden voltooid.', + 'webhook_missing_url' => 'De webhooknode mist een URL.', + 'webhook_invalid_payload_json' => 'Het payload-sjabloon is geen geldige JSON.', + 'url_not_allowed' => 'De verzoek-URL verwijst naar een privé of onbereikbaar adres en is geblokkeerd.', + 'node_no_longer_exists' => 'Node :node_id bestaat niet meer in de automatisering.', + 'no_trigger_connection' => 'Geen node verbonden met de triggernode.', + 'fetch_rss_missing_url' => 'De RSS-ophaalnode mist een feed-URL.', + 'fetch_rss_request_failed' => 'Het verzoek voor de RSS-feed is mislukt.', + 'fetch_rss_malformed' => 'De RSS-feed is onjuist opgemaakt.', + 'http_missing_url' => 'De HTTP-verzoeknode mist een URL.', + 'http_request_exception' => 'Het HTTP-verzoek gaf een uitzondering.', + 'http_request_failed' => 'Het HTTP-verzoek is mislukt.', + 'http_items_path_not_array' => 'Het itempad verwees niet naar een lijst.', + ], +]; diff --git a/lang/nl/billing.php b/lang/nl/billing.php new file mode 100644 index 00000000..722e46c1 --- /dev/null +++ b/lang/nl/billing.php @@ -0,0 +1,76 @@ + 'Facturatie', + + 'past_due_notice' => [ + 'title' => 'Betaling achterstallig', + 'description' => 'Werk je betaalmethode bij om je abonnement actief te houden.', + 'cta' => 'Betaling bijwerken', + ], + + 'annual_banner' => [ + 'title' => 'Krijg 2 maanden gratis', + 'description' => 'Stap over op jaarlijkse facturatie en betaal elke maand minder — hetzelfde abonnement, verder verandert er niets.', + 'cta' => 'Upgraden naar jaarlijks', + ], + + 'subscribe' => [ + 'billed_monthly' => 'Maandelijks gefactureerd', + 'billed_yearly' => 'Jaarlijks gefactureerd', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'Abonnement', + 'description' => 'Beheer je abonnement.', + 'label' => 'Abonnement', + 'workspaces' => '{1}:count workspace|[2,*]:count workspaces', + 'per_workspace' => 'per workspace', + 'price' => 'Prijs', + 'month' => 'maand', + 'trial' => 'Proefperiode', + 'active' => 'Actief', + 'past_due' => 'Achterstallig', + 'cancelling' => 'Wordt opgezegd', + 'trial_ends' => 'Proefperiode eindigt', + ], + + 'subscription' => [ + 'title' => 'Abonnement', + 'description' => 'Beheer je betaalmethode, factuurgegevens en abonnement.', + 'payment_method' => 'Betaalmethode', + 'no_payment_method' => 'Nog geen betaalmethode geregistreerd.', + 'expires_on' => 'Verloopt :month/:year', + 'manage_label' => 'Abonnement', + 'manage_stripe' => 'Beheren op Stripe', + ], + + 'invoices' => [ + 'title' => 'Facturen', + 'description' => 'Download je eerdere facturen.', + 'empty' => 'Geen facturen gevonden', + 'paid' => 'Betaald', + ], + + 'flash' => [ + 'plan_changed' => 'Je zit nu op het :plan-abonnement.', + 'switched_to_yearly' => 'Je zit nu op jaarlijkse facturatie.', + 'cannot_manage' => 'Alleen de accounteigenaar kan de facturatie beheren.', + 'credits_exhausted' => 'Geen AI-credits meer — je maandelijkse tegoed van :limit is opgebruikt. Upgrade je abonnement of wacht tot volgende maand.', + 'subscription_required' => 'Een actief abonnement is vereist om AI-functies te gebruiken.', + ], + + 'processing' => [ + 'page_title' => 'Verwerken...', + 'title' => 'Je abonnement wordt verwerkt', + 'description' => 'Wacht even terwijl we je account instellen. Dit duurt maar een moment.', + 'success_title' => 'Je bent helemaal klaar!', + 'success_description' => 'Je abonnement is actief. Je wordt doorgestuurd naar je workspaces...', + 'cancelled_title' => 'Afrekenen geannuleerd', + 'cancelled_description' => 'Je afrekenen is geannuleerd. Er zijn geen kosten in rekening gebracht.', + 'retry' => 'Opnieuw proberen', + ], +]; diff --git a/lang/nl/brands.php b/lang/nl/brands.php new file mode 100644 index 00000000..38554f1d --- /dev/null +++ b/lang/nl/brands.php @@ -0,0 +1,39 @@ + 'Nieuw merk', + 'no_brands_yet' => 'Nog geen merken', + 'no_brands_description' => 'Maak merken aan om je social accounts te organiseren per klant of project', + 'accounts_count' => ':count accounts', + + 'create' => [ + 'title' => 'Merk aanmaken', + 'description' => 'Geef je merk een naam om social accounts te groeperen', + 'name' => 'Merknaam', + 'name_placeholder' => 'bijv. Acme Corp, Persoonlijk', + 'submit' => 'Merk aanmaken', + 'submitting' => 'Aanmaken...', + ], + + 'edit' => [ + 'title' => 'Merk bewerken', + 'description' => 'Werk de naam van dit merk bij', + 'name' => 'Merknaam', + 'name_placeholder' => 'bijv. Acme Corp, Persoonlijk', + 'submit' => 'Wijzigingen opslaan', + 'submitting' => 'Opslaan...', + ], + + 'delete' => [ + 'title' => 'Merk verwijderen', + 'description' => 'Weet je zeker dat je dit merk wilt verwijderen? Social accounts worden losgekoppeld maar niet verwijderd.', + 'confirm' => 'Verwijderen', + 'cancel' => 'Annuleren', + ], + + 'flash' => [ + 'created' => 'Merk succesvol aangemaakt!', + 'updated' => 'Merk succesvol bijgewerkt!', + 'deleted' => 'Merk succesvol verwijderd!', + ], +]; diff --git a/lang/nl/calendar.php b/lang/nl/calendar.php new file mode 100644 index 00000000..00aa43d6 --- /dev/null +++ b/lang/nl/calendar.php @@ -0,0 +1,12 @@ + 'Kalender', + 'today' => 'Vandaag', + 'day' => 'Dag', + 'week' => 'Week', + 'month' => 'Maand', + 'new_post' => 'Nieuwe post', + 'no_content' => 'Geen inhoud', + 'more' => '+:count meer', +]; diff --git a/lang/nl/comments.php b/lang/nl/comments.php new file mode 100644 index 00000000..d6108fff --- /dev/null +++ b/lang/nl/comments.php @@ -0,0 +1,18 @@ + 'Schrijf een reactie...', + 'reply_placeholder' => 'Schrijf een antwoord...', + 'reply' => 'Antwoorden', + 'edit' => 'Bewerken', + 'delete' => 'Verwijderen', + 'edited' => 'bewerkt', + 'save' => 'Opslaan', + 'cancel' => 'Annuleren', + 'send' => 'Verzenden', + 'replying_to' => 'Antwoorden op :name', + 'empty' => 'Nog geen reacties. Begin het gesprek.', + 'load_more' => 'Oudere reacties laden', + 'today' => 'Vandaag', + 'yesterday' => 'Gisteren', +]; diff --git a/lang/nl/common.php b/lang/nl/common.php new file mode 100644 index 00000000..8d880394 --- /dev/null +++ b/lang/nl/common.php @@ -0,0 +1,59 @@ + 'Terug', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'Dit kan niet ongedaan worden gemaakt.', + 'type' => 'Typ', + 'to_confirm' => 'om te bevestigen.', + 'copy_to_clipboard' => 'Kopiëren naar klembord', + 'delete_keyword' => 'verwijderen', + ], + + 'photo_upload' => [ + 'upload' => 'Uploaden', + 'uploading' => 'Uploaden...', + 'remove' => 'Foto verwijderen', + 'hint' => 'Aanbevolen: vierkante afbeelding, max. 2 MB.', + ], + + 'timezone' => [ + 'select' => 'Tijdzone selecteren', + 'search' => 'Tijdzone zoeken...', + 'empty' => 'Geen tijdzone gevonden', + ], + + 'date_picker' => [ + 'select' => 'Datum selecteren', + ], + + 'date_range_picker' => [ + 'placeholder' => 'Kies een datumbereik', + 'today' => 'Vandaag', + 'yesterday' => 'Gisteren', + 'last_7_days' => 'Laatste 7 dagen', + 'last_30_days' => 'Laatste 30 dagen', + 'last_3_months' => 'Laatste 3 maanden', + 'last_6_months' => 'Laatste 6 maanden', + 'last_12_months' => 'Laatste 12 maanden', + 'this_month' => 'Deze maand', + 'last_month' => 'Vorige maand', + 'year_to_date' => 'Dit jaar tot nu toe', + 'last_year' => 'Vorig jaar', + ], + + 'cancel' => 'Annuleren', + 'clear' => 'Wissen', + 'close' => 'Sluiten', + 'loading_more' => 'Meer laden...', + + 'actions' => [ + 'copy' => 'Kopiëren', + 'copied' => 'Gekopieerd', + 'copy_failed' => 'Kopiëren naar klembord mislukt', + ], +]; diff --git a/lang/nl/labels.php b/lang/nl/labels.php new file mode 100644 index 00000000..463a115c --- /dev/null +++ b/lang/nl/labels.php @@ -0,0 +1,54 @@ + 'Labels', + 'description' => 'Maak labels aan om je posts te organiseren en te categoriseren', + 'search' => 'Labels zoeken...', + 'new_label' => 'Nieuw label', + 'no_labels_yet' => 'Nog geen labels', + 'no_search_results' => 'Geen labels komen overeen met je zoekopdracht', + 'try_different_search' => 'Probeer een ander zoekwoord of wis de zoekopdracht.', + 'create_first_label' => 'Maak je eerste label aan', + 'table' => [ + 'name' => 'Naam', + 'created_at' => 'Aangemaakt', + ], + + 'actions' => [ + 'edit' => 'Label bewerken', + 'delete' => 'Label verwijderen', + ], + + 'create' => [ + 'title' => 'Label aanmaken', + 'description' => 'Geef je label een naam en kies een kleur', + 'name' => 'Naam', + 'name_placeholder' => 'Voer een labelnaam in...', + 'color' => 'Kleur', + 'submit' => 'Label aanmaken', + 'submitting' => 'Aanmaken...', + ], + + 'edit' => [ + 'title' => 'Label bewerken', + 'description' => 'Werk de naam en kleur van dit label bij', + 'name' => 'Naam', + 'name_placeholder' => 'Voer een labelnaam in...', + 'color' => 'Kleur', + 'submit' => 'Wijzigingen opslaan', + 'submitting' => 'Opslaan...', + ], + + 'delete' => [ + 'title' => 'Label verwijderen', + 'description' => 'Weet je zeker dat je dit label wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + 'confirm' => 'Verwijderen', + 'cancel' => 'Annuleren', + ], + + 'flash' => [ + 'created' => 'Label succesvol aangemaakt!', + 'updated' => 'Label succesvol bijgewerkt!', + 'deleted' => 'Label succesvol verwijderd!', + ], +]; diff --git a/lang/nl/mail.php b/lang/nl/mail.php new file mode 100644 index 00000000..5b37fb4c --- /dev/null +++ b/lang/nl/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => ':name heeft je genoemd op TryPost', + 'title' => ':name heeft je genoemd', + 'intro' => ':name heeft je genoemd in een reactie op een post.', + 'cta' => 'Reactie bekijken', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :count account moet opnieuw worden gekoppeld in :workspace|[2,*] :count accounts moeten opnieuw worden gekoppeld in :workspace', + 'title' => 'Accounts moeten opnieuw worden gekoppeld', + 'intro' => 'De volgende social accounts in je workspace :workspace zijn losgekoppeld en moeten opnieuw worden gekoppeld:', + 'reasons_title' => 'Dit kan gebeurd zijn omdat:', + 'reason_expired' => 'Toegangstokens zijn verlopen', + 'reason_revoked' => 'Je hebt de toegang van TryPost op het platform ingetrokken', + 'reason_changed' => 'Het platform heeft zijn authenticatievereisten gewijzigd', + 'reconnect_cta' => 'Koppel deze accounts opnieuw om posts te blijven plannen en publiceren.', + 'button' => 'Accounts opnieuw koppelen', + ], +]; diff --git a/lang/nl/notifications.php b/lang/nl/notifications.php new file mode 100644 index 00000000..aa97841e --- /dev/null +++ b/lang/nl/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'Je post is klaar', + 'body' => 'De AI is net klaar. Tik om te bekijken en te publiceren.', + ], + 'account_disconnected' => [ + 'title' => ':platform-account losgekoppeld', + 'body' => ':account moet opnieuw worden gekoppeld', + ], + 'account_token_expired' => [ + 'title' => ':platform-account moet opnieuw worden gekoppeld', + 'body' => 'Sessie van :account verlopen — koppel opnieuw om te blijven posten', + ], +]; diff --git a/lang/nl/onboarding.php b/lang/nl/onboarding.php new file mode 100644 index 00000000..472dd851 --- /dev/null +++ b/lang/nl/onboarding.php @@ -0,0 +1,41 @@ + 'Welkom bij TryPost', + 'description' => 'Vertel ons wat jou of je bedrijf het beste omschrijft, zodat we je ervaring kunnen afstemmen.', + 'continue' => 'Doorgaan', + 'personas' => [ + 'creator' => 'Contentmaker', + 'freelancer' => 'Freelancer', + 'developer' => 'Ontwikkelaar', + 'startup' => 'Startup', + 'agency' => 'Bureau', + 'small_business' => 'Klein bedrijf', + 'marketer' => 'Marketeer', + 'online_store' => 'Webshop', + 'other' => 'Anders', + ], + 'goals_title' => 'Wat is je doel met TryPost?', + 'goals_description' => 'Kies alles wat past en we stellen TryPost voor je in.', + 'goals' => [ + 'save_time' => 'Tijd besparen door overal tegelijk te posten', + 'ai_content' => 'Sneller posts maken met AI', + 'plan_calendar' => 'Mijn posts plannen op een kalender', + 'stay_on_brand' => 'Elke post in lijn met mijn merk houden', + 'grow_audience' => 'Mijn publiek en betrokkenheid laten groeien', + 'drive_sales' => 'Meer verkeer en verkopen krijgen', + 'manage_clients' => 'Meerdere merken of klanten beheren', + 'team_collaboration' => 'Samenwerken met mijn team', + 'automate_api' => 'Posten automatiseren met de API, MCP of code', + 'track_performance' => 'Zien hoe mijn posts presteren', + 'just_exploring' => 'Voorlopig gewoon aan het verkennen', + 'other' => 'Iets anders', + ], + 'connect' => [ + 'title' => 'Koppel je eerste netwerk', + 'description' => 'Koppel ten minste één social account om te beginnen met plannen. Je kunt er altijd meer toevoegen.', + 'must_connect' => 'Koppel ten minste één netwerk om door te gaan.', + ], +]; diff --git a/lang/nl/pagination.php b/lang/nl/pagination.php new file mode 100644 index 00000000..7382e2e8 --- /dev/null +++ b/lang/nl/pagination.php @@ -0,0 +1,19 @@ + '« Vorige', + 'next' => 'Volgende »', + +]; diff --git a/lang/nl/passwords.php b/lang/nl/passwords.php new file mode 100644 index 00000000..2d62deaa --- /dev/null +++ b/lang/nl/passwords.php @@ -0,0 +1,22 @@ + 'Je wachtwoord is opnieuw ingesteld.', + 'sent' => 'We hebben je een link gestuurd om je wachtwoord opnieuw in te stellen.', + 'throttled' => 'Wacht even voordat je het opnieuw probeert.', + 'token' => 'Deze token om het wachtwoord opnieuw in te stellen is ongeldig.', + 'user' => 'We kunnen geen gebruiker met dat e-mailadres vinden.', + +]; diff --git a/lang/nl/posts.php b/lang/nl/posts.php new file mode 100644 index 00000000..888d9985 --- /dev/null +++ b/lang/nl/posts.php @@ -0,0 +1,671 @@ + 'Posts', + 'search' => 'Posts zoeken...', + 'all_posts' => 'Alle posts', + 'new_post' => 'Nieuwe post', + 'no_posts' => 'Geen posts gevonden', + 'no_search_results' => 'Geen posts komen overeen met je zoekopdracht', + 'try_different_search' => 'Probeer een ander zoekwoord of wis de zoekopdracht.', + 'start_creating' => 'Begin met het aanmaken van je eerste post.', + 'filter_by_label' => 'Filteren op label', + 'label_search_placeholder' => 'Labels zoeken...', + 'no_labels' => 'Geen labels gevonden.', + 'clear_label_filter' => 'Labelfilter wissen', + 'table' => [ + 'post' => 'Post', + 'status' => 'Status', + 'content' => 'Inhoud', + 'platforms' => 'Platforms', + 'labels' => 'Labels', + 'scheduled_at' => 'Datum', + 'actions' => '', + ], + 'manage_posts' => 'Beheer al je posts', + 'delete_confirm' => 'Weet je zeker dat je deze post wilt verwijderen?', + 'by' => 'door', + + 'actions' => [ + 'view' => 'Post bekijken', + 'delete' => 'Verwijderen', + 'duplicate' => 'Dupliceren', + 'copy_id' => 'ID kopiëren', + 'copied' => 'ID gekopieerd naar klembord', + ], + + 'form' => [ + 'post_type' => 'Posttype', + 'board' => 'Bord', + 'select_board' => 'Selecteer een bord', + 'search_board' => 'Bord zoeken...', + 'no_board_found' => 'Geen bord gevonden', + 'media' => 'Media', + 'min' => 'Min', + 'uploading' => 'Uploaden...', + 'drop_to_upload' => 'Neerzetten om te uploaden', + 'drag_and_drop' => 'Sleep hierheen of klik om te uploaden', + 'photos_and_videos' => 'Foto\'s en video\'s', + 'photos_only' => 'Alleen foto\'s', + 'videos_only' => 'Alleen video\'s', + 'drag_to_reorder' => 'Sleep om de volgorde te wijzigen', + 'caption' => 'Bijschrift', + 'write_caption' => 'Schrijf je bijschrift...', + 'content_exceeds_platform' => ':platform: :over tekens te lang (max. :limit).', + 'tiktok' => [ + 'settings' => 'TikTok-instellingen', + 'variant_label' => 'Posttype', + 'variant' => [ + 'video' => 'Video', + 'photo' => 'Fotocarrousel', + ], + 'posting_to' => 'Posten naar', + 'privacy_level' => 'Wie kan deze video zien?', + 'privacy_placeholder' => 'Selecteer wie deze post kan bekijken', + 'privacy' => [ + 'public' => 'Openbaar voor iedereen', + 'friends' => 'Vrienden die je terug volgt', + 'followers' => 'Volgers', + 'private' => 'Alleen ik', + 'private_disabled_branded' => 'De zichtbaarheid van branded content kan niet op privé worden ingesteld.', + ], + 'privacy_hint' => 'De beschikbare opties zijn afhankelijk van je TikTok-accountinstellingen.', + 'auto_add_music' => 'Automatisch muziek toevoegen', + 'auto_add_music_hint' => 'Deze functie is alleen beschikbaar voor foto\'s. Er wordt standaardmuziek toegevoegd die je later kunt wijzigen.', + 'yes' => 'Ja', + 'no' => 'Nee', + 'allow_users' => 'Gebruikers toestaan om:', + 'comments' => 'Reageren', + 'duet' => 'Duet', + 'stitch' => 'Stitch', + 'is_aigc' => 'Video gemaakt met AI', + 'disclose' => 'Video-inhoud onthullen', + 'disclose_hint' => 'Schakel in om te onthullen dat deze video goederen of diensten promoot in ruil voor iets van waarde. Je video kan jezelf, een derde partij of beide promoten.', + 'promotional_organic_title' => 'Je foto/video wordt gelabeld als "Promotionele content".', + 'promotional_paid_title' => 'Je foto/video wordt gelabeld als "Betaald partnerschap".', + 'promotional_description' => 'Dit kan niet worden gewijzigd zodra je video is geplaatst.', + 'compliance_incomplete' => 'Je moet aangeven of je content jezelf, een derde partij of beide promoot.', + 'privacy_required' => 'Het TikTok-privacyniveau is vereist bij het publiceren.', + 'branded_cleared_private' => 'De privacy is gewist omdat branded content niet privé kan zijn.', + 'interaction_disabled_by_creator' => 'Uitgeschakeld in je TikTok-accountinstellingen', + 'max_duration_exceeded' => 'De video is :duration s lang, maar dit account kan alleen video\'s tot :max s plaatsen.', + 'processing_hint' => 'Na het publiceren kan het enkele minuten duren voordat de content is verwerkt en op je TikTok-profiel verschijnt.', + 'brand_organic' => 'Je merk', + 'brand_organic_hint' => 'Je promoot jezelf of je eigen merk. Deze video wordt geclassificeerd als Brand Organic.', + 'brand_content' => 'Branded content', + 'brand_content_hint' => 'Je promoot een ander merk of een derde partij. Deze video wordt geclassificeerd als Branded Content.', + 'compliance' => [ + 'agree' => 'Door te plaatsen ga je akkoord met de', + 'music_usage' => 'Bevestiging muziekgebruik', + 'and' => 'en', + 'branded_policy' => 'Branded Content Policy', + ], + ], + 'instagram' => [ + 'settings' => 'Instagram-instellingen', + 'posting_to' => 'Posten naar', + 'variant_label' => 'Posttype', + 'variant' => [ + 'feed' => 'Feedpost', + 'reel' => 'Reel', + 'story' => 'Story', + ], + 'aspect_label' => 'Beeldverhouding', + 'aspect' => [ + 'square' => 'Vierkant (1:1)', + 'portrait' => 'Portret (4:5)', + 'landscape' => 'Liggend (16:9)', + 'original' => 'Origineel', + ], + ], + 'facebook' => [ + 'settings' => 'Facebook-instellingen', + 'posting_to' => 'Posten naar', + 'variant_label' => 'Posttype', + 'variant' => [ + 'post' => 'Post', + 'reel' => 'Reel', + 'story' => 'Story', + ], + 'aspect_label' => 'Beeldverhouding', + 'aspect' => [ + 'square' => 'Vierkant (1:1)', + 'portrait' => 'Portret (4:5)', + 'landscape' => 'Liggend (16:9)', + 'original' => 'Origineel', + ], + ], + 'linkedin' => [ + 'settings' => 'LinkedIn-instellingen', + 'settings_page' => 'LinkedIn-pagina-instellingen', + 'posting_to' => 'Posten naar', + 'document_title' => 'Documenttitel', + 'document_title_placeholder' => 'Getoond op je PDF-documentpost', + ], + 'pinterest' => [ + 'settings' => 'Pinterest-instellingen', + 'posting_to' => 'Posten naar', + 'variant_label' => 'Pintype', + 'variant' => [ + 'pin' => 'Pin', + 'video_pin' => 'Videopin', + 'carousel' => 'Carrousel', + ], + 'board' => 'Bord', + 'select_board' => 'Selecteer een bord', + 'no_boards' => 'Geen Pinterest-borden gevonden. Maak er eerst een aan in je Pinterest-account.', + 'search_board' => 'Borden zoeken...', + 'no_board_found' => 'Geen bord komt overeen met je zoekopdracht.', + 'board_required' => 'Selecteer een Pinterest-bord om deze post te publiceren.', + ], + 'discord' => [ + 'settings' => 'Discord-instellingen', + 'posting_to' => 'Posten naar', + 'channel' => 'Kanaal', + 'select_channel' => 'Selecteer een kanaal', + 'loading_channels' => 'Kanalen laden…', + 'search_channel' => 'Kanalen zoeken…', + 'no_channels' => 'Geen kanalen gevonden.', + 'channel_required' => 'Selecteer een Discord-kanaal om deze post te publiceren.', + 'mentions' => 'Vermeldingen', + 'search_mention' => 'Vermeld een rol of lid…', + 'embeds' => 'Embeds', + 'embed' => 'Embed', + 'add_embed' => 'Embed toevoegen', + 'embed_title' => 'Embed-titel', + 'embed_description' => 'Embed-omschrijving', + 'embed_url' => 'Embed-URL', + 'embed_image' => 'Afbeeldings-URL', + 'embed_color' => 'Kleur', + ], + 'warnings' => [ + 'no_variant' => 'Kies een posttype om door te gaan.', + 'requires_media' => 'Dit posttype vereist ten minste één afbeelding of video.', + 'max_files_exceeded' => 'Dit posttype accepteert maximaal :max mediabestanden (je hebt er :current).', + 'min_files_required' => 'Dit posttype vereist ten minste :min mediabestanden (je hebt er :current).', + 'no_video_allowed' => 'Dit posttype accepteert geen video\'s.', + 'no_image_allowed' => 'Dit posttype accepteert alleen video\'s.', + 'no_document_allowed' => 'Dit posttype accepteert geen PDF-documenten.', + 'no_mixed_media' => 'Afbeeldingen en een video kunnen niet in dezelfde post worden gecombineerd.', + 'document_not_alone' => 'Een PDF moet apart worden geplaatst, zonder andere afbeeldingen of video\'s.', + 'gif_not_allowed' => 'Dit platform accepteert geen GIF. Verwijder de GIF of kies een ander netwerk.', + 'image_too_large' => 'De afbeelding overschrijdt de limiet van :max voor dit posttype (die van jou is :current).', + 'video_too_large' => 'De video overschrijdt de limiet van :max voor dit posttype (die van jou is :current).', + 'document_too_large' => 'De PDF overschrijdt de limiet van :max voor dit posttype (die van jou is :current).', + 'video_too_long' => 'De video is :current lang, maar dit posttype staat maximaal :max toe.', + 'aspect_ratio_too_narrow' => 'Beeldverhouding :current is te hoog voor dit posttype (min. :min).', + 'aspect_ratio_too_wide' => 'Beeldverhouding :current is te breed voor dit posttype (max. :max).', + ], + ], + + 'status' => [ + 'pending' => 'In afwachting', + 'draft' => 'Concept', + 'scheduled' => 'Gepland', + 'publishing' => 'Publiceren', + 'retrying' => 'Opnieuw proberen', + 'published' => 'Gepubliceerd', + 'partially_published' => 'Gedeeltelijk gepubliceerd', + 'failed' => 'Mislukt', + ], + + 'descriptions' => [ + 'draft' => 'Posts die wachten om te worden ingepland', + 'scheduled' => 'Posts die zijn ingepland om te worden gepubliceerd', + 'published' => 'Posts die al zijn gepubliceerd', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'Genereren met AI', + 'title' => 'Post genereren met AI', + 'description' => 'Beschrijf waar de post over moet gaan. De AI gebruikt je merkcontext om hem te schrijven.', + 'prompt_label' => 'Waar gaat deze post over?', + 'prompt_placeholder' => 'bijv. Kondig onze nieuwe functie voor beeldgeneratie voor carrousels aan', + 'preview_label' => 'Voorbeeld', + 'start' => 'Genereren', + 'apply' => 'Gebruik deze inhoud', + 'retry' => 'Opnieuw proberen', + 'cancel' => 'Annuleren', + ], + 'review' => [ + 'button_tooltip' => 'Controleren met AI', + 'title' => 'Post controleren met AI', + 'description' => 'AI controleert op grammatica, spelling en duidelijkheid. Pas de suggesties toe waar je het mee eens bent.', + 'loading' => 'Je tekst controleren...', + 'no_issues' => 'Geen problemen gevonden. Ziet er goed uit.', + 'original' => 'Origineel', + 'suggestion' => 'Suggestie', + 'apply' => 'Toepassen', + 'apply_all' => 'Alles toepassen', + 'applied' => 'Toegepast', + 'cancel' => 'Annuleren', + ], + 'image_regenerate' => [ + 'button' => 'Aanpassen', + 'title' => 'AI-afbeelding aanpassen', + 'description' => 'Beschrijf de correctie. De nieuwe afbeelding vervangt de huidige en behoudt zijn positie in de carrousel.', + 'instruction_label' => 'Instructie', + 'instruction_placeholder' => 'bijv. Herstel de typefout in de kop en maak de achtergrond lichter.', + 'processing' => 'Afbeelding opnieuw genereren... dit kan enkele seconden duren.', + 'submit' => 'Afbeelding opnieuw genereren', + 'cancel' => 'Annuleren', + 'success' => 'Afbeelding bijgewerkt. De nieuwe versie heeft de vorige in je post vervangen.', + 'fallback_title' => 'Verbeter deze afbeeldingstekst', + 'errors' => [ + 'required' => 'Instructie is vereist.', + 'start_failed' => 'Het opnieuw genereren kon niet worden gestart.', + 'unavailable' => 'Deze afbeelding kan op dit moment niet opnieuw worden gegenereerd.', + 'timeout' => 'Het opnieuw genereren duurt langer dan verwacht. Probeer het zo dadelijk opnieuw.', + 'media_not_found' => 'Media-item niet gevonden.', + 'not_ai_media' => 'Alleen AI-gegenereerde media kan opnieuw worden gegenereerd.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'Afbeeldingspost', + 'description' => 'AI-afbeelding met een kop en bijschrift.', + ], + 'carousel' => [ + 'name' => 'Carrousel', + 'description' => 'Carrousel met meerdere slides en een bijschrift.', + ], + 'tweet_card' => [ + 'name' => 'Tweet-kaart', + 'description' => 'Je post in de stijl van een X/Twitter-post.', + ], + 'tweet_card_image' => [ + 'name' => 'Tweet-kaart met foto', + 'description' => 'Je post als een X/Twitter-kaart over een vervaagde foto.', + ], + ], + ], + + 'show' => [ + 'title' => 'Postdetails', + 'edit' => 'Bewerken', + 'back' => 'Terug', + 'no_content' => 'Geen bijschrift', + 'platforms' => 'Platforms', + 'no_platforms' => 'Geen platforms geselecteerd.', + 'view_on_platform' => 'Bekijken op platform', + 'published_on' => 'Gepubliceerd op :date', + 'scheduled_for' => 'Gepland voor :date', + 'draft' => 'Concept', + 'status_pending' => 'In afwachting', + 'metrics' => 'Statistieken', + 'metrics_loading' => 'Statistieken laden…', + 'metrics_unavailable' => 'Statistieken zijn voor dit platform nog niet beschikbaar.', + 'metrics_empty' => 'Geen statistieken teruggegeven.', + ], + + 'edit' => [ + 'title' => 'Post bewerken', + 'view_title' => 'Post bekijken', + 'labels' => 'Labels', + 'no_labels' => 'Nog geen labels aangemaakt', + 'schedule' => 'Plannen', + 'pick_time' => 'Kies tijd', + 'pick_time_past' => 'Kies een datum en tijd in de toekomst.', + 'post_now' => 'Nu posten', + 'time' => 'Tijd', + 'cancel' => 'Annuleren', + 'delete' => 'Verwijderen', + 'schedule_for' => 'Plannen voor', + 'schedule_date' => 'Plandatum', + 'unschedule' => 'Planning opheffen', + 'saving' => 'Opslaan...', + 'saved' => 'Opgeslagen', + 'draft' => 'Concept', + 'media' => 'Media', + 'add_media' => 'Media toevoegen', + 'caption' => 'Bijschrift', + 'caption_placeholder' => 'Schrijf je bijschrift...', + 'compose_title' => 'Een post maken', + 'compose_subtitle' => 'Stel je bericht op en voeg media toe', + 'preview_empty' => [ + 'title' => 'Geen platform geselecteerd', + 'description' => 'Selecteer een platform om naar te publiceren om het voorbeeld te zien.', + ], + 'drop_zone_title' => 'Media toevoegen', + 'drop_zone_subtitle' => 'Sleep bestanden hierheen of klik om te bladeren', + 'add' => 'Toevoegen', + 'publish_to' => 'Publiceren naar', + 'organize' => 'Organiseren', + 'signatures' => 'Handtekeningen', + 'view_on_platform' => 'Bekijken op platform', + 'platform_status' => 'Platformstatus', + 'compliance_incomplete' => 'Sommige platforminstellingen zijn onvolledig of niet compatibel met de bijgevoegde media.', + 'compliance' => [ + 'requires_content_or_media' => 'Voeg tekst of media toe om te publiceren.', + 'requires_media' => 'Voeg een afbeelding of video toe om hier te publiceren.', + 'too_many_files' => 'Slechts :max bestand(en) toegestaan voor dit formaat.', + 'too_few_files' => 'Voeg ten minste :min bestanden toe voor dit formaat.', + 'no_videos' => 'Alleen afbeeldingen zijn toegestaan voor dit formaat.', + 'no_images' => 'Alleen video\'s zijn toegestaan voor dit formaat.', + 'no_mixed_media' => 'Afbeeldingen en video\'s kunnen niet in dezelfde post worden gecombineerd.', + 'no_gifs' => 'GIFs worden hier niet ondersteund.', + 'no_documents' => 'PDF-documenten worden niet ondersteund door dit formaat.', + 'document_not_alone' => 'Een PDF moet apart worden geplaatst, zonder andere afbeeldingen of video\'s.', + 'video_too_large' => 'De video overschrijdt de groottelimiet voor dit platform.', + 'video_too_long' => 'De video moet korter zijn dan :seconds seconden voor dit formaat.', + 'image_too_large' => 'De afbeelding overschrijdt de groottelimiet voor dit platform.', + 'document_too_large' => 'De PDF overschrijdt de groottelimiet voor dit platform.', + 'aspect_ratio_invalid' => 'De beeldverhouding wordt niet ondersteund door dit formaat.', + 'no_content_type' => 'Kies een contenttype voor dit platform.', + 'requires_text' => 'Voeg tekst toe — dit formaat heeft een titel nodig.', + ], + 'publishing' => 'Publiceren...', + 'publishing_overlay_title' => 'Je post wordt gepubliceerd', + 'publishing_overlay_subtitle' => 'Dit kan even duren. Je kunt deze pagina veilig verlaten.', + 'scheduled_overlay_title' => 'Deze post is gepland', + 'scheduled_overlay_subtitle' => 'Gepland voor :date. Hef eerst de planning op om wijzigingen aan te brengen.', + 'unschedule_cta' => 'Planning opheffen om te bewerken', + + 'tabs' => [ + 'preview' => 'Voorbeeld', + 'channels' => 'Kanalen', + 'comments' => 'Reacties', + 'comments_empty' => 'Nog geen reacties.', + ], + + 'media_picker' => [ + 'title' => 'Kiezen uit galerij', + 'search' => 'Media zoeken...', + 'empty' => 'Nog geen media in je galerij', + 'cancel' => 'Annuleren', + 'add' => 'Toevoegen', + 'add_count' => ':count toevoegen', + ], + + 'emoji_picker' => [ + 'search' => 'Emoji zoeken', + 'empty' => 'Geen emoji\'s gevonden', + 'recent' => 'Vaak gebruikt', + 'smileys' => 'Smileys en emotie', + 'people' => 'Mensen en lichaam', + 'nature' => 'Dieren en natuur', + 'food' => 'Eten en drinken', + 'activities' => 'Activiteiten', + 'travel' => 'Reizen en plaatsen', + 'objects' => 'Objecten', + 'symbols' => 'Symbolen', + 'flags' => 'Vlaggen', + ], + + 'status' => [ + 'pending' => 'In afwachting', + 'scheduled' => 'Gepland', + 'published' => 'Gepubliceerd', + 'publishing' => 'Publiceren...', + 'retrying' => 'Opnieuw proberen...', + 'failed' => 'Mislukt', + ], + + 'delete_modal' => [ + 'title' => 'Post verwijderen', + 'description' => 'Weet je zeker dat je deze post wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + 'action' => 'Verwijderen', + 'cancel' => 'Annuleren', + ], + + 'sync_enable' => [ + 'title' => 'Synchronisatie inschakelen?', + 'description' => 'Alle platforms delen dezelfde inhoud. Aangepaste bewerkingen aan afzonderlijke platforms worden vervangen door de huidige inhoud.', + 'cancel' => 'Annuleren', + 'action' => 'Synchronisatie inschakelen', + ], + + 'sync_disable' => [ + 'title' => 'Synchronisatie uitschakelen?', + 'description' => 'Elk platform behoudt zijn huidige inhoud, maar toekomstige bewerkingen gelden alleen voor het platform dat je bewerkt.', + 'customize_note' => 'Je kunt de inhoud voor elk platform afzonderlijk aanpassen.', + 'cancel' => 'Annuleren', + 'action' => 'Synchronisatie uitschakelen', + ], + + 'platforms_dialog' => [ + 'title' => 'Platforms selecteren', + 'description' => 'Kies naar welke platforms je deze post wilt publiceren.', + ], + + 'signatures_modal' => [ + 'search' => 'Handtekeningen zoeken...', + 'no_results' => 'Geen handtekeningen gevonden.', + ], + + 'validation' => [ + 'select_board' => 'Selecteer een bord', + 'images_not_supported' => 'Afbeeldingen niet ondersteund', + 'videos_not_supported' => 'Video\'s niet ondersteund', + 'max_images' => 'Max. :count afbeeldingen', + 'requires_media' => 'Media vereist', + 'requires_content' => 'Tekstinhoud is vereist', + 'exceeded' => ':count overschreden', + 'does_not_support_images' => ':platform ondersteunt geen afbeeldingen', + 'supports_up_to_images' => ':platform ondersteunt maximaal :count afbeeldingen', + 'does_not_support_videos' => ':platform ondersteunt geen video\'s', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'Feedpost', + 'description' => 'Verschijnt in je feed en profiel', + ], + 'instagram_reel' => [ + 'label' => 'Reel', + 'description' => 'Korte video tot 90 seconden', + ], + 'instagram_story' => [ + 'label' => 'Story', + 'description' => 'Verdwijnt na 24 uur', + ], + 'linkedin_post' => [ + 'label' => 'Post', + 'description' => 'Standaardpost — enkele afbeelding, meerdere afbeeldingen, video of PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'Post', + 'description' => 'Standaardpost — enkele afbeelding, meerdere afbeeldingen, video of PDF', + ], + 'facebook_post' => [ + 'label' => 'Post', + 'description' => 'Standaardpost op je pagina', + ], + 'facebook_reel' => [ + 'label' => 'Reel', + 'description' => 'Korte video tot 90 seconden', + ], + 'facebook_story' => [ + 'label' => 'Story', + 'description' => 'Verticale videostory, tot 60 seconden', + ], + 'tiktok_video' => [ + 'label' => 'Video', + 'description' => 'Korte video-content', + ], + 'tiktok_photo' => [ + 'label' => 'Fotocarrousel', + 'description' => 'Tot 35 foto\'s als een swipebare carrousel', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => 'Verticale video tot 60 seconden', + ], + 'x_post' => [ + 'label' => 'Post', + 'description' => 'Tweet met tekst en media', + ], + 'threads_post' => [ + 'label' => 'Post', + 'description' => 'Tekstpost met optionele media', + ], + 'pinterest_pin' => [ + 'label' => 'Pin', + 'description' => 'Standaard afbeeldingspin', + ], + 'pinterest_video_pin' => [ + 'label' => 'Videopin', + 'description' => 'Videopin (4s - 15min)', + ], + 'pinterest_carousel' => [ + 'label' => 'Carrousel', + 'description' => 'Carrousel met meerdere afbeeldingen (2-5 afbeeldingen)', + ], + 'bluesky_post' => [ + 'label' => 'Post', + 'description' => 'Tekstpost met optionele afbeeldingen', + ], + 'mastodon_post' => [ + 'label' => 'Post', + 'description' => 'Tekstpost met optionele media', + ], + 'telegram_post' => [ + 'label' => 'Post', + 'description' => 'Tekstpost met optionele media', + ], + 'discord_message' => [ + 'label' => 'Bericht', + 'description' => 'Bericht naar een Discord-kanaal met optionele media en embeds', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'LinkedIn-pagina', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Facebook-pagina', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'Post succesvol ingepland!', + 'deleted' => 'Post succesvol verwijderd!', + 'duplicated' => 'Post gedupliceerd als concept.', + 'cannot_edit_finalized' => 'Deze post is al verwerkt en kan niet opnieuw worden gepubliceerd. Dupliceer hem om het opnieuw te proberen.', + 'cannot_delete_published' => 'Gepubliceerde posts kunnen niet worden verwijderd.', + 'connect_first' => 'Koppel ten minste één social netwerk voordat je een post aanmaakt.', + ], + + 'errors' => [ + 'account_disconnected' => 'Social account is losgekoppeld', + 'account_inactive' => 'Social account is gedeactiveerd', + 'account_token_expired' => 'Sessie van social account verlopen — koppel opnieuw', + ], + + 'delete' => [ + 'title' => 'Post verwijderen?', + 'description' => 'Deze actie kan niet ongedaan worden gemaakt. De post en alle bijbehorende media worden permanent verwijderd.', + 'confirm' => 'Ja, verwijderen', + 'cancel' => 'Annuleren', + ], + + 'create' => [ + 'title' => 'Een nieuwe post maken', + 'description' => 'Kies hoe je wilt beginnen.', + 'scratch_title' => 'Vanaf nul beginnen', + 'scratch_description' => 'Open een lege post en schrijf alles zelf.', + 'ai_title' => 'Genereren met AI', + 'ai_description' => 'Beschrijf wat je wilt en AI genereert de inhoud voor je.', + 'ai_configure_description' => 'Kies een formaat en beschrijf de post die je wilt maken.', + 'ai_pick_template_description' => 'Kies een stijl voor je AI-gegenereerde post.', + 'template_title' => 'Een sjabloon gebruiken', + 'template_description' => 'Kies uit onze samengestelde sjablonen en pas ze aan.', + 'coming_soon' => 'Binnenkort beschikbaar', + + 'preview' => [ + 'image_title' => 'Afbeeldingstitel', + 'image_body' => 'Afbeeldingstekst', + ], + + 'steps' => [ + 'template_picker_title' => 'Kies een stijl', + 'format_title' => 'Kies een formaat', + 'format_description' => 'Selecteer het type post dat je wilt maken.', + 'account_title' => 'Kies een account', + 'account_description' => 'Selecteer het social account om naar te publiceren.', + 'media_title' => 'Media-opties', + 'media_carousel' => 'Hoeveel slides?', + 'media_optional' => 'Afbeeldingen toevoegen?', + 'media_optional_label' => 'Hoeveel afbeeldingen?', + 'media_none' => 'Geen', + 'media_count_label' => 'Aantal afbeeldingen', + 'prompt_title' => 'Beschrijf je post', + 'prompt_label' => 'Waar gaat deze post over?', + 'prompt_placeholder' => 'bijv. Kondig onze nieuwe carrouselfunctie voor Instagram aan', + 'preview_error' => 'Er is iets misgegaan. Probeer het opnieuw.', + 'loading_page_title' => 'Je post wordt gegenereerd', + 'loading_eta' => 'Geschatte tijd: ongeveer :minutes.', + 'loading_eta_minute_one' => '1 minuut', + 'loading_eta_minute_other' => ':count minuten', + 'loading_leave_title' => 'Je kunt gewoon doorwerken.', + 'loading_leave_body' => 'We laten het je weten wanneer de post klaar is.', + 'loading_leave_cta' => 'Ga naar kalender', + 'loading_create_another_cta' => 'Nog een post maken', + 'loading_tip_credits' => 'Elke AI-afbeelding gebruikt ongeveer 15 credits.', + 'loading_tip_edit' => 'Je kunt alles bewerken zodra de post klaar is.', + 'loading_tip_draft' => 'Gegenereerde posts komen in je concepten terecht.', + 'loading_tip_brand' => 'Pas je merkinstellingen aan om toekomstige posts te beïnvloeden.', + 'loading_tip_carousel' => 'Carrousels leveren één slide per geüploade afbeelding.', + 'loading_tip_quality' => 'De beeldkwaliteit is ingesteld op een balans tussen snelheid en kosten.', + 'create' => 'Post aanmaken', + 'back' => 'Terug', + 'next' => 'Doorgaan', + 'cancel' => 'Annuleren', + 'discard' => 'Verwijderen', + 'retry' => 'Opnieuw proberen', + 'no_platforms' => 'Geen gekoppelde accounts', + 'connect_first' => 'Koppel ten minste één social account om AI-generatie te gebruiken.', + 'no_account_for_template' => 'Koppel een compatibel account om dit sjabloon te gebruiken.', + + 'format' => [ + 'instagram_feed' => 'Instagram-feedpost', + 'instagram_carousel' => 'Instagram-carrousel', + 'linkedin_post' => 'LinkedIn-post', + 'linkedin_page_post' => 'LinkedIn-paginapost', + 'x_post' => 'X-post', + 'bluesky_post' => 'Bluesky-post', + 'threads_post' => 'Threads-post', + 'mastodon_post' => 'Mastodon-post', + 'telegram_post' => 'Telegram-post', + 'discord_message' => 'Discord-bericht', + 'facebook_post' => 'Facebook-post', + 'pinterest_pin' => 'Pinterest-pin', + 'instagram_story' => 'Instagram-story', + 'facebook_story' => 'Facebook-story', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'Kies een sjabloon', + 'browser_description' => 'Begin met een samengesteld sjabloon en pas het aan.', + 'search_placeholder' => 'Sjablonen zoeken…', + 'no_search_results' => 'Geen sjablonen komen overeen met je zoekopdracht', + 'try_different_search' => 'Probeer een ander zoekwoord of wis de zoekopdracht.', + 'slides_count' => '{count} slide|{count} slides', + 'all_platforms' => 'Alle platforms', + 'platform_search_placeholder' => 'Platform zoeken…', + 'no_platform_match' => 'Geen platform komt overeen.', + 'use_this' => 'Gebruik dit sjabloon', + 'no_templates' => 'Geen sjablonen beschikbaar.', + 'applying' => 'Sjabloon toepassen…', + 'category' => [ + 'product_launch' => 'Productlancering', + 'promotion' => 'Promotie', + 'educational' => 'Educatief', + 'behind_the_scenes' => 'Achter de schermen', + 'testimonial' => 'Getuigenis', + 'industry_tip' => 'Brancheadvies', + 'event' => 'Evenement', + 'engagement' => 'Betrokkenheid', + ], + ], +]; diff --git a/lang/nl/settings.php b/lang/nl/settings.php new file mode 100644 index 00000000..b3f278e4 --- /dev/null +++ b/lang/nl/settings.php @@ -0,0 +1,356 @@ + 'Instellingen', + 'description' => 'Beheer je profiel- en accountinstellingen', + + 'hub' => [ + 'title' => 'Instellingen', + 'description' => 'Kies wat je wilt beheren.', + 'profile' => [ + 'title' => 'Profiel', + 'description' => 'Werk je persoonlijke gegevens, wachtwoord en meldingsvoorkeuren bij.', + ], + 'workspace' => [ + 'title' => 'Workspace', + 'description' => 'Configureer je workspace, merk, leden en API-sleutels.', + ], + 'account' => [ + 'title' => 'Account', + 'description' => 'Beheer je accountgegevens, gebruik en facturatie.', + ], + ], + + 'nav' => [ + 'profile' => 'Profiel', + 'authentication' => 'Authenticatie', + 'workspace' => 'Workspace', + 'members' => 'Leden', + 'notifications' => 'Meldingen', + 'billing' => 'Facturatie', + ], + + 'notifications' => [ + 'title' => 'Meldingsvoorkeuren', + 'heading' => 'E-mailmeldingen', + 'description' => 'Kies welke e-mailmeldingen je wilt ontvangen', + 'post_published' => 'Post gepubliceerd', + 'post_published_description' => 'Ontvang een e-mail wanneer je post succesvol is gepubliceerd', + 'post_failed' => 'Post mislukt', + 'post_failed_description' => 'Ontvang een e-mail wanneer je post niet kan worden gepubliceerd', + 'account_disconnected' => 'Account losgekoppeld', + 'account_disconnected_description' => 'Ontvang een e-mail wanneer een social account wordt losgekoppeld', + 'save' => 'Voorkeuren opslaan', + ], + + 'profile' => [ + 'title' => 'Profielinstellingen', + 'photo_heading' => 'Profielfoto', + 'photo_description' => 'Upload een profielfoto', + 'heading' => 'Profielgegevens', + 'description' => 'Werk je naam en e-mailadres bij', + 'avatar' => 'Avatar', + 'name' => 'Naam', + 'name_placeholder' => 'Volledige naam', + 'email' => 'E-mailadres', + 'email_placeholder' => 'E-mailadres', + 'email_unverified' => 'Je e-mailadres is niet geverifieerd.', + 'resend_verification' => 'Klik hier om de verificatiemail opnieuw te versturen.', + 'verification_sent' => 'Er is een nieuwe verificatielink naar je e-mailadres verstuurd.', + 'save' => 'Opslaan', + ], + + 'authentication' => [ + 'title' => 'Authenticatie', + 'page_title' => 'Authenticatie-instellingen', + 'sessions' => [ + 'title' => 'Actieve sessies', + 'description' => 'Als je iets verdachts opmerkt, log dan uit op andere apparaten.', + 'unknown_browser' => 'Onbekende browser', + 'unknown_ip' => 'Onbekend IP', + 'on' => 'op', + 'active_now' => 'Nu actief', + 'log_out_others' => 'Uitloggen op andere apparaten', + 'modal_title' => 'Uitloggen op andere apparaten', + 'modal_description_password' => 'Voer je huidige wachtwoord in om te bevestigen dat je op andere browsersessies wilt uitloggen.', + 'modal_description_email' => 'Typ je e-mailadres om te bevestigen dat je op andere browsersessies wilt uitloggen.', + 'password_placeholder' => 'Huidig wachtwoord', + 'email_placeholder' => 'Je account-e-mailadres', + 'cancel' => 'Annuleren', + 'submit' => 'Uitloggen op andere apparaten', + 'email_mismatch' => 'Het e-mailadres komt niet overeen met je account.', + 'flash_logged_out' => 'Je bent uitgelogd op andere apparaten.', + ], + 'password' => [ + 'update_title' => 'Wachtwoord bijwerken', + 'set_title' => 'Wachtwoord instellen', + 'update_description' => 'Zorg dat je account een lang, willekeurig wachtwoord gebruikt om veilig te blijven.', + 'set_description' => 'Voeg een wachtwoord toe zodat je kunt inloggen zonder een gekoppelde provider.', + 'current_password' => 'Huidig wachtwoord', + 'new_password' => 'Nieuw wachtwoord', + 'confirm_password' => 'Bevestig wachtwoord', + 'save' => 'Wachtwoord opslaan', + 'set' => 'Wachtwoord instellen', + ], + 'providers' => [ + 'title' => 'Gekoppelde accounts', + 'description' => 'Log sneller in met deze gekoppelde providers.', + 'connected' => 'Gekoppeld', + 'not_connected' => 'Niet gekoppeld', + 'connect' => 'Koppelen', + 'disconnect' => 'Loskoppelen', + 'flash_disconnected' => ':provider succesvol losgekoppeld.', + 'flash_connected' => ':provider succesvol gekoppeld.', + 'flash_already_linked' => 'Dat :provider-account is al aan een andere gebruiker gekoppeld.', + 'flash_cannot_disconnect' => 'Je kunt je enige inlogmethode niet loskoppelen. Stel eerst een wachtwoord in of koppel een andere provider.', + ], + ], + + 'delete_account' => [ + 'heading' => 'Account verwijderen', + 'description' => 'Verwijder je account en alle bijbehorende gegevens', + 'warning' => 'Waarschuwing', + 'warning_message' => 'Ga voorzichtig te werk, dit kan niet ongedaan worden gemaakt.', + 'button' => 'Account verwijderen', + 'modal_title' => 'Weet je zeker dat je je account wilt verwijderen?', + 'modal_description_password' => 'Zodra je account is verwijderd, worden ook alle bijbehorende gegevens permanent verwijderd. Voer je wachtwoord in om te bevestigen.', + 'modal_description_email' => 'Zodra je account is verwijderd, worden ook alle bijbehorende gegevens permanent verwijderd. Typ je e-mailadres :email om te bevestigen.', + 'password' => 'Wachtwoord', + 'password_placeholder' => 'Wachtwoord', + 'email_placeholder' => 'Je account-e-mailadres', + 'email_mismatch' => 'Het e-mailadres komt niet overeen met je account.', + 'cancel' => 'Annuleren', + 'confirm' => 'Account verwijderen', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'Workspace', + 'brand' => 'Merk', + 'users' => 'Leden', + 'api_keys' => 'API-sleutels', + ], + 'title' => 'Workspace-instellingen', + 'logo_heading' => 'Workspace-logo', + 'logo_description' => 'Upload een logo voor je workspace', + 'heading' => 'Workspacenaam', + 'description' => 'Werk de naam van je workspace bij', + 'members_heading' => 'Leden', + 'members_description' => 'Beheer workspaceleden en uitnodigingen', + 'name' => 'Naam', + 'name_placeholder' => 'Mijn workspace', + 'save' => 'Opslaan', + ], + + 'brand' => [ + 'title' => 'Merk', + 'description' => 'Configureer je merkidentiteit voor AI-gegenereerde content.', + 'name' => 'Workspacenaam', + 'name_placeholder' => 'Mijn merk', + 'website' => 'Website', + 'website_placeholder' => 'https://jouwmerk.nl', + 'brand_description' => 'Omschrijving', + 'brand_description_placeholder' => 'Vertel ons over je merk, wat je doet en wie je publiek is...', + 'voice' => 'Merkstem', + 'voice_description' => 'Kies de eigenschappen die bepalen hoe je content klinkt.', + 'voice_group' => [ + 'pov' => 'Perspectief', + 'formality' => 'Formaliteit', + 'energy' => 'Energie', + 'humor' => 'Humor', + 'attitude' => 'Houding', + 'warmth' => 'Warmte', + 'confidence' => 'Zelfverzekerdheid', + 'style' => 'Stijl', + ], + 'voice_trait' => [ + 'first_person' => 'Eerste persoon', + 'second_person' => 'Tweede persoon (je)', + 'third_person' => 'Derde persoon', + 'formal' => 'Formeel', + 'balanced' => 'Gebalanceerd', + 'casual' => 'Informeel', + 'calm' => 'Rustig', + 'moderate' => 'Gematigd', + 'enthusiastic' => 'Enthousiast', + 'vibrant' => 'Levendig', + 'serious' => 'Serieus', + 'dry' => 'Droog / subtiel', + 'witty' => 'Gevat', + 'playful' => 'Speels', + 'respectful' => 'Respectvol', + 'even_handed' => 'Evenwichtig', + 'bold' => 'Gedurfd', + 'provocative' => 'Provocerend', + 'neutral' => 'Neutraal', + 'friendly' => 'Vriendelijk', + 'empathetic' => 'Empathisch', + 'humble' => 'Bescheiden', + 'confident' => 'Zelfverzekerd', + 'assertive' => 'Assertief', + 'direct' => 'Direct', + 'concise' => 'Beknopt', + 'transparent' => 'Transparant', + 'no_hype' => 'Geen hype', + 'practical' => 'Praktisch', + 'data_driven' => 'Datagedreven', + 'storytelling' => 'Verhalend', + 'inspirational' => 'Inspirerend', + 'educational' => 'Educatief', + 'technical' => 'Technisch', + 'minimalist' => 'Weinig emoji\'s', + ], + 'brand_color' => 'Merkkleur', + 'background_color' => 'Achtergrondkleur', + 'text_color' => 'Tekstkleur', + 'font' => 'Lettertype', + 'image_style' => 'Beeldstijl', + 'image_style_description' => 'Visuele stijl die wordt toegepast bij het genereren van slide- en coverafbeeldingen voor AI-posts.', + 'image_style_cinematic' => 'Cinematisch', + 'image_style_illustration' => 'Illustratie', + 'image_style_isometric_3d' => 'Isometrisch', + 'image_style_cartoon' => 'Cartoon', + 'image_style_typographic' => 'Typografisch', + 'image_style_infographic' => 'Infographic', + 'image_style_minimalist' => 'Minimalistisch', + 'image_style_mockup' => 'Mockup', + 'content_language' => 'Contenttaal', + 'content_language_description' => 'Taal die wordt gebruikt voor AI-gegenereerde bijschriften, hashtags en tekst in gegenereerde afbeeldingen of video\'s.', + ], + + 'members' => [ + 'title' => 'Leden', + 'heading' => 'Teamleden', + 'description' => 'Beheer leden en uitnodigingen voor deze workspace', + + 'cancel' => 'Annuleren', + 'remove' => 'Verwijderen', + 'make_role' => 'Maak :role', + + 'invite' => [ + 'title' => 'Lid uitnodigen', + 'description' => 'Stuur een e-mailuitnodiging om medewerkers toe te voegen', + 'email' => 'E-mail', + 'email_placeholder' => 'medewerker@email.com', + 'role' => 'Rol', + 'role_placeholder' => 'Selecteer een rol', + 'submit' => 'Uitnodiging versturen', + ], + + 'pending' => [ + 'title' => 'Openstaande uitnodigingen', + 'description' => 'Uitnodigingen die op acceptatie wachten', + 'empty' => 'Geen openstaande uitnodigingen', + ], + + 'list' => [ + 'title' => 'Leden', + 'description' => 'Mensen met toegang tot deze workspace', + 'empty' => 'Geen leden behalve de eigenaar', + ], + + 'remove_modal' => [ + 'title' => 'Lid verwijderen', + 'description' => 'Weet je zeker dat je dit lid uit de workspace wilt verwijderen? Ze verliezen de toegang tot alle workspacebronnen.', + 'action' => 'Lid verwijderen', + ], + + 'cancel_invite_modal' => [ + 'title' => 'Uitnodiging annuleren', + 'description' => 'Weet je zeker dat je deze uitnodiging wilt annuleren?', + 'action' => 'Uitnodiging annuleren', + ], + + 'roles' => [ + 'owner' => 'Eigenaar', + 'admin' => 'Beheerder', + 'member' => 'Lid', + 'viewer' => 'Kijker', + ], + + 'flash' => [ + 'invite_sent' => 'Uitnodiging succesvol verstuurd!', + 'invite_deleted' => 'Uitnodiging verwijderd.', + 'member_removed' => 'Lid succesvol verwijderd.', + 'role_updated' => 'Rol van lid bijgewerkt.', + 'wrong_email' => 'Deze uitnodiging is voor een ander e-mailadres.', + 'already_member' => 'Je bent al lid van deze workspace.', + 'invite_accepted' => 'Welkom! Je bent nu lid van de workspace.', + 'invite_declined' => 'Uitnodiging geweigerd.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'Account', + 'usage' => 'Gebruik', + 'billing' => 'Facturatie', + ], + 'title' => 'Accountinstellingen', + 'description' => 'Beheer je accountnaam en factuur-e-mailadres', + 'name' => 'Accountnaam', + 'name_placeholder' => 'Mijn bedrijf', + 'billing_email' => 'Factuur-e-mailadres', + 'billing_email_placeholder' => 'facturatie@bedrijf.com', + 'billing_email_hint' => 'Dit e-mailadres wordt gebruikt voor facturen en factuurcommunicatie van Stripe.', + 'submit' => 'Opslaan', + ], + + 'flash' => [ + 'account_updated' => 'Account succesvol bijgewerkt!', + 'profile_updated' => 'Profiel succesvol bijgewerkt!', + 'password_updated' => 'Wachtwoord succesvol bijgewerkt!', + 'workspace_updated' => 'Instellingen succesvol bijgewerkt!', + 'photo_updated' => 'Foto succesvol bijgewerkt!', + 'photo_deleted' => 'Foto succesvol verwijderd!', + 'logo_updated' => 'Logo succesvol geüpload!', + 'logo_deleted' => 'Logo succesvol verwijderd!', + 'notifications_updated' => 'Meldingsvoorkeuren bijgewerkt!', + ], + + 'api_keys' => [ + 'title' => 'API-sleutels', + 'page_title' => 'API-sleutels', + 'heading' => 'API-sleutels', + 'description' => 'Beheer API-sleutels voor programmatische toegang tot je workspace.', + 'create' => 'API-sleutel aanmaken', + 'copy' => 'Kopiëren', + 'new_token_message' => 'Je nieuwe API-sleutel is aangemaakt. Kopieer hem nu — je kunt hem later niet meer zien.', + 'table' => [ + 'name' => 'Naam', + 'key' => 'Sleutel', + 'status' => 'Status', + 'expires' => 'Verloopt', + 'last_used' => 'Laatst gebruikt', + 'never' => 'Nooit', + ], + 'actions' => [ + 'copy_id' => 'API-sleutel-ID kopiëren', + 'copy_id_success' => 'API-sleutel-ID gekopieerd naar klembord', + 'delete' => 'Verwijderen', + ], + 'empty' => [ + 'title' => 'Nog geen API-sleutels', + 'description' => 'Maak een API-sleutel aan om programmatisch toegang te krijgen tot je workspace.', + ], + 'delete_modal' => [ + 'title' => 'API-sleutel verwijderen', + 'description' => 'Weet je zeker dat je deze API-sleutel wilt verwijderen? Alle applicaties die deze sleutel gebruiken verliezen direct de toegang.', + 'action' => 'API-sleutel verwijderen', + ], + 'create_dialog' => [ + 'title' => 'API-sleutel aanmaken', + 'description' => 'Maak een nieuwe API-sleutel aan voor programmatische toegang tot je workspace.', + 'name' => 'Naam', + 'name_placeholder' => 'bijv. Productie-API-sleutel', + 'expires' => 'Vervaldatum (optioneel)', + 'expires_placeholder' => 'Geen vervaldatum', + 'submit' => 'Aanmaken', + 'cancel' => 'Annuleren', + ], + 'flash' => [ + 'created' => 'API-sleutel succesvol aangemaakt!', + 'deleted' => 'API-sleutel succesvol verwijderd!', + ], + ], +]; diff --git a/lang/nl/sidebar.php b/lang/nl/sidebar.php new file mode 100644 index 00000000..daca60f2 --- /dev/null +++ b/lang/nl/sidebar.php @@ -0,0 +1,61 @@ + 'Workspaces', + 'select_workspace' => 'Workspace selecteren', + 'create_workspace' => 'Workspace aanmaken', + 'create_post' => 'Post aanmaken', + 'profile' => 'Profiel', + 'log_out' => 'Uitloggen', + + 'workspace' => 'Workspace: :name', + 'workspace_select' => 'Workspace: Selecteren', + + 'theme' => 'Thema: :name', + 'theme_light' => 'Licht', + 'theme_dark' => 'Donker', + 'theme_system' => 'Systeem', + + 'language' => 'Taal: :name', + 'language_select' => 'Taal: Selecteren', + + 'groups' => [ + 'posts' => 'Posts', + 'workspace' => 'Workspace', + 'others' => 'Overige', + ], + + 'analytics' => 'Statistieken', + 'automations' => 'Automatiseringen', + 'settings' => 'Instellingen', + + 'posts' => [ + 'calendar' => 'Kalender', + 'all' => 'Alle', + 'scheduled' => 'Gepland', + 'posted' => 'Geplaatst', + 'drafts' => 'Concepten', + ], + + 'workspace' => [ + 'connections' => 'Koppelingen', + 'signatures' => 'Handtekeningen', + 'labels' => 'Labels', + 'assets' => 'Assets', + 'api_keys' => 'API-sleutels', + ], + + 'notifications' => 'Meldingen', + 'mark_all_read' => 'Alles als gelezen markeren', + 'mark_as_read' => 'Als gelezen markeren', + 'archive_all' => 'Alles archiveren', + 'no_notifications' => 'Geen meldingen', + + 'support' => [ + 'docs' => 'Documentatie', + 'referral' => 'Verdien 30% referral', + 'stay_updated' => 'Blijf op de hoogte', + ], +]; diff --git a/lang/nl/signatures.php b/lang/nl/signatures.php new file mode 100644 index 00000000..8af385bc --- /dev/null +++ b/lang/nl/signatures.php @@ -0,0 +1,59 @@ + 'Handtekeningen', + 'description' => 'Maak herbruikbare handtekeningen om snel aan je posts toe te voegen', + 'search' => 'Handtekeningen zoeken...', + 'new' => 'Nieuwe handtekening', + 'empty_title' => 'Nog geen handtekeningen', + 'empty_description' => 'Maak handtekeningen aan om snel hashtags, links of andere herbruikbare tekst aan je posts toe te voegen', + 'no_search_results' => 'Geen handtekeningen komen overeen met je zoekopdracht', + 'try_different_search' => 'Probeer een ander zoekwoord of wis de zoekopdracht.', + 'table' => [ + 'name' => 'Naam', + 'content' => 'Inhoud', + 'created_at' => 'Aangemaakt', + ], + + 'actions' => [ + 'edit' => 'Handtekening bewerken', + 'delete' => 'Handtekening verwijderen', + ], + + 'create' => [ + 'title' => 'Handtekening aanmaken', + 'description' => 'Geef je handtekening een naam en de inhoud om toe te voegen (hashtags, links, aangepaste tekst — alles wat je hergebruikt).', + 'name' => 'Naam', + 'name_placeholder' => 'bijv. Marketing, Reizen, Merkafsluiting', + 'content' => 'Inhoud', + 'content_placeholder' => "#marketing #socialmedia\nMeer weten: https://jouwmerk.nl", + 'content_hint' => 'Hashtags, links, aangepaste intro\'s, afsluitingen — alles wat je aan posts toevoegt.', + 'submit' => 'Handtekening aanmaken', + 'submitting' => 'Aanmaken...', + ], + + 'edit' => [ + 'title' => 'Handtekening bewerken', + 'description' => 'Werk de naam en inhoud van deze handtekening bij.', + 'name' => 'Naam', + 'name_placeholder' => 'bijv. Marketing, Reizen, Merkafsluiting', + 'content' => 'Inhoud', + 'content_placeholder' => "#marketing #socialmedia\nMeer weten: https://jouwmerk.nl", + 'content_hint' => 'Hashtags, links, aangepaste intro\'s, afsluitingen — alles wat je aan posts toevoegt.', + 'submit' => 'Wijzigingen opslaan', + 'submitting' => 'Opslaan...', + ], + + 'delete' => [ + 'title' => 'Handtekening verwijderen', + 'description' => 'Weet je zeker dat je deze handtekening wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + 'confirm' => 'Verwijderen', + 'cancel' => 'Annuleren', + ], + + 'flash' => [ + 'created' => 'Handtekening aangemaakt.', + 'updated' => 'Handtekening bijgewerkt.', + 'deleted' => 'Handtekening verwijderd.', + ], +]; diff --git a/lang/nl/usage.php b/lang/nl/usage.php new file mode 100644 index 00000000..12e65428 --- /dev/null +++ b/lang/nl/usage.php @@ -0,0 +1,15 @@ + 'Gebruik', + + 'section_account' => 'Account', + 'section_account_description' => 'Quota en limieten voor je abonnement.', + 'section_ai' => 'AI-credits', + 'section_ai_description' => 'Credits worden afgeschreven naarmate AI-functies worden gebruikt. Ze worden op de eerste van elke maand gereset.', + + 'workspaces' => 'Workspaces', + 'social_accounts' => 'Social accounts', + 'members' => 'Leden', + 'credits' => 'Credits', +]; diff --git a/lang/nl/validation.php b/lang/nl/validation.php new file mode 100644 index 00000000..c36f3adc --- /dev/null +++ b/lang/nl/validation.php @@ -0,0 +1,200 @@ + 'Het veld :attribute moet worden geaccepteerd.', + 'accepted_if' => 'Het veld :attribute moet worden geaccepteerd wanneer :other :value is.', + 'active_url' => 'Het veld :attribute moet een geldige URL zijn.', + 'after' => 'Het veld :attribute moet een datum na :date zijn.', + 'after_or_equal' => 'Het veld :attribute moet een datum op of na :date zijn.', + 'alpha' => 'Het veld :attribute mag alleen letters bevatten.', + 'alpha_dash' => 'Het veld :attribute mag alleen letters, cijfers, streepjes en underscores bevatten.', + 'alpha_num' => 'Het veld :attribute mag alleen letters en cijfers bevatten.', + 'any_of' => 'Het veld :attribute is ongeldig.', + 'array' => 'Het veld :attribute moet een array zijn.', + 'ascii' => 'Het veld :attribute mag alleen alfanumerieke tekens en symbolen van één byte bevatten.', + 'before' => 'Het veld :attribute moet een datum vóór :date zijn.', + 'before_or_equal' => 'Het veld :attribute moet een datum op of vóór :date zijn.', + 'between' => [ + 'array' => 'Het veld :attribute moet tussen :min en :max items bevatten.', + 'file' => 'Het veld :attribute moet tussen :min en :max kilobytes zijn.', + 'numeric' => 'Het veld :attribute moet tussen :min en :max liggen.', + 'string' => 'Het veld :attribute moet tussen :min en :max tekens bevatten.', + ], + 'boolean' => 'Het veld :attribute moet waar of onwaar zijn.', + 'can' => 'Het veld :attribute bevat een niet-toegestane waarde.', + 'confirmed' => 'De bevestiging van het veld :attribute komt niet overeen.', + 'contains' => 'Het veld :attribute mist een vereiste waarde.', + 'current_password' => 'Het wachtwoord is onjuist.', + 'date' => 'Het veld :attribute moet een geldige datum zijn.', + 'date_equals' => 'Het veld :attribute moet een datum gelijk aan :date zijn.', + 'date_format' => 'Het veld :attribute moet overeenkomen met het formaat :format.', + 'decimal' => 'Het veld :attribute moet :decimal decimalen bevatten.', + 'declined' => 'Het veld :attribute moet worden geweigerd.', + 'declined_if' => 'Het veld :attribute moet worden geweigerd wanneer :other :value is.', + 'different' => 'De velden :attribute en :other moeten verschillend zijn.', + 'digits' => 'Het veld :attribute moet :digits cijfers bevatten.', + 'digits_between' => 'Het veld :attribute moet tussen :min en :max cijfers bevatten.', + 'dimensions' => 'Het veld :attribute heeft ongeldige afbeeldingsafmetingen.', + 'distinct' => 'Het veld :attribute heeft een dubbele waarde.', + 'doesnt_contain' => 'Het veld :attribute mag geen van de volgende bevatten: :values.', + 'doesnt_end_with' => 'Het veld :attribute mag niet eindigen met een van de volgende: :values.', + 'doesnt_start_with' => 'Het veld :attribute mag niet beginnen met een van de volgende: :values.', + 'email' => 'Het veld :attribute moet een geldig e-mailadres zijn.', + 'encoding' => 'Het veld :attribute moet gecodeerd zijn in :encoding.', + 'ends_with' => 'Het veld :attribute moet eindigen met een van de volgende: :values.', + 'enum' => 'De geselecteerde :attribute is ongeldig.', + 'exists' => 'De geselecteerde :attribute is ongeldig.', + 'extensions' => 'Het veld :attribute moet een van de volgende extensies hebben: :values.', + 'file' => 'Het veld :attribute moet een bestand zijn.', + 'filled' => 'Het veld :attribute moet een waarde hebben.', + 'gt' => [ + 'array' => 'Het veld :attribute moet meer dan :value items bevatten.', + 'file' => 'Het veld :attribute moet groter zijn dan :value kilobytes.', + 'numeric' => 'Het veld :attribute moet groter zijn dan :value.', + 'string' => 'Het veld :attribute moet meer dan :value tekens bevatten.', + ], + 'gte' => [ + 'array' => 'Het veld :attribute moet :value items of meer bevatten.', + 'file' => 'Het veld :attribute moet groter dan of gelijk aan :value kilobytes zijn.', + 'numeric' => 'Het veld :attribute moet groter dan of gelijk aan :value zijn.', + 'string' => 'Het veld :attribute moet :value tekens of meer bevatten.', + ], + 'hex_color' => 'Het veld :attribute moet een geldige hexadecimale kleur zijn.', + 'image' => 'Het veld :attribute moet een afbeelding zijn.', + 'in' => 'De geselecteerde :attribute is ongeldig.', + 'in_array' => 'Het veld :attribute moet in :other voorkomen.', + 'in_array_keys' => 'Het veld :attribute moet ten minste een van de volgende sleutels bevatten: :values.', + 'integer' => 'Het veld :attribute moet een geheel getal zijn.', + 'ip' => 'Het veld :attribute moet een geldig IP-adres zijn.', + 'ipv4' => 'Het veld :attribute moet een geldig IPv4-adres zijn.', + 'ipv6' => 'Het veld :attribute moet een geldig IPv6-adres zijn.', + 'json' => 'Het veld :attribute moet een geldige JSON-string zijn.', + 'list' => 'Het veld :attribute moet een lijst zijn.', + 'lowercase' => 'Het veld :attribute moet in kleine letters zijn.', + 'lt' => [ + 'array' => 'Het veld :attribute moet minder dan :value items bevatten.', + 'file' => 'Het veld :attribute moet kleiner zijn dan :value kilobytes.', + 'numeric' => 'Het veld :attribute moet kleiner zijn dan :value.', + 'string' => 'Het veld :attribute moet minder dan :value tekens bevatten.', + ], + 'lte' => [ + 'array' => 'Het veld :attribute mag niet meer dan :value items bevatten.', + 'file' => 'Het veld :attribute moet kleiner dan of gelijk aan :value kilobytes zijn.', + 'numeric' => 'Het veld :attribute moet kleiner dan of gelijk aan :value zijn.', + 'string' => 'Het veld :attribute moet :value tekens of minder bevatten.', + ], + 'mac_address' => 'Het veld :attribute moet een geldig MAC-adres zijn.', + 'max' => [ + 'array' => 'Het veld :attribute mag niet meer dan :max items bevatten.', + 'file' => 'Het veld :attribute mag niet groter zijn dan :max kilobytes.', + 'numeric' => 'Het veld :attribute mag niet groter zijn dan :max.', + 'string' => 'Het veld :attribute mag niet meer dan :max tekens bevatten.', + ], + 'max_digits' => 'Het veld :attribute mag niet meer dan :max cijfers bevatten.', + 'mimes' => 'Het veld :attribute moet een bestand van het type :values zijn.', + 'mimetypes' => 'Het veld :attribute moet een bestand van het type :values zijn.', + 'min' => [ + 'array' => 'Het veld :attribute moet ten minste :min items bevatten.', + 'file' => 'Het veld :attribute moet ten minste :min kilobytes zijn.', + 'numeric' => 'Het veld :attribute moet ten minste :min zijn.', + 'string' => 'Het veld :attribute moet ten minste :min tekens bevatten.', + ], + 'min_digits' => 'Het veld :attribute moet ten minste :min cijfers bevatten.', + 'missing' => 'Het veld :attribute moet ontbreken.', + 'missing_if' => 'Het veld :attribute moet ontbreken wanneer :other :value is.', + 'missing_unless' => 'Het veld :attribute moet ontbreken tenzij :other :value is.', + 'missing_with' => 'Het veld :attribute moet ontbreken wanneer :values aanwezig is.', + 'missing_with_all' => 'Het veld :attribute moet ontbreken wanneer :values aanwezig zijn.', + 'multiple_of' => 'Het veld :attribute moet een veelvoud van :value zijn.', + 'not_in' => 'De geselecteerde :attribute is ongeldig.', + 'not_regex' => 'Het formaat van het veld :attribute is ongeldig.', + 'numeric' => 'Het veld :attribute moet een getal zijn.', + 'password' => [ + 'letters' => 'Het veld :attribute moet ten minste één letter bevatten.', + 'mixed' => 'Het veld :attribute moet ten minste één hoofdletter en één kleine letter bevatten.', + 'numbers' => 'Het veld :attribute moet ten minste één cijfer bevatten.', + 'symbols' => 'Het veld :attribute moet ten minste één symbool bevatten.', + 'uncompromised' => 'De opgegeven :attribute is verschenen in een datalek. Kies een andere :attribute.', + ], + 'present' => 'Het veld :attribute moet aanwezig zijn.', + 'present_if' => 'Het veld :attribute moet aanwezig zijn wanneer :other :value is.', + 'present_unless' => 'Het veld :attribute moet aanwezig zijn tenzij :other :value is.', + 'present_with' => 'Het veld :attribute moet aanwezig zijn wanneer :values aanwezig is.', + 'present_with_all' => 'Het veld :attribute moet aanwezig zijn wanneer :values aanwezig zijn.', + 'prohibited' => 'Het veld :attribute is niet toegestaan.', + 'prohibited_if' => 'Het veld :attribute is niet toegestaan wanneer :other :value is.', + 'prohibited_if_accepted' => 'Het veld :attribute is niet toegestaan wanneer :other is geaccepteerd.', + 'prohibited_if_declined' => 'Het veld :attribute is niet toegestaan wanneer :other is geweigerd.', + 'prohibited_unless' => 'Het veld :attribute is niet toegestaan tenzij :other in :values voorkomt.', + 'prohibits' => 'Het veld :attribute verhindert dat :other aanwezig is.', + 'regex' => 'Het formaat van het veld :attribute is ongeldig.', + 'required' => 'Het veld :attribute is verplicht.', + 'required_array_keys' => 'Het veld :attribute moet vermeldingen bevatten voor: :values.', + 'required_if' => 'Het veld :attribute is verplicht wanneer :other :value is.', + 'required_if_accepted' => 'Het veld :attribute is verplicht wanneer :other is geaccepteerd.', + 'required_if_declined' => 'Het veld :attribute is verplicht wanneer :other is geweigerd.', + 'required_unless' => 'Het veld :attribute is verplicht tenzij :other in :values voorkomt.', + 'required_with' => 'Het veld :attribute is verplicht wanneer :values aanwezig is.', + 'required_with_all' => 'Het veld :attribute is verplicht wanneer :values aanwezig zijn.', + 'required_without' => 'Het veld :attribute is verplicht wanneer :values niet aanwezig is.', + 'required_without_all' => 'Het veld :attribute is verplicht wanneer geen van :values aanwezig is.', + 'same' => 'Het veld :attribute moet overeenkomen met :other.', + 'size' => [ + 'array' => 'Het veld :attribute moet :size items bevatten.', + 'file' => 'Het veld :attribute moet :size kilobytes zijn.', + 'numeric' => 'Het veld :attribute moet :size zijn.', + 'string' => 'Het veld :attribute moet :size tekens bevatten.', + ], + 'starts_with' => 'Het veld :attribute moet beginnen met een van de volgende: :values.', + 'string' => 'Het veld :attribute moet een string zijn.', + 'timezone' => 'Het veld :attribute moet een geldige tijdzone zijn.', + 'unique' => ':attribute is al in gebruik.', + 'uploaded' => 'Het uploaden van :attribute is mislukt.', + 'uppercase' => 'Het veld :attribute moet in hoofdletters zijn.', + 'url' => 'Het veld :attribute moet een geldige URL zijn.', + 'ulid' => 'Het veld :attribute moet een geldige ULID zijn.', + 'uuid' => 'Het veld :attribute moet een geldige UUID zijn.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/nl/workspaces.php b/lang/nl/workspaces.php new file mode 100644 index 00000000..973430eb --- /dev/null +++ b/lang/nl/workspaces.php @@ -0,0 +1,50 @@ + 'Workspaces', + 'select_title' => 'Je workspaces', + 'select_description' => 'Selecteer een workspace om door te gaan', + 'current' => 'Huidige', + 'connections' => ':count koppelingen', + 'posts' => ':count posts', + + 'create' => [ + 'page_title' => 'Maak je workspace aan', + 'title' => 'Stel je workspace in', + 'description' => 'Vertel ons wat over jou of je project. We gebruiken dit om AI-gegenereerde posts af te stemmen op jouw stijl.', + 'website' => 'Website', + 'website_placeholder' => 'https://jouwmerk.nl', + 'autofill' => 'Automatisch invullen vanaf website', + 'autofill_missing_url' => 'Voer eerst een URL in.', + 'autofill_success' => 'Merkinformatie geladen.', + 'autofill_error' => 'Automatisch invullen mislukt. Je kunt de velden handmatig invullen.', + 'autofill_errors' => [ + 'unreachable' => 'We konden die website niet bereiken (:reason).', + 'http_status' => 'De website gaf een onverwachte status terug (:status).', + 'invalid_scheme' => 'Alleen http- en https-URL\'s worden ondersteund.', + 'missing_host' => 'De URL mist een host.', + 'unresolvable_host' => 'We konden de host niet omzetten (:host).', + 'private_network' => 'URL\'s die naar privénetwerken verwijzen zijn niet toegestaan.', + ], + 'logo_captured' => 'Logo opgehaald van je website.', + 'name' => 'Workspacenaam', + 'name_placeholder' => 'bijv. Acme Inc', + 'brand_description' => 'Merkomschrijving', + 'brand_description_placeholder' => 'Wat doet je merk?', + 'content_language' => 'Contenttaal', + 'content_language_description' => 'AI-gegenereerde bijschriften worden in deze taal geschreven.', + 'brand_color' => 'Merkkleur', + 'background_color' => 'Achtergrondkleur', + 'text_color' => 'Tekstkleur', + 'submit' => 'Workspace aanmaken', + 'success' => 'Workspace aangemaakt. Koppel een social account om te beginnen met posten.', + ], + + 'cannot_delete_last' => 'Je kunt je enige workspace niet verwijderen. Zeg je abonnement op in de facturatie-instellingen om je account te sluiten.', + + 'flash' => [ + 'deleted' => 'Workspace succesvol verwijderd.', + ], +]; diff --git a/lang/pl/accounts.php b/lang/pl/accounts.php new file mode 100644 index 00000000..f3a752cd --- /dev/null +++ b/lang/pl/accounts.php @@ -0,0 +1,148 @@ + 'Połączenia', + 'page_title' => 'Konta społecznościowe', + 'description' => 'Przegląd wszystkich Twoich połączonych kont społecznościowych', + 'connect_cta' => 'Połącz', + + 'not_connected' => 'Niepołączone', + 'connect' => 'Połącz', + 'connection_lost' => 'Utracono połączenie', + 'reconnect' => 'Połącz ponownie', + 'reconnect_account' => 'Połącz konto ponownie', + 'view_profile' => 'Zobacz profil', + 'disconnect' => 'Rozłącz', + + 'descriptions' => [ + 'linkedin' => 'Połącz swój profil LinkedIn lub stronę firmową', + 'linkedin-page' => 'Połącz stronę firmową LinkedIn', + 'x' => 'Połącz swoje konto X (Twitter)', + 'tiktok' => 'Połącz swoje konto TikTok', + 'youtube' => 'Połącz kanał YouTube', + 'facebook' => 'Połącz stronę na Facebooku', + 'instagram' => 'Połącz profesjonalne konto Instagram', + 'instagram-facebook' => 'Połącz Instagram przez stronę na Facebooku', + 'threads' => 'Połącz swoje konto Threads', + 'pinterest' => 'Połącz swoje konto Pinterest', + 'bluesky' => 'Połącz swoje konto Bluesky', + 'mastodon' => 'Połącz swoje konto Mastodon', + 'telegram' => 'Połącz kanał lub grupę na Telegramie', + 'discord' => 'Połącz serwer Discord', + ], + + 'disconnect_modal' => [ + 'title' => 'Rozłącz konto', + 'description' => 'Czy na pewno chcesz rozłączyć to konto? Możesz połączyć je ponownie w dowolnym momencie.', + 'confirm' => 'Rozłącz', + 'cancel' => 'Anuluj', + ], + + 'bluesky' => [ + 'title' => 'Połącz Bluesky', + 'description' => 'Wprowadź swoje dane logowania, aby połączyć konto', + 'email' => 'E-mail', + 'email_placeholder' => 'twojnick.bsky.social', + 'app_password' => 'Hasło aplikacji', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'Ze względów bezpieczeństwa użyj hasła aplikacji. Utwórz je na bsky.app/settings.', + 'submit' => 'Połącz Bluesky', + 'submitting' => 'Łączenie...', + ], + + 'mastodon' => [ + 'title' => 'Połącz Mastodon', + 'description' => 'Wprowadź swoją instancję Mastodon', + 'instance_url' => 'Adres URL instancji', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Wprowadź adres URL swojej instancji Mastodon (np. mastodon.social, techhub.social)', + 'submit' => 'Kontynuuj z Mastodon', + 'submitting' => 'Łączenie...', + ], + + 'telegram' => [ + 'title' => 'Połącz Telegram', + 'description' => 'Podłącz kanał lub grupę', + 'step_admin' => 'Dodaj :bot jako administratora swojego kanału lub grupy na Telegramie.', + 'step_command' => 'Opublikuj tę komendę na kanale lub w grupie:', + 'waiting' => 'Oczekiwanie na połączenie kanału…', + 'connected' => 'Kanał połączony!', + 'connected_toast' => 'Kanał Telegram został pomyślnie połączony!', + 'copied_toast' => 'Skopiowano komendę do schowka', + 'copy_tooltip' => 'Kopiuj komendę', + 'expired' => 'Ten kod wygasł. Wygeneruj nowy, aby spróbować ponownie.', + 'new_code' => 'Wygeneruj nowy kod', + 'retry' => 'Spróbuj ponownie', + 'error_generic' => 'Nie udało się rozpocząć łączenia. Spróbuj ponownie.', + 'network_taken' => 'Ta przestrzeń robocza ma już połączony kanał Telegram. Najpierw go rozłącz.', + ], + + 'facebook' => [ + 'title' => 'Wybierz stronę na Facebooku', + 'description' => 'Wybierz stronę, którą chcesz połączyć', + 'no_pages' => 'Nie znaleziono stron', + 'no_pages_description' => 'Nie jesteś administratorem żadnej strony na Facebooku.', + 'page_label' => 'Strona na Facebooku', + 'view' => 'Zobacz', + 'choose' => 'Wybierz', + ], + + 'instagram_facebook' => [ + 'title' => 'Wybierz konto Instagram', + 'description' => 'Wybierz konto Instagram, które chcesz połączyć', + 'no_pages' => 'Nie znaleziono kont Instagram', + 'no_pages_description' => 'Nie znaleziono żadnej strony na Facebooku z powiązanym firmowym kontem Instagram.', + 'view' => 'Zobacz', + 'choose' => 'Wybierz', + ], + + 'linkedin' => [ + 'title' => 'Wybierz stronę LinkedIn', + 'description' => 'Wybierz stronę, którą chcesz połączyć', + 'no_pages' => 'Nie znaleziono stron', + 'no_pages_description' => 'Nie jesteś administratorem żadnej strony LinkedIn.', + 'page_label' => 'Strona LinkedIn', + 'select_title' => 'Gdzie chcesz publikować?', + 'select_subtitle' => 'Publikuj jako Ty lub wybierz stronę firmową, którą zarządzasz.', + 'person_tag' => 'Osoba', + 'organization_tag' => 'Organizacja', + 'view' => 'Zobacz', + 'choose' => 'Wybierz', + ], + + 'flash' => [ + 'disconnected' => 'Konto zostało pomyślnie rozłączone!', + 'connected' => 'Konto zostało pomyślnie połączone!', + 'session_expired' => 'Sesja wygasła. Spróbuj ponownie.', + 'workspace_not_found' => 'Nie znaleziono przestrzeni roboczej.', + 'activated' => 'Konto aktywowane!', + 'deactivated' => 'Konto dezaktywowane!', + 'already_connected' => 'Ta platforma jest już połączona.', + 'no_youtube_channels' => 'Nie znaleziono kanałów YouTube. Najpierw utwórz kanał.', + ], + + 'popup_callback' => [ + 'title_success' => 'Połączono', + 'title_error' => 'Błąd', + 'closing' => 'To okno zamknie się automatycznie...', + 'manual_close' => 'Możesz zamknąć to okno.', + 'popup_blocked' => 'Nie udało się otworzyć okna połączenia. Zezwól na wyskakujące okienka i spróbuj ponownie.', + 'connected' => 'Konto połączone!', + 'reconnected' => 'Konto połączone ponownie!', + 'error_connecting' => 'Błąd podczas łączenia konta. Spróbuj ponownie.', + 'network_taken' => 'Ta przestrzeń robocza ma już konto dla tej sieci. Najpierw je rozłącz.', + 'error_connecting_page' => 'Błąd podczas łączenia strony. Spróbuj ponownie.', + 'error_connecting_channel' => 'Błąd podczas łączenia kanału. Spróbuj ponownie.', + 'session_expired' => 'Sesja wygasła. Spróbuj ponownie.', + 'workspace_not_found' => 'Nie znaleziono przestrzeni roboczej.', + 'invalid_state' => 'Nieprawidłowy stan. Spróbuj ponownie.', + 'failed_to_authenticate' => 'Uwierzytelnianie nie powiodło się.', + 'failed_to_get_profile' => 'Nie udało się pobrać profilu.', + 'page_not_found' => 'Nie znaleziono strony.', + 'channel_not_found' => 'Nie znaleziono kanału.', + 'no_facebook_pages' => 'Nie znaleziono stron na Facebooku. Musisz być administratorem co najmniej jednej strony.', + 'no_facebook_instagram_pages' => 'Nie znaleziono stron na Facebooku z powiązanymi kontami Instagram.', + 'no_youtube_channels' => 'Nie znaleziono kanałów YouTube. Najpierw utwórz kanał.', + 'not_linkedin_admin' => 'Nie jesteś administratorem żadnej strony LinkedIn.', + ], +]; diff --git a/lang/pl/analytics.php b/lang/pl/analytics.php new file mode 100644 index 00000000..19def1bd --- /dev/null +++ b/lang/pl/analytics.php @@ -0,0 +1,55 @@ + 'Brak połączonych kont z analityką.', + 'no_accounts_match' => 'Brak pasujących kont.', + 'search_account' => 'Szukaj konta…', + 'select_account' => 'Wybierz konto, aby wyświetlić analitykę.', + 'no_data' => 'Brak dostępnych danych analitycznych.', + + 'metrics' => [ + 'avg_view_duration' => 'Śr. czas oglądania (s)', + 'avg_view_percentage' => 'Śr. procent obejrzenia', + 'bookmarks' => 'Zakładki', + 'clicks' => 'Kliknięcia', + 'comments' => 'Komentarze', + 'custom_reaction' => 'Niestandardowe', + 'engagement' => 'Zaangażowanie', + 'favourites' => 'Ulubione', + 'followers' => 'Obserwujący', + 'following' => 'Obserwowani', + 'impressions' => 'Wyświetlenia', + 'interactions' => 'Interakcje', + 'likes' => 'Polubienia', + 'members' => 'Członkowie', + 'minutes_watched' => 'Obejrzane minuty', + 'organic_followers' => 'Obserwujący organiczni', + 'outbound_clicks' => 'Kliknięcia wychodzące', + 'page_followers' => 'Obserwujący stronę', + 'page_reach' => 'Zasięg strony', + 'page_views' => 'Wyświetlenia strony', + 'paid_followers' => 'Obserwujący płatni', + 'pin_click_rate' => 'Współczynnik kliknięć Pinów', + 'pin_clicks' => 'Kliknięcia Pinów', + 'posts_engagement' => 'Zaangażowanie postów', + 'posts_reach' => 'Zasięg postów', + 'quotes' => 'Cytaty', + 'reach' => 'Zasięg', + 'reblogs' => 'Podania dalej', + 'recent_comments' => 'Ostatnie komentarze', + 'recent_likes' => 'Ostatnie polubienia', + 'recent_shares' => 'Ostatnie udostępnienia', + 'replies' => 'Odpowiedzi', + 'reposts' => 'Ponowne publikacje', + 'retweets' => 'Podania dalej', + 'saves' => 'Zapisy', + 'shares' => 'Udostępnienia', + 'subscribers' => 'Subskrybenci', + 'subscribers_gained' => 'Zyskani subskrybenci', + 'subscribers_lost' => 'Utraceni subskrybenci', + 'total_likes' => 'Łączna liczba polubień', + 'video_views' => 'Wyświetlenia wideo', + 'videos' => 'Filmy', + 'views' => 'Wyświetlenia', + ], +]; diff --git a/lang/pl/assets.php b/lang/pl/assets.php new file mode 100644 index 00000000..9fbbf7e2 --- /dev/null +++ b/lang/pl/assets.php @@ -0,0 +1,52 @@ + 'Zasoby', + + 'tabs' => [ + 'my_uploads' => 'Moje przesłane pliki', + 'stock_photos' => 'Zdjęcia stockowe', + 'gifs' => 'GIF-y', + ], + + 'upload' => [ + 'drag_drop' => 'Przeciągnij i upuść tutaj pliki lub kliknij, aby wybrać', + 'formats' => 'JPEG, PNG, GIF, WebP, MP4, PDF', + 'uploading' => 'Przesyłanie...', + 'failed' => 'Nie udało się przesłać :file. Spróbuj ponownie.', + ], + + 'empty' => [ + 'title' => 'Brak zasobów', + 'description' => 'Prześlij zdjęcia i filmy, aby zbudować swoją bibliotekę multimediów.', + ], + + 'save_to_assets' => 'Zapisz w zasobach', + 'saved' => 'Zapisano w Twoich zasobach!', + 'create_post' => 'Utwórz post', + 'add_to_post' => 'Dodaj do posta', + 'search_placeholder' => 'Szukaj multimediów...', + + 'delete' => [ + 'title' => 'Usuń zasób', + 'description' => 'Czy na pewno chcesz usunąć ten zasób? Tej operacji nie można cofnąć.', + 'confirm' => 'Usuń', + 'cancel' => 'Anuluj', + ], + + 'unsplash' => [ + 'search_placeholder' => 'Szukaj darmowych zdjęć...', + 'no_results' => 'Nie znaleziono zdjęć', + 'no_results_description' => 'Spróbuj innego wyszukiwanego hasła.', + 'trending' => 'Popularne na Unsplash', + 'start_searching' => 'Wyszukaj darmowe zdjęcia stockowe z Unsplash', + ], + + 'giphy' => [ + 'trending' => 'Popularne na Giphy', + 'search_placeholder' => 'Szukaj GIF-ów...', + 'no_results' => 'Nie znaleziono GIF-ów', + 'no_results_description' => 'Spróbuj innego wyszukiwanego hasła.', + 'powered_by' => 'Napędzane przez GIPHY', + ], +]; diff --git a/lang/pl/auth.php b/lang/pl/auth.php new file mode 100644 index 00000000..12442ee6 --- /dev/null +++ b/lang/pl/auth.php @@ -0,0 +1,141 @@ + 'Te dane logowania nie pasują do naszych rekordów.', + 'password' => 'Podane hasło jest nieprawidłowe.', + 'throttle' => 'Zbyt wiele prób logowania. Spróbuj ponownie za :seconds s.', + + 'flash' => [ + 'welcome' => 'Witamy w TryPost!', + 'welcome_trial' => 'Witamy w TryPost! Twój okres próbny właśnie się rozpoczął.', + ], + + 'legal' => 'Kontynuując, akceptujesz nasze Warunki korzystania z usługi oraz Politykę prywatności.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'Wizualny kalendarz', + 'description' => 'Planuj i harmonogramuj treści na wszystkich swoich kontach społecznościowych dzięki intuicyjnemu kalendarzowi z funkcją przeciągnij i upuść.', + ], + 'scheduling' => [ + 'title' => 'Inteligentne planowanie', + 'description' => 'Planuj posty na LinkedIn, X, Instagram, TikTok, YouTube i nie tylko — wszystko z jednego miejsca.', + ], + 'media' => [ + 'title' => 'Bogate multimedia', + 'description' => 'Publikuj zdjęcia, karuzele, relacje i rolki. Każda platforma automatycznie otrzymuje właściwy format.', + ], + 'video' => [ + 'title' => 'Publikowanie wideo', + 'description' => 'Prześlij film raz i opublikuj go na TikTok, YouTube Shorts, Instagram Reels i Facebook Reels.', + ], + 'team' => [ + 'title' => 'Zespołowe przestrzenie robocze', + 'description' => 'Zaproś swój zespół, przypisz role i zarządzaj wieloma markami z osobnych przestrzeni roboczych.', + ], + 'signatures' => [ + 'title' => 'Sygnatury', + 'description' => 'Zapisuj wielokrotnego użytku sygnatury (hasztagi, linki, zakończenia) i dołączaj je do postów jednym kliknięciem.', + ], + ], + + 'or_continue_with' => 'Lub kontynuuj przez', + 'or_continue_with_email' => 'Lub kontynuuj przez e-mail', + 'google_login' => 'Zaloguj się przez Google', + 'google_signup' => 'Zarejestruj się przez Google', + 'github_login' => 'Zaloguj się przez GitHub', + 'github_signup' => 'Zarejestruj się przez GitHub', + 'github_email_unavailable' => 'Nie udało się pobrać Twojego adresu e-mail z GitHuba. Ustaw swój adres e-mail w GitHubie jako publiczny lub przyznaj uprawnienie do e-maila, a następnie spróbuj ponownie.', + + 'signup_success' => [ + 'page_title' => 'Witamy', + 'title' => 'Konfigurowanie Twojego konta', + 'description' => 'Zwykle zajmuje to tylko kilka sekund...', + ], + + 'login' => [ + 'title' => 'Zaloguj się na swoje konto', + 'description' => 'Wprowadź poniżej swój e-mail i hasło, aby się zalogować', + 'page_title' => 'Zaloguj się', + 'email' => 'Adres e-mail', + 'password' => 'Hasło', + 'forgot_password' => 'Nie pamiętasz hasła?', + 'remember_me' => 'Zapamiętaj mnie', + 'submit' => 'Zaloguj się', + 'no_account' => 'Nie masz konta?', + 'sign_up' => 'Zarejestruj się', + ], + + 'register' => [ + 'title' => 'Cały Twój kalendarz społecznościowy w jednym miejscu', + 'description' => 'Załóż konto i zacznij planować posty w każdej sieci.', + 'page_title' => 'Rejestracja', + 'signup_with_email' => 'Zarejestruj się przez e-mail', + 'name' => 'Imię i nazwisko', + 'name_placeholder' => 'Imię i nazwisko', + 'email' => 'Adres e-mail', + 'password' => 'Hasło', + 'show_password' => 'Pokaż hasło', + 'hide_password' => 'Ukryj hasło', + 'submit' => 'Utwórz konto', + 'has_account' => 'Masz już konto?', + 'log_in' => 'Zaloguj się', + ], + + 'forgot_password' => [ + 'title' => 'Nie pamiętasz hasła', + 'description' => 'Wprowadź swój e-mail, aby otrzymać link do zresetowania hasła', + 'page_title' => 'Nie pamiętasz hasła', + 'email' => 'Adres e-mail', + 'submit' => 'Wyślij link do resetu hasła', + 'return_to' => 'Lub wróć do', + 'log_in' => 'logowania', + ], + + 'reset_password' => [ + 'title' => 'Zresetuj hasło', + 'description' => 'Wprowadź poniżej swoje nowe hasło', + 'page_title' => 'Zresetuj hasło', + 'email' => 'E-mail', + 'password' => 'Hasło', + 'confirm_password' => 'Potwierdź hasło', + 'confirm_placeholder' => 'Potwierdź hasło', + 'submit' => 'Zresetuj hasło', + ], + + 'verify_email' => [ + 'title' => 'Zweryfikuj e-mail', + 'description' => 'Zweryfikuj swój adres e-mail, klikając w link, który właśnie do Ciebie wysłaliśmy.', + 'page_title' => 'Weryfikacja e-maila', + 'link_sent' => 'Nowy link weryfikacyjny został wysłany na adres e-mail podany podczas rejestracji.', + 'resend' => 'Wyślij ponownie e-mail weryfikacyjny', + 'log_out' => 'Wyloguj się', + ], + + 'accept_invite' => [ + 'page_title' => 'Zaakceptuj zaproszenie', + 'title' => 'Otrzymałeś zaproszenie!', + 'description' => 'Otrzymałeś zaproszenie do przestrzeni roboczej :workspace.', + 'workspace' => 'Przestrzeń robocza', + 'your_role' => 'Twoja rola', + 'email' => 'E-mail', + 'accept' => 'Zaakceptuj zaproszenie', + 'decline' => 'Odrzuć zaproszenie', + 'login_prompt' => 'Zaloguj się lub załóż konto, aby zaakceptować to zaproszenie.', + 'log_in' => 'Zaloguj się', + 'create_account' => 'Utwórz konto', + ], + +]; diff --git a/lang/pl/automations.php b/lang/pl/automations.php new file mode 100644 index 00000000..dfb8e694 --- /dev/null +++ b/lang/pl/automations.php @@ -0,0 +1,411 @@ + 'Automatyzacje', + 'default_name' => 'Nowa automatyzacja', + + 'actions' => [ + 'new' => 'Nowa automatyzacja', + 'edit' => 'Edytuj', + 'save' => 'Zapisz', + 'activate' => 'Aktywuj', + 'pause' => 'Wstrzymaj', + 'delete' => 'Usuń', + 'retry' => 'Ponów', + 'guide' => 'Dowiedz się, jak to działa', + ], + + 'tabs' => [ + 'build' => 'Kreator', + 'variables' => 'Zmienne', + 'test' => 'Test', + ], + + 'nav' => [ + 'workflow' => 'Przepływ pracy', + 'invocations' => 'Wywołania', + 'metrics' => 'Metryki', + 'settings' => 'Ustawienia', + ], + + 'settings' => [ + 'general' => 'Ogólne', + 'general_description' => 'Zmień nazwę tej automatyzacji.', + 'name_label' => 'Nazwa', + 'name_saved' => 'Zmieniono nazwę automatyzacji.', + 'status_title' => 'Status', + 'status_description' => 'Aktywuj, aby ją uruchomić, lub wstrzymaj, aby zatrzymać.', + 'activated_at' => 'Aktywowano :date', + 'paused_at' => 'Wstrzymano :date', + 'created_at' => 'Utworzono :date', + 'danger_title' => 'Strefa zagrożenia', + 'danger_description' => 'Nieodwracalne działania.', + 'delete_title' => 'Usuń tę automatyzację', + 'delete_description' => 'Trwale usuwa automatyzację i jej historię uruchomień.', + ], + + 'status_run' => [ + 'pending' => 'Oczekuje', + 'running' => 'W trakcie', + 'waiting' => 'Oczekiwanie', + 'completed' => 'Zakończone', + 'failed' => 'Nieudane', + 'cancelled' => 'Anulowane', + ], + + 'node_type' => [ + 'trigger' => 'Wyzwalacz', + 'generate' => 'Generuj treść', + 'delay' => 'Opóźnienie', + 'condition' => 'Warunek', + 'publish' => 'Publikuj', + 'webhook' => 'Webhook', + 'end' => 'Koniec', + 'fetch_rss' => 'Pobierz RSS', + 'http_request' => 'Żądanie HTTP', + ], + + 'invocations' => [ + 'empty' => 'Brak wywołań.', + 'refresh' => 'Odśwież', + 'search_placeholder' => 'Szukaj po identyfikatorze uruchomienia…', + 'copied' => 'Skopiowano identyfikator uruchomienia.', + 'loading' => 'Wczytywanie kroków…', + 'no_steps' => 'Nie zarejestrowano żadnych kroków.', + 'load_error' => 'Nie udało się wczytać kroków.', + 'steps' => '{0}Brak kroków|{1}:count krok|[2,4]:count kroki|[5,*]:count kroków', + 'filter' => [ + 'all' => 'Wszystkie statusy', + ], + 'columns' => [ + 'timestamp' => 'Znacznik czasu', + 'run' => 'Uruchomienie', + 'status' => 'Status', + 'message' => 'Ostatnia wiadomość', + 'duration' => 'Czas trwania', + ], + 'summary' => [ + 'completed' => 'Przepływ zakończony', + 'failed' => 'Przepływ nieudany', + 'running' => 'Przepływ w trakcie', + 'cancelled' => 'Przepływ anulowany', + 'pending' => 'Przepływ oczekuje', + ], + ], + + 'metrics' => [ + 'overview' => 'Przegląd', + 'runs_over_time' => 'Uruchomienia w czasie', + 'posts_by_platform' => 'Posty według platformy', + 'no_posts' => 'W tym okresie nie opublikowano żadnych postów.', + 'cards' => [ + 'runs' => 'Łączna liczba uruchomień', + 'completed' => 'Zakończone', + 'failed' => 'Nieudane', + 'in_progress' => 'W trakcie', + 'success_rate' => 'Wskaźnik powodzenia', + 'avg_duration' => 'Śr. czas trwania', + 'posts_created' => 'Utworzone posty', + ], + 'legend' => [ + 'started' => 'Rozpoczęte', + 'completed' => 'Zakończone', + 'failed' => 'Nieudane', + ], + ], + + 'categories' => [ + 'sources' => 'Źródła', + 'content' => 'Treść', + 'flow' => 'Przepływ', + 'output' => 'Wyjście', + ], + + 'variables' => [ + 'title' => 'Zmienne przepływu pracy', + 'hint' => 'Wielokrotnego użytku wartości, do których odwołujesz się w dowolnym miejscu za pomocą {{ variables.KEY }}. Przechowywane w formie zaszyfrowanej.', + 'empty' => 'Brak zmiennych.', + 'key' => 'Klucz', + 'value' => 'Wartość', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'Wartość', + 'add' => 'Nowa zmienna', + ], + + 'expr' => [ + 'trigger_event' => 'Nazwa zdarzenia wyzwalacza', + 'trigger_fired_at' => 'Kiedy wyzwalacz się uruchomił', + 'trigger_post_id' => 'Identyfikator posta wyzwalającego', + 'trigger_post_content' => 'Treść posta wyzwalającego', + 'trigger_post_status' => 'Status posta wyzwalającego', + 'trigger_post_scheduled_at' => 'Kiedy post jest zaplanowany', + 'trigger_post_published_at' => 'Kiedy post został opublikowany', + 'fetched_title' => 'Tytuł pobranego elementu', + 'fetched_link' => 'Link pobranego elementu', + 'fetched_date' => 'Data publikacji pobranego elementu', + 'fetched_content' => 'Pełna treść pobranego elementu', + 'fetched_description' => 'Podsumowanie pobranego elementu', + 'fetched_author' => 'Autor pobranego elementu', + 'fetched_image' => 'Adres URL obrazu pobranego elementu', + 'fetched_categories' => 'Kategorie pobranego elementu', + 'fetched_enclosure' => 'Multimedia pobranego elementu (audio/wideo/plik)', + 'fetched_pubdate' => 'Data publikacji pobranego elementu', + 'fetched_http' => 'Pobrany element HTTP (dodaj pole)', + 'generated_content' => 'Treść posta wygenerowana przez AI', + 'generated_post_url' => 'Adres URL posta wygenerowanego przez AI', + 'variable' => 'Zmienna przepływu pracy', + 'now' => 'Bieżąca data i godzina', + ], + + 'test' => [ + 'description' => 'Uruchamia automatyzację od początku do końca, używając wygenerowanego ładunku wyzwalacza. Przydatne do sprawdzania każdego węzła bez czekania na rzeczywisty harmonogram lub kanał.', + 'starting' => 'Rozpoczynanie przebiegu testowego…', + 'in_progress' => 'W trakcie', + 'completed' => 'Zakończone', + 'failed' => 'Nieudane', + 'waiting' => 'Oczekiwanie', + 'close' => 'Zamknij', + 'no_node_runs' => 'Oczekiwanie na uruchomienie pierwszego węzła…', + 'node_input' => 'Wejście', + 'node_output' => 'Wyjście', + 'node_error' => 'Błąd', + 'no_new_items' => 'Brak nowych elementów — nic dalej się nie uruchomiło.', + 'error_starting' => 'Nie udało się rozpocząć przebiegu testowego.', + 'with_real_data' => 'Z rzeczywistymi danymi', + 'run' => 'Uruchom test', + 'idle_hint' => 'Kliknij Uruchom test, aby wykonać automatyzację od początku do końca.', + 'real_data_hint' => 'Ten test opublikuje posty, przesunie znaczniki odpytywania i wywoła zewnętrzne skutki uboczne.', + 'dry_badge' => 'Przebieg próbny', + ], + + 'status' => [ + 'draft' => 'Szkic', + 'active' => 'Aktywna', + 'paused' => 'Wstrzymana', + ], + + 'index' => [ + 'empty_title' => 'Brak automatyzacji', + 'empty_description' => 'Utwórz swoją pierwszą automatyzację, aby publikować na autopilocie.', + 'columns' => [ + 'name' => 'Nazwa', + 'status' => 'Status', + 'created' => 'Utworzono', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'Nie udało się aktywować automatyzacji.', + 'pause_error_fallback' => 'Nie udało się wstrzymać automatyzacji.', + 'save_error_fallback' => 'Nie udało się zapisać automatyzacji.', + 'save_success' => 'Automatyzacja zapisana.', + 'empty_canvas_title' => 'Zacznij budować swoją automatyzację', + 'empty_canvas_description' => 'Przeciągnij węzeł z lewego panelu, aby rozpocząć.', + 'name_placeholder' => 'Automatyzacja bez tytułu', + ], + + 'nodes' => [ + 'trigger' => 'Wyzwalacz', + 'generate' => 'Generuj', + 'delay' => 'Opóźnienie', + 'condition' => 'Warunek', + 'publish' => 'Publikuj', + 'webhook' => 'Webhook', + 'end' => 'Koniec', + 'end_summary' => 'Zatrzymuje automatyzację w tym miejscu', + 'fetch_rss' => 'Pobierz RSS', + 'http_request' => 'Żądanie HTTP', + 'handles' => [ + 'items' => 'ma elementy', + 'no_items' => 'brak elementów', + ], + ], + + 'config' => [ + 'select_placeholder' => 'Wybierz…', + 'invalid_json' => 'To jeszcze nie jest prawidłowy JSON.', + 'expand_editor' => 'Rozwiń edytor', + 'minimize_editor' => 'Zminimalizuj', + + 'trigger' => [ + 'type' => 'Typ wyzwalacza', + 'types' => [ + 'schedule' => 'Harmonogram', + 'post_published' => 'Gdy post zostaje opublikowany', + 'post_scheduled' => 'Gdy post zostaje zaplanowany', + ], + 'post_published_hint' => 'Uruchamia się za każdym razem, gdy dowolny post w tej przestrzeni roboczej zostanie opublikowany. Opublikowany post staje się dostępny pod {{ trigger.post }} dla kolejnych węzłów.', + 'post_scheduled_hint' => 'Uruchamia się za każdym razem, gdy dowolny post w tej przestrzeni roboczej zostanie zaplanowany. Zaplanowany post jest dostępny pod {{ trigger.post }}.', + + 'schedule' => [ + 'field' => 'Interwał wyzwalania', + 'fields' => [ + 'minutes' => 'Minuty', + 'hours' => 'Godziny', + 'days' => 'Dni', + 'weeks' => 'Tygodnie', + 'months' => 'Miesiące', + ], + 'minutes_interval' => 'Minuty między wyzwoleniami', + 'hours_interval' => 'Godziny między wyzwoleniami', + 'days_interval' => 'Dni między wyzwoleniami', + 'hour' => 'Wyzwól o godzinie', + 'minute' => 'Wyzwól w minucie', + 'weekdays' => 'Wyzwól w dni tygodnia', + 'day_of_month' => 'Dzień miesiąca', + 'weekday_names' => [ + 'sun' => 'Nd', + 'mon' => 'Pn', + 'tue' => 'Wt', + 'wed' => 'Śr', + 'thu' => 'Cz', + 'fri' => 'Pt', + 'sat' => 'Sb', + ], + 'summary' => [ + 'every_n_minutes' => 'Uruchamia się co minutę|Uruchamia się co :count minuty|Uruchamia się co :count minut', + 'every_n_hours' => 'Uruchamia się co godzinę o minucie :minute|Uruchamia się co :count godziny o minucie :minute|Uruchamia się co :count godzin o minucie :minute', + 'every_n_days' => 'Uruchamia się codziennie o :time|Uruchamia się co :count dni o :time|Uruchamia się co :count dni o :time', + 'weekly' => 'Uruchamia się w :days o :time', + 'monthly' => 'Uruchamia się :day. dnia każdego miesiąca o :time', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'Konta społecznościowe', + 'social_accounts_empty' => 'Brak połączonych kont społecznościowych. Najpierw połącz jedno.', + 'target_slide_count' => 'Slajdy do wygenerowania', + 'prompt_template' => 'Szablon promptu', + 'prompt_template_hint' => 'Wpisz {{, aby wstawić dane z wcześniejszych kroków.', + 'image_count' => 'Obrazy do wygenerowania', + 'image_count_hint' => '0 = post tylko tekstowy (bez obrazu). 1 = pojedynczy obraz. 2+ = karuzela.', + 'use_brand_voice' => 'Użyj głosu marki', + 'use_brand_voice_hint' => 'Zastosuj opis i głos swojej marki. Wyłącz dla wiernego kuratorowania źródeł zewnętrznych (wiadomości, RSS).', + 'use_brand_visuals' => 'Użyj wizualnej identyfikacji marki', + 'use_brand_visuals_hint' => 'Kieruj obrazami AI za pomocą kolorów i tożsamości swojej marki. Wyłącz, aby uzyskać neutralne obrazy oparte wyłącznie na temacie posta.', + 'style' => 'Styl', + 'account_summary' => ':count konto · :format|:count konta · :format|:count kont · :format', + 'formats' => [ + 'single' => 'pojedynczy', + 'carousel' => 'karuzela', + ], + ], + 'delay' => [ + 'duration' => 'Czas trwania', + 'unit' => 'Jednostka', + 'units' => [ + 'minutes' => 'Minuty', + 'hours' => 'Godziny', + 'days' => 'Dni', + ], + ], + 'condition' => [ + 'field' => 'Pole', + 'operator' => 'Operator', + 'operators' => [ + 'contains' => 'zawiera', + 'not_contains' => 'nie zawiera', + 'equals' => 'równa się', + 'not_equals' => 'nie równa się', + 'matches' => 'pasuje (regex)', + 'greater_than' => 'większe niż', + 'less_than' => 'mniejsze niż', + ], + 'value' => 'Wartość', + ], + 'publish' => [ + 'mode' => 'Tryb', + 'modes' => [ + 'now' => 'Opublikuj teraz', + 'scheduled' => 'Zaplanuj', + 'draft' => 'Zapisz jako szkic', + ], + 'scheduled_offset' => 'Przesunięcie od wyzwolenia (minuty)', + 'offset_summary' => ':mode · +:offset min', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'Metoda', + 'payload_template' => 'Szablon ładunku (JSON)', + ], + 'end' => [ + 'reason' => 'Powód (opcjonalnie)', + 'reason_placeholder' => 'np. Odfiltrowane przez warunek', + ], + 'fetch_rss' => [ + 'feed_url' => 'Adres URL kanału', + 'feed_url_hint' => 'Przy pierwszym uruchomieniu znacznik jest ustawiany na „teraz”, aby elementy historyczne nie zalały kolejnych węzłów. Kolejne uruchomienia widzą tylko elementy nowsze niż poprzednie odpytanie.', + 'inspect' => 'Zbadaj kanał', + 'inspecting' => 'Badanie…', + 'inspect_hint' => 'Pobierz próbkę, aby odkryć dostępne pola do użycia w kolejnych węzłach.', + 'inspect_error' => 'Nie udało się odczytać tego kanału. Sprawdź adres URL i spróbuj ponownie.', + 'discovered_fields' => 'Dostępne pola', + 'discovered_empty' => 'Nie znaleziono pól w najnowszym elemencie.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'Metoda', + 'auth_type' => 'Uwierzytelnianie', + 'auth' => [ + 'none' => 'Brak (publiczne)', + 'bearer' => 'Token Bearer', + 'basic' => 'Uwierzytelnianie podstawowe', + 'api_key' => 'Nagłówek z kluczem API', + ], + 'bearer_token' => 'Token Bearer', + 'basic_username' => 'Nazwa użytkownika', + 'basic_password' => 'Hasło', + 'api_key_header' => 'Nazwa nagłówka', + 'api_key_value' => 'Klucz API', + 'body_template' => 'Szablon treści (JSON)', + 'headers' => 'Nagłówki', + 'header_name' => 'Nazwa nagłówka', + 'header_value' => 'Wartość', + 'add_header' => 'Dodaj nagłówek', + 'polling_section' => 'Lista i deduplikacja (opcjonalnie)', + 'polling_hint' => 'Gdy odpowiedź jest listą, każdy element uruchamia przepływ osobno. Pojedynczy obiekt uruchamia się raz.', + 'items_path' => 'Ścieżka do elementów', + 'items_path_hint' => 'Pozostaw puste, jeśli odpowiedź jest już tablicą. Użyj ścieżki z kropkami (np. data.items) dla zagnieżdżonej tablicy lub * dla obiektu z kluczami po id.', + 'item_key_path' => 'Ścieżka do klucza elementu', + 'item_key_path_hint' => 'Ścieżka JSON do unikalnego id (np. id). Elementy już widziane są pomijane, więc kanał bez dat nadal przekazuje dalej tylko nowe wpisy.', + 'item_date_path' => 'Ścieżka do daty elementu', + 'item_date_path_hint' => 'Ścieżka JSON do znacznika czasu elementu (np. published_at). Preferowana zamiast ścieżki klucza, gdy jest dostępna. Pierwsze odpytanie zapisuje punkt odniesienia i nic nie przekazuje, więc istniejący kanał nigdy nie zaleje systemu pierwszego dnia.', + ], + ], + + 'delete' => [ + 'title' => 'Usuń automatyzację', + 'description' => 'Czy na pewno chcesz usunąć tę automatyzację? Wszystkie uruchomienia i elementy wyzwalacza również zostaną usunięte. Tej operacji nie można cofnąć.', + 'confirm' => 'Usuń', + 'cancel' => 'Anuluj', + ], + + 'flash' => [ + 'deleted' => 'Automatyzacja została pomyślnie usunięta!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'Brak aktywnych kont społecznościowych skonfigurowanych dla tej automatyzacji.', + 'must_have_one_trigger' => 'Automatyzacja musi mieć dokładnie jeden węzeł wyzwalacza.', + 'trigger_must_be_connected' => 'Węzeł wyzwalacza musi być połączony z co najmniej jednym węzłem.', + 'graph_contains_cycle' => 'Graf automatyzacji zawiera cykl.', + 'only_failed_can_retry' => 'Tylko nieudane uruchomienia można ponowić.', + 'no_generated_post' => 'Nie znaleziono wygenerowanego posta w uruchomieniu.', + 'webhook_server_error' => 'Błąd serwera webhooka.', + 'webhook_request_failed' => 'Nie udało się zrealizować żądania webhooka.', + 'webhook_missing_url' => 'W węźle webhooka brakuje adresu URL.', + 'webhook_invalid_payload_json' => 'Szablon ładunku nie jest prawidłowym JSON-em.', + 'url_not_allowed' => 'Adres URL żądania wskazuje na prywatny lub nieosiągalny adres i został zablokowany.', + 'node_no_longer_exists' => 'Węzeł :node_id już nie istnieje w automatyzacji.', + 'no_trigger_connection' => 'Żaden węzeł nie jest połączony z węzłem wyzwalacza.', + 'fetch_rss_missing_url' => 'W węźle Pobierz RSS brakuje adresu URL kanału.', + 'fetch_rss_request_failed' => 'Żądanie kanału RSS nie powiodło się.', + 'fetch_rss_malformed' => 'Kanał RSS jest uszkodzony.', + 'http_missing_url' => 'W węźle żądania HTTP brakuje adresu URL.', + 'http_request_exception' => 'Żądanie HTTP zgłosiło wyjątek.', + 'http_request_failed' => 'Żądanie HTTP nie powiodło się.', + 'http_items_path_not_array' => 'Ścieżka do elementów nie zwróciła listy.', + ], +]; diff --git a/lang/pl/billing.php b/lang/pl/billing.php new file mode 100644 index 00000000..4283acf9 --- /dev/null +++ b/lang/pl/billing.php @@ -0,0 +1,76 @@ + 'Rozliczenia', + + 'past_due_notice' => [ + 'title' => 'Zaległa płatność', + 'description' => 'Zaktualizuj metodę płatności, aby utrzymać aktywną subskrypcję.', + 'cta' => 'Zaktualizuj płatność', + ], + + 'annual_banner' => [ + 'title' => 'Otrzymaj 2 miesiące gratis', + 'description' => 'Przejdź na rozliczenie roczne i płać mniej każdego miesiąca — ten sam plan, nic więcej się nie zmienia.', + 'cta' => 'Przejdź na plan roczny', + ], + + 'subscribe' => [ + 'billed_monthly' => 'Rozliczane miesięcznie', + 'billed_yearly' => 'Rozliczane rocznie', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'Plan', + 'description' => 'Zarządzaj swoim planem subskrypcji.', + 'label' => 'Plan', + 'workspaces' => ':count przestrzeń robocza|:count przestrzenie robocze|:count przestrzeni roboczych', + 'per_workspace' => 'za przestrzeń roboczą', + 'price' => 'Cena', + 'month' => 'miesiąc', + 'trial' => 'Okres próbny', + 'active' => 'Aktywny', + 'past_due' => 'Zaległa płatność', + 'cancelling' => 'Anulowanie', + 'trial_ends' => 'Okres próbny kończy się', + ], + + 'subscription' => [ + 'title' => 'Subskrypcja', + 'description' => 'Zarządzaj metodą płatności, danymi rozliczeniowymi i subskrypcją.', + 'payment_method' => 'Metoda płatności', + 'no_payment_method' => 'Brak zapisanej metody płatności.', + 'expires_on' => 'Wygasa :month/:year', + 'manage_label' => 'Subskrypcja', + 'manage_stripe' => 'Zarządzaj w Stripe', + ], + + 'invoices' => [ + 'title' => 'Faktury', + 'description' => 'Pobierz swoje wcześniejsze faktury.', + 'empty' => 'Nie znaleziono faktur', + 'paid' => 'Opłacona', + ], + + 'flash' => [ + 'plan_changed' => 'Korzystasz teraz z planu :plan.', + 'switched_to_yearly' => 'Korzystasz teraz z rozliczenia rocznego.', + 'cannot_manage' => 'Tylko właściciel konta może zarządzać rozliczeniami.', + 'credits_exhausted' => 'Brak kredytów AI — Twój miesięczny limit :limit został wykorzystany. Ulepsz plan lub poczekaj do następnego miesiąca.', + 'subscription_required' => 'Aby korzystać z funkcji AI, wymagana jest aktywna subskrypcja.', + ], + + 'processing' => [ + 'page_title' => 'Przetwarzanie...', + 'title' => 'Przetwarzanie Twojej subskrypcji', + 'description' => 'Poczekaj, aż skonfigurujemy Twoje konto. Zajmie to tylko chwilę.', + 'success_title' => 'Wszystko gotowe!', + 'success_description' => 'Twoja subskrypcja jest aktywna. Przekierowujemy Cię do Twoich przestrzeni roboczych...', + 'cancelled_title' => 'Anulowano płatność', + 'cancelled_description' => 'Twoja płatność została anulowana. Nie pobrano żadnych opłat.', + 'retry' => 'Spróbuj ponownie', + ], +]; diff --git a/lang/pl/brands.php b/lang/pl/brands.php new file mode 100644 index 00000000..306422f9 --- /dev/null +++ b/lang/pl/brands.php @@ -0,0 +1,39 @@ + 'Nowa marka', + 'no_brands_yet' => 'Brak marek', + 'no_brands_description' => 'Twórz marki, aby organizować konta społecznościowe według klienta lub projektu', + 'accounts_count' => ':count kont', + + 'create' => [ + 'title' => 'Utwórz markę', + 'description' => 'Nadaj marce nazwę, aby pogrupować konta społecznościowe', + 'name' => 'Nazwa marki', + 'name_placeholder' => 'np. Acme Corp, Osobiste', + 'submit' => 'Utwórz markę', + 'submitting' => 'Tworzenie...', + ], + + 'edit' => [ + 'title' => 'Edytuj markę', + 'description' => 'Zaktualizuj nazwę tej marki', + 'name' => 'Nazwa marki', + 'name_placeholder' => 'np. Acme Corp, Osobiste', + 'submit' => 'Zapisz zmiany', + 'submitting' => 'Zapisywanie...', + ], + + 'delete' => [ + 'title' => 'Usuń markę', + 'description' => 'Czy na pewno chcesz usunąć tę markę? Konta społecznościowe zostaną odłączone, ale nie usunięte.', + 'confirm' => 'Usuń', + 'cancel' => 'Anuluj', + ], + + 'flash' => [ + 'created' => 'Marka została pomyślnie utworzona!', + 'updated' => 'Marka została pomyślnie zaktualizowana!', + 'deleted' => 'Marka została pomyślnie usunięta!', + ], +]; diff --git a/lang/pl/calendar.php b/lang/pl/calendar.php new file mode 100644 index 00000000..a60086b2 --- /dev/null +++ b/lang/pl/calendar.php @@ -0,0 +1,12 @@ + 'Kalendarz', + 'today' => 'Dziś', + 'day' => 'Dzień', + 'week' => 'Tydzień', + 'month' => 'Miesiąc', + 'new_post' => 'Nowy post', + 'no_content' => 'Brak treści', + 'more' => '+:count więcej', +]; diff --git a/lang/pl/comments.php b/lang/pl/comments.php new file mode 100644 index 00000000..9287db1d --- /dev/null +++ b/lang/pl/comments.php @@ -0,0 +1,18 @@ + 'Napisz komentarz...', + 'reply_placeholder' => 'Napisz odpowiedź...', + 'reply' => 'Odpowiedz', + 'edit' => 'Edytuj', + 'delete' => 'Usuń', + 'edited' => 'edytowano', + 'save' => 'Zapisz', + 'cancel' => 'Anuluj', + 'send' => 'Wyślij', + 'replying_to' => 'Odpowiadasz :name', + 'empty' => 'Brak komentarzy. Rozpocznij rozmowę.', + 'load_more' => 'Wczytaj starsze komentarze', + 'today' => 'Dziś', + 'yesterday' => 'Wczoraj', +]; diff --git a/lang/pl/common.php b/lang/pl/common.php new file mode 100644 index 00000000..cccecbde --- /dev/null +++ b/lang/pl/common.php @@ -0,0 +1,59 @@ + 'Wstecz', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'Tej operacji nie można cofnąć.', + 'type' => 'Wpisz', + 'to_confirm' => 'aby potwierdzić.', + 'copy_to_clipboard' => 'Kopiuj do schowka', + 'delete_keyword' => 'usuń', + ], + + 'photo_upload' => [ + 'upload' => 'Prześlij', + 'uploading' => 'Przesyłanie...', + 'remove' => 'Usuń zdjęcie', + 'hint' => 'Zalecane: kwadratowe zdjęcie, maks. 2 MB.', + ], + + 'timezone' => [ + 'select' => 'Wybierz strefę czasową', + 'search' => 'Szukaj strefy czasowej...', + 'empty' => 'Nie znaleziono strefy czasowej', + ], + + 'date_picker' => [ + 'select' => 'Wybierz datę', + ], + + 'date_range_picker' => [ + 'placeholder' => 'Wybierz zakres dat', + 'today' => 'Dziś', + 'yesterday' => 'Wczoraj', + 'last_7_days' => 'Ostatnie 7 dni', + 'last_30_days' => 'Ostatnie 30 dni', + 'last_3_months' => 'Ostatnie 3 miesiące', + 'last_6_months' => 'Ostatnie 6 miesięcy', + 'last_12_months' => 'Ostatnie 12 miesięcy', + 'this_month' => 'Ten miesiąc', + 'last_month' => 'Poprzedni miesiąc', + 'year_to_date' => 'Od początku roku', + 'last_year' => 'Poprzedni rok', + ], + + 'cancel' => 'Anuluj', + 'clear' => 'Wyczyść', + 'close' => 'Zamknij', + 'loading_more' => 'Wczytywanie kolejnych...', + + 'actions' => [ + 'copy' => 'Kopiuj', + 'copied' => 'Skopiowano', + 'copy_failed' => 'Nie udało się skopiować do schowka', + ], +]; diff --git a/lang/pl/labels.php b/lang/pl/labels.php new file mode 100644 index 00000000..8876d856 --- /dev/null +++ b/lang/pl/labels.php @@ -0,0 +1,54 @@ + 'Etykiety', + 'description' => 'Twórz etykiety, aby organizować i kategoryzować swoje posty', + 'search' => 'Szukaj etykiet...', + 'new_label' => 'Nowa etykieta', + 'no_labels_yet' => 'Brak etykiet', + 'no_search_results' => 'Brak etykiet pasujących do wyszukiwania', + 'try_different_search' => 'Spróbuj innego słowa kluczowego lub wyczyść wyszukiwanie.', + 'create_first_label' => 'Utwórz swoją pierwszą etykietę', + 'table' => [ + 'name' => 'Nazwa', + 'created_at' => 'Utworzono', + ], + + 'actions' => [ + 'edit' => 'Edytuj etykietę', + 'delete' => 'Usuń etykietę', + ], + + 'create' => [ + 'title' => 'Utwórz etykietę', + 'description' => 'Nadaj etykiecie nazwę i wybierz kolor', + 'name' => 'Nazwa', + 'name_placeholder' => 'Wpisz nazwę etykiety...', + 'color' => 'Kolor', + 'submit' => 'Utwórz etykietę', + 'submitting' => 'Tworzenie...', + ], + + 'edit' => [ + 'title' => 'Edytuj etykietę', + 'description' => 'Zaktualizuj nazwę i kolor tej etykiety', + 'name' => 'Nazwa', + 'name_placeholder' => 'Wpisz nazwę etykiety...', + 'color' => 'Kolor', + 'submit' => 'Zapisz zmiany', + 'submitting' => 'Zapisywanie...', + ], + + 'delete' => [ + 'title' => 'Usuń etykietę', + 'description' => 'Czy na pewno chcesz usunąć tę etykietę? Tej operacji nie można cofnąć.', + 'confirm' => 'Usuń', + 'cancel' => 'Anuluj', + ], + + 'flash' => [ + 'created' => 'Etykieta została pomyślnie utworzona!', + 'updated' => 'Etykieta została pomyślnie zaktualizowana!', + 'deleted' => 'Etykieta została pomyślnie usunięta!', + ], +]; diff --git a/lang/pl/mail.php b/lang/pl/mail.php new file mode 100644 index 00000000..dfe4cfc2 --- /dev/null +++ b/lang/pl/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => ':name wspomniał o Tobie w TryPost', + 'title' => ':name wspomniał o Tobie', + 'intro' => ':name wspomniał o Tobie w komentarzu do posta.', + 'cta' => 'Zobacz komentarz', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => ':count konto wymaga ponownego połączenia w przestrzeni roboczej :workspace|:count konta wymagają ponownego połączenia w przestrzeni roboczej :workspace|:count kont wymaga ponownego połączenia w przestrzeni roboczej :workspace', + 'title' => 'Konta wymagają ponownego połączenia', + 'intro' => 'Następujące konta społecznościowe w Twojej przestrzeni roboczej :workspace zostały rozłączone i wymagają ponownego połączenia:', + 'reasons_title' => 'Mogło się to zdarzyć, ponieważ:', + 'reason_expired' => 'Tokeny dostępu wygasły', + 'reason_revoked' => 'Cofnąłeś dostęp do TryPost na danej platformie', + 'reason_changed' => 'Platforma zmieniła swoje wymagania dotyczące uwierzytelniania', + 'reconnect_cta' => 'Połącz te konta ponownie, aby kontynuować planowanie i publikowanie postów.', + 'button' => 'Połącz konta ponownie', + ], +]; diff --git a/lang/pl/notifications.php b/lang/pl/notifications.php new file mode 100644 index 00000000..52c29ef6 --- /dev/null +++ b/lang/pl/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'Twój post jest gotowy', + 'body' => 'AI właśnie skończyła. Dotknij, aby sprawdzić i opublikować.', + ], + 'account_disconnected' => [ + 'title' => 'Konto :platform zostało rozłączone', + 'body' => ':account wymaga ponownego połączenia', + ], + 'account_token_expired' => [ + 'title' => 'Konto :platform wymaga ponownego połączenia', + 'body' => 'Sesja :account wygasła — połącz ponownie, aby dalej publikować', + ], +]; diff --git a/lang/pl/onboarding.php b/lang/pl/onboarding.php new file mode 100644 index 00000000..f4ae046c --- /dev/null +++ b/lang/pl/onboarding.php @@ -0,0 +1,41 @@ + 'Witamy w TryPost', + 'description' => 'Powiedz nam, co najlepiej opisuje Ciebie lub Twoją firmę, abyśmy mogli dopasować Twoje doświadczenie.', + 'continue' => 'Kontynuuj', + 'personas' => [ + 'creator' => 'Twórca treści', + 'freelancer' => 'Freelancer', + 'developer' => 'Programista', + 'startup' => 'Startup', + 'agency' => 'Agencja', + 'small_business' => 'Mała firma', + 'marketer' => 'Marketingowiec', + 'online_store' => 'Sklep internetowy', + 'other' => 'Inne', + ], + 'goals_title' => 'Jaki jest Twój cel z TryPost?', + 'goals_description' => 'Wybierz wszystko, co pasuje, a my skonfigurujemy TryPost dla Ciebie.', + 'goals' => [ + 'save_time' => 'Oszczędzaj czas, publikując wszędzie naraz', + 'ai_content' => 'Twórz posty szybciej dzięki AI', + 'plan_calendar' => 'Planuj posty w kalendarzu', + 'stay_on_brand' => 'Utrzymuj każdy post spójny z marką', + 'grow_audience' => 'Powiększaj grono odbiorców i zaangażowanie', + 'drive_sales' => 'Zdobywaj więcej ruchu i sprzedaży', + 'manage_clients' => 'Zarządzaj wieloma markami lub klientami', + 'team_collaboration' => 'Pracuj z moim zespołem', + 'automate_api' => 'Automatyzuj publikowanie za pomocą API, MCP lub kodu', + 'track_performance' => 'Sprawdzaj, jak radzą sobie moje posty', + 'just_exploring' => 'Na razie tylko się rozglądam', + 'other' => 'Coś innego', + ], + 'connect' => [ + 'title' => 'Połącz swoją pierwszą sieć', + 'description' => 'Połącz co najmniej jedno konto społecznościowe, aby zacząć planować. Więcej możesz dodać w dowolnym momencie.', + 'must_connect' => 'Połącz co najmniej jedną sieć, aby kontynuować.', + ], +]; diff --git a/lang/pl/pagination.php b/lang/pl/pagination.php new file mode 100644 index 00000000..23f71960 --- /dev/null +++ b/lang/pl/pagination.php @@ -0,0 +1,19 @@ + '« Poprzednia', + 'next' => 'Następna »', + +]; diff --git a/lang/pl/passwords.php b/lang/pl/passwords.php new file mode 100644 index 00000000..ca55aa58 --- /dev/null +++ b/lang/pl/passwords.php @@ -0,0 +1,22 @@ + 'Twoje hasło zostało zresetowane.', + 'sent' => 'Wysłaliśmy e-mailem link do zresetowania hasła.', + 'throttled' => 'Poczekaj chwilę przed ponowną próbą.', + 'token' => 'Ten token resetowania hasła jest nieprawidłowy.', + 'user' => 'Nie możemy znaleźć użytkownika o tym adresie e-mail.', + +]; diff --git a/lang/pl/posts.php b/lang/pl/posts.php new file mode 100644 index 00000000..5f4cf0b7 --- /dev/null +++ b/lang/pl/posts.php @@ -0,0 +1,671 @@ + 'Posty', + 'search' => 'Szukaj postów...', + 'all_posts' => 'Wszystkie posty', + 'new_post' => 'Nowy post', + 'no_posts' => 'Nie znaleziono postów', + 'no_search_results' => 'Brak postów pasujących do wyszukiwania', + 'try_different_search' => 'Spróbuj innego słowa kluczowego lub wyczyść wyszukiwanie.', + 'start_creating' => 'Zacznij od utworzenia swojego pierwszego posta.', + 'filter_by_label' => 'Filtruj według etykiety', + 'label_search_placeholder' => 'Szukaj etykiet...', + 'no_labels' => 'Nie znaleziono etykiet.', + 'clear_label_filter' => 'Wyczyść filtr etykiet', + 'table' => [ + 'post' => 'Post', + 'status' => 'Status', + 'content' => 'Treść', + 'platforms' => 'Platformy', + 'labels' => 'Etykiety', + 'scheduled_at' => 'Data', + 'actions' => '', + ], + 'manage_posts' => 'Zarządzaj wszystkimi swoimi postami', + 'delete_confirm' => 'Czy na pewno chcesz usunąć ten post?', + 'by' => 'przez', + + 'actions' => [ + 'view' => 'Zobacz post', + 'delete' => 'Usuń', + 'duplicate' => 'Duplikuj', + 'copy_id' => 'Kopiuj identyfikator', + 'copied' => 'Skopiowano identyfikator do schowka', + ], + + 'form' => [ + 'post_type' => 'Typ posta', + 'board' => 'Tablica', + 'select_board' => 'Wybierz tablicę', + 'search_board' => 'Szukaj tablicy...', + 'no_board_found' => 'Nie znaleziono tablicy', + 'media' => 'Media', + 'min' => 'Min', + 'uploading' => 'Przesyłanie...', + 'drop_to_upload' => 'Upuść, aby przesłać', + 'drag_and_drop' => 'Przeciągnij i upuść lub kliknij, aby przesłać', + 'photos_and_videos' => 'Zdjęcia i filmy', + 'photos_only' => 'Tylko zdjęcia', + 'videos_only' => 'Tylko filmy', + 'drag_to_reorder' => 'Przeciągnij, aby zmienić kolejność', + 'caption' => 'Podpis', + 'write_caption' => 'Napisz swój podpis...', + 'content_exceeds_platform' => ':platform: za długie o :over znaków (maks. :limit).', + 'tiktok' => [ + 'settings' => 'Ustawienia TikTok', + 'variant_label' => 'Typ posta', + 'variant' => [ + 'video' => 'Wideo', + 'photo' => 'Karuzela zdjęć', + ], + 'posting_to' => 'Publikowanie na', + 'privacy_level' => 'Kto może zobaczyć ten film?', + 'privacy_placeholder' => 'Wybierz, kto może zobaczyć ten post', + 'privacy' => [ + 'public' => 'Publiczne dla wszystkich', + 'friends' => 'Wzajemnie obserwujący znajomi', + 'followers' => 'Obserwujący', + 'private' => 'Tylko ja', + 'private_disabled_branded' => 'Widoczności treści sponsorowanych nie można ustawić jako prywatnej.', + ], + 'privacy_hint' => 'Dostępne opcje zależą od ustawień Twojego konta TikTok.', + 'auto_add_music' => 'Automatycznie dodaj muzykę', + 'auto_add_music_hint' => 'Ta funkcja jest dostępna tylko dla zdjęć. Doda domyślną muzykę, którą możesz później zmienić.', + 'yes' => 'Tak', + 'no' => 'Nie', + 'allow_users' => 'Zezwól użytkownikom na:', + 'comments' => 'Komentowanie', + 'duet' => 'Duet', + 'stitch' => 'Stitch', + 'is_aigc' => 'Film stworzony z użyciem AI', + 'disclose' => 'Ujawnij treść filmu', + 'disclose_hint' => 'Włącz, aby ujawnić, że ten film promuje towary lub usługi w zamian za coś wartościowego. Twój film może promować Ciebie, osobę trzecią lub oba te podmioty.', + 'promotional_organic_title' => 'Twoje zdjęcie/film zostanie oznaczone jako „Treść promocyjna”.', + 'promotional_paid_title' => 'Twoje zdjęcie/film zostanie oznaczone jako „Współpraca płatna”.', + 'promotional_description' => 'Nie można tego zmienić po opublikowaniu filmu.', + 'compliance_incomplete' => 'Musisz wskazać, czy Twoja treść promuje Ciebie, osobę trzecią, czy oba te podmioty.', + 'privacy_required' => 'Poziom prywatności TikTok jest wymagany podczas publikowania.', + 'branded_cleared_private' => 'Prywatność została wyczyszczona, ponieważ treść sponsorowana nie może być prywatna.', + 'interaction_disabled_by_creator' => 'Wyłączone w ustawieniach Twojego konta TikTok', + 'max_duration_exceeded' => 'Film trwa :duration s, ale to konto może publikować filmy o długości maks. :max s.', + 'processing_hint' => 'Po opublikowaniu przetworzenie treści i pojawienie się jej na Twoim profilu TikTok może zająć kilka minut.', + 'brand_organic' => 'Twoja marka', + 'brand_organic_hint' => 'Promujesz siebie lub własną markę. Ten film zostanie sklasyfikowany jako Brand Organic.', + 'brand_content' => 'Treść sponsorowana', + 'brand_content_hint' => 'Promujesz inną markę lub osobę trzecią. Ten film zostanie sklasyfikowany jako Treść sponsorowana.', + 'compliance' => [ + 'agree' => 'Publikując, akceptujesz', + 'music_usage' => 'Potwierdzenie użycia muzyki', + 'and' => 'oraz', + 'branded_policy' => 'Zasady dotyczące treści sponsorowanych', + ], + ], + 'instagram' => [ + 'settings' => 'Ustawienia Instagram', + 'posting_to' => 'Publikowanie na', + 'variant_label' => 'Typ posta', + 'variant' => [ + 'feed' => 'Post na feedzie', + 'reel' => 'Rolka', + 'story' => 'Relacja', + ], + 'aspect_label' => 'Proporcje', + 'aspect' => [ + 'square' => 'Kwadrat (1:1)', + 'portrait' => 'Pionowy (4:5)', + 'landscape' => 'Poziomy (16:9)', + 'original' => 'Oryginalny', + ], + ], + 'facebook' => [ + 'settings' => 'Ustawienia Facebook', + 'posting_to' => 'Publikowanie na', + 'variant_label' => 'Typ posta', + 'variant' => [ + 'post' => 'Post', + 'reel' => 'Rolka', + 'story' => 'Relacja', + ], + 'aspect_label' => 'Proporcje', + 'aspect' => [ + 'square' => 'Kwadrat (1:1)', + 'portrait' => 'Pionowy (4:5)', + 'landscape' => 'Poziomy (16:9)', + 'original' => 'Oryginalny', + ], + ], + 'linkedin' => [ + 'settings' => 'Ustawienia LinkedIn', + 'settings_page' => 'Ustawienia strony LinkedIn', + 'posting_to' => 'Publikowanie na', + 'document_title' => 'Tytuł dokumentu', + 'document_title_placeholder' => 'Wyświetlany w Twoim poście z dokumentem PDF', + ], + 'pinterest' => [ + 'settings' => 'Ustawienia Pinterest', + 'posting_to' => 'Publikowanie na', + 'variant_label' => 'Typ Pina', + 'variant' => [ + 'pin' => 'Pin', + 'video_pin' => 'Pin wideo', + 'carousel' => 'Karuzela', + ], + 'board' => 'Tablica', + 'select_board' => 'Wybierz tablicę', + 'no_boards' => 'Nie znaleziono tablic Pinterest. Najpierw utwórz jedną na swoim koncie Pinterest.', + 'search_board' => 'Szukaj tablic...', + 'no_board_found' => 'Brak tablic pasujących do wyszukiwania.', + 'board_required' => 'Wybierz tablicę Pinterest, aby opublikować ten post.', + ], + 'discord' => [ + 'settings' => 'Ustawienia Discord', + 'posting_to' => 'Publikowanie na', + 'channel' => 'Kanał', + 'select_channel' => 'Wybierz kanał', + 'loading_channels' => 'Wczytywanie kanałów…', + 'search_channel' => 'Szukaj kanałów…', + 'no_channels' => 'Nie znaleziono kanałów.', + 'channel_required' => 'Wybierz kanał Discord, aby opublikować ten post.', + 'mentions' => 'Wzmianki', + 'search_mention' => 'Wspomnij rolę lub członka…', + 'embeds' => 'Osadzenia', + 'embed' => 'Osadzenie', + 'add_embed' => 'Dodaj osadzenie', + 'embed_title' => 'Tytuł osadzenia', + 'embed_description' => 'Opis osadzenia', + 'embed_url' => 'Adres URL osadzenia', + 'embed_image' => 'Adres URL obrazu', + 'embed_color' => 'Kolor', + ], + 'warnings' => [ + 'no_variant' => 'Wybierz typ posta, aby kontynuować.', + 'requires_media' => 'Ten typ posta wymaga co najmniej jednego obrazu lub filmu.', + 'max_files_exceeded' => 'Ten typ posta akceptuje maksymalnie :max plików multimedialnych (masz :current).', + 'min_files_required' => 'Ten typ posta wymaga co najmniej :min plików multimedialnych (masz :current).', + 'no_video_allowed' => 'Ten typ posta nie akceptuje filmów.', + 'no_image_allowed' => 'Ten typ posta akceptuje tylko filmy.', + 'no_document_allowed' => 'Ten typ posta nie akceptuje dokumentów PDF.', + 'no_mixed_media' => 'Obrazów i filmu nie można łączyć w tym samym poście.', + 'document_not_alone' => 'PDF musi być publikowany samodzielnie, bez innych obrazów lub filmów.', + 'gif_not_allowed' => 'Ta platforma nie akceptuje GIF-ów. Usuń GIF lub wybierz inną sieć.', + 'image_too_large' => 'Obraz przekracza limit :max dla tego typu posta (Twój ma :current).', + 'video_too_large' => 'Film przekracza limit :max dla tego typu posta (Twój ma :current).', + 'document_too_large' => 'PDF przekracza limit :max dla tego typu posta (Twój ma :current).', + 'video_too_long' => 'Film trwa :current, ale ten typ posta pozwala na maks. :max.', + 'aspect_ratio_too_narrow' => 'Proporcje :current są zbyt wysokie dla tego typu posta (min :min).', + 'aspect_ratio_too_wide' => 'Proporcje :current są zbyt szerokie dla tego typu posta (maks :max).', + ], + ], + + 'status' => [ + 'pending' => 'Oczekuje', + 'draft' => 'Szkic', + 'scheduled' => 'Zaplanowany', + 'publishing' => 'Publikowanie', + 'retrying' => 'Ponawianie', + 'published' => 'Opublikowany', + 'partially_published' => 'Częściowo opublikowany', + 'failed' => 'Nieudany', + ], + + 'descriptions' => [ + 'draft' => 'Posty oczekujące na zaplanowanie', + 'scheduled' => 'Posty zaplanowane do publikacji', + 'published' => 'Posty już opublikowane', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'Wygeneruj z AI', + 'title' => 'Wygeneruj post z AI', + 'description' => 'Opisz, o czym ma być post. AI wykorzysta kontekst Twojej marki, aby go napisać.', + 'prompt_label' => 'O czym jest ten post?', + 'prompt_placeholder' => 'np. Ogłoś naszą nową funkcję generowania obrazów do karuzel', + 'preview_label' => 'Podgląd', + 'start' => 'Generuj', + 'apply' => 'Użyj tej treści', + 'retry' => 'Spróbuj ponownie', + 'cancel' => 'Anuluj', + ], + 'review' => [ + 'button_tooltip' => 'Sprawdź z AI', + 'title' => 'Sprawdź post z AI', + 'description' => 'AI skanuje gramatykę, pisownię i przejrzystość. Zastosuj sugestie, z którymi się zgadzasz.', + 'loading' => 'Sprawdzanie Twojego tekstu...', + 'no_issues' => 'Nie znaleziono problemów. Wygląda dobrze.', + 'original' => 'Oryginał', + 'suggestion' => 'Sugestia', + 'apply' => 'Zastosuj', + 'apply_all' => 'Zastosuj wszystkie', + 'applied' => 'Zastosowano', + 'cancel' => 'Anuluj', + ], + 'image_regenerate' => [ + 'button' => 'Dostosuj', + 'title' => 'Dostosuj obraz AI', + 'description' => 'Opisz poprawkę. Nowy obraz zastąpi obecny i zachowa swoją pozycję w karuzeli.', + 'instruction_label' => 'Instrukcja', + 'instruction_placeholder' => 'np. Popraw literówkę w nagłówku i rozjaśnij tło.', + 'processing' => 'Regenerowanie obrazu... to może zająć kilka sekund.', + 'submit' => 'Regeneruj obraz', + 'cancel' => 'Anuluj', + 'success' => 'Obraz zaktualizowany. Nowa wersja zastąpiła poprzednią w Twoim poście.', + 'fallback_title' => 'Ulepsz tekst tego obrazu', + 'errors' => [ + 'required' => 'Instrukcja jest wymagana.', + 'start_failed' => 'Nie udało się rozpocząć regeneracji.', + 'unavailable' => 'Nie można teraz zregenerować tego obrazu.', + 'timeout' => 'Regeneracja trwa dłużej niż oczekiwano. Spróbuj ponownie za chwilę.', + 'media_not_found' => 'Nie znaleziono elementu multimedialnego.', + 'not_ai_media' => 'Regenerować można tylko multimedia wygenerowane przez AI.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'Post z obrazem', + 'description' => 'Obraz AI z nagłówkiem i podpisem.', + ], + 'carousel' => [ + 'name' => 'Karuzela', + 'description' => 'Karuzela z wieloma slajdami i podpisem.', + ], + 'tweet_card' => [ + 'name' => 'Karta tweeta', + 'description' => 'Twój post w stylu wpisu X/Twitter.', + ], + 'tweet_card_image' => [ + 'name' => 'Karta tweeta ze zdjęciem', + 'description' => 'Twój post jako karta X/Twitter na rozmytym zdjęciu.', + ], + ], + ], + + 'show' => [ + 'title' => 'Szczegóły posta', + 'edit' => 'Edytuj', + 'back' => 'Wstecz', + 'no_content' => 'Brak podpisu', + 'platforms' => 'Platformy', + 'no_platforms' => 'Nie wybrano platform.', + 'view_on_platform' => 'Zobacz na platformie', + 'published_on' => 'Opublikowano :date', + 'scheduled_for' => 'Zaplanowano na :date', + 'draft' => 'Szkic', + 'status_pending' => 'Oczekuje', + 'metrics' => 'Metryki', + 'metrics_loading' => 'Wczytywanie metryk…', + 'metrics_unavailable' => 'Metryki dla tej platformy nie są jeszcze dostępne.', + 'metrics_empty' => 'Nie zwrócono żadnych metryk.', + ], + + 'edit' => [ + 'title' => 'Edytuj post', + 'view_title' => 'Zobacz post', + 'labels' => 'Etykiety', + 'no_labels' => 'Nie utworzono jeszcze etykiet', + 'schedule' => 'Zaplanuj', + 'pick_time' => 'Wybierz godzinę', + 'pick_time_past' => 'Wybierz przyszłą datę i godzinę.', + 'post_now' => 'Opublikuj teraz', + 'time' => 'Godzina', + 'cancel' => 'Anuluj', + 'delete' => 'Usuń', + 'schedule_for' => 'Zaplanuj na', + 'schedule_date' => 'Data publikacji', + 'unschedule' => 'Anuluj planowanie', + 'saving' => 'Zapisywanie...', + 'saved' => 'Zapisano', + 'draft' => 'Szkic', + 'media' => 'Media', + 'add_media' => 'Dodaj multimedia', + 'caption' => 'Podpis', + 'caption_placeholder' => 'Napisz swój podpis...', + 'compose_title' => 'Utwórz post', + 'compose_subtitle' => 'Napisz wiadomość i dodaj multimedia', + 'preview_empty' => [ + 'title' => 'Nie wybrano platformy', + 'description' => 'Wybierz platformę do publikacji, aby zobaczyć podgląd.', + ], + 'drop_zone_title' => 'Dodaj multimedia', + 'drop_zone_subtitle' => 'Przeciągnij i upuść pliki lub kliknij, aby przeglądać', + 'add' => 'Dodaj', + 'publish_to' => 'Publikuj na', + 'organize' => 'Organizuj', + 'signatures' => 'Sygnatury', + 'view_on_platform' => 'Zobacz na platformie', + 'platform_status' => 'Status platformy', + 'compliance_incomplete' => 'Niektóre ustawienia platformy są niekompletne lub niezgodne z dołączonymi multimediami.', + 'compliance' => [ + 'requires_content_or_media' => 'Dodaj tekst lub multimedia, aby opublikować.', + 'requires_media' => 'Dodaj obraz lub film, aby tu opublikować.', + 'too_many_files' => 'Dla tego formatu dozwolone są tylko :max plików.', + 'too_few_files' => 'Dodaj co najmniej :min plików dla tego formatu.', + 'no_videos' => 'Dla tego formatu dozwolone są tylko obrazy.', + 'no_images' => 'Dla tego formatu dozwolone są tylko filmy.', + 'no_mixed_media' => 'Obrazów i filmów nie można łączyć w tym samym poście.', + 'no_gifs' => 'GIF-y nie są tutaj obsługiwane.', + 'no_documents' => 'Dokumenty PDF nie są obsługiwane przez ten format.', + 'document_not_alone' => 'PDF musi być publikowany samodzielnie, bez innych obrazów lub filmów.', + 'video_too_large' => 'Film przekracza limit rozmiaru dla tej platformy.', + 'video_too_long' => 'Film musi trwać krócej niż :seconds sekund dla tego formatu.', + 'image_too_large' => 'Obraz przekracza limit rozmiaru dla tej platformy.', + 'document_too_large' => 'PDF przekracza limit rozmiaru dla tej platformy.', + 'aspect_ratio_invalid' => 'Proporcje nie są obsługiwane przez ten format.', + 'no_content_type' => 'Wybierz typ treści dla tej platformy.', + 'requires_text' => 'Dodaj tekst — ten format wymaga tytułu.', + ], + 'publishing' => 'Publikowanie...', + 'publishing_overlay_title' => 'Twój post jest publikowany', + 'publishing_overlay_subtitle' => 'To może potrwać chwilę. Możesz bezpiecznie opuścić tę stronę.', + 'scheduled_overlay_title' => 'Ten post jest zaplanowany', + 'scheduled_overlay_subtitle' => 'Zaplanowano na :date. Aby wprowadzić zmiany, najpierw anuluj planowanie.', + 'unschedule_cta' => 'Anuluj planowanie, aby edytować', + + 'tabs' => [ + 'preview' => 'Podgląd', + 'channels' => 'Kanały', + 'comments' => 'Komentarze', + 'comments_empty' => 'Brak komentarzy.', + ], + + 'media_picker' => [ + 'title' => 'Wybierz z galerii', + 'search' => 'Szukaj multimediów...', + 'empty' => 'Brak multimediów w Twojej galerii', + 'cancel' => 'Anuluj', + 'add' => 'Dodaj', + 'add_count' => 'Dodaj :count', + ], + + 'emoji_picker' => [ + 'search' => 'Szukaj emoji', + 'empty' => 'Nie znaleziono emoji', + 'recent' => 'Często używane', + 'smileys' => 'Uśmiechy i emocje', + 'people' => 'Ludzie i ciało', + 'nature' => 'Zwierzęta i natura', + 'food' => 'Jedzenie i napoje', + 'activities' => 'Aktywności', + 'travel' => 'Podróże i miejsca', + 'objects' => 'Przedmioty', + 'symbols' => 'Symbole', + 'flags' => 'Flagi', + ], + + 'status' => [ + 'pending' => 'Oczekuje', + 'scheduled' => 'Zaplanowany', + 'published' => 'Opublikowany', + 'publishing' => 'Publikowanie...', + 'retrying' => 'Ponawianie...', + 'failed' => 'Nieudany', + ], + + 'delete_modal' => [ + 'title' => 'Usuń post', + 'description' => 'Czy na pewno chcesz usunąć ten post? Tej operacji nie można cofnąć.', + 'action' => 'Usuń', + 'cancel' => 'Anuluj', + ], + + 'sync_enable' => [ + 'title' => 'Włączyć synchronizację?', + 'description' => 'Wszystkie platformy będą współdzielić tę samą treść. Wszelkie niestandardowe zmiany wprowadzone na poszczególnych platformach zostaną zastąpione bieżącą treścią.', + 'cancel' => 'Anuluj', + 'action' => 'Włącz synchronizację', + ], + + 'sync_disable' => [ + 'title' => 'Wyłączyć synchronizację?', + 'description' => 'Każda platforma zachowa swoją bieżącą treść, ale przyszłe zmiany będą dotyczyć tylko platformy, którą edytujesz.', + 'customize_note' => 'Będziesz mógł dostosować treść dla każdej platformy indywidualnie.', + 'cancel' => 'Anuluj', + 'action' => 'Wyłącz synchronizację', + ], + + 'platforms_dialog' => [ + 'title' => 'Wybierz platformy', + 'description' => 'Wybierz platformy, na których chcesz opublikować ten post.', + ], + + 'signatures_modal' => [ + 'search' => 'Szukaj sygnatur...', + 'no_results' => 'Nie znaleziono sygnatur.', + ], + + 'validation' => [ + 'select_board' => 'Wybierz tablicę', + 'images_not_supported' => 'Obrazy nieobsługiwane', + 'videos_not_supported' => 'Filmy nieobsługiwane', + 'max_images' => 'Maks. :count obrazów', + 'requires_media' => 'Wymaga multimediów', + 'requires_content' => 'Treść tekstowa jest wymagana', + 'exceeded' => 'Przekroczono o :count', + 'does_not_support_images' => ':platform nie obsługuje obrazów', + 'supports_up_to_images' => ':platform obsługuje maks. :count obrazów', + 'does_not_support_videos' => ':platform nie obsługuje filmów', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'Post na feedzie', + 'description' => 'Pojawia się w Twoim feedzie i profilu', + ], + 'instagram_reel' => [ + 'label' => 'Rolka', + 'description' => 'Krótki film do 90 sekund', + ], + 'instagram_story' => [ + 'label' => 'Relacja', + 'description' => 'Znika po 24 godzinach', + ], + 'linkedin_post' => [ + 'label' => 'Post', + 'description' => 'Standardowy post — pojedynczy obraz, wiele obrazów, wideo lub PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'Post', + 'description' => 'Standardowy post — pojedynczy obraz, wiele obrazów, wideo lub PDF', + ], + 'facebook_post' => [ + 'label' => 'Post', + 'description' => 'Standardowy post na Twojej stronie', + ], + 'facebook_reel' => [ + 'label' => 'Rolka', + 'description' => 'Krótki film do 90 sekund', + ], + 'facebook_story' => [ + 'label' => 'Relacja', + 'description' => 'Pionowa relacja wideo, do 60 sekund', + ], + 'tiktok_video' => [ + 'label' => 'Wideo', + 'description' => 'Krótka treść wideo', + ], + 'tiktok_photo' => [ + 'label' => 'Karuzela zdjęć', + 'description' => 'Do 35 zdjęć w postaci przewijalnej karuzeli', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => 'Pionowy film do 60 sekund', + ], + 'x_post' => [ + 'label' => 'Post', + 'description' => 'Tweet z tekstem i multimediami', + ], + 'threads_post' => [ + 'label' => 'Post', + 'description' => 'Post tekstowy z opcjonalnymi multimediami', + ], + 'pinterest_pin' => [ + 'label' => 'Pin', + 'description' => 'Standardowy pin ze zdjęciem', + ], + 'pinterest_video_pin' => [ + 'label' => 'Pin wideo', + 'description' => 'Pin wideo (4 s – 15 min)', + ], + 'pinterest_carousel' => [ + 'label' => 'Karuzela', + 'description' => 'Karuzela wieloobrazowa (2–5 obrazów)', + ], + 'bluesky_post' => [ + 'label' => 'Post', + 'description' => 'Post tekstowy z opcjonalnymi obrazami', + ], + 'mastodon_post' => [ + 'label' => 'Post', + 'description' => 'Post tekstowy z opcjonalnymi multimediami', + ], + 'telegram_post' => [ + 'label' => 'Post', + 'description' => 'Post tekstowy z opcjonalnymi multimediami', + ], + 'discord_message' => [ + 'label' => 'Wiadomość', + 'description' => 'Wiadomość na kanale Discord z opcjonalnymi multimediami i osadzeniami', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'Strona LinkedIn', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Strona na Facebooku', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'Post został pomyślnie zaplanowany!', + 'deleted' => 'Post został pomyślnie usunięty!', + 'duplicated' => 'Post zduplikowano jako szkic.', + 'cannot_edit_finalized' => 'Ten post został już przetworzony i nie można go ponownie opublikować. Zduplikuj go, aby spróbować ponownie.', + 'cannot_delete_published' => 'Opublikowanych postów nie można usunąć.', + 'connect_first' => 'Połącz co najmniej jedną sieć społecznościową przed utworzeniem posta.', + ], + + 'errors' => [ + 'account_disconnected' => 'Konto społecznościowe jest rozłączone', + 'account_inactive' => 'Konto społecznościowe jest dezaktywowane', + 'account_token_expired' => 'Sesja konta społecznościowego wygasła — połącz ponownie', + ], + + 'delete' => [ + 'title' => 'Usunąć post?', + 'description' => 'Tej operacji nie można cofnąć. Post i wszystkie jego multimedia zostaną trwale usunięte.', + 'confirm' => 'Tak, usuń', + 'cancel' => 'Anuluj', + ], + + 'create' => [ + 'title' => 'Utwórz nowy post', + 'description' => 'Wybierz, jak chcesz zacząć.', + 'scratch_title' => 'Zacznij od zera', + 'scratch_description' => 'Otwórz pusty post i napisz wszystko samodzielnie.', + 'ai_title' => 'Wygeneruj z AI', + 'ai_description' => 'Opisz, czego chcesz, a AI wygeneruje treść za Ciebie.', + 'ai_configure_description' => 'Wybierz format i opisz post, który chcesz utworzyć.', + 'ai_pick_template_description' => 'Wybierz styl dla swojego posta wygenerowanego przez AI.', + 'template_title' => 'Użyj szablonu', + 'template_description' => 'Wybierz jeden z naszych wyselekcjonowanych szablonów i dostosuj go.', + 'coming_soon' => 'Wkrótce', + + 'preview' => [ + 'image_title' => 'Tytuł obrazu', + 'image_body' => 'Treść obrazu', + ], + + 'steps' => [ + 'template_picker_title' => 'Wybierz styl', + 'format_title' => 'Wybierz format', + 'format_description' => 'Wybierz typ posta, który chcesz utworzyć.', + 'account_title' => 'Wybierz konto', + 'account_description' => 'Wybierz konto społecznościowe do publikacji.', + 'media_title' => 'Opcje multimediów', + 'media_carousel' => 'Ile slajdów?', + 'media_optional' => 'Dołączyć obrazy?', + 'media_optional_label' => 'Ile obrazów?', + 'media_none' => 'Brak', + 'media_count_label' => 'Liczba obrazów', + 'prompt_title' => 'Opisz swój post', + 'prompt_label' => 'O czym jest ten post?', + 'prompt_placeholder' => 'np. Ogłoś naszą nową funkcję karuzeli na Instagramie', + 'preview_error' => 'Coś poszło nie tak. Spróbuj ponownie.', + 'loading_page_title' => 'Generowanie Twojego posta', + 'loading_eta' => 'Szacowany czas: około :minutes.', + 'loading_eta_minute_one' => '1 minuta', + 'loading_eta_minute_other' => ':count minut', + 'loading_leave_title' => 'Możesz dalej pracować.', + 'loading_leave_body' => 'Powiadomimy Cię, gdy post będzie gotowy.', + 'loading_leave_cta' => 'Przejdź do kalendarza', + 'loading_create_another_cta' => 'Utwórz kolejny post', + 'loading_tip_credits' => 'Każdy obraz AI zużywa około 15 kredytów.', + 'loading_tip_edit' => 'Będziesz mógł edytować wszystko, gdy post będzie gotowy.', + 'loading_tip_draft' => 'Wygenerowane posty trafiają do Twoich szkiców.', + 'loading_tip_brand' => 'Dostosuj ustawienia swojej marki, aby wpłynąć na przyszłe posty.', + 'loading_tip_carousel' => 'Karuzele tworzą jeden slajd na każdy przesłany obraz.', + 'loading_tip_quality' => 'Jakość obrazu jest ustawiona tak, aby równoważyć szybkość i koszt.', + 'create' => 'Utwórz post', + 'back' => 'Wstecz', + 'next' => 'Kontynuuj', + 'cancel' => 'Anuluj', + 'discard' => 'Odrzuć', + 'retry' => 'Spróbuj ponownie', + 'no_platforms' => 'Brak połączonych kont', + 'connect_first' => 'Połącz co najmniej jedno konto społecznościowe, aby korzystać z generowania AI.', + 'no_account_for_template' => 'Połącz kompatybilne konto, aby użyć tego szablonu.', + + 'format' => [ + 'instagram_feed' => 'Post na feedzie Instagram', + 'instagram_carousel' => 'Karuzela na Instagramie', + 'linkedin_post' => 'Post na LinkedIn', + 'linkedin_page_post' => 'Post na stronie LinkedIn', + 'x_post' => 'Post na X', + 'bluesky_post' => 'Post na Bluesky', + 'threads_post' => 'Post na Threads', + 'mastodon_post' => 'Post na Mastodon', + 'telegram_post' => 'Post na Telegramie', + 'discord_message' => 'Wiadomość na Discord', + 'facebook_post' => 'Post na Facebooku', + 'pinterest_pin' => 'Pin na Pinterest', + 'instagram_story' => 'Relacja na Instagramie', + 'facebook_story' => 'Relacja na Facebooku', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'Wybierz szablon', + 'browser_description' => 'Zacznij od wyselekcjonowanego szablonu i dostosuj go.', + 'search_placeholder' => 'Szukaj szablonów…', + 'no_search_results' => 'Brak szablonów pasujących do wyszukiwania', + 'try_different_search' => 'Spróbuj innego słowa kluczowego lub wyczyść wyszukiwanie.', + 'slides_count' => '{count} slajd|{count} slajdy|{count} slajdów', + 'all_platforms' => 'Wszystkie platformy', + 'platform_search_placeholder' => 'Szukaj platformy…', + 'no_platform_match' => 'Brak pasujących platform.', + 'use_this' => 'Użyj tego szablonu', + 'no_templates' => 'Brak dostępnych szablonów.', + 'applying' => 'Stosowanie szablonu…', + 'category' => [ + 'product_launch' => 'Premiera produktu', + 'promotion' => 'Promocja', + 'educational' => 'Edukacyjny', + 'behind_the_scenes' => 'Za kulisami', + 'testimonial' => 'Opinia klienta', + 'industry_tip' => 'Wskazówka branżowa', + 'event' => 'Wydarzenie', + 'engagement' => 'Zaangażowanie', + ], + ], +]; diff --git a/lang/pl/settings.php b/lang/pl/settings.php new file mode 100644 index 00000000..0b464063 --- /dev/null +++ b/lang/pl/settings.php @@ -0,0 +1,356 @@ + 'Ustawienia', + 'description' => 'Zarządzaj swoim profilem i ustawieniami konta', + + 'hub' => [ + 'title' => 'Ustawienia', + 'description' => 'Wybierz, czym chcesz zarządzać.', + 'profile' => [ + 'title' => 'Profil', + 'description' => 'Zaktualizuj swoje dane osobowe, hasło i preferencje powiadomień.', + ], + 'workspace' => [ + 'title' => 'Przestrzeń robocza', + 'description' => 'Skonfiguruj swoją przestrzeń roboczą, markę, członków i klucze API.', + ], + 'account' => [ + 'title' => 'Konto', + 'description' => 'Zarządzaj danymi konta, wykorzystaniem i rozliczeniami.', + ], + ], + + 'nav' => [ + 'profile' => 'Profil', + 'authentication' => 'Uwierzytelnianie', + 'workspace' => 'Przestrzeń robocza', + 'members' => 'Członkowie', + 'notifications' => 'Powiadomienia', + 'billing' => 'Rozliczenia', + ], + + 'notifications' => [ + 'title' => 'Preferencje powiadomień', + 'heading' => 'Powiadomienia e-mail', + 'description' => 'Wybierz, które powiadomienia e-mail chcesz otrzymywać', + 'post_published' => 'Post opublikowany', + 'post_published_description' => 'Otrzymuj e-mail, gdy Twój post zostanie pomyślnie opublikowany', + 'post_failed' => 'Publikacja posta nie powiodła się', + 'post_failed_description' => 'Otrzymuj e-mail, gdy publikacja Twojego posta się nie powiedzie', + 'account_disconnected' => 'Konto rozłączone', + 'account_disconnected_description' => 'Otrzymuj e-mail, gdy konto społecznościowe zostanie rozłączone', + 'save' => 'Zapisz preferencje', + ], + + 'profile' => [ + 'title' => 'Ustawienia profilu', + 'photo_heading' => 'Zdjęcie profilowe', + 'photo_description' => 'Prześlij zdjęcie profilowe', + 'heading' => 'Informacje o profilu', + 'description' => 'Zaktualizuj swoje imię i adres e-mail', + 'avatar' => 'Awatar', + 'name' => 'Imię i nazwisko', + 'name_placeholder' => 'Imię i nazwisko', + 'email' => 'Adres e-mail', + 'email_placeholder' => 'Adres e-mail', + 'email_unverified' => 'Twój adres e-mail nie został zweryfikowany.', + 'resend_verification' => 'Kliknij tutaj, aby ponownie wysłać e-mail weryfikacyjny.', + 'verification_sent' => 'Nowy link weryfikacyjny został wysłany na Twój adres e-mail.', + 'save' => 'Zapisz', + ], + + 'authentication' => [ + 'title' => 'Uwierzytelnianie', + 'page_title' => 'Ustawienia uwierzytelniania', + 'sessions' => [ + 'title' => 'Aktywne sesje', + 'description' => 'Jeśli zauważysz coś podejrzanego, wyloguj się z innych urządzeń.', + 'unknown_browser' => 'Nieznana przeglądarka', + 'unknown_ip' => 'Nieznany adres IP', + 'on' => 'w', + 'active_now' => 'Aktywna teraz', + 'log_out_others' => 'Wyloguj inne urządzenia', + 'modal_title' => 'Wyloguj inne urządzenia', + 'modal_description_password' => 'Wprowadź swoje aktualne hasło, aby potwierdzić chęć wylogowania innych sesji przeglądarki.', + 'modal_description_email' => 'Wpisz swój adres e-mail, aby potwierdzić chęć wylogowania innych sesji przeglądarki.', + 'password_placeholder' => 'Aktualne hasło', + 'email_placeholder' => 'E-mail Twojego konta', + 'cancel' => 'Anuluj', + 'submit' => 'Wyloguj inne urządzenia', + 'email_mismatch' => 'Adres e-mail nie zgadza się z Twoim kontem.', + 'flash_logged_out' => 'Zostałeś wylogowany z innych urządzeń.', + ], + 'password' => [ + 'update_title' => 'Zaktualizuj hasło', + 'set_title' => 'Ustaw hasło', + 'update_description' => 'Upewnij się, że Twoje konto używa długiego, losowego hasła, aby zachować bezpieczeństwo.', + 'set_description' => 'Dodaj hasło, aby móc logować się bez połączonego dostawcy.', + 'current_password' => 'Aktualne hasło', + 'new_password' => 'Nowe hasło', + 'confirm_password' => 'Potwierdź hasło', + 'save' => 'Zapisz hasło', + 'set' => 'Ustaw hasło', + ], + 'providers' => [ + 'title' => 'Połączone konta', + 'description' => 'Loguj się szybciej dzięki tym połączonym dostawcom.', + 'connected' => 'Połączone', + 'not_connected' => 'Niepołączone', + 'connect' => 'Połącz', + 'disconnect' => 'Rozłącz', + 'flash_disconnected' => ':provider zostało pomyślnie rozłączone.', + 'flash_connected' => ':provider zostało pomyślnie połączone.', + 'flash_already_linked' => 'To konto :provider jest już powiązane z innym użytkownikiem.', + 'flash_cannot_disconnect' => 'Nie możesz rozłączyć swojej jedynej metody logowania. Najpierw ustaw hasło lub połącz innego dostawcę.', + ], + ], + + 'delete_account' => [ + 'heading' => 'Usuń konto', + 'description' => 'Usuń swoje konto i wszystkie jego zasoby', + 'warning' => 'Ostrzeżenie', + 'warning_message' => 'Zachowaj ostrożność, tej operacji nie można cofnąć.', + 'button' => 'Usuń konto', + 'modal_title' => 'Czy na pewno chcesz usunąć swoje konto?', + 'modal_description_password' => 'Po usunięciu konta wszystkie jego zasoby i dane również zostaną trwale usunięte. Wprowadź hasło, aby potwierdzić.', + 'modal_description_email' => 'Po usunięciu konta wszystkie jego zasoby i dane również zostaną trwale usunięte. Wpisz swój adres e-mail :email, aby potwierdzić.', + 'password' => 'Hasło', + 'password_placeholder' => 'Hasło', + 'email_placeholder' => 'E-mail Twojego konta', + 'email_mismatch' => 'Adres e-mail nie zgadza się z Twoim kontem.', + 'cancel' => 'Anuluj', + 'confirm' => 'Usuń konto', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'Przestrzeń robocza', + 'brand' => 'Marka', + 'users' => 'Członkowie', + 'api_keys' => 'Klucze API', + ], + 'title' => 'Ustawienia przestrzeni roboczej', + 'logo_heading' => 'Logo przestrzeni roboczej', + 'logo_description' => 'Prześlij logo dla swojej przestrzeni roboczej', + 'heading' => 'Nazwa przestrzeni roboczej', + 'description' => 'Zaktualizuj nazwę swojej przestrzeni roboczej', + 'members_heading' => 'Członkowie', + 'members_description' => 'Zarządzaj członkami i zaproszeniami przestrzeni roboczej', + 'name' => 'Nazwa', + 'name_placeholder' => 'Moja przestrzeń robocza', + 'save' => 'Zapisz', + ], + + 'brand' => [ + 'title' => 'Marka', + 'description' => 'Skonfiguruj tożsamość swojej marki dla treści generowanych przez AI.', + 'name' => 'Nazwa przestrzeni roboczej', + 'name_placeholder' => 'Moja marka', + 'website' => 'Strona internetowa', + 'website_placeholder' => 'https://twojamarka.com', + 'brand_description' => 'Opis', + 'brand_description_placeholder' => 'Opowiedz nam o swojej marce, czym się zajmujesz i kim są Twoi odbiorcy...', + 'voice' => 'Głos marki', + 'voice_description' => 'Wybierz cechy, które definiują brzmienie Twoich treści.', + 'voice_group' => [ + 'pov' => 'Punkt widzenia', + 'formality' => 'Formalność', + 'energy' => 'Energia', + 'humor' => 'Humor', + 'attitude' => 'Nastawienie', + 'warmth' => 'Serdeczność', + 'confidence' => 'Pewność siebie', + 'style' => 'Styl', + ], + 'voice_trait' => [ + 'first_person' => 'Pierwsza osoba', + 'second_person' => 'Druga osoba (ty)', + 'third_person' => 'Trzecia osoba', + 'formal' => 'Formalny', + 'balanced' => 'Zrównoważony', + 'casual' => 'Swobodny', + 'calm' => 'Spokojny', + 'moderate' => 'Umiarkowany', + 'enthusiastic' => 'Entuzjastyczny', + 'vibrant' => 'Żywy', + 'serious' => 'Poważny', + 'dry' => 'Suchy / subtelny', + 'witty' => 'Dowcipny', + 'playful' => 'Figlarny', + 'respectful' => 'Pełen szacunku', + 'even_handed' => 'Bezstronny', + 'bold' => 'Śmiały', + 'provocative' => 'Prowokacyjny', + 'neutral' => 'Neutralny', + 'friendly' => 'Przyjazny', + 'empathetic' => 'Empatyczny', + 'humble' => 'Skromny', + 'confident' => 'Pewny siebie', + 'assertive' => 'Asertywny', + 'direct' => 'Bezpośredni', + 'concise' => 'Zwięzły', + 'transparent' => 'Przejrzysty', + 'no_hype' => 'Bez szumu', + 'practical' => 'Praktyczny', + 'data_driven' => 'Oparty na danych', + 'storytelling' => 'Narracyjny', + 'inspirational' => 'Inspirujący', + 'educational' => 'Edukacyjny', + 'technical' => 'Techniczny', + 'minimalist' => 'Mało emoji', + ], + 'brand_color' => 'Kolor marki', + 'background_color' => 'Kolor tła', + 'text_color' => 'Kolor tekstu', + 'font' => 'Czcionka', + 'image_style' => 'Styl obrazu', + 'image_style_description' => 'Styl wizualny stosowany podczas generowania slajdów i okładek do postów AI.', + 'image_style_cinematic' => 'Filmowy', + 'image_style_illustration' => 'Ilustracja', + 'image_style_isometric_3d' => 'Izometryczny', + 'image_style_cartoon' => 'Kreskówkowy', + 'image_style_typographic' => 'Typograficzny', + 'image_style_infographic' => 'Infografika', + 'image_style_minimalist' => 'Minimalistyczny', + 'image_style_mockup' => 'Makieta', + 'content_language' => 'Język treści', + 'content_language_description' => 'Język używany w podpisach, hasztagach generowanych przez AI oraz w dowolnym tekście wewnątrz generowanych obrazów lub filmów.', + ], + + 'members' => [ + 'title' => 'Członkowie', + 'heading' => 'Członkowie zespołu', + 'description' => 'Zarządzaj członkami i zaproszeniami tej przestrzeni roboczej', + + 'cancel' => 'Anuluj', + 'remove' => 'Usuń', + 'make_role' => 'Ustaw jako :role', + + 'invite' => [ + 'title' => 'Zaproś członka', + 'description' => 'Wyślij zaproszenie e-mail, aby dodać współpracowników', + 'email' => 'E-mail', + 'email_placeholder' => 'wspolpracownik@email.com', + 'role' => 'Rola', + 'role_placeholder' => 'Wybierz rolę', + 'submit' => 'Wyślij zaproszenie', + ], + + 'pending' => [ + 'title' => 'Oczekujące zaproszenia', + 'description' => 'Zaproszenia oczekujące na akceptację', + 'empty' => 'Brak oczekujących zaproszeń', + ], + + 'list' => [ + 'title' => 'Członkowie', + 'description' => 'Osoby z dostępem do tej przestrzeni roboczej', + 'empty' => 'Brak członków poza właścicielem', + ], + + 'remove_modal' => [ + 'title' => 'Usuń członka', + 'description' => 'Czy na pewno chcesz usunąć tego członka z przestrzeni roboczej? Utraci on dostęp do wszystkich zasobów przestrzeni roboczej.', + 'action' => 'Usuń członka', + ], + + 'cancel_invite_modal' => [ + 'title' => 'Anuluj zaproszenie', + 'description' => 'Czy na pewno chcesz anulować to zaproszenie?', + 'action' => 'Anuluj zaproszenie', + ], + + 'roles' => [ + 'owner' => 'Właściciel', + 'admin' => 'Administrator', + 'member' => 'Członek', + 'viewer' => 'Przeglądający', + ], + + 'flash' => [ + 'invite_sent' => 'Zaproszenie zostało pomyślnie wysłane!', + 'invite_deleted' => 'Zaproszenie usunięte.', + 'member_removed' => 'Członek został pomyślnie usunięty.', + 'role_updated' => 'Rola członka została zaktualizowana.', + 'wrong_email' => 'To zaproszenie dotyczy innego adresu e-mail.', + 'already_member' => 'Jesteś już członkiem tej przestrzeni roboczej.', + 'invite_accepted' => 'Witamy! Jesteś teraz członkiem przestrzeni roboczej.', + 'invite_declined' => 'Zaproszenie odrzucone.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'Konto', + 'usage' => 'Wykorzystanie', + 'billing' => 'Rozliczenia', + ], + 'title' => 'Ustawienia konta', + 'description' => 'Zarządzaj nazwą konta i e-mailem rozliczeniowym', + 'name' => 'Nazwa konta', + 'name_placeholder' => 'Moja firma', + 'billing_email' => 'E-mail rozliczeniowy', + 'billing_email_placeholder' => 'rozliczenia@firma.com', + 'billing_email_hint' => 'Ten e-mail będzie używany do faktur i komunikacji rozliczeniowej ze Stripe.', + 'submit' => 'Zapisz', + ], + + 'flash' => [ + 'account_updated' => 'Konto zostało pomyślnie zaktualizowane!', + 'profile_updated' => 'Profil został pomyślnie zaktualizowany!', + 'password_updated' => 'Hasło zostało pomyślnie zaktualizowane!', + 'workspace_updated' => 'Ustawienia zostały pomyślnie zaktualizowane!', + 'photo_updated' => 'Zdjęcie zostało pomyślnie zaktualizowane!', + 'photo_deleted' => 'Zdjęcie zostało pomyślnie usunięte!', + 'logo_updated' => 'Logo zostało pomyślnie przesłane!', + 'logo_deleted' => 'Logo zostało pomyślnie usunięte!', + 'notifications_updated' => 'Preferencje powiadomień zostały zaktualizowane!', + ], + + 'api_keys' => [ + 'title' => 'Klucze API', + 'page_title' => 'Klucze API', + 'heading' => 'Klucze API', + 'description' => 'Zarządzaj kluczami API zapewniającymi programowy dostęp do Twojej przestrzeni roboczej.', + 'create' => 'Utwórz klucz API', + 'copy' => 'Kopiuj', + 'new_token_message' => 'Twój nowy klucz API został utworzony. Skopiuj go teraz — nie będziesz mógł zobaczyć go ponownie.', + 'table' => [ + 'name' => 'Nazwa', + 'key' => 'Klucz', + 'status' => 'Status', + 'expires' => 'Wygasa', + 'last_used' => 'Ostatnio użyty', + 'never' => 'Nigdy', + ], + 'actions' => [ + 'copy_id' => 'Kopiuj identyfikator klucza API', + 'copy_id_success' => 'Skopiowano identyfikator klucza API do schowka', + 'delete' => 'Usuń', + ], + 'empty' => [ + 'title' => 'Brak kluczy API', + 'description' => 'Utwórz klucz API, aby uzyskać programowy dostęp do swojej przestrzeni roboczej.', + ], + 'delete_modal' => [ + 'title' => 'Usuń klucz API', + 'description' => 'Czy na pewno chcesz usunąć ten klucz API? Wszystkie aplikacje korzystające z tego klucza natychmiast utracą dostęp.', + 'action' => 'Usuń klucz API', + ], + 'create_dialog' => [ + 'title' => 'Utwórz klucz API', + 'description' => 'Utwórz nowy klucz API zapewniający programowy dostęp do Twojej przestrzeni roboczej.', + 'name' => 'Nazwa', + 'name_placeholder' => 'np. Produkcyjny klucz API', + 'expires' => 'Data wygaśnięcia (opcjonalnie)', + 'expires_placeholder' => 'Bez wygaśnięcia', + 'submit' => 'Utwórz', + 'cancel' => 'Anuluj', + ], + 'flash' => [ + 'created' => 'Klucz API został pomyślnie utworzony!', + 'deleted' => 'Klucz API został pomyślnie usunięty!', + ], + ], +]; diff --git a/lang/pl/sidebar.php b/lang/pl/sidebar.php new file mode 100644 index 00000000..9e83547d --- /dev/null +++ b/lang/pl/sidebar.php @@ -0,0 +1,61 @@ + 'Przestrzenie robocze', + 'select_workspace' => 'Wybierz przestrzeń roboczą', + 'create_workspace' => 'Utwórz przestrzeń roboczą', + 'create_post' => 'Utwórz post', + 'profile' => 'Profil', + 'log_out' => 'Wyloguj się', + + 'workspace' => 'Przestrzeń robocza: :name', + 'workspace_select' => 'Przestrzeń robocza: Wybierz', + + 'theme' => 'Motyw: :name', + 'theme_light' => 'Jasny', + 'theme_dark' => 'Ciemny', + 'theme_system' => 'Systemowy', + + 'language' => 'Język: :name', + 'language_select' => 'Język: Wybierz', + + 'groups' => [ + 'posts' => 'Posty', + 'workspace' => 'Przestrzeń robocza', + 'others' => 'Inne', + ], + + 'analytics' => 'Analityka', + 'automations' => 'Automatyzacje', + 'settings' => 'Ustawienia', + + 'posts' => [ + 'calendar' => 'Kalendarz', + 'all' => 'Wszystkie', + 'scheduled' => 'Zaplanowane', + 'posted' => 'Opublikowane', + 'drafts' => 'Szkice', + ], + + 'workspace' => [ + 'connections' => 'Połączenia', + 'signatures' => 'Sygnatury', + 'labels' => 'Etykiety', + 'assets' => 'Zasoby', + 'api_keys' => 'Klucze API', + ], + + 'notifications' => 'Powiadomienia', + 'mark_all_read' => 'Oznacz wszystkie jako przeczytane', + 'mark_as_read' => 'Oznacz jako przeczytane', + 'archive_all' => 'Zarchiwizuj wszystkie', + 'no_notifications' => 'Brak powiadomień', + + 'support' => [ + 'docs' => 'Dokumentacja', + 'referral' => 'Zarabiaj 30% z poleceń', + 'stay_updated' => 'Bądź na bieżąco', + ], +]; diff --git a/lang/pl/signatures.php b/lang/pl/signatures.php new file mode 100644 index 00000000..909af1aa --- /dev/null +++ b/lang/pl/signatures.php @@ -0,0 +1,59 @@ + 'Sygnatury', + 'description' => 'Twórz wielokrotnego użytku sygnatury, aby szybko dołączać je do postów', + 'search' => 'Szukaj sygnatur...', + 'new' => 'Nowa sygnatura', + 'empty_title' => 'Brak sygnatur', + 'empty_description' => 'Twórz sygnatury, aby szybko dołączać do postów hasztagi, linki lub dowolny wielokrotnego użytku tekst', + 'no_search_results' => 'Brak sygnatur pasujących do wyszukiwania', + 'try_different_search' => 'Spróbuj innego słowa kluczowego lub wyczyść wyszukiwanie.', + 'table' => [ + 'name' => 'Nazwa', + 'content' => 'Treść', + 'created_at' => 'Utworzono', + ], + + 'actions' => [ + 'edit' => 'Edytuj sygnaturę', + 'delete' => 'Usuń sygnaturę', + ], + + 'create' => [ + 'title' => 'Utwórz sygnaturę', + 'description' => 'Nadaj sygnaturze nazwę i podaj treść do dołączenia (hasztagi, linki, własny tekst — wszystko, co powtarzasz).', + 'name' => 'Nazwa', + 'name_placeholder' => 'np. Marketing, Podróże, Stopka marki', + 'content' => 'Treść', + 'content_placeholder' => "#marketing #socialmedia\nDowiedz się więcej: https://twojamarka.com", + 'content_hint' => 'Hasztagi, linki, własne wstępy, zakończenia — wszystko, co dołączasz do postów.', + 'submit' => 'Utwórz sygnaturę', + 'submitting' => 'Tworzenie...', + ], + + 'edit' => [ + 'title' => 'Edytuj sygnaturę', + 'description' => 'Zaktualizuj nazwę i treść tej sygnatury.', + 'name' => 'Nazwa', + 'name_placeholder' => 'np. Marketing, Podróże, Stopka marki', + 'content' => 'Treść', + 'content_placeholder' => "#marketing #socialmedia\nDowiedz się więcej: https://twojamarka.com", + 'content_hint' => 'Hasztagi, linki, własne wstępy, zakończenia — wszystko, co dołączasz do postów.', + 'submit' => 'Zapisz zmiany', + 'submitting' => 'Zapisywanie...', + ], + + 'delete' => [ + 'title' => 'Usuń sygnaturę', + 'description' => 'Czy na pewno chcesz usunąć tę sygnaturę? Tej operacji nie można cofnąć.', + 'confirm' => 'Usuń', + 'cancel' => 'Anuluj', + ], + + 'flash' => [ + 'created' => 'Sygnatura utworzona.', + 'updated' => 'Sygnatura zaktualizowana.', + 'deleted' => 'Sygnatura usunięta.', + ], +]; diff --git a/lang/pl/usage.php b/lang/pl/usage.php new file mode 100644 index 00000000..b6ff40a7 --- /dev/null +++ b/lang/pl/usage.php @@ -0,0 +1,15 @@ + 'Wykorzystanie', + + 'section_account' => 'Konto', + 'section_account_description' => 'Limity i przydziały dla Twojego planu.', + 'section_ai' => 'Kredyty AI', + 'section_ai_description' => 'Kredyty są pobierane w miarę korzystania z funkcji AI. Odnawiają się pierwszego dnia każdego miesiąca.', + + 'workspaces' => 'Przestrzenie robocze', + 'social_accounts' => 'Konta społecznościowe', + 'members' => 'Członkowie', + 'credits' => 'Kredyty', +]; diff --git a/lang/pl/validation.php b/lang/pl/validation.php new file mode 100644 index 00000000..8a4a9e7c --- /dev/null +++ b/lang/pl/validation.php @@ -0,0 +1,200 @@ + 'Pole :attribute musi zostać zaakceptowane.', + 'accepted_if' => 'Pole :attribute musi zostać zaakceptowane, gdy :other ma wartość :value.', + 'active_url' => 'Pole :attribute musi być prawidłowym adresem URL.', + 'after' => 'Pole :attribute musi być datą późniejszą niż :date.', + 'after_or_equal' => 'Pole :attribute musi być datą późniejszą lub równą :date.', + 'alpha' => 'Pole :attribute może zawierać tylko litery.', + 'alpha_dash' => 'Pole :attribute może zawierać tylko litery, cyfry, myślniki i podkreślenia.', + 'alpha_num' => 'Pole :attribute może zawierać tylko litery i cyfry.', + 'any_of' => 'Pole :attribute jest nieprawidłowe.', + 'array' => 'Pole :attribute musi być tablicą.', + 'ascii' => 'Pole :attribute może zawierać tylko jednobajtowe znaki alfanumeryczne i symbole.', + 'before' => 'Pole :attribute musi być datą wcześniejszą niż :date.', + 'before_or_equal' => 'Pole :attribute musi być datą wcześniejszą lub równą :date.', + 'between' => [ + 'array' => 'Pole :attribute musi mieć od :min do :max elementów.', + 'file' => 'Pole :attribute musi mieć od :min do :max kilobajtów.', + 'numeric' => 'Pole :attribute musi być pomiędzy :min a :max.', + 'string' => 'Pole :attribute musi mieć od :min do :max znaków.', + ], + 'boolean' => 'Pole :attribute musi mieć wartość prawda lub fałsz.', + 'can' => 'Pole :attribute zawiera nieautoryzowaną wartość.', + 'confirmed' => 'Potwierdzenie pola :attribute nie zgadza się.', + 'contains' => 'W polu :attribute brakuje wymaganej wartości.', + 'current_password' => 'Hasło jest nieprawidłowe.', + 'date' => 'Pole :attribute musi być prawidłową datą.', + 'date_equals' => 'Pole :attribute musi być datą równą :date.', + 'date_format' => 'Pole :attribute musi być w formacie :format.', + 'decimal' => 'Pole :attribute musi mieć :decimal miejsc po przecinku.', + 'declined' => 'Pole :attribute musi zostać odrzucone.', + 'declined_if' => 'Pole :attribute musi zostać odrzucone, gdy :other ma wartość :value.', + 'different' => 'Pola :attribute oraz :other muszą się różnić.', + 'digits' => 'Pole :attribute musi mieć :digits cyfr.', + 'digits_between' => 'Pole :attribute musi mieć od :min do :max cyfr.', + 'dimensions' => 'Pole :attribute ma nieprawidłowe wymiary obrazu.', + 'distinct' => 'Pole :attribute ma zduplikowaną wartość.', + 'doesnt_contain' => 'Pole :attribute nie może zawierać żadnej z następujących wartości: :values.', + 'doesnt_end_with' => 'Pole :attribute nie może kończyć się jedną z następujących wartości: :values.', + 'doesnt_start_with' => 'Pole :attribute nie może zaczynać się jedną z następujących wartości: :values.', + 'email' => 'Pole :attribute musi być prawidłowym adresem e-mail.', + 'encoding' => 'Pole :attribute musi być zakodowane w :encoding.', + 'ends_with' => 'Pole :attribute musi kończyć się jedną z następujących wartości: :values.', + 'enum' => 'Wybrana wartość :attribute jest nieprawidłowa.', + 'exists' => 'Wybrana wartość :attribute jest nieprawidłowa.', + 'extensions' => 'Pole :attribute musi mieć jedno z następujących rozszerzeń: :values.', + 'file' => 'Pole :attribute musi być plikiem.', + 'filled' => 'Pole :attribute musi mieć wartość.', + 'gt' => [ + 'array' => 'Pole :attribute musi mieć więcej niż :value elementów.', + 'file' => 'Pole :attribute musi być większe niż :value kilobajtów.', + 'numeric' => 'Pole :attribute musi być większe niż :value.', + 'string' => 'Pole :attribute musi być dłuższe niż :value znaków.', + ], + 'gte' => [ + 'array' => 'Pole :attribute musi mieć :value lub więcej elementów.', + 'file' => 'Pole :attribute musi być większe lub równe :value kilobajtów.', + 'numeric' => 'Pole :attribute musi być większe lub równe :value.', + 'string' => 'Pole :attribute musi być dłuższe lub równe :value znaków.', + ], + 'hex_color' => 'Pole :attribute musi być prawidłowym kolorem szesnastkowym.', + 'image' => 'Pole :attribute musi być obrazem.', + 'in' => 'Wybrana wartość :attribute jest nieprawidłowa.', + 'in_array' => 'Pole :attribute musi istnieć w :other.', + 'in_array_keys' => 'Pole :attribute musi zawierać co najmniej jeden z następujących kluczy: :values.', + 'integer' => 'Pole :attribute musi być liczbą całkowitą.', + 'ip' => 'Pole :attribute musi być prawidłowym adresem IP.', + 'ipv4' => 'Pole :attribute musi być prawidłowym adresem IPv4.', + 'ipv6' => 'Pole :attribute musi być prawidłowym adresem IPv6.', + 'json' => 'Pole :attribute musi być prawidłowym ciągiem JSON.', + 'list' => 'Pole :attribute musi być listą.', + 'lowercase' => 'Pole :attribute musi być zapisane małymi literami.', + 'lt' => [ + 'array' => 'Pole :attribute musi mieć mniej niż :value elementów.', + 'file' => 'Pole :attribute musi być mniejsze niż :value kilobajtów.', + 'numeric' => 'Pole :attribute musi być mniejsze niż :value.', + 'string' => 'Pole :attribute musi być krótsze niż :value znaków.', + ], + 'lte' => [ + 'array' => 'Pole :attribute nie może mieć więcej niż :value elementów.', + 'file' => 'Pole :attribute musi być mniejsze lub równe :value kilobajtów.', + 'numeric' => 'Pole :attribute musi być mniejsze lub równe :value.', + 'string' => 'Pole :attribute musi być krótsze lub równe :value znaków.', + ], + 'mac_address' => 'Pole :attribute musi być prawidłowym adresem MAC.', + 'max' => [ + 'array' => 'Pole :attribute nie może mieć więcej niż :max elementów.', + 'file' => 'Pole :attribute nie może być większe niż :max kilobajtów.', + 'numeric' => 'Pole :attribute nie może być większe niż :max.', + 'string' => 'Pole :attribute nie może być dłuższe niż :max znaków.', + ], + 'max_digits' => 'Pole :attribute nie może mieć więcej niż :max cyfr.', + 'mimes' => 'Pole :attribute musi być plikiem typu: :values.', + 'mimetypes' => 'Pole :attribute musi być plikiem typu: :values.', + 'min' => [ + 'array' => 'Pole :attribute musi mieć co najmniej :min elementów.', + 'file' => 'Pole :attribute musi mieć co najmniej :min kilobajtów.', + 'numeric' => 'Pole :attribute musi wynosić co najmniej :min.', + 'string' => 'Pole :attribute musi mieć co najmniej :min znaków.', + ], + 'min_digits' => 'Pole :attribute musi mieć co najmniej :min cyfr.', + 'missing' => 'Pole :attribute musi być nieobecne.', + 'missing_if' => 'Pole :attribute musi być nieobecne, gdy :other ma wartość :value.', + 'missing_unless' => 'Pole :attribute musi być nieobecne, chyba że :other ma wartość :value.', + 'missing_with' => 'Pole :attribute musi być nieobecne, gdy :values jest obecne.', + 'missing_with_all' => 'Pole :attribute musi być nieobecne, gdy :values są obecne.', + 'multiple_of' => 'Pole :attribute musi być wielokrotnością :value.', + 'not_in' => 'Wybrana wartość :attribute jest nieprawidłowa.', + 'not_regex' => 'Format pola :attribute jest nieprawidłowy.', + 'numeric' => 'Pole :attribute musi być liczbą.', + 'password' => [ + 'letters' => 'Pole :attribute musi zawierać co najmniej jedną literę.', + 'mixed' => 'Pole :attribute musi zawierać co najmniej jedną wielką i jedną małą literę.', + 'numbers' => 'Pole :attribute musi zawierać co najmniej jedną cyfrę.', + 'symbols' => 'Pole :attribute musi zawierać co najmniej jeden symbol.', + 'uncompromised' => 'Podane :attribute pojawiło się w wycieku danych. Wybierz inne :attribute.', + ], + 'present' => 'Pole :attribute musi być obecne.', + 'present_if' => 'Pole :attribute musi być obecne, gdy :other ma wartość :value.', + 'present_unless' => 'Pole :attribute musi być obecne, chyba że :other ma wartość :value.', + 'present_with' => 'Pole :attribute musi być obecne, gdy :values jest obecne.', + 'present_with_all' => 'Pole :attribute musi być obecne, gdy :values są obecne.', + 'prohibited' => 'Pole :attribute jest zabronione.', + 'prohibited_if' => 'Pole :attribute jest zabronione, gdy :other ma wartość :value.', + 'prohibited_if_accepted' => 'Pole :attribute jest zabronione, gdy :other jest zaakceptowane.', + 'prohibited_if_declined' => 'Pole :attribute jest zabronione, gdy :other jest odrzucone.', + 'prohibited_unless' => 'Pole :attribute jest zabronione, chyba że :other jest w :values.', + 'prohibits' => 'Pole :attribute uniemożliwia obecność :other.', + 'regex' => 'Format pola :attribute jest nieprawidłowy.', + 'required' => 'Pole :attribute jest wymagane.', + 'required_array_keys' => 'Pole :attribute musi zawierać wpisy dla: :values.', + 'required_if' => 'Pole :attribute jest wymagane, gdy :other ma wartość :value.', + 'required_if_accepted' => 'Pole :attribute jest wymagane, gdy :other jest zaakceptowane.', + 'required_if_declined' => 'Pole :attribute jest wymagane, gdy :other jest odrzucone.', + 'required_unless' => 'Pole :attribute jest wymagane, chyba że :other jest w :values.', + 'required_with' => 'Pole :attribute jest wymagane, gdy :values jest obecne.', + 'required_with_all' => 'Pole :attribute jest wymagane, gdy :values są obecne.', + 'required_without' => 'Pole :attribute jest wymagane, gdy :values nie jest obecne.', + 'required_without_all' => 'Pole :attribute jest wymagane, gdy żadne z :values nie jest obecne.', + 'same' => 'Pole :attribute musi być zgodne z :other.', + 'size' => [ + 'array' => 'Pole :attribute musi zawierać :size elementów.', + 'file' => 'Pole :attribute musi mieć :size kilobajtów.', + 'numeric' => 'Pole :attribute musi wynosić :size.', + 'string' => 'Pole :attribute musi mieć :size znaków.', + ], + 'starts_with' => 'Pole :attribute musi zaczynać się jedną z następujących wartości: :values.', + 'string' => 'Pole :attribute musi być ciągiem znaków.', + 'timezone' => 'Pole :attribute musi być prawidłową strefą czasową.', + 'unique' => 'Taka wartość pola :attribute jest już zajęta.', + 'uploaded' => 'Przesłanie pola :attribute nie powiodło się.', + 'uppercase' => 'Pole :attribute musi być zapisane wielkimi literami.', + 'url' => 'Pole :attribute musi być prawidłowym adresem URL.', + 'ulid' => 'Pole :attribute musi być prawidłowym identyfikatorem ULID.', + 'uuid' => 'Pole :attribute musi być prawidłowym identyfikatorem UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/pl/workspaces.php b/lang/pl/workspaces.php new file mode 100644 index 00000000..bd836574 --- /dev/null +++ b/lang/pl/workspaces.php @@ -0,0 +1,50 @@ + 'Przestrzenie robocze', + 'select_title' => 'Twoje przestrzenie robocze', + 'select_description' => 'Wybierz przestrzeń roboczą, aby kontynuować', + 'current' => 'Bieżąca', + 'connections' => ':count połączeń', + 'posts' => ':count postów', + + 'create' => [ + 'page_title' => 'Utwórz przestrzeń roboczą', + 'title' => 'Skonfiguruj przestrzeń roboczą', + 'description' => 'Opowiedz nam trochę o sobie lub swoim projekcie. Wykorzystamy to, aby dopasować posty generowane przez AI do Twojego stylu.', + 'website' => 'Strona internetowa', + 'website_placeholder' => 'https://twojamarka.com', + 'autofill' => 'Uzupełnij automatycznie ze strony', + 'autofill_missing_url' => 'Najpierw wprowadź adres URL.', + 'autofill_success' => 'Wczytano informacje o marce.', + 'autofill_error' => 'Nie udało się uzupełnić automatycznie. Możesz wypełnić pola ręcznie.', + 'autofill_errors' => [ + 'unreachable' => 'Nie udało się połączyć z tą stroną (:reason).', + 'http_status' => 'Strona zwróciła nieoczekiwany status (:status).', + 'invalid_scheme' => 'Obsługiwane są tylko adresy URL http i https.', + 'missing_host' => 'W adresie URL brakuje hosta.', + 'unresolvable_host' => 'Nie udało się rozpoznać hosta (:host).', + 'private_network' => 'Adresy URL wskazujące na sieci prywatne są niedozwolone.', + ], + 'logo_captured' => 'Pobrano logo z Twojej strony.', + 'name' => 'Nazwa przestrzeni roboczej', + 'name_placeholder' => 'np. Acme Inc', + 'brand_description' => 'Opis marki', + 'brand_description_placeholder' => 'Czym zajmuje się Twoja marka?', + 'content_language' => 'Język treści', + 'content_language_description' => 'Podpisy generowane przez AI będą tworzone w tym języku.', + 'brand_color' => 'Kolor marki', + 'background_color' => 'Kolor tła', + 'text_color' => 'Kolor tekstu', + 'submit' => 'Utwórz przestrzeń roboczą', + 'success' => 'Przestrzeń robocza utworzona. Połącz konto społecznościowe, aby zacząć publikować.', + ], + + 'cannot_delete_last' => 'Nie możesz usunąć swojej jedynej przestrzeni roboczej. Anuluj subskrypcję w ustawieniach rozliczeń, aby zamknąć konto.', + + 'flash' => [ + 'deleted' => 'Przestrzeń robocza została pomyślnie usunięta.', + ], +]; diff --git a/lang/ru/accounts.php b/lang/ru/accounts.php new file mode 100644 index 00000000..463bcc40 --- /dev/null +++ b/lang/ru/accounts.php @@ -0,0 +1,148 @@ + 'Подключения', + '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' => 'В целях безопасности используйте пароль приложения. Создайте его на bsky.app/settings.', + '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.', + ], +]; diff --git a/lang/ru/analytics.php b/lang/ru/analytics.php new file mode 100644 index 00000000..a0c76754 --- /dev/null +++ b/lang/ru/analytics.php @@ -0,0 +1,55 @@ + 'Нет подключённых аккаунтов с аналитикой.', + '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' => 'Частота кликов по пинам', + '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' => 'Просмотры', + ], +]; diff --git a/lang/ru/assets.php b/lang/ru/assets.php new file mode 100644 index 00000000..5722de78 --- /dev/null +++ b/lang/ru/assets.php @@ -0,0 +1,52 @@ + 'Медиафайлы', + + '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', + ], +]; diff --git a/lang/ru/auth.php b/lang/ru/auth.php new file mode 100644 index 00000000..7f4ae6a7 --- /dev/null +++ b/lang/ru/auth.php @@ -0,0 +1,141 @@ + 'Эти учётные данные не совпадают с нашими записями.', + 'password' => 'Указанный пароль неверен.', + 'throttle' => 'Слишком много попыток входа. Повторите попытку через :seconds сек.', + + 'flash' => [ + 'welcome' => 'Добро пожаловать в TryPost!', + 'welcome_trial' => 'Добро пожаловать в TryPost! Ваш пробный период начался.', + ], + + 'legal' => 'Продолжая, вы соглашаетесь с нашими Условиями использования и Политикой конфиденциальности.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'Наглядный календарь', + 'description' => 'Планируйте и назначайте контент с помощью удобного календаря с перетаскиванием для всех ваших социальных аккаунтов.', + ], + 'scheduling' => [ + 'title' => 'Умное планирование', + 'description' => 'Планируйте посты в LinkedIn, X, Instagram, TikTok, YouTube и других сетях — всё в одном месте.', + ], + 'media' => [ + 'title' => 'Богатый медиаконтент', + 'description' => 'Публикуйте изображения, карусели, истории и Reels. Для каждой платформы автоматически подбирается нужный формат.', + ], + 'video' => [ + 'title' => 'Публикация видео', + 'description' => 'Загрузите видео один раз и публикуйте в TikTok, YouTube Shorts, Instagram Reels и Facebook Reels.', + ], + 'team' => [ + 'title' => 'Командные пространства', + 'description' => 'Приглашайте команду, назначайте роли и управляйте несколькими брендами из отдельных рабочих пространств.', + ], + 'signatures' => [ + 'title' => 'Подписи', + 'description' => 'Сохраняйте многократно используемые подписи (хэштеги, ссылки, завершающие фразы) и добавляйте их к постам в один клик.', + ], + ], + + 'or_continue_with' => 'Или продолжите через', + 'or_continue_with_email' => 'Или продолжите через email', + 'google_login' => 'Войти через Google', + 'google_signup' => 'Зарегистрироваться через Google', + 'github_login' => 'Войти через GitHub', + 'github_signup' => 'Зарегистрироваться через GitHub', + 'github_email_unavailable' => 'Не удалось получить ваш email из GitHub. Сделайте email в GitHub публичным или предоставьте доступ к email, затем попробуйте снова.', + + 'signup_success' => [ + 'page_title' => 'Добро пожаловать', + 'title' => 'Настраиваем ваш аккаунт', + 'description' => 'Обычно это занимает всего несколько секунд...', + ], + + 'login' => [ + 'title' => 'Войдите в свой аккаунт', + 'description' => 'Введите email и пароль, чтобы войти', + 'page_title' => 'Вход', + 'email' => 'Адрес email', + 'password' => 'Пароль', + 'forgot_password' => 'Забыли пароль?', + 'remember_me' => 'Запомнить меня', + 'submit' => 'Войти', + 'no_account' => 'Нет аккаунта?', + 'sign_up' => 'Зарегистрироваться', + ], + + 'register' => [ + 'title' => 'Весь ваш контент-календарь в одном месте', + 'description' => 'Создайте аккаунт и начните планировать посты во всех сетях.', + 'page_title' => 'Регистрация', + 'signup_with_email' => 'Зарегистрироваться через email', + 'name' => 'Имя', + 'name_placeholder' => 'Полное имя', + 'email' => 'Адрес email', + 'password' => 'Пароль', + 'show_password' => 'Показать пароль', + 'hide_password' => 'Скрыть пароль', + 'submit' => 'Создать аккаунт', + 'has_account' => 'Уже есть аккаунт?', + 'log_in' => 'Войти', + ], + + 'forgot_password' => [ + 'title' => 'Восстановление пароля', + 'description' => 'Введите email, чтобы получить ссылку для сброса пароля', + 'page_title' => 'Восстановление пароля', + 'email' => 'Адрес email', + 'submit' => 'Отправить ссылку для сброса', + 'return_to' => 'Или вернитесь ко', + 'log_in' => 'входу', + ], + + 'reset_password' => [ + 'title' => 'Сброс пароля', + 'description' => 'Введите новый пароль ниже', + 'page_title' => 'Сброс пароля', + 'email' => 'Email', + 'password' => 'Пароль', + 'confirm_password' => 'Подтвердите пароль', + 'confirm_placeholder' => 'Подтвердите пароль', + 'submit' => 'Сбросить пароль', + ], + + 'verify_email' => [ + 'title' => 'Подтверждение email', + 'description' => 'Пожалуйста, подтвердите свой email, перейдя по ссылке, которую мы только что вам отправили.', + 'page_title' => 'Подтверждение email', + 'link_sent' => 'Новая ссылка для подтверждения отправлена на email, указанный при регистрации.', + 'resend' => 'Отправить письмо повторно', + 'log_out' => 'Выйти', + ], + + 'accept_invite' => [ + 'page_title' => 'Принять приглашение', + 'title' => 'Вас пригласили!', + 'description' => 'Вас пригласили присоединиться к рабочему пространству :workspace.', + 'workspace' => 'Рабочее пространство', + 'your_role' => 'Ваша роль', + 'email' => 'Email', + 'accept' => 'Принять приглашение', + 'decline' => 'Отклонить приглашение', + 'login_prompt' => 'Войдите или создайте аккаунт, чтобы принять приглашение.', + 'log_in' => 'Войти', + 'create_account' => 'Создать аккаунт', + ], + +]; diff --git a/lang/ru/automations.php b/lang/ru/automations.php new file mode 100644 index 00000000..ab8a628b --- /dev/null +++ b/lang/ru/automations.php @@ -0,0 +1,411 @@ + 'Автоматизации', + 'default_name' => 'Новая автоматизация', + + 'actions' => [ + 'new' => 'Новая автоматизация', + 'edit' => 'Изменить', + 'save' => 'Сохранить', + 'activate' => 'Активировать', + 'pause' => 'Приостановить', + 'delete' => 'Удалить', + 'retry' => 'Повторить', + 'guide' => 'Узнать, как это работает', + ], + + 'tabs' => [ + 'build' => 'Конструктор', + 'variables' => 'Переменные', + 'test' => 'Тест', + ], + + 'nav' => [ + 'workflow' => 'Процесс', + 'invocations' => 'Запуски', + 'metrics' => 'Метрики', + 'settings' => 'Настройки', + ], + + 'settings' => [ + 'general' => 'Основные', + 'general_description' => 'Переименуйте эту автоматизацию.', + 'name_label' => 'Название', + 'name_saved' => 'Автоматизация переименована.', + 'status_title' => 'Статус', + 'status_description' => 'Активируйте, чтобы запустить, или приостановите, чтобы остановить.', + 'activated_at' => 'Активирована :date', + 'paused_at' => 'Приостановлена :date', + 'created_at' => 'Создана :date', + 'danger_title' => 'Опасная зона', + 'danger_description' => 'Необратимые действия.', + 'delete_title' => 'Удалить эту автоматизацию', + 'delete_description' => 'Безвозвратно удаляет автоматизацию и историю её запусков.', + ], + + 'status_run' => [ + 'pending' => 'В ожидании', + 'running' => 'Выполняется', + 'waiting' => 'Ожидание', + 'completed' => 'Завершено', + 'failed' => 'Ошибка', + 'cancelled' => 'Отменено', + ], + + 'node_type' => [ + 'trigger' => 'Триггер', + 'generate' => 'Генерация контента', + 'delay' => 'Задержка', + 'condition' => 'Условие', + 'publish' => 'Публикация', + 'webhook' => 'Webhook', + 'end' => 'Конец', + 'fetch_rss' => 'Получить RSS', + 'http_request' => 'HTTP-запрос', + ], + + 'invocations' => [ + 'empty' => 'Пока нет запусков.', + 'refresh' => 'Обновить', + 'search_placeholder' => 'Поиск по ID запуска…', + 'copied' => 'ID запуска скопирован.', + 'loading' => 'Загрузка шагов…', + 'no_steps' => 'Шаги не записаны.', + 'load_error' => 'Не удалось загрузить шаги.', + 'steps' => '{0}Нет шагов|{1}:count шаг|[2,4]:count шага|[5,*]:count шагов', + 'filter' => [ + 'all' => 'Все статусы', + ], + 'columns' => [ + 'timestamp' => 'Время', + 'run' => 'Запуск', + 'status' => 'Статус', + 'message' => 'Последнее сообщение', + 'duration' => 'Длительность', + ], + 'summary' => [ + 'completed' => 'Процесс завершён', + 'failed' => 'Процесс завершился с ошибкой', + 'running' => 'Процесс выполняется', + 'cancelled' => 'Процесс отменён', + 'pending' => 'Процесс в ожидании', + ], + ], + + 'metrics' => [ + 'overview' => 'Обзор', + 'runs_over_time' => 'Запуски по времени', + 'posts_by_platform' => 'Посты по платформам', + 'no_posts' => 'В этот период не опубликовано ни одного поста.', + 'cards' => [ + 'runs' => 'Всего запусков', + 'completed' => 'Завершено', + 'failed' => 'С ошибкой', + 'in_progress' => 'В процессе', + 'success_rate' => 'Доля успешных', + 'avg_duration' => 'Средняя длительность', + 'posts_created' => 'Создано постов', + ], + 'legend' => [ + 'started' => 'Запущено', + 'completed' => 'Завершено', + 'failed' => 'С ошибкой', + ], + ], + + 'categories' => [ + 'sources' => 'Источники', + 'content' => 'Контент', + 'flow' => 'Логика', + 'output' => 'Вывод', + ], + + 'variables' => [ + 'title' => 'Переменные процесса', + 'hint' => 'Многократно используемые значения, доступные везде через {{ variables.KEY }}. Хранятся в зашифрованном виде.', + 'empty' => 'Пока нет переменных.', + 'key' => 'Ключ', + 'value' => 'Значение', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'Значение', + 'add' => 'Новая переменная', + ], + + 'expr' => [ + 'trigger_event' => 'Название события-триггера', + 'trigger_fired_at' => 'Когда сработал триггер', + 'trigger_post_id' => 'ID поста-триггера', + 'trigger_post_content' => 'Содержимое поста-триггера', + 'trigger_post_status' => 'Статус поста-триггера', + 'trigger_post_scheduled_at' => 'Когда запланирован пост', + 'trigger_post_published_at' => 'Когда пост был опубликован', + 'fetched_title' => 'Заголовок полученного элемента', + 'fetched_link' => 'Ссылка полученного элемента', + 'fetched_date' => 'Дата публикации полученного элемента', + 'fetched_content' => 'Полное содержимое полученного элемента', + 'fetched_description' => 'Краткое описание полученного элемента', + 'fetched_author' => 'Автор полученного элемента', + 'fetched_image' => 'URL изображения полученного элемента', + 'fetched_categories' => 'Категории полученного элемента', + 'fetched_enclosure' => 'Медиа полученного элемента (аудио/видео/файл)', + 'fetched_pubdate' => 'Дата публикации полученного элемента', + 'fetched_http' => 'Полученный HTTP-элемент (добавьте поле)', + 'generated_content' => 'Сгенерированное ИИ содержимое поста', + 'generated_post_url' => 'URL сгенерированного ИИ поста', + 'variable' => 'Переменная процесса', + 'now' => 'Текущие дата и время', + ], + + 'test' => [ + 'description' => 'Выполняет автоматизацию от начала до конца, используя синтезированные данные триггера. Полезно для проверки каждого узла без ожидания реального расписания или ленты.', + 'starting' => 'Запуск тестового прогона…', + 'in_progress' => 'В процессе', + 'completed' => 'Завершено', + 'failed' => 'Ошибка', + 'waiting' => 'Ожидание', + 'close' => 'Закрыть', + 'no_node_runs' => 'Ожидание запуска первого узла…', + 'node_input' => 'Вход', + 'node_output' => 'Выход', + 'node_error' => 'Ошибка', + 'no_new_items' => 'Нет новых элементов — последующие узлы не запускались.', + 'error_starting' => 'Не удалось запустить тестовый прогон.', + 'with_real_data' => 'С реальными данными', + 'run' => 'Запустить тест', + 'idle_hint' => 'Нажмите «Запустить тест», чтобы выполнить автоматизацию от начала до конца.', + 'real_data_hint' => 'Этот тест опубликует посты, продвинет отметки опроса и вызовет внешние побочные эффекты.', + 'dry_badge' => 'Тестовый прогон', + ], + + 'status' => [ + 'draft' => 'Черновик', + 'active' => 'Активна', + 'paused' => 'Приостановлена', + ], + + 'index' => [ + 'empty_title' => 'Пока нет автоматизаций', + 'empty_description' => 'Создайте первую автоматизацию, чтобы публиковать на автопилоте.', + 'columns' => [ + 'name' => 'Название', + 'status' => 'Статус', + 'created' => 'Создана', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'Не удалось активировать автоматизацию.', + 'pause_error_fallback' => 'Не удалось приостановить автоматизацию.', + 'save_error_fallback' => 'Не удалось сохранить автоматизацию.', + 'save_success' => 'Автоматизация сохранена.', + 'empty_canvas_title' => 'Начните создавать автоматизацию', + 'empty_canvas_description' => 'Перетащите узел из левой панели, чтобы начать.', + 'name_placeholder' => 'Автоматизация без названия', + ], + + 'nodes' => [ + 'trigger' => 'Триггер', + 'generate' => 'Генерация', + 'delay' => 'Задержка', + 'condition' => 'Условие', + 'publish' => 'Публикация', + 'webhook' => 'Webhook', + 'end' => 'Конец', + 'end_summary' => 'Останавливает автоматизацию здесь', + 'fetch_rss' => 'Получить RSS', + 'http_request' => 'HTTP-запрос', + 'handles' => [ + 'items' => 'есть элементы', + 'no_items' => 'нет элементов', + ], + ], + + 'config' => [ + 'select_placeholder' => 'Выберите…', + 'invalid_json' => 'Это ещё не корректный JSON.', + 'expand_editor' => 'Развернуть редактор', + 'minimize_editor' => 'Свернуть', + + 'trigger' => [ + 'type' => 'Тип триггера', + 'types' => [ + 'schedule' => 'Расписание', + 'post_published' => 'Когда пост опубликован', + 'post_scheduled' => 'Когда пост запланирован', + ], + 'post_published_hint' => 'Запускается при публикации любого поста в этом рабочем пространстве. Опубликованный пост доступен в {{ trigger.post }} для последующих узлов.', + 'post_scheduled_hint' => 'Запускается при планировании любого поста в этом рабочем пространстве. Запланированный пост доступен в {{ trigger.post }}.', + + 'schedule' => [ + 'field' => 'Интервал срабатывания', + 'fields' => [ + 'minutes' => 'Минуты', + 'hours' => 'Часы', + 'days' => 'Дни', + 'weeks' => 'Недели', + 'months' => 'Месяцы', + ], + 'minutes_interval' => 'Минут между срабатываниями', + 'hours_interval' => 'Часов между срабатываниями', + 'days_interval' => 'Дней между срабатываниями', + 'hour' => 'Час срабатывания', + 'minute' => 'Минута срабатывания', + 'weekdays' => 'Дни недели срабатывания', + 'day_of_month' => 'День месяца', + 'weekday_names' => [ + 'sun' => 'Вс', + 'mon' => 'Пн', + 'tue' => 'Вт', + 'wed' => 'Ср', + 'thu' => 'Чт', + 'fri' => 'Пт', + 'sat' => 'Сб', + ], + 'summary' => [ + 'every_n_minutes' => 'Запускается каждую :count минуту|Запускается каждые :count минуты|Запускается каждые :count минут', + 'every_n_hours' => 'Запускается каждый :count час на :minute-й минуте|Запускается каждые :count часа на :minute-й минуте|Запускается каждые :count часов на :minute-й минуте', + 'every_n_days' => 'Запускается каждый :count день в :time|Запускается каждые :count дня в :time|Запускается каждые :count дней в :time', + 'weekly' => 'Запускается по :days в :time', + 'monthly' => 'Запускается :day числа каждого месяца в :time', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'Социальные аккаунты', + 'social_accounts_empty' => 'Нет подключённых социальных аккаунтов. Сначала подключите один.', + 'target_slide_count' => 'Сколько слайдов сгенерировать', + 'prompt_template' => 'Шаблон запроса', + 'prompt_template_hint' => 'Введите {{, чтобы вставить данные из предыдущих шагов.', + 'image_count' => 'Сколько изображений сгенерировать', + 'image_count_hint' => '0 = только текст (без изображения). 1 = одно изображение. 2+ = карусель.', + 'use_brand_voice' => 'Использовать голос бренда', + 'use_brand_voice_hint' => 'Применяйте описание и голос вашего бренда. Отключите для точной подачи сторонних источников (новости, RSS).', + 'use_brand_visuals' => 'Использовать визуал бренда', + 'use_brand_visuals_hint' => 'Направляйте ИИ-изображения цветами и айдентикой вашего бренда. Отключите для нейтральных изображений, основанных только на теме поста.', + 'style' => 'Стиль', + 'account_summary' => ':count аккаунт · :format|:count аккаунта · :format|:count аккаунтов · :format', + 'formats' => [ + 'single' => 'один', + 'carousel' => 'карусель', + ], + ], + 'delay' => [ + 'duration' => 'Длительность', + 'unit' => 'Единица', + 'units' => [ + 'minutes' => 'Минуты', + 'hours' => 'Часы', + 'days' => 'Дни', + ], + ], + 'condition' => [ + 'field' => 'Поле', + 'operator' => 'Оператор', + 'operators' => [ + 'contains' => 'содержит', + 'not_contains' => 'не содержит', + 'equals' => 'равно', + 'not_equals' => 'не равно', + 'matches' => 'соответствует (regex)', + 'greater_than' => 'больше чем', + 'less_than' => 'меньше чем', + ], + 'value' => 'Значение', + ], + 'publish' => [ + 'mode' => 'Режим', + 'modes' => [ + 'now' => 'Опубликовать сейчас', + 'scheduled' => 'Запланировать', + 'draft' => 'Сохранить как черновик', + ], + 'scheduled_offset' => 'Смещение от триггера (минуты)', + 'offset_summary' => ':mode · +:offset мин', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'Метод', + 'payload_template' => 'Шаблон полезной нагрузки (JSON)', + ], + 'end' => [ + 'reason' => 'Причина (необязательно)', + 'reason_placeholder' => 'например, Отфильтровано условием', + ], + 'fetch_rss' => [ + 'feed_url' => 'URL ленты', + 'feed_url_hint' => 'При первом запуске отметка устанавливается на «сейчас», чтобы старые элементы не хлынули в последующие узлы. Последующие запуски видят только элементы новее предыдущего опроса.', + 'inspect' => 'Проверить ленту', + 'inspecting' => 'Проверка…', + 'inspect_hint' => 'Получите образец, чтобы узнать доступные поля для использования в последующих узлах.', + 'inspect_error' => 'Не удалось прочитать эту ленту. Проверьте URL и попробуйте снова.', + 'discovered_fields' => 'Доступные поля', + 'discovered_empty' => 'В последнем элементе поля не найдены.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'Метод', + 'auth_type' => 'Аутентификация', + 'auth' => [ + 'none' => 'Нет (публичный)', + 'bearer' => 'Bearer-токен', + 'basic' => 'Basic-аутентификация', + 'api_key' => 'Заголовок с API-ключом', + ], + 'bearer_token' => 'Bearer-токен', + 'basic_username' => 'Имя пользователя', + 'basic_password' => 'Пароль', + 'api_key_header' => 'Имя заголовка', + 'api_key_value' => 'API-ключ', + 'body_template' => 'Шаблон тела (JSON)', + 'headers' => 'Заголовки', + 'header_name' => 'Имя заголовка', + 'header_value' => 'Значение', + 'add_header' => 'Добавить заголовок', + 'polling_section' => 'Список и дедупликация (необязательно)', + 'polling_hint' => 'Если ответ — список, каждый элемент запускает процесс отдельно. Один объект запускает его один раз.', + 'items_path' => 'Путь к элементам', + 'items_path_hint' => 'Оставьте пустым, если ответ уже является массивом. Используйте путь через точку (например, data.items) для вложенного массива или * для объекта с ключами по id.', + 'item_key_path' => 'Путь к ключу элемента', + 'item_key_path_hint' => 'JSON-путь к уникальному id (например, id). Уже встречавшиеся элементы пропускаются, поэтому лента без дат всё равно передаёт только новые записи.', + 'item_date_path' => 'Путь к дате элемента', + 'item_date_path_hint' => 'JSON-путь к отметке времени элемента (например, published_at). Предпочтительнее пути к ключу, когда доступен. Первый опрос фиксирует базовую отметку и ничего не передаёт, поэтому существующая лента не переполняет систему в первый день.', + ], + ], + + 'delete' => [ + 'title' => 'Удалить автоматизацию', + 'description' => 'Вы уверены, что хотите удалить эту автоматизацию? Все запуски и элементы триггеров также будут удалены. Это действие нельзя отменить.', + 'confirm' => 'Удалить', + 'cancel' => 'Отмена', + ], + + 'flash' => [ + 'deleted' => 'Автоматизация успешно удалена!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'Для этой автоматизации не настроено ни одного активного социального аккаунта.', + 'must_have_one_trigger' => 'Автоматизация должна содержать ровно один узел-триггер.', + 'trigger_must_be_connected' => 'Узел-триггер должен быть связан хотя бы с одним узлом.', + 'graph_contains_cycle' => 'Граф автоматизации содержит цикл.', + 'only_failed_can_retry' => 'Повторить можно только запуски, завершившиеся с ошибкой.', + 'no_generated_post' => 'В запуске не найдено сгенерированного поста.', + 'webhook_server_error' => 'Ошибка сервера webhook.', + 'webhook_request_failed' => 'Не удалось выполнить запрос webhook.', + 'webhook_missing_url' => 'В узле webhook отсутствует URL.', + 'webhook_invalid_payload_json' => 'Шаблон полезной нагрузки не является корректным JSON.', + 'url_not_allowed' => 'URL запроса указывает на приватный или недоступный адрес и был заблокирован.', + 'node_no_longer_exists' => 'Узел :node_id больше не существует в автоматизации.', + 'no_trigger_connection' => 'К узлу-триггеру не подключён ни один узел.', + 'fetch_rss_missing_url' => 'В узле «Получить RSS» отсутствует URL ленты.', + 'fetch_rss_request_failed' => 'Запрос RSS-ленты не удался.', + 'fetch_rss_malformed' => 'RSS-лента имеет некорректный формат.', + 'http_missing_url' => 'В узле HTTP-запроса отсутствует URL.', + 'http_request_exception' => 'HTTP-запрос вызвал исключение.', + 'http_request_failed' => 'HTTP-запрос не удался.', + 'http_items_path_not_array' => 'Путь к элементам не привёл к списку.', + ], +]; diff --git a/lang/ru/billing.php b/lang/ru/billing.php new file mode 100644 index 00000000..c6e7d925 --- /dev/null +++ b/lang/ru/billing.php @@ -0,0 +1,76 @@ + 'Оплата', + + 'past_due_notice' => [ + 'title' => 'Просроченный платёж', + 'description' => 'Обновите способ оплаты, чтобы сохранить подписку активной.', + 'cta' => 'Обновить оплату', + ], + + 'annual_banner' => [ + 'title' => 'Получите 2 месяца бесплатно', + 'description' => 'Перейдите на годовую оплату и платите меньше каждый месяц — тот же тариф, ничего больше не меняется.', + 'cta' => 'Перейти на годовую оплату', + ], + + 'subscribe' => [ + 'billed_monthly' => 'Ежемесячная оплата', + 'billed_yearly' => 'Годовая оплата', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'Тариф', + 'description' => 'Управляйте своим тарифом подписки.', + 'label' => 'Тариф', + 'workspaces' => '{1}:count рабочее пространство|[2,4]:count рабочих пространства|[5,*]:count рабочих пространств', + 'per_workspace' => 'за рабочее пространство', + 'price' => 'Цена', + 'month' => 'месяц', + 'trial' => 'Пробный период', + 'active' => 'Активна', + 'past_due' => 'Просрочена', + 'cancelling' => 'Отменяется', + 'trial_ends' => 'Пробный период заканчивается', + ], + + 'subscription' => [ + 'title' => 'Подписка', + 'description' => 'Управляйте способом оплаты, платёжными данными и подпиской.', + 'payment_method' => 'Способ оплаты', + 'no_payment_method' => 'Способ оплаты пока не добавлен.', + 'expires_on' => 'Истекает :month/:year', + 'manage_label' => 'Подписка', + 'manage_stripe' => 'Управлять в Stripe', + ], + + 'invoices' => [ + 'title' => 'Счета', + 'description' => 'Скачивайте прошлые счета.', + 'empty' => 'Счета не найдены', + 'paid' => 'Оплачено', + ], + + 'flash' => [ + 'plan_changed' => 'Вы перешли на тариф :plan.', + 'switched_to_yearly' => 'Вы перешли на годовую оплату.', + 'cannot_manage' => 'Управлять оплатой может только владелец аккаунта.', + 'credits_exhausted' => 'Кредиты ИИ закончились — ваш месячный лимит :limit исчерпан. Повысьте тариф или подождите до следующего месяца.', + 'subscription_required' => 'Для использования функций ИИ требуется активная подписка.', + ], + + 'processing' => [ + 'page_title' => 'Обработка...', + 'title' => 'Обрабатываем вашу подписку', + 'description' => 'Подождите, пока мы настраиваем ваш аккаунт. Это займёт всего мгновение.', + 'success_title' => 'Всё готово!', + 'success_description' => 'Ваша подписка активна. Перенаправляем вас к рабочим пространствам...', + 'cancelled_title' => 'Оформление отменено', + 'cancelled_description' => 'Оформление отменено. Списаний не было.', + 'retry' => 'Попробовать снова', + ], +]; diff --git a/lang/ru/brands.php b/lang/ru/brands.php new file mode 100644 index 00000000..805c37cd --- /dev/null +++ b/lang/ru/brands.php @@ -0,0 +1,39 @@ + 'Новый бренд', + 'no_brands_yet' => 'Пока нет брендов', + 'no_brands_description' => 'Создавайте бренды, чтобы группировать социальные аккаунты по клиентам или проектам', + 'accounts_count' => ':count аккаунтов', + + 'create' => [ + 'title' => 'Создать бренд', + 'description' => 'Задайте бренду название, чтобы сгруппировать социальные аккаунты', + 'name' => 'Название бренда', + 'name_placeholder' => 'например, Acme Corp, Личный', + 'submit' => 'Создать бренд', + 'submitting' => 'Создание...', + ], + + 'edit' => [ + 'title' => 'Изменить бренд', + 'description' => 'Обновите название этого бренда', + 'name' => 'Название бренда', + 'name_placeholder' => 'например, Acme Corp, Личный', + 'submit' => 'Сохранить изменения', + 'submitting' => 'Сохранение...', + ], + + 'delete' => [ + 'title' => 'Удалить бренд', + 'description' => 'Вы уверены, что хотите удалить этот бренд? Социальные аккаунты будут откреплены, но не удалены.', + 'confirm' => 'Удалить', + 'cancel' => 'Отмена', + ], + + 'flash' => [ + 'created' => 'Бренд успешно создан!', + 'updated' => 'Бренд успешно обновлён!', + 'deleted' => 'Бренд успешно удалён!', + ], +]; diff --git a/lang/ru/calendar.php b/lang/ru/calendar.php new file mode 100644 index 00000000..72d43aa9 --- /dev/null +++ b/lang/ru/calendar.php @@ -0,0 +1,12 @@ + 'Календарь', + 'today' => 'Сегодня', + 'day' => 'День', + 'week' => 'Неделя', + 'month' => 'Месяц', + 'new_post' => 'Новый пост', + 'no_content' => 'Нет содержимого', + 'more' => '+:count ещё', +]; diff --git a/lang/ru/comments.php b/lang/ru/comments.php new file mode 100644 index 00000000..2163e496 --- /dev/null +++ b/lang/ru/comments.php @@ -0,0 +1,18 @@ + 'Напишите комментарий...', + 'reply_placeholder' => 'Напишите ответ...', + 'reply' => 'Ответить', + 'edit' => 'Изменить', + 'delete' => 'Удалить', + 'edited' => 'изменено', + 'save' => 'Сохранить', + 'cancel' => 'Отмена', + 'send' => 'Отправить', + 'replying_to' => 'Ответ пользователю :name', + 'empty' => 'Пока нет комментариев. Начните обсуждение.', + 'load_more' => 'Загрузить старые комментарии', + 'today' => 'Сегодня', + 'yesterday' => 'Вчера', +]; diff --git a/lang/ru/common.php b/lang/ru/common.php new file mode 100644 index 00000000..f0f12c68 --- /dev/null +++ b/lang/ru/common.php @@ -0,0 +1,59 @@ + 'Назад', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'Это действие нельзя отменить.', + 'type' => 'Введите', + 'to_confirm' => 'для подтверждения.', + 'copy_to_clipboard' => 'Копировать в буфер обмена', + 'delete_keyword' => 'удалить', + ], + + 'photo_upload' => [ + 'upload' => 'Загрузить', + 'uploading' => 'Загрузка...', + 'remove' => 'Удалить фото', + 'hint' => 'Рекомендуется: квадратное изображение, до 2 МБ.', + ], + + 'timezone' => [ + 'select' => 'Выберите часовой пояс', + 'search' => 'Поиск часового пояса...', + 'empty' => 'Часовой пояс не найден', + ], + + 'date_picker' => [ + 'select' => 'Выберите дату', + ], + + 'date_range_picker' => [ + 'placeholder' => 'Выберите диапазон дат', + 'today' => 'Сегодня', + 'yesterday' => 'Вчера', + 'last_7_days' => 'Последние 7 дней', + 'last_30_days' => 'Последние 30 дней', + 'last_3_months' => 'Последние 3 месяца', + 'last_6_months' => 'Последние 6 месяцев', + 'last_12_months' => 'Последние 12 месяцев', + 'this_month' => 'Этот месяц', + 'last_month' => 'Прошлый месяц', + 'year_to_date' => 'С начала года', + 'last_year' => 'Прошлый год', + ], + + 'cancel' => 'Отмена', + 'clear' => 'Очистить', + 'close' => 'Закрыть', + 'loading_more' => 'Загрузка...', + + 'actions' => [ + 'copy' => 'Копировать', + 'copied' => 'Скопировано', + 'copy_failed' => 'Не удалось скопировать в буфер обмена', + ], +]; diff --git a/lang/ru/labels.php b/lang/ru/labels.php new file mode 100644 index 00000000..ee2b2126 --- /dev/null +++ b/lang/ru/labels.php @@ -0,0 +1,54 @@ + 'Метки', + 'description' => 'Создавайте метки, чтобы упорядочивать и категоризировать посты', + 'search' => 'Поиск меток...', + 'new_label' => 'Новая метка', + 'no_labels_yet' => 'Пока нет меток', + 'no_search_results' => 'Нет меток по вашему запросу', + 'try_different_search' => 'Попробуйте другое ключевое слово или очистите поиск.', + 'create_first_label' => 'Создайте первую метку', + 'table' => [ + 'name' => 'Название', + 'created_at' => 'Создана', + ], + + 'actions' => [ + 'edit' => 'Изменить метку', + 'delete' => 'Удалить метку', + ], + + 'create' => [ + 'title' => 'Создать метку', + 'description' => 'Задайте метке название и выберите цвет', + 'name' => 'Название', + 'name_placeholder' => 'Введите название метки...', + 'color' => 'Цвет', + 'submit' => 'Создать метку', + 'submitting' => 'Создание...', + ], + + 'edit' => [ + 'title' => 'Изменить метку', + 'description' => 'Обновите название и цвет этой метки', + 'name' => 'Название', + 'name_placeholder' => 'Введите название метки...', + 'color' => 'Цвет', + 'submit' => 'Сохранить изменения', + 'submitting' => 'Сохранение...', + ], + + 'delete' => [ + 'title' => 'Удалить метку', + 'description' => 'Вы уверены, что хотите удалить эту метку? Это действие нельзя отменить.', + 'confirm' => 'Удалить', + 'cancel' => 'Отмена', + ], + + 'flash' => [ + 'created' => 'Метка успешно создана!', + 'updated' => 'Метка успешно обновлена!', + 'deleted' => 'Метка успешно удалена!', + ], +]; diff --git a/lang/ru/mail.php b/lang/ru/mail.php new file mode 100644 index 00000000..14e1b521 --- /dev/null +++ b/lang/ru/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => ':name упомянул(а) вас в TryPost', + 'title' => ':name упомянул(а) вас', + 'intro' => ':name упомянул(а) вас в комментарии к посту.', + 'cta' => 'Посмотреть комментарий', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} Нужно переподключить :count аккаунт в :workspace|[2,4] Нужно переподключить :count аккаунта в :workspace|[5,*] Нужно переподключить :count аккаунтов в :workspace', + 'title' => 'Аккаунты требуют переподключения', + 'intro' => 'Следующие социальные аккаунты в рабочем пространстве :workspace были отключены и требуют переподключения:', + 'reasons_title' => 'Это могло произойти по следующим причинам:', + 'reason_expired' => 'Истёк срок действия токенов доступа', + 'reason_revoked' => 'Вы отозвали доступ TryPost на платформе', + 'reason_changed' => 'Платформа изменила требования к аутентификации', + 'reconnect_cta' => 'Пожалуйста, переподключите эти аккаунты, чтобы продолжить планировать и публиковать посты.', + 'button' => 'Переподключить аккаунты', + ], +]; diff --git a/lang/ru/notifications.php b/lang/ru/notifications.php new file mode 100644 index 00000000..85e0aa42 --- /dev/null +++ b/lang/ru/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'Ваш пост готов', + 'body' => 'ИИ только что завершил работу. Нажмите, чтобы просмотреть и опубликовать.', + ], + 'account_disconnected' => [ + 'title' => 'Аккаунт :platform отключён', + 'body' => ':account требует переподключения', + ], + 'account_token_expired' => [ + 'title' => 'Аккаунт :platform требует переподключения', + 'body' => 'Сессия :account истекла — переподключите, чтобы продолжить публикацию', + ], +]; diff --git a/lang/ru/onboarding.php b/lang/ru/onboarding.php new file mode 100644 index 00000000..0930a22a --- /dev/null +++ b/lang/ru/onboarding.php @@ -0,0 +1,41 @@ + 'Добро пожаловать в TryPost', + 'description' => 'Расскажите, что лучше всего описывает вас или ваш бизнес, чтобы мы могли настроить работу под вас.', + 'continue' => 'Продолжить', + 'personas' => [ + 'creator' => 'Автор контента', + 'freelancer' => 'Фрилансер', + 'developer' => 'Разработчик', + 'startup' => 'Стартап', + 'agency' => 'Агентство', + 'small_business' => 'Малый бизнес', + 'marketer' => 'Маркетолог', + 'online_store' => 'Интернет-магазин', + 'other' => 'Другое', + ], + 'goals_title' => 'Какова ваша цель с TryPost?', + 'goals_description' => 'Выберите всё, что подходит, и мы настроим TryPost для вас.', + 'goals' => [ + 'save_time' => 'Экономить время, публикуя всюду сразу', + 'ai_content' => 'Создавать посты быстрее с помощью ИИ', + 'plan_calendar' => 'Планировать посты в календаре', + 'stay_on_brand' => 'Держать каждый пост в стиле бренда', + 'grow_audience' => 'Наращивать аудиторию и вовлечённость', + 'drive_sales' => 'Получать больше трафика и продаж', + 'manage_clients' => 'Управлять несколькими брендами или клиентами', + 'team_collaboration' => 'Работать с командой', + 'automate_api' => 'Автоматизировать публикацию с помощью API, MCP или кода', + 'track_performance' => 'Отслеживать эффективность постов', + 'just_exploring' => 'Пока просто знакомлюсь', + 'other' => 'Что-то ещё', + ], + 'connect' => [ + 'title' => 'Подключите первую сеть', + 'description' => 'Привяжите хотя бы один социальный аккаунт, чтобы начать планировать. Вы можете добавить другие в любой момент.', + 'must_connect' => 'Подключите хотя бы одну сеть, чтобы продолжить.', + ], +]; diff --git a/lang/ru/pagination.php b/lang/ru/pagination.php new file mode 100644 index 00000000..9621a8ac --- /dev/null +++ b/lang/ru/pagination.php @@ -0,0 +1,19 @@ + '« Назад', + 'next' => 'Далее »', + +]; diff --git a/lang/ru/passwords.php b/lang/ru/passwords.php new file mode 100644 index 00000000..b1cc044c --- /dev/null +++ b/lang/ru/passwords.php @@ -0,0 +1,22 @@ + 'Ваш пароль был сброшен.', + 'sent' => 'Мы отправили ссылку для сброса пароля на ваш email.', + 'throttled' => 'Пожалуйста, подождите перед повторной попыткой.', + 'token' => 'Этот токен для сброса пароля недействителен.', + 'user' => 'Мы не можем найти пользователя с таким адресом email.', + +]; diff --git a/lang/ru/posts.php b/lang/ru/posts.php new file mode 100644 index 00000000..4042f461 --- /dev/null +++ b/lang/ru/posts.php @@ -0,0 +1,671 @@ + 'Посты', + 'search' => 'Поиск постов...', + 'all_posts' => 'Все посты', + 'new_post' => 'Новый пост', + 'no_posts' => 'Посты не найдены', + 'no_search_results' => 'Нет постов по вашему запросу', + 'try_different_search' => 'Попробуйте другое ключевое слово или очистите поиск.', + 'start_creating' => 'Начните с создания первого поста.', + 'filter_by_label' => 'Фильтр по метке', + 'label_search_placeholder' => 'Поиск меток...', + 'no_labels' => 'Метки не найдены.', + 'clear_label_filter' => 'Сбросить фильтр по метке', + 'table' => [ + 'post' => 'Пост', + 'status' => 'Статус', + 'content' => 'Содержимое', + 'platforms' => 'Платформы', + 'labels' => 'Метки', + 'scheduled_at' => 'Дата', + 'actions' => '', + ], + 'manage_posts' => 'Управляйте всеми своими постами', + 'delete_confirm' => 'Вы уверены, что хотите удалить этот пост?', + 'by' => 'от', + + 'actions' => [ + 'view' => 'Открыть пост', + 'delete' => 'Удалить', + 'duplicate' => 'Дублировать', + 'copy_id' => 'Копировать ID', + 'copied' => 'ID скопирован в буфер обмена', + ], + + 'form' => [ + 'post_type' => 'Тип поста', + 'board' => 'Доска', + 'select_board' => 'Выберите доску', + 'search_board' => 'Поиск доски...', + 'no_board_found' => 'Доска не найдена', + 'media' => 'Медиа', + 'min' => 'Мин', + 'uploading' => 'Загрузка...', + 'drop_to_upload' => 'Отпустите для загрузки', + 'drag_and_drop' => 'Перетащите или нажмите для загрузки', + 'photos_and_videos' => 'Фото и видео', + 'photos_only' => 'Только фото', + 'videos_only' => 'Только видео', + 'drag_to_reorder' => 'Перетащите для изменения порядка', + 'caption' => 'Текст', + 'write_caption' => 'Напишите текст поста...', + 'content_exceeds_platform' => ':platform: превышение на :over симв. (макс. :limit).', + 'tiktok' => [ + 'settings' => 'Настройки TikTok', + 'variant_label' => 'Тип поста', + 'variant' => [ + 'video' => 'Видео', + 'photo' => 'Фотокарусель', + ], + 'posting_to' => 'Публикация в', + 'privacy_level' => 'Кто может видеть это видео?', + 'privacy_placeholder' => 'Выберите, кто может видеть этот пост', + 'privacy' => [ + 'public' => 'Доступно всем', + 'friends' => 'Взаимные подписки', + 'followers' => 'Подписчики', + 'private' => 'Только я', + 'private_disabled_branded' => 'Видимость брендированного контента нельзя установить как «Только я».', + ], + 'privacy_hint' => 'Доступные варианты зависят от настроек вашего аккаунта TikTok.', + 'auto_add_music' => 'Автоматически добавить музыку', + 'auto_add_music_hint' => 'Эта функция доступна только для фото. Будет добавлена музыка по умолчанию, которую можно изменить позже.', + 'yes' => 'Да', + 'no' => 'Нет', + 'allow_users' => 'Разрешить пользователям:', + 'comments' => 'Комментировать', + 'duet' => 'Дуэт', + 'stitch' => 'Склейка', + 'is_aigc' => 'Видео создано с помощью ИИ', + 'disclose' => 'Раскрыть содержание видео', + 'disclose_hint' => 'Включите, чтобы указать, что это видео продвигает товары или услуги в обмен на что-то ценное. Ваше видео может продвигать вас, третью сторону или обоих.', + 'promotional_organic_title' => 'Ваше фото/видео будет отмечено как «Рекламный контент».', + 'promotional_paid_title' => 'Ваше фото/видео будет отмечено как «Платное партнёрство».', + 'promotional_description' => 'Это нельзя изменить после публикации видео.', + 'compliance_incomplete' => 'Необходимо указать, продвигает ли ваш контент вас, третью сторону или обоих.', + 'privacy_required' => 'При публикации необходимо указать уровень приватности TikTok.', + 'branded_cleared_private' => 'Настройка приватности сброшена, так как брендированный контент не может быть приватным.', + 'interaction_disabled_by_creator' => 'Отключено в настройках вашего аккаунта TikTok', + 'max_duration_exceeded' => 'Видео длится :duration с, но этот аккаунт может публиковать видео длиной не более :max с.', + 'processing_hint' => 'После публикации может потребоваться несколько минут для обработки контента и его появления в вашем профиле TikTok.', + 'brand_organic' => 'Ваш бренд', + 'brand_organic_hint' => 'Вы продвигаете себя или собственный бренд. Это видео будет классифицировано как органический контент бренда.', + 'brand_content' => 'Брендированный контент', + 'brand_content_hint' => 'Вы продвигаете другой бренд или третью сторону. Это видео будет классифицировано как брендированный контент.', + 'compliance' => [ + 'agree' => 'Публикуя, вы соглашаетесь с', + 'music_usage' => 'Подтверждением использования музыки TikTok', + 'and' => 'и', + 'branded_policy' => 'Политикой в отношении брендированного контента', + ], + ], + 'instagram' => [ + 'settings' => 'Настройки Instagram', + 'posting_to' => 'Публикация в', + 'variant_label' => 'Тип поста', + 'variant' => [ + 'feed' => 'Пост в ленте', + 'reel' => 'Reels', + 'story' => 'История', + ], + 'aspect_label' => 'Соотношение сторон', + 'aspect' => [ + 'square' => 'Квадрат (1:1)', + 'portrait' => 'Портрет (4:5)', + 'landscape' => 'Альбомная (16:9)', + 'original' => 'Оригинал', + ], + ], + 'facebook' => [ + 'settings' => 'Настройки Facebook', + 'posting_to' => 'Публикация в', + 'variant_label' => 'Тип поста', + 'variant' => [ + 'post' => 'Пост', + 'reel' => 'Reels', + 'story' => 'История', + ], + 'aspect_label' => 'Соотношение сторон', + 'aspect' => [ + 'square' => 'Квадрат (1:1)', + 'portrait' => 'Портрет (4:5)', + 'landscape' => 'Альбомная (16:9)', + 'original' => 'Оригинал', + ], + ], + 'linkedin' => [ + 'settings' => 'Настройки LinkedIn', + 'settings_page' => 'Настройки страницы LinkedIn', + 'posting_to' => 'Публикация в', + 'document_title' => 'Название документа', + 'document_title_placeholder' => 'Отображается в вашем посте с PDF-документом', + ], + 'pinterest' => [ + 'settings' => 'Настройки Pinterest', + 'posting_to' => 'Публикация в', + 'variant_label' => 'Тип пина', + 'variant' => [ + 'pin' => 'Пин', + 'video_pin' => 'Видео-пин', + 'carousel' => 'Карусель', + ], + 'board' => 'Доска', + 'select_board' => 'Выберите доску', + 'no_boards' => 'Доски Pinterest не найдены. Сначала создайте доску в своём аккаунте Pinterest.', + 'search_board' => 'Поиск досок...', + 'no_board_found' => 'Нет досок по вашему запросу.', + 'board_required' => 'Выберите доску Pinterest, чтобы опубликовать этот пост.', + ], + 'discord' => [ + 'settings' => 'Настройки Discord', + 'posting_to' => 'Публикация в', + 'channel' => 'Канал', + 'select_channel' => 'Выберите канал', + 'loading_channels' => 'Загрузка каналов…', + 'search_channel' => 'Поиск каналов…', + 'no_channels' => 'Каналы не найдены.', + 'channel_required' => 'Выберите канал Discord, чтобы опубликовать этот пост.', + 'mentions' => 'Упоминания', + 'search_mention' => 'Упомяните роль или участника…', + 'embeds' => 'Встраивания', + 'embed' => 'Встраивание', + 'add_embed' => 'Добавить встраивание', + 'embed_title' => 'Заголовок встраивания', + 'embed_description' => 'Описание встраивания', + 'embed_url' => 'URL встраивания', + 'embed_image' => 'URL изображения', + 'embed_color' => 'Цвет', + ], + 'warnings' => [ + 'no_variant' => 'Выберите тип поста, чтобы продолжить.', + 'requires_media' => 'Этот тип поста требует хотя бы одно изображение или видео.', + 'max_files_exceeded' => 'Этот тип поста допускает не более :max медиафайлов (у вас :current).', + 'min_files_required' => 'Этот тип поста требует не менее :min медиафайлов (у вас :current).', + 'no_video_allowed' => 'Этот тип поста не принимает видео.', + 'no_image_allowed' => 'Этот тип поста принимает только видео.', + 'no_document_allowed' => 'Этот тип поста не принимает PDF-документы.', + 'no_mixed_media' => 'Изображения и видео нельзя объединять в одном посте.', + 'document_not_alone' => 'PDF нужно публиковать отдельно, без других изображений или видео.', + 'gif_not_allowed' => 'Эта платформа не принимает GIF. Удалите GIF или выберите другую сеть.', + 'image_too_large' => 'Изображение превышает лимит :max для этого типа поста (у вас :current).', + 'video_too_large' => 'Видео превышает лимит :max для этого типа поста (у вас :current).', + 'document_too_large' => 'PDF превышает лимит :max для этого типа поста (у вас :current).', + 'video_too_long' => 'Видео длится :current, но этот тип поста допускает не более :max.', + 'aspect_ratio_too_narrow' => 'Соотношение сторон :current слишком вытянуто по вертикали для этого типа поста (мин. :min).', + 'aspect_ratio_too_wide' => 'Соотношение сторон :current слишком широкое для этого типа поста (макс. :max).', + ], + ], + + 'status' => [ + 'pending' => 'В ожидании', + 'draft' => 'Черновик', + 'scheduled' => 'Запланирован', + 'publishing' => 'Публикуется', + 'retrying' => 'Повторная попытка', + 'published' => 'Опубликован', + 'partially_published' => 'Частично опубликован', + 'failed' => 'Ошибка', + ], + + 'descriptions' => [ + 'draft' => 'Посты, ожидающие планирования', + 'scheduled' => 'Посты, запланированные к публикации', + 'published' => 'Уже опубликованные посты', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'Сгенерировать с помощью ИИ', + 'title' => 'Сгенерировать пост с помощью ИИ', + 'description' => 'Опишите, о чём должен быть пост. ИИ использует контекст вашего бренда, чтобы написать его.', + 'prompt_label' => 'О чём этот пост?', + 'prompt_placeholder' => 'например, Анонсировать нашу новую функцию генерации изображений для каруселей', + 'preview_label' => 'Предпросмотр', + 'start' => 'Сгенерировать', + 'apply' => 'Использовать этот контент', + 'retry' => 'Попробовать снова', + 'cancel' => 'Отмена', + ], + 'review' => [ + 'button_tooltip' => 'Проверить с помощью ИИ', + 'title' => 'Проверить пост с помощью ИИ', + 'description' => 'ИИ проверяет грамматику, орфографию и ясность. Применяйте предложения, с которыми вы согласны.', + 'loading' => 'Проверяем ваш текст...', + 'no_issues' => 'Проблем не найдено. Всё хорошо.', + 'original' => 'Оригинал', + 'suggestion' => 'Предложение', + 'apply' => 'Применить', + 'apply_all' => 'Применить все', + 'applied' => 'Применено', + 'cancel' => 'Отмена', + ], + 'image_regenerate' => [ + 'button' => 'Скорректировать', + 'title' => 'Скорректировать ИИ-изображение', + 'description' => 'Опишите правку. Новое изображение заменит текущее и сохранит своё место в карусели.', + 'instruction_label' => 'Инструкция', + 'instruction_placeholder' => 'например, Исправить опечатку в заголовке и сделать фон светлее.', + 'processing' => 'Пересоздаём изображение... это может занять несколько секунд.', + 'submit' => 'Пересоздать изображение', + 'cancel' => 'Отмена', + 'success' => 'Изображение обновлено. Новая версия заменила предыдущую в вашем посте.', + 'fallback_title' => 'Улучшить текст на этом изображении', + 'errors' => [ + 'required' => 'Инструкция обязательна.', + 'start_failed' => 'Не удалось начать пересоздание.', + 'unavailable' => 'Сейчас невозможно пересоздать это изображение.', + 'timeout' => 'Пересоздание занимает больше времени, чем ожидалось. Попробуйте через мгновение.', + 'media_not_found' => 'Медиафайл не найден.', + 'not_ai_media' => 'Пересоздавать можно только медиа, сгенерированные ИИ.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'Пост с изображением', + 'description' => 'ИИ-изображение с заголовком и текстом.', + ], + 'carousel' => [ + 'name' => 'Карусель', + 'description' => 'Карусель из нескольких слайдов с текстом.', + ], + 'tweet_card' => [ + 'name' => 'Карточка твита', + 'description' => 'Ваш пост в стиле публикации X/Twitter.', + ], + 'tweet_card_image' => [ + 'name' => 'Карточка твита с фото', + 'description' => 'Ваш пост в виде карточки X/Twitter на размытом фото.', + ], + ], + ], + + 'show' => [ + 'title' => 'Детали поста', + 'edit' => 'Изменить', + 'back' => 'Назад', + 'no_content' => 'Без текста', + 'platforms' => 'Платформы', + 'no_platforms' => 'Платформы не выбраны.', + 'view_on_platform' => 'Открыть на платформе', + 'published_on' => 'Опубликовано :date', + 'scheduled_for' => 'Запланировано на :date', + 'draft' => 'Черновик', + 'status_pending' => 'В ожидании', + 'metrics' => 'Метрики', + 'metrics_loading' => 'Загрузка метрик…', + 'metrics_unavailable' => 'Метрики для этой платформы пока недоступны.', + 'metrics_empty' => 'Метрики отсутствуют.', + ], + + 'edit' => [ + 'title' => 'Изменить пост', + 'view_title' => 'Просмотр поста', + 'labels' => 'Метки', + 'no_labels' => 'Метки ещё не созданы', + 'schedule' => 'Запланировать', + 'pick_time' => 'Выберите время', + 'pick_time_past' => 'Выберите дату и время в будущем.', + 'post_now' => 'Опубликовать сейчас', + 'time' => 'Время', + 'cancel' => 'Отмена', + 'delete' => 'Удалить', + 'schedule_for' => 'Запланировать на', + 'schedule_date' => 'Дата планирования', + 'unschedule' => 'Отменить планирование', + 'saving' => 'Сохранение...', + 'saved' => 'Сохранено', + 'draft' => 'Черновик', + 'media' => 'Медиа', + 'add_media' => 'Добавить медиа', + 'caption' => 'Текст', + 'caption_placeholder' => 'Напишите текст поста...', + 'compose_title' => 'Создать пост', + 'compose_subtitle' => 'Составьте сообщение и добавьте медиа', + 'preview_empty' => [ + 'title' => 'Платформа не выбрана', + 'description' => 'Выберите платформу для публикации, чтобы увидеть предпросмотр.', + ], + 'drop_zone_title' => 'Добавить медиа', + 'drop_zone_subtitle' => 'Перетащите файлы или нажмите для выбора', + 'add' => 'Добавить', + 'publish_to' => 'Опубликовать в', + 'organize' => 'Организовать', + 'signatures' => 'Подписи', + 'view_on_platform' => 'Открыть на платформе', + 'platform_status' => 'Статус платформы', + 'compliance_incomplete' => 'Некоторые настройки платформы не заполнены или несовместимы с прикреплённым медиа.', + 'compliance' => [ + 'requires_content_or_media' => 'Добавьте текст или медиа для публикации.', + 'requires_media' => 'Добавьте изображение или видео для публикации здесь.', + 'too_many_files' => 'Для этого формата допускается не более :max файлов.', + 'too_few_files' => 'Добавьте не менее :min файлов для этого формата.', + 'no_videos' => 'Для этого формата допустимы только изображения.', + 'no_images' => 'Для этого формата допустимы только видео.', + 'no_mixed_media' => 'Изображения и видео нельзя объединять в одном посте.', + 'no_gifs' => 'GIF здесь не поддерживаются.', + 'no_documents' => 'PDF-документы не поддерживаются этим форматом.', + 'document_not_alone' => 'PDF нужно публиковать отдельно, без других изображений или видео.', + 'video_too_large' => 'Видео превышает лимит размера для этой платформы.', + 'video_too_long' => 'Для этого формата видео должно быть короче :seconds секунд.', + 'image_too_large' => 'Изображение превышает лимит размера для этой платформы.', + 'document_too_large' => 'PDF превышает лимит размера для этой платформы.', + 'aspect_ratio_invalid' => 'Соотношение сторон не поддерживается этим форматом.', + 'no_content_type' => 'Выберите тип контента для этой платформы.', + 'requires_text' => 'Добавьте текст — для этого формата нужен заголовок.', + ], + 'publishing' => 'Публикация...', + 'publishing_overlay_title' => 'Ваш пост публикуется', + 'publishing_overlay_subtitle' => 'Это может занять несколько мгновений. Вы можете спокойно покинуть эту страницу.', + 'scheduled_overlay_title' => 'Этот пост запланирован', + 'scheduled_overlay_subtitle' => 'Запланировано на :date. Сначала отмените планирование, чтобы внести изменения.', + 'unschedule_cta' => 'Отменить планирование для редактирования', + + 'tabs' => [ + 'preview' => 'Предпросмотр', + 'channels' => 'Каналы', + 'comments' => 'Комментарии', + 'comments_empty' => 'Пока нет комментариев.', + ], + + 'media_picker' => [ + 'title' => 'Выбрать из галереи', + 'search' => 'Поиск медиа...', + 'empty' => 'В галерее пока нет медиа', + 'cancel' => 'Отмена', + 'add' => 'Добавить', + 'add_count' => 'Добавить :count', + ], + + 'emoji_picker' => [ + 'search' => 'Поиск эмодзи', + 'empty' => 'Эмодзи не найдены', + 'recent' => 'Часто используемые', + 'smileys' => 'Смайлики и эмоции', + 'people' => 'Люди и тело', + 'nature' => 'Животные и природа', + 'food' => 'Еда и напитки', + 'activities' => 'Активности', + 'travel' => 'Путешествия и места', + 'objects' => 'Объекты', + 'symbols' => 'Символы', + 'flags' => 'Флаги', + ], + + 'status' => [ + 'pending' => 'В ожидании', + 'scheduled' => 'Запланирован', + 'published' => 'Опубликован', + 'publishing' => 'Публикация...', + 'retrying' => 'Повторная попытка...', + 'failed' => 'Ошибка', + ], + + 'delete_modal' => [ + 'title' => 'Удалить пост', + 'description' => 'Вы уверены, что хотите удалить этот пост? Это действие нельзя отменить.', + 'action' => 'Удалить', + 'cancel' => 'Отмена', + ], + + 'sync_enable' => [ + 'title' => 'Включить синхронизацию?', + 'description' => 'Все платформы будут использовать одинаковый контент. Любые индивидуальные правки для отдельных платформ будут заменены текущим контентом.', + 'cancel' => 'Отмена', + 'action' => 'Включить синхронизацию', + ], + + 'sync_disable' => [ + 'title' => 'Отключить синхронизацию?', + 'description' => 'Каждая платформа сохранит свой текущий контент, но будущие правки будут применяться только к редактируемой платформе.', + 'customize_note' => 'Вы сможете настраивать контент для каждой платформы индивидуально.', + 'cancel' => 'Отмена', + 'action' => 'Отключить синхронизацию', + ], + + 'platforms_dialog' => [ + 'title' => 'Выберите платформы', + 'description' => 'Выберите, в какие платформы опубликовать этот пост.', + ], + + 'signatures_modal' => [ + 'search' => 'Поиск подписей...', + 'no_results' => 'Подписи не найдены.', + ], + + 'validation' => [ + 'select_board' => 'Выберите доску', + 'images_not_supported' => 'Изображения не поддерживаются', + 'videos_not_supported' => 'Видео не поддерживаются', + 'max_images' => 'Не более :count изображений', + 'requires_media' => 'Требуется медиа', + 'requires_content' => 'Требуется текстовое содержимое', + 'exceeded' => 'превышено на :count', + 'does_not_support_images' => ':platform не поддерживает изображения', + 'supports_up_to_images' => ':platform поддерживает до :count изображений', + 'does_not_support_videos' => ':platform не поддерживает видео', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'Пост в ленте', + 'description' => 'Появляется в вашей ленте и профиле', + ], + 'instagram_reel' => [ + 'label' => 'Reels', + 'description' => 'Короткое видео до 90 секунд', + ], + 'instagram_story' => [ + 'label' => 'История', + 'description' => 'Исчезает через 24 часа', + ], + 'linkedin_post' => [ + 'label' => 'Пост', + 'description' => 'Обычный пост — одно изображение, несколько изображений, видео или PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'Пост', + 'description' => 'Обычный пост — одно изображение, несколько изображений, видео или PDF', + ], + 'facebook_post' => [ + 'label' => 'Пост', + 'description' => 'Обычный пост на вашей странице', + ], + 'facebook_reel' => [ + 'label' => 'Reels', + 'description' => 'Короткое видео до 90 секунд', + ], + 'facebook_story' => [ + 'label' => 'История', + 'description' => 'Вертикальная видеоистория, до 60 секунд', + ], + 'tiktok_video' => [ + 'label' => 'Видео', + 'description' => 'Короткое видео', + ], + 'tiktok_photo' => [ + 'label' => 'Фотокарусель', + 'description' => 'До 35 фото в виде листаемой карусели', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => 'Вертикальное видео до 60 секунд', + ], + 'x_post' => [ + 'label' => 'Пост', + 'description' => 'Твит с текстом и медиа', + ], + 'threads_post' => [ + 'label' => 'Пост', + 'description' => 'Текстовый пост с опциональным медиа', + ], + 'pinterest_pin' => [ + 'label' => 'Пин', + 'description' => 'Обычный пин с изображением', + ], + 'pinterest_video_pin' => [ + 'label' => 'Видео-пин', + 'description' => 'Видео-пин (4 с – 15 мин)', + ], + 'pinterest_carousel' => [ + 'label' => 'Карусель', + 'description' => 'Карусель из нескольких изображений (2–5 изображений)', + ], + 'bluesky_post' => [ + 'label' => 'Пост', + 'description' => 'Текстовый пост с опциональными изображениями', + ], + 'mastodon_post' => [ + 'label' => 'Пост', + 'description' => 'Текстовый пост с опциональным медиа', + ], + 'telegram_post' => [ + 'label' => 'Пост', + 'description' => 'Текстовый пост с опциональным медиа', + ], + 'discord_message' => [ + 'label' => 'Сообщение', + 'description' => 'Сообщение в канал Discord с опциональным медиа и встраиваниями', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'Страница LinkedIn', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Страница Facebook', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'Пост успешно запланирован!', + 'deleted' => 'Пост успешно удалён!', + 'duplicated' => 'Пост продублирован как черновик.', + 'cannot_edit_finalized' => 'Этот пост уже обработан и не может быть опубликован повторно. Продублируйте его, чтобы попробовать снова.', + 'cannot_delete_published' => 'Опубликованные посты нельзя удалить.', + 'connect_first' => 'Подключите хотя бы одну социальную сеть перед созданием поста.', + ], + + 'errors' => [ + 'account_disconnected' => 'Социальный аккаунт отключён', + 'account_inactive' => 'Социальный аккаунт деактивирован', + 'account_token_expired' => 'Сессия социального аккаунта истекла — переподключите', + ], + + 'delete' => [ + 'title' => 'Удалить пост?', + 'description' => 'Это действие нельзя отменить. Пост и все его медиа будут безвозвратно удалены.', + 'confirm' => 'Да, удалить', + 'cancel' => 'Отмена', + ], + + 'create' => [ + 'title' => 'Создать новый пост', + 'description' => 'Выберите, с чего хотите начать.', + 'scratch_title' => 'Начать с нуля', + 'scratch_description' => 'Откройте пустой пост и напишите всё сами.', + 'ai_title' => 'Сгенерировать с помощью ИИ', + 'ai_description' => 'Опишите, что хотите, и ИИ сгенерирует контент за вас.', + 'ai_configure_description' => 'Выберите формат и опишите пост, который хотите создать.', + 'ai_pick_template_description' => 'Выберите стиль для вашего ИИ-поста.', + 'template_title' => 'Использовать шаблон', + 'template_description' => 'Выберите из наших готовых шаблонов и настройте.', + 'coming_soon' => 'Скоро', + + 'preview' => [ + 'image_title' => 'Заголовок изображения', + 'image_body' => 'Текст изображения', + ], + + 'steps' => [ + 'template_picker_title' => 'Выберите стиль', + 'format_title' => 'Выберите формат', + 'format_description' => 'Выберите тип поста, который хотите создать.', + 'account_title' => 'Выберите аккаунт', + 'account_description' => 'Выберите социальный аккаунт для публикации.', + 'media_title' => 'Параметры медиа', + 'media_carousel' => 'Сколько слайдов?', + 'media_optional' => 'Добавить изображения?', + 'media_optional_label' => 'Сколько изображений?', + 'media_none' => 'Нет', + 'media_count_label' => 'Количество изображений', + 'prompt_title' => 'Опишите свой пост', + 'prompt_label' => 'О чём этот пост?', + 'prompt_placeholder' => 'например, Анонсировать нашу новую функцию карусели для Instagram', + 'preview_error' => 'Что-то пошло не так. Попробуйте ещё раз.', + 'loading_page_title' => 'Генерируем ваш пост', + 'loading_eta' => 'Примерное время: около :minutes.', + 'loading_eta_minute_one' => 'минуты', + 'loading_eta_minute_other' => ':count минут', + 'loading_leave_title' => 'Вы можете продолжать работать.', + 'loading_leave_body' => 'Мы уведомим вас, когда пост будет готов.', + 'loading_leave_cta' => 'Перейти в календарь', + 'loading_create_another_cta' => 'Создать ещё один пост', + 'loading_tip_credits' => 'Каждое ИИ-изображение расходует около 15 кредитов.', + 'loading_tip_edit' => 'Вы сможете отредактировать всё, когда пост будет готов.', + 'loading_tip_draft' => 'Сгенерированные посты попадают в черновики.', + 'loading_tip_brand' => 'Настройте параметры бренда, чтобы влиять на будущие посты.', + 'loading_tip_carousel' => 'В карусели создаётся один слайд на каждое загруженное изображение.', + 'loading_tip_quality' => 'Качество изображений настроено на баланс скорости и стоимости.', + 'create' => 'Создать пост', + 'back' => 'Назад', + 'next' => 'Продолжить', + 'cancel' => 'Отмена', + 'discard' => 'Отменить', + 'retry' => 'Попробовать снова', + 'no_platforms' => 'Нет подключённых аккаунтов', + 'connect_first' => 'Подключите хотя бы один социальный аккаунт, чтобы использовать генерацию ИИ.', + 'no_account_for_template' => 'Подключите совместимый аккаунт, чтобы использовать этот шаблон.', + + 'format' => [ + 'instagram_feed' => 'Пост в ленте Instagram', + 'instagram_carousel' => 'Карусель Instagram', + 'linkedin_post' => 'Пост LinkedIn', + 'linkedin_page_post' => 'Пост страницы LinkedIn', + 'x_post' => 'Пост X', + 'bluesky_post' => 'Пост Bluesky', + 'threads_post' => 'Пост Threads', + 'mastodon_post' => 'Пост Mastodon', + 'telegram_post' => 'Пост Telegram', + 'discord_message' => 'Сообщение Discord', + 'facebook_post' => 'Пост Facebook', + 'pinterest_pin' => 'Пин Pinterest', + 'instagram_story' => 'История Instagram', + 'facebook_story' => 'История Facebook', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'Выберите шаблон', + 'browser_description' => 'Начните с готового шаблона и адаптируйте его.', + 'search_placeholder' => 'Поиск шаблонов…', + 'no_search_results' => 'Нет шаблонов по вашему запросу', + 'try_different_search' => 'Попробуйте другое ключевое слово или очистите поиск.', + 'slides_count' => '{count} слайд|{count} слайда|{count} слайдов', + 'all_platforms' => 'Все платформы', + 'platform_search_placeholder' => 'Поиск платформы…', + 'no_platform_match' => 'Нет подходящих платформ.', + 'use_this' => 'Использовать этот шаблон', + 'no_templates' => 'Нет доступных шаблонов.', + 'applying' => 'Применяем шаблон…', + 'category' => [ + 'product_launch' => 'Запуск продукта', + 'promotion' => 'Акция', + 'educational' => 'Обучающее', + 'behind_the_scenes' => 'За кулисами', + 'testimonial' => 'Отзыв', + 'industry_tip' => 'Отраслевой совет', + 'event' => 'Событие', + 'engagement' => 'Вовлечённость', + ], + ], +]; diff --git a/lang/ru/settings.php b/lang/ru/settings.php new file mode 100644 index 00000000..491e994a --- /dev/null +++ b/lang/ru/settings.php @@ -0,0 +1,356 @@ + 'Настройки', + 'description' => 'Управляйте профилем и настройками аккаунта', + + 'hub' => [ + 'title' => 'Настройки', + 'description' => 'Выберите, чем хотите управлять.', + 'profile' => [ + 'title' => 'Профиль', + 'description' => 'Обновите личные данные, пароль и настройки уведомлений.', + ], + 'workspace' => [ + 'title' => 'Рабочее пространство', + 'description' => 'Настройте рабочее пространство, бренд, участников и API-ключи.', + ], + 'account' => [ + 'title' => 'Аккаунт', + 'description' => 'Управляйте данными аккаунта, использованием и оплатой.', + ], + ], + + 'nav' => [ + 'profile' => 'Профиль', + 'authentication' => 'Аутентификация', + 'workspace' => 'Рабочее пространство', + 'members' => 'Участники', + 'notifications' => 'Уведомления', + 'billing' => 'Оплата', + ], + + 'notifications' => [ + 'title' => 'Настройки уведомлений', + 'heading' => 'Email-уведомления', + 'description' => 'Выберите, какие email-уведомления хотите получать', + 'post_published' => 'Пост опубликован', + 'post_published_description' => 'Получать письмо, когда ваш пост успешно опубликован', + 'post_failed' => 'Ошибка публикации поста', + 'post_failed_description' => 'Получать письмо, когда пост не удаётся опубликовать', + 'account_disconnected' => 'Аккаунт отключён', + 'account_disconnected_description' => 'Получать письмо, когда социальный аккаунт отключается', + 'save' => 'Сохранить настройки', + ], + + 'profile' => [ + 'title' => 'Настройки профиля', + 'photo_heading' => 'Фото профиля', + 'photo_description' => 'Загрузите фото профиля', + 'heading' => 'Информация профиля', + 'description' => 'Обновите имя и адрес email', + 'avatar' => 'Аватар', + 'name' => 'Имя', + 'name_placeholder' => 'Полное имя', + 'email' => 'Адрес email', + 'email_placeholder' => 'Адрес email', + 'email_unverified' => 'Ваш адрес email не подтверждён.', + 'resend_verification' => 'Нажмите здесь, чтобы отправить письмо для подтверждения повторно.', + 'verification_sent' => 'Новая ссылка для подтверждения отправлена на ваш email.', + 'save' => 'Сохранить', + ], + + 'authentication' => [ + 'title' => 'Аутентификация', + 'page_title' => 'Настройки аутентификации', + 'sessions' => [ + 'title' => 'Активные сессии', + 'description' => 'Если заметите что-то подозрительное, выйдите на других устройствах.', + 'unknown_browser' => 'Неизвестный браузер', + 'unknown_ip' => 'Неизвестный IP', + 'on' => 'на', + 'active_now' => 'Активна сейчас', + 'log_out_others' => 'Выйти на других устройствах', + 'modal_title' => 'Выйти на других устройствах', + 'modal_description_password' => 'Введите текущий пароль, чтобы подтвердить выход из других сессий браузера.', + 'modal_description_email' => 'Введите свой адрес email, чтобы подтвердить выход из других сессий браузера.', + 'password_placeholder' => 'Текущий пароль', + 'email_placeholder' => 'Email вашего аккаунта', + 'cancel' => 'Отмена', + 'submit' => 'Выйти на других устройствах', + 'email_mismatch' => 'Адрес email не совпадает с вашим аккаунтом.', + 'flash_logged_out' => 'Вы вышли на других устройствах.', + ], + 'password' => [ + 'update_title' => 'Обновить пароль', + 'set_title' => 'Задать пароль', + 'update_description' => 'Убедитесь, что для аккаунта используется длинный случайный пароль для безопасности.', + 'set_description' => 'Добавьте пароль, чтобы входить без подключённого провайдера.', + 'current_password' => 'Текущий пароль', + 'new_password' => 'Новый пароль', + 'confirm_password' => 'Подтвердите пароль', + 'save' => 'Сохранить пароль', + 'set' => 'Задать пароль', + ], + 'providers' => [ + 'title' => 'Подключённые аккаунты', + 'description' => 'Входите быстрее с помощью этих подключённых провайдеров.', + 'connected' => 'Подключено', + 'not_connected' => 'Не подключено', + 'connect' => 'Подключить', + 'disconnect' => 'Отключить', + 'flash_disconnected' => ':provider успешно отключён.', + 'flash_connected' => ':provider успешно подключён.', + 'flash_already_linked' => 'Этот аккаунт :provider уже привязан к другому пользователю.', + 'flash_cannot_disconnect' => 'Нельзя отключить единственный способ входа. Сначала задайте пароль или подключите другого провайдера.', + ], + ], + + 'delete_account' => [ + 'heading' => 'Удалить аккаунт', + 'description' => 'Удалите аккаунт и все его ресурсы', + 'warning' => 'Внимание', + 'warning_message' => 'Действуйте осторожно, это действие нельзя отменить.', + 'button' => 'Удалить аккаунт', + 'modal_title' => 'Вы уверены, что хотите удалить аккаунт?', + 'modal_description_password' => 'После удаления аккаунта все его ресурсы и данные также будут безвозвратно удалены. Введите пароль для подтверждения.', + 'modal_description_email' => 'После удаления аккаунта все его ресурсы и данные также будут безвозвратно удалены. Введите свой адрес email :email для подтверждения.', + 'password' => 'Пароль', + 'password_placeholder' => 'Пароль', + 'email_placeholder' => 'Email вашего аккаунта', + 'email_mismatch' => 'Адрес email не совпадает с вашим аккаунтом.', + 'cancel' => 'Отмена', + 'confirm' => 'Удалить аккаунт', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'Рабочее пространство', + 'brand' => 'Бренд', + 'users' => 'Участники', + 'api_keys' => 'API-ключи', + ], + 'title' => 'Настройки рабочего пространства', + 'logo_heading' => 'Логотип рабочего пространства', + 'logo_description' => 'Загрузите логотип для рабочего пространства', + 'heading' => 'Название рабочего пространства', + 'description' => 'Обновите название рабочего пространства', + 'members_heading' => 'Участники', + 'members_description' => 'Управляйте участниками и приглашениями рабочего пространства', + 'name' => 'Название', + 'name_placeholder' => 'Моё рабочее пространство', + 'save' => 'Сохранить', + ], + + 'brand' => [ + 'title' => 'Бренд', + 'description' => 'Настройте айдентику бренда для сгенерированного ИИ контента.', + 'name' => 'Название рабочего пространства', + 'name_placeholder' => 'Мой бренд', + 'website' => 'Веб-сайт', + 'website_placeholder' => 'https://yourbrand.com', + 'brand_description' => 'Описание', + 'brand_description_placeholder' => 'Расскажите о своём бренде, чем вы занимаетесь и кто ваша аудитория...', + 'voice' => 'Голос бренда', + 'voice_description' => 'Выберите черты, определяющие, как звучит ваш контент.', + 'voice_group' => [ + 'pov' => 'Точка зрения', + 'formality' => 'Формальность', + 'energy' => 'Энергия', + 'humor' => 'Юмор', + 'attitude' => 'Отношение', + 'warmth' => 'Теплота', + 'confidence' => 'Уверенность', + 'style' => 'Стиль', + ], + 'voice_trait' => [ + 'first_person' => 'Первое лицо', + 'second_person' => 'Второе лицо (вы)', + 'third_person' => 'Третье лицо', + 'formal' => 'Формальный', + 'balanced' => 'Сбалансированный', + 'casual' => 'Непринуждённый', + 'calm' => 'Спокойный', + 'moderate' => 'Умеренный', + 'enthusiastic' => 'Восторженный', + 'vibrant' => 'Яркий', + 'serious' => 'Серьёзный', + 'dry' => 'Сдержанный / тонкий', + 'witty' => 'Остроумный', + 'playful' => 'Игривый', + 'respectful' => 'Уважительный', + 'even_handed' => 'Беспристрастный', + 'bold' => 'Смелый', + 'provocative' => 'Провокационный', + 'neutral' => 'Нейтральный', + 'friendly' => 'Дружелюбный', + 'empathetic' => 'Эмпатичный', + 'humble' => 'Скромный', + 'confident' => 'Уверенный', + 'assertive' => 'Напористый', + 'direct' => 'Прямой', + 'concise' => 'Лаконичный', + 'transparent' => 'Прозрачный', + 'no_hype' => 'Без пафоса', + 'practical' => 'Практичный', + 'data_driven' => 'На основе данных', + 'storytelling' => 'Повествовательный', + 'inspirational' => 'Вдохновляющий', + 'educational' => 'Обучающий', + 'technical' => 'Технический', + 'minimalist' => 'Мало эмодзи', + ], + 'brand_color' => 'Цвет бренда', + 'background_color' => 'Цвет фона', + 'text_color' => 'Цвет текста', + 'font' => 'Шрифт', + 'image_style' => 'Стиль изображений', + 'image_style_description' => 'Визуальный стиль, применяемый при генерации изображений слайдов и обложек для ИИ-постов.', + 'image_style_cinematic' => 'Кинематографичный', + 'image_style_illustration' => 'Иллюстрация', + 'image_style_isometric_3d' => 'Изометрия', + 'image_style_cartoon' => 'Мультяшный', + 'image_style_typographic' => 'Типографика', + 'image_style_infographic' => 'Инфографика', + 'image_style_minimalist' => 'Минимализм', + 'image_style_mockup' => 'Макет', + 'content_language' => 'Язык контента', + 'content_language_description' => 'Язык, используемый для сгенерированных ИИ подписей, хэштегов и любого текста внутри сгенерированных изображений или видео.', + ], + + 'members' => [ + 'title' => 'Участники', + 'heading' => 'Участники команды', + 'description' => 'Управляйте участниками и приглашениями этого рабочего пространства', + + 'cancel' => 'Отмена', + 'remove' => 'Удалить', + 'make_role' => 'Назначить :role', + + 'invite' => [ + 'title' => 'Пригласить участника', + 'description' => 'Отправьте приглашение по email, чтобы добавить сотрудников', + 'email' => 'Email', + 'email_placeholder' => 'collaborator@email.com', + 'role' => 'Роль', + 'role_placeholder' => 'Выберите роль', + 'submit' => 'Отправить приглашение', + ], + + 'pending' => [ + 'title' => 'Ожидающие приглашения', + 'description' => 'Приглашения, ожидающие принятия', + 'empty' => 'Нет ожидающих приглашений', + ], + + 'list' => [ + 'title' => 'Участники', + 'description' => 'Люди с доступом к этому рабочему пространству', + 'empty' => 'Нет участников, кроме владельца', + ], + + 'remove_modal' => [ + 'title' => 'Удалить участника', + 'description' => 'Вы уверены, что хотите удалить этого участника из рабочего пространства? Он потеряет доступ ко всем его ресурсам.', + 'action' => 'Удалить участника', + ], + + 'cancel_invite_modal' => [ + 'title' => 'Отменить приглашение', + 'description' => 'Вы уверены, что хотите отменить это приглашение?', + 'action' => 'Отменить приглашение', + ], + + 'roles' => [ + 'owner' => 'Владелец', + 'admin' => 'Администратор', + 'member' => 'Участник', + 'viewer' => 'Наблюдатель', + ], + + 'flash' => [ + 'invite_sent' => 'Приглашение успешно отправлено!', + 'invite_deleted' => 'Приглашение удалено.', + 'member_removed' => 'Участник успешно удалён.', + 'role_updated' => 'Роль участника обновлена.', + 'wrong_email' => 'Это приглашение для другого адреса email.', + 'already_member' => 'Вы уже являетесь участником этого рабочего пространства.', + 'invite_accepted' => 'Добро пожаловать! Теперь вы участник рабочего пространства.', + 'invite_declined' => 'Приглашение отклонено.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'Аккаунт', + 'usage' => 'Использование', + 'billing' => 'Оплата', + ], + 'title' => 'Настройки аккаунта', + 'description' => 'Управляйте названием аккаунта и email для счетов', + 'name' => 'Название аккаунта', + 'name_placeholder' => 'Моя компания', + 'billing_email' => 'Email для счетов', + 'billing_email_placeholder' => 'billing@company.com', + 'billing_email_hint' => 'Этот email будет использоваться для счетов и платёжных уведомлений от Stripe.', + 'submit' => 'Сохранить', + ], + + 'flash' => [ + 'account_updated' => 'Аккаунт успешно обновлён!', + 'profile_updated' => 'Профиль успешно обновлён!', + 'password_updated' => 'Пароль успешно обновлён!', + 'workspace_updated' => 'Настройки успешно обновлены!', + 'photo_updated' => 'Фото успешно обновлено!', + 'photo_deleted' => 'Фото успешно удалено!', + 'logo_updated' => 'Логотип успешно загружен!', + 'logo_deleted' => 'Логотип успешно удалён!', + 'notifications_updated' => 'Настройки уведомлений обновлены!', + ], + + 'api_keys' => [ + 'title' => 'API-ключи', + 'page_title' => 'API-ключи', + 'heading' => 'API-ключи', + 'description' => 'Управляйте API-ключами для программного доступа к рабочему пространству.', + 'create' => 'Создать API-ключ', + 'copy' => 'Копировать', + 'new_token_message' => 'Ваш новый API-ключ создан. Скопируйте его сейчас — вы больше не сможете его увидеть.', + 'table' => [ + 'name' => 'Название', + 'key' => 'Ключ', + 'status' => 'Статус', + 'expires' => 'Истекает', + 'last_used' => 'Последнее использование', + 'never' => 'Никогда', + ], + 'actions' => [ + 'copy_id' => 'Копировать ID API-ключа', + 'copy_id_success' => 'ID API-ключа скопирован в буфер обмена', + 'delete' => 'Удалить', + ], + 'empty' => [ + 'title' => 'Пока нет API-ключей', + 'description' => 'Создайте API-ключ для программного доступа к рабочему пространству.', + ], + 'delete_modal' => [ + 'title' => 'Удалить API-ключ', + 'description' => 'Вы уверены, что хотите удалить этот API-ключ? Все приложения, использующие этот ключ, немедленно потеряют доступ.', + 'action' => 'Удалить API-ключ', + ], + 'create_dialog' => [ + 'title' => 'Создать API-ключ', + 'description' => 'Создайте новый API-ключ для программного доступа к рабочему пространству.', + 'name' => 'Название', + 'name_placeholder' => 'например, Продакшн API-ключ', + 'expires' => 'Дата истечения (необязательно)', + 'expires_placeholder' => 'Без истечения', + 'submit' => 'Создать', + 'cancel' => 'Отмена', + ], + 'flash' => [ + 'created' => 'API-ключ успешно создан!', + 'deleted' => 'API-ключ успешно удалён!', + ], + ], +]; diff --git a/lang/ru/sidebar.php b/lang/ru/sidebar.php new file mode 100644 index 00000000..4ebffe4e --- /dev/null +++ b/lang/ru/sidebar.php @@ -0,0 +1,61 @@ + 'Рабочие пространства', + 'select_workspace' => 'Выберите рабочее пространство', + 'create_workspace' => 'Создать рабочее пространство', + 'create_post' => 'Создать пост', + 'profile' => 'Профиль', + 'log_out' => 'Выйти', + + 'workspace' => 'Рабочее пространство: :name', + 'workspace_select' => 'Рабочее пространство: выбрать', + + 'theme' => 'Тема: :name', + 'theme_light' => 'Светлая', + 'theme_dark' => 'Тёмная', + 'theme_system' => 'Системная', + + 'language' => 'Язык: :name', + 'language_select' => 'Язык: выбрать', + + 'groups' => [ + 'posts' => 'Посты', + 'workspace' => 'Рабочее пространство', + 'others' => 'Прочее', + ], + + 'analytics' => 'Аналитика', + 'automations' => 'Автоматизации', + 'settings' => 'Настройки', + + 'posts' => [ + 'calendar' => 'Календарь', + 'all' => 'Все', + 'scheduled' => 'Запланированные', + 'posted' => 'Опубликованные', + 'drafts' => 'Черновики', + ], + + 'workspace' => [ + 'connections' => 'Подключения', + 'signatures' => 'Подписи', + 'labels' => 'Метки', + 'assets' => 'Медиафайлы', + 'api_keys' => 'API-ключи', + ], + + 'notifications' => 'Уведомления', + 'mark_all_read' => 'Отметить все как прочитанные', + 'mark_as_read' => 'Отметить как прочитанное', + 'archive_all' => 'Архивировать все', + 'no_notifications' => 'Нет уведомлений', + + 'support' => [ + 'docs' => 'Документация', + 'referral' => 'Зарабатывайте 30% по реферальной программе', + 'stay_updated' => 'Следите за обновлениями', + ], +]; diff --git a/lang/ru/signatures.php b/lang/ru/signatures.php new file mode 100644 index 00000000..bd50859d --- /dev/null +++ b/lang/ru/signatures.php @@ -0,0 +1,59 @@ + 'Подписи', + 'description' => 'Создавайте многократно используемые подписи, чтобы быстро добавлять их к постам', + 'search' => 'Поиск подписей...', + 'new' => 'Новая подпись', + 'empty_title' => 'Пока нет подписей', + 'empty_description' => 'Создавайте подписи, чтобы быстро добавлять к постам хэштеги, ссылки или любой повторно используемый текст', + 'no_search_results' => 'Нет подписей по вашему запросу', + 'try_different_search' => 'Попробуйте другое ключевое слово или очистите поиск.', + 'table' => [ + 'name' => 'Название', + 'content' => 'Содержимое', + 'created_at' => 'Создана', + ], + + 'actions' => [ + 'edit' => 'Изменить подпись', + 'delete' => 'Удалить подпись', + ], + + 'create' => [ + 'title' => 'Создать подпись', + 'description' => 'Задайте подписи название и содержимое для добавления (хэштеги, ссылки, свой текст — всё, что вы используете повторно).', + 'name' => 'Название', + 'name_placeholder' => 'например, Маркетинг, Путешествия, Подпись бренда', + 'content' => 'Содержимое', + 'content_placeholder' => "#marketing #socialmedia\nПодробнее: https://yourbrand.com", + 'content_hint' => 'Хэштеги, ссылки, вступления, завершающие фразы — всё, что вы добавляете к постам.', + 'submit' => 'Создать подпись', + 'submitting' => 'Создание...', + ], + + 'edit' => [ + 'title' => 'Изменить подпись', + 'description' => 'Обновите название и содержимое этой подписи.', + 'name' => 'Название', + 'name_placeholder' => 'например, Маркетинг, Путешествия, Подпись бренда', + 'content' => 'Содержимое', + 'content_placeholder' => "#marketing #socialmedia\nПодробнее: https://yourbrand.com", + 'content_hint' => 'Хэштеги, ссылки, вступления, завершающие фразы — всё, что вы добавляете к постам.', + 'submit' => 'Сохранить изменения', + 'submitting' => 'Сохранение...', + ], + + 'delete' => [ + 'title' => 'Удалить подпись', + 'description' => 'Вы уверены, что хотите удалить эту подпись? Это действие нельзя отменить.', + 'confirm' => 'Удалить', + 'cancel' => 'Отмена', + ], + + 'flash' => [ + 'created' => 'Подпись создана.', + 'updated' => 'Подпись обновлена.', + 'deleted' => 'Подпись удалена.', + ], +]; diff --git a/lang/ru/usage.php b/lang/ru/usage.php new file mode 100644 index 00000000..d0f41c91 --- /dev/null +++ b/lang/ru/usage.php @@ -0,0 +1,15 @@ + 'Использование', + + 'section_account' => 'Аккаунт', + 'section_account_description' => 'Квоты и лимиты вашего тарифа.', + 'section_ai' => 'Кредиты ИИ', + 'section_ai_description' => 'Кредиты списываются по мере использования функций ИИ. Они обнуляются первого числа каждого месяца.', + + 'workspaces' => 'Рабочие пространства', + 'social_accounts' => 'Социальные аккаунты', + 'members' => 'Участники', + 'credits' => 'Кредиты', +]; diff --git a/lang/ru/validation.php b/lang/ru/validation.php new file mode 100644 index 00000000..b879a107 --- /dev/null +++ b/lang/ru/validation.php @@ -0,0 +1,200 @@ + 'Необходимо принять :attribute.', + 'accepted_if' => 'Необходимо принять :attribute, когда :other равно :value.', + 'active_url' => 'Поле :attribute должно содержать корректный URL.', + 'after' => 'Поле :attribute должно содержать дату после :date.', + 'after_or_equal' => 'Поле :attribute должно содержать дату не раньше :date.', + 'alpha' => 'Поле :attribute должно содержать только буквы.', + 'alpha_dash' => 'Поле :attribute должно содержать только буквы, цифры, дефисы и подчёркивания.', + 'alpha_num' => 'Поле :attribute должно содержать только буквы и цифры.', + 'any_of' => 'Поле :attribute недопустимо.', + 'array' => 'Поле :attribute должно быть массивом.', + 'ascii' => 'Поле :attribute должно содержать только однобайтовые буквенно-цифровые символы и знаки.', + 'before' => 'Поле :attribute должно содержать дату до :date.', + 'before_or_equal' => 'Поле :attribute должно содержать дату не позже :date.', + 'between' => [ + 'array' => 'Поле :attribute должно содержать от :min до :max элементов.', + 'file' => 'Размер файла в поле :attribute должен быть от :min до :max килобайт.', + 'numeric' => 'Поле :attribute должно быть от :min до :max.', + 'string' => 'Количество символов в поле :attribute должно быть от :min до :max.', + ], + 'boolean' => 'Поле :attribute должно иметь значение «истина» или «ложь».', + 'can' => 'Поле :attribute содержит недопустимое значение.', + 'confirmed' => 'Значение поля :attribute не совпадает с подтверждением.', + 'contains' => 'В поле :attribute отсутствует обязательное значение.', + 'current_password' => 'Неверный пароль.', + 'date' => 'Поле :attribute должно содержать корректную дату.', + 'date_equals' => 'Поле :attribute должно содержать дату, равную :date.', + 'date_format' => 'Поле :attribute должно соответствовать формату :format.', + 'decimal' => 'Поле :attribute должно содержать :decimal знаков после запятой.', + 'declined' => 'Поле :attribute должно быть отклонено.', + 'declined_if' => 'Поле :attribute должно быть отклонено, когда :other равно :value.', + 'different' => 'Поля :attribute и :other должны различаться.', + 'digits' => 'Поле :attribute должно содержать :digits цифр.', + 'digits_between' => 'Поле :attribute должно содержать от :min до :max цифр.', + 'dimensions' => 'Поле :attribute имеет недопустимые размеры изображения.', + 'distinct' => 'Поле :attribute содержит повторяющееся значение.', + 'doesnt_contain' => 'Поле :attribute не должно содержать ни одно из следующих значений: :values.', + 'doesnt_end_with' => 'Поле :attribute не должно заканчиваться одним из следующих значений: :values.', + 'doesnt_start_with' => 'Поле :attribute не должно начинаться с одного из следующих значений: :values.', + 'email' => 'Поле :attribute должно содержать корректный адрес email.', + 'encoding' => 'Поле :attribute должно быть в кодировке :encoding.', + 'ends_with' => 'Поле :attribute должно заканчиваться одним из следующих значений: :values.', + 'enum' => 'Выбранное значение для :attribute некорректно.', + 'exists' => 'Выбранное значение для :attribute некорректно.', + 'extensions' => 'Поле :attribute должно иметь одно из следующих расширений: :values.', + 'file' => 'Поле :attribute должно быть файлом.', + 'filled' => 'Поле :attribute должно иметь значение.', + 'gt' => [ + 'array' => 'Поле :attribute должно содержать более :value элементов.', + 'file' => 'Размер файла в поле :attribute должен быть больше :value килобайт.', + 'numeric' => 'Поле :attribute должно быть больше :value.', + 'string' => 'Количество символов в поле :attribute должно быть больше :value.', + ], + 'gte' => [ + 'array' => 'Поле :attribute должно содержать :value элементов или более.', + 'file' => 'Размер файла в поле :attribute должен быть больше или равен :value килобайт.', + 'numeric' => 'Поле :attribute должно быть больше или равно :value.', + 'string' => 'Количество символов в поле :attribute должно быть больше или равно :value.', + ], + 'hex_color' => 'Поле :attribute должно содержать корректный шестнадцатеричный цвет.', + 'image' => 'Поле :attribute должно быть изображением.', + 'in' => 'Выбранное значение для :attribute некорректно.', + 'in_array' => 'Поле :attribute должно присутствовать в :other.', + 'in_array_keys' => 'Поле :attribute должно содержать хотя бы один из следующих ключей: :values.', + 'integer' => 'Поле :attribute должно быть целым числом.', + 'ip' => 'Поле :attribute должно содержать корректный IP-адрес.', + 'ipv4' => 'Поле :attribute должно содержать корректный IPv4-адрес.', + 'ipv6' => 'Поле :attribute должно содержать корректный IPv6-адрес.', + 'json' => 'Поле :attribute должно содержать корректную строку JSON.', + 'list' => 'Поле :attribute должно быть списком.', + 'lowercase' => 'Поле :attribute должно быть в нижнем регистре.', + 'lt' => [ + 'array' => 'Поле :attribute должно содержать менее :value элементов.', + 'file' => 'Размер файла в поле :attribute должен быть меньше :value килобайт.', + 'numeric' => 'Поле :attribute должно быть меньше :value.', + 'string' => 'Количество символов в поле :attribute должно быть меньше :value.', + ], + 'lte' => [ + 'array' => 'Поле :attribute не должно содержать более :value элементов.', + 'file' => 'Размер файла в поле :attribute должен быть меньше или равен :value килобайт.', + 'numeric' => 'Поле :attribute должно быть меньше или равно :value.', + 'string' => 'Количество символов в поле :attribute должно быть меньше или равно :value.', + ], + 'mac_address' => 'Поле :attribute должно содержать корректный MAC-адрес.', + 'max' => [ + 'array' => 'Поле :attribute не должно содержать более :max элементов.', + 'file' => 'Размер файла в поле :attribute не должен превышать :max килобайт.', + 'numeric' => 'Поле :attribute не должно быть больше :max.', + 'string' => 'Количество символов в поле :attribute не должно превышать :max.', + ], + 'max_digits' => 'Поле :attribute не должно содержать более :max цифр.', + 'mimes' => 'Поле :attribute должно быть файлом одного из типов: :values.', + 'mimetypes' => 'Поле :attribute должно быть файлом одного из типов: :values.', + 'min' => [ + 'array' => 'Поле :attribute должно содержать не менее :min элементов.', + 'file' => 'Размер файла в поле :attribute должен быть не менее :min килобайт.', + 'numeric' => 'Поле :attribute должно быть не менее :min.', + 'string' => 'Количество символов в поле :attribute должно быть не менее :min.', + ], + 'min_digits' => 'Поле :attribute должно содержать не менее :min цифр.', + 'missing' => 'Поле :attribute должно отсутствовать.', + 'missing_if' => 'Поле :attribute должно отсутствовать, когда :other равно :value.', + 'missing_unless' => 'Поле :attribute должно отсутствовать, если только :other не равно :value.', + 'missing_with' => 'Поле :attribute должно отсутствовать, когда присутствует :values.', + 'missing_with_all' => 'Поле :attribute должно отсутствовать, когда присутствуют :values.', + 'multiple_of' => 'Поле :attribute должно быть кратно :value.', + 'not_in' => 'Выбранное значение для :attribute некорректно.', + 'not_regex' => 'Формат поля :attribute некорректен.', + 'numeric' => 'Поле :attribute должно быть числом.', + 'password' => [ + 'letters' => 'Поле :attribute должно содержать хотя бы одну букву.', + 'mixed' => 'Поле :attribute должно содержать хотя бы одну заглавную и одну строчную букву.', + 'numbers' => 'Поле :attribute должно содержать хотя бы одну цифру.', + 'symbols' => 'Поле :attribute должно содержать хотя бы один символ.', + 'uncompromised' => 'Указанное значение :attribute встречалось в утечке данных. Пожалуйста, выберите другое значение :attribute.', + ], + 'present' => 'Поле :attribute должно присутствовать.', + 'present_if' => 'Поле :attribute должно присутствовать, когда :other равно :value.', + 'present_unless' => 'Поле :attribute должно присутствовать, если только :other не равно :value.', + 'present_with' => 'Поле :attribute должно присутствовать, когда присутствует :values.', + 'present_with_all' => 'Поле :attribute должно присутствовать, когда присутствуют :values.', + 'prohibited' => 'Поле :attribute запрещено.', + 'prohibited_if' => 'Поле :attribute запрещено, когда :other равно :value.', + 'prohibited_if_accepted' => 'Поле :attribute запрещено, когда :other принято.', + 'prohibited_if_declined' => 'Поле :attribute запрещено, когда :other отклонено.', + 'prohibited_unless' => 'Поле :attribute запрещено, если только :other не находится в :values.', + 'prohibits' => 'Поле :attribute запрещает присутствие :other.', + 'regex' => 'Формат поля :attribute некорректен.', + 'required' => 'Поле :attribute обязательно для заполнения.', + 'required_array_keys' => 'Поле :attribute должно содержать записи для: :values.', + 'required_if' => 'Поле :attribute обязательно для заполнения, когда :other равно :value.', + 'required_if_accepted' => 'Поле :attribute обязательно для заполнения, когда :other принято.', + 'required_if_declined' => 'Поле :attribute обязательно для заполнения, когда :other отклонено.', + 'required_unless' => 'Поле :attribute обязательно для заполнения, если только :other не находится в :values.', + 'required_with' => 'Поле :attribute обязательно для заполнения, когда присутствует :values.', + 'required_with_all' => 'Поле :attribute обязательно для заполнения, когда присутствуют :values.', + 'required_without' => 'Поле :attribute обязательно для заполнения, когда отсутствует :values.', + 'required_without_all' => 'Поле :attribute обязательно для заполнения, когда отсутствуют все из :values.', + 'same' => 'Значение поля :attribute должно совпадать с :other.', + 'size' => [ + 'array' => 'Поле :attribute должно содержать :size элементов.', + 'file' => 'Размер файла в поле :attribute должен быть :size килобайт.', + 'numeric' => 'Поле :attribute должно быть равно :size.', + 'string' => 'Количество символов в поле :attribute должно быть равно :size.', + ], + 'starts_with' => 'Поле :attribute должно начинаться с одного из следующих значений: :values.', + 'string' => 'Поле :attribute должно быть строкой.', + 'timezone' => 'Поле :attribute должно содержать корректный часовой пояс.', + 'unique' => 'Такое значение поля :attribute уже занято.', + 'uploaded' => 'Не удалось загрузить :attribute.', + 'uppercase' => 'Поле :attribute должно быть в верхнем регистре.', + 'url' => 'Поле :attribute должно содержать корректный URL.', + 'ulid' => 'Поле :attribute должно содержать корректный ULID.', + 'uuid' => 'Поле :attribute должно содержать корректный UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/ru/workspaces.php b/lang/ru/workspaces.php new file mode 100644 index 00000000..7e1cb4b9 --- /dev/null +++ b/lang/ru/workspaces.php @@ -0,0 +1,50 @@ + 'Рабочие пространства', + 'select_title' => 'Ваши рабочие пространства', + 'select_description' => 'Выберите рабочее пространство, чтобы продолжить', + 'current' => 'Текущее', + 'connections' => ':count подключений', + 'posts' => ':count постов', + + 'create' => [ + 'page_title' => 'Создайте рабочее пространство', + 'title' => 'Настройте рабочее пространство', + 'description' => 'Расскажите немного о себе или своём проекте. Мы используем это, чтобы адаптировать сгенерированные ИИ посты под ваш стиль.', + 'website' => 'Веб-сайт', + 'website_placeholder' => 'https://yourbrand.com', + 'autofill' => 'Заполнить с сайта', + 'autofill_missing_url' => 'Сначала введите URL.', + 'autofill_success' => 'Информация о бренде загружена.', + 'autofill_error' => 'Не удалось заполнить автоматически. Вы можете заполнить поля вручную.', + 'autofill_errors' => [ + 'unreachable' => 'Не удалось получить доступ к этому сайту (:reason).', + 'http_status' => 'Сайт вернул неожиданный статус (:status).', + 'invalid_scheme' => 'Поддерживаются только URL с http и https.', + 'missing_host' => 'В URL отсутствует хост.', + 'unresolvable_host' => 'Не удалось разрешить хост (:host).', + 'private_network' => 'URL, указывающие на приватные сети, не допускаются.', + ], + 'logo_captured' => 'Логотип получен с вашего сайта.', + 'name' => 'Название рабочего пространства', + 'name_placeholder' => 'например, Acme Inc', + 'brand_description' => 'Описание бренда', + 'brand_description_placeholder' => 'Чем занимается ваш бренд?', + 'content_language' => 'Язык контента', + 'content_language_description' => 'Сгенерированные ИИ подписи будут написаны на этом языке.', + 'brand_color' => 'Цвет бренда', + 'background_color' => 'Цвет фона', + 'text_color' => 'Цвет текста', + 'submit' => 'Создать рабочее пространство', + 'success' => 'Рабочее пространство создано. Подключите социальный аккаунт, чтобы начать публиковать.', + ], + + 'cannot_delete_last' => 'Нельзя удалить единственное рабочее пространство. Отмените подписку в настройках оплаты, чтобы закрыть аккаунт.', + + 'flash' => [ + 'deleted' => 'Рабочее пространство успешно удалено.', + ], +]; diff --git a/lang/tr/accounts.php b/lang/tr/accounts.php new file mode 100644 index 00000000..99e8d836 --- /dev/null +++ b/lang/tr/accounts.php @@ -0,0 +1,150 @@ + 'Bağlantılar', + 'page_title' => 'Sosyal Hesaplar', + 'description' => 'Bağlı tüm sosyal hesaplarınıza genel bakış', + 'connect_cta' => 'Bağla', + + 'not_connected' => 'Bağlı değil', + 'connect' => 'Bağla', + 'connection_lost' => 'Bağlantı koptu', + 'reconnect' => 'Yeniden bağla', + 'reconnect_account' => 'Hesabı yeniden bağla', + 'view_profile' => 'Profili görüntüle', + 'disconnect' => 'Bağlantıyı kes', + + 'descriptions' => [ + 'linkedin' => 'LinkedIn profilinizi veya şirket sayfanızı bağlayın', + 'linkedin-page' => 'Bir LinkedIn şirket sayfası bağlayın', + 'x' => 'X (Twitter) hesabınızı bağlayın', + 'tiktok' => 'TikTok hesabınızı bağlayın', + 'youtube' => 'Bir YouTube kanalı bağlayın', + 'facebook' => 'Bir Facebook sayfası bağlayın', + 'instagram' => 'Bir Instagram profesyonel hesabı bağlayın', + 'instagram-facebook' => 'Facebook sayfası üzerinden Instagram bağlayın', + 'threads' => 'Threads hesabınızı bağlayın', + 'pinterest' => 'Pinterest hesabınızı bağlayın', + 'bluesky' => 'Bluesky hesabınızı bağlayın', + 'mastodon' => 'Mastodon hesabınızı bağlayın', + 'telegram' => 'Bir Telegram kanalı veya grubu bağlayın', + 'discord' => 'Bir Discord sunucusu bağlayın', + ], + + 'disconnect_modal' => [ + 'title' => 'Hesap Bağlantısını Kes', + 'description' => 'Bu hesabın bağlantısını kesmek istediğinizden emin misiniz? İstediğiniz zaman yeniden bağlayabilirsiniz.', + 'confirm' => 'Bağlantıyı kes', + 'cancel' => 'İptal', + ], + + 'bluesky' => [ + 'title' => 'Bluesky\'i Bağla', + 'description' => 'Bağlanmak için kimlik bilgilerinizi girin', + 'email' => 'E-posta', + 'email_placeholder' => 'yourhandle.bsky.social', + 'app_password' => 'Uygulama Parolası', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => 'Güvenlik için bir Uygulama Parolası kullanın. bsky.app/settings adresinden oluşturun.', + 'submit' => 'Bluesky\'i Bağla', + 'submitting' => 'Bağlanıyor...', + ], + + 'mastodon' => [ + 'title' => 'Mastodon\'u Bağla', + 'description' => 'Mastodon sunucunuzu girin', + 'instance_url' => 'Sunucu URL\'si', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => 'Mastodon sunucunuzun URL\'sini girin (örn. mastodon.social, techhub.social)', + 'submit' => 'Mastodon ile devam et', + 'submitting' => 'Bağlanıyor...', + ], + + 'telegram' => [ + 'title' => 'Telegram\'ı Bağla', + 'description' => 'Bir kanal veya grup bağlayın', + 'step_admin' => ':bot\'u Telegram kanalınıza veya grubunuza yönetici olarak ekleyin.', + 'step_command' => 'Bu komutu kanala veya gruba gönderin:', + 'waiting' => 'Kanalın bağlanması bekleniyor…', + 'connected' => 'Kanal bağlandı!', + 'connected_toast' => 'Telegram kanalı başarıyla bağlandı!', + 'copied_toast' => 'Komut panoya kopyalandı', + 'copy_tooltip' => 'Komutu kopyala', + 'expired' => 'Bu kodun süresi doldu. Yeniden denemek için yeni bir tane oluşturun.', + 'new_code' => 'Yeni bir kod oluştur', + 'retry' => 'Tekrar dene', + 'error_generic' => 'Bağlantı başlatılamadı. Lütfen tekrar deneyin.', + 'network_taken' => 'Bu çalışma alanında zaten bağlı bir Telegram kanalı var. Önce bağlantısını kesin.', + ], + + 'facebook' => [ + 'title' => 'Facebook Sayfası Seç', + 'description' => 'Bağlamak istediğiniz sayfayı seçin', + 'no_pages' => 'Sayfa bulunamadı', + 'no_pages_description' => 'Hiçbir Facebook sayfasının yöneticisi değilsiniz.', + 'page_label' => 'Facebook Sayfası', + 'view' => 'Görüntüle', + 'choose' => 'Seç', + ], + + 'instagram_facebook' => [ + 'title' => 'Instagram Hesabı Seç', + 'description' => 'Bağlamak istediğiniz Instagram hesabını seçin', + 'no_pages' => 'Instagram hesabı bulunamadı', + 'no_pages_description' => 'Bağlı Instagram İşletme hesabı olan Facebook Sayfası bulunamadı.', + 'view' => 'Görüntüle', + 'choose' => 'Seç', + ], + + 'linkedin' => [ + 'title' => 'LinkedIn Sayfası Seç', + 'description' => 'Bağlamak istediğiniz sayfayı seçin', + 'no_pages' => 'Sayfa bulunamadı', + 'no_pages_description' => 'Hiçbir LinkedIn sayfasının yöneticisi değilsiniz.', + 'page_label' => 'LinkedIn Sayfası', + 'select_title' => 'Nerede paylaşım yapmak istiyorsunuz?', + 'select_subtitle' => 'Kendi adınıza paylaşın veya yönettiğiniz bir şirket sayfası seçin.', + 'person_tag' => 'Kişi', + 'organization_tag' => 'Kuruluş', + 'view' => 'Görüntüle', + 'choose' => 'Seç', + ], + + 'flash' => [ + 'disconnected' => 'Hesap bağlantısı başarıyla kesildi!', + 'connected' => 'Hesap başarıyla bağlandı!', + 'session_expired' => 'Oturum süresi doldu. Lütfen tekrar deneyin.', + 'workspace_not_found' => 'Çalışma alanı bulunamadı.', + 'activated' => 'Hesap etkinleştirildi!', + 'deactivated' => 'Hesap devre dışı bırakıldı!', + 'already_connected' => 'Bu platform zaten bağlı.', + 'no_youtube_channels' => 'YouTube kanalı bulunamadı. Lütfen önce bir kanal oluşturun.', + ], + + 'popup_callback' => [ + 'title_success' => 'Bağlandı', + 'title_error' => 'Hata', + 'closing' => 'Bu pencere otomatik olarak kapanacak...', + 'manual_close' => 'Bu pencereyi kapatabilirsiniz.', + 'popup_blocked' => 'Bağlantı penceresi açılamadı. Lütfen açılır pencerelere izin verip tekrar deneyin.', + 'connected' => 'Hesap bağlandı!', + 'reconnected' => 'Hesap yeniden bağlandı!', + 'error_connecting' => 'Hesap bağlanırken hata oluştu. Lütfen tekrar deneyin.', + 'network_taken' => 'Bu çalışma alanında bu ağa ait zaten bir hesap var. Önce bağlantısını kesin.', + 'error_connecting_page' => 'Sayfa bağlanırken hata oluştu. Lütfen tekrar deneyin.', + 'error_connecting_channel' => 'Kanal bağlanırken hata oluştu. Lütfen tekrar deneyin.', + 'session_expired' => 'Oturum süresi doldu. Lütfen tekrar deneyin.', + 'workspace_not_found' => 'Çalışma alanı bulunamadı.', + 'invalid_state' => 'Geçersiz durum. Lütfen tekrar deneyin.', + 'failed_to_authenticate' => 'Kimlik doğrulama başarısız oldu.', + 'failed_to_get_profile' => 'Profil alınamadı.', + 'page_not_found' => 'Sayfa bulunamadı.', + 'channel_not_found' => 'Kanal bulunamadı.', + 'no_facebook_pages' => 'Facebook Sayfası bulunamadı. En az bir sayfanın yöneticisi olmanız gerekir.', + 'no_facebook_instagram_pages' => 'Bağlı Instagram hesabı olan Facebook Sayfası bulunamadı.', + 'no_youtube_channels' => 'YouTube kanalı bulunamadı. Lütfen önce bir kanal oluşturun.', + 'not_linkedin_admin' => 'Hiçbir LinkedIn sayfasının yöneticisi değilsiniz.', + ], +]; diff --git a/lang/tr/analytics.php b/lang/tr/analytics.php new file mode 100644 index 00000000..daafd3b3 --- /dev/null +++ b/lang/tr/analytics.php @@ -0,0 +1,57 @@ + 'Analitiği olan bağlı hesap yok.', + 'no_accounts_match' => 'Eşleşen hesap yok.', + 'search_account' => 'Hesap ara…', + 'select_account' => 'Analitiği görüntülemek için bir hesap seçin.', + 'no_data' => 'Kullanılabilir analitik verisi yok.', + + 'metrics' => [ + 'avg_view_duration' => 'Ort. İzlenme Süresi (sn)', + 'avg_view_percentage' => 'Ort. İzlenme Yüzdesi', + 'bookmarks' => 'Yer İşaretleri', + 'clicks' => 'Tıklamalar', + 'comments' => 'Yorumlar', + 'custom_reaction' => 'Özel', + 'engagement' => 'Etkileşim', + 'favourites' => 'Favoriler', + 'followers' => 'Takipçiler', + 'following' => 'Takip Edilenler', + 'impressions' => 'Gösterimler', + 'interactions' => 'Etkileşimler', + 'likes' => 'Beğeniler', + 'members' => 'Üyeler', + 'minutes_watched' => 'İzlenen Dakika', + 'organic_followers' => 'Organik Takipçiler', + 'outbound_clicks' => 'Dış Bağlantı Tıklamaları', + 'page_followers' => 'Sayfa Takipçileri', + 'page_reach' => 'Sayfa Erişimi', + 'page_views' => 'Sayfa Görüntülemeleri', + 'paid_followers' => 'Ücretli Takipçiler', + 'pin_click_rate' => 'Pin Tıklama Oranı', + 'pin_clicks' => 'Pin Tıklamaları', + 'posts_engagement' => 'Gönderi Etkileşimi', + 'posts_reach' => 'Gönderi Erişimi', + 'quotes' => 'Alıntılar', + 'reach' => 'Erişim', + 'reblogs' => 'Yeniden Bloglamalar', + 'recent_comments' => 'Son Yorumlar', + 'recent_likes' => 'Son Beğeniler', + 'recent_shares' => 'Son Paylaşımlar', + 'replies' => 'Yanıtlar', + 'reposts' => 'Yeniden Paylaşımlar', + 'retweets' => 'Retweetler', + 'saves' => 'Kaydetmeler', + 'shares' => 'Paylaşımlar', + 'subscribers' => 'Aboneler', + 'subscribers_gained' => 'Kazanılan Aboneler', + 'subscribers_lost' => 'Kaybedilen Aboneler', + 'total_likes' => 'Toplam Beğeni', + 'video_views' => 'Video Görüntülemeleri', + 'videos' => 'Videolar', + 'views' => 'Görüntülemeler', + ], +]; diff --git a/lang/tr/assets.php b/lang/tr/assets.php new file mode 100644 index 00000000..f783f101 --- /dev/null +++ b/lang/tr/assets.php @@ -0,0 +1,54 @@ + 'Varlıklar', + + 'tabs' => [ + 'my_uploads' => 'Yüklemelerim', + 'stock_photos' => 'Stok Fotoğraflar', + 'gifs' => 'GIF\'ler', + ], + + 'upload' => [ + 'drag_drop' => 'Dosyalarınızı buraya sürükleyip bırakın veya seçmek için tıklayın', + 'formats' => 'JPEG, PNG, GIF, WebP, MP4, PDF', + 'uploading' => 'Yükleniyor...', + 'failed' => ':file yüklenemedi. Lütfen tekrar deneyin.', + ], + + 'empty' => [ + 'title' => 'Henüz varlık yok', + 'description' => 'Medya kitaplığınızı oluşturmak için görsel ve video yükleyin.', + ], + + 'save_to_assets' => 'Varlıklara Kaydet', + 'saved' => 'Varlıklarınıza kaydedildi!', + 'create_post' => 'Gönderi oluştur', + 'add_to_post' => 'Gönderiye ekle', + 'search_placeholder' => 'Medya ara...', + + 'delete' => [ + 'title' => 'Varlığı sil', + 'description' => 'Bu varlığı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.', + 'confirm' => 'Sil', + 'cancel' => 'İptal', + ], + + 'unsplash' => [ + 'search_placeholder' => 'Ücretsiz fotoğraf ara...', + 'no_results' => 'Fotoğraf bulunamadı', + 'no_results_description' => 'Farklı bir arama terimi deneyin.', + 'trending' => 'Unsplash\'te Popüler', + 'start_searching' => 'Unsplash\'ten ücretsiz stok fotoğraflar arayın', + ], + + 'giphy' => [ + 'trending' => 'Giphy\'de Popüler', + 'search_placeholder' => 'GIF ara...', + 'no_results' => 'GIF bulunamadı', + 'no_results_description' => 'Farklı bir arama terimi deneyin.', + 'powered_by' => 'GIPHY tarafından desteklenmektedir', + ], +]; diff --git a/lang/tr/auth.php b/lang/tr/auth.php new file mode 100644 index 00000000..2beb75eb --- /dev/null +++ b/lang/tr/auth.php @@ -0,0 +1,143 @@ + 'Bu kimlik bilgileri kayıtlarımızla eşleşmiyor.', + 'password' => 'Girilen parola yanlış.', + 'throttle' => 'Çok fazla giriş denemesi. Lütfen :seconds saniye sonra tekrar deneyin.', + + 'flash' => [ + 'welcome' => 'TryPost\'a hoş geldiniz!', + 'welcome_trial' => 'TryPost\'a hoş geldiniz! Deneme süreniz başladı.', + ], + + 'legal' => 'Devam ederek Hizmet Şartları ve Gizlilik Politikası\'nı kabul etmiş olursunuz.', + + 'slides' => [ + 'calendar' => [ + 'title' => 'Görsel Takvim', + 'description' => 'Tüm sosyal hesaplarınızda içeriklerinizi sezgisel bir sürükle-bırak takvimiyle planlayın ve zamanlayın.', + ], + 'scheduling' => [ + 'title' => 'Akıllı Zamanlama', + 'description' => 'LinkedIn, X, Instagram, TikTok, YouTube ve daha fazlasında gönderileri tek bir yerden zamanlayın.', + ], + 'media' => [ + 'title' => 'Zengin Medya', + 'description' => 'Görseller, karuseller, hikayeler ve reels paylaşın. Her platform doğru formatı otomatik olarak alır.', + ], + 'video' => [ + 'title' => 'Video Yayınlama', + 'description' => 'Videoları bir kez yükleyin; TikTok, YouTube Shorts, Instagram Reels ve Facebook Reels\'de yayınlayın.', + ], + 'team' => [ + 'title' => 'Ekip Çalışma Alanları', + 'description' => 'Ekibinizi davet edin, roller atayın ve birden fazla markayı ayrı çalışma alanlarından yönetin.', + ], + 'signatures' => [ + 'title' => 'İmzalar', + 'description' => 'Yeniden kullanılabilir imzalar (hashtag\'ler, bağlantılar, kapanışlar) kaydedin ve tek tıklamayla gönderilere ekleyin.', + ], + ], + + 'or_continue_with' => 'Veya şununla devam et', + 'or_continue_with_email' => 'Veya e-posta ile devam et', + 'google_login' => 'Google ile giriş yap', + 'google_signup' => 'Google ile kayıt ol', + 'github_login' => 'GitHub ile giriş yap', + 'github_signup' => 'GitHub ile kayıt ol', + 'github_email_unavailable' => 'GitHub\'dan e-postanız alınamadı. GitHub e-postanızı herkese açık yapın veya e-posta iznini verin, ardından tekrar deneyin.', + + 'signup_success' => [ + 'page_title' => 'Hoş geldiniz', + 'title' => 'Hesabınız ayarlanıyor', + 'description' => 'Bu genellikle yalnızca birkaç saniye sürer...', + ], + + 'login' => [ + 'title' => 'Hesabınıza giriş yapın', + 'description' => 'Giriş yapmak için e-posta ve parolanızı aşağıya girin', + 'page_title' => 'Giriş yap', + 'email' => 'E-posta adresi', + 'password' => 'Parola', + 'forgot_password' => 'Parolanızı mı unuttunuz?', + 'remember_me' => 'Beni hatırla', + 'submit' => 'Giriş yap', + 'no_account' => 'Hesabınız yok mu?', + 'sign_up' => 'Kayıt ol', + ], + + 'register' => [ + 'title' => 'Tüm sosyal takviminiz tek bir yerde', + 'description' => 'Hesabınızı oluşturun ve her ağda gönderi zamanlamaya başlayın.', + 'page_title' => 'Kayıt ol', + 'signup_with_email' => 'E-posta ile kayıt ol', + 'name' => 'Ad', + 'name_placeholder' => 'Ad soyad', + 'email' => 'E-posta adresi', + 'password' => 'Parola', + 'show_password' => 'Parolayı göster', + 'hide_password' => 'Parolayı gizle', + 'submit' => 'Hesap oluştur', + 'has_account' => 'Zaten bir hesabınız var mı?', + 'log_in' => 'Giriş yap', + ], + + 'forgot_password' => [ + 'title' => 'Parolamı unuttum', + 'description' => 'Parola sıfırlama bağlantısı almak için e-postanızı girin', + 'page_title' => 'Parolamı unuttum', + 'email' => 'E-posta adresi', + 'submit' => 'Parola sıfırlama bağlantısını e-postayla gönder', + 'return_to' => 'Ya da şuraya dönün:', + 'log_in' => 'giriş yap', + ], + + 'reset_password' => [ + 'title' => 'Parolayı sıfırla', + 'description' => 'Lütfen yeni parolanızı aşağıya girin', + 'page_title' => 'Parolayı sıfırla', + 'email' => 'E-posta', + 'password' => 'Parola', + 'confirm_password' => 'Parolayı Onayla', + 'confirm_placeholder' => 'Parolayı onayla', + 'submit' => 'Parolayı sıfırla', + ], + + 'verify_email' => [ + 'title' => 'E-postayı doğrula', + 'description' => 'Lütfen size e-postayla gönderdiğimiz bağlantıya tıklayarak e-posta adresinizi doğrulayın.', + 'page_title' => 'E-posta doğrulama', + 'link_sent' => 'Kayıt sırasında verdiğiniz e-posta adresine yeni bir doğrulama bağlantısı gönderildi.', + 'resend' => 'Doğrulama e-postasını yeniden gönder', + 'log_out' => 'Çıkış yap', + ], + + 'accept_invite' => [ + 'page_title' => 'Daveti Kabul Et', + 'title' => 'Davet edildiniz!', + 'description' => ':workspace çalışma alanına katılmaya davet edildiniz.', + 'workspace' => 'Çalışma alanı', + 'your_role' => 'Rolünüz', + 'email' => 'E-posta', + 'accept' => 'Daveti Kabul Et', + 'decline' => 'Daveti Reddet', + 'login_prompt' => 'Bu daveti kabul etmek için giriş yapın veya bir hesap oluşturun.', + 'log_in' => 'Giriş yap', + 'create_account' => 'Hesap Oluştur', + ], + +]; diff --git a/lang/tr/automations.php b/lang/tr/automations.php new file mode 100644 index 00000000..c541572c --- /dev/null +++ b/lang/tr/automations.php @@ -0,0 +1,411 @@ + 'Otomasyonlar', + 'default_name' => 'Yeni otomasyon', + + 'actions' => [ + 'new' => 'Yeni otomasyon', + 'edit' => 'Düzenle', + 'save' => 'Kaydet', + 'activate' => 'Etkinleştir', + 'pause' => 'Duraklat', + 'delete' => 'Sil', + 'retry' => 'Tekrar dene', + 'guide' => 'Nasıl çalıştığını öğren', + ], + + 'tabs' => [ + 'build' => 'Oluştur', + 'variables' => 'Değişkenler', + 'test' => 'Test', + ], + + 'nav' => [ + 'workflow' => 'İş Akışı', + 'invocations' => 'Çalıştırmalar', + 'metrics' => 'Metrikler', + 'settings' => 'Ayarlar', + ], + + 'settings' => [ + 'general' => 'Genel', + 'general_description' => 'Bu otomasyonu yeniden adlandırın.', + 'name_label' => 'Ad', + 'name_saved' => 'Otomasyon yeniden adlandırıldı.', + 'status_title' => 'Durum', + 'status_description' => 'Çalıştırmaya başlamak için etkinleştirin veya durdurmak için duraklatın.', + 'activated_at' => 'Etkinleştirildi: :date', + 'paused_at' => 'Duraklatıldı: :date', + 'created_at' => 'Oluşturuldu: :date', + 'danger_title' => 'Tehlikeli bölge', + 'danger_description' => 'Geri alınamaz işlemler.', + 'delete_title' => 'Bu otomasyonu sil', + 'delete_description' => 'Otomasyonu ve çalışma geçmişini kalıcı olarak kaldırır.', + ], + + 'status_run' => [ + 'pending' => 'Beklemede', + 'running' => 'Çalışıyor', + 'waiting' => 'Bekliyor', + 'completed' => 'Tamamlandı', + 'failed' => 'Başarısız', + 'cancelled' => 'İptal edildi', + ], + + 'node_type' => [ + 'trigger' => 'Tetikleyici', + 'generate' => 'İçerik oluştur', + 'delay' => 'Gecikme', + 'condition' => 'Koşul', + 'publish' => 'Yayınla', + 'webhook' => 'Webhook', + 'end' => 'Bitir', + 'fetch_rss' => 'RSS Getir', + 'http_request' => 'HTTP isteği', + ], + + 'invocations' => [ + 'empty' => 'Henüz çalıştırma yok.', + 'refresh' => 'Yenile', + 'search_placeholder' => 'Çalıştırma kimliğine göre ara…', + 'copied' => 'Çalıştırma kimliği kopyalandı.', + 'loading' => 'Adımlar yükleniyor…', + 'no_steps' => 'Kaydedilmiş adım yok.', + 'load_error' => 'Adımlar yüklenemedi.', + 'steps' => '{0}Adım yok|{1}:count adım|[2,*]:count adım', + 'filter' => [ + 'all' => 'Tüm durumlar', + ], + 'columns' => [ + 'timestamp' => 'Zaman damgası', + 'run' => 'Çalıştırma', + 'status' => 'Durum', + 'message' => 'Son mesaj', + 'duration' => 'Süre', + ], + 'summary' => [ + 'completed' => 'İş akışı tamamlandı', + 'failed' => 'İş akışı başarısız oldu', + 'running' => 'İş akışı çalışıyor', + 'cancelled' => 'İş akışı iptal edildi', + 'pending' => 'İş akışı beklemede', + ], + ], + + 'metrics' => [ + 'overview' => 'Genel Bakış', + 'runs_over_time' => 'Zaman içindeki çalıştırmalar', + 'posts_by_platform' => 'Platforma göre gönderiler', + 'no_posts' => 'Bu dönemde yayınlanan gönderi yok.', + 'cards' => [ + 'runs' => 'Toplam çalıştırma', + 'completed' => 'Tamamlanan', + 'failed' => 'Başarısız', + 'in_progress' => 'Devam eden', + 'success_rate' => 'Başarı oranı', + 'avg_duration' => 'Ort. süre', + 'posts_created' => 'Oluşturulan gönderi', + ], + 'legend' => [ + 'started' => 'Başlatıldı', + 'completed' => 'Tamamlandı', + 'failed' => 'Başarısız', + ], + ], + + 'categories' => [ + 'sources' => 'Kaynaklar', + 'content' => 'İçerik', + 'flow' => 'Akış', + 'output' => 'Çıktı', + ], + + 'variables' => [ + 'title' => 'İş akışı değişkenleri', + 'hint' => '{{ variables.KEY }} ile herhangi bir yerde başvurulan yeniden kullanılabilir değerler. Şifrelenmiş olarak saklanır.', + 'empty' => 'Henüz değişken yok.', + 'key' => 'Anahtar', + 'value' => 'Değer', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => 'Değer', + 'add' => 'Yeni değişken', + ], + + 'expr' => [ + 'trigger_event' => 'Tetikleyici olay adı', + 'trigger_fired_at' => 'Tetikleyicinin tetiklenme zamanı', + 'trigger_post_id' => 'Tetikleyen gönderi kimliği', + 'trigger_post_content' => 'Tetikleyen gönderi içeriği', + 'trigger_post_status' => 'Tetikleyen gönderi durumu', + 'trigger_post_scheduled_at' => 'Gönderinin zamanlandığı an', + 'trigger_post_published_at' => 'Gönderinin yayınlandığı an', + 'fetched_title' => 'Getirilen öğe başlığı', + 'fetched_link' => 'Getirilen öğe bağlantısı', + 'fetched_date' => 'Getirilen öğe yayın tarihi', + 'fetched_content' => 'Getirilen öğenin tam içeriği', + 'fetched_description' => 'Getirilen öğe özeti', + 'fetched_author' => 'Getirilen öğe yazarı', + 'fetched_image' => 'Getirilen öğe görsel URL\'si', + 'fetched_categories' => 'Getirilen öğe kategorileri', + 'fetched_enclosure' => 'Getirilen öğe medyası (ses/video/dosya)', + 'fetched_pubdate' => 'Getirilen öğe yayın tarihi', + 'fetched_http' => 'Getirilen HTTP öğesi (bir alan ekleyin)', + 'generated_content' => 'AI ile oluşturulan gönderi içeriği', + 'generated_post_url' => 'AI ile oluşturulan gönderi URL\'si', + 'variable' => 'İş akışı değişkeni', + 'now' => 'Geçerli tarih ve saat', + ], + + 'test' => [ + 'description' => 'Otomasyonu, sentezlenmiş bir tetikleyici yükü kullanarak baştan sona çalıştırır. Gerçek zamanlamayı veya beslemeyi beklemeden her düğümü doğrulamak için kullanışlıdır.', + 'starting' => 'Test çalıştırması başlatılıyor…', + 'in_progress' => 'Devam ediyor', + 'completed' => 'Tamamlandı', + 'failed' => 'Başarısız', + 'waiting' => 'Bekliyor', + 'close' => 'Kapat', + 'no_node_runs' => 'İlk düğümün başlaması bekleniyor…', + 'node_input' => 'Girdi', + 'node_output' => 'Çıktı', + 'node_error' => 'Hata', + 'no_new_items' => 'Yeni öğe yok — sonraki hiçbir adım çalışmadı.', + 'error_starting' => 'Test çalıştırması başlatılamadı.', + 'with_real_data' => 'Gerçek verilerle', + 'run' => 'Testi çalıştır', + 'idle_hint' => 'Otomasyonu baştan sona çalıştırmak için Testi çalıştır\'a basın.', + 'real_data_hint' => 'Bu test gönderileri yayınlar, yoklama işaretlerini ilerletir ve dış yan etkileri tetikler.', + 'dry_badge' => 'Deneme çalıştırması', + ], + + 'status' => [ + 'draft' => 'Taslak', + 'active' => 'Etkin', + 'paused' => 'Duraklatıldı', + ], + + 'index' => [ + 'empty_title' => 'Henüz otomasyon yok', + 'empty_description' => 'Otomatik pilotta yayınlamaya başlamak için ilk otomasyonunuzu oluşturun.', + 'columns' => [ + 'name' => 'Ad', + 'status' => 'Durum', + 'created' => 'Oluşturuldu', + ], + ], + + 'form' => [ + 'activate_error_fallback' => 'Otomasyon etkinleştirilemedi.', + 'pause_error_fallback' => 'Otomasyon duraklatılamadı.', + 'save_error_fallback' => 'Otomasyon kaydedilemedi.', + 'save_success' => 'Otomasyon kaydedildi.', + 'empty_canvas_title' => 'Otomasyonunuzu oluşturmaya başlayın', + 'empty_canvas_description' => 'Başlamak için sol panelden bir düğüm sürükleyin.', + 'name_placeholder' => 'Adsız otomasyon', + ], + + 'nodes' => [ + 'trigger' => 'Tetikleyici', + 'generate' => 'Oluştur', + 'delay' => 'Gecikme', + 'condition' => 'Koşul', + 'publish' => 'Yayınla', + 'webhook' => 'Webhook', + 'end' => 'Bitir', + 'end_summary' => 'Otomasyonu burada durdurur', + 'fetch_rss' => 'RSS Getir', + 'http_request' => 'HTTP İsteği', + 'handles' => [ + 'items' => 'öğeleri var', + 'no_items' => 'öğe yok', + ], + ], + + 'config' => [ + 'select_placeholder' => 'Seç…', + 'invalid_json' => 'Bu henüz geçerli JSON değil.', + 'expand_editor' => 'Düzenleyiciyi genişlet', + 'minimize_editor' => 'Küçült', + + 'trigger' => [ + 'type' => 'Tetikleyici türü', + 'types' => [ + 'schedule' => 'Zamanlama', + 'post_published' => 'Bir gönderi yayınlandığında', + 'post_scheduled' => 'Bir gönderi zamanlandığında', + ], + 'post_published_hint' => 'Bu çalışma alanındaki herhangi bir gönderi yayınlandığında çalışır. Yayınlanan gönderi, sonraki düğümler için {{ trigger.post }} adresinde kullanılabilir hale gelir.', + 'post_scheduled_hint' => 'Bu çalışma alanındaki herhangi bir gönderi zamanlandığında çalışır. Zamanlanan gönderi {{ trigger.post }} adresinde kullanılabilir.', + + 'schedule' => [ + 'field' => 'Tetikleme aralığı', + 'fields' => [ + 'minutes' => 'Dakika', + 'hours' => 'Saat', + 'days' => 'Gün', + 'weeks' => 'Hafta', + 'months' => 'Ay', + ], + 'minutes_interval' => 'Tetiklemeler arasındaki dakika', + 'hours_interval' => 'Tetiklemeler arasındaki saat', + 'days_interval' => 'Tetiklemeler arasındaki gün', + 'hour' => 'Şu saatte tetikle', + 'minute' => 'Şu dakikada tetikle', + 'weekdays' => 'Şu günlerde tetikle', + 'day_of_month' => 'Ayın günü', + 'weekday_names' => [ + 'sun' => 'Paz', + 'mon' => 'Pzt', + 'tue' => 'Sal', + 'wed' => 'Çar', + 'thu' => 'Per', + 'fri' => 'Cum', + 'sat' => 'Cmt', + ], + 'summary' => [ + 'every_n_minutes' => 'Her dakika çalışır|Her :count dakikada bir çalışır', + 'every_n_hours' => 'Her saat :minute. dakikada çalışır|Her :count saatte bir :minute. dakikada çalışır', + 'every_n_days' => 'Her gün :time saatinde çalışır|Her :count günde bir :time saatinde çalışır', + 'weekly' => 'Her :days günü :time saatinde çalışır', + 'monthly' => 'Her ayın :day. günü :time saatinde çalışır', + ], + ], + ], + 'generate' => [ + 'social_accounts' => 'Sosyal hesaplar', + 'social_accounts_empty' => 'Bağlı sosyal hesap yok. Önce bir tane bağlayın.', + 'target_slide_count' => 'Oluşturulacak slayt', + 'prompt_template' => 'İstem şablonu', + 'prompt_template_hint' => 'Önceki adımlardan veri eklemek için {{ yazın.', + 'image_count' => 'Oluşturulacak görsel', + 'image_count_hint' => '0 = yalnızca metin gönderisi (görsel yok). 1 = tek görsel. 2+ = karusel.', + 'use_brand_voice' => 'Marka sesini kullan', + 'use_brand_voice_hint' => 'Marka açıklamanızı ve sesinizi uygular. Üçüncü taraf kaynakların (haber, RSS) sadık bir şekilde derlenmesi için kapatın.', + 'use_brand_visuals' => 'Marka görsellerini kullan', + 'use_brand_visuals_hint' => 'AI görsellerini marka renklerinizle ve kimliğinizle yönlendirin. Yalnızca gönderi konusuna dayalı nötr görseller için kapatın.', + 'style' => 'Stil', + 'account_summary' => ':count hesap · :format|:count hesap · :format', + 'formats' => [ + 'single' => 'tekli', + 'carousel' => 'karusel', + ], + ], + 'delay' => [ + 'duration' => 'Süre', + 'unit' => 'Birim', + 'units' => [ + 'minutes' => 'Dakika', + 'hours' => 'Saat', + 'days' => 'Gün', + ], + ], + 'condition' => [ + 'field' => 'Alan', + 'operator' => 'Operatör', + 'operators' => [ + 'contains' => 'içerir', + 'not_contains' => 'içermez', + 'equals' => 'eşittir', + 'not_equals' => 'eşit değildir', + 'matches' => 'eşleşir (regex)', + 'greater_than' => 'büyüktür', + 'less_than' => 'küçüktür', + ], + 'value' => 'Değer', + ], + 'publish' => [ + 'mode' => 'Mod', + 'modes' => [ + 'now' => 'Şimdi yayınla', + 'scheduled' => 'Zamanla', + 'draft' => 'Taslak olarak kaydet', + ], + 'scheduled_offset' => 'Tetikleyiciden kayma (dakika)', + 'offset_summary' => ':mode · +:offset dk', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => 'Yöntem', + 'payload_template' => 'Yük şablonu (JSON)', + ], + 'end' => [ + 'reason' => 'Neden (isteğe bağlı)', + 'reason_placeholder' => 'örn. Koşul tarafından filtrelendi', + ], + 'fetch_rss' => [ + 'feed_url' => 'Besleme URL\'si', + 'feed_url_hint' => 'İlk çalıştırmada işaret "şimdi" olarak ayarlanır; böylece eski öğeler sonraki düğümleri doldurmaz. Sonraki çalıştırmalar yalnızca önceki yoklamadan daha yeni öğeleri görür.', + 'inspect' => 'Beslemeyi incele', + 'inspecting' => 'İnceleniyor…', + 'inspect_hint' => 'Sonraki düğümlerde kullanmak üzere mevcut alanları keşfetmek için bir örnek getirin.', + 'inspect_error' => 'Bu besleme okunamadı. URL\'yi kontrol edip tekrar deneyin.', + 'discovered_fields' => 'Mevcut alanlar', + 'discovered_empty' => 'En son öğede alan bulunamadı.', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => 'Yöntem', + 'auth_type' => 'Kimlik doğrulama', + 'auth' => [ + 'none' => 'Yok (herkese açık)', + 'bearer' => 'Bearer token', + 'basic' => 'Temel kimlik doğrulama', + 'api_key' => 'API anahtarı başlığı', + ], + 'bearer_token' => 'Bearer token', + 'basic_username' => 'Kullanıcı adı', + 'basic_password' => 'Parola', + 'api_key_header' => 'Başlık adı', + 'api_key_value' => 'API anahtarı', + 'body_template' => 'Gövde şablonu (JSON)', + 'headers' => 'Başlıklar', + 'header_name' => 'Başlık adı', + 'header_value' => 'Değer', + 'add_header' => 'Başlık ekle', + 'polling_section' => 'Liste ve yinelenenleri kaldırma (isteğe bağlı)', + 'polling_hint' => 'Yanıt bir liste olduğunda, her öğe iş akışını ayrı ayrı çalıştırır. Tek bir nesne bir kez çalışır.', + 'items_path' => 'Öğe yolu', + 'items_path_hint' => 'Yanıt zaten bir diziyse boş bırakın. İç içe bir dizi için noktalı bir yol (örn. data.items) veya kimliğe göre anahtarlanan bir nesne için * kullanın.', + 'item_key_path' => 'Öğe anahtar yolu', + 'item_key_path_hint' => 'Benzersiz bir kimliğe giden JSON yolu (örn. id). Zaten görülen öğeler atlanır; böylece tarihsiz bir besleme bile yalnızca yeni girişleri iletir.', + 'item_date_path' => 'Öğe tarih yolu', + 'item_date_path_hint' => 'Öğe zaman damgasına giden JSON yolu (örn. published_at). Varsa anahtar yolu yerine tercih edilir. İlk yoklama temeli kaydeder ve hiçbir şey iletmez; böylece mevcut bir besleme ilk gün taşmaz.', + ], + ], + + 'delete' => [ + 'title' => 'Otomasyonu sil', + 'description' => 'Bu otomasyonu silmek istediğinizden emin misiniz? Tüm çalıştırmalar ve tetikleyici öğeleri de kaldırılacak. Bu işlem geri alınamaz.', + 'confirm' => 'Sil', + 'cancel' => 'İptal', + ], + + 'flash' => [ + 'deleted' => 'Otomasyon başarıyla silindi!', + ], + + 'errors' => [ + 'no_active_social_accounts' => 'Bu otomasyon için yapılandırılmış etkin sosyal hesap yok.', + 'must_have_one_trigger' => 'Otomasyonda tam olarak bir tetikleyici düğümü olmalıdır.', + 'trigger_must_be_connected' => 'Tetikleyici düğümü en az bir düğüme bağlı olmalıdır.', + 'graph_contains_cycle' => 'Otomasyon grafiği bir döngü içeriyor.', + 'only_failed_can_retry' => 'Yalnızca başarısız çalıştırmalar yeniden denenebilir.', + 'no_generated_post' => 'Çalıştırmada oluşturulmuş gönderi bulunamadı.', + 'webhook_server_error' => 'Webhook sunucu hatası.', + 'webhook_request_failed' => 'Webhook isteği tamamlanamadı.', + 'webhook_missing_url' => 'Webhook düğümünde URL eksik.', + 'webhook_invalid_payload_json' => 'Yük şablonu geçerli JSON değil.', + 'url_not_allowed' => 'İstek URL\'si özel veya erişilemez bir adrese işaret ediyor ve engellendi.', + 'node_no_longer_exists' => ':node_id düğümü artık otomasyonda yok.', + 'no_trigger_connection' => 'Tetikleyici düğümüne bağlı düğüm yok.', + 'fetch_rss_missing_url' => 'RSS Getir düğümünde besleme URL\'si eksik.', + 'fetch_rss_request_failed' => 'RSS besleme isteği başarısız oldu.', + 'fetch_rss_malformed' => 'RSS beslemesi bozuk.', + 'http_missing_url' => 'HTTP istek düğümünde URL eksik.', + 'http_request_exception' => 'HTTP isteği bir istisna oluşturdu.', + 'http_request_failed' => 'HTTP isteği başarısız oldu.', + 'http_items_path_not_array' => 'Öğe yolu bir listeye çözümlenmedi.', + ], +]; diff --git a/lang/tr/billing.php b/lang/tr/billing.php new file mode 100644 index 00000000..e50e6556 --- /dev/null +++ b/lang/tr/billing.php @@ -0,0 +1,78 @@ + 'Faturalandırma', + + 'past_due_notice' => [ + 'title' => 'Ödeme gecikmiş', + 'description' => 'Aboneliğinizi etkin tutmak için ödeme yönteminizi güncelleyin.', + 'cta' => 'Ödemeyi güncelle', + ], + + 'annual_banner' => [ + 'title' => '2 ay ücretsiz kazanın', + 'description' => 'Yıllık faturalandırmaya geçin ve her ay daha az ödeyin — aynı plan, başka hiçbir şey değişmez.', + 'cta' => 'Yıllığa yükselt', + ], + + 'subscribe' => [ + 'billed_monthly' => 'Aylık faturalandırılır', + 'billed_yearly' => 'Yıllık faturalandırılır', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => 'Plan', + 'description' => 'Abonelik planınızı yönetin.', + 'label' => 'Plan', + 'workspaces' => '{1}:count çalışma alanı|[2,*]:count çalışma alanı', + 'per_workspace' => 'çalışma alanı başına', + 'price' => 'Fiyat', + 'month' => 'ay', + 'trial' => 'Deneme', + 'active' => 'Etkin', + 'past_due' => 'Gecikmiş', + 'cancelling' => 'İptal ediliyor', + 'trial_ends' => 'Deneme bitişi', + ], + + 'subscription' => [ + 'title' => 'Abonelik', + 'description' => 'Ödeme yönteminizi, faturalandırma bilgilerinizi ve aboneliğinizi yönetin.', + 'payment_method' => 'Ödeme yöntemi', + 'no_payment_method' => 'Henüz kayıtlı ödeme yöntemi yok.', + 'expires_on' => 'Son kullanma: :month/:year', + 'manage_label' => 'Abonelik', + 'manage_stripe' => 'Stripe\'ta yönet', + ], + + 'invoices' => [ + 'title' => 'Faturalar', + 'description' => 'Geçmiş faturalarınızı indirin.', + 'empty' => 'Fatura bulunamadı', + 'paid' => 'Ödendi', + ], + + 'flash' => [ + 'plan_changed' => 'Artık :plan planındasınız.', + 'switched_to_yearly' => 'Artık yıllık faturalandırmadasınız.', + 'cannot_manage' => 'Faturalandırmayı yalnızca hesap sahibi yönetebilir.', + 'credits_exhausted' => 'AI kredileriniz bitti — aylık :limit hakkınız kullanıldı. Planınızı yükseltin veya gelecek ayı bekleyin.', + 'subscription_required' => 'AI özelliklerini kullanmak için etkin bir abonelik gereklidir.', + ], + + 'processing' => [ + 'page_title' => 'İşleniyor...', + 'title' => 'Aboneliğiniz işleniyor', + 'description' => 'Hesabınızı ayarlarken lütfen bekleyin. Bu yalnızca bir an sürecek.', + 'success_title' => 'Her şey hazır!', + 'success_description' => 'Aboneliğiniz etkin. Çalışma alanlarınıza yönlendiriliyorsunuz...', + 'cancelled_title' => 'Ödeme iptal edildi', + 'cancelled_description' => 'Ödemeniz iptal edildi. Herhangi bir ücret alınmadı.', + 'retry' => 'Tekrar dene', + ], +]; diff --git a/lang/tr/brands.php b/lang/tr/brands.php new file mode 100644 index 00000000..3bb7a582 --- /dev/null +++ b/lang/tr/brands.php @@ -0,0 +1,41 @@ + 'Yeni Marka', + 'no_brands_yet' => 'Henüz marka yok', + 'no_brands_description' => 'Sosyal hesaplarınızı müşteriye veya projeye göre düzenlemek için marka oluşturun', + 'accounts_count' => ':count hesap', + + 'create' => [ + 'title' => 'Marka Oluştur', + 'description' => 'Sosyal hesapları gruplamak için markanıza bir ad verin', + 'name' => 'Marka Adı', + 'name_placeholder' => 'örn. Acme Corp, Kişisel', + 'submit' => 'Marka Oluştur', + 'submitting' => 'Oluşturuluyor...', + ], + + 'edit' => [ + 'title' => 'Markayı Düzenle', + 'description' => 'Bu markanın adını güncelleyin', + 'name' => 'Marka Adı', + 'name_placeholder' => 'örn. Acme Corp, Kişisel', + 'submit' => 'Değişiklikleri Kaydet', + 'submitting' => 'Kaydediliyor...', + ], + + 'delete' => [ + 'title' => 'Markayı Sil', + 'description' => 'Bu markayı silmek istediğinizden emin misiniz? Sosyal hesapların atamaları kaldırılacak ancak silinmeyecek.', + 'confirm' => 'Sil', + 'cancel' => 'İptal', + ], + + 'flash' => [ + 'created' => 'Marka başarıyla oluşturuldu!', + 'updated' => 'Marka başarıyla güncellendi!', + 'deleted' => 'Marka başarıyla silindi!', + ], +]; diff --git a/lang/tr/calendar.php b/lang/tr/calendar.php new file mode 100644 index 00000000..eb65798c --- /dev/null +++ b/lang/tr/calendar.php @@ -0,0 +1,14 @@ + 'Takvim', + 'today' => 'Bugün', + 'day' => 'Gün', + 'week' => 'Hafta', + 'month' => 'Ay', + 'new_post' => 'Yeni Gönderi', + 'no_content' => 'İçerik yok', + 'more' => '+:count daha', +]; diff --git a/lang/tr/comments.php b/lang/tr/comments.php new file mode 100644 index 00000000..d1ff0107 --- /dev/null +++ b/lang/tr/comments.php @@ -0,0 +1,20 @@ + 'Bir yorum yazın...', + 'reply_placeholder' => 'Bir yanıt yazın...', + 'reply' => 'Yanıtla', + 'edit' => 'Düzenle', + 'delete' => 'Sil', + 'edited' => 'düzenlendi', + 'save' => 'Kaydet', + 'cancel' => 'İptal', + 'send' => 'Gönder', + 'replying_to' => ':name adlı kişiye yanıt veriliyor', + 'empty' => 'Henüz yorum yok. Sohbeti başlatın.', + 'load_more' => 'Daha eski yorumları yükle', + 'today' => 'Bugün', + 'yesterday' => 'Dün', +]; diff --git a/lang/tr/common.php b/lang/tr/common.php new file mode 100644 index 00000000..64bb4c46 --- /dev/null +++ b/lang/tr/common.php @@ -0,0 +1,59 @@ + 'Geri', + + 'confirm_modal' => [ + 'cannot_be_undone' => 'Bu işlem geri alınamaz.', + 'type' => 'Yazın:', + 'to_confirm' => 'onaylamak için.', + 'copy_to_clipboard' => 'Panoya kopyala', + 'delete_keyword' => 'sil', + ], + + 'photo_upload' => [ + 'upload' => 'Yükle', + 'uploading' => 'Yükleniyor...', + 'remove' => 'Fotoğrafı kaldır', + 'hint' => 'Önerilen: kare görsel, en fazla 2 MB.', + ], + + 'timezone' => [ + 'select' => 'Saat dilimi seç', + 'search' => 'Saat dilimi ara...', + 'empty' => 'Saat dilimi bulunamadı', + ], + + 'date_picker' => [ + 'select' => 'Tarih seç', + ], + + 'date_range_picker' => [ + 'placeholder' => 'Bir tarih aralığı seçin', + 'today' => 'Bugün', + 'yesterday' => 'Dün', + 'last_7_days' => 'Son 7 gün', + 'last_30_days' => 'Son 30 gün', + 'last_3_months' => 'Son 3 ay', + 'last_6_months' => 'Son 6 ay', + 'last_12_months' => 'Son 12 ay', + 'this_month' => 'Bu ay', + 'last_month' => 'Geçen ay', + 'year_to_date' => 'Yıl başından bugüne', + 'last_year' => 'Geçen yıl', + ], + + 'cancel' => 'İptal', + 'clear' => 'Temizle', + 'close' => 'Kapat', + 'loading_more' => 'Daha fazla yükleniyor...', + + 'actions' => [ + 'copy' => 'Kopyala', + 'copied' => 'Kopyalandı', + 'copy_failed' => 'Panoya kopyalanamadı', + ], +]; diff --git a/lang/tr/labels.php b/lang/tr/labels.php new file mode 100644 index 00000000..b211875d --- /dev/null +++ b/lang/tr/labels.php @@ -0,0 +1,56 @@ + 'Etiketler', + 'description' => 'Gönderilerinizi düzenlemek ve kategorilere ayırmak için etiketler oluşturun', + 'search' => 'Etiket ara...', + 'new_label' => 'Yeni Etiket', + 'no_labels_yet' => 'Henüz etiket yok', + 'no_search_results' => 'Aramanızla eşleşen etiket yok', + 'try_different_search' => 'Farklı bir anahtar kelime deneyin veya aramayı temizleyin.', + 'create_first_label' => 'İlk etiketinizi oluşturun', + 'table' => [ + 'name' => 'Ad', + 'created_at' => 'Oluşturuldu', + ], + + 'actions' => [ + 'edit' => 'Etiketi düzenle', + 'delete' => 'Etiketi sil', + ], + + 'create' => [ + 'title' => 'Etiket Oluştur', + 'description' => 'Etiketinize bir ad verin ve bir renk seçin', + 'name' => 'Ad', + 'name_placeholder' => 'Etiket adını girin...', + 'color' => 'Renk', + 'submit' => 'Etiket Oluştur', + 'submitting' => 'Oluşturuluyor...', + ], + + 'edit' => [ + 'title' => 'Etiketi Düzenle', + 'description' => 'Bu etiketin adını ve rengini güncelleyin', + 'name' => 'Ad', + 'name_placeholder' => 'Etiket adını girin...', + 'color' => 'Renk', + 'submit' => 'Değişiklikleri Kaydet', + 'submitting' => 'Kaydediliyor...', + ], + + 'delete' => [ + 'title' => 'Etiketi Sil', + 'description' => 'Bu etiketi silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.', + 'confirm' => 'Sil', + 'cancel' => 'İptal', + ], + + 'flash' => [ + 'created' => 'Etiket başarıyla oluşturuldu!', + 'updated' => 'Etiket başarıyla güncellendi!', + 'deleted' => 'Etiket başarıyla silindi!', + ], +]; diff --git a/lang/tr/mail.php b/lang/tr/mail.php new file mode 100644 index 00000000..8805d1db --- /dev/null +++ b/lang/tr/mail.php @@ -0,0 +1,24 @@ + [ + 'subject' => ':name sizden TryPost\'ta bahsetti', + 'title' => ':name sizden bahsetti', + 'intro' => ':name bir gönderi yorumunda sizden bahsetti.', + 'cta' => 'Yorumu görüntüle', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :workspace çalışma alanında :count hesabın yeniden bağlanması gerekiyor|[2,*] :workspace çalışma alanında :count hesabın yeniden bağlanması gerekiyor', + 'title' => 'Hesapların Yeniden Bağlanması Gerekiyor', + 'intro' => ':workspace çalışma alanınızdaki aşağıdaki sosyal hesapların bağlantısı kesildi ve yeniden bağlanması gerekiyor:', + 'reasons_title' => 'Bu şu nedenlerle olmuş olabilir:', + 'reason_expired' => 'Erişim tokenlarının süresi doldu', + 'reason_revoked' => 'Platformda TryPost erişimini iptal ettiniz', + 'reason_changed' => 'Platform kimlik doğrulama gereksinimlerini değiştirdi', + 'reconnect_cta' => 'Gönderi zamanlamaya ve yayınlamaya devam etmek için lütfen bu hesapları yeniden bağlayın.', + 'button' => 'Hesapları Yeniden Bağla', + ], +]; diff --git a/lang/tr/notifications.php b/lang/tr/notifications.php new file mode 100644 index 00000000..94ca6b1b --- /dev/null +++ b/lang/tr/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => 'Gönderiniz hazır', + 'body' => 'AI az önce bitirdi. İncelemek ve yayınlamak için dokunun.', + ], + 'account_disconnected' => [ + 'title' => ':platform hesabının bağlantısı kesildi', + 'body' => ':account yeniden bağlanmalı', + ], + 'account_token_expired' => [ + 'title' => ':platform hesabının yeniden bağlanması gerekiyor', + 'body' => ':account oturumunun süresi doldu — paylaşıma devam etmek için lütfen yeniden bağlanın', + ], +]; diff --git a/lang/tr/onboarding.php b/lang/tr/onboarding.php new file mode 100644 index 00000000..93afaae7 --- /dev/null +++ b/lang/tr/onboarding.php @@ -0,0 +1,41 @@ + 'TryPost\'a hoş geldiniz', + 'description' => 'Deneyiminizi kişiselleştirebilmemiz için sizi veya işinizi en iyi tanımlayan seçeneği belirtin.', + 'continue' => 'Devam et', + 'personas' => [ + 'creator' => 'İçerik üreticisi', + 'freelancer' => 'Serbest çalışan', + 'developer' => 'Geliştirici', + 'startup' => 'Girişim', + 'agency' => 'Ajans', + 'small_business' => 'Küçük işletme', + 'marketer' => 'Pazarlamacı', + 'online_store' => 'Çevrimiçi mağaza', + 'other' => 'Diğer', + ], + 'goals_title' => 'TryPost ile hedefiniz nedir?', + 'goals_description' => 'Size uyan her şeyi seçin, biz de TryPost\'u sizin için ayarlayalım.', + 'goals' => [ + 'save_time' => 'Her yere aynı anda paylaşarak zaman kazanmak', + 'ai_content' => 'AI ile daha hızlı gönderi oluşturmak', + 'plan_calendar' => 'Gönderilerimi bir takvimde planlamak', + 'stay_on_brand' => 'Her gönderiyi marka çizgisinde tutmak', + 'grow_audience' => 'Kitlemi ve etkileşimimi büyütmek', + 'drive_sales' => 'Daha fazla trafik ve satış elde etmek', + 'manage_clients' => 'Birden fazla marka veya müşteri yönetmek', + 'team_collaboration' => 'Ekibimle çalışmak', + 'automate_api' => 'API, MCP veya kodla paylaşımı otomatikleştirmek', + 'track_performance' => 'Gönderilerimin performansını görmek', + 'just_exploring' => 'Şimdilik sadece keşfetmek', + 'other' => 'Başka bir şey', + ], + 'connect' => [ + 'title' => 'İlk ağınızı bağlayın', + 'description' => 'Zamanlamaya başlamak için en az bir sosyal hesap bağlayın. İstediğiniz zaman daha fazlasını ekleyebilirsiniz.', + 'must_connect' => 'Devam etmek için en az bir ağ bağlayın.', + ], +]; diff --git a/lang/tr/pagination.php b/lang/tr/pagination.php new file mode 100644 index 00000000..181d90e3 --- /dev/null +++ b/lang/tr/pagination.php @@ -0,0 +1,21 @@ + '« Önceki', + 'next' => 'Sonraki »', + +]; diff --git a/lang/tr/passwords.php b/lang/tr/passwords.php new file mode 100644 index 00000000..bf1e1de9 --- /dev/null +++ b/lang/tr/passwords.php @@ -0,0 +1,24 @@ + 'Parolanız sıfırlandı.', + 'sent' => 'Parola sıfırlama bağlantınızı e-postayla gönderdik.', + 'throttled' => 'Yeniden denemeden önce lütfen bekleyin.', + 'token' => 'Bu parola sıfırlama tokenı geçersiz.', + 'user' => 'Bu e-posta adresine sahip bir kullanıcı bulamıyoruz.', + +]; diff --git a/lang/tr/posts.php b/lang/tr/posts.php new file mode 100644 index 00000000..8457a4ab --- /dev/null +++ b/lang/tr/posts.php @@ -0,0 +1,673 @@ + 'Gönderiler', + 'search' => 'Gönderi ara...', + 'all_posts' => 'Tüm Gönderiler', + 'new_post' => 'Yeni Gönderi', + 'no_posts' => 'Gönderi bulunamadı', + 'no_search_results' => 'Aramanızla eşleşen gönderi yok', + 'try_different_search' => 'Farklı bir anahtar kelime deneyin veya aramayı temizleyin.', + 'start_creating' => 'İlk gönderinizi oluşturarak başlayın.', + 'filter_by_label' => 'Etikete göre filtrele', + 'label_search_placeholder' => 'Etiket ara...', + 'no_labels' => 'Etiket bulunamadı.', + 'clear_label_filter' => 'Etiket filtresini temizle', + 'table' => [ + 'post' => 'Gönderi', + 'status' => 'Durum', + 'content' => 'İçerik', + 'platforms' => 'Platformlar', + 'labels' => 'Etiketler', + 'scheduled_at' => 'Tarih', + 'actions' => '', + ], + 'manage_posts' => 'Tüm gönderilerinizi yönetin', + 'delete_confirm' => 'Bu gönderiyi silmek istediğinizden emin misiniz?', + 'by' => 'gönderen', + + 'actions' => [ + 'view' => 'Gönderiyi görüntüle', + 'delete' => 'Sil', + 'duplicate' => 'Çoğalt', + 'copy_id' => 'Kimliği kopyala', + 'copied' => 'Kimlik panoya kopyalandı', + ], + + 'form' => [ + 'post_type' => 'Gönderi Türü', + 'board' => 'Pano', + 'select_board' => 'Bir pano seçin', + 'search_board' => 'Pano ara...', + 'no_board_found' => 'Pano bulunamadı', + 'media' => 'Medya', + 'min' => 'En az', + 'uploading' => 'Yükleniyor...', + 'drop_to_upload' => 'Yüklemek için bırakın', + 'drag_and_drop' => 'Sürükleyip bırakın veya yüklemek için tıklayın', + 'photos_and_videos' => 'Fotoğraflar ve videolar', + 'photos_only' => 'Yalnızca fotoğraflar', + 'videos_only' => 'Yalnızca videolar', + 'drag_to_reorder' => 'Yeniden sıralamak için sürükleyin', + 'caption' => 'Açıklama', + 'write_caption' => 'Açıklamanızı yazın...', + 'content_exceeds_platform' => ':platform: :over karakter fazla (en fazla :limit).', + 'tiktok' => [ + 'settings' => 'TikTok Ayarları', + 'variant_label' => 'Gönderi türü', + 'variant' => [ + 'video' => 'Video', + 'photo' => 'Fotoğraf karuseli', + ], + 'posting_to' => 'Şuraya paylaşılıyor', + 'privacy_level' => 'Bu videoyu kim görebilir?', + 'privacy_placeholder' => 'Bu gönderiyi kimin görebileceğini seçin', + 'privacy' => [ + 'public' => 'Herkese açık', + 'friends' => 'Karşılıklı takipleşilen arkadaşlar', + 'followers' => 'Takipçiler', + 'private' => 'Yalnızca ben', + 'private_disabled_branded' => 'Markalı içerik görünürlüğü özel olarak ayarlanamaz.', + ], + 'privacy_hint' => 'Mevcut seçenekler TikTok hesap ayarlarınıza bağlıdır.', + 'auto_add_music' => 'Otomatik müzik ekle', + 'auto_add_music_hint' => 'Bu özellik yalnızca fotoğraflar için kullanılabilir. Daha sonra değiştirebileceğiniz varsayılan bir müzik ekler.', + 'yes' => 'Evet', + 'no' => 'Hayır', + 'allow_users' => 'Kullanıcıların şunlara izin ver:', + 'comments' => 'Yorum yapma', + 'duet' => 'Düet', + 'stitch' => 'Birleştirme (Stitch)', + 'is_aigc' => 'AI ile yapılan video', + 'disclose' => 'Video içeriğini beyan et', + 'disclose_hint' => 'Bu videonun bir değer karşılığında ürün veya hizmet tanıttığını beyan etmek için açın. Videonuz sizi, üçüncü bir tarafı veya her ikisini de tanıtabilir.', + 'promotional_organic_title' => 'Fotoğrafınız/videonuz "Tanıtım içeriği" olarak etiketlenecek.', + 'promotional_paid_title' => 'Fotoğrafınız/videonuz "Ücretli ortaklık" olarak etiketlenecek.', + 'promotional_description' => 'Bu, videonuz paylaşıldıktan sonra değiştirilemez.', + 'compliance_incomplete' => 'İçeriğinizin sizi mi, üçüncü bir tarafı mı yoksa her ikisini mi tanıttığını belirtmeniz gerekir.', + 'privacy_required' => 'Yayınlarken TikTok gizlilik düzeyi gereklidir.', + 'branded_cleared_private' => 'Markalı İçerik özel olamayacağı için gizlilik temizlendi.', + 'interaction_disabled_by_creator' => 'TikTok hesap ayarlarınızda kapalı', + 'max_duration_exceeded' => 'Video :duration sn uzunluğunda ancak bu hesap yalnızca :max sn\'ye kadar video paylaşabilir.', + 'processing_hint' => 'Yayınladıktan sonra, içeriğin işlenip TikTok profilinizde görünmesi birkaç dakika sürebilir.', + 'brand_organic' => 'Markanız', + 'brand_organic_hint' => 'Kendinizi veya kendi markanızı tanıtıyorsunuz. Bu video Marka Organik olarak sınıflandırılacak.', + 'brand_content' => 'Markalı içerik', + 'brand_content_hint' => 'Başka bir markayı veya üçüncü bir tarafı tanıtıyorsunuz. Bu video Markalı İçerik olarak sınıflandırılacak.', + 'compliance' => [ + 'agree' => 'Paylaşarak, TikTok\'un şunlarını kabul etmiş olursunuz:', + 'music_usage' => 'Müzik Kullanım Onayı', + 'and' => 've', + 'branded_policy' => 'Markalı İçerik Politikası', + ], + ], + 'instagram' => [ + 'settings' => 'Instagram Ayarları', + 'posting_to' => 'Şuraya paylaşılıyor', + 'variant_label' => 'Gönderi türü', + 'variant' => [ + 'feed' => 'Akış Gönderisi', + 'reel' => 'Reel', + 'story' => 'Hikaye', + ], + 'aspect_label' => 'En boy oranı', + 'aspect' => [ + 'square' => 'Kare (1:1)', + 'portrait' => 'Dikey (4:5)', + 'landscape' => 'Yatay (16:9)', + 'original' => 'Orijinal', + ], + ], + 'facebook' => [ + 'settings' => 'Facebook Ayarları', + 'posting_to' => 'Şuraya paylaşılıyor', + 'variant_label' => 'Gönderi türü', + 'variant' => [ + 'post' => 'Gönderi', + 'reel' => 'Reel', + 'story' => 'Hikaye', + ], + 'aspect_label' => 'En boy oranı', + 'aspect' => [ + 'square' => 'Kare (1:1)', + 'portrait' => 'Dikey (4:5)', + 'landscape' => 'Yatay (16:9)', + 'original' => 'Orijinal', + ], + ], + 'linkedin' => [ + 'settings' => 'LinkedIn Ayarları', + 'settings_page' => 'LinkedIn Sayfa Ayarları', + 'posting_to' => 'Şuraya paylaşılıyor', + 'document_title' => 'Belge başlığı', + 'document_title_placeholder' => 'PDF belge gönderinizde gösterilir', + ], + 'pinterest' => [ + 'settings' => 'Pinterest Ayarları', + 'posting_to' => 'Şuraya paylaşılıyor', + 'variant_label' => 'Pin türü', + 'variant' => [ + 'pin' => 'Pin', + 'video_pin' => 'Video Pin', + 'carousel' => 'Karusel', + ], + 'board' => 'Pano', + 'select_board' => 'Bir pano seçin', + 'no_boards' => 'Pinterest panosu bulunamadı. Önce Pinterest hesabınızda bir tane oluşturun.', + 'search_board' => 'Pano ara...', + 'no_board_found' => 'Aramanızla eşleşen pano yok.', + 'board_required' => 'Bu gönderiyi yayınlamak için bir Pinterest panosu seçin.', + ], + 'discord' => [ + 'settings' => 'Discord Ayarları', + 'posting_to' => 'Şuraya paylaşılıyor', + 'channel' => 'Kanal', + 'select_channel' => 'Bir kanal seçin', + 'loading_channels' => 'Kanallar yükleniyor…', + 'search_channel' => 'Kanal ara…', + 'no_channels' => 'Kanal bulunamadı.', + 'channel_required' => 'Bu gönderiyi yayınlamak için bir Discord kanalı seçin.', + 'mentions' => 'Etiketlemeler', + 'search_mention' => 'Bir rolü veya üyeyi etiketle…', + 'embeds' => 'Yerleştirmeler', + 'embed' => 'Yerleştirme', + 'add_embed' => 'Yerleştirme ekle', + 'embed_title' => 'Yerleştirme başlığı', + 'embed_description' => 'Yerleştirme açıklaması', + 'embed_url' => 'Yerleştirme URL\'si', + 'embed_image' => 'Görsel URL\'si', + 'embed_color' => 'Renk', + ], + 'warnings' => [ + 'no_variant' => 'Devam etmek için bir gönderi türü seçin.', + 'requires_media' => 'Bu gönderi türü en az bir görsel veya video gerektirir.', + 'max_files_exceeded' => 'Bu gönderi türü en fazla :max medya dosyası kabul eder (sizde :current var).', + 'min_files_required' => 'Bu gönderi türü en az :min medya dosyası gerektirir (sizde :current var).', + 'no_video_allowed' => 'Bu gönderi türü video kabul etmez.', + 'no_image_allowed' => 'Bu gönderi türü yalnızca video kabul eder.', + 'no_document_allowed' => 'Bu gönderi türü PDF belge kabul etmez.', + 'no_mixed_media' => 'Görseller ve bir video aynı gönderide birleştirilemez.', + 'document_not_alone' => 'Bir PDF, başka görsel veya video olmadan tek başına paylaşılmalıdır.', + 'gif_not_allowed' => 'Bu platform GIF kabul etmez. GIF\'i kaldırın veya farklı bir ağ seçin.', + 'image_too_large' => 'Görsel, bu gönderi türü için :max sınırını aşıyor (sizinki :current).', + 'video_too_large' => 'Video, bu gönderi türü için :max sınırını aşıyor (sizinki :current).', + 'document_too_large' => 'PDF, bu gönderi türü için :max sınırını aşıyor (sizinki :current).', + 'video_too_long' => 'Video :current uzunluğunda ancak bu gönderi türü en fazla :max izin verir.', + 'aspect_ratio_too_narrow' => ':current en boy oranı bu gönderi türü için fazla uzun (en az :min).', + 'aspect_ratio_too_wide' => ':current en boy oranı bu gönderi türü için fazla geniş (en fazla :max).', + ], + ], + + 'status' => [ + 'pending' => 'Beklemede', + 'draft' => 'Taslak', + 'scheduled' => 'Zamanlandı', + 'publishing' => 'Yayınlanıyor', + 'retrying' => 'Yeniden deneniyor', + 'published' => 'Yayınlandı', + 'partially_published' => 'Kısmen Yayınlandı', + 'failed' => 'Başarısız', + ], + + 'descriptions' => [ + 'draft' => 'Zamanlanmayı bekleyen gönderiler', + 'scheduled' => 'Yayınlanmak üzere zamanlanan gönderiler', + 'published' => 'Zaten yayınlanmış gönderiler', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => 'AI ile oluştur', + 'title' => 'AI ile gönderi oluştur', + 'description' => 'Gönderinin ne hakkında olması gerektiğini açıklayın. AI, onu yazmak için marka bağlamınızı kullanacak.', + 'prompt_label' => 'Bu gönderi ne hakkında?', + 'prompt_placeholder' => 'örn. Karuseller için yeni görsel oluşturma özelliğimizi duyur', + 'preview_label' => 'Önizleme', + 'start' => 'Oluştur', + 'apply' => 'Bu içeriği kullan', + 'retry' => 'Tekrar dene', + 'cancel' => 'İptal', + ], + 'review' => [ + 'button_tooltip' => 'AI ile incele', + 'title' => 'AI ile gönderiyi incele', + 'description' => 'AI dil bilgisi, yazım ve açıklık açısından tarar. Katıldığınız önerileri uygulayın.', + 'loading' => 'Metniniz inceleniyor...', + 'no_issues' => 'Sorun bulunamadı. İyi görünüyor.', + 'original' => 'Orijinal', + 'suggestion' => 'Öneri', + 'apply' => 'Uygula', + 'apply_all' => 'Tümünü uygula', + 'applied' => 'Uygulandı', + 'cancel' => 'İptal', + ], + 'image_regenerate' => [ + 'button' => 'Ayarla', + 'title' => 'AI görselini ayarla', + 'description' => 'Düzeltmeyi açıklayın. Yeni görsel mevcut olanın yerini alır ve karuseldeki konumunu korur.', + 'instruction_label' => 'Talimat', + 'instruction_placeholder' => 'örn. Başlıktaki yazım hatasını düzelt ve arka planı daha aydınlık yap.', + 'processing' => 'Görsel yeniden oluşturuluyor... bu birkaç saniye sürebilir.', + 'submit' => 'Görseli yeniden oluştur', + 'cancel' => 'İptal', + 'success' => 'Görsel güncellendi. Yeni sürüm, gönderinizde öncekinin yerini aldı.', + 'fallback_title' => 'Bu görsel metnini iyileştir', + 'errors' => [ + 'required' => 'Talimat gereklidir.', + 'start_failed' => 'Yeniden oluşturma başlatılamadı.', + 'unavailable' => 'Şu anda bu görsel yeniden oluşturulamıyor.', + 'timeout' => 'Yeniden oluşturma beklenenden uzun sürüyor. Birazdan tekrar deneyin.', + 'media_not_found' => 'Medya öğesi bulunamadı.', + 'not_ai_media' => 'Yalnızca AI ile oluşturulan medya yeniden oluşturulabilir.', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => 'Görsel gönderisi', + 'description' => 'Başlık ve açıklama içeren AI görseli.', + ], + 'carousel' => [ + 'name' => 'Karusel', + 'description' => 'Açıklamalı çok slaytlı karusel.', + ], + 'tweet_card' => [ + 'name' => 'Tweet kartı', + 'description' => 'X/Twitter gönderisi biçiminde gönderiniz.', + ], + 'tweet_card_image' => [ + 'name' => 'Fotoğraflı tweet kartı', + 'description' => 'Bulanık bir fotoğrafın üzerinde X/Twitter kartı olarak gönderiniz.', + ], + ], + ], + + 'show' => [ + 'title' => 'Gönderi Ayrıntıları', + 'edit' => 'Düzenle', + 'back' => 'Geri', + 'no_content' => 'Açıklama yok', + 'platforms' => 'Platformlar', + 'no_platforms' => 'Platform seçilmedi.', + 'view_on_platform' => 'Platformda görüntüle', + 'published_on' => ':date tarihinde yayınlandı', + 'scheduled_for' => ':date için zamanlandı', + 'draft' => 'Taslak', + 'status_pending' => 'Beklemede', + 'metrics' => 'Metrikler', + 'metrics_loading' => 'Metrikler yükleniyor…', + 'metrics_unavailable' => 'Bu platform için metrikler henüz kullanılamıyor.', + 'metrics_empty' => 'Metrik döndürülmedi.', + ], + + 'edit' => [ + 'title' => 'Gönderiyi Düzenle', + 'view_title' => 'Gönderiyi Görüntüle', + 'labels' => 'Etiketler', + 'no_labels' => 'Henüz etiket oluşturulmadı', + 'schedule' => 'Zamanla', + 'pick_time' => 'Saat seç', + 'pick_time_past' => 'Gelecek bir tarih ve saat seçin.', + 'post_now' => 'Şimdi paylaş', + 'time' => 'Saat', + 'cancel' => 'İptal', + 'delete' => 'Sil', + 'schedule_for' => 'Şunun için zamanla', + 'schedule_date' => 'Zamanlama tarihi', + 'unschedule' => 'Zamanlamayı kaldır', + 'saving' => 'Kaydediliyor...', + 'saved' => 'Kaydedildi', + 'draft' => 'Taslak', + 'media' => 'Medya', + 'add_media' => 'Medya ekle', + 'caption' => 'Açıklama', + 'caption_placeholder' => 'Açıklamanızı yazın...', + 'compose_title' => 'Bir gönderi oluşturun', + 'compose_subtitle' => 'Mesajınızı yazın ve medya ekleyin', + 'preview_empty' => [ + 'title' => 'Platform seçilmedi', + 'description' => 'Önizlemeyi görmek için yayınlanacak bir platform seçin.', + ], + 'drop_zone_title' => 'Medya ekle', + 'drop_zone_subtitle' => 'Dosyaları sürükleyip bırakın veya göz atmak için tıklayın', + 'add' => 'Ekle', + 'publish_to' => 'Şuraya yayınla', + 'organize' => 'Düzenle', + 'signatures' => 'İmzalar', + 'view_on_platform' => 'Platformda görüntüle', + 'platform_status' => 'Platform durumu', + 'compliance_incomplete' => 'Bazı platform ayarları eksik veya eklenen medyayla uyumsuz.', + 'compliance' => [ + 'requires_content_or_media' => 'Yayınlamak için metin veya medya ekleyin.', + 'requires_media' => 'Burada yayınlamak için bir görsel veya video ekleyin.', + 'too_many_files' => 'Bu format için yalnızca :max dosyaya izin verilir.', + 'too_few_files' => 'Bu format için en az :min dosya ekleyin.', + 'no_videos' => 'Bu format için yalnızca görsellere izin verilir.', + 'no_images' => 'Bu format için yalnızca videolara izin verilir.', + 'no_mixed_media' => 'Görseller ve videolar aynı gönderide birleştirilemez.', + 'no_gifs' => 'Burada GIF desteklenmez.', + 'no_documents' => 'PDF belgeler bu format tarafından desteklenmez.', + 'document_not_alone' => 'Bir PDF, başka görsel veya video olmadan tek başına paylaşılmalıdır.', + 'video_too_large' => 'Video, bu platformun boyut sınırını aşıyor.', + 'video_too_long' => 'Video bu format için :seconds saniyenin altında olmalıdır.', + 'image_too_large' => 'Görsel, bu platformun boyut sınırını aşıyor.', + 'document_too_large' => 'PDF, bu platformun boyut sınırını aşıyor.', + 'aspect_ratio_invalid' => 'En boy oranı bu format tarafından desteklenmez.', + 'no_content_type' => 'Bu platform için bir içerik türü seçin.', + 'requires_text' => 'Metin ekleyin — bu format bir başlık gerektiriyor.', + ], + 'publishing' => 'Yayınlanıyor...', + 'publishing_overlay_title' => 'Gönderiniz yayınlanıyor', + 'publishing_overlay_subtitle' => 'Bu birkaç dakika sürebilir. Bu sayfadan güvenle ayrılabilirsiniz.', + 'scheduled_overlay_title' => 'Bu gönderi zamanlandı', + 'scheduled_overlay_subtitle' => ':date için zamanlandı. Değişiklik yapmak için önce zamanlamayı kaldırın.', + 'unschedule_cta' => 'Düzenlemek için zamanlamayı kaldır', + + 'tabs' => [ + 'preview' => 'Önizleme', + 'channels' => 'Kanallar', + 'comments' => 'Yorumlar', + 'comments_empty' => 'Henüz yorum yok.', + ], + + 'media_picker' => [ + 'title' => 'Galeriden seç', + 'search' => 'Medya ara...', + 'empty' => 'Galerinizde henüz medya yok', + 'cancel' => 'İptal', + 'add' => 'Ekle', + 'add_count' => ':count tane ekle', + ], + + 'emoji_picker' => [ + 'search' => 'Emoji ara', + 'empty' => 'Emoji bulunamadı', + 'recent' => 'Sık kullanılanlar', + 'smileys' => 'İfadeler ve duygular', + 'people' => 'İnsanlar ve beden', + 'nature' => 'Hayvanlar ve doğa', + 'food' => 'Yiyecek ve içecek', + 'activities' => 'Etkinlikler', + 'travel' => 'Seyahat ve yerler', + 'objects' => 'Nesneler', + 'symbols' => 'Semboller', + 'flags' => 'Bayraklar', + ], + + 'status' => [ + 'pending' => 'Beklemede', + 'scheduled' => 'Zamanlandı', + 'published' => 'Yayınlandı', + 'publishing' => 'Yayınlanıyor...', + 'retrying' => 'Yeniden deneniyor...', + 'failed' => 'Başarısız', + ], + + 'delete_modal' => [ + 'title' => 'Gönderiyi Sil', + 'description' => 'Bu gönderiyi silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.', + 'action' => 'Sil', + 'cancel' => 'İptal', + ], + + 'sync_enable' => [ + 'title' => 'Senkronizasyon etkinleştirilsin mi?', + 'description' => 'Tüm platformlar aynı içeriği paylaşacak. Tek tek platformlara yapılan özel düzenlemeler mevcut içerikle değiştirilecek.', + 'cancel' => 'İptal', + 'action' => 'Senkronizasyonu etkinleştir', + ], + + 'sync_disable' => [ + 'title' => 'Senkronizasyon devre dışı bırakılsın mı?', + 'description' => 'Her platform mevcut içeriğini koruyacak, ancak gelecekteki düzenlemeler yalnızca düzenlediğiniz platforma uygulanacak.', + 'customize_note' => 'İçeriği her platform için ayrı ayrı özelleştirebileceksiniz.', + 'cancel' => 'İptal', + 'action' => 'Senkronizasyonu devre dışı bırak', + ], + + 'platforms_dialog' => [ + 'title' => 'Platformları Seç', + 'description' => 'Bu gönderinin hangi platformlarda yayınlanacağını seçin.', + ], + + 'signatures_modal' => [ + 'search' => 'İmza ara...', + 'no_results' => 'İmza bulunamadı.', + ], + + 'validation' => [ + 'select_board' => 'Bir pano seçin', + 'images_not_supported' => 'Görseller desteklenmiyor', + 'videos_not_supported' => 'Videolar desteklenmiyor', + 'max_images' => 'En fazla :count görsel', + 'requires_media' => 'Medya gerekli', + 'requires_content' => 'Metin içeriği gereklidir', + 'exceeded' => ':count aşıldı', + 'does_not_support_images' => ':platform görselleri desteklemiyor', + 'supports_up_to_images' => ':platform en fazla :count görsel destekliyor', + 'does_not_support_videos' => ':platform videoları desteklemiyor', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => 'Akış Gönderisi', + 'description' => 'Akışınızda ve profilinizde görünür', + ], + 'instagram_reel' => [ + 'label' => 'Reel', + 'description' => '90 saniyeye kadar kısa video', + ], + 'instagram_story' => [ + 'label' => 'Hikaye', + 'description' => '24 saat sonra kaybolur', + ], + 'linkedin_post' => [ + 'label' => 'Gönderi', + 'description' => 'Standart gönderi — tek görsel, çoklu görsel, video veya PDF', + ], + 'linkedin_page_post' => [ + 'label' => 'Gönderi', + 'description' => 'Standart gönderi — tek görsel, çoklu görsel, video veya PDF', + ], + 'facebook_post' => [ + 'label' => 'Gönderi', + 'description' => 'Sayfanızda standart gönderi', + ], + 'facebook_reel' => [ + 'label' => 'Reel', + 'description' => '90 saniyeye kadar kısa video', + ], + 'facebook_story' => [ + 'label' => 'Hikaye', + 'description' => 'Dikey video hikayesi, 60 saniyeye kadar', + ], + 'tiktok_video' => [ + 'label' => 'Video', + 'description' => 'Kısa biçimli video içeriği', + ], + 'tiktok_photo' => [ + 'label' => 'Fotoğraf karuseli', + 'description' => 'Kaydırılabilir karusel olarak 35 fotoğrafa kadar', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => '60 saniyeye kadar dikey video', + ], + 'x_post' => [ + 'label' => 'Gönderi', + 'description' => 'Metin ve medya içeren tweet', + ], + 'threads_post' => [ + 'label' => 'Gönderi', + 'description' => 'İsteğe bağlı medya içeren metin gönderisi', + ], + 'pinterest_pin' => [ + 'label' => 'Pin', + 'description' => 'Standart görsel pin', + ], + 'pinterest_video_pin' => [ + 'label' => 'Video Pin', + 'description' => 'Video pin (4 sn - 15 dk)', + ], + 'pinterest_carousel' => [ + 'label' => 'Karusel', + 'description' => 'Çoklu görsel karusel (2-5 görsel)', + ], + 'bluesky_post' => [ + 'label' => 'Gönderi', + 'description' => 'İsteğe bağlı görsel içeren metin gönderisi', + ], + 'mastodon_post' => [ + 'label' => 'Gönderi', + 'description' => 'İsteğe bağlı medya içeren metin gönderisi', + ], + 'telegram_post' => [ + 'label' => 'Gönderi', + 'description' => 'İsteğe bağlı medya içeren metin gönderisi', + ], + 'discord_message' => [ + 'label' => 'Mesaj', + 'description' => 'İsteğe bağlı medya ve yerleştirmeler içeren Discord kanalına mesaj', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'LinkedIn Sayfası', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Facebook Sayfası', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => 'Gönderi başarıyla zamanlandı!', + 'deleted' => 'Gönderi başarıyla silindi!', + 'duplicated' => 'Gönderi taslak olarak çoğaltıldı.', + 'cannot_edit_finalized' => 'Bu gönderi zaten işlendi ve yeniden yayınlanamaz. Yeniden denemek için çoğaltın.', + 'cannot_delete_published' => 'Yayınlanmış gönderiler silinemez.', + 'connect_first' => 'Gönderi oluşturmadan önce en az bir sosyal ağ bağlayın.', + ], + + 'errors' => [ + 'account_disconnected' => 'Sosyal hesabın bağlantısı kesildi', + 'account_inactive' => 'Sosyal hesap devre dışı bırakıldı', + 'account_token_expired' => 'Sosyal hesap oturumunun süresi doldu — lütfen yeniden bağlanın', + ], + + 'delete' => [ + 'title' => 'Gönderi silinsin mi?', + 'description' => 'Bu işlem geri alınamaz. Gönderi ve tüm medyası kalıcı olarak kaldırılacak.', + 'confirm' => 'Evet, sil', + 'cancel' => 'İptal', + ], + + 'create' => [ + 'title' => 'Yeni bir gönderi oluştur', + 'description' => 'Nasıl başlamak istediğinizi seçin.', + 'scratch_title' => 'Sıfırdan başla', + 'scratch_description' => 'Boş bir gönderi açın ve her şeyi kendiniz yazın.', + 'ai_title' => 'AI ile oluştur', + 'ai_description' => 'İstediğinizi açıklayın, AI içeriği sizin için oluştursun.', + 'ai_configure_description' => 'Bir format seçin ve oluşturmak istediğiniz gönderiyi açıklayın.', + 'ai_pick_template_description' => 'AI ile oluşturulan gönderiniz için bir stil seçin.', + 'template_title' => 'Bir şablon kullan', + 'template_description' => 'Özenle seçilmiş şablonlarımızdan birini seçin ve özelleştirin.', + 'coming_soon' => 'Yakında', + + 'preview' => [ + 'image_title' => 'Görsel başlığı', + 'image_body' => 'Görsel gövdesi', + ], + + 'steps' => [ + 'template_picker_title' => 'Bir stil seçin', + 'format_title' => 'Bir format seçin', + 'format_description' => 'Oluşturmak istediğiniz gönderi türünü seçin.', + 'account_title' => 'Bir hesap seçin', + 'account_description' => 'Yayınlanacak sosyal hesabı seçin.', + 'media_title' => 'Medya seçenekleri', + 'media_carousel' => 'Kaç slayt?', + 'media_optional' => 'Görsel eklensin mi?', + 'media_optional_label' => 'Kaç görsel?', + 'media_none' => 'Hiçbiri', + 'media_count_label' => 'Görsel sayısı', + 'prompt_title' => 'Gönderinizi açıklayın', + 'prompt_label' => 'Bu gönderi ne hakkında?', + 'prompt_placeholder' => 'örn. Instagram için yeni karusel özelliğimizi duyur', + 'preview_error' => 'Bir şeyler ters gitti. Lütfen tekrar deneyin.', + 'loading_page_title' => 'Gönderiniz oluşturuluyor', + 'loading_eta' => 'Tahmini süre: yaklaşık :minutes.', + 'loading_eta_minute_one' => '1 dakika', + 'loading_eta_minute_other' => ':count dakika', + 'loading_leave_title' => 'Çalışmaya devam edebilirsiniz.', + 'loading_leave_body' => 'Gönderi hazır olduğunda sizi bilgilendireceğiz.', + 'loading_leave_cta' => 'Takvime git', + 'loading_create_another_cta' => 'Başka bir gönderi oluştur', + 'loading_tip_credits' => 'Her AI görseli yaklaşık 15 kredi kullanır.', + 'loading_tip_edit' => 'Gönderi hazır olduğunda her şeyi düzenleyebileceksiniz.', + 'loading_tip_draft' => 'Oluşturulan gönderiler taslaklarınıza gider.', + 'loading_tip_brand' => 'Gelecekteki gönderileri etkilemek için marka ayarlarınızı düzenleyin.', + 'loading_tip_carousel' => 'Karuseller yüklenen her görsel için bir slayt sunar.', + 'loading_tip_quality' => 'Görsel kalitesi, hız ve maliyeti dengelemek için ayarlanır.', + 'create' => 'Gönderi oluştur', + 'back' => 'Geri', + 'next' => 'Devam et', + 'cancel' => 'İptal', + 'discard' => 'Vazgeç', + 'retry' => 'Tekrar dene', + 'no_platforms' => 'Bağlı hesap yok', + 'connect_first' => 'AI oluşturmayı kullanmak için en az bir sosyal hesap bağlayın.', + 'no_account_for_template' => 'Bu şablonu kullanmak için uyumlu bir hesap bağlayın.', + + 'format' => [ + 'instagram_feed' => 'Instagram Akış Gönderisi', + 'instagram_carousel' => 'Instagram Karuseli', + 'linkedin_post' => 'LinkedIn Gönderisi', + 'linkedin_page_post' => 'LinkedIn Sayfa Gönderisi', + 'x_post' => 'X Gönderisi', + 'bluesky_post' => 'Bluesky Gönderisi', + 'threads_post' => 'Threads Gönderisi', + 'mastodon_post' => 'Mastodon Gönderisi', + 'telegram_post' => 'Telegram Gönderisi', + 'discord_message' => 'Discord Mesajı', + 'facebook_post' => 'Facebook Gönderisi', + 'pinterest_pin' => 'Pinterest Pin\'i', + 'instagram_story' => 'Instagram Hikayesi', + 'facebook_story' => 'Facebook Hikayesi', + ], + ], + ], + + 'templates' => [ + 'browser_title' => 'Bir şablon seçin', + 'browser_description' => 'Özenle seçilmiş bir şablondan başlayın ve uyarlayın.', + 'search_placeholder' => 'Şablon ara…', + 'no_search_results' => 'Aramanızla eşleşen şablon yok', + 'try_different_search' => 'Farklı bir anahtar kelime deneyin veya aramayı temizleyin.', + 'slides_count' => '{count} slayt|{count} slayt', + 'all_platforms' => 'Tüm platformlar', + 'platform_search_placeholder' => 'Platform ara…', + 'no_platform_match' => 'Eşleşen platform yok.', + 'use_this' => 'Bu şablonu kullan', + 'no_templates' => 'Kullanılabilir şablon yok.', + 'applying' => 'Şablon uygulanıyor…', + 'category' => [ + 'product_launch' => 'Ürün lansmanı', + 'promotion' => 'Promosyon', + 'educational' => 'Eğitici', + 'behind_the_scenes' => 'Kamera arkası', + 'testimonial' => 'Müşteri görüşü', + 'industry_tip' => 'Sektör ipucu', + 'event' => 'Etkinlik', + 'engagement' => 'Etkileşim', + ], + ], +]; diff --git a/lang/tr/settings.php b/lang/tr/settings.php new file mode 100644 index 00000000..5f6ebb5c --- /dev/null +++ b/lang/tr/settings.php @@ -0,0 +1,358 @@ + 'Ayarlar', + 'description' => 'Profilinizi ve hesap ayarlarınızı yönetin', + + 'hub' => [ + 'title' => 'Ayarlar', + 'description' => 'Neyi yönetmek istediğinizi seçin.', + 'profile' => [ + 'title' => 'Profil', + 'description' => 'Kişisel bilgilerinizi, parolanızı ve bildirim tercihlerinizi güncelleyin.', + ], + 'workspace' => [ + 'title' => 'Çalışma Alanı', + 'description' => 'Çalışma alanınızı, markanızı, üyelerinizi ve API anahtarlarınızı yapılandırın.', + ], + 'account' => [ + 'title' => 'Hesap', + 'description' => 'Hesap bilgilerinizi, kullanımınızı ve faturalandırmanızı yönetin.', + ], + ], + + 'nav' => [ + 'profile' => 'Profil', + 'authentication' => 'Kimlik Doğrulama', + 'workspace' => 'Çalışma Alanı', + 'members' => 'Üyeler', + 'notifications' => 'Bildirimler', + 'billing' => 'Faturalandırma', + ], + + 'notifications' => [ + 'title' => 'Bildirim tercihleri', + 'heading' => 'E-posta bildirimleri', + 'description' => 'Hangi e-posta bildirimlerini almak istediğinizi seçin', + 'post_published' => 'Gönderi yayınlandı', + 'post_published_description' => 'Gönderiniz başarıyla yayınlandığında bir e-posta alın', + 'post_failed' => 'Gönderi başarısız', + 'post_failed_description' => 'Gönderiniz yayınlanamadığında bir e-posta alın', + 'account_disconnected' => 'Hesap bağlantısı kesildi', + 'account_disconnected_description' => 'Bir sosyal hesabın bağlantısı kesildiğinde bir e-posta alın', + 'save' => 'Tercihleri kaydet', + ], + + 'profile' => [ + 'title' => 'Profil ayarları', + 'photo_heading' => 'Profil fotoğrafı', + 'photo_description' => 'Bir profil fotoğrafı yükleyin', + 'heading' => 'Profil bilgileri', + 'description' => 'Adınızı ve e-posta adresinizi güncelleyin', + 'avatar' => 'Avatar', + 'name' => 'Ad', + 'name_placeholder' => 'Ad soyad', + 'email' => 'E-posta adresi', + 'email_placeholder' => 'E-posta adresi', + 'email_unverified' => 'E-posta adresiniz doğrulanmadı.', + 'resend_verification' => 'Doğrulama e-postasını yeniden göndermek için buraya tıklayın.', + 'verification_sent' => 'E-posta adresinize yeni bir doğrulama bağlantısı gönderildi.', + 'save' => 'Kaydet', + ], + + 'authentication' => [ + 'title' => 'Kimlik Doğrulama', + 'page_title' => 'Kimlik doğrulama ayarları', + 'sessions' => [ + 'title' => 'Etkin oturumlar', + 'description' => 'Şüpheli bir şey fark ederseniz diğer cihazlardan çıkış yapın.', + 'unknown_browser' => 'Bilinmeyen tarayıcı', + 'unknown_ip' => 'Bilinmeyen IP', + 'on' => 'tarih:', + 'active_now' => 'Şu anda etkin', + 'log_out_others' => 'Diğer cihazlardan çıkış yap', + 'modal_title' => 'Diğer cihazlardan çıkış yap', + 'modal_description_password' => 'Diğer tarayıcı oturumlarından çıkış yapmak istediğinizi onaylamak için mevcut parolanızı girin.', + 'modal_description_email' => 'Diğer tarayıcı oturumlarından çıkış yapmak istediğinizi onaylamak için e-posta adresinizi yazın.', + 'password_placeholder' => 'Mevcut parola', + 'email_placeholder' => 'Hesap e-postanız', + 'cancel' => 'İptal', + 'submit' => 'Diğer cihazlardan çıkış yap', + 'email_mismatch' => 'E-posta adresi hesabınızla eşleşmiyor.', + 'flash_logged_out' => 'Diğer cihazlardan çıkış yapıldı.', + ], + 'password' => [ + 'update_title' => 'Parolayı güncelle', + 'set_title' => 'Bir parola belirle', + 'update_description' => 'Güvende kalmak için hesabınızın uzun ve rastgele bir parola kullandığından emin olun.', + 'set_description' => 'Bağlı bir sağlayıcı olmadan giriş yapabilmek için bir parola ekleyin.', + 'current_password' => 'Mevcut parola', + 'new_password' => 'Yeni parola', + 'confirm_password' => 'Parolayı onayla', + 'save' => 'Parolayı kaydet', + 'set' => 'Parolayı belirle', + ], + 'providers' => [ + 'title' => 'Bağlı hesaplar', + 'description' => 'Bu bağlı sağlayıcılarla daha hızlı giriş yapın.', + 'connected' => 'Bağlı', + 'not_connected' => 'Bağlı değil', + 'connect' => 'Bağla', + 'disconnect' => 'Bağlantıyı kes', + 'flash_disconnected' => ':provider bağlantısı başarıyla kesildi.', + 'flash_connected' => ':provider başarıyla bağlandı.', + 'flash_already_linked' => 'Bu :provider hesabı zaten başka bir kullanıcıya bağlı.', + 'flash_cannot_disconnect' => 'Tek giriş yönteminizin bağlantısını kesemezsiniz. Önce bir parola belirleyin veya başka bir sağlayıcı bağlayın.', + ], + ], + + 'delete_account' => [ + 'heading' => 'Hesabı sil', + 'description' => 'Hesabınızı ve tüm kaynaklarını silin', + 'warning' => 'Uyarı', + 'warning_message' => 'Lütfen dikkatli ilerleyin, bu işlem geri alınamaz.', + 'button' => 'Hesabı sil', + 'modal_title' => 'Hesabınızı silmek istediğinizden emin misiniz?', + 'modal_description_password' => 'Hesabınız silindiğinde, tüm kaynakları ve verileri de kalıcı olarak silinecek. Onaylamak için lütfen parolanızı girin.', + 'modal_description_email' => 'Hesabınız silindiğinde, tüm kaynakları ve verileri de kalıcı olarak silinecek. Onaylamak için lütfen e-posta adresinizi :email yazın.', + 'password' => 'Parola', + 'password_placeholder' => 'Parola', + 'email_placeholder' => 'Hesap e-postanız', + 'email_mismatch' => 'E-posta adresi hesabınızla eşleşmiyor.', + 'cancel' => 'İptal', + 'confirm' => 'Hesabı sil', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => 'Çalışma Alanı', + 'brand' => 'Marka', + 'users' => 'Üyeler', + 'api_keys' => 'API Anahtarları', + ], + 'title' => 'Çalışma alanı ayarları', + 'logo_heading' => 'Çalışma alanı logosu', + 'logo_description' => 'Çalışma alanınız için bir logo yükleyin', + 'heading' => 'Çalışma alanı adı', + 'description' => 'Çalışma alanı adınızı güncelleyin', + 'members_heading' => 'Üyeler', + 'members_description' => 'Çalışma alanı üyelerini ve davetlerini yönetin', + 'name' => 'Ad', + 'name_placeholder' => 'Çalışma Alanım', + 'save' => 'Kaydet', + ], + + 'brand' => [ + 'title' => 'Marka', + 'description' => 'AI ile oluşturulan içerik için marka kimliğinizi yapılandırın.', + 'name' => 'Çalışma alanı adı', + 'name_placeholder' => 'Markam', + 'website' => 'Web sitesi', + 'website_placeholder' => 'https://markaniz.com', + 'brand_description' => 'Açıklama', + 'brand_description_placeholder' => 'Bize markanızdan, ne yaptığınızdan ve kitlenizin kim olduğundan bahsedin...', + 'voice' => 'Marka sesi', + 'voice_description' => 'İçeriğinizin nasıl bir tona sahip olacağını tanımlayan özellikleri seçin.', + 'voice_group' => [ + 'pov' => 'Bakış açısı', + 'formality' => 'Resmiyet', + 'energy' => 'Enerji', + 'humor' => 'Mizah', + 'attitude' => 'Tutum', + 'warmth' => 'Sıcaklık', + 'confidence' => 'Özgüven', + 'style' => 'Stil', + ], + 'voice_trait' => [ + 'first_person' => 'Birinci tekil kişi', + 'second_person' => 'İkinci tekil kişi (sen)', + 'third_person' => 'Üçüncü tekil kişi', + 'formal' => 'Resmi', + 'balanced' => 'Dengeli', + 'casual' => 'Rahat', + 'calm' => 'Sakin', + 'moderate' => 'Ölçülü', + 'enthusiastic' => 'Coşkulu', + 'vibrant' => 'Canlı', + 'serious' => 'Ciddi', + 'dry' => 'Sade / ince', + 'witty' => 'Nüktedan', + 'playful' => 'Eğlenceli', + 'respectful' => 'Saygılı', + 'even_handed' => 'Tarafsız', + 'bold' => 'Cesur', + 'provocative' => 'Kışkırtıcı', + 'neutral' => 'Nötr', + 'friendly' => 'Samimi', + 'empathetic' => 'Empatik', + 'humble' => 'Alçakgönüllü', + 'confident' => 'Kendinden emin', + 'assertive' => 'İddialı', + 'direct' => 'Doğrudan', + 'concise' => 'Öz', + 'transparent' => 'Şeffaf', + 'no_hype' => 'Abartısız', + 'practical' => 'Pratik', + 'data_driven' => 'Veri odaklı', + 'storytelling' => 'Hikaye anlatan', + 'inspirational' => 'İlham verici', + 'educational' => 'Eğitici', + 'technical' => 'Teknik', + 'minimalist' => 'Az emoji', + ], + 'brand_color' => 'Marka rengi', + 'background_color' => 'Arka plan rengi', + 'text_color' => 'Metin rengi', + 'font' => 'Yazı tipi', + 'image_style' => 'Görsel stili', + 'image_style_description' => 'AI gönderileri için slayt ve kapak görselleri oluştururken uygulanan görsel stil.', + 'image_style_cinematic' => 'Sinematik', + 'image_style_illustration' => 'İllüstrasyon', + 'image_style_isometric_3d' => 'İzometrik', + 'image_style_cartoon' => 'Çizgi film', + 'image_style_typographic' => 'Tipografik', + 'image_style_infographic' => 'İnfografik', + 'image_style_minimalist' => 'Minimalist', + 'image_style_mockup' => 'Model (Mockup)', + 'content_language' => 'İçerik dili', + 'content_language_description' => 'AI ile oluşturulan açıklamalar, hashtag\'ler ve oluşturulan görsel veya videoların içindeki metinler için kullanılan dil.', + ], + + 'members' => [ + 'title' => 'Üyeler', + 'heading' => 'Ekip üyeleri', + 'description' => 'Bu çalışma alanı için üyeleri ve davetleri yönetin', + + 'cancel' => 'İptal', + 'remove' => 'Kaldır', + 'make_role' => ':role yap', + + 'invite' => [ + 'title' => 'Üye Davet Et', + 'description' => 'İş birlikçiler eklemek için bir e-posta daveti gönderin', + 'email' => 'E-posta', + 'email_placeholder' => 'isbirlikci@email.com', + 'role' => 'Rol', + 'role_placeholder' => 'Bir rol seçin', + 'submit' => 'Davet Gönder', + ], + + 'pending' => [ + 'title' => 'Bekleyen Davetler', + 'description' => 'Kabul edilmeyi bekleyen davetler', + 'empty' => 'Bekleyen davet yok', + ], + + 'list' => [ + 'title' => 'Üyeler', + 'description' => 'Bu çalışma alanına erişimi olan kişiler', + 'empty' => 'Sahip dışında üye yok', + ], + + 'remove_modal' => [ + 'title' => 'Üyeyi kaldır', + 'description' => 'Bu üyeyi çalışma alanından kaldırmak istediğinizden emin misiniz? Tüm çalışma alanı kaynaklarına erişimlerini kaybedecekler.', + 'action' => 'Üyeyi kaldır', + ], + + 'cancel_invite_modal' => [ + 'title' => 'Daveti iptal et', + 'description' => 'Bu daveti iptal etmek istediğinizden emin misiniz?', + 'action' => 'Daveti iptal et', + ], + + 'roles' => [ + 'owner' => 'Sahip', + 'admin' => 'Yönetici', + 'member' => 'Üye', + 'viewer' => 'İzleyici', + ], + + 'flash' => [ + 'invite_sent' => 'Davet başarıyla gönderildi!', + 'invite_deleted' => 'Davet silindi.', + 'member_removed' => 'Üye başarıyla kaldırıldı.', + 'role_updated' => 'Üye rolü güncellendi.', + 'wrong_email' => 'Bu davet farklı bir e-posta adresi için.', + 'already_member' => 'Zaten bu çalışma alanının bir üyesisiniz.', + 'invite_accepted' => 'Hoş geldiniz! Artık çalışma alanının bir üyesisiniz.', + 'invite_declined' => 'Davet reddedildi.', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => 'Hesap', + 'usage' => 'Kullanım', + 'billing' => 'Faturalandırma', + ], + 'title' => 'Hesap Ayarları', + 'description' => 'Hesap adınızı ve faturalandırma e-postanızı yönetin', + 'name' => 'Hesap Adı', + 'name_placeholder' => 'Şirketim', + 'billing_email' => 'Faturalandırma E-postası', + 'billing_email_placeholder' => 'fatura@sirket.com', + 'billing_email_hint' => 'Bu e-posta, Stripe\'tan gelen faturalar ve faturalandırma iletişimleri için kullanılacak.', + 'submit' => 'Kaydet', + ], + + 'flash' => [ + 'account_updated' => 'Hesap başarıyla güncellendi!', + 'profile_updated' => 'Profil başarıyla güncellendi!', + 'password_updated' => 'Parola başarıyla güncellendi!', + 'workspace_updated' => 'Ayarlar başarıyla güncellendi!', + 'photo_updated' => 'Fotoğraf başarıyla güncellendi!', + 'photo_deleted' => 'Fotoğraf başarıyla kaldırıldı!', + 'logo_updated' => 'Logo başarıyla yüklendi!', + 'logo_deleted' => 'Logo başarıyla kaldırıldı!', + 'notifications_updated' => 'Bildirim tercihleri güncellendi!', + ], + + 'api_keys' => [ + 'title' => 'API Anahtarları', + 'page_title' => 'API Anahtarları', + 'heading' => 'API Anahtarları', + 'description' => 'Çalışma alanınıza programlı erişim için API anahtarlarını yönetin.', + 'create' => 'API Anahtarı Oluştur', + 'copy' => 'Kopyala', + 'new_token_message' => 'Yeni API anahtarınız oluşturuldu. Şimdi kopyalayın — bir daha göremeyeceksiniz.', + 'table' => [ + 'name' => 'Ad', + 'key' => 'Anahtar', + 'status' => 'Durum', + 'expires' => 'Son kullanma', + 'last_used' => 'Son Kullanım', + 'never' => 'Hiçbir zaman', + ], + 'actions' => [ + 'copy_id' => 'API Anahtarı Kimliğini kopyala', + 'copy_id_success' => 'API Anahtarı Kimliği panoya kopyalandı', + 'delete' => 'Sil', + ], + 'empty' => [ + 'title' => 'Henüz API anahtarı yok', + 'description' => 'Çalışma alanınıza programlı olarak erişmek için bir API anahtarı oluşturun.', + ], + 'delete_modal' => [ + 'title' => 'API anahtarını sil', + 'description' => 'Bu API anahtarını silmek istediğinizden emin misiniz? Bu anahtarı kullanan tüm uygulamalar erişimi anında kaybedecek.', + 'action' => 'API anahtarını sil', + ], + 'create_dialog' => [ + 'title' => 'API Anahtarı Oluştur', + 'description' => 'Çalışma alanınıza programlı erişim için yeni bir API anahtarı oluşturun.', + 'name' => 'Ad', + 'name_placeholder' => 'örn. Üretim API Anahtarı', + 'expires' => 'Son kullanma tarihi (isteğe bağlı)', + 'expires_placeholder' => 'Son kullanma yok', + 'submit' => 'Oluştur', + 'cancel' => 'İptal', + ], + 'flash' => [ + 'created' => 'API anahtarı başarıyla oluşturuldu!', + 'deleted' => 'API anahtarı başarıyla silindi!', + ], + ], +]; diff --git a/lang/tr/sidebar.php b/lang/tr/sidebar.php new file mode 100644 index 00000000..c7936fc9 --- /dev/null +++ b/lang/tr/sidebar.php @@ -0,0 +1,61 @@ + 'Çalışma Alanları', + 'select_workspace' => 'Çalışma alanı seç', + 'create_workspace' => 'Çalışma alanı oluştur', + 'create_post' => 'Gönderi oluştur', + 'profile' => 'Profil', + 'log_out' => 'Çıkış yap', + + 'workspace' => 'Çalışma alanı: :name', + 'workspace_select' => 'Çalışma alanı: Seç', + + 'theme' => 'Tema: :name', + 'theme_light' => 'Açık', + 'theme_dark' => 'Koyu', + 'theme_system' => 'Sistem', + + 'language' => 'Dil: :name', + 'language_select' => 'Dil: Seç', + + 'groups' => [ + 'posts' => 'Gönderiler', + 'workspace' => 'Çalışma Alanı', + 'others' => 'Diğerleri', + ], + + 'analytics' => 'Analitik', + 'automations' => 'Otomasyonlar', + 'settings' => 'Ayarlar', + + 'posts' => [ + 'calendar' => 'Takvim', + 'all' => 'Tümü', + 'scheduled' => 'Zamanlanan', + 'posted' => 'Paylaşılan', + 'drafts' => 'Taslaklar', + ], + + 'workspace' => [ + 'connections' => 'Bağlantılar', + 'signatures' => 'İmzalar', + 'labels' => 'Etiketler', + 'assets' => 'Varlıklar', + 'api_keys' => 'API Anahtarları', + ], + + 'notifications' => 'Bildirimler', + 'mark_all_read' => 'Tümünü okundu olarak işaretle', + 'mark_as_read' => 'Okundu olarak işaretle', + 'archive_all' => 'Tümünü arşivle', + 'no_notifications' => 'Bildirim yok', + + 'support' => [ + 'docs' => 'Dokümantasyon', + 'referral' => '%30 referans kazanın', + 'stay_updated' => 'Güncel kalın', + ], +]; diff --git a/lang/tr/signatures.php b/lang/tr/signatures.php new file mode 100644 index 00000000..52814133 --- /dev/null +++ b/lang/tr/signatures.php @@ -0,0 +1,61 @@ + 'İmzalar', + 'description' => 'Gönderilerinize hızlıca eklemek için yeniden kullanılabilir imzalar oluşturun', + 'search' => 'İmza ara...', + 'new' => 'Yeni imza', + 'empty_title' => 'Henüz imza yok', + 'empty_description' => 'Gönderilerinize hashtag, bağlantı veya yeniden kullanılabilir herhangi bir metni hızlıca eklemek için imzalar oluşturun', + 'no_search_results' => 'Aramanızla eşleşen imza yok', + 'try_different_search' => 'Farklı bir anahtar kelime deneyin veya aramayı temizleyin.', + 'table' => [ + 'name' => 'Ad', + 'content' => 'İçerik', + 'created_at' => 'Oluşturuldu', + ], + + 'actions' => [ + 'edit' => 'İmzayı düzenle', + 'delete' => 'İmzayı sil', + ], + + 'create' => [ + 'title' => 'İmza oluştur', + 'description' => 'İmzanıza bir ad ve eklenecek içeriği verin (hashtag\'ler, bağlantılar, özel metin — yeniden kullandığınız her şey).', + 'name' => 'Ad', + 'name_placeholder' => 'örn. Pazarlama, Seyahat, Marka kapanışı', + 'content' => 'İçerik', + 'content_placeholder' => "#pazarlama #sosyalmedya\nDaha fazla bilgi: https://markaniz.com", + 'content_hint' => 'Hashtag\'ler, bağlantılar, özel girişler, kapanışlar — gönderilere eklediğiniz her şey.', + 'submit' => 'İmza oluştur', + 'submitting' => 'Oluşturuluyor...', + ], + + 'edit' => [ + 'title' => 'İmzayı düzenle', + 'description' => 'Bu imzanın adını ve içeriğini güncelleyin.', + 'name' => 'Ad', + 'name_placeholder' => 'örn. Pazarlama, Seyahat, Marka kapanışı', + 'content' => 'İçerik', + 'content_placeholder' => "#pazarlama #sosyalmedya\nDaha fazla bilgi: https://markaniz.com", + 'content_hint' => 'Hashtag\'ler, bağlantılar, özel girişler, kapanışlar — gönderilere eklediğiniz her şey.', + 'submit' => 'Değişiklikleri kaydet', + 'submitting' => 'Kaydediliyor...', + ], + + 'delete' => [ + 'title' => 'İmzayı sil', + 'description' => 'Bu imzayı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.', + 'confirm' => 'Sil', + 'cancel' => 'İptal', + ], + + 'flash' => [ + 'created' => 'İmza oluşturuldu.', + 'updated' => 'İmza güncellendi.', + 'deleted' => 'İmza silindi.', + ], +]; diff --git a/lang/tr/usage.php b/lang/tr/usage.php new file mode 100644 index 00000000..a707da16 --- /dev/null +++ b/lang/tr/usage.php @@ -0,0 +1,17 @@ + 'Kullanım', + + 'section_account' => 'Hesap', + 'section_account_description' => 'Planınız için kotalar ve limitler.', + 'section_ai' => 'AI Kredileri', + 'section_ai_description' => 'AI özellikleri kullanıldıkça krediler düşülür. Her ayın ilk günü sıfırlanır.', + + 'workspaces' => 'Çalışma Alanları', + 'social_accounts' => 'Sosyal Hesaplar', + 'members' => 'Üyeler', + 'credits' => 'Krediler', +]; diff --git a/lang/tr/validation.php b/lang/tr/validation.php new file mode 100644 index 00000000..3aa23edb --- /dev/null +++ b/lang/tr/validation.php @@ -0,0 +1,202 @@ + ':attribute alanı kabul edilmelidir.', + 'accepted_if' => ':other :value olduğunda :attribute alanı kabul edilmelidir.', + 'active_url' => ':attribute alanı geçerli bir URL olmalıdır.', + 'after' => ':attribute alanı :date tarihinden sonraki bir tarih olmalıdır.', + 'after_or_equal' => ':attribute alanı :date tarihine eşit veya sonraki bir tarih olmalıdır.', + 'alpha' => ':attribute alanı yalnızca harf içermelidir.', + 'alpha_dash' => ':attribute alanı yalnızca harf, rakam, tire ve alt çizgi içermelidir.', + 'alpha_num' => ':attribute alanı yalnızca harf ve rakam içermelidir.', + 'any_of' => ':attribute alanı geçersiz.', + 'array' => ':attribute alanı bir dizi olmalıdır.', + 'ascii' => ':attribute alanı yalnızca tek baytlık alfasayısal karakterler ve semboller içermelidir.', + 'before' => ':attribute alanı :date tarihinden önceki bir tarih olmalıdır.', + 'before_or_equal' => ':attribute alanı :date tarihine eşit veya önceki bir tarih olmalıdır.', + 'between' => [ + 'array' => ':attribute alanı :min ile :max arasında öğe içermelidir.', + 'file' => ':attribute alanı :min ile :max kilobayt arasında olmalıdır.', + 'numeric' => ':attribute alanı :min ile :max arasında olmalıdır.', + 'string' => ':attribute alanı :min ile :max karakter arasında olmalıdır.', + ], + 'boolean' => ':attribute alanı doğru veya yanlış olmalıdır.', + 'can' => ':attribute alanı yetkisiz bir değer içeriyor.', + 'confirmed' => ':attribute alanı onayı eşleşmiyor.', + 'contains' => ':attribute alanında gerekli bir değer eksik.', + 'current_password' => 'Parola yanlış.', + 'date' => ':attribute alanı geçerli bir tarih olmalıdır.', + 'date_equals' => ':attribute alanı :date tarihine eşit bir tarih olmalıdır.', + 'date_format' => ':attribute alanı :format biçimine uymalıdır.', + 'decimal' => ':attribute alanı :decimal ondalık basamak içermelidir.', + 'declined' => ':attribute alanı reddedilmelidir.', + 'declined_if' => ':other :value olduğunda :attribute alanı reddedilmelidir.', + 'different' => ':attribute alanı ile :other farklı olmalıdır.', + 'digits' => ':attribute alanı :digits basamaklı olmalıdır.', + 'digits_between' => ':attribute alanı :min ile :max basamak arasında olmalıdır.', + 'dimensions' => ':attribute alanı geçersiz görsel boyutlarına sahip.', + 'distinct' => ':attribute alanı yinelenen bir değere sahip.', + 'doesnt_contain' => ':attribute alanı şunlardan hiçbirini içermemelidir: :values.', + 'doesnt_end_with' => ':attribute alanı şunlardan biriyle bitmemelidir: :values.', + 'doesnt_start_with' => ':attribute alanı şunlardan biriyle başlamamalıdır: :values.', + 'email' => ':attribute alanı geçerli bir e-posta adresi olmalıdır.', + 'encoding' => ':attribute alanı :encoding ile kodlanmalıdır.', + 'ends_with' => ':attribute alanı şunlardan biriyle bitmelidir: :values.', + 'enum' => 'Seçilen :attribute geçersiz.', + 'exists' => 'Seçilen :attribute geçersiz.', + 'extensions' => ':attribute alanı şu uzantılardan birine sahip olmalıdır: :values.', + 'file' => ':attribute alanı bir dosya olmalıdır.', + 'filled' => ':attribute alanı bir değere sahip olmalıdır.', + 'gt' => [ + 'array' => ':attribute alanı :value öğeden fazla içermelidir.', + 'file' => ':attribute alanı :value kilobayttan büyük olmalıdır.', + 'numeric' => ':attribute alanı :value değerinden büyük olmalıdır.', + 'string' => ':attribute alanı :value karakterden uzun olmalıdır.', + ], + 'gte' => [ + 'array' => ':attribute alanı :value veya daha fazla öğe içermelidir.', + 'file' => ':attribute alanı :value kilobayta eşit veya büyük olmalıdır.', + 'numeric' => ':attribute alanı :value değerine eşit veya büyük olmalıdır.', + 'string' => ':attribute alanı :value karaktere eşit veya daha uzun olmalıdır.', + ], + 'hex_color' => ':attribute alanı geçerli bir onaltılık renk olmalıdır.', + 'image' => ':attribute alanı bir görsel olmalıdır.', + 'in' => 'Seçilen :attribute geçersiz.', + 'in_array' => ':attribute alanı :other içinde bulunmalıdır.', + 'in_array_keys' => ':attribute alanı şu anahtarlardan en az birini içermelidir: :values.', + 'integer' => ':attribute alanı bir tam sayı olmalıdır.', + 'ip' => ':attribute alanı geçerli bir IP adresi olmalıdır.', + 'ipv4' => ':attribute alanı geçerli bir IPv4 adresi olmalıdır.', + 'ipv6' => ':attribute alanı geçerli bir IPv6 adresi olmalıdır.', + 'json' => ':attribute alanı geçerli bir JSON dizesi olmalıdır.', + 'list' => ':attribute alanı bir liste olmalıdır.', + 'lowercase' => ':attribute alanı küçük harf olmalıdır.', + 'lt' => [ + 'array' => ':attribute alanı :value öğeden az içermelidir.', + 'file' => ':attribute alanı :value kilobayttan küçük olmalıdır.', + 'numeric' => ':attribute alanı :value değerinden küçük olmalıdır.', + 'string' => ':attribute alanı :value karakterden kısa olmalıdır.', + ], + 'lte' => [ + 'array' => ':attribute alanı :value öğeden fazla içermemelidir.', + 'file' => ':attribute alanı :value kilobayta eşit veya küçük olmalıdır.', + 'numeric' => ':attribute alanı :value değerine eşit veya küçük olmalıdır.', + 'string' => ':attribute alanı :value karaktere eşit veya daha kısa olmalıdır.', + ], + 'mac_address' => ':attribute alanı geçerli bir MAC adresi olmalıdır.', + 'max' => [ + 'array' => ':attribute alanı :max öğeden fazla içermemelidir.', + 'file' => ':attribute alanı :max kilobayttan büyük olmamalıdır.', + 'numeric' => ':attribute alanı :max değerinden büyük olmamalıdır.', + 'string' => ':attribute alanı :max karakterden uzun olmamalıdır.', + ], + 'max_digits' => ':attribute alanı :max basamaktan fazla içermemelidir.', + 'mimes' => ':attribute alanı şu türde bir dosya olmalıdır: :values.', + 'mimetypes' => ':attribute alanı şu türde bir dosya olmalıdır: :values.', + 'min' => [ + 'array' => ':attribute alanı en az :min öğe içermelidir.', + 'file' => ':attribute alanı en az :min kilobayt olmalıdır.', + 'numeric' => ':attribute alanı en az :min olmalıdır.', + 'string' => ':attribute alanı en az :min karakter olmalıdır.', + ], + 'min_digits' => ':attribute alanı en az :min basamak içermelidir.', + 'missing' => ':attribute alanı bulunmamalıdır.', + 'missing_if' => ':other :value olduğunda :attribute alanı bulunmamalıdır.', + 'missing_unless' => ':other :value olmadıkça :attribute alanı bulunmamalıdır.', + 'missing_with' => ':values mevcut olduğunda :attribute alanı bulunmamalıdır.', + 'missing_with_all' => ':values mevcut olduğunda :attribute alanı bulunmamalıdır.', + 'multiple_of' => ':attribute alanı :value değerinin katı olmalıdır.', + 'not_in' => 'Seçilen :attribute geçersiz.', + 'not_regex' => ':attribute alanı biçimi geçersiz.', + 'numeric' => ':attribute alanı bir sayı olmalıdır.', + 'password' => [ + 'letters' => ':attribute alanı en az bir harf içermelidir.', + 'mixed' => ':attribute alanı en az bir büyük ve bir küçük harf içermelidir.', + 'numbers' => ':attribute alanı en az bir rakam içermelidir.', + 'symbols' => ':attribute alanı en az bir sembol içermelidir.', + 'uncompromised' => 'Verilen :attribute bir veri sızıntısında görüldü. Lütfen farklı bir :attribute seçin.', + ], + 'present' => ':attribute alanı mevcut olmalıdır.', + 'present_if' => ':other :value olduğunda :attribute alanı mevcut olmalıdır.', + 'present_unless' => ':other :value olmadıkça :attribute alanı mevcut olmalıdır.', + 'present_with' => ':values mevcut olduğunda :attribute alanı mevcut olmalıdır.', + 'present_with_all' => ':values mevcut olduğunda :attribute alanı mevcut olmalıdır.', + 'prohibited' => ':attribute alanı yasaktır.', + 'prohibited_if' => ':other :value olduğunda :attribute alanı yasaktır.', + 'prohibited_if_accepted' => ':other kabul edildiğinde :attribute alanı yasaktır.', + 'prohibited_if_declined' => ':other reddedildiğinde :attribute alanı yasaktır.', + 'prohibited_unless' => ':other :values içinde olmadıkça :attribute alanı yasaktır.', + 'prohibits' => ':attribute alanı :other alanının bulunmasını yasaklar.', + 'regex' => ':attribute alanı biçimi geçersiz.', + 'required' => ':attribute alanı gereklidir.', + 'required_array_keys' => ':attribute alanı şunlar için girişler içermelidir: :values.', + 'required_if' => ':other :value olduğunda :attribute alanı gereklidir.', + 'required_if_accepted' => ':other kabul edildiğinde :attribute alanı gereklidir.', + 'required_if_declined' => ':other reddedildiğinde :attribute alanı gereklidir.', + 'required_unless' => ':other :values içinde olmadıkça :attribute alanı gereklidir.', + 'required_with' => ':values mevcut olduğunda :attribute alanı gereklidir.', + 'required_with_all' => ':values mevcut olduğunda :attribute alanı gereklidir.', + 'required_without' => ':values mevcut olmadığında :attribute alanı gereklidir.', + 'required_without_all' => ':values değerlerinin hiçbiri mevcut olmadığında :attribute alanı gereklidir.', + 'same' => ':attribute alanı :other ile eşleşmelidir.', + 'size' => [ + 'array' => ':attribute alanı :size öğe içermelidir.', + 'file' => ':attribute alanı :size kilobayt olmalıdır.', + 'numeric' => ':attribute alanı :size olmalıdır.', + 'string' => ':attribute alanı :size karakter olmalıdır.', + ], + 'starts_with' => ':attribute alanı şunlardan biriyle başlamalıdır: :values.', + 'string' => ':attribute alanı bir dize olmalıdır.', + 'timezone' => ':attribute alanı geçerli bir saat dilimi olmalıdır.', + 'unique' => ':attribute zaten alınmış.', + 'uploaded' => ':attribute yüklenemedi.', + 'uppercase' => ':attribute alanı büyük harf olmalıdır.', + 'url' => ':attribute alanı geçerli bir URL olmalıdır.', + 'ulid' => ':attribute alanı geçerli bir ULID olmalıdır.', + 'uuid' => ':attribute alanı geçerli bir UUID olmalıdır.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/tr/workspaces.php b/lang/tr/workspaces.php new file mode 100644 index 00000000..5a97bcaf --- /dev/null +++ b/lang/tr/workspaces.php @@ -0,0 +1,50 @@ + 'Çalışma Alanları', + 'select_title' => 'Çalışma alanlarınız', + 'select_description' => 'Devam etmek için bir çalışma alanı seçin', + 'current' => 'Geçerli', + 'connections' => ':count bağlantı', + 'posts' => ':count gönderi', + + 'create' => [ + 'page_title' => 'Çalışma alanınızı oluşturun', + 'title' => 'Çalışma alanınızı ayarlayın', + 'description' => 'Bize kendinizden veya projenizden biraz bahsedin. AI ile oluşturulan gönderileri sizin sesinize uyarlamak için bunu kullanacağız.', + 'website' => 'Web sitesi', + 'website_placeholder' => 'https://markaniz.com', + 'autofill' => 'Web sitesinden otomatik doldur', + 'autofill_missing_url' => 'Önce bir URL girin.', + 'autofill_success' => 'Marka bilgileri yüklendi.', + 'autofill_error' => 'Otomatik doldurulamadı. Alanları manuel olarak doldurabilirsiniz.', + 'autofill_errors' => [ + 'unreachable' => 'Bu web sitesine ulaşamadık (:reason).', + 'http_status' => 'Web sitesi beklenmeyen bir durum döndürdü (:status).', + 'invalid_scheme' => 'Yalnızca http ve https URL\'leri desteklenir.', + 'missing_host' => 'URL\'de ana bilgisayar eksik.', + 'unresolvable_host' => 'Ana bilgisayarı çözümleyemedik (:host).', + 'private_network' => 'Özel ağlara işaret eden URL\'lere izin verilmez.', + ], + 'logo_captured' => 'Logo web sitenizden alındı.', + 'name' => 'Çalışma alanı adı', + 'name_placeholder' => 'örn. Acme Inc', + 'brand_description' => 'Marka açıklaması', + 'brand_description_placeholder' => 'Markanız ne yapıyor?', + 'content_language' => 'İçerik dili', + 'content_language_description' => 'AI ile oluşturulan açıklamalar bu dilde yazılacak.', + 'brand_color' => 'Marka rengi', + 'background_color' => 'Arka plan rengi', + 'text_color' => 'Metin rengi', + 'submit' => 'Çalışma alanı oluştur', + 'success' => 'Çalışma alanı oluşturuldu. Paylaşıma başlamak için bir sosyal hesap bağlayın.', + ], + + 'cannot_delete_last' => 'Tek çalışma alanınızı silemezsiniz. Hesabınızı kapatmak için faturalandırma ayarlarından aboneliğinizi iptal edin.', + + 'flash' => [ + 'deleted' => 'Çalışma alanı başarıyla silindi.', + ], +]; diff --git a/lang/zh/accounts.php b/lang/zh/accounts.php new file mode 100644 index 00000000..a5be0a53 --- /dev/null +++ b/lang/zh/accounts.php @@ -0,0 +1,148 @@ + '连接', + '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' => '通过 Facebook 主页连接 Instagram', + 'threads' => '连接你的 Threads 账号', + 'pinterest' => '连接你的 Pinterest 账号', + 'bluesky' => '连接你的 Bluesky 账号', + 'mastodon' => '连接你的 Mastodon 账号', + 'telegram' => '连接一个 Telegram 频道或群组', + 'discord' => '连接一个 Discord 服务器', + ], + + 'disconnect_modal' => [ + 'title' => '断开账号连接', + 'description' => '确定要断开此账号的连接吗?你可以随时重新连接。', + 'confirm' => '断开连接', + 'cancel' => '取消', + ], + + 'bluesky' => [ + 'title' => '连接 Bluesky', + 'description' => '输入你的凭据以连接', + 'email' => '邮箱', + 'email_placeholder' => 'yourhandle.bsky.social', + 'app_password' => '应用专用密码', + 'app_password_placeholder' => 'xxxx-xxxx-xxxx-xxxx', + 'app_password_hint' => '为保障安全,请使用应用专用密码。可前往 bsky.app/settings 创建。', + 'submit' => '连接 Bluesky', + 'submitting' => '连接中…', + ], + + 'mastodon' => [ + 'title' => '连接 Mastodon', + 'description' => '输入你的 Mastodon 实例', + 'instance_url' => '实例地址', + 'instance_placeholder' => 'https://mastodon.social', + 'instance_hint' => '输入你的 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' => '未找到关联了 Instagram 商业账号的 Facebook 主页。', + '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' => '未找到关联了 Instagram 账号的 Facebook 主页。', + 'no_youtube_channels' => '未找到 YouTube 频道,请先创建一个频道。', + 'not_linkedin_admin' => '你不是任何 LinkedIn 页面的管理员。', + ], +]; diff --git a/lang/zh/analytics.php b/lang/zh/analytics.php new file mode 100644 index 00000000..d9e81278 --- /dev/null +++ b/lang/zh/analytics.php @@ -0,0 +1,55 @@ + '没有可查看分析数据的已连接账号。', + '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' => 'Pin 点击率', + 'pin_clicks' => 'Pin 点击', + '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' => '观看量', + ], +]; diff --git a/lang/zh/assets.php b/lang/zh/assets.php new file mode 100644 index 00000000..e3cecc47 --- /dev/null +++ b/lang/zh/assets.php @@ -0,0 +1,52 @@ + '素材库', + + '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 提供支持', + ], +]; diff --git a/lang/zh/auth.php b/lang/zh/auth.php new file mode 100644 index 00000000..56a8a1c9 --- /dev/null +++ b/lang/zh/auth.php @@ -0,0 +1,141 @@ + '这些凭据与我们的记录不匹配。', + 'password' => '提供的密码不正确。', + 'throttle' => '登录尝试次数过多,请在 :seconds 秒后重试。', + + 'flash' => [ + 'welcome' => '欢迎使用 TryPost!', + 'welcome_trial' => '欢迎使用 TryPost!你的试用已开始。', + ], + + 'legal' => '继续即表示你同意我们的服务条款隐私政策。', + + 'slides' => [ + 'calendar' => [ + 'title' => '可视化日历', + 'description' => '通过直观的拖放日历,跨所有社交账号规划和安排你的内容。', + ], + 'scheduling' => [ + 'title' => '智能排期', + 'description' => '在一个地方向 LinkedIn、X、Instagram、TikTok、YouTube 等平台安排发帖。', + ], + 'media' => [ + 'title' => '丰富媒体', + 'description' => '发布图片、轮播、快拍和 Reels。每个平台都会自动获得合适的格式。', + ], + 'video' => [ + 'title' => '视频发布', + 'description' => '一次上传视频,即可发布到 TikTok、YouTube Shorts、Instagram Reels 和 Facebook Reels。', + ], + 'team' => [ + 'title' => '团队工作区', + 'description' => '邀请团队成员、分配角色,并在独立的工作区中管理多个品牌。', + ], + 'signatures' => [ + 'title' => '签名', + 'description' => '保存可复用的签名(话题标签、链接、落款),一键附加到帖子中。', + ], + ], + + 'or_continue_with' => '或使用以下方式继续', + 'or_continue_with_email' => '或使用邮箱继续', + 'google_login' => '使用 Google 登录', + 'google_signup' => '使用 Google 注册', + 'github_login' => '使用 GitHub 登录', + 'github_signup' => '使用 GitHub 注册', + 'github_email_unavailable' => '无法从 GitHub 获取你的邮箱。请将你的 GitHub 邮箱设为公开,或授予邮箱权限后重试。', + + 'signup_success' => [ + 'page_title' => '欢迎', + 'title' => '正在设置你的账户', + 'description' => '这通常只需几秒钟…', + ], + + 'login' => [ + 'title' => '登录你的账户', + 'description' => '请在下方输入你的邮箱和密码以登录', + 'page_title' => '登录', + 'email' => '邮箱地址', + 'password' => '密码', + 'forgot_password' => '忘记密码?', + 'remember_me' => '记住我', + 'submit' => '登录', + 'no_account' => '还没有账户?', + 'sign_up' => '注册', + ], + + 'register' => [ + 'title' => '你的整个社交日历,尽在一处', + 'description' => '创建账户,开始在每个平台上安排发帖。', + 'page_title' => '注册', + 'signup_with_email' => '使用邮箱注册', + 'name' => '姓名', + 'name_placeholder' => '全名', + 'email' => '邮箱地址', + 'password' => '密码', + 'show_password' => '显示密码', + 'hide_password' => '隐藏密码', + 'submit' => '创建账户', + 'has_account' => '已经有账户了?', + 'log_in' => '登录', + ], + + 'forgot_password' => [ + 'title' => '忘记密码', + 'description' => '输入你的邮箱以接收密码重置链接', + 'page_title' => '忘记密码', + 'email' => '邮箱地址', + 'submit' => '发送密码重置链接', + 'return_to' => '或者,返回', + 'log_in' => '登录', + ], + + 'reset_password' => [ + 'title' => '重置密码', + 'description' => '请在下方输入你的新密码', + 'page_title' => '重置密码', + 'email' => '邮箱', + 'password' => '密码', + 'confirm_password' => '确认密码', + 'confirm_placeholder' => '确认密码', + 'submit' => '重置密码', + ], + + 'verify_email' => [ + 'title' => '验证邮箱', + 'description' => '请点击我们刚刚发送到你邮箱的链接以验证你的邮箱地址。', + 'page_title' => '邮箱验证', + 'link_sent' => '新的验证链接已发送至你注册时填写的邮箱地址。', + 'resend' => '重新发送验证邮件', + 'log_out' => '退出登录', + ], + + 'accept_invite' => [ + 'page_title' => '接受邀请', + 'title' => '你收到了一份邀请!', + 'description' => '你被邀请加入 :workspace 工作区。', + 'workspace' => '工作区', + 'your_role' => '你的角色', + 'email' => '邮箱', + 'accept' => '接受邀请', + 'decline' => '拒绝邀请', + 'login_prompt' => '登录或创建账户以接受此邀请。', + 'log_in' => '登录', + 'create_account' => '创建账户', + ], + +]; diff --git a/lang/zh/automations.php b/lang/zh/automations.php new file mode 100644 index 00000000..f02d6d01 --- /dev/null +++ b/lang/zh/automations.php @@ -0,0 +1,411 @@ + '自动化', + 'default_name' => '新建自动化', + + 'actions' => [ + 'new' => '新建自动化', + 'edit' => '编辑', + 'save' => '保存', + 'activate' => '启用', + 'pause' => '暂停', + 'delete' => '删除', + 'retry' => '重试', + 'guide' => '了解运作方式', + ], + + 'tabs' => [ + 'build' => '搭建', + 'variables' => '变量', + 'test' => '测试', + ], + + 'nav' => [ + 'workflow' => '工作流', + 'invocations' => '执行记录', + 'metrics' => '指标', + 'settings' => '设置', + ], + + 'settings' => [ + 'general' => '常规', + 'general_description' => '重命名此自动化。', + 'name_label' => '名称', + 'name_saved' => '自动化已重命名。', + 'status_title' => '状态', + 'status_description' => '启用即开始运行,暂停即停止。', + 'activated_at' => '于 :date 启用', + 'paused_at' => '于 :date 暂停', + 'created_at' => '于 :date 创建', + 'danger_title' => '危险区域', + 'danger_description' => '不可逆的操作。', + 'delete_title' => '删除此自动化', + 'delete_description' => '永久删除该自动化及其运行历史。', + ], + + 'status_run' => [ + 'pending' => '等待中', + 'running' => '运行中', + 'waiting' => '等待中', + 'completed' => '已完成', + 'failed' => '已失败', + 'cancelled' => '已取消', + ], + + 'node_type' => [ + 'trigger' => '触发器', + 'generate' => '生成内容', + 'delay' => '延迟', + 'condition' => '条件', + 'publish' => '发布', + 'webhook' => 'Webhook', + 'end' => '结束', + 'fetch_rss' => '抓取 RSS', + 'http_request' => 'HTTP 请求', + ], + + 'invocations' => [ + 'empty' => '暂无执行记录。', + 'refresh' => '刷新', + 'search_placeholder' => '按运行 ID 搜索…', + 'copied' => '运行 ID 已复制。', + 'loading' => '正在加载步骤…', + 'no_steps' => '未记录任何步骤。', + 'load_error' => '无法加载步骤。', + 'steps' => '{0}无步骤|{1}:count 个步骤|[2,*]:count 个步骤', + 'filter' => [ + 'all' => '所有状态', + ], + 'columns' => [ + 'timestamp' => '时间戳', + 'run' => '运行', + 'status' => '状态', + 'message' => '最后一条消息', + 'duration' => '时长', + ], + 'summary' => [ + 'completed' => '工作流已完成', + 'failed' => '工作流已失败', + 'running' => '工作流运行中', + 'cancelled' => '工作流已取消', + 'pending' => '工作流等待中', + ], + ], + + 'metrics' => [ + 'overview' => '概览', + 'runs_over_time' => '运行次数趋势', + 'posts_by_platform' => '各平台帖子数', + 'no_posts' => '此时间段内未发布任何帖子。', + 'cards' => [ + 'runs' => '总运行次数', + 'completed' => '已完成', + 'failed' => '已失败', + 'in_progress' => '进行中', + 'success_rate' => '成功率', + 'avg_duration' => '平均时长', + 'posts_created' => '已创建帖子数', + ], + 'legend' => [ + 'started' => '已开始', + 'completed' => '已完成', + 'failed' => '已失败', + ], + ], + + 'categories' => [ + 'sources' => '数据源', + 'content' => '内容', + 'flow' => '流程', + 'output' => '输出', + ], + + 'variables' => [ + 'title' => '工作流变量', + 'hint' => '可在任意位置通过 {{ variables.KEY }} 引用的可复用值。加密存储。', + 'empty' => '暂无变量。', + 'key' => '键', + 'value' => '值', + 'key_placeholder' => 'API_KEY', + 'value_placeholder' => '值', + 'add' => '新建变量', + ], + + 'expr' => [ + 'trigger_event' => '触发事件名称', + 'trigger_fired_at' => '触发器触发时间', + 'trigger_post_id' => '触发帖子 ID', + 'trigger_post_content' => '触发帖子内容', + 'trigger_post_status' => '触发帖子状态', + 'trigger_post_scheduled_at' => '帖子的排期时间', + 'trigger_post_published_at' => '帖子的发布时间', + 'fetched_title' => '抓取条目的标题', + 'fetched_link' => '抓取条目的链接', + 'fetched_date' => '抓取条目的发布日期', + 'fetched_content' => '抓取条目的完整内容', + 'fetched_description' => '抓取条目的摘要', + 'fetched_author' => '抓取条目的作者', + 'fetched_image' => '抓取条目的图片 URL', + 'fetched_categories' => '抓取条目的分类', + 'fetched_enclosure' => '抓取条目的媒体(音频/视频/文件)', + 'fetched_pubdate' => '抓取条目的发布日期', + 'fetched_http' => '抓取的 HTTP 条目(追加一个字段)', + 'generated_content' => 'AI 生成的帖子内容', + 'generated_post_url' => 'AI 生成的帖子 URL', + 'variable' => '工作流变量', + 'now' => '当前日期和时间', + ], + + 'test' => [ + 'description' => '使用合成的触发载荷端到端地运行该自动化。可用于验证每个节点,无需等待真实的排期或订阅源。', + 'starting' => '正在启动测试运行…', + 'in_progress' => '进行中', + 'completed' => '已完成', + 'failed' => '已失败', + 'waiting' => '等待中', + 'close' => '关闭', + 'no_node_runs' => '正在等待第一个节点开始…', + 'node_input' => '输入', + 'node_output' => '输出', + 'node_error' => '错误', + 'no_new_items' => '没有新条目——后续节点未运行。', + 'error_starting' => '无法启动测试运行。', + 'with_real_data' => '使用真实数据', + 'run' => '运行测试', + 'idle_hint' => '点击“运行测试”即可端到端执行该自动化。', + 'real_data_hint' => '此测试将会发布帖子、推进轮询水位线,并触发外部副作用。', + 'dry_badge' => '试运行', + ], + + 'status' => [ + 'draft' => '草稿', + 'active' => '已启用', + 'paused' => '已暂停', + ], + + 'index' => [ + 'empty_title' => '暂无自动化', + 'empty_description' => '创建你的第一个自动化,让发帖自动运行。', + 'columns' => [ + 'name' => '名称', + 'status' => '状态', + 'created' => '创建时间', + ], + ], + + 'form' => [ + 'activate_error_fallback' => '无法启用自动化。', + 'pause_error_fallback' => '无法暂停自动化。', + 'save_error_fallback' => '无法保存自动化。', + 'save_success' => '自动化已保存。', + 'empty_canvas_title' => '开始搭建你的自动化', + 'empty_canvas_description' => '从左侧面板拖入一个节点即可开始。', + 'name_placeholder' => '未命名自动化', + ], + + 'nodes' => [ + 'trigger' => '触发器', + 'generate' => '生成', + 'delay' => '延迟', + 'condition' => '条件', + 'publish' => '发布', + 'webhook' => 'Webhook', + 'end' => '结束', + 'end_summary' => '在此停止自动化', + 'fetch_rss' => '抓取 RSS', + 'http_request' => 'HTTP 请求', + 'handles' => [ + 'items' => '有条目', + 'no_items' => '无条目', + ], + ], + + 'config' => [ + 'select_placeholder' => '选择…', + 'invalid_json' => '这还不是有效的 JSON。', + 'expand_editor' => '展开编辑器', + 'minimize_editor' => '最小化', + + 'trigger' => [ + 'type' => '触发类型', + 'types' => [ + 'schedule' => '定时', + 'post_published' => '当帖子被发布时', + 'post_scheduled' => '当帖子被排期时', + ], + 'post_published_hint' => '每当此工作区中的任意帖子被发布时运行。已发布的帖子将在 {{ trigger.post }} 处供后续节点使用。', + 'post_scheduled_hint' => '每当此工作区中的任意帖子被排期时运行。已排期的帖子可在 {{ trigger.post }} 处获取。', + + 'schedule' => [ + 'field' => '触发间隔', + 'fields' => [ + 'minutes' => '分钟', + 'hours' => '小时', + 'days' => '天', + 'weeks' => '周', + 'months' => '月', + ], + 'minutes_interval' => '每次触发间隔的分钟数', + 'hours_interval' => '每次触发间隔的小时数', + 'days_interval' => '每次触发间隔的天数', + 'hour' => '触发的小时', + 'minute' => '触发的分钟', + 'weekdays' => '在这些工作日触发', + 'day_of_month' => '每月的第几天', + 'weekday_names' => [ + 'sun' => '周日', + 'mon' => '周一', + 'tue' => '周二', + 'wed' => '周三', + 'thu' => '周四', + 'fri' => '周五', + 'sat' => '周六', + ], + 'summary' => [ + 'every_n_minutes' => '每分钟运行一次|每 :count 分钟运行一次', + 'every_n_hours' => '每小时在第 :minute 分钟运行|每 :count 小时在第 :minute 分钟运行', + 'every_n_days' => '每天在 :time 运行|每 :count 天在 :time 运行', + 'weekly' => '每 :days 在 :time 运行', + 'monthly' => '每月 :day 日在 :time 运行', + ], + ], + ], + 'generate' => [ + 'social_accounts' => '社交账号', + 'social_accounts_empty' => '没有已连接的社交账号。请先连接一个。', + 'target_slide_count' => '要生成的幻灯片数量', + 'prompt_template' => '提示词模板', + 'prompt_template_hint' => '输入 {{ 即可插入前面步骤的数据。', + 'image_count' => '要生成的图片数量', + 'image_count_hint' => '0 = 纯文字帖子(无图片)。1 = 单张图片。2 及以上 = 轮播。', + 'use_brand_voice' => '使用品牌语气', + 'use_brand_voice_hint' => '应用你的品牌描述和语气。若要忠实呈现第三方来源(新闻、RSS),请关闭。', + 'use_brand_visuals' => '使用品牌视觉', + 'use_brand_visuals_hint' => '用你的品牌色彩和形象来引导 AI 图片。若要仅根据帖子主题生成中性图像,请关闭。', + 'style' => '风格', + 'account_summary' => ':count 个账号 · :format|:count 个账号 · :format', + 'formats' => [ + 'single' => '单图', + 'carousel' => '轮播', + ], + ], + 'delay' => [ + 'duration' => '时长', + 'unit' => '单位', + 'units' => [ + 'minutes' => '分钟', + 'hours' => '小时', + 'days' => '天', + ], + ], + 'condition' => [ + 'field' => '字段', + 'operator' => '运算符', + 'operators' => [ + 'contains' => '包含', + 'not_contains' => '不包含', + 'equals' => '等于', + 'not_equals' => '不等于', + 'matches' => '匹配(正则)', + 'greater_than' => '大于', + 'less_than' => '小于', + ], + 'value' => '值', + ], + 'publish' => [ + 'mode' => '模式', + 'modes' => [ + 'now' => '立即发布', + 'scheduled' => '排期', + 'draft' => '存为草稿', + ], + 'scheduled_offset' => '相对触发的延迟(分钟)', + 'offset_summary' => ':mode · +:offset 分钟', + ], + 'webhook' => [ + 'url' => 'URL', + 'method' => '方法', + 'payload_template' => '载荷模板(JSON)', + ], + 'end' => [ + 'reason' => '原因(可选)', + 'reason_placeholder' => '例如 被条件过滤掉', + ], + 'fetch_rss' => [ + 'feed_url' => '订阅源 URL', + 'feed_url_hint' => '首次运行时,水位线会设为“当前”,以免历史条目涌入后续节点。之后的运行只会看到比上次轮询更新的条目。', + 'inspect' => '检查订阅源', + 'inspecting' => '检查中…', + 'inspect_hint' => '抓取一份样本,以发现可在后续节点中使用的字段。', + 'inspect_error' => '无法读取此订阅源。请检查 URL 后重试。', + 'discovered_fields' => '可用字段', + 'discovered_empty' => '在最新条目中未找到任何字段。', + ], + 'http_request' => [ + 'url' => 'URL', + 'method' => '方法', + 'auth_type' => '身份验证', + 'auth' => [ + 'none' => '无(公开)', + 'bearer' => 'Bearer 令牌', + 'basic' => '基本认证', + 'api_key' => 'API 密钥请求头', + ], + 'bearer_token' => 'Bearer 令牌', + 'basic_username' => '用户名', + 'basic_password' => '密码', + 'api_key_header' => '请求头名称', + 'api_key_value' => 'API 密钥', + 'body_template' => '请求体模板(JSON)', + 'headers' => '请求头', + 'header_name' => '请求头名称', + 'header_value' => '值', + 'add_header' => '添加请求头', + 'polling_section' => '列表与去重(可选)', + 'polling_hint' => '当响应为列表时,每个条目会分别运行一次工作流。单个对象则运行一次。', + 'items_path' => '条目路径', + 'items_path_hint' => '如果响应本身已是数组,则留空。若为嵌套数组,请使用点分路径(例如 data.items);若为以 id 为键的对象,请使用 *。', + 'item_key_path' => '条目键路径', + 'item_key_path_hint' => '指向唯一 id 的 JSON 路径(例如 id)。已见过的条目会被跳过,因此即使订阅源没有日期,也只转发新条目。', + 'item_date_path' => '条目日期路径', + 'item_date_path_hint' => '指向条目时间戳的 JSON 路径(例如 published_at)。可用时优先于键路径。首次轮询会记录基准并不转发任何内容,因此现有订阅源第一天绝不会涌入。', + ], + ], + + 'delete' => [ + 'title' => '删除自动化', + 'description' => '确定要删除此自动化吗?所有运行记录和触发条目也将被移除。此操作无法撤销。', + 'confirm' => '删除', + 'cancel' => '取消', + ], + + 'flash' => [ + 'deleted' => '自动化删除成功!', + ], + + 'errors' => [ + 'no_active_social_accounts' => '此自动化未配置任何已启用的社交账号。', + 'must_have_one_trigger' => '自动化必须且只能有一个触发器节点。', + 'trigger_must_be_connected' => '触发器节点必须至少连接到一个节点。', + 'graph_contains_cycle' => '自动化流程图中包含环路。', + 'only_failed_can_retry' => '只有失败的运行才能重试。', + 'no_generated_post' => '在该运行中未找到已生成的帖子。', + 'webhook_server_error' => 'Webhook 服务器错误。', + 'webhook_request_failed' => 'Webhook 请求无法完成。', + 'webhook_missing_url' => 'Webhook 节点缺少 URL。', + 'webhook_invalid_payload_json' => '载荷模板不是有效的 JSON。', + 'url_not_allowed' => '请求 URL 指向私有或无法访问的地址,已被拦截。', + 'node_no_longer_exists' => '节点 :node_id 已不存在于该自动化中。', + 'no_trigger_connection' => '没有节点连接到触发器节点。', + 'fetch_rss_missing_url' => '抓取 RSS 节点缺少订阅源 URL。', + 'fetch_rss_request_failed' => 'RSS 订阅源请求失败。', + 'fetch_rss_malformed' => 'RSS 订阅源格式有误。', + 'http_missing_url' => 'HTTP 请求节点缺少 URL。', + 'http_request_exception' => 'HTTP 请求抛出了异常。', + 'http_request_failed' => 'HTTP 请求失败。', + 'http_items_path_not_array' => '条目路径未解析为列表。', + ], +]; diff --git a/lang/zh/billing.php b/lang/zh/billing.php new file mode 100644 index 00000000..c17249c3 --- /dev/null +++ b/lang/zh/billing.php @@ -0,0 +1,76 @@ + '账单', + + 'past_due_notice' => [ + 'title' => '付款已逾期', + 'description' => '请更新你的付款方式以保持订阅有效。', + 'cta' => '更新付款方式', + ], + + 'annual_banner' => [ + 'title' => '免费获得 2 个月', + 'description' => '切换到年付,每月支付更少——套餐不变,其他一切照旧。', + 'cta' => '升级到年付', + ], + + 'subscribe' => [ + 'billed_monthly' => '按月计费', + 'billed_yearly' => '按年计费', + 'prices' => [ + 'workspace' => ['monthly' => '$12', 'yearly_per_month' => '$10', 'yearly' => '$120'], + ], + ], + + 'plan' => [ + 'title' => '套餐', + 'description' => '管理你的订阅套餐。', + 'label' => '套餐', + 'workspaces' => '{1}:count 个工作区|[2,*]:count 个工作区', + 'per_workspace' => '每个工作区', + 'price' => '价格', + 'month' => '月', + 'trial' => '试用', + 'active' => '有效', + 'past_due' => '已逾期', + 'cancelling' => '取消中', + 'trial_ends' => '试用结束', + ], + + 'subscription' => [ + 'title' => '订阅', + 'description' => '管理你的付款方式、账单信息和订阅。', + 'payment_method' => '付款方式', + 'no_payment_method' => '尚未添加付款方式。', + 'expires_on' => '有效期至 :month/:year', + 'manage_label' => '订阅', + 'manage_stripe' => '在 Stripe 上管理', + ], + + 'invoices' => [ + 'title' => '发票', + 'description' => '下载你过往的发票。', + 'empty' => '未找到发票', + 'paid' => '已支付', + ], + + 'flash' => [ + 'plan_changed' => '你现在使用的是 :plan 套餐。', + 'switched_to_yearly' => '你现在已切换为按年计费。', + 'cannot_manage' => '只有账户所有者才能管理账单。', + 'credits_exhausted' => 'AI 额度已用完——你每月 :limit 的额度已用尽。请升级套餐或等到下个月。', + 'subscription_required' => '使用 AI 功能需要有效的订阅。', + ], + + 'processing' => [ + 'page_title' => '处理中…', + 'title' => '正在处理你的订阅', + 'description' => '正在为你设置账户,请稍候。这只需片刻。', + 'success_title' => '一切就绪!', + 'success_description' => '你的订阅已生效。正在为你跳转到工作区…', + 'cancelled_title' => '结账已取消', + 'cancelled_description' => '你的结账已取消,未产生任何费用。', + 'retry' => '重试', + ], +]; diff --git a/lang/zh/brands.php b/lang/zh/brands.php new file mode 100644 index 00000000..56af5fb5 --- /dev/null +++ b/lang/zh/brands.php @@ -0,0 +1,39 @@ + '新建品牌', + 'no_brands_yet' => '暂无品牌', + 'no_brands_description' => '创建品牌,按客户或项目整理你的社交账号', + 'accounts_count' => ':count 个账号', + + 'create' => [ + 'title' => '创建品牌', + 'description' => '为你的品牌命名,以便分组社交账号', + 'name' => '品牌名称', + 'name_placeholder' => '例如 Acme Corp、个人', + 'submit' => '创建品牌', + 'submitting' => '创建中…', + ], + + 'edit' => [ + 'title' => '编辑品牌', + 'description' => '更新此品牌的名称', + 'name' => '品牌名称', + 'name_placeholder' => '例如 Acme Corp、个人', + 'submit' => '保存更改', + 'submitting' => '保存中…', + ], + + 'delete' => [ + 'title' => '删除品牌', + 'description' => '确定要删除此品牌吗?社交账号将被取消分配,但不会被删除。', + 'confirm' => '删除', + 'cancel' => '取消', + ], + + 'flash' => [ + 'created' => '品牌创建成功!', + 'updated' => '品牌更新成功!', + 'deleted' => '品牌删除成功!', + ], +]; diff --git a/lang/zh/calendar.php b/lang/zh/calendar.php new file mode 100644 index 00000000..599a8028 --- /dev/null +++ b/lang/zh/calendar.php @@ -0,0 +1,12 @@ + '日历', + 'today' => '今天', + 'day' => '日', + 'week' => '周', + 'month' => '月', + 'new_post' => '新建帖子', + 'no_content' => '无内容', + 'more' => '还有 :count 项', +]; diff --git a/lang/zh/comments.php b/lang/zh/comments.php new file mode 100644 index 00000000..c124cfea --- /dev/null +++ b/lang/zh/comments.php @@ -0,0 +1,18 @@ + '写下评论…', + 'reply_placeholder' => '写下回复…', + 'reply' => '回复', + 'edit' => '编辑', + 'delete' => '删除', + 'edited' => '已编辑', + 'save' => '保存', + 'cancel' => '取消', + 'send' => '发送', + 'replying_to' => '正在回复 :name', + 'empty' => '暂无评论,快来开启对话吧。', + 'load_more' => '加载更早的评论', + 'today' => '今天', + 'yesterday' => '昨天', +]; diff --git a/lang/zh/common.php b/lang/zh/common.php new file mode 100644 index 00000000..b6298fc5 --- /dev/null +++ b/lang/zh/common.php @@ -0,0 +1,59 @@ + '返回', + + 'confirm_modal' => [ + 'cannot_be_undone' => '此操作无法撤销。', + 'type' => '输入', + 'to_confirm' => '以确认。', + 'copy_to_clipboard' => '复制到剪贴板', + 'delete_keyword' => 'delete', + ], + + 'photo_upload' => [ + 'upload' => '上传', + 'uploading' => '上传中…', + 'remove' => '移除照片', + 'hint' => '推荐:正方形图片,最大 2 MB。', + ], + + 'timezone' => [ + 'select' => '选择时区', + 'search' => '搜索时区…', + 'empty' => '未找到时区', + ], + + 'date_picker' => [ + 'select' => '选择日期', + ], + + 'date_range_picker' => [ + 'placeholder' => '选择日期范围', + 'today' => '今天', + 'yesterday' => '昨天', + 'last_7_days' => '过去 7 天', + 'last_30_days' => '过去 30 天', + 'last_3_months' => '过去 3 个月', + 'last_6_months' => '过去 6 个月', + 'last_12_months' => '过去 12 个月', + 'this_month' => '本月', + 'last_month' => '上月', + 'year_to_date' => '今年至今', + 'last_year' => '去年', + ], + + 'cancel' => '取消', + 'clear' => '清除', + 'close' => '关闭', + 'loading_more' => '加载更多…', + + 'actions' => [ + 'copy' => '复制', + 'copied' => '已复制', + 'copy_failed' => '复制到剪贴板失败', + ], +]; diff --git a/lang/zh/labels.php b/lang/zh/labels.php new file mode 100644 index 00000000..1a3e5be5 --- /dev/null +++ b/lang/zh/labels.php @@ -0,0 +1,54 @@ + '标签', + 'description' => '创建标签,用于整理和分类你的帖子', + 'search' => '搜索标签…', + 'new_label' => '新建标签', + 'no_labels_yet' => '暂无标签', + 'no_search_results' => '没有与搜索匹配的标签', + 'try_different_search' => '换一个关键词,或清除搜索。', + 'create_first_label' => '创建你的第一个标签', + 'table' => [ + 'name' => '名称', + 'created_at' => '创建时间', + ], + + 'actions' => [ + 'edit' => '编辑标签', + 'delete' => '删除标签', + ], + + 'create' => [ + 'title' => '创建标签', + 'description' => '为你的标签命名并选择一种颜色', + 'name' => '名称', + 'name_placeholder' => '输入标签名称…', + 'color' => '颜色', + 'submit' => '创建标签', + 'submitting' => '创建中…', + ], + + 'edit' => [ + 'title' => '编辑标签', + 'description' => '更新此标签的名称和颜色', + 'name' => '名称', + 'name_placeholder' => '输入标签名称…', + 'color' => '颜色', + 'submit' => '保存更改', + 'submitting' => '保存中…', + ], + + 'delete' => [ + 'title' => '删除标签', + 'description' => '确定要删除此标签吗?此操作无法撤销。', + 'confirm' => '删除', + 'cancel' => '取消', + ], + + 'flash' => [ + 'created' => '标签创建成功!', + 'updated' => '标签更新成功!', + 'deleted' => '标签删除成功!', + ], +]; diff --git a/lang/zh/mail.php b/lang/zh/mail.php new file mode 100644 index 00000000..6a624567 --- /dev/null +++ b/lang/zh/mail.php @@ -0,0 +1,22 @@ + [ + 'subject' => ':name 在 TryPost 上提到了你', + 'title' => ':name 提到了你', + 'intro' => ':name 在一条帖子评论中提到了你。', + 'cta' => '查看评论', + ], + + 'workspace_connections_disconnected' => [ + 'subject' => '{1} :workspace 工作区中有 :count 个账号需要重新连接|[2,*] :workspace 工作区中有 :count 个账号需要重新连接', + 'title' => '账号需要重新连接', + 'intro' => '你 :workspace 工作区中的以下社交账号已断开连接,需要重新连接:', + 'reasons_title' => '这可能是由于以下原因:', + 'reason_expired' => '访问令牌已过期', + 'reason_revoked' => '你在该平台上撤销了对 TryPost 的授权', + 'reason_changed' => '该平台更改了其身份验证要求', + 'reconnect_cta' => '请重新连接这些账号,以继续安排和发布帖子。', + 'button' => '重新连接账号', + ], +]; diff --git a/lang/zh/notifications.php b/lang/zh/notifications.php new file mode 100644 index 00000000..643c912f --- /dev/null +++ b/lang/zh/notifications.php @@ -0,0 +1,18 @@ + [ + 'title' => '你的帖子已就绪', + 'body' => 'AI 刚刚完成。点击查看并发布。', + ], + 'account_disconnected' => [ + 'title' => ':platform 账号已断开连接', + 'body' => ':account 需要重新连接', + ], + 'account_token_expired' => [ + 'title' => ':platform 账号需要重新连接', + 'body' => ':account 会话已过期——请重新连接以继续发帖', + ], +]; diff --git a/lang/zh/onboarding.php b/lang/zh/onboarding.php new file mode 100644 index 00000000..e9a11103 --- /dev/null +++ b/lang/zh/onboarding.php @@ -0,0 +1,41 @@ + '欢迎使用 TryPost', + 'description' => '告诉我们最能描述你或你业务的选项,以便我们为你定制体验。', + 'continue' => '继续', + 'personas' => [ + 'creator' => '内容创作者', + 'freelancer' => '自由职业者', + 'developer' => '开发者', + 'startup' => '初创公司', + 'agency' => '代理机构', + 'small_business' => '小型企业', + 'marketer' => '营销人员', + 'online_store' => '网店', + 'other' => '其他', + ], + 'goals_title' => '你使用 TryPost 的目标是什么?', + 'goals_description' => '选择所有符合的选项,我们会为你配置好 TryPost。', + 'goals' => [ + 'save_time' => '一次发布到所有平台,节省时间', + 'ai_content' => '借助 AI 更快地创建帖子', + 'plan_calendar' => '在日历上规划我的帖子', + 'stay_on_brand' => '让每一条帖子都符合品牌调性', + 'grow_audience' => '增长我的受众和互动', + 'drive_sales' => '获得更多流量和销量', + 'manage_clients' => '管理多个品牌或客户', + 'team_collaboration' => '与我的团队协作', + 'automate_api' => '通过 API、MCP 或代码自动发帖', + 'track_performance' => '查看我的帖子表现', + 'just_exploring' => '目前只是随便看看', + 'other' => '其他需求', + ], + 'connect' => [ + 'title' => '连接你的第一个平台', + 'description' => '至少关联一个社交账号即可开始排期。你可以随时添加更多。', + 'must_connect' => '请至少连接一个平台以继续。', + ], +]; diff --git a/lang/zh/pagination.php b/lang/zh/pagination.php new file mode 100644 index 00000000..4e8dea7c --- /dev/null +++ b/lang/zh/pagination.php @@ -0,0 +1,19 @@ + '« 上一页', + 'next' => '下一页 »', + +]; diff --git a/lang/zh/passwords.php b/lang/zh/passwords.php new file mode 100644 index 00000000..5a8effa6 --- /dev/null +++ b/lang/zh/passwords.php @@ -0,0 +1,22 @@ + '你的密码已重置。', + 'sent' => '我们已将密码重置链接发送到你的邮箱。', + 'throttled' => '请稍后再重试。', + 'token' => '此密码重置令牌无效。', + 'user' => '找不到使用该邮箱地址的用户。', + +]; diff --git a/lang/zh/posts.php b/lang/zh/posts.php new file mode 100644 index 00000000..d490c1cc --- /dev/null +++ b/lang/zh/posts.php @@ -0,0 +1,671 @@ + '帖子', + 'search' => '搜索帖子…', + 'all_posts' => '所有帖子', + 'new_post' => '新建帖子', + 'no_posts' => '未找到帖子', + 'no_search_results' => '没有与搜索匹配的帖子', + 'try_different_search' => '换一个关键词,或清除搜索。', + 'start_creating' => '先从创建你的第一条帖子开始吧。', + 'filter_by_label' => '按标签筛选', + 'label_search_placeholder' => '搜索标签…', + 'no_labels' => '未找到标签。', + 'clear_label_filter' => '清除标签筛选', + 'table' => [ + 'post' => '帖子', + 'status' => '状态', + 'content' => '内容', + 'platforms' => '平台', + 'labels' => '标签', + 'scheduled_at' => '日期', + 'actions' => '', + ], + 'manage_posts' => '管理你所有的帖子', + 'delete_confirm' => '确定要删除此帖子吗?', + 'by' => '作者', + + 'actions' => [ + 'view' => '查看帖子', + 'delete' => '删除', + 'duplicate' => '复制', + 'copy_id' => '复制 ID', + 'copied' => 'ID 已复制到剪贴板', + ], + + 'form' => [ + 'post_type' => '帖子类型', + 'board' => '图板', + 'select_board' => '选择一个图板', + 'search_board' => '搜索图板…', + 'no_board_found' => '未找到图板', + 'media' => '媒体', + 'min' => '最少', + 'uploading' => '上传中…', + 'drop_to_upload' => '拖放以上传', + 'drag_and_drop' => '拖放或点击上传', + 'photos_and_videos' => '照片和视频', + 'photos_only' => '仅照片', + 'videos_only' => '仅视频', + 'drag_to_reorder' => '拖动以重新排序', + 'caption' => '文案', + 'write_caption' => '撰写你的文案…', + 'content_exceeds_platform' => ':platform:超出 :over 个字符(上限 :limit)。', + 'tiktok' => [ + 'settings' => 'TikTok 设置', + 'variant_label' => '帖子类型', + 'variant' => [ + 'video' => '视频', + 'photo' => '照片轮播', + ], + 'posting_to' => '发布到', + 'privacy_level' => '谁可以看到这个视频?', + 'privacy_placeholder' => '选择谁可以查看此帖子', + 'privacy' => [ + 'public' => '所有人可见', + 'friends' => '互相关注的好友', + 'followers' => '粉丝', + 'private' => '仅自己可见', + 'private_disabled_branded' => '品牌内容的可见性不能设为私密。', + ], + 'privacy_hint' => '可用选项取决于你的 TikTok 账号设置。', + 'auto_add_music' => '自动添加音乐', + 'auto_add_music_hint' => '此功能仅对照片可用。它会添加一段默认音乐,你之后可以更换。', + 'yes' => '是', + 'no' => '否', + 'allow_users' => '允许用户:', + 'comments' => '评论', + 'duet' => '合拍', + 'stitch' => '拼接', + 'is_aigc' => '由 AI 制作的视频', + 'disclose' => '披露视频内容', + 'disclose_hint' => '开启以披露此视频是为换取某种有价值的回报而推广商品或服务。你的视频可能推广你自己、第三方,或两者兼有。', + 'promotional_organic_title' => '你的照片/视频将被标注为“推广内容”。', + 'promotional_paid_title' => '你的照片/视频将被标注为“付费合作”。', + 'promotional_description' => '视频发布后将无法更改。', + 'compliance_incomplete' => '你需要说明你的内容推广的是你自己、第三方,还是两者兼有。', + 'privacy_required' => '发布时必须设置 TikTok 隐私级别。', + 'branded_cleared_private' => '由于品牌内容不能设为私密,隐私设置已被清除。', + 'interaction_disabled_by_creator' => '已在你的 TikTok 账号设置中关闭', + 'max_duration_exceeded' => '视频时长为 :duration 秒,但此账号只能发布最长 :max 秒的视频。', + 'processing_hint' => '发布后,内容可能需要几分钟才能处理完成并出现在你的 TikTok 主页上。', + 'brand_organic' => '你的品牌', + 'brand_organic_hint' => '你在推广你自己或你自己的品牌。此视频将被归类为品牌自有内容。', + 'brand_content' => '品牌内容', + 'brand_content_hint' => '你在推广其他品牌或第三方。此视频将被归类为品牌合作内容。', + 'compliance' => [ + 'agree' => '发布即表示你同意 TikTok 的', + 'music_usage' => '音乐使用确认', + 'and' => '和', + 'branded_policy' => '品牌内容政策', + ], + ], + 'instagram' => [ + 'settings' => 'Instagram 设置', + 'posting_to' => '发布到', + 'variant_label' => '帖子类型', + 'variant' => [ + 'feed' => '信息流帖子', + 'reel' => 'Reel', + 'story' => '快拍', + ], + 'aspect_label' => '宽高比', + 'aspect' => [ + 'square' => '正方形(1:1)', + 'portrait' => '竖版(4:5)', + 'landscape' => '横版(16:9)', + 'original' => '原始比例', + ], + ], + 'facebook' => [ + 'settings' => 'Facebook 设置', + 'posting_to' => '发布到', + 'variant_label' => '帖子类型', + 'variant' => [ + 'post' => '帖子', + 'reel' => 'Reel', + 'story' => '快拍', + ], + 'aspect_label' => '宽高比', + 'aspect' => [ + 'square' => '正方形(1:1)', + 'portrait' => '竖版(4:5)', + 'landscape' => '横版(16:9)', + 'original' => '原始比例', + ], + ], + 'linkedin' => [ + 'settings' => 'LinkedIn 设置', + 'settings_page' => 'LinkedIn 页面设置', + 'posting_to' => '发布到', + 'document_title' => '文档标题', + 'document_title_placeholder' => '显示在你的 PDF 文档帖子上', + ], + 'pinterest' => [ + 'settings' => 'Pinterest 设置', + 'posting_to' => '发布到', + 'variant_label' => 'Pin 类型', + 'variant' => [ + 'pin' => 'Pin', + 'video_pin' => '视频 Pin', + 'carousel' => '轮播', + ], + 'board' => '图板', + 'select_board' => '选择一个图板', + 'no_boards' => '未找到 Pinterest 图板。请先在你的 Pinterest 账号中创建一个。', + 'search_board' => '搜索图板…', + 'no_board_found' => '没有与搜索匹配的图板。', + 'board_required' => '请选择一个 Pinterest 图板以发布此帖子。', + ], + 'discord' => [ + 'settings' => 'Discord 设置', + 'posting_to' => '发布到', + 'channel' => '频道', + 'select_channel' => '选择一个频道', + 'loading_channels' => '正在加载频道…', + 'search_channel' => '搜索频道…', + 'no_channels' => '未找到频道。', + 'channel_required' => '请选择一个 Discord 频道以发布此帖子。', + 'mentions' => '提及', + 'search_mention' => '提及某个角色或成员…', + 'embeds' => '嵌入内容', + 'embed' => '嵌入内容', + 'add_embed' => '添加嵌入内容', + 'embed_title' => '嵌入标题', + 'embed_description' => '嵌入描述', + 'embed_url' => '嵌入 URL', + 'embed_image' => '图片 URL', + 'embed_color' => '颜色', + ], + 'warnings' => [ + 'no_variant' => '请选择一个帖子类型以继续。', + 'requires_media' => '此帖子类型至少需要一张图片或一个视频。', + 'max_files_exceeded' => '此帖子类型最多接受 :max 个媒体文件(你当前有 :current 个)。', + 'min_files_required' => '此帖子类型至少需要 :min 个媒体文件(你当前有 :current 个)。', + 'no_video_allowed' => '此帖子类型不接受视频。', + 'no_image_allowed' => '此帖子类型仅接受视频。', + 'no_document_allowed' => '此帖子类型不接受 PDF 文档。', + 'no_mixed_media' => '图片和视频不能出现在同一条帖子中。', + 'document_not_alone' => 'PDF 必须单独发布,不能附带其他图片或视频。', + 'gif_not_allowed' => '此平台不接受 GIF。请移除 GIF 或改选其他平台。', + 'image_too_large' => '图片超出此帖子类型的 :max 上限(你的为 :current)。', + 'video_too_large' => '视频超出此帖子类型的 :max 上限(你的为 :current)。', + 'document_too_large' => 'PDF 超出此帖子类型的 :max 上限(你的为 :current)。', + 'video_too_long' => '视频时长为 :current,但此帖子类型最多允许 :max。', + 'aspect_ratio_too_narrow' => '宽高比 :current 对此帖子类型来说太高(最小 :min)。', + 'aspect_ratio_too_wide' => '宽高比 :current 对此帖子类型来说太宽(最大 :max)。', + ], + ], + + 'status' => [ + 'pending' => '等待中', + 'draft' => '草稿', + 'scheduled' => '已排期', + 'publishing' => '发布中', + 'retrying' => '重试中', + 'published' => '已发布', + 'partially_published' => '部分发布', + 'failed' => '已失败', + ], + + 'descriptions' => [ + 'draft' => '等待排期的帖子', + 'scheduled' => '已排期待发布的帖子', + 'published' => '已经发布的帖子', + ], + + 'ai' => [ + 'generate' => [ + 'button_tooltip' => '用 AI 生成', + 'title' => '用 AI 生成帖子', + 'description' => '描述这条帖子的主题。AI 会结合你的品牌背景来撰写。', + 'prompt_label' => '这条帖子讲的是什么?', + 'prompt_placeholder' => '例如 宣布我们面向轮播的全新图像生成功能', + 'preview_label' => '预览', + 'start' => '生成', + 'apply' => '使用此内容', + 'retry' => '重试', + 'cancel' => '取消', + ], + 'review' => [ + 'button_tooltip' => '用 AI 校对', + 'title' => '用 AI 校对帖子', + 'description' => 'AI 会检查语法、拼写和表达清晰度。采纳你认同的建议。', + 'loading' => '正在校对你的文字…', + 'no_issues' => '未发现问题,看起来不错。', + 'original' => '原文', + 'suggestion' => '建议', + 'apply' => '应用', + 'apply_all' => '全部应用', + 'applied' => '已应用', + 'cancel' => '取消', + ], + 'image_regenerate' => [ + 'button' => '调整', + 'title' => '调整 AI 图片', + 'description' => '描述需要修正的地方。新图片会替换当前图片,并保留其在轮播中的位置。', + 'instruction_label' => '指令', + 'instruction_placeholder' => '例如 修正标题中的错别字,并让背景更亮一些。', + 'processing' => '正在重新生成图片…这可能需要几秒钟。', + 'submit' => '重新生成图片', + 'cancel' => '取消', + 'success' => '图片已更新。新版本已替换帖子中的旧版本。', + 'fallback_title' => '优化这张图片的文案', + 'errors' => [ + 'required' => '指令为必填项。', + 'start_failed' => '无法启动重新生成。', + 'unavailable' => '目前无法重新生成此图片。', + 'timeout' => '重新生成的时间比预期更长。请稍后重试。', + 'media_not_found' => '未找到该媒体项。', + 'not_ai_media' => '只有 AI 生成的媒体才能重新生成。', + ], + ], + 'templates' => [ + 'image_card' => [ + 'name' => '图片帖子', + 'description' => '带标题和文案的 AI 图片。', + ], + 'carousel' => [ + 'name' => '轮播', + 'description' => '带文案的多张幻灯片轮播。', + ], + 'tweet_card' => [ + 'name' => '推文卡片', + 'description' => '将你的帖子设计成 X/Twitter 帖子的样式。', + ], + 'tweet_card_image' => [ + 'name' => '带照片的推文卡片', + 'description' => '将你的帖子呈现为叠加在模糊照片上的 X/Twitter 卡片。', + ], + ], + ], + + 'show' => [ + 'title' => '帖子详情', + 'edit' => '编辑', + 'back' => '返回', + 'no_content' => '无文案', + 'platforms' => '平台', + 'no_platforms' => '未选择任何平台。', + 'view_on_platform' => '在平台上查看', + 'published_on' => '发布于 :date', + 'scheduled_for' => '排期于 :date', + 'draft' => '草稿', + 'status_pending' => '等待中', + 'metrics' => '指标', + 'metrics_loading' => '正在加载指标…', + 'metrics_unavailable' => '此平台暂无可用指标。', + 'metrics_empty' => '未返回任何指标。', + ], + + 'edit' => [ + 'title' => '编辑帖子', + 'view_title' => '查看帖子', + 'labels' => '标签', + 'no_labels' => '尚未创建任何标签', + 'schedule' => '排期', + 'pick_time' => '选择时间', + 'pick_time_past' => '请选择未来的日期和时间。', + 'post_now' => '立即发布', + 'time' => '时间', + 'cancel' => '取消', + 'delete' => '删除', + 'schedule_for' => '排期至', + 'schedule_date' => '排期日期', + 'unschedule' => '取消排期', + 'saving' => '保存中…', + 'saved' => '已保存', + 'draft' => '草稿', + 'media' => '媒体', + 'add_media' => '添加媒体', + 'caption' => '文案', + 'caption_placeholder' => '撰写你的文案…', + 'compose_title' => '创建帖子', + 'compose_subtitle' => '撰写你的内容并添加媒体', + 'preview_empty' => [ + 'title' => '未选择平台', + 'description' => '选择一个要发布的平台以查看预览。', + ], + 'drop_zone_title' => '添加媒体', + 'drop_zone_subtitle' => '拖放文件或点击浏览', + 'add' => '添加', + 'publish_to' => '发布到', + 'organize' => '整理', + 'signatures' => '签名', + 'view_on_platform' => '在平台上查看', + 'platform_status' => '平台状态', + 'compliance_incomplete' => '部分平台设置不完整,或与所附的媒体不兼容。', + 'compliance' => [ + 'requires_content_or_media' => '添加文字或媒体以发布。', + 'requires_media' => '添加图片或视频以在此发布。', + 'too_many_files' => '此格式最多允许 :max 个文件。', + 'too_few_files' => '此格式至少需要添加 :min 个文件。', + 'no_videos' => '此格式仅允许图片。', + 'no_images' => '此格式仅允许视频。', + 'no_mixed_media' => '图片和视频不能出现在同一条帖子中。', + 'no_gifs' => '此处不支持 GIF。', + 'no_documents' => '此格式不支持 PDF 文档。', + 'document_not_alone' => 'PDF 必须单独发布,不能附带其他图片或视频。', + 'video_too_large' => '视频超出此平台的大小上限。', + 'video_too_long' => '此格式的视频时长必须少于 :seconds 秒。', + 'image_too_large' => '图片超出此平台的大小上限。', + 'document_too_large' => 'PDF 超出此平台的大小上限。', + 'aspect_ratio_invalid' => '此格式不支持该宽高比。', + 'no_content_type' => '请为此平台选择一种内容类型。', + 'requires_text' => '添加文字——此格式需要一个标题。', + ], + 'publishing' => '发布中…', + 'publishing_overlay_title' => '你的帖子正在发布', + 'publishing_overlay_subtitle' => '这可能需要片刻。你可以放心离开此页面。', + 'scheduled_overlay_title' => '此帖子已排期', + 'scheduled_overlay_subtitle' => '已排期于 :date。若要修改,请先取消排期。', + 'unschedule_cta' => '取消排期以编辑', + + 'tabs' => [ + 'preview' => '预览', + 'channels' => '渠道', + 'comments' => '评论', + 'comments_empty' => '暂无评论。', + ], + + 'media_picker' => [ + 'title' => '从素材库选择', + 'search' => '搜索媒体…', + 'empty' => '你的素材库中还没有媒体', + 'cancel' => '取消', + 'add' => '添加', + 'add_count' => '添加 :count 个', + ], + + 'emoji_picker' => [ + 'search' => '搜索表情', + 'empty' => '未找到表情', + 'recent' => '常用', + 'smileys' => '笑脸与情绪', + 'people' => '人物与身体', + 'nature' => '动物与自然', + 'food' => '食物与饮品', + 'activities' => '活动', + 'travel' => '旅行与地点', + 'objects' => '物品', + 'symbols' => '符号', + 'flags' => '旗帜', + ], + + 'status' => [ + 'pending' => '等待中', + 'scheduled' => '已排期', + 'published' => '已发布', + 'publishing' => '发布中…', + 'retrying' => '重试中…', + 'failed' => '已失败', + ], + + 'delete_modal' => [ + 'title' => '删除帖子', + 'description' => '确定要删除此帖子吗?此操作无法撤销。', + 'action' => '删除', + 'cancel' => '取消', + ], + + 'sync_enable' => [ + 'title' => '启用同步?', + 'description' => '所有平台将共享相同的内容。对单个平台所做的任何自定义修改都将被替换为当前内容。', + 'cancel' => '取消', + 'action' => '启用同步', + ], + + 'sync_disable' => [ + 'title' => '关闭同步?', + 'description' => '每个平台将保留其当前内容,但今后的修改只会应用于你正在编辑的平台。', + 'customize_note' => '你将能够为每个平台单独自定义内容。', + 'cancel' => '取消', + 'action' => '关闭同步', + ], + + 'platforms_dialog' => [ + 'title' => '选择平台', + 'description' => '选择要将此帖子发布到哪些平台。', + ], + + 'signatures_modal' => [ + 'search' => '搜索签名…', + 'no_results' => '未找到签名。', + ], + + 'validation' => [ + 'select_board' => '选择一个图板', + 'images_not_supported' => '不支持图片', + 'videos_not_supported' => '不支持视频', + 'max_images' => '最多 :count 张图片', + 'requires_media' => '需要媒体', + 'requires_content' => '需要文字内容', + 'exceeded' => '超出 :count', + 'does_not_support_images' => ':platform 不支持图片', + 'supports_up_to_images' => ':platform 最多支持 :count 张图片', + 'does_not_support_videos' => ':platform 不支持视频', + ], + ], + + 'content_types' => [ + 'instagram_feed' => [ + 'label' => '信息流帖子', + 'description' => '显示在你的信息流和主页上', + ], + 'instagram_reel' => [ + 'label' => 'Reel', + 'description' => '最长 90 秒的短视频', + ], + 'instagram_story' => [ + 'label' => '快拍', + 'description' => '24 小时后消失', + ], + 'linkedin_post' => [ + 'label' => '帖子', + 'description' => '标准帖子——单图、多图、视频或 PDF', + ], + 'linkedin_page_post' => [ + 'label' => '帖子', + 'description' => '标准帖子——单图、多图、视频或 PDF', + ], + 'facebook_post' => [ + 'label' => '帖子', + 'description' => '发布在你主页上的标准帖子', + ], + 'facebook_reel' => [ + 'label' => 'Reel', + 'description' => '最长 90 秒的短视频', + ], + 'facebook_story' => [ + 'label' => '快拍', + 'description' => '竖版视频快拍,最长 60 秒', + ], + 'tiktok_video' => [ + 'label' => '视频', + 'description' => '短视频内容', + ], + 'tiktok_photo' => [ + 'label' => '照片轮播', + 'description' => '最多 35 张照片,组成可滑动的轮播', + ], + 'youtube_short' => [ + 'label' => 'Short', + 'description' => '最长 60 秒的竖版视频', + ], + 'x_post' => [ + 'label' => '帖子', + 'description' => '带文字和媒体的推文', + ], + 'threads_post' => [ + 'label' => '帖子', + 'description' => '可附带媒体的文字帖子', + ], + 'pinterest_pin' => [ + 'label' => 'Pin', + 'description' => '标准图片 Pin', + ], + 'pinterest_video_pin' => [ + 'label' => '视频 Pin', + 'description' => '视频 Pin(4 秒 - 15 分钟)', + ], + 'pinterest_carousel' => [ + 'label' => '轮播', + 'description' => '多图轮播(2-5 张图片)', + ], + 'bluesky_post' => [ + 'label' => '帖子', + 'description' => '可附带图片的文字帖子', + ], + 'mastodon_post' => [ + 'label' => '帖子', + 'description' => '可附带媒体的文字帖子', + ], + 'telegram_post' => [ + 'label' => '帖子', + 'description' => '可附带媒体的文字帖子', + ], + 'discord_message' => [ + 'label' => '消息', + 'description' => '发送到 Discord 频道的消息,可附带媒体和嵌入内容', + ], + ], + + 'platforms' => [ + 'linkedin' => 'LinkedIn', + 'linkedin-page' => 'LinkedIn 页面', + 'x' => 'X', + 'tiktok' => 'TikTok', + 'youtube' => 'YouTube Shorts', + 'facebook' => 'Facebook 主页', + 'instagram' => 'Instagram', + 'threads' => 'Threads', + 'pinterest' => 'Pinterest', + 'bluesky' => 'Bluesky', + 'mastodon' => 'Mastodon', + ], + + 'flash' => [ + 'scheduled' => '帖子排期成功!', + 'deleted' => '帖子删除成功!', + 'duplicated' => '帖子已复制为草稿。', + 'cannot_edit_finalized' => '此帖子已处理完毕,无法重新发布。请复制后再试。', + 'cannot_delete_published' => '已发布的帖子无法删除。', + 'connect_first' => '创建帖子前,请先至少连接一个社交平台。', + ], + + 'errors' => [ + 'account_disconnected' => '社交账号已断开连接', + 'account_inactive' => '社交账号已停用', + 'account_token_expired' => '社交账号会话已过期——请重新连接', + ], + + 'delete' => [ + 'title' => '删除帖子?', + 'description' => '此操作无法撤销。该帖子及其所有媒体都将被永久移除。', + 'confirm' => '是的,删除', + 'cancel' => '取消', + ], + + 'create' => [ + 'title' => '创建一条新帖子', + 'description' => '选择你想如何开始。', + 'scratch_title' => '从头开始', + 'scratch_description' => '打开一条空白帖子,自己撰写全部内容。', + 'ai_title' => '用 AI 生成', + 'ai_description' => '描述你想要的内容,由 AI 为你生成。', + 'ai_configure_description' => '选择一种格式,并描述你想创建的帖子。', + 'ai_pick_template_description' => '为你的 AI 生成帖子选择一种风格。', + 'template_title' => '使用模板', + 'template_description' => '从我们精选的模板中挑选并自定义。', + 'coming_soon' => '敬请期待', + + 'preview' => [ + 'image_title' => '图片标题', + 'image_body' => '图片正文', + ], + + 'steps' => [ + 'template_picker_title' => '选择一种风格', + 'format_title' => '选择一种格式', + 'format_description' => '选择你想创建的帖子类型。', + 'account_title' => '选择一个账号', + 'account_description' => '选择要发布到的社交账号。', + 'media_title' => '媒体选项', + 'media_carousel' => '要多少张幻灯片?', + 'media_optional' => '包含图片吗?', + 'media_optional_label' => '要多少张图片?', + 'media_none' => '无', + 'media_count_label' => '图片数量', + 'prompt_title' => '描述你的帖子', + 'prompt_label' => '这条帖子讲的是什么?', + 'prompt_placeholder' => '例如 为 Instagram 宣布我们全新的轮播功能', + 'preview_error' => '出了点问题,请重试。', + 'loading_page_title' => '正在生成你的帖子', + 'loading_eta' => '预计时间:约 :minutes。', + 'loading_eta_minute_one' => '1 分钟', + 'loading_eta_minute_other' => ':count 分钟', + 'loading_leave_title' => '你可以继续工作。', + 'loading_leave_body' => '帖子准备就绪后,我们会通知你。', + 'loading_leave_cta' => '前往日历', + 'loading_create_another_cta' => '再创建一条帖子', + 'loading_tip_credits' => '每张 AI 图片大约消耗 15 个额度。', + 'loading_tip_edit' => '帖子准备就绪后,你将可以编辑一切。', + 'loading_tip_draft' => '生成的帖子会进入你的草稿。', + 'loading_tip_brand' => '调整你的品牌设置,以影响今后的帖子。', + 'loading_tip_carousel' => '轮播会为每张上传的图片生成一张幻灯片。', + 'loading_tip_quality' => '图片质量已设为在速度与成本之间取得平衡。', + 'create' => '创建帖子', + 'back' => '返回', + 'next' => '继续', + 'cancel' => '取消', + 'discard' => '放弃', + 'retry' => '重试', + 'no_platforms' => '没有已连接的账号', + 'connect_first' => '请至少连接一个社交账号以使用 AI 生成。', + 'no_account_for_template' => '连接一个兼容的账号以使用此模板。', + + 'format' => [ + 'instagram_feed' => 'Instagram 信息流帖子', + 'instagram_carousel' => 'Instagram 轮播', + 'linkedin_post' => 'LinkedIn 帖子', + 'linkedin_page_post' => 'LinkedIn 页面帖子', + 'x_post' => 'X 帖子', + 'bluesky_post' => 'Bluesky 帖子', + 'threads_post' => 'Threads 帖子', + 'mastodon_post' => 'Mastodon 帖子', + 'telegram_post' => 'Telegram 帖子', + 'discord_message' => 'Discord 消息', + 'facebook_post' => 'Facebook 帖子', + 'pinterest_pin' => 'Pinterest Pin', + 'instagram_story' => 'Instagram 快拍', + 'facebook_story' => 'Facebook 快拍', + ], + ], + ], + + 'templates' => [ + 'browser_title' => '选择一个模板', + 'browser_description' => '从精选模板开始,并进行调整。', + 'search_placeholder' => '搜索模板…', + 'no_search_results' => '没有与搜索匹配的模板', + 'try_different_search' => '换一个关键词,或清除搜索。', + 'slides_count' => '{count} 张幻灯片|{count} 张幻灯片', + 'all_platforms' => '所有平台', + 'platform_search_placeholder' => '搜索平台…', + 'no_platform_match' => '没有匹配的平台。', + 'use_this' => '使用此模板', + 'no_templates' => '暂无可用模板。', + 'applying' => '正在应用模板…', + 'category' => [ + 'product_launch' => '产品发布', + 'promotion' => '促销', + 'educational' => '知识科普', + 'behind_the_scenes' => '幕后花絮', + 'testimonial' => '用户好评', + 'industry_tip' => '行业贴士', + 'event' => '活动', + 'engagement' => '互动', + ], + ], +]; diff --git a/lang/zh/settings.php b/lang/zh/settings.php new file mode 100644 index 00000000..fd581bc5 --- /dev/null +++ b/lang/zh/settings.php @@ -0,0 +1,356 @@ + '设置', + 'description' => '管理你的个人资料和账户设置', + + 'hub' => [ + 'title' => '设置', + 'description' => '选择你想管理的内容。', + 'profile' => [ + 'title' => '个人资料', + 'description' => '更新你的个人信息、密码和通知偏好。', + ], + 'workspace' => [ + 'title' => '工作区', + 'description' => '配置你的工作区、品牌、成员和 API 密钥。', + ], + 'account' => [ + 'title' => '账户', + 'description' => '管理你的账户信息、用量和账单。', + ], + ], + + 'nav' => [ + 'profile' => '个人资料', + 'authentication' => '身份验证', + 'workspace' => '工作区', + 'members' => '成员', + 'notifications' => '通知', + 'billing' => '账单', + ], + + 'notifications' => [ + 'title' => '通知偏好', + 'heading' => '邮件通知', + 'description' => '选择你想接收哪些邮件通知', + 'post_published' => '帖子已发布', + 'post_published_description' => '当你的帖子成功发布时收到邮件', + 'post_failed' => '帖子发布失败', + 'post_failed_description' => '当你的帖子发布失败时收到邮件', + 'account_disconnected' => '账号已断开连接', + 'account_disconnected_description' => '当某个社交账号断开连接时收到邮件', + 'save' => '保存偏好', + ], + + 'profile' => [ + 'title' => '个人资料设置', + 'photo_heading' => '头像', + 'photo_description' => '上传一张头像', + 'heading' => '个人信息', + 'description' => '更新你的姓名和邮箱地址', + 'avatar' => '头像', + 'name' => '姓名', + 'name_placeholder' => '全名', + 'email' => '邮箱地址', + 'email_placeholder' => '邮箱地址', + 'email_unverified' => '你的邮箱地址尚未验证。', + 'resend_verification' => '点击此处重新发送验证邮件。', + 'verification_sent' => '新的验证链接已发送至你的邮箱地址。', + 'save' => '保存', + ], + + 'authentication' => [ + 'title' => '身份验证', + 'page_title' => '身份验证设置', + 'sessions' => [ + 'title' => '活动会话', + 'description' => '如果你发现任何可疑情况,请退出其他设备的登录。', + 'unknown_browser' => '未知浏览器', + 'unknown_ip' => '未知 IP', + 'on' => '于', + 'active_now' => '当前活动', + 'log_out_others' => '退出其他设备', + 'modal_title' => '退出其他设备', + 'modal_description_password' => '输入你当前的密码,以确认你要退出其他浏览器会话。', + 'modal_description_email' => '输入你的邮箱地址,以确认你要退出其他浏览器会话。', + 'password_placeholder' => '当前密码', + 'email_placeholder' => '你的账户邮箱', + 'cancel' => '取消', + 'submit' => '退出其他设备', + 'email_mismatch' => '该邮箱地址与你的账户不匹配。', + 'flash_logged_out' => '你已从其他设备退出登录。', + ], + 'password' => [ + 'update_title' => '更新密码', + 'set_title' => '设置密码', + 'update_description' => '确保你的账户使用一个足够长且随机的密码以保持安全。', + 'set_description' => '设置密码,这样无需通过已连接的第三方即可登录。', + 'current_password' => '当前密码', + 'new_password' => '新密码', + 'confirm_password' => '确认密码', + 'save' => '保存密码', + 'set' => '设置密码', + ], + 'providers' => [ + 'title' => '已连接的账号', + 'description' => '使用这些已连接的第三方更快登录。', + 'connected' => '已连接', + 'not_connected' => '未连接', + 'connect' => '连接', + 'disconnect' => '断开连接', + 'flash_disconnected' => ':provider 已成功断开连接。', + 'flash_connected' => ':provider 已成功连接。', + 'flash_already_linked' => '该 :provider 账号已关联到另一个用户。', + 'flash_cannot_disconnect' => '你无法断开唯一的登录方式。请先设置密码或连接另一个第三方。', + ], + ], + + 'delete_account' => [ + 'heading' => '删除账户', + 'description' => '删除你的账户及其所有资源', + 'warning' => '警告', + 'warning_message' => '请谨慎操作,此操作无法撤销。', + 'button' => '删除账户', + 'modal_title' => '确定要删除你的账户吗?', + 'modal_description_password' => '账户一经删除,其所有资源和数据也将被永久删除。请输入你的密码以确认。', + 'modal_description_email' => '账户一经删除,其所有资源和数据也将被永久删除。请输入你的邮箱地址 :email 以确认。', + 'password' => '密码', + 'password_placeholder' => '密码', + 'email_placeholder' => '你的账户邮箱', + 'email_mismatch' => '该邮箱地址与你的账户不匹配。', + 'cancel' => '取消', + 'confirm' => '删除账户', + ], + + 'workspace' => [ + 'tabs' => [ + 'workspace' => '工作区', + 'brand' => '品牌', + 'users' => '成员', + 'api_keys' => 'API 密钥', + ], + 'title' => '工作区设置', + 'logo_heading' => '工作区徽标', + 'logo_description' => '为你的工作区上传一个徽标', + 'heading' => '工作区名称', + 'description' => '更新你的工作区名称', + 'members_heading' => '成员', + 'members_description' => '管理工作区成员和邀请', + 'name' => '名称', + 'name_placeholder' => '我的工作区', + 'save' => '保存', + ], + + 'brand' => [ + 'title' => '品牌', + 'description' => '为 AI 生成的内容配置你的品牌形象。', + 'name' => '工作区名称', + 'name_placeholder' => '我的品牌', + 'website' => '网站', + 'website_placeholder' => 'https://yourbrand.com', + 'brand_description' => '描述', + 'brand_description_placeholder' => '介绍一下你的品牌、你做什么,以及你的受众是谁……', + 'voice' => '品牌语气', + 'voice_description' => '选择那些定义你内容风格的特质。', + 'voice_group' => [ + 'pov' => '视角', + 'formality' => '正式程度', + 'energy' => '活力', + 'humor' => '幽默', + 'attitude' => '态度', + 'warmth' => '亲和力', + 'confidence' => '自信', + 'style' => '风格', + ], + 'voice_trait' => [ + 'first_person' => '第一人称', + 'second_person' => '第二人称(你)', + 'third_person' => '第三人称', + 'formal' => '正式', + 'balanced' => '平衡', + 'casual' => '随意', + 'calm' => '平静', + 'moderate' => '适中', + 'enthusiastic' => '热情', + 'vibrant' => '充满活力', + 'serious' => '严肃', + 'dry' => '冷幽默 / 含蓄', + 'witty' => '机智', + 'playful' => '俏皮', + 'respectful' => '有礼', + 'even_handed' => '不偏不倚', + 'bold' => '大胆', + 'provocative' => '挑衅', + 'neutral' => '中立', + 'friendly' => '友好', + 'empathetic' => '有同理心', + 'humble' => '谦逊', + 'confident' => '自信', + 'assertive' => '坚定', + 'direct' => '直接', + 'concise' => '简洁', + 'transparent' => '坦诚', + 'no_hype' => '不夸张', + 'practical' => '务实', + 'data_driven' => '数据驱动', + 'storytelling' => '叙事', + 'inspirational' => '鼓舞人心', + 'educational' => '知识性', + 'technical' => '技术性', + 'minimalist' => '少用表情', + ], + 'brand_color' => '品牌色', + 'background_color' => '背景色', + 'text_color' => '文字颜色', + 'font' => '字体', + 'image_style' => '图片风格', + 'image_style_description' => '为 AI 帖子生成幻灯片和封面图片时应用的视觉风格。', + 'image_style_cinematic' => '电影感', + 'image_style_illustration' => '插画', + 'image_style_isometric_3d' => '等距', + 'image_style_cartoon' => '卡通', + 'image_style_typographic' => '字体排版', + 'image_style_infographic' => '信息图', + 'image_style_minimalist' => '极简', + 'image_style_mockup' => '样机', + 'content_language' => '内容语言', + 'content_language_description' => '用于 AI 生成的文案、话题标签,以及生成图片或视频中任何文字的语言。', + ], + + 'members' => [ + 'title' => '成员', + 'heading' => '团队成员', + 'description' => '管理此工作区的成员和邀请', + + 'cancel' => '取消', + 'remove' => '移除', + 'make_role' => '设为:role', + + 'invite' => [ + 'title' => '邀请成员', + 'description' => '发送邮件邀请以添加协作者', + 'email' => '邮箱', + 'email_placeholder' => 'collaborator@email.com', + 'role' => '角色', + 'role_placeholder' => '选择一个角色', + 'submit' => '发送邀请', + ], + + 'pending' => [ + 'title' => '待处理的邀请', + 'description' => '等待接受的邀请', + 'empty' => '没有待处理的邀请', + ], + + 'list' => [ + 'title' => '成员', + 'description' => '有权访问此工作区的人员', + 'empty' => '除所有者外没有其他成员', + ], + + 'remove_modal' => [ + 'title' => '移除成员', + 'description' => '确定要将此成员从工作区中移除吗?他们将失去对所有工作区资源的访问权限。', + 'action' => '移除成员', + ], + + 'cancel_invite_modal' => [ + 'title' => '取消邀请', + 'description' => '确定要取消此邀请吗?', + 'action' => '取消邀请', + ], + + 'roles' => [ + 'owner' => '所有者', + 'admin' => '管理员', + 'member' => '成员', + 'viewer' => '查看者', + ], + + 'flash' => [ + 'invite_sent' => '邀请发送成功!', + 'invite_deleted' => '邀请已删除。', + 'member_removed' => '成员移除成功。', + 'role_updated' => '成员角色已更新。', + 'wrong_email' => '此邀请是发给另一个邮箱地址的。', + 'already_member' => '你已经是此工作区的成员。', + 'invite_accepted' => '欢迎!你现在是此工作区的成员了。', + 'invite_declined' => '邀请已拒绝。', + ], + ], + + 'account' => [ + 'tabs' => [ + 'account' => '账户', + 'usage' => '用量', + 'billing' => '账单', + ], + 'title' => '账户设置', + 'description' => '管理你的账户名称和账单邮箱', + 'name' => '账户名称', + 'name_placeholder' => '我的公司', + 'billing_email' => '账单邮箱', + 'billing_email_placeholder' => 'billing@company.com', + 'billing_email_hint' => '此邮箱将用于接收来自 Stripe 的发票和账单相关沟通。', + 'submit' => '保存', + ], + + 'flash' => [ + 'account_updated' => '账户更新成功!', + 'profile_updated' => '个人资料更新成功!', + 'password_updated' => '密码更新成功!', + 'workspace_updated' => '设置更新成功!', + 'photo_updated' => '头像更新成功!', + 'photo_deleted' => '头像移除成功!', + 'logo_updated' => '徽标上传成功!', + 'logo_deleted' => '徽标移除成功!', + 'notifications_updated' => '通知偏好已更新!', + ], + + 'api_keys' => [ + 'title' => 'API 密钥', + 'page_title' => 'API 密钥', + 'heading' => 'API 密钥', + 'description' => '管理用于以编程方式访问你工作区的 API 密钥。', + 'create' => '创建 API 密钥', + 'copy' => '复制', + 'new_token_message' => '你的新 API 密钥已创建。请立即复制——你将无法再次查看它。', + 'table' => [ + 'name' => '名称', + 'key' => '密钥', + 'status' => '状态', + 'expires' => '过期时间', + 'last_used' => '上次使用', + 'never' => '从未', + ], + 'actions' => [ + 'copy_id' => '复制 API 密钥 ID', + 'copy_id_success' => 'API 密钥 ID 已复制到剪贴板', + 'delete' => '删除', + ], + 'empty' => [ + 'title' => '暂无 API 密钥', + 'description' => '创建一个 API 密钥,以编程方式访问你的工作区。', + ], + 'delete_modal' => [ + 'title' => '删除 API 密钥', + 'description' => '确定要删除此 API 密钥吗?任何使用此密钥的应用将立即失去访问权限。', + 'action' => '删除 API 密钥', + ], + 'create_dialog' => [ + 'title' => '创建 API 密钥', + 'description' => '创建一个新的 API 密钥,以编程方式访问你的工作区。', + 'name' => '名称', + 'name_placeholder' => '例如 生产环境 API 密钥', + 'expires' => '过期日期(可选)', + 'expires_placeholder' => '永不过期', + 'submit' => '创建', + 'cancel' => '取消', + ], + 'flash' => [ + 'created' => 'API 密钥创建成功!', + 'deleted' => 'API 密钥删除成功!', + ], + ], +]; diff --git a/lang/zh/sidebar.php b/lang/zh/sidebar.php new file mode 100644 index 00000000..46a3eda6 --- /dev/null +++ b/lang/zh/sidebar.php @@ -0,0 +1,61 @@ + '工作区', + 'select_workspace' => '选择工作区', + 'create_workspace' => '创建工作区', + 'create_post' => '创建帖子', + 'profile' => '个人资料', + 'log_out' => '退出登录', + + 'workspace' => '工作区::name', + 'workspace_select' => '工作区:选择', + + 'theme' => '主题::name', + 'theme_light' => '浅色', + 'theme_dark' => '深色', + 'theme_system' => '跟随系统', + + 'language' => '语言::name', + 'language_select' => '语言:选择', + + 'groups' => [ + 'posts' => '帖子', + 'workspace' => '工作区', + 'others' => '其他', + ], + + 'analytics' => '分析', + 'automations' => '自动化', + 'settings' => '设置', + + 'posts' => [ + 'calendar' => '日历', + 'all' => '全部', + 'scheduled' => '已排期', + 'posted' => '已发布', + 'drafts' => '草稿', + ], + + 'workspace' => [ + 'connections' => '连接', + 'signatures' => '签名', + 'labels' => '标签', + 'assets' => '素材库', + 'api_keys' => 'API 密钥', + ], + + 'notifications' => '通知', + 'mark_all_read' => '全部标为已读', + 'mark_as_read' => '标为已读', + 'archive_all' => '全部归档', + 'no_notifications' => '暂无通知', + + 'support' => [ + 'docs' => '文档', + 'referral' => '赚取 30% 推荐奖励', + 'stay_updated' => '获取最新动态', + ], +]; diff --git a/lang/zh/signatures.php b/lang/zh/signatures.php new file mode 100644 index 00000000..58d96759 --- /dev/null +++ b/lang/zh/signatures.php @@ -0,0 +1,59 @@ + '签名', + 'description' => '创建可复用的签名,快速附加到你的帖子中', + 'search' => '搜索签名…', + 'new' => '新建签名', + 'empty_title' => '暂无签名', + 'empty_description' => '创建签名,快速将话题标签、链接或任何可复用的文字附加到你的帖子中', + 'no_search_results' => '没有与搜索匹配的签名', + 'try_different_search' => '换一个关键词,或清除搜索。', + 'table' => [ + 'name' => '名称', + 'content' => '内容', + 'created_at' => '创建时间', + ], + + 'actions' => [ + 'edit' => '编辑签名', + 'delete' => '删除签名', + ], + + 'create' => [ + 'title' => '创建签名', + 'description' => '为你的签名命名,并填写要附加的内容(话题标签、链接、自定义文字——任何你会重复使用的内容)。', + 'name' => '名称', + 'name_placeholder' => '例如 营销、旅行、品牌落款', + 'content' => '内容', + 'content_placeholder' => "#marketing #socialmedia\n了解更多:https://yourbrand.com", + 'content_hint' => '话题标签、链接、自定义开头、落款——任何你会附加到帖子中的内容。', + 'submit' => '创建签名', + 'submitting' => '创建中…', + ], + + 'edit' => [ + 'title' => '编辑签名', + 'description' => '更新此签名的名称和内容。', + 'name' => '名称', + 'name_placeholder' => '例如 营销、旅行、品牌落款', + 'content' => '内容', + 'content_placeholder' => "#marketing #socialmedia\n了解更多:https://yourbrand.com", + 'content_hint' => '话题标签、链接、自定义开头、落款——任何你会附加到帖子中的内容。', + 'submit' => '保存更改', + 'submitting' => '保存中…', + ], + + 'delete' => [ + 'title' => '删除签名', + 'description' => '确定要删除此签名吗?此操作无法撤销。', + 'confirm' => '删除', + 'cancel' => '取消', + ], + + 'flash' => [ + 'created' => '签名已创建。', + 'updated' => '签名已更新。', + 'deleted' => '签名已删除。', + ], +]; diff --git a/lang/zh/usage.php b/lang/zh/usage.php new file mode 100644 index 00000000..dfaa992b --- /dev/null +++ b/lang/zh/usage.php @@ -0,0 +1,15 @@ + '用量', + + 'section_account' => '账户', + 'section_account_description' => '你套餐的配额和上限。', + 'section_ai' => 'AI 额度', + 'section_ai_description' => '使用 AI 功能时会扣除额度。额度在每月 1 日重置。', + + 'workspaces' => '工作区', + 'social_accounts' => '社交账号', + 'members' => '成员', + 'credits' => '额度', +]; diff --git a/lang/zh/validation.php b/lang/zh/validation.php new file mode 100644 index 00000000..ea2e2e70 --- /dev/null +++ b/lang/zh/validation.php @@ -0,0 +1,200 @@ + ':attribute 必须接受。', + 'accepted_if' => '当 :other 为 :value 时,:attribute 必须接受。', + 'active_url' => ':attribute 不是一个有效的网址。', + 'after' => ':attribute 必须是 :date 之后的日期。', + 'after_or_equal' => ':attribute 必须是 :date 或之后的日期。', + 'alpha' => ':attribute 只能包含字母。', + 'alpha_dash' => ':attribute 只能包含字母、数字、短划线和下划线。', + 'alpha_num' => ':attribute 只能包含字母和数字。', + 'any_of' => ':attribute 无效。', + 'array' => ':attribute 必须是一个数组。', + 'ascii' => ':attribute 只能包含单字节的字母数字字符和符号。', + 'before' => ':attribute 必须是 :date 之前的日期。', + 'before_or_equal' => ':attribute 必须是 :date 或之前的日期。', + 'between' => [ + 'array' => ':attribute 必须包含 :min 到 :max 个项目。', + 'file' => ':attribute 必须介于 :min 到 :max KB 之间。', + 'numeric' => ':attribute 必须介于 :min 到 :max 之间。', + 'string' => ':attribute 必须介于 :min 到 :max 个字符之间。', + ], + 'boolean' => ':attribute 必须为 true 或 false。', + 'can' => ':attribute 包含未经授权的值。', + 'confirmed' => ':attribute 两次输入不一致。', + 'contains' => ':attribute 缺少一个必需的值。', + 'current_password' => '密码不正确。', + 'date' => ':attribute 不是一个有效的日期。', + 'date_equals' => ':attribute 必须是等于 :date 的日期。', + 'date_format' => ':attribute 的格式必须为 :format。', + 'decimal' => ':attribute 必须有 :decimal 位小数。', + 'declined' => ':attribute 必须拒绝。', + 'declined_if' => '当 :other 为 :value 时,:attribute 必须拒绝。', + 'different' => ':attribute 和 :other 必须不同。', + 'digits' => ':attribute 必须是 :digits 位数字。', + 'digits_between' => ':attribute 必须介于 :min 到 :max 位数字之间。', + 'dimensions' => ':attribute 的图片尺寸无效。', + 'distinct' => ':attribute 有重复的值。', + 'doesnt_contain' => ':attribute 不得包含以下任一值::values。', + 'doesnt_end_with' => ':attribute 不得以以下任一内容结尾::values。', + 'doesnt_start_with' => ':attribute 不得以以下任一内容开头::values。', + 'email' => ':attribute 必须是一个有效的邮箱地址。', + 'encoding' => ':attribute 必须使用 :encoding 编码。', + 'ends_with' => ':attribute 必须以以下之一结尾::values。', + 'enum' => '所选的 :attribute 无效。', + 'exists' => '所选的 :attribute 无效。', + 'extensions' => ':attribute 必须具有以下扩展名之一::values。', + 'file' => ':attribute 必须是一个文件。', + 'filled' => ':attribute 不能为空。', + 'gt' => [ + 'array' => ':attribute 必须多于 :value 个项目。', + 'file' => ':attribute 必须大于 :value KB。', + 'numeric' => ':attribute 必须大于 :value。', + 'string' => ':attribute 必须多于 :value 个字符。', + ], + 'gte' => [ + 'array' => ':attribute 必须包含 :value 个或更多项目。', + 'file' => ':attribute 必须大于或等于 :value KB。', + 'numeric' => ':attribute 必须大于或等于 :value。', + 'string' => ':attribute 必须多于或等于 :value 个字符。', + ], + 'hex_color' => ':attribute 必须是一个有效的十六进制颜色值。', + 'image' => ':attribute 必须是一张图片。', + 'in' => '所选的 :attribute 无效。', + 'in_array' => ':attribute 必须存在于 :other 中。', + 'in_array_keys' => ':attribute 必须包含以下键中的至少一个::values。', + 'integer' => ':attribute 必须是一个整数。', + 'ip' => ':attribute 必须是一个有效的 IP 地址。', + 'ipv4' => ':attribute 必须是一个有效的 IPv4 地址。', + 'ipv6' => ':attribute 必须是一个有效的 IPv6 地址。', + 'json' => ':attribute 必须是一个有效的 JSON 字符串。', + 'list' => ':attribute 必须是一个列表。', + 'lowercase' => ':attribute 必须是小写。', + 'lt' => [ + 'array' => ':attribute 必须少于 :value 个项目。', + 'file' => ':attribute 必须小于 :value KB。', + 'numeric' => ':attribute 必须小于 :value。', + 'string' => ':attribute 必须少于 :value 个字符。', + ], + 'lte' => [ + 'array' => ':attribute 不得多于 :value 个项目。', + 'file' => ':attribute 必须小于或等于 :value KB。', + 'numeric' => ':attribute 必须小于或等于 :value。', + 'string' => ':attribute 必须少于或等于 :value 个字符。', + ], + 'mac_address' => ':attribute 必须是一个有效的 MAC 地址。', + 'max' => [ + 'array' => ':attribute 不得多于 :max 个项目。', + 'file' => ':attribute 不得大于 :max KB。', + 'numeric' => ':attribute 不得大于 :max。', + 'string' => ':attribute 不得多于 :max 个字符。', + ], + 'max_digits' => ':attribute 不得多于 :max 位数字。', + 'mimes' => ':attribute 必须是以下类型的文件::values。', + 'mimetypes' => ':attribute 必须是以下类型的文件::values。', + 'min' => [ + 'array' => ':attribute 至少要有 :min 个项目。', + 'file' => ':attribute 至少要有 :min KB。', + 'numeric' => ':attribute 至少要为 :min。', + 'string' => ':attribute 至少要有 :min 个字符。', + ], + 'min_digits' => ':attribute 至少要有 :min 位数字。', + 'missing' => ':attribute 必须不存在。', + 'missing_if' => '当 :other 为 :value 时,:attribute 必须不存在。', + 'missing_unless' => '除非 :other 为 :value,否则 :attribute 必须不存在。', + 'missing_with' => '当存在 :values 时,:attribute 必须不存在。', + 'missing_with_all' => '当 :values 都存在时,:attribute 必须不存在。', + 'multiple_of' => ':attribute 必须是 :value 的倍数。', + 'not_in' => '所选的 :attribute 无效。', + 'not_regex' => ':attribute 的格式无效。', + 'numeric' => ':attribute 必须是一个数字。', + 'password' => [ + 'letters' => ':attribute 必须至少包含一个字母。', + 'mixed' => ':attribute 必须至少包含一个大写字母和一个小写字母。', + 'numbers' => ':attribute 必须至少包含一个数字。', + 'symbols' => ':attribute 必须至少包含一个符号。', + 'uncompromised' => '所填的 :attribute 曾出现在数据泄露中。请换一个不同的 :attribute。', + ], + 'present' => ':attribute 必须存在。', + 'present_if' => '当 :other 为 :value 时,:attribute 必须存在。', + 'present_unless' => '除非 :other 为 :value,否则 :attribute 必须存在。', + 'present_with' => '当存在 :values 时,:attribute 必须存在。', + 'present_with_all' => '当 :values 都存在时,:attribute 必须存在。', + 'prohibited' => ':attribute 被禁止。', + 'prohibited_if' => '当 :other 为 :value 时,:attribute 被禁止。', + 'prohibited_if_accepted' => '当 :other 被接受时,:attribute 被禁止。', + 'prohibited_if_declined' => '当 :other 被拒绝时,:attribute 被禁止。', + 'prohibited_unless' => '除非 :other 在 :values 中,否则 :attribute 被禁止。', + 'prohibits' => ':attribute 会导致 :other 不能存在。', + 'regex' => ':attribute 的格式无效。', + 'required' => ':attribute 不能为空。', + 'required_array_keys' => ':attribute 必须包含以下项的条目::values。', + 'required_if' => '当 :other 为 :value 时,:attribute 不能为空。', + 'required_if_accepted' => '当 :other 被接受时,:attribute 不能为空。', + 'required_if_declined' => '当 :other 被拒绝时,:attribute 不能为空。', + 'required_unless' => '除非 :other 在 :values 中,否则 :attribute 不能为空。', + 'required_with' => '当存在 :values 时,:attribute 不能为空。', + 'required_with_all' => '当 :values 都存在时,:attribute 不能为空。', + 'required_without' => '当不存在 :values 时,:attribute 不能为空。', + 'required_without_all' => '当 :values 都不存在时,:attribute 不能为空。', + 'same' => ':attribute 和 :other 必须相同。', + 'size' => [ + 'array' => ':attribute 必须包含 :size 个项目。', + 'file' => ':attribute 必须为 :size KB。', + 'numeric' => ':attribute 必须为 :size。', + 'string' => ':attribute 必须为 :size 个字符。', + ], + 'starts_with' => ':attribute 必须以以下之一开头::values。', + 'string' => ':attribute 必须是一个字符串。', + 'timezone' => ':attribute 必须是一个有效的时区。', + 'unique' => ':attribute 已经被占用。', + 'uploaded' => ':attribute 上传失败。', + 'uppercase' => ':attribute 必须是大写。', + 'url' => ':attribute 必须是一个有效的网址。', + 'ulid' => ':attribute 必须是一个有效的 ULID。', + 'uuid' => ':attribute 必须是一个有效的 UUID。', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/zh/workspaces.php b/lang/zh/workspaces.php new file mode 100644 index 00000000..c86b7a6d --- /dev/null +++ b/lang/zh/workspaces.php @@ -0,0 +1,50 @@ + '工作区', + 'select_title' => '你的工作区', + 'select_description' => '选择一个工作区以继续', + 'current' => '当前', + 'connections' => ':count 个连接', + 'posts' => ':count 条帖子', + + 'create' => [ + 'page_title' => '创建你的工作区', + 'title' => '设置你的工作区', + 'description' => '简单介绍一下你或你的项目。我们会据此让 AI 生成的帖子贴合你的风格。', + 'website' => '网站', + 'website_placeholder' => 'https://yourbrand.com', + 'autofill' => '从网站自动填充', + 'autofill_missing_url' => '请先输入一个网址。', + 'autofill_success' => '品牌信息已加载。', + 'autofill_error' => '无法自动填充。你可以手动填写各字段。', + 'autofill_errors' => [ + 'unreachable' => '我们无法访问该网站(:reason)。', + 'http_status' => '该网站返回了异常状态(:status)。', + 'invalid_scheme' => '仅支持 http 和 https 网址。', + 'missing_host' => '该网址缺少主机名。', + 'unresolvable_host' => '我们无法解析该主机(:host)。', + 'private_network' => '不允许指向私有网络的网址。', + ], + 'logo_captured' => '已从你的网站抓取徽标。', + 'name' => '工作区名称', + 'name_placeholder' => '例如 Acme Inc', + 'brand_description' => '品牌描述', + 'brand_description_placeholder' => '你的品牌是做什么的?', + 'content_language' => '内容语言', + 'content_language_description' => 'AI 生成的文案将使用此语言撰写。', + 'brand_color' => '品牌色', + 'background_color' => '背景色', + 'text_color' => '文字颜色', + 'submit' => '创建工作区', + 'success' => '工作区已创建。连接一个社交账号即可开始发帖。', + ], + + 'cannot_delete_last' => '你无法删除唯一的工作区。请在账单设置中取消订阅以关闭你的账户。', + + 'flash' => [ + 'deleted' => '工作区删除成功。', + ], +]; From c59adb4871afa98bdc028eaf5d57274e2d8dd731 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 15:39:35 -0300 Subject: [PATCH 05/12] Cover every supported language in ContentLanguage detection tests Extend the homepage-language detection dataset to assert all 15 supported languages resolve from their subtag, and pin the primary-subtag matching so a malformed tag ("english") no longer resolves via a two-letter prefix. --- tests/Feature/Ai/AutofillBrandTest.php | 18 +++++++++++++++++- .../Enums/Workspace/ContentLanguageTest.php | 3 +++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/Feature/Ai/AutofillBrandTest.php b/tests/Feature/Ai/AutofillBrandTest.php index e4be9ded..fd5469c0 100644 --- a/tests/Feature/Ai/AutofillBrandTest.php +++ b/tests/Feature/Ai/AutofillBrandTest.php @@ -100,13 +100,29 @@ expect($result->language)->toBe($expected); })->with([ + // Every supported language, detected from its primary subtag. + ['en', 'en'], ['pt', 'pt-BR'], + ['es', 'es'], + ['fr', 'fr'], + ['de', 'de'], + ['it', 'it'], + ['nl', 'nl'], + ['pl', 'pl'], + ['el', 'el'], + ['ja', 'ja'], + ['ko', 'ko'], + ['zh', 'zh'], + ['ru', 'ru'], + ['tr', 'tr'], + ['ar', 'ar'], + // Region/script subtags still resolve to the supported language. ['pt-PT', 'pt-BR'], ['en-US', 'en'], ['es-MX', 'es'], - ['fr', 'fr'], ['ja-JP', 'ja'], ['zh-Hans', 'zh'], + // Unsupported languages stay null. ['sv', null], ]); diff --git a/tests/Unit/Enums/Workspace/ContentLanguageTest.php b/tests/Unit/Enums/Workspace/ContentLanguageTest.php index 525d66d1..58db5692 100644 --- a/tests/Unit/Enums/Workspace/ContentLanguageTest.php +++ b/tests/Unit/Enums/Workspace/ContentLanguageTest.php @@ -44,4 +44,7 @@ ['sv', null], ['e', null], ['', null], + // A malformed tag is matched on its whole primary subtag, never a + // two-letter prefix — "english" must not resolve to English via "en". + ['english', null], ]); From e17b86ac93c226d6bc86c1da12a51a46d4a0c29d Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 18:17:38 -0300 Subject: [PATCH 06/12] Make the content-language field a searchable combobox and reload on UI-language switch Replace the plain content-language - - - {{ languageLabel }} - - - - - {{ language.label }} - - - +

{{ $t('settings.brand.content_language_description') }}

@@ -252,7 +237,13 @@ const runAutofill = async () => {
- +
diff --git a/resources/js/components/FontPicker.vue b/resources/js/components/FontPicker.vue index 73578bc3..d886ddf4 100644 --- a/resources/js/components/FontPicker.vue +++ b/resources/js/components/FontPicker.vue @@ -19,12 +19,16 @@ interface Props { * preview text in the dropdown renders in the actual typeface. */ fonts: string[]; placeholder?: string; + searchPlaceholder?: string; + emptyText?: string; name?: string; disabled?: boolean; } const props = withDefaults(defineProps(), { placeholder: 'Select a font…', + searchPlaceholder: 'Search font…', + emptyText: 'No fonts match.', disabled: false, }); @@ -89,9 +93,9 @@ const select = (font: string) => { - + - No fonts match. + {{ emptyText }} +import { IconCheck, IconChevronDown } from '@tabler/icons-vue'; +import { computed, ref } from 'vue'; + +import { Button } from '@/components/ui/button'; +import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'; +import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; +import { cn } from '@/lib/utils'; + +interface Props { + /** Selectable languages as { value: locale code, label: native name }. */ + options: { value: string; label: string }[]; + placeholder?: string; + searchPlaceholder?: string; + emptyText?: string; + disabled?: boolean; +} + +const props = withDefaults(defineProps(), { + placeholder: 'Select a language…', + searchPlaceholder: 'Search language…', + emptyText: 'No language found.', + disabled: false, +}); + +const value = defineModel({ required: true }); + +const open = ref(false); + +const selectedLabel = computed(() => props.options.find((option) => option.value === value.value)?.label ?? ''); + +const select = (code: string) => { + value.value = code; + open.value = false; +}; + + + diff --git a/resources/js/components/UserMenuContent.vue b/resources/js/components/UserMenuContent.vue index c9e1a989..5936b084 100644 --- a/resources/js/components/UserMenuContent.vue +++ b/resources/js/components/UserMenuContent.vue @@ -5,7 +5,6 @@ import { IconLogout, IconUser, } from '@tabler/icons-vue'; -import { loadLanguageAsync } from 'laravel-vue-i18n'; import { computed } from 'vue'; import { updateLanguage } from '@/actions/App/Http/Controllers/App/Settings/ProfileController'; @@ -20,7 +19,6 @@ import { DropdownMenuSubTrigger, } from '@/components/ui/dropdown-menu'; import UserInfo from '@/components/UserInfo.vue'; -import dayjs from '@/dayjs'; import posthog from '@/posthog'; import { logout } from '@/routes'; import { edit } from '@/routes/app/profile'; @@ -42,18 +40,8 @@ const languages = computed(() => page.props.languages as Language[]) const currentLanguage = computed(() => languages.value?.find((l: Language) => l.code === page.props.locale)); const switchLanguage = (code: string) => { - const previousCode = currentLanguage.value?.code || 'en'; - - loadLanguageAsync(code); - dayjs.locale(code.toLowerCase()); - router.put(updateLanguage.url(), { locale: code }, { - preserveScroll: true, - preserveState: false, - onError: () => { - loadLanguageAsync(previousCode); - dayjs.locale(previousCode.toLowerCase()); - }, + onSuccess: () => window.location.reload(), }); }; From 519175f9fd7c3a835c55097a47126cf25ed9480d Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 18:22:19 -0300 Subject: [PATCH 07/12] Translate the sidebar Beta badge and place it at the row end for RTL Move the nav badge from the physical right-2 to the logical end-2 so it sits at the end of the row in both directions (right in LTR, left in RTL). Replace the hardcoded 'Beta' string with a global common.beta translation key across all 15 locales. --- lang/ar/common.php | 2 ++ lang/de/common.php | 2 ++ lang/el/common.php | 2 ++ lang/en/common.php | 2 ++ lang/es/common.php | 2 ++ lang/fr/common.php | 2 ++ lang/it/common.php | 2 ++ lang/ja/common.php | 2 ++ lang/ko/common.php | 2 ++ lang/nl/common.php | 2 ++ lang/pl/common.php | 2 ++ lang/pt-BR/common.php | 2 ++ lang/ru/common.php | 2 ++ lang/tr/common.php | 2 ++ lang/zh/common.php | 2 ++ resources/js/components/AppSidebar.vue | 2 +- resources/js/components/NavMain.vue | 2 +- 17 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lang/ar/common.php b/lang/ar/common.php index 7ce8afda..02d969c9 100644 --- a/lang/ar/common.php +++ b/lang/ar/common.php @@ -6,6 +6,8 @@ 'back' => 'رجوع', + 'beta' => 'تجريبي', + 'confirm_modal' => [ 'cannot_be_undone' => 'لا يمكن التراجع عن هذا الإجراء.', 'type' => 'اكتب', diff --git a/lang/de/common.php b/lang/de/common.php index c059b336..ce786c16 100644 --- a/lang/de/common.php +++ b/lang/de/common.php @@ -6,6 +6,8 @@ 'back' => 'Zurück', + 'beta' => 'Beta', + 'confirm_modal' => [ 'cannot_be_undone' => 'Dies kann nicht rückgängig gemacht werden.', 'type' => 'Gib', diff --git a/lang/el/common.php b/lang/el/common.php index fc8fc86a..ec186956 100644 --- a/lang/el/common.php +++ b/lang/el/common.php @@ -6,6 +6,8 @@ 'back' => 'Πίσω', + 'beta' => 'Βήτα', + 'confirm_modal' => [ 'cannot_be_undone' => 'Αυτό δεν μπορεί να αναιρεθεί.', 'type' => 'Πληκτρολογήστε', diff --git a/lang/en/common.php b/lang/en/common.php index b90f4a9e..a41a2d55 100644 --- a/lang/en/common.php +++ b/lang/en/common.php @@ -6,6 +6,8 @@ 'back' => 'Back', + 'beta' => 'Beta', + 'confirm_modal' => [ 'cannot_be_undone' => 'This cannot be undone.', 'type' => 'Type', diff --git a/lang/es/common.php b/lang/es/common.php index c85c9c0f..fe84cf9b 100644 --- a/lang/es/common.php +++ b/lang/es/common.php @@ -6,6 +6,8 @@ 'back' => 'Volver', + 'beta' => 'Beta', + 'confirm_modal' => [ 'cannot_be_undone' => 'Esta acción no se puede deshacer.', 'type' => 'Escribe', diff --git a/lang/fr/common.php b/lang/fr/common.php index deef0b33..206a805d 100644 --- a/lang/fr/common.php +++ b/lang/fr/common.php @@ -6,6 +6,8 @@ 'back' => 'Retour', + 'beta' => 'Bêta', + 'confirm_modal' => [ 'cannot_be_undone' => 'Cette action est irréversible.', 'type' => 'Saisissez', diff --git a/lang/it/common.php b/lang/it/common.php index 5149397f..44785808 100644 --- a/lang/it/common.php +++ b/lang/it/common.php @@ -6,6 +6,8 @@ 'back' => 'Indietro', + 'beta' => 'Beta', + 'confirm_modal' => [ 'cannot_be_undone' => 'Questa azione non può essere annullata.', 'type' => 'Digita', diff --git a/lang/ja/common.php b/lang/ja/common.php index 16a3d19e..ab2a26e8 100644 --- a/lang/ja/common.php +++ b/lang/ja/common.php @@ -6,6 +6,8 @@ 'back' => '戻る', + 'beta' => 'ベータ', + 'confirm_modal' => [ 'cannot_be_undone' => 'この操作は取り消せません。', 'type' => '入力', diff --git a/lang/ko/common.php b/lang/ko/common.php index 19c6d187..5bb2d175 100644 --- a/lang/ko/common.php +++ b/lang/ko/common.php @@ -6,6 +6,8 @@ 'back' => '뒤로', + 'beta' => '베타', + 'confirm_modal' => [ 'cannot_be_undone' => '이 작업은 되돌릴 수 없습니다.', 'type' => '입력', diff --git a/lang/nl/common.php b/lang/nl/common.php index 8d880394..7fb1ead5 100644 --- a/lang/nl/common.php +++ b/lang/nl/common.php @@ -6,6 +6,8 @@ 'back' => 'Terug', + 'beta' => 'Bèta', + 'confirm_modal' => [ 'cannot_be_undone' => 'Dit kan niet ongedaan worden gemaakt.', 'type' => 'Typ', diff --git a/lang/pl/common.php b/lang/pl/common.php index cccecbde..ed7a3fe1 100644 --- a/lang/pl/common.php +++ b/lang/pl/common.php @@ -6,6 +6,8 @@ 'back' => 'Wstecz', + 'beta' => 'Beta', + 'confirm_modal' => [ 'cannot_be_undone' => 'Tej operacji nie można cofnąć.', 'type' => 'Wpisz', diff --git a/lang/pt-BR/common.php b/lang/pt-BR/common.php index 6cfae2e2..a64d8a34 100644 --- a/lang/pt-BR/common.php +++ b/lang/pt-BR/common.php @@ -6,6 +6,8 @@ 'back' => 'Voltar', + 'beta' => 'Beta', + 'confirm_modal' => [ 'cannot_be_undone' => 'Esta ação não pode ser desfeita.', 'type' => 'Digite', diff --git a/lang/ru/common.php b/lang/ru/common.php index f0f12c68..6b7e39fd 100644 --- a/lang/ru/common.php +++ b/lang/ru/common.php @@ -6,6 +6,8 @@ 'back' => 'Назад', + 'beta' => 'Бета', + 'confirm_modal' => [ 'cannot_be_undone' => 'Это действие нельзя отменить.', 'type' => 'Введите', diff --git a/lang/tr/common.php b/lang/tr/common.php index 64bb4c46..294ef152 100644 --- a/lang/tr/common.php +++ b/lang/tr/common.php @@ -6,6 +6,8 @@ 'back' => 'Geri', + 'beta' => 'Beta', + 'confirm_modal' => [ 'cannot_be_undone' => 'Bu işlem geri alınamaz.', 'type' => 'Yazın:', diff --git a/lang/zh/common.php b/lang/zh/common.php index b6298fc5..f4e517b1 100644 --- a/lang/zh/common.php +++ b/lang/zh/common.php @@ -6,6 +6,8 @@ 'back' => '返回', + 'beta' => '测试版', + 'confirm_modal' => [ 'cannot_be_undone' => '此操作无法撤销。', 'type' => '输入', diff --git a/resources/js/components/AppSidebar.vue b/resources/js/components/AppSidebar.vue index d7b66dd7..c4e714fc 100644 --- a/resources/js/components/AppSidebar.vue +++ b/resources/js/components/AppSidebar.vue @@ -87,7 +87,7 @@ const mainNavItems = computed(() => [ title: trans('sidebar.automations'), href: automations.url(), icon: IconBolt, - badge: 'Beta', + badge: trans('common.beta'), }, ] : []), diff --git a/resources/js/components/NavMain.vue b/resources/js/components/NavMain.vue index f0cd0acd..ece3b176 100644 --- a/resources/js/components/NavMain.vue +++ b/resources/js/components/NavMain.vue @@ -40,7 +40,7 @@ const { urlIsActive } = useActiveUrl(); {{ item.badge }} From c7be1af12491203e6f4190234ee19ecb914fc205 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 18:52:45 -0300 Subject: [PATCH 08/12] Detect all 15 content languages on autofill, harden RTL/i18n, and cover the gaps with tests - Brand-analyzer prompt now lists every supported language instead of only en/pt-BR/es, so onboarding autofill can detect the 12 added languages. The backtick-formatted list is built in BrandAnalyzer::instructions(), keeping the Blade clean and the enum free of prompt presentation. - Translate the delete-confirmation keyword for el/ja/zh/ar (the four locales that still shipped the English "delete"). - Make the language and font comboboxes RTL-correct (logical ms-* instead of physical ml-*), and let the language combobox be searched by English name via a visually-hidden label (ContentLanguage::options() now exposes englishName). - Correct the ContentLanguage class docblock: the enum is also the source of truth for the UI locales' text direction. Tests: SetLocale middleware dir/RTL, isRtl and the full 15-language englishName/label match arms, LLM language detection beyond en/es/pt-BR, and store-path persistence of a non-default content language plus rejection of an unsupported one. --- app/Ai/Agents/BrandAnalyzer.php | 3 + app/Enums/Workspace/ContentLanguage.php | 20 +++--- lang/ar/common.php | 2 +- lang/el/common.php | 2 +- lang/ja/common.php | 2 +- lang/zh/common.php | 2 +- resources/js/components/FontPicker.vue | 4 +- resources/js/components/LanguagePicker.vue | 11 ++-- .../views/prompts/brand_analyzer.blade.php | 2 +- tests/Feature/Ai/AutofillBrandTest.php | 31 +++++++++ tests/Feature/Middleware/SetLocaleTest.php | 44 +++++++++++++ tests/Feature/WorkspaceControllerTest.php | 27 +++++++- .../Enums/Workspace/ContentLanguageTest.php | 66 ++++++++++++++++--- 13 files changed, 187 insertions(+), 29 deletions(-) create mode 100644 tests/Feature/Middleware/SetLocaleTest.php diff --git a/app/Ai/Agents/BrandAnalyzer.php b/app/Ai/Agents/BrandAnalyzer.php index 7e34c5a0..c1df86cd 100644 --- a/app/Ai/Agents/BrandAnalyzer.php +++ b/app/Ai/Agents/BrandAnalyzer.php @@ -21,6 +21,9 @@ public function instructions(): string return view('prompts.brand_analyzer', [ 'voice_groups' => BrandVoiceTrait::grouped(), 'single_select_groups' => BrandVoiceTrait::singleSelectGroups(), + 'content_languages' => collect(ContentLanguage::values()) + ->map(fn (string $code) => "`{$code}`") + ->implode(', '), ])->render(); } diff --git a/app/Enums/Workspace/ContentLanguage.php b/app/Enums/Workspace/ContentLanguage.php index a41fab09..9448dc34 100644 --- a/app/Enums/Workspace/ContentLanguage.php +++ b/app/Enums/Workspace/ContentLanguage.php @@ -5,14 +5,14 @@ namespace App\Enums\Workspace; /** - * Languages a workspace can pick for AI-generated content. This is the single - * source of truth for the supported set: request validation, the brand - * analyzer's structured-output enum, homepage language detection, the AI image - * prompt's language name, and the picker options in the UI all derive from it. + * The set of languages the app supports, and the single source of truth for it: + * request validation, the brand analyzer's structured-output enum, homepage + * language detection, the AI image prompt's language name, the content-language + * picker options, and the right-to-left direction of the UI all derive from it. * * The string value is the language code stored on the workspace and passed - * straight to the content prompts (`content_language`). This is unrelated to - * the application's UI locale — we are not translating the interface here. + * straight to the content prompts (`content_language`); the same codes also back + * the application's UI locales, so `isRtl()` drives the document `dir` attribute. */ enum ContentLanguage: string { @@ -130,12 +130,16 @@ public static function values(): array } /** - * @return array + * @return array */ public static function options(): array { return array_map( - fn (self $language) => ['value' => $language->value, 'label' => $language->label()], + fn (self $language) => [ + 'value' => $language->value, + 'label' => $language->label(), + 'englishName' => $language->englishName(), + ], self::cases(), ); } diff --git a/lang/ar/common.php b/lang/ar/common.php index 02d969c9..59fd7803 100644 --- a/lang/ar/common.php +++ b/lang/ar/common.php @@ -13,7 +13,7 @@ 'type' => 'اكتب', 'to_confirm' => 'للتأكيد.', 'copy_to_clipboard' => 'نسخ إلى الحافظة', - 'delete_keyword' => 'delete', + 'delete_keyword' => 'حذف', ], 'photo_upload' => [ diff --git a/lang/el/common.php b/lang/el/common.php index ec186956..0bb7db23 100644 --- a/lang/el/common.php +++ b/lang/el/common.php @@ -13,7 +13,7 @@ 'type' => 'Πληκτρολογήστε', 'to_confirm' => 'για επιβεβαίωση.', 'copy_to_clipboard' => 'Αντιγραφή στο πρόχειρο', - 'delete_keyword' => 'delete', + 'delete_keyword' => 'διαγραφή', ], 'photo_upload' => [ diff --git a/lang/ja/common.php b/lang/ja/common.php index ab2a26e8..96e89257 100644 --- a/lang/ja/common.php +++ b/lang/ja/common.php @@ -13,7 +13,7 @@ 'type' => '入力', 'to_confirm' => 'で確認してください。', 'copy_to_clipboard' => 'クリップボードにコピー', - 'delete_keyword' => 'delete', + 'delete_keyword' => '削除', ], 'photo_upload' => [ diff --git a/lang/zh/common.php b/lang/zh/common.php index f4e517b1..b16eb072 100644 --- a/lang/zh/common.php +++ b/lang/zh/common.php @@ -13,7 +13,7 @@ 'type' => '输入', 'to_confirm' => '以确认。', 'copy_to_clipboard' => '复制到剪贴板', - 'delete_keyword' => 'delete', + 'delete_keyword' => '删除', ], 'photo_upload' => [ diff --git a/resources/js/components/FontPicker.vue b/resources/js/components/FontPicker.vue index d886ddf4..ff1359b6 100644 --- a/resources/js/components/FontPicker.vue +++ b/resources/js/components/FontPicker.vue @@ -87,7 +87,7 @@ const select = (font: string) => { {{ value || placeholder }} - + @@ -105,7 +105,7 @@ const select = (font: string) => { > {{ font }} diff --git a/resources/js/components/LanguagePicker.vue b/resources/js/components/LanguagePicker.vue index 54922a7c..9826d597 100644 --- a/resources/js/components/LanguagePicker.vue +++ b/resources/js/components/LanguagePicker.vue @@ -8,8 +8,8 @@ import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover import { cn } from '@/lib/utils'; interface Props { - /** Selectable languages as { value: locale code, label: native name }. */ - options: { value: string; label: string }[]; + /** Selectable languages as { value: locale code, label: native name, englishName: name in English }. */ + options: { value: string; label: string; englishName?: string }[]; placeholder?: string; searchPlaceholder?: string; emptyText?: string; @@ -49,7 +49,7 @@ const select = (code: string) => { {{ selectedLabel || placeholder }} - + @@ -62,11 +62,12 @@ const select = (code: string) => { {{ option.label }} - + {{ option.englishName }} + diff --git a/resources/views/prompts/brand_analyzer.blade.php b/resources/views/prompts/brand_analyzer.blade.php index 30f7de33..eb31b155 100644 --- a/resources/views/prompts/brand_analyzer.blade.php +++ b/resources/views/prompts/brand_analyzer.blade.php @@ -10,7 +10,7 @@ 2. **description** — a concise 2-3 sentence brand description explaining what the company does, who they serve, and what makes them unique. Write it in the detected content language. Avoid marketing fluff; be specific. -3. **language** — detect the primary content language of the site. Pick exactly one of: `en`, `pt-BR`, `es`. If the site is in a different language entirely, pick the closest match (prefer `en`). +3. **language** — detect the primary content language of the site and return its code. Pick exactly one of: {{ $content_languages }}. If the site is in a language not in that list, pick the closest supported match (prefer `en`). 4. **voice_traits** — infer the brand's voice as a set of traits, returned as an array of values chosen ONLY from the allowed list below. For each single-select dimension pick AT MOST ONE value (or none if unclear); for the `style` group pick any number that fit. Aim for a coherent set of roughly 5-9 traits. @foreach($voice_groups as $group => $values) diff --git a/tests/Feature/Ai/AutofillBrandTest.php b/tests/Feature/Ai/AutofillBrandTest.php index fd5469c0..5f43f750 100644 --- a/tests/Feature/Ai/AutofillBrandTest.php +++ b/tests/Feature/Ai/AutofillBrandTest.php @@ -390,6 +390,37 @@ expect($result->toArray()['brand_voice_traits'])->toBe(['third_person', 'direct', 'no_hype']); }); +test('LLM language detection carries any supported language, not just en/es/pt-BR', function () { + config()->set('services.gemini.api_key', 'fake-key'); + config()->set('ai.default', 'gemini'); + + Http::fake([ + 'example.com' => Http::response(<<<'HTML' + + + Beispiel GmbH + + +

Wir bauen Widgets.

+ + HTML, 200), + ]); + + BrandAnalyzer::fake([ + [ + 'description' => 'Beispiel GmbH baut Widgets für kleine Teams.', + 'language' => 'de', + 'voice_traits' => ['third_person'], + ], + ]); + + $result = ($this->autofill)('https://example.com'); + + // The LLM's detected language wins over the deterministic one and must be + // able to be one of the 12 languages added beyond the original en/es/pt-BR. + expect($result->language)->toBe('de'); +}); + test('when llm is not configured, falls back to meta tags only', function () { // beforeEach already cleared api keys. Http::fake([ diff --git a/tests/Feature/Middleware/SetLocaleTest.php b/tests/Feature/Middleware/SetLocaleTest.php new file mode 100644 index 00000000..8096c453 --- /dev/null +++ b/tests/Feature/Middleware/SetLocaleTest.php @@ -0,0 +1,44 @@ +`. + */ +function runSetLocale(?string $locale): string +{ + $request = Request::create('/', 'GET'); + + if ($locale !== null) { + $request->cookies->set('locale', $locale); + } + + (new SetLocale)->handle($request, fn () => response('ok')); + + return View::shared('htmlDir'); +} + +test('shares rtl direction and sets the locale for Arabic', function () { + expect(runSetLocale('ar'))->toBe('rtl'); + expect(app()->getLocale())->toBe('ar'); +}); + +test('shares ltr direction for a left-to-right locale', function (string $locale) { + expect(runSetLocale($locale))->toBe('ltr'); + expect(app()->getLocale())->toBe($locale); +})->with(['en', 'ja', 'pt-BR', 'de']); + +test('falls back to the default locale and ltr for an unknown cookie', function () { + expect(runSetLocale('sv'))->toBe('ltr'); + expect(app()->getLocale())->toBe(config('languages.default')); +}); + +test('falls back to the default locale and ltr when no cookie is set', function () { + expect(runSetLocale(null))->toBe('ltr'); + expect(app()->getLocale())->toBe(config('languages.default')); +}); diff --git a/tests/Feature/WorkspaceControllerTest.php b/tests/Feature/WorkspaceControllerTest.php index 3bb04ced..5f1970a1 100644 --- a/tests/Feature/WorkspaceControllerTest.php +++ b/tests/Feature/WorkspaceControllerTest.php @@ -61,7 +61,7 @@ $response->assertInertia(fn ($page) => $page ->component('workspaces/Create', false) ->has('availableContentLanguages', count(ContentLanguage::cases())) - ->where('availableContentLanguages.0', ['value' => 'en', 'label' => 'English']) + ->where('availableContentLanguages.0', ['value' => 'en', 'label' => 'English', 'englishName' => 'English']) ); }); @@ -628,6 +628,31 @@ expect($workspace->brand_description)->toBe('We sell rockets.'); }); +test('store persists a newly supported non-default content language', function () { + $account = Account::factory()->create(); + $user = User::factory()->create(['account_id' => $account->id]); + $account->update(['owner_id' => $user->id]); + + $this->actingAs($user)->post(route('app.workspaces.store'), [ + 'name' => 'Beispiel GmbH', + 'content_language' => 'de', + ])->assertSessionHasNoErrors(); + + // 'de' is not the DB default ('en'), so this proves the field is written. + expect(Workspace::where('name', 'Beispiel GmbH')->sole()->content_language)->toBe('de'); +}); + +test('store rejects an unsupported content language', function () { + $account = Account::factory()->create(); + $user = User::factory()->create(['account_id' => $account->id]); + $account->update(['owner_id' => $user->id]); + + $this->actingAs($user)->post(route('app.workspaces.store'), [ + 'name' => 'Bad Lang', + 'content_language' => 'sv', + ])->assertSessionHasErrors(['content_language']); +}); + test('store redirects additional workspace to /accounts', function () { $account = Account::factory()->create(); $user = User::factory()->create(['account_id' => $account->id]); diff --git a/tests/Unit/Enums/Workspace/ContentLanguageTest.php b/tests/Unit/Enums/Workspace/ContentLanguageTest.php index 58db5692..88f8aa2e 100644 --- a/tests/Unit/Enums/Workspace/ContentLanguageTest.php +++ b/tests/Unit/Enums/Workspace/ContentLanguageTest.php @@ -16,19 +16,69 @@ expect(ContentLanguage::DEFAULT->value)->toBe('en'); }); -test('options pairs each code with its native label', function () { +test('options pairs each code with its native and English label', function () { $options = ContentLanguage::options(); expect($options)->toHaveCount(count(ContentLanguage::cases())); - expect($options[0])->toBe(['value' => 'en', 'label' => 'English']); - expect($options)->toContain(['value' => 'pt-BR', 'label' => 'Português (Brasil)']); - expect($options)->toContain(['value' => 'ja', 'label' => '日本語']); + expect($options[0])->toBe(['value' => 'en', 'label' => 'English', 'englishName' => 'English']); + expect($options)->toContain(['value' => 'pt-BR', 'label' => 'Português (Brasil)', 'englishName' => 'Brazilian Portuguese']); + expect($options)->toContain(['value' => 'ja', 'label' => '日本語', 'englishName' => 'Japanese']); }); -test('english name is the language name in English for the AI image prompt', function () { - expect(ContentLanguage::PortugueseBrazil->englishName())->toBe('Brazilian Portuguese'); - expect(ContentLanguage::French->englishName())->toBe('French'); - expect(ContentLanguage::Chinese->englishName())->toBe('Chinese'); +test('englishName returns a distinct English name for every language', function (ContentLanguage $language, string $expected) { + expect($language->englishName())->toBe($expected); +})->with([ + [ContentLanguage::English, 'English'], + [ContentLanguage::PortugueseBrazil, 'Brazilian Portuguese'], + [ContentLanguage::Spanish, 'Spanish'], + [ContentLanguage::French, 'French'], + [ContentLanguage::German, 'German'], + [ContentLanguage::Italian, 'Italian'], + [ContentLanguage::Dutch, 'Dutch'], + [ContentLanguage::Polish, 'Polish'], + [ContentLanguage::Greek, 'Greek'], + [ContentLanguage::Japanese, 'Japanese'], + [ContentLanguage::Korean, 'Korean'], + [ContentLanguage::Chinese, 'Chinese'], + [ContentLanguage::Russian, 'Russian'], + [ContentLanguage::Turkish, 'Turkish'], + [ContentLanguage::Arabic, 'Arabic'], +]); + +test('only English resolves to the English name', function () { + foreach (ContentLanguage::cases() as $language) { + expect($language->englishName() === 'English')->toBe($language === ContentLanguage::English); + } +}); + +test('label returns the native name for every language', function (ContentLanguage $language, string $expected) { + expect($language->label())->toBe($expected); +})->with([ + [ContentLanguage::English, 'English'], + [ContentLanguage::PortugueseBrazil, 'Português (Brasil)'], + [ContentLanguage::Spanish, 'Español'], + [ContentLanguage::French, 'Français'], + [ContentLanguage::German, 'Deutsch'], + [ContentLanguage::Italian, 'Italiano'], + [ContentLanguage::Dutch, 'Nederlands'], + [ContentLanguage::Polish, 'Polski'], + [ContentLanguage::Greek, 'Ελληνικά'], + [ContentLanguage::Japanese, '日本語'], + [ContentLanguage::Korean, '한국어'], + [ContentLanguage::Chinese, '中文'], + [ContentLanguage::Russian, 'Русский'], + [ContentLanguage::Turkish, 'Türkçe'], + [ContentLanguage::Arabic, 'العربية'], +]); + +test('isRtl is true only for Arabic', function () { + expect(ContentLanguage::Arabic->isRtl())->toBeTrue(); + + foreach (ContentLanguage::cases() as $language) { + if ($language !== ContentLanguage::Arabic) { + expect($language->isRtl())->toBeFalse(); + } + } }); test('fromHtmlLang resolves the two-letter primary subtag', function (string $lang, ?ContentLanguage $expected) { From c9209cb2a9f14f6d2700c010113200a6ab8ecfb6 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 18:57:09 -0300 Subject: [PATCH 09/12] Replace the boolean isRtl() with a direction() accessor on ContentLanguage isRtl() existed only to be mapped to an 'rtl'/'ltr' string in SetLocale, so the boolean was the redundant concept. direction() returns the string the one caller needs, which drops the null-safe-plus-nested-ternary from the middleware and lets it resolve the language once with an explicit DEFAULT fallback. --- app/Enums/Workspace/ContentLanguage.php | 10 +++++----- app/Http/Middleware/App/SetLocale.php | 3 ++- tests/Unit/Enums/Workspace/ContentLanguageTest.php | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/Enums/Workspace/ContentLanguage.php b/app/Enums/Workspace/ContentLanguage.php index 9448dc34..ecb7f3e2 100644 --- a/app/Enums/Workspace/ContentLanguage.php +++ b/app/Enums/Workspace/ContentLanguage.php @@ -12,7 +12,7 @@ * * The string value is the language code stored on the workspace and passed * straight to the content prompts (`content_language`); the same codes also back - * the application's UI locales, so `isRtl()` drives the document `dir` attribute. + * the application's UI locales, so `direction()` drives the document `dir` attribute. */ enum ContentLanguage: string { @@ -84,12 +84,12 @@ public function englishName(): string } /** - * Whether the language is written right-to-left, which drives the `dir` - * attribute on the document root so the whole UI mirrors for the locale. + * The text direction (`ltr` or `rtl`) for the document root when this is the + * active UI locale — only Arabic is written right to left. */ - public function isRtl(): bool + public function direction(): string { - return $this === self::Arabic; + return $this === self::Arabic ? 'rtl' : 'ltr'; } /** diff --git a/app/Http/Middleware/App/SetLocale.php b/app/Http/Middleware/App/SetLocale.php index 49a30cde..a28cad1e 100644 --- a/app/Http/Middleware/App/SetLocale.php +++ b/app/Http/Middleware/App/SetLocale.php @@ -22,9 +22,10 @@ public function handle(Request $request, Closure $next): Response $locale = $request->cookie('locale'); $isValid = $locale && array_key_exists($locale, $available); $activeLocale = $isValid ? $locale : config('languages.default'); + $language = ContentLanguage::tryFrom($activeLocale) ?? ContentLanguage::DEFAULT; App::setLocale($activeLocale); - View::share('htmlDir', ContentLanguage::tryFrom($activeLocale)?->isRtl() ? 'rtl' : 'ltr'); + View::share('htmlDir', $language->direction()); $response = $next($request); diff --git a/tests/Unit/Enums/Workspace/ContentLanguageTest.php b/tests/Unit/Enums/Workspace/ContentLanguageTest.php index 88f8aa2e..b816c52e 100644 --- a/tests/Unit/Enums/Workspace/ContentLanguageTest.php +++ b/tests/Unit/Enums/Workspace/ContentLanguageTest.php @@ -71,12 +71,12 @@ [ContentLanguage::Arabic, 'العربية'], ]); -test('isRtl is true only for Arabic', function () { - expect(ContentLanguage::Arabic->isRtl())->toBeTrue(); +test('direction is rtl only for Arabic', function () { + expect(ContentLanguage::Arabic->direction())->toBe('rtl'); foreach (ContentLanguage::cases() as $language) { if ($language !== ContentLanguage::Arabic) { - expect($language->isRtl())->toBeFalse(); + expect($language->direction())->toBe('ltr'); } } }); From 5a96bb490adafaa830d5424ab1f1649e87d11a79 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 19:01:16 -0300 Subject: [PATCH 10/12] Make the language and font dropdowns match their trigger width The PopoverContent used w-[--reka-popover-trigger-width], which Tailwind v4 compiles to the invalid `width: --reka-popover-trigger-width`, so the dropdown collapsed to its content width. Use the v4 CSS-variable syntax w-(--reka-popover-trigger-width) so it resolves to var(...) and spans the full trigger width, matching the SearchableSelect component. --- resources/js/components/FontPicker.vue | 2 +- resources/js/components/LanguagePicker.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/js/components/FontPicker.vue b/resources/js/components/FontPicker.vue index ff1359b6..fc9bfcef 100644 --- a/resources/js/components/FontPicker.vue +++ b/resources/js/components/FontPicker.vue @@ -91,7 +91,7 @@ const select = (font: string) => { - + diff --git a/resources/js/components/LanguagePicker.vue b/resources/js/components/LanguagePicker.vue index 9826d597..5e6e2d3d 100644 --- a/resources/js/components/LanguagePicker.vue +++ b/resources/js/components/LanguagePicker.vue @@ -53,7 +53,7 @@ const select = (code: string) => { - + From de4d5f3c6802c19577da8a28ce139067aa6bf907 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 19:28:28 -0300 Subject: [PATCH 11/12] Share a ContentLanguageOption type and close the review's test gaps - Extract ContentLanguageOption into @/types and use it for availableContentLanguages across BrandForm, BrandTab, Brand, Create, and the LanguagePicker options, so the englishName field that drives search is visible to TypeScript instead of being dropped silently by the pass-through prop types. - Add BrandAnalyzerTest: assert the language schema enum equals the full 15-language set (guards against it shrinking back to a hardcoded subset behind ::fake()) and that instructions() lists every code. - Isolate the "LLM language wins" autofill test by declaring the page as `en` while the LLM returns `de`, so it actually proves mergeLlm precedence instead of both paths agreeing. - Cover SetLocale's cookie side effect: the default locale cookie is set on an invalid/absent cookie and left untouched for a valid locale. --- resources/js/components/BrandForm.vue | 3 +- resources/js/components/LanguagePicker.vue | 3 +- resources/js/components/settings/BrandTab.vue | 3 +- .../js/pages/settings/workspace/Brand.vue | 3 +- resources/js/pages/workspaces/Create.vue | 3 +- resources/js/types/index.d.ts | 6 ++++ tests/Feature/Ai/AutofillBrandTest.php | 13 +++++---- tests/Feature/Middleware/SetLocaleTest.php | 28 +++++++++++++++++-- tests/Unit/Ai/Agents/BrandAnalyzerTest.php | 23 +++++++++++++++ 9 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 tests/Unit/Ai/Agents/BrandAnalyzerTest.php diff --git a/resources/js/components/BrandForm.vue b/resources/js/components/BrandForm.vue index b4e99f7a..87738d34 100644 --- a/resources/js/components/BrandForm.vue +++ b/resources/js/components/BrandForm.vue @@ -22,6 +22,7 @@ import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { autofill as autofillBrand } from '@/routes/app/workspaces'; +import type { ContentLanguageOption } from '@/types'; interface BrandFields { name?: string; @@ -55,7 +56,7 @@ const props = withDefaults( availableFonts: string[]; availableImageStyles: string[]; availableVoiceTraits: Record; - availableContentLanguages: { value: string; label: string }[]; + availableContentLanguages: ContentLanguageOption[]; autofill?: boolean; showName?: boolean; }>(), diff --git a/resources/js/components/LanguagePicker.vue b/resources/js/components/LanguagePicker.vue index 5e6e2d3d..d8dd6e59 100644 --- a/resources/js/components/LanguagePicker.vue +++ b/resources/js/components/LanguagePicker.vue @@ -6,10 +6,11 @@ import { Button } from '@/components/ui/button'; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { cn } from '@/lib/utils'; +import type { ContentLanguageOption } from '@/types'; interface Props { /** Selectable languages as { value: locale code, label: native name, englishName: name in English }. */ - options: { value: string; label: string; englishName?: string }[]; + options: ContentLanguageOption[]; placeholder?: string; searchPlaceholder?: string; emptyText?: string; diff --git a/resources/js/components/settings/BrandTab.vue b/resources/js/components/settings/BrandTab.vue index 276aa60e..dceecbb6 100644 --- a/resources/js/components/settings/BrandTab.vue +++ b/resources/js/components/settings/BrandTab.vue @@ -5,6 +5,7 @@ import WorkspaceController from '@/actions/App/Http/Controllers/App/WorkspaceCon import BrandForm from '@/components/BrandForm.vue'; import HeadingSmall from '@/components/HeadingSmall.vue'; import { Button } from '@/components/ui/button'; +import type { ContentLanguageOption } from '@/types'; interface Workspace { id: string; @@ -25,7 +26,7 @@ const props = defineProps<{ availableFonts: string[]; availableImageStyles: string[]; availableVoiceTraits: Record; - availableContentLanguages: { value: string; label: string }[]; + availableContentLanguages: ContentLanguageOption[]; }>(); const form = useForm({ diff --git a/resources/js/pages/settings/workspace/Brand.vue b/resources/js/pages/settings/workspace/Brand.vue index 7e29d74b..9e0c5808 100644 --- a/resources/js/pages/settings/workspace/Brand.vue +++ b/resources/js/pages/settings/workspace/Brand.vue @@ -10,6 +10,7 @@ import AppLayout from '@/layouts/AppLayout.vue'; import { members as membersRoute } from '@/routes/app'; import { index as apiKeysRoute } from '@/routes/app/api-keys'; import { brand as brandRoute, settings as workspaceSettings } from '@/routes/app/workspace'; +import type { ContentLanguageOption } from '@/types'; interface Workspace { id: string; @@ -30,7 +31,7 @@ defineProps<{ availableFonts: string[]; availableImageStyles: string[]; availableVoiceTraits: Record; - availableContentLanguages: { value: string; label: string }[]; + availableContentLanguages: ContentLanguageOption[]; }>(); const tabs = computed(() => [ diff --git a/resources/js/pages/workspaces/Create.vue b/resources/js/pages/workspaces/Create.vue index bb96ce62..dbd4c2b6 100644 --- a/resources/js/pages/workspaces/Create.vue +++ b/resources/js/pages/workspaces/Create.vue @@ -5,12 +5,13 @@ import BrandForm from '@/components/BrandForm.vue'; import { Button } from '@/components/ui/button'; import AuthLayout from '@/layouts/AuthLayout.vue'; import { store as storeWorkspace } from '@/routes/app/workspaces'; +import type { ContentLanguageOption } from '@/types'; defineProps<{ availableFonts: string[]; availableImageStyles: string[]; availableVoiceTraits: Record; - availableContentLanguages: { value: string; label: string }[]; + availableContentLanguages: ContentLanguageOption[]; }>(); const form = useForm({ diff --git a/resources/js/types/index.d.ts b/resources/js/types/index.d.ts index b1bf5001..e95a5037 100644 --- a/resources/js/types/index.d.ts +++ b/resources/js/types/index.d.ts @@ -97,3 +97,9 @@ export interface PinterestBoard { name: string; } +export interface ContentLanguageOption { + value: string; + label: string; + englishName?: string; +} + diff --git a/tests/Feature/Ai/AutofillBrandTest.php b/tests/Feature/Ai/AutofillBrandTest.php index 5f43f750..f0eec7c7 100644 --- a/tests/Feature/Ai/AutofillBrandTest.php +++ b/tests/Feature/Ai/AutofillBrandTest.php @@ -390,18 +390,23 @@ expect($result->toArray()['brand_voice_traits'])->toBe(['third_person', 'direct', 'no_hype']); }); -test('LLM language detection carries any supported language, not just en/es/pt-BR', function () { +test('LLM language detection wins and carries any supported language, not just en/es/pt-BR', function () { config()->set('services.gemini.api_key', 'fake-key'); config()->set('ai.default', 'gemini'); + // The declares "en", so the deterministic extractor yields 'en'. + // The LLM reads the actual German body and returns 'de'. Since the fixture's + // deterministic value differs from the LLM's, this isolates the mergeLlm + // precedence: the LLM value must win, and it must be a language beyond the + // original en/es/pt-BR set. Http::fake([ 'example.com' => Http::response(<<<'HTML' - + Beispiel GmbH -

Wir bauen Widgets.

+

Wir bauen Widgets für kleine Teams.

HTML, 200), ]); @@ -416,8 +421,6 @@ $result = ($this->autofill)('https://example.com'); - // The LLM's detected language wins over the deterministic one and must be - // able to be one of the 12 languages added beyond the original en/es/pt-BR. expect($result->language)->toBe('de'); }); diff --git a/tests/Feature/Middleware/SetLocaleTest.php b/tests/Feature/Middleware/SetLocaleTest.php index 8096c453..1da03f03 100644 --- a/tests/Feature/Middleware/SetLocaleTest.php +++ b/tests/Feature/Middleware/SetLocaleTest.php @@ -5,12 +5,13 @@ use App\Http\Middleware\App\SetLocale; use Illuminate\Http\Request; use Illuminate\Support\Facades\View; +use Symfony\Component\HttpFoundation\Response; /** * Run the middleware with the given `locale` cookie (null = no cookie) and - * return the shared `htmlDir` the Blade root view renders into ``. + * return the response, whose shared `htmlDir` and queued cookies can be asserted. */ -function runSetLocale(?string $locale): string +function setLocaleResponse(?string $locale): Response { $request = Request::create('/', 'GET'); @@ -18,7 +19,13 @@ function runSetLocale(?string $locale): string $request->cookies->set('locale', $locale); } - (new SetLocale)->handle($request, fn () => response('ok')); + return (new SetLocale)->handle($request, fn () => response('ok')); +} + +/** The shared `htmlDir` the Blade root view renders into ``. */ +function runSetLocale(?string $locale): string +{ + setLocaleResponse($locale); return View::shared('htmlDir'); } @@ -42,3 +49,18 @@ function runSetLocale(?string $locale): string expect(runSetLocale(null))->toBe('ltr'); expect(app()->getLocale())->toBe(config('languages.default')); }); + +test('persists the default locale cookie when the incoming cookie is invalid or absent', function (?string $locale) { + $cookie = collect(setLocaleResponse($locale)->headers->getCookies()) + ->first(fn ($cookie) => $cookie->getName() === 'locale'); + + expect($cookie)->not->toBeNull(); + expect($cookie->getValue())->toBe(config('languages.default')); +})->with(['sv', null]); + +test('does not reset the cookie when a valid locale is present', function () { + $cookie = collect(setLocaleResponse('ar')->headers->getCookies()) + ->first(fn ($cookie) => $cookie->getName() === 'locale'); + + expect($cookie)->toBeNull(); +}); diff --git a/tests/Unit/Ai/Agents/BrandAnalyzerTest.php b/tests/Unit/Ai/Agents/BrandAnalyzerTest.php new file mode 100644 index 00000000..10f9c71d --- /dev/null +++ b/tests/Unit/Ai/Agents/BrandAnalyzerTest.php @@ -0,0 +1,23 @@ +schema(new JsonSchemaTypeFactory); + + // Guards against the enum silently shrinking back to a hardcoded subset: + // the LLM may only emit a language the schema allows. + expect($schema['language']->toArray()['enum'])->toBe(ContentLanguage::values()); +}); + +test('instructions list every supported language code', function () { + $instructions = (new BrandAnalyzer)->instructions(); + + foreach (ContentLanguage::values() as $code) { + expect($instructions)->toContain("`{$code}`"); + } +}); From ec808bdea81464263e01cda8fbf8775a997bbe88 Mon Sep 17 00:00:00 2001 From: Paulo Castellano Date: Fri, 3 Jul 2026 19:32:52 -0300 Subject: [PATCH 12/12] Fix the remaining reka trigger-width dropdowns for Tailwind v4 The workspace switcher menu, the label filter, and the templates category popover still used the v3 bracket syntax w-[--reka-*-trigger-width], which Tailwind v4 compiles to an invalid `width: --reka-...` so the floating content no longer matched its trigger. Switch them to the v4 CSS-variable syntax w-(--reka-*-trigger-width), matching the FontPicker/LanguagePicker fix. --- resources/js/components/AppSidebar.vue | 2 +- resources/js/components/labels/LabelFilter.vue | 2 +- resources/js/pages/posts/templates/Index.vue | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/js/components/AppSidebar.vue b/resources/js/components/AppSidebar.vue index c4e714fc..ec4ade9f 100644 --- a/resources/js/components/AppSidebar.vue +++ b/resources/js/components/AppSidebar.vue @@ -199,7 +199,7 @@ const handleCreateWorkspace = () => { - {{ $t('sidebar.workspaces') }} diff --git a/resources/js/components/labels/LabelFilter.vue b/resources/js/components/labels/LabelFilter.vue index 66aadc09..b2b44f79 100644 --- a/resources/js/components/labels/LabelFilter.vue +++ b/resources/js/components/labels/LabelFilter.vue @@ -102,7 +102,7 @@ const clear = () => { - + diff --git a/resources/js/pages/posts/templates/Index.vue b/resources/js/pages/posts/templates/Index.vue index 184214e8..73cebd8c 100644 --- a/resources/js/pages/posts/templates/Index.vue +++ b/resources/js/pages/posts/templates/Index.vue @@ -211,7 +211,7 @@ const pageTitle = computed(() => trans('posts.templates.browser_title')); - +