From fd0d978b0e40c55ee807c4bc9d4c94b3f519c7a9 Mon Sep 17 00:00:00 2001 From: bernardhanna Date: Wed, 16 Sep 2026 17:00:56 +0100 Subject: [PATCH] Serve the CodyColor kit from Nova with an Italian translation The CodyColor kit page was a hardcoded blade on a static route that ignored the site language, so it could not be translated. Its static route was already removed from master, leaving the page heading for a 404 once master deploys: nothing served /training/cody-color-kit any more. Move the page into the Nova-managed TrainingResource model and generalise that model's existing locale_overrides column from PDF links only to every text field, so switching the site to Italian serves the translated page and the Italian PDFs. Fields left empty in a locale fall back to English one by one, so a partly finished translation never blanks a section. The Italian copy and the Italian learning-bits graphic come from the translated landing page document supplied by the Italian HUB. The Italian PDFs are already on S3 under docs/training/IT/color-kit/. Nova gets one collapsed translation panel per language listed in config/codeweek.php. That list is deliberately short: a panel for each of the 29 locales would put several hundred fields in a single Nova form. --- app/Nova/TrainingResource.php | 101 ++++++++ app/TrainingResource.php | 62 +++++ config/codeweek.php | 8 + .../TrainingResourceCodyColorKitSeeder.php | 158 +++++++++++++ .../codycolor-kit-learning-bits-it.png | Bin 0 -> 83749 bytes .../views/static/training/index.blade.php | 13 +- .../views/static/training/module-0.blade.php | 215 ------------------ resources/views/training/show.blade.php | 62 ++--- .../TrainingResourceTranslationTest.php | 193 ++++++++++++++++ 9 files changed, 560 insertions(+), 252 deletions(-) create mode 100644 database/seeders/TrainingResourceCodyColorKitSeeder.php create mode 100644 public/images/training/codycolor-kit-learning-bits-it.png delete mode 100644 resources/views/static/training/module-0.blade.php create mode 100644 tests/Feature/TrainingResourceTranslationTest.php diff --git a/app/Nova/TrainingResource.php b/app/Nova/TrainingResource.php index f9399eb39..577d8e6ef 100644 --- a/app/Nova/TrainingResource.php +++ b/app/Nova/TrainingResource.php @@ -56,6 +56,97 @@ private static function localesSorted(): array return $locales; } + /** + * Locales offered in the "Translated page content" panel. + */ + private static function pageTranslationLocales(): array + { + $configured = config('codeweek.training_translation_locales', ['it']); + if (is_string($configured)) { + $configured = array_map('trim', explode(',', $configured)); + } + + $available = self::localesSorted(); + + return array_values(array_filter( + (array) $configured, + fn ($locale) => $locale !== 'en' && in_array($locale, $available, true) + )); + } + + /** + * Build one translation field, stored under locale_overrides[$locale][$field]. + */ + private function translationField(string $locale, string $field, string $label, string $type) + { + $novaField = match ($type) { + 'trix' => Trix::make($label.' ('.strtoupper($locale).')', 'locale_'.$locale.'_'.$field), + 'textarea' => Textarea::make($label.' ('.strtoupper($locale).')', 'locale_'.$locale.'_'.$field), + default => Text::make($label.' ('.strtoupper($locale).')', 'locale_'.$locale.'_'.$field), + }; + + return $novaField + ->nullable() + ->hideFromIndex() + ->resolveUsing(function () use ($locale, $field) { + $overrides = $this->resource->locale_overrides ?? []; + + return $overrides[$locale][$field] ?? ''; + }) + ->fillUsing(function ($request, $model, $attribute, $requestAttribute) use ($locale, $field) { + $overrides = $model->locale_overrides ?? []; + if (! isset($overrides[$locale]) || ! is_array($overrides[$locale])) { + $overrides[$locale] = []; + } + + $value = $request->get($requestAttribute); + if ($value === null || trim(strip_tags((string) $value)) === '') { + unset($overrides[$locale][$field]); + } else { + $overrides[$locale][$field] = $value; + } + + if ($overrides[$locale] === []) { + unset($overrides[$locale]); + } + + $model->locale_overrides = $overrides === [] ? null : $overrides; + }); + } + + /** + * Full-page translation fields for one locale, mirroring the English field types. + */ + private function pageTranslationFieldsFor(string $locale): array + { + $definitions = [ + ['card_title', 'Card title', 'text'], + ['card_author', 'Card author', 'text'], + ['page_title', 'Page title', 'text'], + ['hero_author', 'Hero author', 'text'], + ['hero_button_text', 'Hero button text', 'text'], + ['hero_secondary_button_text', 'Hero secondary button text', 'text'], + ['highlight_box', 'Highlight box', 'trix'], + ['intro', 'Intro', 'trix'], + ['content', 'Content', 'trix'], + ['body_image_alt', 'Body image alt text', 'text'], + ['video_script_text', 'Video script link text', 'text'], + ['contacts_section', 'Contacts section', 'trix'], + ['register_box_section', 'Register box section', 'trix'], + ['about_box_section', 'About box section', 'trix'], + ['button_text', 'Button text', 'text'], + ['secondary_button_text', 'Secondary button text', 'text'], + ['third_button_text', 'Third button text', 'text'], + ['meta_title', 'Meta title', 'text'], + ['meta_description', 'Meta description', 'textarea'], + ]; + + return array_map( + fn (array $definition) => $this->translationField($locale, ...$definition), + $definitions + ); + } + public function fields(Request $request): array { $pdfTranslationFields = []; @@ -311,6 +402,16 @@ public function fields(Request $request): array ->collapsedByDefault(); } + foreach (self::pageTranslationLocales() as $locale) { + $fields[] = Panel::make( + 'Translated page content ('.strtoupper($locale).')', + $this->pageTranslationFieldsFor($locale) + ) + ->help('Full page translation for '.strtoupper($locale).'. Any field left empty falls back to the English version above, so a partly translated page never renders blank. PDF download links live in the “Translated PDF links” panel.') + ->collapsable() + ->collapsedByDefault(); + } + return $fields; } diff --git a/app/TrainingResource.php b/app/TrainingResource.php index 0e39c8bc4..f21e68d21 100644 --- a/app/TrainingResource.php +++ b/app/TrainingResource.php @@ -10,6 +10,35 @@ class TrainingResource extends Model { use HasFactory; + /** + * Fields that can be translated per locale through locale_overrides. + * + * pdf_links_section is deliberately absent: it has its own resolution path + * in pdfLinksSectionForLocale(), which merges the English supporting-detail + * block and applies per-URL replacements. + */ + public const TRANSLATABLE_FIELDS = [ + 'card_title', + 'card_author', + 'page_title', + 'hero_author', + 'hero_button_text', + 'hero_secondary_button_text', + 'intro', + 'highlight_box', + 'content', + 'body_image_alt', + 'video_script_text', + 'contacts_section', + 'register_box_section', + 'about_box_section', + 'button_text', + 'secondary_button_text', + 'third_button_text', + 'meta_title', + 'meta_description', + ]; + protected $fillable = [ 'slug', 'card_title', @@ -108,6 +137,39 @@ protected function generateUniqueSlug(string $baseSlug): string return $slug; } + /** + * Value of a translatable field for the active (or given) locale. + * + * Falls back to the default (English) attribute per field, so a partly + * translated locale never renders blank sections. + */ + public function forLocale(string $field, ?string $locale = null): ?string + { + $default = $this->getAttribute($field); + + if (! in_array($field, self::TRANSLATABLE_FIELDS, true)) { + return $default; + } + + $locale = $locale ?? app()->getLocale(); + $overrides = $this->locale_overrides ?? []; + $value = $overrides[$locale][$field] ?? null; + + if (! is_string($value) || $this->isBlankHtml($value)) { + return $default; + } + + return $value; + } + + /** + * Trix stores an emptied editor as markup like "

