{{ __('Admin · System') }}

{{ __('Translation providers') }}

{{ __("Multi-language auto-reply uses one of these providers to translate inbound messages and craft replies in the customer's language. MyMemory is active out-of-box (free, no key) — plug in DeepL / Google Cloud / LibreTranslate for higher quality or self-hosted privacy.") }}

@php $officialOnly = \App\Services\Translation\TranslationProviderManager::isOfficialOnlyMode(); $unofficialSlugs = \App\Services\Translation\TranslationProviderManager::UNOFFICIAL_SLUGS; @endphp {{-- Official-only lockdown panel --}}

{{ __('Compliance lockdown') }}

{{ $officialOnly ? 'On' : 'Off' }}

When on, the fallback chain skips {{ implode(', ', $unofficialSlugs) }} and routes auto-reply translation only through official paid APIs (DeepL, Google Cloud). Required by some enterprise security policies that prohibit unofficial 3rd-party endpoints.

@csrf
@forelse ($providers as $p) @php $isLockdownSkipped = $officialOnly && in_array($p->slug, $unofficialSlugs, true); @endphp

{{ $p->name }}

{{ $p->is_active ? 'Active' : 'Disabled' }} @if ($p->is_default) {{ __('Default') }} @endif @if ($isLockdownSkipped) {{ __('Lockdown · skipped') }} @endif
slug: {{ $p->slug }}{{ $p->description ? ' · ' . $p->description : '' }}
@if (!$p->is_default && $p->is_active)
@csrf
@endif
@csrf
@csrf @method('PATCH') @if (!empty($p->credential_fields))
@foreach ($p->credential_fields as $key => $spec) @php $existingVal = $p->credentials_decrypted[$key] ?? ''; @endphp @endforeach
@else
{{ __('No credentials required — this provider works out of the box.') }}
@endif
@empty
{{ __('No translation providers configured') }}

{{ __('Run') }} php artisan db:seed --class=TranslationProviderSeeder to populate.

@endforelse