Check HTML-encoded quotes when handling translations for embedded pages (such as welcome.html) (#30743)
* Check HTML encoding on embedded page * Add tests * lint
This commit is contained in:
@@ -72,7 +72,11 @@ export default class EmbeddedPage extends React.PureComponent<IProps, IState> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let body = (await res.text()).replace(/_t\(['"]([\s\S]*?)['"]\)/gm, (match, g1) => this.translate(g1));
|
// Replace '," and HTML encoded variants
|
||||||
|
let body = (await res.text()).replace(
|
||||||
|
/_t\((?:['"]|(?:&#(?:34|27);))([\s\S]*?)(?:['"]|(?:&#(?:34|27);))\)/gm,
|
||||||
|
(match, g1) => this.translate(g1),
|
||||||
|
);
|
||||||
|
|
||||||
if (this.props.replaceMap) {
|
if (this.props.replaceMap) {
|
||||||
Object.keys(this.props.replaceMap).forEach((key) => {
|
Object.keys(this.props.replaceMap).forEach((key) => {
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ jest.mock("../../../../../src/languageHandler", () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
describe("<EmbeddedPage />", () => {
|
describe("<EmbeddedPage />", () => {
|
||||||
it("should translate _t strings", async () => {
|
it.each([`"`, `'`, `'`, `4`])("should translate _t strings", async (character) => {
|
||||||
mocked(_t).mockReturnValue("Przeglądaj pokoje");
|
mocked(_t).mockReturnValue("Przeglądaj pokoje");
|
||||||
fetchMock.get("https://home.page", {
|
fetchMock.get("https://home.page", {
|
||||||
body: '<h1>_t("Explore rooms")</h1>',
|
body: `<h1>_t(${character}Explore rooms${character})</h1>`,
|
||||||
});
|
});
|
||||||
|
|
||||||
const { asFragment } = render(<EmbeddedPage url="https://home.page" />);
|
const { asFragment } = render(<EmbeddedPage url="https://home.page" />);
|
||||||
|
|||||||
+48
@@ -41,3 +41,51 @@ exports[`<EmbeddedPage /> should translate _t strings 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
</DocumentFragment>
|
</DocumentFragment>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`<EmbeddedPage /> should translate _t strings 2`] = `
|
||||||
|
<DocumentFragment>
|
||||||
|
<div
|
||||||
|
class="undefined_guest"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="undefined_body"
|
||||||
|
>
|
||||||
|
<h1>
|
||||||
|
Przeglądaj pokoje
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</DocumentFragment>
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`<EmbeddedPage /> should translate _t strings 3`] = `
|
||||||
|
<DocumentFragment>
|
||||||
|
<div
|
||||||
|
class="undefined_guest"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="undefined_body"
|
||||||
|
>
|
||||||
|
<h1>
|
||||||
|
Przeglądaj pokoje
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</DocumentFragment>
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`<EmbeddedPage /> should translate _t strings 4`] = `
|
||||||
|
<DocumentFragment>
|
||||||
|
<div
|
||||||
|
class="undefined_guest"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="undefined_body"
|
||||||
|
>
|
||||||
|
<h1>
|
||||||
|
Przeglądaj pokoje
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</DocumentFragment>
|
||||||
|
`;
|
||||||
|
|||||||
Reference in New Issue
Block a user