Я создаю загрузчик для @ ngx-translate , который загружает несколько файлов перевода JSON из каталога на основе выбранного языка.
В настоящее время я загружаю файлы с помощью файла index.json
, который содержит массив с именами и расширениями для файлов перевода для этого языка.
Структура файлов перевода следующая:
- assets
- i18n
- index.json <-- Contains an array of translation file names
- en_US
- home.json
- header.json
- de_DE
- home.json
- header.json
Пример index.json
выглядит следующим образом:
[
"home.json",
"header.json"
]
Так как Angular HttpClientModule
не может загрузить содержимое каталога или имена файлов в каталоге (он может загружать только отдельные файлы json) Мне нужно определить имена в index.json
.
Это также означает, что мне нужно сначалазагрузите index.json, а затем загрузите все остальные файлы в каталоге.
В коде это означает следующее:
- Загрузить index.json
- Цикл по массиву имен файлов
- Загрузить каждый файл вотдельный запрос
- Когда все закончено, объедините все содержимое файла в один объект
Что я пробовал
public getTranslation(language: string): Observable<any> {
return this.getIndexFile(language)
.pipe(
map((fileNames: string[]) => {
const promises = [];
for (const name of fileNames) {
const path = Translation.replaceUrlPlaceholder(this.path, language);
promises.push(this.http.get(path + '/' + name + '.json').toPromise());
}
return Promise.all(promises);
}),
);
}
Итак, я попробовал это с обещаниями, но это, очевидно, не работает (так как наблюдаемое должно быть возвращено).Кроме того, решение, описанное здесь , не работает для меня, так как мне нужно динамически создать неограниченное количество наблюдаемых и ждать их завершения, прежде чем я смогу начать на шаге 4. (объединить все файлы).
Каким должен быть правильный способ сделать это?
- Угловой
7.1.0
- RxJS
6.3.3
- @ ngx-translate / core
11.0.1
Обновление
Stackblitz здесь: Объединение наблюдаемых