Skip to content

Add translations with language toggle support and locale-aware challenge content#2443

Draft
Copilot wants to merge 12 commits intomasterfrom
copilot/create-translations-language-toggle
Draft

Add translations with language toggle support and locale-aware challenge content#2443
Copilot wants to merge 12 commits intomasterfrom
copilot/create-translations-language-toggle

Conversation

Copy link
Contributor

Copilot AI commented Mar 7, 2026

  • Add locale configuration to MvcConfiguration.java
  • Create message bundle files (EN, NL, DE, ES, FR, UK)
  • Update all page templates to use message keys
  • Add localizeFileName() to ChallengeUI with English fallback and caching
  • Add ChallengeUILocaleTest with 5 tests
  • Translations for challenges 0–2 (all 5 languages, 45 files)
  • Translations for challenges 3–8 (75 files)
  • Translations for challenges 9–11 + AWS/GCP/Azure cloud variants (135 files)
  • Translations for challenges 12–15 (60 files)
  • Translations for challenges 16–20 (75 files)
  • Translations for challenges 21–25 (75 files)
  • Translations for challenges 26–30 (75 files)
  • Fix CI: update ChallengeUILocaleTest fallback assertion to use an untranslated challenge
  • Translations for challenges 31–35 (75 files)
  • Translations for challenges 36–40 (75 files)
  • Translations for challenges 41–45 (75 files)
  • Translations for challenges 46–50 (75 files)
  • Translations for challenges 51–55 (75 files)
  • Translations for challenges 56–61 (final batch, ~90 files)
Original prompt

This section details on the original issue you should resolve

<issue_title>Create translations with a language toggle</issue_title>
<issue_description>We need to support:

  • dutch
  • german
  • spanish
  • french
  • ukranian</issue_description>

Comments on the Issue (you are @copilot in this section)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

…nch, and Ukrainian

Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
@github-actions
Copy link

github-actions bot commented Mar 7, 2026

🌐 GitHub Pages Preview Ready!

Your static preview is now available at:
🔗 Preview PR #2443

📄 What's included:

For full functionality testing: Use the Docker preview instead.

🔄 Auto-updates: This preview will be updated automatically when you push new commits to this PR.


Static preview with Thymeleaf generation by GitHub Actions

@github-actions
Copy link

github-actions bot commented Mar 7, 2026

📸 Visual Diff Available!

Screenshots have been generated comparing your changes with the main branch.

Download Visual Diff Artifacts

The artifacts contain:

  • pr-home.png - Your version of the home page
  • main-home.png - Current main branch home page
  • pr-about.png - Your version of the about page
  • main-about.png - Current main branch about page

Compare these images to see the visual impact of your changes!


Visual diff generated by GitHub Actions

@github-actions
Copy link

github-actions bot commented Mar 7, 2026

🔨 Preview Build Complete!

Your changes have been built and pushed to GitHub Container Registry.

🐳 Docker Image: ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-6003be6

📦 Download & Test Locally:

  1. 📁 Download Docker Image Artifact (look for wrongsecrets-preview-pr-2443)
  2. Load and run the image:
# Download the artifact, extract it, then:
docker load < wrongsecrets-preview.tar
docker run -p 8080:8080 -p 8090:8090 wrongsecrets-preview

🚀 Alternative - Pull from Registry:

docker pull ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-6003be6
docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-6003be6

Then visit: http://localhost:8080

📝 Changes in this PR:
- src/main/java/org/owasp/wrongsecrets/MvcConfiguration.java
- src/main/resources/templates/challenge.html
- src/main/resources/templates/error.html
- src/main/resources/templates/fragments/header.html
- src/main/resources/templates/fragments/navigation.html
- src/main/resources/templates/spoil.html
- src/main/resources/templates/stats.html
- src/main/resources/templates/welcome.html

Visual diff screenshots will be available shortly...


Preview built by GitHub Actions

@github-actions
Copy link

github-actions bot commented Mar 7, 2026

📸 Visual Diff Ready!

Screenshots comparing your changes with the main branch are available:

📁 Download Visual Diff Artifacts

🖼️ Included screenshots:

  • pr-home.png vs main-home.png - Welcome page comparison
  • pr-about.png vs main-about.png - About page comparison
  • pr-challenge.png vs main-challenge.png - Challenge page comparison

🔍 How to review:

  1. Download the artifact zip file
  2. Extract and compare the pr-* and main-* images side by side
  3. Look for visual differences in layout, styling, and content

