UNPKG

1.67 kBJavaScriptView Raw
1/**
2 * @copyright Copyright (c) 2019 Maxim Khorin <maksimovichu@gmail.com>
3 */
4'use strict';
5
6const Base = require('../base/Base');
7
8module.exports = class LocaleFileMap extends Base {
9
10 constructor (config) {
11 super({
12 localeDirectory: 'locale',
13 required: false, // require files
14 ...config
15 });
16 try {
17 this.createDefaultMap();
18 this.createLocaleMap();
19 } catch {}
20 }
21
22 createDefaultMap () {
23 this._default = ClassHelper.spawn(FileMap, {
24 directory: path.join(this.baseDirectory, this.directory),
25 required: this.required
26 });
27 }
28
29 createLocaleMap () {
30 this._locales = {};
31 const localePath = path.join(this.baseDirectory, this.localeDirectory);
32 for (const language of fs.readdirSync(localePath)) {
33 const directory = path.join(localePath, language, this.directory);
34 if (fs.lstatSync(directory).isDirectory()) {
35 const fileMap = ClassHelper.spawn(FileMap, {directory});
36 if (!fileMap.isEmpty()) {
37 this._locales[language] = fileMap;
38 }
39 }
40 }
41 }
42
43 get (name, language) {
44 return this._locales[language] && this._locales[language].get(name) || this._default.get(name);
45 }
46
47 isEmpty () {
48 return this._default.isEmpty() && Object.values(this._locales).length === 0;
49 }
50};
51
52const fs = require('fs');
53const path = require('path');
54const ClassHelper = require('../helper/ClassHelper');
55const FileMap = require('../base/FileMap');