UNPKG

6.24 kBJavaScriptView Raw
1/** Copyright (c) 2018 Uber Technologies, Inc.
2 *
3 * This source code is licensed under the MIT license found in the
4 * LICENSE file in the root directory of this source tree.
5 *
6 *
7 */
8import { Locale, Locales } from 'locale';
9import fs from 'fs';
10import path from 'path';
11import { memoize } from 'fusion-core';
12
13const defaultResolveLocales = ctx => ctx.headers['accept-language'];
14
15const loader = (resolveLocales = defaultResolveLocales) => {
16 const readDir = root => {
17 try {
18 return fs.readdirSync(root);
19 } catch (e) {
20 return [];
21 }
22 };
23
24 const root = './translations';
25 const locales = readDir(root).filter(p => p.match(/json$/)).map(p => p.replace(/\.json$/, ''));
26 const data = locales.reduce((memo, locale) => {
27 const parsedLocale = new Locale(locale);
28 memo[parsedLocale.normalized] = JSON.parse(fs.readFileSync(path.join(root, locale + '.json'), 'utf8'));
29 return memo;
30 }, {});
31 const supportedLocales = new Locales(locales);
32 return {
33 from: memoize(ctx => {
34 const expectedLocales = new Locales(resolveLocales(ctx));
35 const locale = expectedLocales.best(supportedLocales);
36 const translations = data[locale.normalized];
37 return {
38 translations,
39 locale
40 };
41 })
42 };
43};
44
45export default true ? loader : null;
46//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvYWRlci5qcyJdLCJuYW1lcyI6WyJMb2NhbGUiLCJMb2NhbGVzIiwiZnMiLCJwYXRoIiwibWVtb2l6ZSIsImRlZmF1bHRSZXNvbHZlTG9jYWxlcyIsImN0eCIsImhlYWRlcnMiLCJsb2FkZXIiLCJyZXNvbHZlTG9jYWxlcyIsInJlYWREaXIiLCJyb290IiwicmVhZGRpclN5bmMiLCJlIiwibG9jYWxlcyIsImZpbHRlciIsInAiLCJtYXRjaCIsIm1hcCIsInJlcGxhY2UiLCJkYXRhIiwicmVkdWNlIiwibWVtbyIsImxvY2FsZSIsInBhcnNlZExvY2FsZSIsIm5vcm1hbGl6ZWQiLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiLCJqb2luIiwic3VwcG9ydGVkTG9jYWxlcyIsImZyb20iLCJleHBlY3RlZExvY2FsZXMiLCJiZXN0IiwidHJhbnNsYXRpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztBQVFBLFNBQVFBLE1BQVIsRUFBZ0JDLE9BQWhCLFFBQThCLFFBQTlCO0FBQ0EsT0FBT0MsRUFBUCxNQUFlLElBQWY7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLE1BQWpCO0FBRUEsU0FBUUMsT0FBUixRQUFzQixhQUF0Qjs7QUFlQSxNQUFNQyxxQkFBeUMsR0FBR0MsR0FBRyxJQUNuREEsR0FBRyxDQUFDQyxPQUFKLENBQVksaUJBQVosQ0FERjs7QUFHQSxNQUFNQyxNQUF5QixHQUFHLENBQUNDLGNBQWMsR0FBR0oscUJBQWxCLEtBQTRDO0FBQzVFLFFBQU1LLE9BQU8sR0FBR0MsSUFBSSxJQUFJO0FBQ3RCLFFBQUk7QUFDRixhQUFPVCxFQUFFLENBQUNVLFdBQUgsQ0FBZUQsSUFBZixDQUFQO0FBQ0QsS0FGRCxDQUVFLE9BQU9FLENBQVAsRUFBVTtBQUNWLGFBQU8sRUFBUDtBQUNEO0FBQ0YsR0FORDs7QUFPQSxRQUFNRixJQUFJLEdBQUcsZ0JBQWI7QUFDQSxRQUFNRyxPQUFPLEdBQUdKLE9BQU8sQ0FBQ0MsSUFBRCxDQUFQLENBQ2JJLE1BRGEsQ0FDTkMsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLEtBQUYsQ0FBUSxPQUFSLENBREMsRUFFYkMsR0FGYSxDQUVURixDQUFDLElBQUlBLENBQUMsQ0FBQ0csT0FBRixDQUFVLFNBQVYsRUFBcUIsRUFBckIsQ0FGSSxDQUFoQjtBQUdBLFFBQU1DLElBQUksR0FBR04sT0FBTyxDQUFDTyxNQUFSLENBQWUsQ0FBQ0MsSUFBRCxFQUFPQyxNQUFQLEtBQWtCO0FBQzVDLFVBQU1DLFlBQVksR0FBRyxJQUFJeEIsTUFBSixDQUFXdUIsTUFBWCxDQUFyQjtBQUNBRCxJQUFBQSxJQUFJLENBQUNFLFlBQVksQ0FBQ0MsVUFBZCxDQUFKLEdBQWdDQyxJQUFJLENBQUNDLEtBQUwsQ0FDOUJ6QixFQUFFLENBQUMwQixZQUFILENBQWdCekIsSUFBSSxDQUFDMEIsSUFBTCxDQUFVbEIsSUFBVixFQUFnQlksTUFBTSxHQUFHLE9BQXpCLENBQWhCLEVBQW1ELE1BQW5ELENBRDhCLENBQWhDO0FBR0EsV0FBT0QsSUFBUDtBQUNELEdBTlksRUFNVixFQU5VLENBQWI7QUFPQSxRQUFNUSxnQkFBZ0IsR0FBRyxJQUFJN0IsT0FBSixDQUFZYSxPQUFaLENBQXpCO0FBRUEsU0FBTztBQUNMaUIsSUFBQUEsSUFBSSxFQUFFM0IsT0FBTyxDQUFDRSxHQUFHLElBQUk7QUFDbkIsWUFBTTBCLGVBQWUsR0FBRyxJQUFJL0IsT0FBSixDQUFZUSxjQUFjLENBQUNILEdBQUQsQ0FBMUIsQ0FBeEI7QUFDQSxZQUFNaUIsTUFBTSxHQUFHUyxlQUFlLENBQUNDLElBQWhCLENBQXFCSCxnQkFBckIsQ0FBZjtBQUNBLFlBQU1JLFlBQW9DLEdBQUdkLElBQUksQ0FBQ0csTUFBTSxDQUFDRSxVQUFSLENBQWpEO0FBQ0EsYUFBTztBQUFDUyxRQUFBQSxZQUFEO0FBQWVYLFFBQUFBO0FBQWYsT0FBUDtBQUNELEtBTFk7QUFEUixHQUFQO0FBUUQsQ0E3QkQ7O0FBK0JBLGVBQWtCLE9BQVdmLE1BQVgsR0FBb0IsSUFBdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29weXJpZ2h0IChjKSAyMDE4IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQGZsb3dcbiAqL1xuXG5pbXBvcnQge0xvY2FsZSwgTG9jYWxlc30gZnJvbSAnbG9jYWxlJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHttZW1vaXplfSBmcm9tICdmdXNpb24tY29yZSc7XG5pbXBvcnQgdHlwZSB7Q29udGV4dH0gZnJvbSAnZnVzaW9uLWNvcmUnO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNsYXRpb25zT2JqZWN0VHlwZX0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIEkxOG5Mb2FkZXJUeXBlID0ge1xuICBmcm9tOiAoXG4gICAgY3R4OiBDb250ZXh0XG4gICkgPT4ge2xvY2FsZTogc3RyaW5nIHwgTG9jYWxlLCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uc09iamVjdFR5cGV9LFxufTtcbmV4cG9ydCB0eXBlIExvY2FsZVJlc29sdmVyVHlwZSA9IChjdHg6IENvbnRleHQpID0+IHN0cmluZztcbmV4cG9ydCB0eXBlIExvYWRlckZhY3RvcnlUeXBlID0gKFxuICByZXNvbHZlTG9jYWxlcz86IExvY2FsZVJlc29sdmVyVHlwZVxuKSA9PiBJMThuTG9hZGVyVHlwZTtcblxuY29uc3QgZGVmYXVsdFJlc29sdmVMb2NhbGVzOiBMb2NhbGVSZXNvbHZlclR5cGUgPSBjdHggPT5cbiAgY3R4LmhlYWRlcnNbJ2FjY2VwdC1sYW5ndWFnZSddO1xuXG5jb25zdCBsb2FkZXI6IExvYWRlckZhY3RvcnlUeXBlID0gKHJlc29sdmVMb2NhbGVzID0gZGVmYXVsdFJlc29sdmVMb2NhbGVzKSA9PiB7XG4gIGNvbnN0IHJlYWREaXIgPSByb290ID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZzLnJlYWRkaXJTeW5jKHJvb3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJvb3QgPSAnLi90cmFuc2xhdGlvbnMnO1xuICBjb25zdCBsb2NhbGVzID0gcmVhZERpcihyb290KVxuICAgIC5maWx0ZXIocCA9PiBwLm1hdGNoKC9qc29uJC8pKVxuICAgIC5tYXAocCA9PiBwLnJlcGxhY2UoL1xcLmpzb24kLywgJycpKTtcbiAgY29uc3QgZGF0YSA9IGxvY2FsZXMucmVkdWNlKChtZW1vLCBsb2NhbGUpID0+IHtcbiAgICBjb25zdCBwYXJzZWRMb2NhbGUgPSBuZXcgTG9jYWxlKGxvY2FsZSk7XG4gICAgbWVtb1twYXJzZWRMb2NhbGUubm9ybWFsaXplZF0gPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihyb290LCBsb2NhbGUgKyAnLmpzb24nKSwgJ3V0ZjgnKVxuICAgICk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgY29uc3Qgc3VwcG9ydGVkTG9jYWxlcyA9IG5ldyBMb2NhbGVzKGxvY2FsZXMpO1xuXG4gIHJldHVybiB7XG4gICAgZnJvbTogbWVtb2l6ZShjdHggPT4ge1xuICAgICAgY29uc3QgZXhwZWN0ZWRMb2NhbGVzID0gbmV3IExvY2FsZXMocmVzb2x2ZUxvY2FsZXMoY3R4KSk7XG4gICAgICBjb25zdCBsb2NhbGUgPSBleHBlY3RlZExvY2FsZXMuYmVzdChzdXBwb3J0ZWRMb2NhbGVzKTtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zT2JqZWN0VHlwZSA9IGRhdGFbbG9jYWxlLm5vcm1hbGl6ZWRdO1xuICAgICAgcmV0dXJuIHt0cmFuc2xhdGlvbnMsIGxvY2FsZX07XG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoKChfX05PREVfXyA/IGxvYWRlciA6IG51bGwpOiBhbnkpOiB0eXBlb2YgbG9hZGVyKTtcbiJdfQ==
\No newline at end of file