Проблема перевода при загрузке языков из файла json - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть простая локализация в моем приложении. Когда я устанавливаю языки вручную в состоянии, это работает, но когда я хочу загрузить переводы из некоторого файла json, у меня возникает проблема со вторым языком и появляется стандартная ошибка «Отсутствует translationId: userId для language: cr», но код остается прежним .. , В конструкторе, когда я использую translations1, this.props.addTranslation (this.state.translations1); это работает, но когда я использую this.props.addTranslation (this.state.translations); я получаю ошибку

Может ли кто-нибудь мне помочь?

        constructor(props){
    super(props);
    this.state = {
        translations1: {
            pocetna: ['Početna', 'Почетна'],
            listaKorisnika: ['Lista Korisnika', 'Листа Корисника'],
            dodajKorisnika: ['Dodaj Korisnika', 'Додај Корисника'],
            userId: ['User ID', 'Усер ИД']
        },
        translations: []
    }
     this.props.initialize({
        languages: [
            {name: "Latinica", code: "lt"},
            {name: "Cirilica", code: "cr"}
        ],
        options: {
            renderToStaticMarkup,
            defaultLanguage: 'lt'
        }
    })

    this.props.addTranslation(this.state.translations);
    this.onChangeLanguage = this.onChangeLanguage.bind(this);
}
onChangeLanguage(_slag) {
    console.log('onChangeLanguage: ', _slag.value)
    this.props.setActiveLanguage(_slag.value);
}

componentDidMount() {
    this.props.getTranslations();
}

componentWillReceiveProps(nextProps) {
    console.log('nextProps: ', nextProps.translations)
    this.setState({
        translations: nextProps.translations
    })
}

render() {

    const languageInSelect = [
        { label: 'Latinica', value: 'lt' },
        { label: 'Cirilica', value: 'cr' }
      ];

    return(
        <div className="sidebar"  style={{'backgroundImage': 'url(assets/img/sidebar-3.jpg)'}}
            data-color="purple" data-background-color="white" 
            data-image="../assets/img/sidebar-1.jpg">

        <div className="sidebar-wrapper">
            <ul className="nav" >
                <li className="nav-item ">
                    <NavLink to="/pocetna" exact={true} className="nav-link"  activeStyle={{ 'backgroundColor': '#9c27b0', 'color':'white', 'fontWeight':'bold'}}>
                        <MaterialIcon icon="dashboard" />
                        {/* <i className="material-icons">dashboard</i> */}
                        <Translate id="pocetna">Početna</Translate>
                        {/* <p>Početna</p> */}
                    </NavLink>
                </li>
                <li className="nav-item ">
                    <NavLink to="/listaKorisnika" exact={true} className="nav-link" activeStyle={{ 'backgroundColor': '#9c27b0', 'color':'white','fontWeight':'bold'}}>
                        <i className="material-icons">person</i>
                        <Translate id="listaKorisnika">Lista Korisnika</Translate>
                        {/* <p>Lista korisnika</p> */}
                    </NavLink>
                </li>

                <li className="nav-item ">
                    <NavLink to="/dodajKorisnika" className="nav-link" activeStyle={{ 'backgroundColor': '#9c27b0', 'color':'white','fontWeight':'bold' }}>
                        <i className="material-icons">person_add</i>
                        <Translate id="dodajKorisnika">Lista Korisnika</Translate>
                        {/* <p>Dodaj korisnika</p> */}
                    </NavLink>
                </li>

                <li className="nav-item ">
                    <Select 
                        onChange={this.onChangeLanguage}
                        options={languageInSelect}
                        defaultValue={{label: 'Latinica', value: 'lt'}}
                    />
                </li>
            </ul>
        </div>



    </div>
    )

}

1 Ответ

0 голосов
/ 12 апреля 2019

Это потому, что переменная translations является массивом, и если вы хотите использовать значения из этого массива для вызова какой-либо функции, вы должны деструктурировать ее или отобразить ее, чтобы получить отдельные значения, такие как this.state.translations[0] и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...