💡 Tip: Use an image comparison tool or open both images in separate browser tabs to spot differences easily.


Visual diff generated by GitHub Actions • PR #2443

@commjoen
Copy link
Collaborator

commjoen commented Mar 9, 2026

@copilot Can you also make a translation of every challenge+hint+explanation in the appropriate language? and have a fallback that if the translation is not present, you give the english version

…lish fallback and translations for challenges 0-2

Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Mar 9, 2026

@copilot Can you also make a translation of every challenge+hint+explanation in the appropriate language? and have a fallback that if the translation is not present, you give the en...

Done in commit 58fc965.

How it works:
ChallengeUI.localizeFileName() uses LocaleContextHolder.getLocale() to check whether a locale-specific .adoc file (e.g. challenge1_de.adoc) exists in the classpath. If found it returns that filename; otherwise it falls back to the English original. Results are cached in a ConcurrentHashMap to avoid repeated classpath lookups.

Translations added for challenges 0, 1, and 2 (explanation + hint + reason) in all 5 languages (45 new .adoc files). These are compiled to HTML by the existing asciidoctor-maven-plugin during build. Contributors can add more translations for any challenge by following the naming convention explanations/challengeN_hint_XX.adoc / explanations/challengeN_reason_XX.adoc.

Here's challenge 1 in German with the full translated content:

German challenge content

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • checkstyle.org
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.24.2/x64/codeql/tools/linux64/java/bin/java /opt/hostedtoolcache/CodeQL/2.24.2/x64/codeql/tools/linux64/java/bin/java -jar /opt/hostedtoolcache/CodeQL/2.24.2/x64/codeql/xml/tools/xml-extractor.jar --fileList=/tmp/codeql-scratch-54b93b06a133b0d9/dbs/java/working/files-to-index17535371528996603202.list --sourceArchiveDir=/tmp/codeql-scratch-54b93b06a133b0d9/dbs/java/src --outputDir=/tmp/codeql-scratch-54b93b06a133b0d9/dbs/java/trap/java r = get &amp;&amp; echo &#34;******&#34;; }; f (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Add translations with language toggle support Add translations with language toggle support and locale-aware challenge content Mar 9, 2026
@github-actions
Copy link

github-actions bot commented Mar 9, 2026

🌐 GitHub Pages Preview Ready!

Your static preview is now available at:
🔗 Preview PR #2443

📄 What's included:

For full functionality testing: Use the Docker preview instead.

🔄 Auto-updates: This preview will be updated automatically when you push new commits to this PR.


Static preview with Thymeleaf generation by GitHub Actions

@github-actions
Copy link

github-actions bot commented Mar 9, 2026

📸 Visual Diff Available!

Screenshots have been generated comparing your changes with the main branch.

Download Visual Diff Artifacts

The artifacts contain:

  • pr-home.png - Your version of the home page
  • main-home.png - Current main branch home page
  • pr-about.png - Your version of the about page
  • main-about.png - Current main branch about page

Compare these images to see the visual impact of your changes!


Visual diff generated by GitHub Actions

@github-actions
Copy link

github-actions bot commented Mar 9, 2026

🔨 Preview Build Complete!

Your changes have been built and pushed to GitHub Container Registry.

🐳 Docker Image: ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-0dce648

📦 Download & Test Locally:

  1. 📁 Download Docker Image Artifact (look for wrongsecrets-preview-pr-2443)
  2. Load and run the image:
# Download the artifact, extract it, then:
docker load < wrongsecrets-preview.tar
docker run -p 8080:8080 -p 8090:8090 wrongsecrets-preview

🚀 Alternative - Pull from Registry:

docker pull ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-0dce648
docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-0dce648

Then visit: http://localhost:8080

📝 Changes in this PR:
- src/main/java/org/owasp/wrongsecrets/MvcConfiguration.java
- src/main/java/org/owasp/wrongsecrets/challenges/ChallengeUI.java
- src/main/resources/explanations/challenge0_de.adoc
- src/main/resources/explanations/challenge0_es.adoc
- src/main/resources/explanations/challenge0_fr.adoc
- src/main/resources/explanations/challenge0_hint_de.adoc
- src/main/resources/explanations/challenge0_hint_es.adoc
- src/main/resources/explanations/challenge0_hint_fr.adoc
- src/main/resources/explanations/challenge0_hint_nl.adoc
- src/main/resources/explanations/challenge0_hint_uk.adoc
- ... and 19 more files

Visual diff screenshots will be available shortly...


Preview built by GitHub Actions

@github-actions
Copy link