". + */ + protected function isBlankHtml(string $value): bool + { + return trim(strip_tags($value)) === '' && ! str_contains($value, 'card_image); diff --git a/config/codeweek.php b/config/codeweek.php index 29a8808ff..9443768e7 100644 --- a/config/codeweek.php +++ b/config/codeweek.php @@ -36,4 +36,12 @@ 'trim', explode(',', (string) env('CERTIFICATE_ADMIN_EMAILS', '')) ))), + + // Languages that get a full page-content translation panel on Nova training + // resources. Kept short on purpose: one panel per locale times ~13 fields + // would put hundreds of fields in a single Nova form. + 'training_translation_locales' => array_values(array_filter(array_map( + 'trim', + explode(',', (string) env('TRAINING_TRANSLATION_LOCALES', 'it')) + ))), ]; diff --git a/database/seeders/TrainingResourceCodyColorKitSeeder.php b/database/seeders/TrainingResourceCodyColorKitSeeder.php new file mode 100644 index 000000000..bed673a63 --- /dev/null +++ b/database/seeders/TrainingResourceCodyColorKitSeeder.php @@ -0,0 +1,158 @@ + 'cody-color-kit'], + [ + 'card_title' => 'CodyColor Kit', + 'card_author' => 'By Alessandro Bogliolo and Italian EU Code Week HUB', + 'card_image' => '/img/learning/cody-color-kit.png', + 'page_title' => 'CodyColor KIT', + 'hero_author' => 'By Alessandro Bogliolo and the Italian EU Code Week HUB', + 'highlight_box' => <<<'HTML' +

