diff --git a/src/app/Livewire/DocumentViewer.php b/src/app/Livewire/DocumentViewer.php index f7461ac..561dc6e 100644 --- a/src/app/Livewire/DocumentViewer.php +++ b/src/app/Livewire/DocumentViewer.php @@ -4,25 +4,32 @@ use App\Models\Document; use App\Services\DocumentService; -use Livewire\Component; +use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Auth; +use Livewire\Component; class DocumentViewer extends Component { public Document $document; public $backlinks = []; - public $renderedContent = ''; + public string $renderedContent = ''; + public string $viewLocale = ''; + public bool $isFallback = false; public function mount(Document $document, DocumentService $documentService) { - $this->document = $document; + $this->document = $document->load('translations'); - $this->renderedContent = $this->document->processLinks(); + $current = App::getLocale(); + $translation = $document->translationFor($current, fallback: true); - $this->backlinks = $documentService->getBacklinks($this->document); + $this->viewLocale = $translation?->locale ?? $document->default_locale; + $this->isFallback = ($current !== $this->viewLocale); + $this->renderedContent = $document->processLinks(); + $this->backlinks = $documentService->getBacklinks($document); if (Auth::check()) { - $documentService->recordDocumentAccess($this->document, Auth::id()); + $documentService->recordDocumentAccess($document, Auth::id()); } } diff --git a/src/lang/de/messages.php b/src/lang/de/messages.php index d131800..9da92d1 100644 --- a/src/lang/de/messages.php +++ b/src/lang/de/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Inhalt', 'content_placeholder' => 'Schreiben Sie hier Ihren Markdown...', 'saving' => 'Speichern...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -123,6 +130,25 @@ 'back_to_home' => 'Zurück zur Startseite', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Profil', diff --git a/src/lang/en/messages.php b/src/lang/en/messages.php index af317d8..3cb2c26 100644 --- a/src/lang/en/messages.php +++ b/src/lang/en/messages.php @@ -41,6 +41,11 @@ 'saving' => 'Saving...', 'translation_added' => 'Translation added.', 'translation_deleted' => 'Translation deleted.', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -125,6 +130,25 @@ 'back_to_home' => 'Back to Home', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Profile', diff --git a/src/lang/es/messages.php b/src/lang/es/messages.php index b8cc8af..64607f8 100644 --- a/src/lang/es/messages.php +++ b/src/lang/es/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Contenido', 'content_placeholder' => 'Escriba su markdown aquí...', 'saving' => 'Guardando...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -123,6 +130,25 @@ 'back_to_home' => 'Volver al inicio', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Perfil', diff --git a/src/lang/fr/messages.php b/src/lang/fr/messages.php index d973687..376d507 100644 --- a/src/lang/fr/messages.php +++ b/src/lang/fr/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Contenu', 'content_placeholder' => 'Écrivez votre markdown ici...', 'saving' => 'Enregistrement...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -123,6 +130,25 @@ 'back_to_home' => 'Retour à l\'accueil', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Profil', diff --git a/src/lang/hi/messages.php b/src/lang/hi/messages.php index 9356895..eecf30c 100644 --- a/src/lang/hi/messages.php +++ b/src/lang/hi/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'सामग्री', 'content_placeholder' => 'यहां अपना मार्कडाउन लिखें...', 'saving' => 'सहेजा जा रहा है...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -124,6 +131,25 @@ 'back_to_home' => 'होम पर वापस जाएं', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'प्रोफ़ाइल', diff --git a/src/lang/it/messages.php b/src/lang/it/messages.php index e954fb6..1ecb4c6 100644 --- a/src/lang/it/messages.php +++ b/src/lang/it/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Contenuto', 'content_placeholder' => 'Scrivi il tuo markdown qui...', 'saving' => 'Salvataggio...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -124,6 +131,25 @@ 'back_to_home' => 'Torna alla Home', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Profilo', diff --git a/src/lang/ja/messages.php b/src/lang/ja/messages.php index e8ac3e0..227d632 100644 --- a/src/lang/ja/messages.php +++ b/src/lang/ja/messages.php @@ -41,6 +41,11 @@ 'saving' => '保存中...', 'translation_added' => '翻訳を追加しました。', 'translation_deleted' => '翻訳を削除しました。', + 'fallback_notice' => 'この記事には選択した言語の翻訳がありません。元の言語版を表示しています。', + 'add_translation' => '翻訳を追加', + 'set_as_default' => 'デフォルトに設定', + 'delete_translation_blocked' => 'デフォルト言語の翻訳は削除できません。', + 'translation_tabs_label' => '言語', ], // Quick Switcher @@ -125,6 +130,14 @@ 'back_to_home' => 'ホームに戻る', ], + 'locale_names' => [ + 'en' => '英語', 'ja' => '日本語', + 'zh-CN' => '簡体字中国語', 'zh-TW' => '繁体字中国語', + 'ko' => '韓国語', 'hi' => 'ヒンディー語', 'vi' => 'ベトナム語', 'tr' => 'トルコ語', + 'de' => 'ドイツ語', 'fr' => 'フランス語', 'es' => 'スペイン語', 'pt-BR' => 'ポルトガル語(ブラジル)', + 'ru' => 'ロシア語', 'uk' => 'ウクライナ語', 'it' => 'イタリア語', 'pl' => 'ポーランド語', + ], + // Profile 'profile' => [ 'title' => 'プロフィール', diff --git a/src/lang/ko/messages.php b/src/lang/ko/messages.php index 2713897..1d26cc5 100644 --- a/src/lang/ko/messages.php +++ b/src/lang/ko/messages.php @@ -39,6 +39,13 @@ 'content_label' => '내용', 'content_placeholder' => '여기에 마크다운을 작성하세요...', 'saving' => '저장 중...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -123,6 +130,25 @@ 'back_to_home' => '홈으로 돌아가기', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => '프로필', diff --git a/src/lang/pl/messages.php b/src/lang/pl/messages.php index 2457406..279d2bb 100644 --- a/src/lang/pl/messages.php +++ b/src/lang/pl/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Treść', 'content_placeholder' => 'Napisz swój markdown tutaj...', 'saving' => 'Zapisywanie...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -124,6 +131,25 @@ 'back_to_home' => 'Wróć do strony głównej', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Profil', diff --git a/src/lang/pt-BR/messages.php b/src/lang/pt-BR/messages.php index bcc1b96..7fe4f63 100644 --- a/src/lang/pt-BR/messages.php +++ b/src/lang/pt-BR/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Conteúdo', 'content_placeholder' => 'Escreva seu markdown aqui...', 'saving' => 'Salvando...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -124,6 +131,25 @@ 'back_to_home' => 'Voltar para Início', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Perfil', diff --git a/src/lang/ru/messages.php b/src/lang/ru/messages.php index 9d13c9b..23684bf 100644 --- a/src/lang/ru/messages.php +++ b/src/lang/ru/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Содержимое', 'content_placeholder' => 'Напишите здесь ваш markdown...', 'saving' => 'Сохранение...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -124,6 +131,25 @@ 'back_to_home' => 'Вернуться на главную', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Профиль', diff --git a/src/lang/tr/messages.php b/src/lang/tr/messages.php index 2145167..06b57e1 100644 --- a/src/lang/tr/messages.php +++ b/src/lang/tr/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'İçerik', 'content_placeholder' => 'Markdown\'ınızı buraya yazın...', 'saving' => 'Kaydediliyor...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -124,6 +131,25 @@ 'back_to_home' => 'Ana Sayfaya Dön', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Profil', diff --git a/src/lang/uk/messages.php b/src/lang/uk/messages.php index e6b1266..b456c55 100644 --- a/src/lang/uk/messages.php +++ b/src/lang/uk/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Вміст', 'content_placeholder' => 'Напишіть тут ваш markdown...', 'saving' => 'Збереження...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -124,6 +131,25 @@ 'back_to_home' => 'Повернутися на головну', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Профіль', diff --git a/src/lang/vi/messages.php b/src/lang/vi/messages.php index ca62697..9f4cb46 100644 --- a/src/lang/vi/messages.php +++ b/src/lang/vi/messages.php @@ -39,6 +39,13 @@ 'content_label' => 'Nội dung', 'content_placeholder' => 'Viết markdown của bạn ở đây...', 'saving' => 'Đang lưu...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -124,6 +131,25 @@ 'back_to_home' => 'Quay lại trang chủ', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => 'Hồ sơ', diff --git a/src/lang/zh-CN/messages.php b/src/lang/zh-CN/messages.php index f631670..f758df3 100644 --- a/src/lang/zh-CN/messages.php +++ b/src/lang/zh-CN/messages.php @@ -39,6 +39,13 @@ 'content_label' => '内容', 'content_placeholder' => '在此输入Markdown内容...', 'saving' => '保存中...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -123,6 +130,25 @@ 'back_to_home' => '返回首页', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => '个人资料', diff --git a/src/lang/zh-TW/messages.php b/src/lang/zh-TW/messages.php index 3f72442..185d6b7 100644 --- a/src/lang/zh-TW/messages.php +++ b/src/lang/zh-TW/messages.php @@ -39,6 +39,13 @@ 'content_label' => '內容', 'content_placeholder' => '在此輸入Markdown內容...', 'saving' => '儲存中...', + 'fallback_notice' => 'A translation in your selected language is not available. Showing the :locale version.', + 'add_translation' => 'Add translation', + 'translation_added' => 'Translation added.', + 'translation_deleted' => 'Translation deleted.', + 'set_as_default' => 'Set as default', + 'delete_translation_blocked' => 'The default-language translation cannot be deleted.', + 'translation_tabs_label' => 'Languages', ], // Quick Switcher @@ -123,6 +130,25 @@ 'back_to_home' => '返回首頁', ], + 'locale_names' => [ + 'en' => 'English', + 'ja' => 'Japanese', + 'zh-CN' => 'Simplified Chinese', + 'zh-TW' => 'Traditional Chinese', + 'ko' => 'Korean', + 'hi' => 'Hindi', + 'vi' => 'Vietnamese', + 'tr' => 'Turkish', + 'de' => 'German', + 'fr' => 'French', + 'es' => 'Spanish', + 'pt-BR' => 'Portuguese (Brazil)', + 'ru' => 'Russian', + 'uk' => 'Ukrainian', + 'it' => 'Italian', + 'pl' => 'Polish', + ], + // Profile 'profile' => [ 'title' => '個人資料', diff --git a/src/resources/views/livewire/document-viewer.blade.php b/src/resources/views/livewire/document-viewer.blade.php index b3eafd1..169834d 100644 --- a/src/resources/views/livewire/document-viewer.blade.php +++ b/src/resources/views/livewire/document-viewer.blade.php @@ -1,4 +1,20 @@
+ @if($isFallback) +
+

+ {{ __('messages.documents.fallback_notice', ['locale' => __('messages.locale_names.' . $viewLocale)]) }} +

+ @auth + @can('update', $document) + + {{ __('messages.documents.add_translation') }} + + @endcan + @endauth +
+ @endif +
diff --git a/src/tests/Feature/DocumentI18nTest.php b/src/tests/Feature/DocumentI18nTest.php new file mode 100644 index 0000000..9404ee7 --- /dev/null +++ b/src/tests/Feature/DocumentI18nTest.php @@ -0,0 +1,68 @@ +create(['default_locale' => 'en', 'slug' => 'hello']); + $doc->translations()->where('locale', 'en')->update(['title' => 'Hello', 'content' => 'Hi', 'rendered_html' => '

Hi

']); + DocumentTranslation::factory()->create([ + 'document_id' => $doc->id, + 'locale' => 'ja', + 'title' => 'こんにちは', + 'content' => 'やあ', + 'rendered_html' => '

やあ

', + ]); + + session()->put('locale', 'ja'); + $response = $this->get(route('documents.show', $doc)); + + $response->assertOk(); + $response->assertSee('こんにちは'); + $response->assertSee('やあ', false); + } + + public function test_viewer_falls_back_with_banner_when_locale_missing(): void + { + $doc = Document::factory()->create(['default_locale' => 'en', 'slug' => 'fb']); + $doc->translations()->where('locale', 'en')->update(['title' => 'Hello', 'content' => 'Hi', 'rendered_html' => '

Hi

']); + + session()->put('locale', 'ja'); + $response = $this->get(route('documents.show', $doc)); + + $response->assertOk(); + $response->assertSee('Hello'); // fallback content + // banner present (use the JA translation key value) + $response->assertSeeText(__('messages.documents.fallback_notice', [], 'ja')); + } + + public function test_no_banner_when_translation_exists(): void + { + $doc = Document::factory()->create(['default_locale' => 'en', 'slug' => 'nb']); + $doc->translations()->where('locale', 'en')->update(['title' => 'Hello', 'content' => 'Hi', 'rendered_html' => '

Hi

']); + DocumentTranslation::factory()->create([ + 'document_id' => $doc->id, + 'locale' => 'ja', + 'title' => 'こんにちは', + 'content' => 'やあ', + 'rendered_html' => '

やあ

', + ]); + + session()->put('locale', 'ja'); + $response = $this->get(route('documents.show', $doc)); + + $response->assertOk(); + $response->assertDontSeeText(__('messages.documents.fallback_notice', [], 'ja')); + } +}