github-actions bot commented Mar 9, 2026

📸 Visual Diff Ready!

Screenshots comparing your changes with the main branch are available:

📁 Download Visual Diff Artifacts

🖼️ Included screenshots:

  • pr-home.png vs main-home.png - Welcome page comparison
  • pr-about.png vs main-about.png - About page comparison
  • pr-challenge.png vs main-challenge.png - Challenge page comparison

🔍 How to review:

  1. Download the artifact zip file
  2. Extract and compare the pr-* and main-* images side by side
  3. Look for visual differences in layout, styling, and content

💡 Tip: Use an image comparison tool or open both images in separate browser tabs to spot differences easily.


Visual diff generated by GitHub Actions • PR #2443

@commjoen
Copy link
Collaborator

commjoen commented Mar 9, 2026

@copilot kan je de rest van de vertalingen ook doen alsjeblieft?

…de/es/fr/uk, including cloud variants

Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Mar 9, 2026

@copilot kan je de rest van de vertalingen ook doen alsjeblieft?

Partially done — translations for challenges 0–15 (including AWS/GCP/Azure cloud variants for 9–11) have been committed across 330 locale-specific .adoc files in nl/de/es/fr/uk. The fallback mechanism means all remaining challenges (16–61) automatically show English until their translations are added. The work to translate challenges 16–61 is in progress and will be completed in a follow-up commit.

@commjoen
Copy link
Collaborator

commjoen commented Mar 9, 2026

@copilot can you create the next set of translations please?

Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
@github-actions
Copy link

🔨 Preview Build Complete!

Your changes have been built and pushed to GitHub Container Registry.

🐳 Docker Image: ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-03154e2

📦 Download & Test Locally:

  1. 📁 Download Docker Image Artifact (look for wrongsecrets-preview-pr-2443)
  2. Load and run the image:
# Download the artifact, extract it, then:
docker load < wrongsecrets-preview.tar
docker run -p 8080:8080 -p 8090:8090 wrongsecrets-preview

🚀 Alternative - Pull from Registry:

docker pull ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-03154e2
docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-03154e2

Then visit: http://localhost:8080

📝 Changes in this PR:
- src/main/java/org/owasp/wrongsecrets/MvcConfiguration.java
- src/main/java/org/owasp/wrongsecrets/challenges/ChallengeUI.java
- src/main/resources/explanations/challenge0_de.adoc
- src/main/resources/explanations/challenge0_es.adoc
- src/main/resources/explanations/challenge0_fr.adoc
- src/main/resources/explanations/challenge0_hint_de.adoc
- src/main/resources/explanations/challenge0_hint_es.adoc
- src/main/resources/explanations/challenge0_hint_fr.adoc
- src/main/resources/explanations/challenge0_hint_nl.adoc
- src/main/resources/explanations/challenge0_hint_uk.adoc
- ... and 19 more files

Visual diff screenshots will be available shortly...


Preview built by GitHub Actions

@github-actions
Copy link

📸 Visual Diff Ready!

Screenshots comparing your changes with the main branch are available:

📁 Download Visual Diff Artifacts

🖼️ Included screenshots:

  • pr-home.png vs main-home.png - Welcome page comparison
  • pr-about.png vs main-about.png - About page comparison
  • pr-challenge.png vs main-challenge.png - Challenge page comparison

🔍 How to review:

  1. Download the artifact zip file
  2. Extract and compare the pr-* and main-* images side by side
  3. Look for visual differences in layout, styling, and content

💡 Tip: Use an image comparison tool or open both images in separate browser tabs to spot differences easily.


Visual diff generated by GitHub Actions • PR #2443

Copy link
Contributor Author

Copilot AI commented Mar 10, 2026

@copilot can you do iterations of 5 challenges per commit and then continue till the end please?

Done in commits 1a268aa, 4ec1413, and 28a569d — translations for challenges 16–30 committed in batches of 5 per commit (75 files each, 225 files total). Challenges 31–61 translations are next and will continue in the same 5-per-commit pattern.

@github-actions
Copy link

🌐 GitHub Pages Preview Ready!

Your static preview is now available at:
🔗 Preview PR #2443

📄 What's included:

For full functionality testing: Use the Docker preview instead.

🔄 Auto-updates: This preview will be updated automatically when you push new commits to this PR.


Static preview with Thymeleaf generation by GitHub Actions

@github-actions
Copy link

🔨 Preview Build Complete!

Your changes have been built and pushed to GitHub Container Registry.

🐳 Docker Image: ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-85738b0

