Как использовать i18next для загрузки ресурса из PHP? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть следующий PHP-скрипт для загрузки ресурса для перевода i18следующий

<?php
$sql = 'SELECT * FROM translations';
...
header('Content-Type: application/json');
echo json_encode($translations);
?>

Но как я могу использовать его с моим приложением реагировать на js?Первоначально я загружаю переводы с помощью json, который находится на стороне клиента, как это было сделано в официальном руководстве i18next.

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';

import translations from './translations.json';

const resources = translations;

i18n.use(initReactI18next).init({ resources, lng: 'zh', keySeparator: false, interpolation: { escapeValue: false } });

Я хочу загрузить с помощью PHP на стороне сервера.Но следующее не сработает:

import i18n from 'i18next';
import xhr from 'i18next-xhr-backend';
import { initReactI18next } from 'react-i18next';
import axios from 'axios';

function loadCurrent(url, options, callback, data) {
    axios.get(url).then((res) => {
       callback(res.data, { status: res.status });
    });
}

const i18nextOpt = {
 backend: {
     loadPath: 'http://localhost/translation.php',
     parse: function(data) { return JSON.parse(data); },
     ajax: loadCurrent
 },  
 getAsync: false
 };

 i18n.use(xhr).init(i18nextOpt);

Что я должен изменить в своем скрипте React?Спасибо.

1 Ответ

0 голосов
/ 25 марта 2019

хитрость:

добавляя ресурсы с импортом, вы имели такую ​​структуру, как:

{ lng: { ns: { key: value } } }

в xhr каждая пара lng-namespace загружается индивидуально ... поэтому файл должен быть

{ key: value }

но в lng / ns запрашивается -> поэтому loadpath выглядит примерно так:

http://localhost/{{lng}}/{{ns}}.php

https://www.i18next.com/how-to/add-or-load-translations

нет необходимости в axios, просто используйте xhr-backend

...