Scientific author: Alessandro Bogliolo - EU Code Week Italian ambassador; University of Urbino

+

Contributors and testimonials: Fabrizia Agnello, Carmela Cundari, Alfonsina Cinzia Troisi - EU Code Week Italian Leading Teachers

+

Instructional design, project management, internationalisation: Veronica Ruberti - EU Code Week Italian HUB Coordinator; Fondazione LINKS

+

Internationalisation and translation: Lucia Terrone - EU Code Week Italian HUB Coordinator; Fondazione LINKS

+

This resource is developed in collaboration with CodyRoby Academy

+HTML, + 'intro' => <<<'HTML' +

CodyColor is an unplugged coding method (without the use of electronic devices) designed by Alessandro Bogliolo, professor of Information Processing Systems at the University of Urbino, aiming at lowering barriers to practice computational thinking. Based on extremely simple rules, CodyColor can be introduced from early childhood education, but also supports challenging activities for lower/upper secondary school and adults.

+

In this kit you'll find thorough explanations of the principles and potential of the CodyColor method, concrete proposals for teaching activities using the kit to promote computational thinking skills, and detailed guidelines to create the tools and bring the activities into your classroom.

+HTML, + 'content' => <<<'HTML' +

Who is the CodyColor KIT for?

+

CodyColor KIT is aimed at teachers of all school levels and educators. It can be applied in formal and informal learning contexts, complementing both STEM and humanities because it strengthens:

+ +

CodyColor KIT is aimed at families because unplugged coding activities can be carried out playfully outside formal learning contexts, are engaging, require no prerequisites, no specific equipment, and are suitable for all ages.

+

Why discover, experiment with, and learn the CodyColor method?

+ +

How does this kit work?

+

In this page you will discover the CodyColor method through an asynchronous training path in small, sequential, easy-to-follow steps, using accessible language. Every step is a downloadable PDF, designed to be easy to print and use in class, containing theoretical background, lesson outlines, activity descriptions, facilitation prompts, and guidelines for teachers.

+

The objective is to guide you from learning the methods to applying them in the classroom, from learning to teaching with the CodyColor lesson plans as scaffolding materials.

+

Let's start!

+CodyColor Kit Learning Bits +HTML, + 'pdf_links_section' => <<<'HTML' +

In these learning bits you will:

+ +HTML, + 'contacts_section' => <<<'HTML' +

Contacts

+

For information, curiosities, and insights contact: codeweek@linksfoundation.com

+HTML, + 'register_box_section' => <<<'HTML' +

Every time you run a CodyColor challenge in class, during a school event, a team building, or a training course, register it on the map of the European Code Week. Every organizer will receive a participation certificate for their commitment and will contribute to a campaign raising awareness of the importance of computational thinking skills.

+

If you want to get in touch with an international group of enthusiastic teachers, sign up for the EU Code Week teachers' Facebook group! To take a further step and collaborate with other schools in your country or across borders, join the Code Week 4 All challenge.