📦 Download & Test Locally:

  1. 📁 Download Docker Image Artifact (look for wrongsecrets-preview-pr-2443)
  2. Load and run the image:
# Download the artifact, extract it, then:
docker load < wrongsecrets-preview.tar
docker run -p 8080:8080 -p 8090:8090 wrongsecrets-preview

🚀 Alternative - Pull from Registry:

docker pull ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-85738b0
docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-85738b0

Then visit: http://localhost:8080

📝 Changes in this PR:
- src/main/java/org/owasp/wrongsecrets/MvcConfiguration.java
- src/main/java/org/owasp/wrongsecrets/challenges/ChallengeUI.java
- src/main/resources/explanations/challenge0_de.adoc
- src/main/resources/explanations/challenge0_es.adoc
- src/main/resources/explanations/challenge0_fr.adoc
- src/main/resources/explanations/challenge0_hint_de.adoc
- src/main/resources/explanations/challenge0_hint_es.adoc
- src/main/resources/explanations/challenge0_hint_fr.adoc
- src/main/resources/explanations/challenge0_hint_nl.adoc
- src/main/resources/explanations/challenge0_hint_uk.adoc
- ... and 19 more files

Visual diff screenshots will be available shortly...


Preview built by GitHub Actions

@github-actions
Copy link

📸 Visual Diff Ready!

Screenshots comparing your changes with the main branch are available:

📁 Download Visual Diff Artifacts

🖼️ Included screenshots:

  • pr-home.png vs main-home.png - Welcome page comparison
  • pr-about.png vs main-about.png - About page comparison
  • pr-challenge.png vs main-challenge.png - Challenge page comparison

🔍 How to review:

  1. Download the artifact zip file
  2. Extract and compare the pr-* and main-* images side by side
  3. Look for visual differences in layout, styling, and content

💡 Tip: Use an image comparison tool or open both images in separate browser tabs to spot differences easily.


Visual diff generated by GitHub Actions • PR #2443

@commjoen
Copy link
Collaborator

@copilot can you fix the broken github action and generate the translations for the next 10 challenges in steps of 5 challenges/commit?

Copilot AI and others added 2 commits March 10, 2026 14:07
…s for challenges 31-35

Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Mar 10, 2026

@copilot can you fix the broken github action and generate the translations for the next 10 challenges in steps of 5 challenges/commit?

Done in commits 98ffb15 and 94e4e59.

CI fix: ChallengeUILocaleTest.frenchLocaleReturnsFallbackForUntranslatedChallenge was failing because we had added challenge3_fr.adoc in a previous batch. The test now uses challenge61 (index 70) as the untranslated fallback, which won't be translated until the final batch.

Translations added:

  • Challenges 31–35 (commit 98ffb15) — 75 files across NL/DE/ES/FR/UK
  • Challenges 36–40 (commit 94e4e59) — 75 files across NL/DE/ES/FR/UK

Remaining: challenges 41–61 (21 challenges × 3 types × 5 languages = 315 files).

@commjoen
Copy link
Collaborator

@copilot can you continue creating translations for the next 15 challenges, 5 challenges per commit?

@github-actions
Copy link

🌐 GitHub Pages Preview Ready!

Your static preview is now available at:
🔗 Preview PR #2443

📄 What's included:

For full functionality testing: Use the Docker preview instead.

🔄 Auto-updates: This preview will be updated automatically when you push new commits to this PR.


Static preview with Thymeleaf generation by GitHub Actions

Copilot AI and others added 2 commits March 10, 2026 20:54
Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
@github-actions
Copy link

🔨 Preview Build Complete!

Your changes have been built and pushed to GitHub Container Registry.

🐳 Docker Image: ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-6a54d42

📦 Download & Test Locally:

  1. 📁 Download Docker Image Artifact (look for wrongsecrets-preview-pr-2443)
  2. Load and run the image:
# Download the artifact, extract it, then:
docker load < wrongsecrets-preview.tar
docker run -p 8080:8080 -p 8090:8090 wrongsecrets-preview

🚀 Alternative - Pull from Registry:

docker pull ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-6a54d42
docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-6a54d42

Then visit: http://localhost:8080

