Возможно, но не через FormattedMessage
.
material-table
используются @material-ui
компоненты, а для поиска они используют TextField
. Заполнитель должен быть строкой.
Чтобы решить вашу проблему, вам нужно отформатировать заполнитель, прежде чем передать его в таблицу материалов.
Допустим, у вас IntlProvider
сверху вашего дерева и выбранного языкового стандарта.
Все, что вам нужно:
добавить пользовательское сообщение в определение вашего сообщения с некоторым идентификатором
Оберните компонент, который отображает таблицу материалов, с помощью injectIntl
HO C из react-intl
.
В локализацию таблицы материалов добавьте searchPlaceholder: intl.formatMessage({ id: "my.custom.searchBar" })
.
Рабочий код:
import { IntlProvider, injectIntl } from "react-intl";
import MaterialTable from "material-table";
const enMessages = {
"my.custom.searchBar": "search here"
};
const frMessages = {
"my.custom.searchBar": "rechercher"
};
function TableComponent({ intl }) {
return (
<MaterialTable
columns={[
{ title: "Adı", field: "name" },
{ title: "Soyadı", field: "surname" },
{ title: "Doğum Yılı", field: "birthYear", type: "numeric" },
{
title: "Doğum Yeri",
field: "birthCity",
lookup: { 34: "İstanbul", 63: "Şanlıurfa" }
}
]}
data={[
{ name: "Mehmet", surname: "Baran", birthYear: 1987, birthCity: 63 }
]}
title="Demo Title"
localization={{
toolbar: {
searchPlaceholder: intl.formatMessage({ id: "my.custom.searchBar" })
}
}}
/>
);
}
const LocalizedTable = injectIntl(TableComponent);
export default function App() {
const [locale, setLocale] = React.useState("en");
const messages = locale === "en" ? enMessages : frMessages;
return (
<IntlProvider locale={locale} messages={messages}>
<select onChange={e => setLocale(e.target.value)} value={locale}>
<option value="en">en</option>
<option value="fr">fr</option>
</select>
<div style={{ maxWidth: "100%" }}>
<LocalizedTable />
</div>
</IntlProvider>
);
}
Вот рабочие коды и коробка