+HTML, + 'third_button_text' => 'Register activity', + 'third_button_url' => '/add?skip=1', + 'meta_title' => 'CodyColor KIT – Unplugged Coding Method', + 'meta_description' => 'Discover the CodyColor unplugged coding method designed by Alessandro Bogliolo. A color-based, multilingual approach to computational thinking for all ages and school levels.', + 'roadmap_embed_kind' => 'none', + 'position' => 0, + 'active' => true, + 'locale_overrides' => ['it' => self::italianOverrides()], + ] + ); + } + + /** + * Italian page copy, taken verbatim from the translated landing page document. + */ + private static function italianOverrides(): array + { + return [ + 'card_title' => 'CodyColor KIT', + 'card_author' => 'Di Alessandro Bogliolo e dell’HUB italiano di EU Code Week', + 'page_title' => 'CodyColor KIT', + 'hero_author' => 'Di Alessandro Bogliolo e dell’HUB italiano di EU Code Week', + 'highlight_box' => <<<'HTML' +

Autore scientifico: Alessandro Bogliolo - Ambassador italiano di EU Code Week; Università di Urbino

+

Contributi e testimonianze: Fabrizia Agnello, Carmela Cundari, Alfonsina Cinzia Troisi - Leading Teachers italiane di EU Code Week

+

Instructional design, project management, internazionalizzazione: Veronica Ruberti - Coordinatrice HUB italiano di EU Code Week; Fondazione LINKS

+

Internazionalizzazione e traduzione: Lucia Terrone - Coordinatrice HUB italiano di EU Code Week; Fondazione LINKS

+

Questa risorsa è sviluppata in collaborazione con CodyRoby Academy

+HTML, + 'intro' => <<<'HTML' +

CodyColor è un metodo di coding unplugged (cioè senza dispositivi elettronici) ideato da Alessandro Bogliolo, professore di Sistemi di Elaborazione dell’Informazione all’Università di Urbino, con l’obiettivo di abbattere le barriere alla pratica del pensiero computazionale. Basato su regole estremamente semplici, CodyColor può essere introdotto fin dalla scuola dell’infanzia, ma permette di proporre attività sfidanti anche alla scuola secondaria di primo e secondo grado e alle persone adulte.

+

In questo kit trovi spiegazioni approfondite dei principi e delle potenzialità del metodo CodyColor, proposte concrete di attività didattiche che utilizzano il kit per sviluppare competenze di pensiero computazionale e indicazioni dettagliate per costruire i materiali e portare le attività in classe.

+HTML, + 'content' => <<<'HTML' +

A chi è rivolto il CodyColor KIT?

+

CodyColor KIT è pensato per insegnanti di ogni ordine e grado, educatrici ed educatori. Può essere utilizzato in contesti di apprendimento formali e non formali, a integrazione sia delle discipline STEM sia delle materie umanistiche, perché rafforza:

+ +

CodyColor KIT è rivolto anche alle famiglie, perché le attività di coding unplugged possono essere proposte in modo ludico anche fuori dalla scuola, sono coinvolgenti, non richiedono prerequisiti particolari, non richiedono attrezzature specifiche e sono adatte a tutte le età.

+

Perché scoprire, sperimentare e imparare il metodo CodyColor?

+ +

Come funziona questo kit?

+

In questa pagina scoprirai il metodo CodyColor attraverso un percorso di formazione asincrono in piccoli passi sequenziali, brevi e facili da seguire, con un linguaggio accessibile. Ogni passo corrisponde a un PDF scaricabile, pensato per essere facile da stampare e utilizzare in classe, che contiene inquadramento teorico, tracce di lezione, descrizioni delle attività, spunti di facilitazione e linee guida per insegnanti ed educatrici/educatori.

+

L’obiettivo è accompagnarti dal momento in cui impari il metodo al momento in cui lo applichi in classe, passando dal “learning” al “teaching” con i lesson plan di CodyColor come materiali di supporto.

+

Iniziamo!

+Learning bits del Kit CodyColor +HTML, + 'pdf_links_section' => <<<'HTML' +

In questi learning bits troverai:

+ +HTML, + 'contacts_section' => <<<'HTML' +

Contatti

+

Per informazioni, curiosità e approfondimenti scrivi a: codeweek@linksfoundation.com.

+HTML, + 'register_box_section' => <<<'HTML' +

Ogni volta che proponi una sfida CodyColor in classe, durante un evento scolastico, un’attività di team building o un corso di formazione, registra l’attività sulla mappa della European Code Week. Ogni organizzatore riceverà un attestato di partecipazione per il proprio impegno e contribuirà a una campagna di sensibilizzazione sull’importanza delle competenze di pensiero computazionale.

+

Se vuoi entrare in contatto con un gruppo internazionale di insegnanti entusiaste/i, iscriviti al gruppo Facebook EU Code Week Teachers! Per fare un ulteriore passo avanti e collaborare con altre scuole nel tuo Paese o oltre frontiera, unisciti alla Code Week 4 All challenge.

+HTML, + 'third_button_text' => 'Registra le tue attività', + 'meta_title' => 'CodyColor KIT – Metodo di coding unplugged', + 'meta_description' => 'Scopri il metodo di coding unplugged CodyColor ideato da Alessandro Bogliolo: un approccio basato sui colori e multilingue per il pensiero computazionale, adatto a tutte le età e a ogni ordine di scuola.', + ]; + } +} diff --git a/public/images/training/codycolor-kit-learning-bits-it.png b/public/images/training/codycolor-kit-learning-bits-it.png new file mode 100644 index 0000000000000000000000000000000000000000..4436a7eaa8345efdd658b1577bfd5046c65c54f0 GIT binary patch literal 83749 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
    NoPV;VXayEWJIU1UO~;E8G+d^yedUHZlLU0M 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 ($resource) { return [ 'image' => $resource->resolved_card_image, - 'title' => $resource->card_title, - 'author' => $resource->card_author, + 'title' => $resource->forLocale('card_title'), + 'author' => $resource->forLocale('card_author'), 'link' => '/training/' . $resource->slug, 'is_translated' => false, ]; @@ -16,14 +16,9 @@ (object) ['label' => 'Training', 'href' => ''], ]; + // CodyColor Kit is not listed here: it is a Nova-managed training resource + // and is rendered from $dynamicResults above. $results = [ - [ - 'image' => '/img/learning/cody-color-kit.png', - 'title' => 'training.lessons.0.title', - 'author' => 'training.lessons.0.author', - 'link' => '/training/cody-color-kit', - 'is_translated' => true, - ], [ 'image' => '/img/learning/coding-without-computers.png', 'title' => 'training.lessons.1.title', diff --git a/resources/views/static/training/module-0.blade.php b/resources/views/static/training/module-0.blade.php deleted file mode 100644 index cbb81be3c..000000000 --- a/resources/views/static/training/module-0.blade.php +++ /dev/null @@ -1,215 +0,0 @@ -@extends('layout.new_base') - -@section('title', 'CodyColor KIT – Unplugged Coding Method') -@section('description', - 'Discover the CodyColor unplugged coding method designed by Alessandro Bogliolo. A color-based, - multilingual approach to computational thinking for all ages and school levels.') - -@section('content') -
    - - @include('codingathome.banner', [ - 'author' => 'By Alessandro Bogliolo and the Italian EU Code Week HUB', - 'title' => 'CodyColor KIT', - ]) - -
    -
    - {{-- Contributors --}} -
    -

    Scientific author: Alessandro - Bogliolo - EU Code Week Italian - ambassador; University of Urbino

    -

    Contributors and testimonials: - Fabrizia Agnello, Carmela Cundari, - Alfonsina Cinzia Troisi - EU Code Week Italian Leading Teachers

    -

    Instructional design, project - management, internationalisation: - Veronica Ruberti - EU Code Week Italian HUB Coordinator; Fondazione LINKS

    -

    Internationalisation and - translation: Lucia Terrone - EU Code Week - Italian HUB Coordinator; Fondazione LINKS

    -

    This resource is developed in collaboration with CodyRoby Academy

    -
    - - {{-- Short Paragraph --}} -
    - CodyColor is an unplugged coding method (without the use of electronic devices) designed by Alessandro - Bogliolo, professor of Information Processing Systems at the University of Urbino, aiming at lowering - barriers to practice computational thinking. Based on extremely simple rules, CodyColor can be - introduced from early childhood education, but also supports challenging activities for lower/upper - secondary school and adults. -
    - -
    - In this kit you'll find thorough explanations of the principles and potential of the CodyColor method, - concrete proposals for teaching activities using the kit to promote computational thinking skills, and - detailed guidelines to create the tools and bring the activities into your classroom. -
    - - {{-- Who is the CodyColor KIT for? --}} -

    - Who is the CodyColor KIT for? -

    - -
    - CodyColor KIT is aimed at teachers of all school levels and educators. It can be - applied in formal and informal learning contexts, complementing both STEM and humanities because it - strengthens: -
    - -
      -
    • - Logical thinking and computational thinking -
    • -
    • - Spatial orientation and rotations -
    • -
    • - Strategy development, comparing hypotheses, and group decision-making -
    • -
    • - Collaboration, communication, and respect for rules -
    • -
    - -
    - CodyColor KIT is aimed at families because unplugged coding activities can be carried - out playfully outside formal learning contexts, are engaging, require no prerequisites, no specific - equipment, and are suitable for all ages. -
    - - {{-- Why discover CodyColor --}} -

    - Why discover, experiment with, and learn the CodyColor method? -

    - -
      -
    • - Unplugged ⭢ No digital device required ⭢ Highly accessible -
    • -
    • - Color-based ⭢ Multilingual ⭢ International collaboration -
    • -
    • - Versatile ⭢ Different ages ⭢ Cross-age collaboration -
    • -
    • - Multidisciplinary ⭢ Interdisciplinary collaboration ⭢ Community activation -
    • -
    - - {{-- How does this kit work --}} -

    - How does this kit work? -

    - -
    - In this page you will discover the CodyColor method through an asynchronous training path in small, - sequential, easy-to-follow steps, using accessible language. Every step is a downloadable PDF, designed - to be easy to print and use in class, containing theoretical background, lesson outlines, activity - descriptions, facilitation prompts, and guidelines for teachers. -
    - -
    - The objective is to guide you from learning the methods to applying them in the classroom, from learning - to teaching with the CodyColor lesson plans as scaffolding materials. -
    - -
    - Let's start! -
    - - - CodyColor Kit Learning Bits - - {{-- PDF Downloads --}} -

    - In these learning bits you will: -

    - - - - {{-- Contacts --}} -

    - Contacts -

    - -
    - For information, curiosities, and insights contact: - - codeweek@linksfoundation.com - -
    - - - - Register activity - -
    -
    -

    - Every time you run a CodyColor challenge in class, during a school event, a team building, or a - training course, register it on the - - map of the European Code Week - . - Every organizer will receive a participation certificate for their commitment and will contribute to - a campaign raising awareness of the importance of computational thinking skills. -

    -

    - If you want to get in touch with an international group of enthusiastic teachers, sign up for the - - EU Code Week teachers' Facebook group - ! - To take a further step and collaborate with other schools in your country or across borders, join - the - - Code Week 4 All challenge - . -

    -
    - -
    -
    - - @include('include.licence') -
    -@endsection diff --git a/resources/views/training/show.blade.php b/resources/views/training/show.blade.php index 4dfbb98d1..e8c202d68 100644 --- a/resources/views/training/show.blade.php +++ b/resources/views/training/show.blade.php @@ -1,14 +1,20 @@ @extends('layout.new_base') @php + // Translated value for the active locale, falling back to English per field. + $t = fn (string $field) => $trainingResource->forLocale($field); + + $localisedIntro = $t('intro'); + $localisedContent = $t('content'); + $fallbackDescription = \Illuminate\Support\Str::limit( - trim(strip_tags(($trainingResource->intro ?? '') . ' ' . ($trainingResource->content ?? ''))), + trim(strip_tags(($localisedIntro ?? '') . ' ' . ($localisedContent ?? ''))), 160 ); - $displayTitle = $trainingResource->page_title ?: $trainingResource->card_title ?: 'Training'; - $pageTitle = $trainingResource->meta_title ?: ($displayTitle . ' – EU Code Week'); - $pageDescription = $trainingResource->meta_description ?: $fallbackDescription; + $displayTitle = $t('page_title') ?: $t('card_title') ?: 'Training'; + $pageTitle = $t('meta_title') ?: ($displayTitle . ' – EU Code Week'); + $pageDescription = $t('meta_description') ?: $fallbackDescription; $introClass = "text-[#20262C] font-normal text-lg md:text-xl p-0 mb-6 [&_p]:p-0 [&_p]:mb-6 [&_a]:text-dark-blue [&_a]:hover:underline"; $contentClass = "text-[#333E48] font-normal text-lg md:text-xl p-0 mb-6 min-w-0 [&_p]:p-0 [&_p]:mb-6 [&_h2]:text-dark-blue [&_h2]:text-2xl [&_h2]:md:text-3xl [&_h2]:leading-[44px] [&_h2]:font-medium [&_h2]:font-['Montserrat'] [&_h2]:mb-4 [&_h3]:text-dark-blue [&_h3]:text-xl [&_h3]:md:text-2xl [&_h3]:font-medium [&_h3]:font-['Montserrat'] [&_h3]:mb-4 [&_ul]:pl-8 [&_ul]:m-0 [&_ul]:mb-6 [&_ul]:list-disc [&_ol]:pl-8 [&_ol]:m-0 [&_ol]:mb-6 [&_ol]:list-decimal [&_li]:p-0 [&_li]:text-lg [&_li]:font-normal [&_li]:leading-7 [&_li]:text-default [&_a]:text-dark-blue [&_a]:hover:underline [&_a]:break-words [&_img]:max-w-full [&_img]:w-auto [&_img]:h-auto [&_img]:my-8 [&_img]:mx-auto [&_img]:block [&_svg]:max-w-full [&_svg]:h-auto [&_svg]:block"; @@ -24,7 +30,7 @@ return \Illuminate\Support\Str::startsWith($url, ['http://', 'https://', '//']); }; - $renderedContent = $trainingResource->content ?? ''; + $renderedContent = $localisedContent ?? ''; $roadmapEmbedUrl = trim((string) ($trainingResource->roadmap_pdf_embed_url ?? '')); $roadmapEmbedKind = strtolower(trim((string) ($trainingResource->roadmap_embed_kind ?? 'pdf'))); if (! in_array($roadmapEmbedKind, ['pdf', 'svg', 'image', 'none'], true)) { @@ -76,25 +82,25 @@ @endif @include('codingathome.banner', [ - 'author' => $trainingResource->hero_author, + 'author' => $t('hero_author'), 'title' => $displayTitle, - 'primaryButtonText' => $trainingResource->hero_button_text, + 'primaryButtonText' => $t('hero_button_text'), 'primaryButtonUrl' => $trainingResource->hero_button_url, - 'secondaryButtonText' => $trainingResource->hero_secondary_button_text, + 'secondaryButtonText' => $t('hero_secondary_button_text'), 'secondaryButtonUrl' => $trainingResource->hero_secondary_button_url, ])
    - @if(!empty($trainingResource->highlight_box)) + @if(!empty($t('highlight_box')))
    - {!! $trainingResource->highlight_box !!} + {!! $t('highlight_box') !!}
    @endif - @if(!empty($trainingResource->intro)) + @if(!empty($localisedIntro))
    - {!! $trainingResource->intro !!} + {!! $localisedIntro !!}
    @endif @@ -111,14 +117,14 @@ class="text-dark-blue text-lg font-medium font-['Montserrat'] underline block mb target="_blank" rel="noopener noreferrer" > - {{ $trainingResource->video_script_text ?: 'Download the video script' }} + {{ $t('video_script_text') ?: 'Download the video script' }} @endif @if(!empty($trainingResource->resolved_body_image)) {{ $trainingResource->body_image_alt ?: $displayTitle }} @@ -141,18 +147,18 @@ class="mb-12 w-full h-full max-h-[630px] object-contain" @endif @endif - @if(!empty($trainingResource->contacts_section)) + @if(!empty($t('contacts_section')))
    - {!! $trainingResource->contacts_section !!} + {!! $t('contacts_section') !!}
    @endif - @if(!empty($trainingResource->register_box_section)) + @if(!empty($t('register_box_section')))
    - {!! $trainingResource->register_box_section !!} + {!! $t('register_box_section') !!}
    - @if(!empty($trainingResource->third_button_text) && !empty($trainingResource->third_button_url)) + @if(!empty($t('third_button_text')) && !empty($trainingResource->third_button_url)) @endif
    @endif - @if(!empty($trainingResource->about_box_section)) + @if(!empty($t('about_box_section')))
    Info
    - {!! $trainingResource->about_box_section !!} + {!! $t('about_box_section') !!}
    @endif @if( - (!empty($trainingResource->button_text) && !empty($trainingResource->button_url)) - || (!empty($trainingResource->secondary_button_text) && !empty($trainingResource->secondary_button_url)) + (!empty($t('button_text')) && !empty($trainingResource->button_url)) + || (!empty($t('secondary_button_text')) && !empty($trainingResource->secondary_button_url)) )

    Toolkit access

    - @if(!empty($trainingResource->button_text) && !empty($trainingResource->button_url)) + @if(!empty($t('button_text')) && !empty($trainingResource->button_url)) - {{ $trainingResource->button_text }} + {{ $t('button_text') }} @endif - @if(!empty($trainingResource->secondary_button_text) && !empty($trainingResource->secondary_button_url)) + @if(!empty($t('secondary_button_text')) && !empty($trainingResource->secondary_button_url)) - {{ $trainingResource->secondary_button_text }} + {{ $t('secondary_button_text') }} @endif
    diff --git a/tests/Feature/TrainingResourceTranslationTest.php b/tests/Feature/TrainingResourceTranslationTest.php new file mode 100644 index 000000000..81df2f32d --- /dev/null +++ b/tests/Feature/TrainingResourceTranslationTest.php @@ -0,0 +1,193 @@ +seed('TrainingResourceCodyColorKitSeeder'); + + return TrainingResource::where('slug', 'cody-color-kit')->firstOrFail(); + } + + #[Test] + public function cody_color_kit_is_served_from_the_database_in_english(): void + { + $this->codyColorKit(); + $this->usingLocale('en'); + + $this->get('/training/cody-color-kit') + ->assertOk() + ->assertSee('Who is the CodyColor KIT for?') + ->assertSee('DOWNLOAD THE KIT!') + ->assertSee('docs/training/EN/color-kit/Discover-the-method.pdf', false) + ->assertDontSee('A chi è rivolto il CodyColor KIT?', false); + } + + #[Test] + public function switching_to_italian_serves_the_translated_page_and_italian_pdfs(): void + { + $this->codyColorKit(); + $this->usingLocale('it'); + + $response = $this->get('/training/cody-color-kit')->assertOk(); + + $response->assertSee('A chi è rivolto il CodyColor KIT?', false) + ->assertSee('Perché scoprire, sperimentare e imparare il metodo CodyColor?', false) + ->assertSee('In questi learning bits troverai:', false) + ->assertSee('Registra le tue attività', false) + ->assertSee('codycolor-kit-learning-bits-it.png', false); + + foreach ([ + 'Discover-the-method', + 'Prepare-the-learning-experience', + 'Discover-the-lesson-plan', + 'Share-your-experience', + 'CodyColor-Full-kit', + ] as $pdf) { + $response->assertSee('docs/training/IT/color-kit/'.$pdf.'.pdf', false); + } + + $response->assertDontSee('Who is the CodyColor KIT for?') + ->assertDontSee('docs/training/EN/color-kit/', false); + } + + #[Test] + public function a_locale_without_a_translation_falls_back_to_english(): void + { + $this->codyColorKit(); + $this->usingLocale('de'); + + $this->get('/training/cody-color-kit') + ->assertOk() + ->assertSee('Who is the CodyColor KIT for?') + ->assertSee('docs/training/EN/color-kit/Discover-the-method.pdf', false) + ->assertDontSee('A chi è rivolto il CodyColor KIT?', false); + } + + #[Test] + public function the_training_index_lists_the_resource_once_with_localised_card_text(): void + { + $this->codyColorKit(); + + $this->usingLocale('en'); + $this->get('/training') + ->assertOk() + ->assertSee('By Alessandro Bogliolo and Italian EU Code Week HUB'); + + $this->usingLocale('it'); + $this->get('/training') + ->assertOk() + ->assertSee('Di Alessandro Bogliolo e dell’HUB italiano di EU Code Week', false) + ->assertDontSee('By Alessandro Bogliolo and Italian EU Code Week HUB'); + } + + #[Test] + public function for_locale_falls_back_per_field_so_partial_translations_never_blank_a_section(): void + { + $resource = TrainingResource::create([ + 'slug' => 'partly-translated', + 'card_title' => 'English title', + 'page_title' => 'English page title', + 'content' => '

    English content

    ', + 'locale_overrides' => [ + 'it' => [ + 'page_title' => 'Titolo italiano', + // Trix stores an emptied editor as markup, which must not win. + 'content' => '

    ', + ], + ], + ]); + + $this->assertSame('Titolo italiano', $resource->forLocale('page_title', 'it')); + $this->assertSame('

    English content

    ', $resource->forLocale('content', 'it')); + $this->assertSame('English title', $resource->forLocale('card_title', 'it')); + $this->assertSame('English page title', $resource->forLocale('page_title', 'en')); + } + + #[Test] + public function non_translatable_fields_always_return_the_base_value(): void + { + $resource = TrainingResource::create([ + 'slug' => 'url-not-translatable', + 'card_title' => 'Title', + 'button_url' => 'https://example.com/en.pdf', + 'locale_overrides' => ['it' => ['button_url' => 'https://example.com/it.pdf']], + ]); + + $this->assertSame('https://example.com/en.pdf', $resource->forLocale('button_url', 'it')); + } + + #[Test] + public function the_nova_translation_panel_saves_and_clears_overrides(): void + { + $resource = TrainingResource::create([ + 'slug' => 'nova-round-trip', + 'card_title' => 'English title', + 'page_title' => 'English page title', + ]); + + $field = function (TrainingResource $model, string $value) { + $nova = new NovaTrainingResource($model); + $request = NovaRequest::create('/', 'POST', ['locale_it_page_title' => $value]); + + $panel = collect($nova->fields($request)) + ->first(fn ($field) => $field instanceof Panel && str_contains($field->name, '(IT)')); + + $titleField = collect($panel->data) + ->first(fn ($field) => $field->attribute === 'locale_it_page_title'); + + $titleField->fill($request, $model); + $model->save(); + }; + + $field($resource, 'Titolo italiano'); + $this->assertSame( + 'Titolo italiano', + $resource->fresh()->locale_overrides['it']['page_title'] + ); + + // Emptying the field must remove the key so the English value wins again. + $field($resource, ''); + $this->assertNull($resource->fresh()->locale_overrides); + $this->assertSame('English page title', $resource->fresh()->forLocale('page_title', 'it')); + } + + #[Test] + public function locale_pdf_links_keep_the_english_supporting_detail_block(): void + { + $resource = TrainingResource::create([ + 'slug' => 'with-supporting-detail', + 'card_title' => 'Title', + 'pdf_links_section' => '

    Key one-pagers

    EN links

    Useful detail info

    EN detail

    ', + 'locale_overrides' => ['it' => ['pdf_links_section' => '

    Key one-pagers

    IT links

    ']], + ]); + + $section = $resource->pdfLinksSectionForLocale('it'); + + $this->assertStringContainsString('IT links', $section); + $this->assertStringContainsString('EN detail', $section); + $this->assertStringNotContainsString('EN links', $section); + } +}