📝 Changes in this PR:
- src/main/java/org/owasp/wrongsecrets/MvcConfiguration.java
- src/main/java/org/owasp/wrongsecrets/challenges/ChallengeUI.java
- src/main/resources/explanations/challenge0_de.adoc
- src/main/resources/explanations/challenge0_es.adoc
- src/main/resources/explanations/challenge0_fr.adoc
- src/main/resources/explanations/challenge0_hint_de.adoc
- src/main/resources/explanations/challenge0_hint_es.adoc
- src/main/resources/explanations/challenge0_hint_fr.adoc
- src/main/resources/explanations/challenge0_hint_nl.adoc
- src/main/resources/explanations/challenge0_hint_uk.adoc
- ... and 19 more files

Visual diff screenshots will be available shortly...


Preview built by GitHub Actions

Co-authored-by: commjoen <1457214+commjoen@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Mar 10, 2026

@copilot can you continue creating translations for the next 15 challenges, 5 challenges per commit?

Done in commits 6c9729e, 1b617a2, and 78312bc — 225 new translation files across 15 challenges:

  • Challenges 41–45 (6c9729e): password shucking, Spring Boot Actuator audit events, Reddit secrets leak, Vault metadata, Vault subkeys
  • Challenges 46–50 (1b617a2): Vault template injection ×2, Sealed Secrets with exposed key, AES/MD5 PIN cracking, .NET binary secrets
  • Challenges 51–55 (78312bc): Docker Compose secrets, Docker Buildx secrets, debug container memory leak, .gitignore secret, SSH bastion keypair

Only challenges 56–61 remain (the final batch, ~90 files).

@github-actions
Copy link

📸 Visual Diff Ready!

Screenshots comparing your changes with the main branch are available:

📁 Download Visual Diff Artifacts

🖼️ Included screenshots:

  • pr-home.png vs main-home.png - Welcome page comparison
  • pr-about.png vs main-about.png - About page comparison
  • pr-challenge.png vs main-challenge.png - Challenge page comparison

🔍 How to review:

  1. Download the artifact zip file
  2. Extract and compare the pr-* and main-* images side by side
  3. Look for visual differences in layout, styling, and content

💡 Tip: Use an image comparison tool or open both images in separate browser tabs to spot differences easily.


Visual diff generated by GitHub Actions • PR #2443

@github-actions
Copy link

🌐 GitHub Pages Preview Ready!

Your static preview is now available at:
🔗 Preview PR #2443

📄 What's included:

For full functionality testing: Use the Docker preview instead.

🔄 Auto-updates: This preview will be updated automatically when you push new commits to this PR.


Static preview with Thymeleaf generation by GitHub Actions

@github-actions
Copy link

🔨 Preview Build Complete!

Your changes have been built and pushed to GitHub Container Registry.

🐳 Docker Image: ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-63c8d6a

📦 Download & Test Locally:

  1. 📁 Download Docker Image Artifact (look for wrongsecrets-preview-pr-2443)
  2. Load and run the image:
# Download the artifact, extract it, then:
docker load < wrongsecrets-preview.tar
docker run -p 8080:8080 -p 8090:8090 wrongsecrets-preview

🚀 Alternative - Pull from Registry:

docker pull ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-63c8d6a
docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-pr:pr-2443-63c8d6a

Then visit: http://localhost:8080

📝 Changes in this PR:
- src/main/java/org/owasp/wrongsecrets/MvcConfiguration.java
- src/main/java/org/owasp/wrongsecrets/challenges/ChallengeUI.java
- src/main/resources/explanations/challenge0_de.adoc
- src/main/resources/explanations/challenge0_es.adoc
- src/main/resources/explanations/challenge0_fr.adoc
- src/main/resources/explanations/challenge0_hint_de.adoc
- src/main/resources/explanations/challenge0_hint_es.adoc
- src/main/resources/explanations/challenge0_hint_fr.adoc
- src/main/resources/explanations/challenge0_hint_nl.adoc
- src/main/resources/explanations/challenge0_hint_uk.adoc
- ... and 19 more files

Visual diff screenshots will be available shortly...


Preview built by GitHub Actions

@github-actions
Copy link

📸 Visual Diff Ready!

Screenshots comparing your changes with the main branch are available:

📁 Download Visual Diff Artifacts

🖼️ Included screenshots:

  • pr-home.png vs main-home.png - Welcome page comparison
  • pr-about.png vs main-about.png - About page comparison
  • pr-challenge.png vs main-challenge.png - Challenge page comparison

🔍 How to review:

  1. Download the artifact zip file
  2. Extract and compare the pr-* and main-* images side by side
  3. Look for visual differences in layout, styling, and content

💡 Tip: Use an image comparison tool or open both images in separate browser tabs to spot differences easily.


Visual diff generated by GitHub Actions • PR #2443

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create translations with a language toggle

2 participants