From d6fef96e150149b0ac3cb313f50a1f981610ce41 Mon Sep 17 00:00:00 2001 From: Collin Beczak Date: Fri, 12 Dec 2025 11:47:17 -0600 Subject: [PATCH 1/7] Make more strings translatable --- .../ChallengeDashboard/ChallengeDashboard.jsx | 2 +- src/components/AdminPane/Manage/Messages.js | 5 +++++ .../AdminPane/Manage/ProjectDashboard/Messages.js | 5 +++++ .../Manage/ProjectDashboard/ProjectDashboard.jsx | 2 +- .../Manage/ProjectsDashboard/Messages.js | 5 +++++ .../ProjectsDashboard/ProjectsDashboard.jsx | 2 +- .../FilterByCategorizationKeywords.jsx | 4 ++-- .../ChallengeFilterSubnav/Messages.js | 10 ++++++++++ src/components/ReviewTaskPane/Messages.js | 10 ++++++++++ src/components/ReviewTaskPane/ReviewTaskPane.jsx | 4 ++-- src/components/TaskPane/Messages.js | 15 +++++++++++++++ src/components/TaskPane/PublicTaskPane.jsx | 6 ++++-- src/components/TaskPane/TaskPane.jsx | 4 ++-- src/components/WidgetWorkspace/Messages.js | 5 +++++ .../WidgetWorkspace/WidgetWorkspace.jsx | 2 +- src/pages/Dashboard/Dashboard.jsx | 2 +- src/pages/Dashboard/Messages.js | 5 +++++ src/pages/GlobalActivity/GlobalActivity.jsx | 2 +- src/pages/Review/Messages.js | 5 +++++ src/pages/Review/Review.jsx | 2 +- 20 files changed, 82 insertions(+), 15 deletions(-) diff --git a/src/components/AdminPane/Manage/ChallengeDashboard/ChallengeDashboard.jsx b/src/components/AdminPane/Manage/ChallengeDashboard/ChallengeDashboard.jsx index 17a38f7bd..ac4a5e46d 100644 --- a/src/components/AdminPane/Manage/ChallengeDashboard/ChallengeDashboard.jsx +++ b/src/components/AdminPane/Manage/ChallengeDashboard/ChallengeDashboard.jsx @@ -35,7 +35,7 @@ export const defaultDashboardSetup = function () { return { dataModelVersion: 2, name: DASHBOARD_NAME, - label: "View Challenge", + label: , widgets: [ widgetDescriptor("ChallengeOverviewWidget"), widgetDescriptor("CompletionProgressWidget"), diff --git a/src/components/AdminPane/Manage/Messages.js b/src/components/AdminPane/Manage/Messages.js index 776241df7..f1496116d 100644 --- a/src/components/AdminPane/Manage/Messages.js +++ b/src/components/AdminPane/Manage/Messages.js @@ -4,6 +4,11 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with Admin Manage. */ export default defineMessages({ + viewChallengeLabel: { + id: "Admin.ChallengeDashboard.label", + defaultMessage: "View Challenge", + }, + manageHeader: { id: "Admin.manage.header", defaultMessage: "Create & Manage", diff --git a/src/components/AdminPane/Manage/ProjectDashboard/Messages.js b/src/components/AdminPane/Manage/ProjectDashboard/Messages.js index 62e50b026..d76580153 100644 --- a/src/components/AdminPane/Manage/ProjectDashboard/Messages.js +++ b/src/components/AdminPane/Manage/ProjectDashboard/Messages.js @@ -4,6 +4,11 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with ProjectDashboard */ export default defineMessages({ + viewProjectLabel: { + id: "Admin.ProjectDashboard.label", + defaultMessage: "View Project", + }, + editProjectLabel: { id: "Admin.ProjectCard.controls.editProject.label", defaultMessage: "Edit Project", diff --git a/src/components/AdminPane/Manage/ProjectDashboard/ProjectDashboard.jsx b/src/components/AdminPane/Manage/ProjectDashboard/ProjectDashboard.jsx index 6c6d8bd05..a621e901c 100644 --- a/src/components/AdminPane/Manage/ProjectDashboard/ProjectDashboard.jsx +++ b/src/components/AdminPane/Manage/ProjectDashboard/ProjectDashboard.jsx @@ -32,7 +32,7 @@ export const defaultDashboardSetup = function () { return { dataModelVersion: 2, name: DASHBOARD_NAME, - label: "View Project", + label: , filters: defaultChallengeFilters(), widgets: [ widgetDescriptor("ProjectOverviewWidget"), diff --git a/src/components/AdminPane/Manage/ProjectsDashboard/Messages.js b/src/components/AdminPane/Manage/ProjectsDashboard/Messages.js index 3712f57b3..75232b2cb 100644 --- a/src/components/AdminPane/Manage/ProjectsDashboard/Messages.js +++ b/src/components/AdminPane/Manage/ProjectsDashboard/Messages.js @@ -4,6 +4,11 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with ProjectsDashboard */ export default defineMessages({ + title: { + id: "Admin.ProjectsDashboard.title", + defaultMessage: "Projects", + }, + newProject: { id: "Admin.ProjectsDashboard.newProject", defaultMessage: "Add Project", diff --git a/src/components/AdminPane/Manage/ProjectsDashboard/ProjectsDashboard.jsx b/src/components/AdminPane/Manage/ProjectsDashboard/ProjectsDashboard.jsx index d9fb46ff4..090e48ba9 100644 --- a/src/components/AdminPane/Manage/ProjectsDashboard/ProjectsDashboard.jsx +++ b/src/components/AdminPane/Manage/ProjectsDashboard/ProjectsDashboard.jsx @@ -30,7 +30,7 @@ export const defaultDashboardSetup = function () { dataModelVersion: 2, name: DASHBOARD_NAME, id: generateWidgetId(), - label: "Projects", + label: , filters: defaultProjectFilters(), widgets: [widgetDescriptor("ProjectAboutWidget"), widgetDescriptor("ProjectListWidget")], permanentWidgets: [ diff --git a/src/components/ChallengePane/ChallengeFilterSubnav/FilterByCategorizationKeywords.jsx b/src/components/ChallengePane/ChallengeFilterSubnav/FilterByCategorizationKeywords.jsx index ee9ca4b54..cea8ebeb8 100644 --- a/src/components/ChallengePane/ChallengeFilterSubnav/FilterByCategorizationKeywords.jsx +++ b/src/components/ChallengePane/ChallengeFilterSubnav/FilterByCategorizationKeywords.jsx @@ -83,8 +83,8 @@ class FilterByCategorizationKeywords extends Component { type={} selection={ categorizationFilters.length > 0 - ? `${categorizationFilters.length} Filters` - : "Anything" + ? + : } onClick={dropdown.toggleDropdownVisible} selectionClassName={categorizationFilters.length > 0 ? "mr-text-yellow" : null} diff --git a/src/components/ChallengePane/ChallengeFilterSubnav/Messages.js b/src/components/ChallengePane/ChallengeFilterSubnav/Messages.js index 063de0a69..4821821d4 100644 --- a/src/components/ChallengePane/ChallengeFilterSubnav/Messages.js +++ b/src/components/ChallengePane/ChallengeFilterSubnav/Messages.js @@ -4,6 +4,16 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with ChallengeFilterSubnav */ export default defineMessages({ + filtersLabel: { + id: "ChallengeFilterSubnav.filter.categorization.filtersLabel", + defaultMessage: "{count} Filters", + }, + + anything: { + id: "Challenge.keywords.any", + defaultMessage: "Anything", + }, + header: { id: "Admin.ProjectCard.tabs.challenges.label", defaultMessage: "Challenges", diff --git a/src/components/ReviewTaskPane/Messages.js b/src/components/ReviewTaskPane/Messages.js index 5fefcf8dd..a7eea390c 100644 --- a/src/components/ReviewTaskPane/Messages.js +++ b/src/components/ReviewTaskPane/Messages.js @@ -4,6 +4,16 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with ReviewTaskPane */ export default defineMessages({ + taskReviewLabel: { + id: "ReviewTaskPane.label", + defaultMessage: "Task Review", + }, + + taskReviewLabelStaticMap: { + id: "ReviewTaskPane.label.staticMap", + defaultMessage: "Task Review - Static Map", + }, + taskLockedLabel: { id: "ReviewTaskPane.indicators.locked.label", defaultMessage: "Task locked", diff --git a/src/components/ReviewTaskPane/ReviewTaskPane.jsx b/src/components/ReviewTaskPane/ReviewTaskPane.jsx index 415374e58..3204a9320 100644 --- a/src/components/ReviewTaskPane/ReviewTaskPane.jsx +++ b/src/components/ReviewTaskPane/ReviewTaskPane.jsx @@ -29,7 +29,7 @@ export const defaultWorkspaceSetup = function () { return { dataModelVersion: 2, name: WIDGET_WORKSPACE_NAME, - label: "Task Review", + label: , widgets: [ widgetDescriptor("TaskReviewWidget"), widgetDescriptor("TasksWidget"), @@ -52,7 +52,7 @@ export const defaultWorkspaceSetupAlt = function () { return { dataModelVersion: 2, name: WIDGET_WORKSPACE_NAME, - label: "Task Review - Static Map", + label: , type: "leftPanel", widgets: [ widgetDescriptor("TaskReviewWidget"), diff --git a/src/components/TaskPane/Messages.js b/src/components/TaskPane/Messages.js index 23dd74d7e..ce936e442 100644 --- a/src/components/TaskPane/Messages.js +++ b/src/components/TaskPane/Messages.js @@ -4,6 +4,21 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with TaskPane */ export default defineMessages({ + title: { + id: "Task.pane.title", + defaultMessage: "Public Task", + }, + + taskCompletionLabel: { + id: "Task.pane.label", + defaultMessage: "Task Completion", + }, + + taskCompletionLabelStaticMap: { + id: "Task.pane.label.staticMap", + defaultMessage: "Task Completion - Static Map", + }, + inspectLabel: { id: "Admin.ChallengeTaskMap.controls.inspectTask.label", defaultMessage: "Inspect Task", diff --git a/src/components/TaskPane/PublicTaskPane.jsx b/src/components/TaskPane/PublicTaskPane.jsx index cc306213a..2f1284e7a 100644 --- a/src/components/TaskPane/PublicTaskPane.jsx +++ b/src/components/TaskPane/PublicTaskPane.jsx @@ -8,13 +8,15 @@ import WithChallengePreferences from "../HOCs/WithChallengePreferences/WithChall import WithCooperativeWork from "../HOCs/WithCooperativeWork/WithCooperativeWork"; import WithPublicWidgetWorkspaces from "../HOCs/WithPublicWidgetWorkspaces/WithPublicWidgetWorkspaces"; import { PublicWidgetGrid } from "../PublicWidgetGrid/PublicWidgetGrid"; - +import { FormattedMessage } from "react-intl"; +import messages from "./Messages"; + const WIDGET_WORKSPACE_NAME = "PUBLIC"; export const defaultWorkspaceSetup = function () { return { dataModelVersion: 2, name: WIDGET_WORKSPACE_NAME, - label: "Public Task", + label: , widgets: [ widgetDescriptor("ChallengeShareWidget"), widgetDescriptor("TaskStatusWidget"), diff --git a/src/components/TaskPane/TaskPane.jsx b/src/components/TaskPane/TaskPane.jsx index fa57508af..691c48512 100644 --- a/src/components/TaskPane/TaskPane.jsx +++ b/src/components/TaskPane/TaskPane.jsx @@ -46,7 +46,7 @@ export const defaultWorkspaceSetupClassic = function () { return { dataModelVersion: 2, name: WIDGET_WORKSPACE_NAME, - label: "Task Completion", + label: intl.formatMessage(messages.taskCompletionLabel), type: "classic", widgets: [ widgetDescriptor("TaskInstructionsWidget"), @@ -83,7 +83,7 @@ export const defaultWorkspaceSetupLeftPanel = function (type = "leftPanel") { return { dataModelVersion: 2, name: WIDGET_WORKSPACE_NAME, - label: "Task Completion - Static Map", + label: intl.formatMessage(messages.taskCompletionLabelStaticMap), type, widgets: [ widgetDescriptor("TaskInstructionsWidget"), diff --git a/src/components/WidgetWorkspace/Messages.js b/src/components/WidgetWorkspace/Messages.js index 847a36549..b312ec106 100644 --- a/src/components/WidgetWorkspace/Messages.js +++ b/src/components/WidgetWorkspace/Messages.js @@ -4,6 +4,11 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with WidgetWorkspace */ export default defineMessages({ + addStaticMapLayoutLabel: { + id: "WidgetWorkspace.controls.addStaticMapLayout.label", + defaultMessage: "Add Static Map Layout", + }, + editConfigurationLabel: { id: "WidgetWorkspace.controls.editConfiguration.label", defaultMessage: "Edit Layout", diff --git a/src/components/WidgetWorkspace/WidgetWorkspace.jsx b/src/components/WidgetWorkspace/WidgetWorkspace.jsx index 7cb33c648..493e72404 100644 --- a/src/components/WidgetWorkspace/WidgetWorkspace.jsx +++ b/src/components/WidgetWorkspace/WidgetWorkspace.jsx @@ -439,7 +439,7 @@ const ListLayoutItems = function (props) { {props.setupWorkspaceAlt && props.hasLeftPanelOption ? (
  • props.setupWorkspaceAlt(props.closeDropdown)}> - Add Static Map Layout +
  • ) : null} diff --git a/src/pages/Dashboard/Dashboard.jsx b/src/pages/Dashboard/Dashboard.jsx index 8f08a6672..c84fd1609 100644 --- a/src/pages/Dashboard/Dashboard.jsx +++ b/src/pages/Dashboard/Dashboard.jsx @@ -14,7 +14,7 @@ export const defaultWorkspaceSetup = function () { return { dataModelVersion: 2, name: WIDGET_WORKSPACE_NAME, - label: "Dashboard", + label: , widgets: [ widgetDescriptor("FeaturedChallengesWidget"), widgetDescriptor("SavedChallengesWidget"), diff --git a/src/pages/Dashboard/Messages.js b/src/pages/Dashboard/Messages.js index 2a53282bf..d5dd473de 100644 --- a/src/pages/Dashboard/Messages.js +++ b/src/pages/Dashboard/Messages.js @@ -4,6 +4,11 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with Dashboard */ export default defineMessages({ + title: { + id: "Dashboard.title", + defaultMessage: "Dashboard", + }, + header: { id: "Dashboard.header", defaultMessage: "Dashboard", diff --git a/src/pages/GlobalActivity/GlobalActivity.jsx b/src/pages/GlobalActivity/GlobalActivity.jsx index 29add10c9..6e30c16bf 100644 --- a/src/pages/GlobalActivity/GlobalActivity.jsx +++ b/src/pages/GlobalActivity/GlobalActivity.jsx @@ -61,7 +61,7 @@ export const defaultWorkspaceSetup = function () { return { dataModelVersion: 2, name: WIDGET_WORKSPACE_NAME, - label: "Global Activity", + label: , widgets: [widgetDescriptor("ActivityListingWidget"), widgetDescriptor("ActivityMapWidget")], layout: [ { i: generateWidgetId(), x: 0, y: 0, w: 4, h: 12 }, diff --git a/src/pages/Review/Messages.js b/src/pages/Review/Messages.js index 010a248b7..e6943aea6 100644 --- a/src/pages/Review/Messages.js +++ b/src/pages/Review/Messages.js @@ -4,6 +4,11 @@ import { defineMessages } from "react-intl"; * Internationalized messages for use with TaskAnalysisTable */ export default defineMessages({ + title: { + id: "Review.Dashboard.title", + defaultMessage: "Review Overview", + }, + tasksToBeReviewed: { id: "Review.Dashboard.tasksToBeReviewed", defaultMessage: "Tasks to be Reviewed", diff --git a/src/pages/Review/Review.jsx b/src/pages/Review/Review.jsx index d8ee5e713..a913ec7ce 100644 --- a/src/pages/Review/Review.jsx +++ b/src/pages/Review/Review.jsx @@ -35,7 +35,7 @@ export const defaultWorkspaceSetup = function () { return { dataModelVersion: 2, name: WIDGET_WORKSPACE_NAME, - label: "Review Overview", + label: , widgets: [widgetDescriptor("ReviewTableWidget")], conditionalWidgets: [ // conditionally displayed From c20af9ed672e9267facd661b61498fdef32282ac Mon Sep 17 00:00:00 2001 From: Collin Beczak Date: Mon, 2 Feb 2026 14:10:13 -0600 Subject: [PATCH 2/7] Enhance internationalization by adding translatable strings for breadcrumbs and various UI components. Updated components to utilize new messages for improved accessibility and user experience. --- .../ChallengeDashboard/ChallengeDashboard.jsx | 2 +- .../Manage/EditProject/EditProject.jsx | 2 +- .../Manage/InspectTask/InspectTask.jsx | 2 +- .../EditChallenge/EditChallenge.jsx | 2 +- .../EditChallenge/EditChallenges.jsx | 2 +- .../EditChallenge/Messages.js | 15 +++++ .../Schemas/InstructionsSchema.js | 6 +- .../Manage/ManageTasks/EditTask/EditTask.jsx | 2 +- src/components/AdminPane/Manage/Messages.js | 5 ++ .../ProjectDashboard/ProjectDashboard.jsx | 2 +- .../ProjectsDashboard/ProjectsDashboard.jsx | 6 +- .../VirtualProjects/ManageChallengeList.jsx | 2 +- .../AutosuggestMentionTextArea.jsx | 4 +- .../ChallengeDetail/FlagCommentInput.jsx | 6 +- src/components/ChallengeDetail/Messages.js | 15 +++++ .../CustomPriorityBoundsField.jsx | 5 +- .../Custom/RJSFFormFieldAdapter/Messages.js | 4 ++ .../SearchControl/LocationSearchBox.jsx | 6 +- .../EnhancedMap/SearchControl/Messages.js | 5 ++ .../ErrorTagManager/ErrorTagManager.jsx | 29 ++++---- src/components/ErrorTagManager/Messages.js | 67 +++++++++++++++++++ src/components/Footer/Footer.jsx | 9 ++- src/components/Footer/Messages.js | 5 ++ .../WithWidgetWorkspaces.jsx | 22 ++++-- .../InTableTagFilter.jsx | 2 +- .../KeywordAutosuggestInput/Messages.js | 5 ++ .../MarkdownContent/MarkdownContent.jsx | 2 +- src/components/Navbar/Messages.js | 5 ++ src/components/Navbar/Navbar.jsx | 8 ++- src/components/PageNotFound/Messages.js | 5 ++ src/components/PageNotFound/PageNotFound.jsx | 8 ++- src/components/SearchBox/Messages.js | 16 +++++ src/components/SearchBox/SearchBox.jsx | 10 ++- src/components/TaskAnalysisTable/Messages.js | 30 +++++++++ .../TaskAnalysisTable/TableSearchFilter.jsx | 5 +- .../columns/reviewColumns.jsx | 6 +- .../TaskAnalysisTable/columns/taskColumns.jsx | 4 +- .../TaskClusterMap/LegendToggleControl.jsx | 7 +- .../TaskClusterMap/MapControlsDrawer.jsx | 39 ++++++----- src/components/TaskClusterMap/Messages.js | 40 +++++++++++ src/components/TaskPane/TaskPane.jsx | 8 +-- src/components/TaskTags/Messages.js | 5 ++ src/components/TaskTags/TaskTags.jsx | 6 +- src/components/WidgetGrid/Messages.js | 15 +++++ src/components/WidgetGrid/WidgetGrid.jsx | 8 ++- 45 files changed, 368 insertions(+), 91 deletions(-) create mode 100644 src/components/ErrorTagManager/Messages.js create mode 100644 src/components/SearchBox/Messages.js create mode 100644 src/components/WidgetGrid/Messages.js diff --git a/src/components/AdminPane/Manage/ChallengeDashboard/ChallengeDashboard.jsx b/src/components/AdminPane/Manage/ChallengeDashboard/ChallengeDashboard.jsx index ac4a5e46d..8960781e6 100644 --- a/src/components/AdminPane/Manage/ChallengeDashboard/ChallengeDashboard.jsx +++ b/src/components/AdminPane/Manage/ChallengeDashboard/ChallengeDashboard.jsx @@ -90,7 +90,7 @@ export class ChallengeDashboard extends Component { const pageHeader = (
    -