From 8095bc5df93af36769eb3d81708ae37055137605 Mon Sep 17 00:00:00 2001 From: Matthew Curtis Date: Mon, 27 Jan 2025 16:07:56 -0600 Subject: [PATCH 1/4] [translated-error-bugs] possible fix --- packages/perseus/src/strings.test.ts | 18 ++++++++++ packages/perseus/src/strings.ts | 36 +++++++++++-------- .../src/widgets/graded-group/graded-group.tsx | 2 +- 3 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 packages/perseus/src/strings.test.ts diff --git a/packages/perseus/src/strings.test.ts b/packages/perseus/src/strings.test.ts new file mode 100644 index 0000000000..7b2be0746a --- /dev/null +++ b/packages/perseus/src/strings.test.ts @@ -0,0 +1,18 @@ +import {clone} from "../../../testing/object-utils"; + +import {mapErrorToString, mockStrings} from "./strings"; + +describe("mapErrorToString", () => { + it("handles translated strings", () => { + // Assemble + const translated = clone(mockStrings); + translated.MISSING_PERCENT_ERROR = + "pretend this is a different language"; + + // Act + const rv = mapErrorToString("MISSING_PERCENT_ERROR", translated); + + // Assert + expect(rv).toBe("pretend this is a different language"); + }); +}); diff --git a/packages/perseus/src/strings.ts b/packages/perseus/src/strings.ts index 4115d4bf7b..f6d2d9a877 100644 --- a/packages/perseus/src/strings.ts +++ b/packages/perseus/src/strings.ts @@ -976,26 +976,34 @@ export const mockStrings: PerseusStrings = { // This type helps us make sure all error codes are mapped to strings type ErrorStringMap = { - [K in keyof typeof ErrorCodes]: string; + [K in keyof typeof ErrorCodes]: keyof PerseusStrings; }; +/** + * Map an error string to a PerseusStrings key + * that we can use to get the translated error message + */ const errorToString: ErrorStringMap = { - MISSING_PERCENT_ERROR: strings.MISSING_PERCENT_ERROR, - NEEDS_TO_BE_SIMPLIFIED_ERROR: strings.NEEDS_TO_BE_SIMPLFIED_ERROR, - APPROXIMATED_PI_ERROR: strings.APPROXIMATED_PI_ERROR, - EXTRA_SYMBOLS_ERROR: strings.EXTRA_SYMBOLS_ERROR, - WRONG_CASE_ERROR: strings.WRONG_CASE_ERROR, - WRONG_LETTER_ERROR: strings.WRONG_LETTER_ERROR, - MULTIPLICATION_SIGN_ERROR: strings.MULTIPLICATION_SIGN_ERROR, - INVALID_SELECTION_ERROR: strings.invalidSelection, - CHOOSE_CORRECT_NUM_ERROR: strings.chooseCorrectNum, - NOT_NONE_ABOVE_ERROR: strings.notNoneOfTheAbove, - FILL_ALL_CELLS_ERROR: strings.fillAllCells, + MISSING_PERCENT_ERROR: "MISSING_PERCENT_ERROR", + NEEDS_TO_BE_SIMPLIFIED_ERROR: "NEEDS_TO_BE_SIMPLFIED_ERROR", + APPROXIMATED_PI_ERROR: "APPROXIMATED_PI_ERROR", + EXTRA_SYMBOLS_ERROR: "EXTRA_SYMBOLS_ERROR", + WRONG_CASE_ERROR: "WRONG_CASE_ERROR", + WRONG_LETTER_ERROR: "WRONG_LETTER_ERROR", + MULTIPLICATION_SIGN_ERROR: "MULTIPLICATION_SIGN_ERROR", + INVALID_SELECTION_ERROR: "invalidSelection", + CHOOSE_CORRECT_NUM_ERROR: "chooseCorrectNum", + NOT_NONE_ABOVE_ERROR: "notNoneOfTheAbove", + FILL_ALL_CELLS_ERROR: "fillAllCells", }; -export function mapErrorToString(err: string | null | undefined) { +export function mapErrorToString( + err: string | null | undefined, + strings: PerseusStrings, +) { if (!err) { return err; } - return errorToString[err] || err; + + return strings[errorToString[err]] || err; } diff --git a/packages/perseus/src/widgets/graded-group/graded-group.tsx b/packages/perseus/src/widgets/graded-group/graded-group.tsx index c06c09c3df..be07d90324 100644 --- a/packages/perseus/src/widgets/graded-group/graded-group.tsx +++ b/packages/perseus/src/widgets/graded-group/graded-group.tsx @@ -192,7 +192,7 @@ export class GradedGroup score.type === "points" ? score.message || "" : score.message - ? `${INVALID_MESSAGE_PREFIX} ${mapErrorToString(score.message)}` + ? `${INVALID_MESSAGE_PREFIX} ${mapErrorToString(score.message, this.context.strings)}` : `${INVALID_MESSAGE_PREFIX} ${DEFAULT_INVALID_MESSAGE_1}${DEFAULT_INVALID_MESSAGE_2}`; this.setState({ From c053ea92bbe511f2d88963577df727e4f4032021 Mon Sep 17 00:00:00 2001 From: Matthew Curtis Date: Mon, 27 Jan 2025 16:17:05 -0600 Subject: [PATCH 2/4] [translated-error-bugs] docs(changeset): Bugfix: use translated strings in mapErrorToString --- .changeset/wise-insects-occur.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/wise-insects-occur.md diff --git a/.changeset/wise-insects-occur.md b/.changeset/wise-insects-occur.md new file mode 100644 index 0000000000..0c3482d630 --- /dev/null +++ b/.changeset/wise-insects-occur.md @@ -0,0 +1,5 @@ +--- +"@khanacademy/perseus": patch +--- + +Bugfix: use translated strings in mapErrorToString From c927140ca2f12c876b3a8ed99e6f5aba294581c4 Mon Sep 17 00:00:00 2001 From: Matthew Curtis Date: Mon, 27 Jan 2025 16:17:16 -0600 Subject: [PATCH 3/4] [translated-error-bugs] comment code --- packages/perseus/src/strings.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/perseus/src/strings.ts b/packages/perseus/src/strings.ts index f6d2d9a877..350ad724c3 100644 --- a/packages/perseus/src/strings.ts +++ b/packages/perseus/src/strings.ts @@ -998,7 +998,9 @@ const errorToString: ErrorStringMap = { }; export function mapErrorToString( + // the string representing an error code err: string | null | undefined, + // the translated Perseus strings strings: PerseusStrings, ) { if (!err) { From 98435b31332bd1b8077e9ae1f544859058b9befb Mon Sep 17 00:00:00 2001 From: Matthew Curtis Date: Mon, 27 Jan 2025 16:22:39 -0600 Subject: [PATCH 4/4] [translated-error-bugs] small tweak for code clarity --- packages/perseus/src/strings.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/perseus/src/strings.ts b/packages/perseus/src/strings.ts index 350ad724c3..a7fda5025a 100644 --- a/packages/perseus/src/strings.ts +++ b/packages/perseus/src/strings.ts @@ -1001,11 +1001,11 @@ export function mapErrorToString( // the string representing an error code err: string | null | undefined, // the translated Perseus strings - strings: PerseusStrings, + translatedStrings: PerseusStrings, ) { if (!err) { return err; } - return strings[errorToString[err]] || err; + return translatedStrings[errorToString[err]] || err; }