36 lines
1.3 KiB
JavaScript
36 lines
1.3 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
import React from "react";
|
|
|
|
/**
|
|
* Set text on a child element/component depending on if the message is already
|
|
* translated plain text or a fluent id with optional args.
|
|
*/
|
|
export class FluentOrText extends React.PureComponent {
|
|
render() {
|
|
// Ensure we have a single child to attach attributes
|
|
const { children, message } = this.props;
|
|
const child = children ? React.Children.only(children) : <span />;
|
|
|
|
// For a string message, just use it as the child's text
|
|
let grandChildren = message;
|
|
let extraProps;
|
|
|
|
// Convert a message object to set desired fluent-dom attributes
|
|
if (typeof message === "object") {
|
|
const args = message.args || message.values;
|
|
extraProps = {
|
|
"data-l10n-args": args && JSON.stringify(args),
|
|
"data-l10n-id": message.id || message.string_id,
|
|
};
|
|
|
|
// Use original children potentially with data-l10n-name attributes
|
|
grandChildren = child.props.children;
|
|
}
|
|
|
|
// Add the message to the child via fluent attributes or text node
|
|
return React.cloneElement(child, extraProps, grandChildren);
|
|
}
|
|
}
|