Перевести название вкладки React-admin

Я использую React-admin и слежу за демонстрацией, которую они раздают. Пока все работает, кроме перевода названия / заголовка вкладки. Я сделал перевод правильно, потому что другие компоненты, у которых есть атрибут метка, отлично работают с переводом.

Переводы берутся из файла en.js и добавляются в app.js согласно документации реагировать-админ.

Вот мой код:

class TabbedDatagrid extends React.Component {
  tabs = [
      { id: 'countries', name: 'root.countries.title' },
      { id: 'languages', name: 'root.languages.title' },
  ];
  state = {  countries: [], languages: [] };

  static getDerivedStateFromProps(props, state) {
      if (props.ids !== state[props.filterValues.status]) {
          return { ...state, [props.filterValues.status]: props.ids };
      }
      return null;

  }

  handleChangeEvent = (event, value) => {
      const { filterValues, setFilters } = this.props;
      setFilters({ ...filterValues, status: value });
  };

  render() {
      const { classes, filterValues, ...props } = this.props;
      return (
          <Fragment>
              <Tabs
                  fullWidth
                  centered
                  value = {filterValues.status}
                  indicatorColor = "primary"
                  onChange = {this.handleChangeEvent}

              >
                  {this.tabs.map(choice => (
                      <Tab
                          key = {choice.id}
                          label = {choice.name}
                          value = {choice.id}
                      />

                  ))}
              </Tabs>
              <Divider />
              <Responsive
                  small = {<SimpleList primaryText = {record => record.title} />}
                  medium = {
                      <div>                           
                          {filterValues.status === 'countries' && (
                                <Datagrid hover = {false}
                                   {...props}
                                   ids = {this.state['countries']}
                                   >
                                    <TextField source = "id" />
                                    <TextField source = "name"  label = "root.countries.fields.name"/>
                                </Datagrid>
                                )}
                            {filterValues.status === 'languages' && (

                           <Datagrid hover = {false}

                              {...props}

                              ids = {this.state['languages']}

                              >

                               <TextField source = "id" />

                              <TextField source = "name"  label = "root.languages.fields.name"/>

                           </Datagrid>
                       )}
                      </div>

                  }

              />

          </Fragment>

      );

  }

}

Кажется, что перевод работает везде, кроме метки Tab. Вместо заголовка я получаю строку в верхнем регистре этого root.countries.title.

Есть ли обходной путь или как решить эту проблему?

переводы берутся из файла en.js, который включен в файл app.js, он не получает значения из состояния

menaka 02.10.2018 12:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
1
1 485
2

Ответы 2

Вы, вероятно, использовали <Tab/> «напрямую» из material-ui.

Вам необходимо использовать (создать) «расширенную версию» (с использованием translate prop) этого компонента.

Вдохновляйтесь меню или другими переводимыми компонентами.

Вам необходимо передать свои переводы в свой App.js следующим образом:

import React from 'react';
import { Admin, Resource } from 'react-admin';
import frenchMessages from 'ra-language-french';
import englishMessages from 'ra-language-english';

const messages = {
    fr: { component:{label:'test'},...frenchMessages },
    en: { component:{label:'test'},...englishMessages },,
}
const i18nProvider = locale => messages[locale];

const App = () => (
    <Admin locale = "en" i18nProvider = {i18nProvider}>
        ...
    </Admin>
);

export default App;

чем когда вы хотите использовать переводы внутри компонента, вам нужно подключить его к функции translate response-admin следующим образом:

import { TextInput, translate } from 'react-admin';

const translatedComponent = ({translate, ...props}) => {
return <TextInput label = {translate('component.label')} />
}

export default translate(translatedComponent);

Важно связать компонент с translate и получить функцию translate от props, чтобы получить работу по переводу.

Другие вопросы по теме