fix(docs): re-enable translation snippets

This commit is contained in:
Christian Bromann 2025-04-29 10:14:16 -07:00
parent 128e3f7f20
commit d93dee1cd4
No known key found for this signature in database
GPG key ID: 6D65B5474C4AF507
13 changed files with 934 additions and 27 deletions

3
.gitignore vendored
View file

@ -118,4 +118,5 @@ e2e/screenshot.png
website/community/events
website/events.json
e2e/wdio/headless/*.png
website/i18n
website/i18n/*
!website/i18n/en

628
website/i18n/en/code.json Normal file
View file

@ -0,0 +1,628 @@
{
"features.realEnvironments": {
"message": "Test in Real Environments"
},
"features.realEnvironments.description": {
"message": "WebdriverIO allows you to test in actual browser or mobile devices used by your users."
},
"features.versatile": {
"message": "Versatile and Feature Rich"
},
"features.versatile.description": {
"message": "Use WebdriverIO for full e2e or unit and component testing in the browser."
},
"features.autoWait": {
"message": "Auto Wait"
},
"features.autoWait.description": {
"message": "WebdriverIO automatically waits for elements to appear before interacting with them."
},
"features.standards": {
"message": "Based on Web Standards"
},
"homepage.features.crossBrowser": {
"message": "Cross browser support via automation through {webdriverLink} and {bidiLink}."
},
"features.mobileSupport": {
"message": "Native Mobile Support"
},
"homepage.features.mobile": {
"message": "Run WebdriverIO on real mobile devices, smart TVs or other IoT devices through {appiumLink}."
},
"features.community": {
"message": "Committed Community"
},
"homepage.features.support": {
"message": "Running a {supportChannelLink} with over 8k members and a rich ecosystem of community maintained plugins."
},
"homepage.createBrowserAnimation": {
"message": "Create WebdriverIO Project to automate MacOS apps"
},
"homepage.logoCarousel.title": {
"message": "Who is using WebdriverIO?"
},
"sponsors.description.openSource": {
"message": "\n We are an open source project with a strong commitment to transparency and community governance.\n We are part of the {openJsFoundationLink} which is a part of the {linuxFoundationLink}. The project\n is entirely run by volunteers and funded by invested companies that want to see the project succeed.\n The project team is grateful for the generous sponsorship of these companies.\n "
},
"sponsors.description.support": {
"message": "If you use WebdriverIO within your organization, please consider supporting the project by {becomeASponsor}. It will help us to keep the project running and evolving."
},
"homepage.tagline": {
"message": "Next-gen browser and mobile automation test framework for Node.js"
},
"homepage.getStarted": {
"message": "Get Started"
},
"homepage.whyWebdriverIO": {
"message": "Why WebdriverIO?"
},
"homepage.viewOnGitHub": {
"message": "View on GitHub"
},
"homepage.watchOnYouTube": {
"message": "Watch on YouTube"
},
"homepage.sponsorSection.sponsoredBy": {
"message": "Sponsored by"
},
"homepage.componentTesting.heading": {
"message": "E2E and Unit / Component Testing in real Browser!"
},
"homepage.componentTesting.para1": {
"message": "WebdriverIO is an {allInOne} framework for your web app development. It enables you to run small and lightweight component tests as well as running e2e test scenarios in the browser or on a mobile device. This guarantees that you to do the testing in an environment {usedBy}."
},
"homepage.componentTesting.allInOne": {
"message": "all in one"
},
"homepage.componentTesting.usedBy": {
"message": "used by your users"
},
"homepage.componentTesting.para2": {
"message": "It comes with smart selector strategies that simplify interacting e.g. with {reactComponents} or running deep selector queries with nested shadow DOM trees. As interactions happen through a standardized automation protocol it is guaranteed they behave natively and aren't just JavaScript emulated."
},
"homepage.componentTesting.easySetup": {
"message": "Easy setup for web component testing with:"
},
"homepage.hightlight.createProject": {
"message": "Get Started With WebdriverIO within Seconds"
},
"homepage.hightlight.createProject.para1": {
"message": "The WebdriverIO testrunner comes with a command line interface that provides a powerful configuration utility and helps you to create your test setup in less than a minute. It lets you pick from available test framework integrations and easily allows to add all supported reporter and service plugins!"
},
"homepage.hightlight.createProject.para2": {
"message": "With just one simple command you can set up a complete test suite:"
},
"homepage.highlight.getStartedOnYouTube": {
"message": "Start learning more about WebdriverIO and how to get started {youtubeLink}."
},
"homepage.highlight.getStartedOnYouTube.label;": {
"message": "on YouTube",
"description": "The label for the link to my YouTube"
},
"homepage.hightlight.watch": {
"message": "Watch Talks about WebdriverIO"
},
"homepage.highlight.conferenceTalk": {
"message": "The community around WebdriverIO is actively speaking on various user groups or conferences about specific topics around automated testing with WebdriverIO. Check out this talk on {youtubeLink} by {videoAuthor} at {conferenceLink}."
},
"homepage.highlight.conferenceTalk.label": {
"message": "My favourite features of WebdriverIO",
"description": "The conference talk title"
},
"homepage.highlight.youtubeChannels": {
"message": "There is also many YouTube Channels with useful tutorials by community members such as {channelOne}, {channelTwo} or {channelThree}."
},
"homepage.hightlight.lighthouse": {
"message": "Google Lighthouse Integration"
},
"homepage.highlight.devtools": {
"message": "WebdriverIO not only runs automation based on the WebDriver protocol, it also leverages native browser APIs to enable integrations to popular developer tools such as {devtoolsLink} or {lighthouseLink}. With the {devtoolsServiceLink} plugin you have access to commands for validating if you app is a valid PWA application as well as to commands for capturing frontend performance metrics such as `speedIndex` and others."
},
"homepage.hightlight.devtools": {
"message": "Integration to developer tools such as:"
},
"until August 2025": {
"message": "until August 2025"
},
"since July 2024": {
"message": "since July 2024"
},
"since February 2022": {
"message": "since February 2022"
},
"since January 2021": {
"message": "since January 2021"
},
"since December 2019": {
"message": "since December 2019"
},
"versions.description": {
"message": "Docusaurus 2 Versions page listing all documented site versions"
},
"WebdriverIO documentation versions": {
"message": "WebdriverIO documentation versions"
},
"The project team releases new major versions roughly on a yearly cadence. LTS release status is \"long-term support\", which typically guarantees that critical bugs will be fixed for a total of 12 months until a new major release is made.": {
"message": "The project team releases new major versions roughly on a yearly cadence. LTS release status is \"long-term support\", which typically guarantees that critical bugs will be fixed for a total of 12 months until a new major release is made."
},
"Current version (Stable)": {
"message": "Current version (Stable)"
},
"Here you can find the documentation for current released version.": {
"message": "Here you can find the documentation for current released version."
},
"Documentation": {
"message": "Documentation"
},
"Release Notes": {
"message": "Release Notes"
},
"Past versions": {
"message": "Past versions"
},
"Here you can find documentation for previous versions of Docusaurus.": {
"message": "Here you can find documentation for previous versions of Docusaurus."
},
"theme.ErrorPageContent.title": {
"message": "This page crashed.",
"description": "The title of the fallback page when the page crashed"
},
"theme.BackToTopButton.buttonAriaLabel": {
"message": "Scroll back to top",
"description": "The ARIA label for the back to top button"
},
"theme.blog.archive.title": {
"message": "Archive",
"description": "The page & hero title of the blog archive page"
},
"theme.blog.archive.description": {
"message": "Archive",
"description": "The page & hero description of the blog archive page"
},
"theme.blog.paginator.navAriaLabel": {
"message": "Blog list page navigation",
"description": "The ARIA label for the blog pagination"
},
"theme.blog.paginator.newerEntries": {
"message": "Newer entries",
"description": "The label used to navigate to the newer blog posts page (previous page)"
},
"theme.blog.paginator.olderEntries": {
"message": "Older entries",
"description": "The label used to navigate to the older blog posts page (next page)"
},
"theme.blog.post.paginator.navAriaLabel": {
"message": "Blog post page navigation",
"description": "The ARIA label for the blog posts pagination"
},
"theme.blog.post.paginator.newerPost": {
"message": "Newer post",
"description": "The blog post button label to navigate to the newer/previous post"
},
"theme.blog.post.paginator.olderPost": {
"message": "Older post",
"description": "The blog post button label to navigate to the older/next post"
},
"theme.tags.tagsPageLink": {
"message": "View all tags",
"description": "The label of the link targeting the tag list page"
},
"theme.colorToggle.ariaLabel": {
"message": "Switch between dark and light mode (currently {mode})",
"description": "The ARIA label for the navbar color mode toggle"
},
"theme.colorToggle.ariaLabel.mode.dark": {
"message": "dark mode",
"description": "The name for the dark color mode"
},
"theme.colorToggle.ariaLabel.mode.light": {
"message": "light mode",
"description": "The name for the light color mode"
},
"theme.docs.breadcrumbs.navAriaLabel": {
"message": "Breadcrumbs",
"description": "The ARIA label for the breadcrumbs"
},
"theme.docs.DocCard.categoryDescription.plurals": {
"message": "1 item|{count} items",
"description": "The default description for a category card in the generated index about how many items this category includes"
},
"theme.docs.paginator.navAriaLabel": {
"message": "Docs pages",
"description": "The ARIA label for the docs pagination"
},
"theme.docs.paginator.previous": {
"message": "Previous",
"description": "The label used to navigate to the previous doc"
},
"theme.docs.paginator.next": {
"message": "Next",
"description": "The label used to navigate to the next doc"
},
"theme.docs.versionBadge.label": {
"message": "Version: {versionLabel}"
},
"theme.docs.versions.unreleasedVersionLabel": {
"message": "This is unreleased documentation for {siteTitle} {versionLabel} version.",
"description": "The label used to tell the user that he's browsing an unreleased doc version"
},
"theme.docs.versions.unmaintainedVersionLabel": {
"message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.",
"description": "The label used to tell the user that he's browsing an unmaintained doc version"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
"message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).",
"description": "The label used to tell the user to check the latest version"
},
"theme.docs.versions.latestVersionLinkLabel": {
"message": "latest version",
"description": "The label used for the latest version suggestion link label"
},
"theme.docs.tagDocListPageTitle.nDocsTagged": {
"message": "One doc tagged|{count} docs tagged",
"description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.tagDocListPageTitle": {
"message": "{nDocsTagged} with \"{tagName}\"",
"description": "The title of the page for a docs tag"
},
"theme.common.editThisPage": {
"message": "Edit this page",
"description": "The link label to edit the current page"
},
"theme.common.headingLinkTitle": {
"message": "Direct link to {heading}",
"description": "Title for link to heading"
},
"theme.lastUpdated.atDate": {
"message": " on {date}",
"description": "The words used to describe on which date a page has been last updated"
},
"theme.lastUpdated.byUser": {
"message": " by {user}",
"description": "The words used to describe by who the page has been last updated"
},
"theme.lastUpdated.lastUpdatedAtBy": {
"message": "Last updated{atDate}{byUser}",
"description": "The sentence used to display when a page has been last updated, and by who"
},
"theme.NotFound.title": {
"message": "Page Not Found",
"description": "The title of the 404 page"
},
"theme.navbar.mobileVersionsDropdown.label": {
"message": "Versions",
"description": "The label for the navbar versions dropdown on mobile view"
},
"theme.admonition.caution": {
"message": "caution",
"description": "The default label used for the Caution admonition (:::caution)"
},
"theme.admonition.danger": {
"message": "danger",
"description": "The default label used for the Danger admonition (:::danger)"
},
"theme.admonition.info": {
"message": "info",
"description": "The default label used for the Info admonition (:::info)"
},
"theme.admonition.note": {
"message": "note",
"description": "The default label used for the Note admonition (:::note)"
},
"theme.admonition.tip": {
"message": "tip",
"description": "The default label used for the Tip admonition (:::tip)"
},
"theme.admonition.warning": {
"message": "warning",
"description": "The default label used for the Warning admonition (:::warning)"
},
"theme.tags.tagsListLabel": {
"message": "Tags:",
"description": "The label alongside a tag list"
},
"theme.AnnouncementBar.closeButtonAriaLabel": {
"message": "Close",
"description": "The ARIA label for close button of announcement bar"
},
"theme.blog.sidebar.navAriaLabel": {
"message": "Blog recent posts navigation",
"description": "The ARIA label for recent posts in the blog sidebar"
},
"theme.CodeBlock.wordWrapToggle": {
"message": "Toggle word wrap",
"description": "The title attribute for toggle word wrapping button of code block lines"
},
"theme.CodeBlock.copied": {
"message": "Copied",
"description": "The copied button label on code blocks"
},
"theme.CodeBlock.copyButtonAriaLabel": {
"message": "Copy code to clipboard",
"description": "The ARIA label for copy code blocks button"
},
"theme.CodeBlock.copy": {
"message": "Copy",
"description": "The copy button label on code blocks"
},
"theme.DocSidebarItem.expandCategoryAriaLabel": {
"message": "Expand sidebar category '{label}'",
"description": "The ARIA label to expand the sidebar category"
},
"theme.DocSidebarItem.collapseCategoryAriaLabel": {
"message": "Collapse sidebar category '{label}'",
"description": "The ARIA label to collapse the sidebar category"
},
"theme.NavBar.navAriaLabel": {
"message": "Main",
"description": "The ARIA label for the main navigation"
},
"theme.NotFound.p1": {
"message": "We could not find what you were looking for.",
"description": "The first paragraph of the 404 page"
},
"theme.NotFound.p2": {
"message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.",
"description": "The 2nd paragraph of the 404 page"
},
"theme.TOCCollapsible.toggleButtonLabel": {
"message": "On this page",
"description": "The label used by the button on the collapsible TOC component"
},
"theme.blog.post.readingTime.plurals": {
"message": "One min read|{readingTime} min read",
"description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.navbar.mobileLanguageDropdown.label": {
"message": "Languages",
"description": "The label for the mobile language switcher dropdown"
},
"theme.blog.post.readMore": {
"message": "Read more",
"description": "The label used in blog post item excerpts to link to full blog posts"
},
"theme.blog.post.readMoreLabel": {
"message": "Read more about {title}",
"description": "The ARIA label for the link to full blog posts from excerpts"
},
"theme.docs.breadcrumbs.home": {
"message": "Home page",
"description": "The ARIA label for the home page in the breadcrumbs"
},
"theme.docs.sidebar.collapseButtonTitle": {
"message": "Collapse sidebar",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.collapseButtonAriaLabel": {
"message": "Collapse sidebar",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.navAriaLabel": {
"message": "Docs sidebar",
"description": "The ARIA label for the sidebar navigation"
},
"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
"message": "← Back to main menu",
"description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
},
"theme.docs.sidebar.closeSidebarButtonAriaLabel": {
"message": "Close navigation bar",
"description": "The ARIA label for close button of mobile sidebar"
},
"theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
"message": "Toggle navigation bar",
"description": "The ARIA label for hamburger menu button of mobile navigation"
},
"theme.docs.sidebar.expandButtonTitle": {
"message": "Expand sidebar",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.docs.sidebar.expandButtonAriaLabel": {
"message": "Expand sidebar",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.SearchBar.seeAll": {
"message": "See all {count} results"
},
"theme.SearchPage.documentsFound.plurals": {
"message": "One document found|{count} documents found",
"description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.SearchPage.existingResultsTitle": {
"message": "Search results for \"{query}\"",
"description": "The search page title for non-empty query"
},
"theme.SearchPage.emptyResultsTitle": {
"message": "Search the documentation",
"description": "The search page title for empty query"
},
"theme.SearchPage.inputPlaceholder": {
"message": "Type your search here",
"description": "The placeholder for search page input"
},
"theme.SearchPage.inputLabel": {
"message": "Search",
"description": "The ARIA label for search page input"
},
"theme.SearchPage.algoliaLabel": {
"message": "Search by Algolia",
"description": "The ARIA label for Algolia mention"
},
"theme.SearchPage.noResultsText": {
"message": "No results were found",
"description": "The paragraph for empty search result"
},
"theme.SearchPage.fetchingNewResults": {
"message": "Fetching new results...",
"description": "The paragraph for fetching new search results"
},
"theme.SearchBar.label": {
"message": "Search",
"description": "The ARIA label and placeholder for search button"
},
"theme.SearchModal.searchBox.resetButtonTitle": {
"message": "Clear the query",
"description": "The label and ARIA label for search box reset button"
},
"theme.SearchModal.searchBox.cancelButtonText": {
"message": "Cancel",
"description": "The label and ARIA label for search box cancel button"
},
"theme.SearchModal.startScreen.recentSearchesTitle": {
"message": "Recent",
"description": "The title for recent searches"
},
"theme.SearchModal.startScreen.noRecentSearchesText": {
"message": "No recent searches",
"description": "The text when no recent searches"
},
"theme.SearchModal.startScreen.saveRecentSearchButtonTitle": {
"message": "Save this search",
"description": "The label for save recent search button"
},
"theme.SearchModal.startScreen.removeRecentSearchButtonTitle": {
"message": "Remove this search from history",
"description": "The label for remove recent search button"
},
"theme.SearchModal.startScreen.favoriteSearchesTitle": {
"message": "Favorite",
"description": "The title for favorite searches"
},
"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": {
"message": "Remove this search from favorites",
"description": "The label for remove favorite search button"
},
"theme.SearchModal.errorScreen.titleText": {
"message": "Unable to fetch results",
"description": "The title for error screen of search modal"
},
"theme.SearchModal.errorScreen.helpText": {
"message": "You might want to check your network connection.",
"description": "The help text for error screen of search modal"
},
"theme.SearchModal.footer.selectText": {
"message": "to select",
"description": "The explanatory text of the action for the enter key"
},
"theme.SearchModal.footer.selectKeyAriaLabel": {
"message": "Enter key",
"description": "The ARIA label for the Enter key button that makes the selection"
},
"theme.SearchModal.footer.navigateText": {
"message": "to navigate",
"description": "The explanatory text of the action for the Arrow up and Arrow down key"
},
"theme.SearchModal.footer.navigateUpKeyAriaLabel": {
"message": "Arrow up",
"description": "The ARIA label for the Arrow up key button that makes the navigation"
},
"theme.SearchModal.footer.navigateDownKeyAriaLabel": {
"message": "Arrow down",
"description": "The ARIA label for the Arrow down key button that makes the navigation"
},
"theme.SearchModal.footer.closeText": {
"message": "to close",
"description": "The explanatory text of the action for Escape key"
},
"theme.SearchModal.footer.closeKeyAriaLabel": {
"message": "Escape key",
"description": "The ARIA label for the Escape key button that close the modal"
},
"theme.SearchModal.footer.searchByText": {
"message": "Search by",
"description": "The text explain that the search is making by Algolia"
},
"theme.SearchModal.noResultsScreen.noResultsText": {
"message": "No results for",
"description": "The text explains that there are no results for the following search"
},
"theme.SearchModal.noResultsScreen.suggestedQueryText": {
"message": "Try searching for",
"description": "The text for the suggested query when no results are found for the following search"
},
"theme.SearchModal.noResultsScreen.reportMissingResultsText": {
"message": "Believe this query should return results?",
"description": "The text for the question where the user thinks there are missing results"
},
"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": {
"message": "Let us know.",
"description": "The text for the link to report missing results"
},
"theme.SearchModal.placeholder": {
"message": "Search docs",
"description": "The placeholder of the input of the DocSearch pop-up modal"
},
"theme.IdealImageMessage.loading": {
"message": "Loading...",
"description": "When the full-scale image is loading"
},
"theme.IdealImageMessage.load": {
"message": "Click to load{sizeMessage}",
"description": "To prompt users to load the full image. sizeMessage is a parenthesized size figure."
},
"theme.IdealImageMessage.offline": {
"message": "Your browser is offline. Image not loaded",
"description": "When the user is viewing an offline document"
},
"theme.IdealImageMessage.404error": {
"message": "404. Image not found",
"description": "When the image is not found"
},
"theme.IdealImageMessage.error": {
"message": "Error. Click to reload",
"description": "When the image fails to load for unknown error"
},
"theme.blog.post.plurals": {
"message": "One post|{count} posts",
"description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.blog.tagTitle": {
"message": "{nPosts} tagged with \"{tagName}\"",
"description": "The title of the page for a blog tag"
},
"theme.blog.author.pageTitle": {
"message": "{authorName} - {nPosts}",
"description": "The title of the page for a blog author"
},
"theme.blog.authorsList.pageTitle": {
"message": "Authors",
"description": "The title of the authors page"
},
"theme.blog.authorsList.viewAll": {
"message": "View all authors",
"description": "The label of the link targeting the blog authors page"
},
"theme.blog.author.noPosts": {
"message": "This author has not written any posts yet.",
"description": "The text for authors with 0 blog post"
},
"theme.contentVisibility.unlistedBanner.title": {
"message": "Unlisted page",
"description": "The unlisted content banner title"
},
"theme.contentVisibility.unlistedBanner.message": {
"message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.",
"description": "The unlisted content banner message"
},
"theme.contentVisibility.draftBanner.title": {
"message": "Draft page",
"description": "The draft content banner title"
},
"theme.contentVisibility.draftBanner.message": {
"message": "This page is a draft. It will only be visible in dev and be excluded from the production build.",
"description": "The draft content banner message"
},
"theme.ErrorPageContent.tryAgain": {
"message": "Try again",
"description": "The label of the button to try again rendering when the React error boundary captures an error"
},
"theme.common.skipToMainContent": {
"message": "Skip to main content",
"description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
},
"theme.tags.tagsPageTitle": {
"message": "Tags",
"description": "The title of the tag list page"
}
}

View file

@ -0,0 +1,14 @@
{
"title": {
"message": "Blog",
"description": "The title for the blog used in SEO"
},
"description": {
"message": "Blog",
"description": "The description for the blog used in SEO"
},
"sidebar.title": {
"message": "Recent posts",
"description": "The label for the left sidebar"
}
}

View file

@ -0,0 +1,6 @@
{
"version.label": {
"message": "Next",
"description": "The label for version current"
}
}

View file

@ -0,0 +1,126 @@
{
"version.label": {
"message": "Next",
"description": "The label for version current"
},
"sidebar.docs.category.Getting Started": {
"message": "Getting Started",
"description": "The label for category Getting Started in sidebar docs"
},
"sidebar.docs.category.Core Concepts": {
"message": "Core Concepts",
"description": "The label for category Core Concepts in sidebar docs"
},
"sidebar.docs.category.Configuration": {
"message": "Configuration",
"description": "The label for category Configuration in sidebar docs"
},
"sidebar.docs.category.Guides": {
"message": "Guides",
"description": "The label for category Guides in sidebar docs"
},
"sidebar.docs.category.Best Practices": {
"message": "Best Practices",
"description": "The label for category Best Practices in sidebar docs"
},
"sidebar.docs.category.Testrunner": {
"message": "Testrunner",
"description": "The label for category Testrunner in sidebar docs"
},
"sidebar.docs.category.Desktop Testing": {
"message": "Desktop Testing",
"description": "The label for category Desktop Testing in sidebar docs"
},
"sidebar.docs.category.Electron": {
"message": "Electron",
"description": "The label for category Electron in sidebar docs"
},
"sidebar.docs.category.Component Testing": {
"message": "Component Testing",
"description": "The label for category Component Testing in sidebar docs"
},
"sidebar.docs.category.Framework Setup": {
"message": "Framework Setup",
"description": "The label for category Framework Setup in sidebar docs"
},
"sidebar.docs.category.Extension Testing": {
"message": "Extension Testing",
"description": "The label for category Extension Testing in sidebar docs"
},
"sidebar.docs.category.Accessibility Testing": {
"message": "Accessibility Testing",
"description": "The label for category Accessibility Testing in sidebar docs"
},
"sidebar.docs.category.OCR Testing": {
"message": "OCR Testing",
"description": "The label for category OCR Testing in sidebar docs"
},
"sidebar.docs.category.Commands": {
"message": "Commands",
"description": "The label for category Commands in sidebar docs"
},
"sidebar.docs.category.Visual Testing": {
"message": "Visual Testing",
"description": "The label for category Visual Testing in sidebar docs"
},
"sidebar.docs.category.Options": {
"message": "Options",
"description": "The label for category Options in sidebar docs"
},
"sidebar.docs.category.Percy": {
"message": "Percy",
"description": "The label for category Percy in sidebar docs"
},
"sidebar.docs.category.Migrate": {
"message": "Migrate",
"description": "The label for category Migrate in sidebar docs"
},
"sidebar.docs.category.Integration": {
"message": "Integration",
"description": "The label for category Integration in sidebar docs"
},
"sidebar.docs.category.Reporter": {
"message": "Reporter",
"description": "The label for category Reporter in sidebar docs"
},
"sidebar.docs.category.Services": {
"message": "Services",
"description": "The label for category Services in sidebar docs"
},
"sidebar.docs.doc.Argos": {
"message": "Argos",
"description": "The label for the doc item Argos in sidebar docs, linking to the doc visual-testing/argos"
},
"sidebar.api.category.Protocols": {
"message": "Protocols",
"description": "The label for category Protocols in sidebar api"
},
"sidebar.api.category.browser": {
"message": "browser",
"description": "The label for category browser in sidebar api"
},
"sidebar.api.category.element": {
"message": "element",
"description": "The label for category element in sidebar api"
},
"sidebar.api.category.mobile": {
"message": "mobile",
"description": "The label for category mobile in sidebar api"
},
"sidebar.api.category.mock": {
"message": "mock",
"description": "The label for category mock in sidebar api"
},
"sidebar.api.category.dialog": {
"message": "dialog",
"description": "The label for category dialog in sidebar api"
},
"sidebar.api.category.clock": {
"message": "clock",
"description": "The label for category clock in sidebar api"
},
"sidebar.flowcharts.category.Flowcharts": {
"message": "Flowcharts",
"description": "The label for category Flowcharts in sidebar flowcharts"
}
}

View file

@ -0,0 +1,74 @@
{
"link.title.Docs": {
"message": "Docs",
"description": "The title of the footer links column with title=Docs in the footer"
},
"link.title.Community": {
"message": "Community",
"description": "The title of the footer links column with title=Community in the footer"
},
"link.title.More": {
"message": "More",
"description": "The title of the footer links column with title=More in the footer"
},
"link.title.Sponsored by": {
"message": "Sponsored by",
"description": "The title of the footer links column with title=Sponsored by in the footer"
},
"link.item.label.Getting Started": {
"message": "Getting Started",
"description": "The label of footer link with label=Getting Started linking to docs/gettingstarted"
},
"link.item.label.API Reference": {
"message": "API Reference",
"description": "The label of footer link with label=API Reference linking to docs/api"
},
"link.item.label.Contribute": {
"message": "Contribute",
"description": "The label of footer link with label=Contribute linking to docs/contribute/"
},
"link.item.label.Help": {
"message": "Help",
"description": "The label of footer link with label=Help linking to community/support"
},
"link.item.label.Stack Overflow": {
"message": "Stack Overflow",
"description": "The label of footer link with label=Stack Overflow linking to https://stackoverflow.com/questions/tagged/webdriver-io"
},
"link.item.label.Support Chat": {
"message": "Support Chat",
"description": "The label of footer link with label=Support Chat linking to https://discord.webdriver.io"
},
"link.item.label.Slack": {
"message": "Slack",
"description": "The label of footer link with label=Slack linking to https://seleniumhq.slack.com/join/shared_invite/zt-f7jwg1n7-RVw4v4sMA7Zjufira_~EVw#/"
},
"link.item.label.Twitter": {
"message": "Twitter",
"description": "The label of footer link with label=Twitter linking to https://twitter.com/webdriverio"
},
"link.item.label.Blog": {
"message": "Blog",
"description": "The label of footer link with label=Blog linking to blog"
},
"link.item.label.Sponsor": {
"message": "Sponsor",
"description": "The label of footer link with label=Sponsor linking to docs/sponsor"
},
"link.item.label.Swag Store": {
"message": "Swag Store",
"description": "The label of footer link with label=Swag Store linking to https://shop.webdriver.io"
},
"link.item.label.YouTube": {
"message": "YouTube",
"description": "The label of footer link with label=YouTube linking to https://youtube.com/@webdriverio"
},
"copyright": {
"message": "Copyright © 2025 OpenJS Foundation",
"description": "The footer copyright"
},
"logo.alt": {
"message": "OpenJS Foundation Logo",
"description": "The alt text of footer logo"
}
}

View file

@ -0,0 +1,34 @@
{
"logo.alt": {
"message": "WebdriverIO",
"description": "The alt text of navbar logo"
},
"item.label.Docs": {
"message": "Docs",
"description": "Navbar item with label Docs"
},
"item.label.API": {
"message": "API",
"description": "Navbar item with label API"
},
"item.label.Blog": {
"message": "Blog",
"description": "Navbar item with label Blog"
},
"item.label.Contribute": {
"message": "Contribute",
"description": "Navbar item with label Contribute"
},
"item.label.Community": {
"message": "Community",
"description": "Navbar item with label Community"
},
"item.label.Sponsor": {
"message": "Sponsor",
"description": "Navbar item with label Sponsor"
},
"item.label.v9": {
"message": "v9",
"description": "Navbar item with label v9"
}
}

View file

@ -1,5 +1,5 @@
import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'
import sidebars from './sidebars.json' assert { type: 'json' }
import sidebars from './sidebars.json' with { type: 'json' }
export default sidebars as SidebarsConfig

View file

@ -1,6 +1,6 @@
import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'
import events from './events.json' assert { type: 'json' }
import events from './events.json' with { type: 'json' }
const sidebarsCommunity: SidebarsConfig = {
community: [

View file

@ -24,10 +24,12 @@ type LogoState = {
}
export default class LogoCarousel extends React.Component<LogoProps, LogoState> {
containerRef: React.RefObject<any>
containerRef: React.RefObject<HTMLDivElement>
list: () => React.JSX.Element
buttons: () => React.JSX.Element[]
state: LogoState
constructor(props: LogoProps) {
super(props)
this.state = {
@ -101,7 +103,7 @@ export default class LogoCarousel extends React.Component<LogoProps, LogoState>
return (
<div className={styles.companyUsage} ref={this.containerRef}>
<h3>
<Translate>Who is using WebdriverIO?</Translate>
<Translate id="homepage.logoCarousel.title">Who is using WebdriverIO?</Translate>
</h3>
<div className={clsx(styles.logos)}>
{this.list()}

View file

@ -1,15 +1,26 @@
import React from 'react'
import Link from '@docusaurus/Link'
import Translate from '@docusaurus/Translate'
import ImageSwitcher from './ImageSwitcher.tsx'
export default function Sponsors () {
return <section className="sponsors">
<h1>Open Source and Open Governed</h1>
<p>
We are an open source project with a strong commitment to transparency and community governance.
We are part of the <a href="https://openjsf.org/">OpenJS Foundation</a>, which is a part of
the <a href="https://linuxfoundation.org/">Linux Foundation</a>. The project is entirely run by volunteers
and funded by invested companies that want to see the project succeed. The project team is grateful
for the generous sponsorship of these companies.
<Translate id="sponsors.description.openSource" values={{
openJsFoundationLink: (
<a href="https://openjsf.org/">OpenJS Foundation</a>
),
linuxFoundationLink: (
<a href="https://linuxfoundation.org/">Linux Foundation</a>
)
}}>{`
We are an open source project with a strong commitment to transparency and community governance.
We are part of the {openJsFoundationLink} which is a part of the {linuxFoundationLink}. The project
is entirely run by volunteers and funded by invested companies that want to see the project succeed.
The project team is grateful for the generous sponsorship of these companies.
`}</Translate>
</p>
<div className="sponsors-grid">
<div className="premium">
@ -49,8 +60,18 @@ export default function Sponsors () {
</div>
</div>
<p>
If you use WebdriverIO within your organization, please consider supporting the project by <a href="/docs/sponsor">becoming a sponsor</a>.
It will help us to keep the project running and evolving.
<Translate
id="sponsors.description.support"
values={{
becomeASponsor: (
<Link to="/docs/sponsor">becoming a sponsor</Link>
)
}}>
{
'If you use WebdriverIO within your organization, please consider supporting the project by {becomeASponsor}. ' +
'It will help us to keep the project running and evolving.'
}
</Translate>
</p>
</section>
}

View file

@ -9,7 +9,7 @@ export const features = [{
message: 'Test in Real Environments'
}),
description: (
<Translate>
<Translate id="features.realEnvironments.description">
WebdriverIO allows you to test in actual browser or mobile devices used by your users.
</Translate>
),
@ -21,7 +21,7 @@ export const features = [{
message: 'Versatile and Feature Rich'
}),
description: (
<Translate>
<Translate id="features.versatile.description">
Use WebdriverIO for full e2e or unit and component testing in the browser.
</Translate>
),
@ -32,7 +32,7 @@ export const features = [{
message: 'Auto Wait'
}),
description: (
<Translate>
<Translate id="features.autoWait.description">
WebdriverIO automatically waits for elements to appear before interacting with them.
</Translate>
),

View file

@ -66,7 +66,7 @@ function Home() {
)}
to={useBaseUrl('/docs/gettingstarted')}
>
<Translate>Get Started</Translate>
<Translate id="homepage.getStarted">Get Started</Translate>
</Link>
<Link
to="/docs/why-webdriverio"
@ -75,7 +75,7 @@ function Home() {
styles.getStarted,
)}
>
<Translate>Why WebdriverIO?</Translate>
<Translate id="homepage.whyWebdriverIO">Why WebdriverIO?</Translate>
</Link>
<Link
to="https://github.com/webdriverio"
@ -84,7 +84,7 @@ function Home() {
styles.getStarted,
)}
>
<Translate>View on GitHub</Translate>
<Translate id="homepage.viewOnGitHub">View on GitHub</Translate>
</Link>
<Link
to="https://youtube.com/@webdriverio"
@ -93,13 +93,14 @@ function Home() {
styles.getStarted,
)}
>
<Translate>Watch on YouTube</Translate>
<Translate id="homepage.watchOnYouTube">Watch on YouTube</Translate>
</Link>
</div>
<section className="sponsorSection">
<div>
<em>Sponsored by</em>
<em><Translate id="homepage.sponsorSection.sponsoredBy">Sponsored by</Translate></em>
<ImageSwitcher
target="_blank"
lightImageSrc="/img/sponsors/browserstack_black.svg"
darkImageSrc="/img/sponsors/browserstack_white.svg"
alt="BrowserStack"
@ -123,8 +124,8 @@ function Home() {
<Translate
id="homepage.componentTesting.para1"
values={{
allInOne: (<b><Translate>all in one</Translate></b>),
usedBy: (<b><Translate>used by your users</Translate></b>)
allInOne: (<b><Translate id="homepage.componentTesting.allInOne">all in one</Translate></b>),
usedBy: (<b><Translate id="homepage.componentTesting.usedBy">used by your users</Translate></b>)
}}>
{'WebdriverIO is an {allInOne} framework for your web app development. It enables you to run ' +
'small and lightweight component tests as well as running e2e test scenarios in the browser or on ' +
@ -141,7 +142,7 @@ function Home() {
</Translate>
</p>
<div>
<h4><Translate>Easy setup for web component testing with:</Translate></h4>
<h4><Translate id="homepage.componentTesting.easySetup">Easy setup for web component testing with:</Translate></h4>
<a href="/docs/component-testing/react" className={styles.frameworkLogos}><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xMS41IC0xMC4yMzE3NCAyMyAyMC40NjM0OCI+CiAgPHRpdGxlPlJlYWN0IExvZ288L3RpdGxlPgogIDxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSIyLjA1IiBmaWxsPSIjNjFkYWZiIi8+CiAgPGcgc3Ryb2tlPSIjNjFkYWZiIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiPgogICAgPGVsbGlwc2Ugcng9IjExIiByeT0iNC4yIi8+CiAgICA8ZWxsaXBzZSByeD0iMTEiIHJ5PSI0LjIiIHRyYW5zZm9ybT0icm90YXRlKDYwKSIvPgogICAgPGVsbGlwc2Ugcng9IjExIiByeT0iNC4yIiB0cmFuc2Zvcm09InJvdGF0ZSgxMjApIi8+CiAgPC9nPgo8L3N2Zz4K" alt="" /></a>
<a href="/docs/component-testing/vue" className={styles.frameworkLogos}><img src="/img/icons/vue.png" alt="Vue.js" /></a>
<a href="/docs/component-testing/vue#testing-vue-components-in-nuxt" className={styles.frameworkLogos}><img src="/img/icons/nuxt.svg" alt="Nuxt" /></a>
@ -161,7 +162,7 @@ function Home() {
})}
text={<>
<p>
<Translate>
<Translate id="homepage.hightlight.createProject.para1">
The WebdriverIO testrunner comes with a command line interface that
provides a powerful configuration utility and helps you to create your
test setup in less than a minute. It lets you pick from available
@ -170,7 +171,7 @@ function Home() {
</Translate>
<br />
<br />
<Translate>
<Translate id="homepage.hightlight.createProject.para2">
With just one simple command you can set up a complete test suite:
</Translate>
</p>
@ -299,13 +300,13 @@ function Home() {
</Translate>
</p>
<div>
<h4><Translate>Integration to developer tools such as:</Translate></h4>
<h4><Translate id="homepage.hightlight.devtools">Integration to developer tools such as:</Translate></h4>
<a href="https://chromedevtools.github.io/devtools-protocol" className={styles.frameworkLogos}><img src="/img/icons/devtools.png" alt="Chrome DevTools" /></a>
<a href="https://developers.google.com/web/tools/lighthouse" className={styles.frameworkLogos}><img src="/img/icons/lighthouse-logo.svg" alt="Google Lighthouse" /></a>
<a href="https://www.deque.com/axe/" className={styles.frameworkLogos}><img src="/img/icons/axe.png" alt="Axe Accessibility Engine" /></a>
</div>
</>} isDark={undefined} />
<Section isDark>
<Section isDark={true}>
<LogoCarousel logos={logos}></LogoCarousel>
</Section>
<Section>