Add internationalization support with astro-i18next integration
- Implemented astro-i18next for multi-language support, including English, Dutch, and Italian. - Configured default locale and language fallback settings. - Defined routes for localized content in the configuration. - Updated package.json and package-lock.json to include new dependencies for i18next and related plugins.
This commit is contained in:
200
node_modules/i18next-fs-backend/cjs/index.js
generated
vendored
Normal file
200
node_modules/i18next-fs-backend/cjs/index.js
generated
vendored
Normal file
@@ -0,0 +1,200 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
var _utils = require("./utils.js");
|
||||
var _readFile = require("./readFile.js");
|
||||
var _writeFile2 = require("./writeFile.js");
|
||||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
||||
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
||||
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
||||
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
||||
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
||||
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
||||
var getDefaults = function getDefaults() {
|
||||
return {
|
||||
loadPath: '/locales/{{lng}}/{{ns}}.json',
|
||||
addPath: '/locales/{{lng}}/{{ns}}.missing.json',
|
||||
ident: 2,
|
||||
parse: JSON.parse,
|
||||
stringify: JSON.stringify
|
||||
};
|
||||
};
|
||||
var Backend = function () {
|
||||
function Backend(services) {
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||
_classCallCheck(this, Backend);
|
||||
this.services = services;
|
||||
this.options = options;
|
||||
this.allOptions = allOptions;
|
||||
this.type = 'backend';
|
||||
this.init(services, options, allOptions);
|
||||
}
|
||||
return _createClass(Backend, [{
|
||||
key: "init",
|
||||
value: function init(services) {
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||
this.services = services;
|
||||
this.options = (0, _utils.defaults)(options, this.options || {}, getDefaults());
|
||||
this.allOptions = allOptions;
|
||||
this.queuedWrites = {};
|
||||
this.debouncedWrite = (0, _utils.debounce)(this.write, 250);
|
||||
}
|
||||
}, {
|
||||
key: "read",
|
||||
value: function read(language, namespace, callback) {
|
||||
var _this = this;
|
||||
var loadPath = this.options.loadPath;
|
||||
if (typeof this.options.loadPath === 'function') {
|
||||
loadPath = this.options.loadPath(language, namespace);
|
||||
}
|
||||
var filename = this.services.interpolator.interpolate(loadPath, {
|
||||
lng: language,
|
||||
ns: namespace
|
||||
});
|
||||
if (this.allOptions.initAsync === false || this.allOptions.initImmediate === false) {
|
||||
try {
|
||||
var _readFileSync = (0, _readFile.readFileSync)(filename, this.options),
|
||||
data = _readFileSync.data,
|
||||
stat = _readFileSync.stat;
|
||||
var timestamp = stat && stat.mtime && stat.mtime.getTime();
|
||||
if (this.options.expirationTime && timestamp && timestamp + this.options.expirationTime < Date.now()) {
|
||||
this.removeFile(language, namespace);
|
||||
return callback(new Error('File expired!'), false);
|
||||
}
|
||||
callback(null, data, timestamp);
|
||||
} catch (err) {
|
||||
callback(err, false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
(0, _readFile.readFile)(filename, this.options).then(function (_ref) {
|
||||
var data = _ref.data,
|
||||
stat = _ref.stat;
|
||||
var timestamp = stat && stat.mtime && stat.mtime.getTime();
|
||||
if (_this.options.expirationTime && timestamp && timestamp + _this.options.expirationTime < Date.now()) {
|
||||
_this.removeFile(language, namespace);
|
||||
return callback(new Error('File expired!'), false);
|
||||
}
|
||||
callback(null, data, timestamp);
|
||||
}).catch(function (err) {
|
||||
return callback(err, false);
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "create",
|
||||
value: function create(languages, namespace, key, fallbackValue, callback) {
|
||||
var _this2 = this;
|
||||
if (typeof callback !== 'function') callback = function callback() {};
|
||||
if (typeof languages === 'string') languages = [languages];
|
||||
var todo = languages.length;
|
||||
var done = function done() {
|
||||
if (! --todo) callback();
|
||||
};
|
||||
languages.forEach(function (lng) {
|
||||
_this2.queue.call(_this2, lng, namespace, key, fallbackValue, done);
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "save",
|
||||
value: function save(language, namespace, data, callback) {
|
||||
var _this3 = this;
|
||||
if (!callback) callback = function callback() {};
|
||||
var keys = Object.keys(data);
|
||||
var todo = keys.length;
|
||||
var done = function done() {
|
||||
if (! --todo) callback();
|
||||
};
|
||||
keys.forEach(function (key) {
|
||||
_this3.queue.call(_this3, language, namespace, key, data[key], done);
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "removeFile",
|
||||
value: function removeFile(language, namespace) {
|
||||
var addPath = this.options.addPath;
|
||||
if (typeof this.options.addPath === 'function') {
|
||||
addPath = this.options.addPath(language, namespace);
|
||||
}
|
||||
var filename = this.services.interpolator.interpolate(addPath, {
|
||||
lng: language,
|
||||
ns: namespace
|
||||
});
|
||||
(0, _writeFile2.removeFile)(filename, this.options).then(function () {}).catch(function () {});
|
||||
}
|
||||
}, {
|
||||
key: "write",
|
||||
value: function write() {
|
||||
for (var lng in this.queuedWrites) {
|
||||
var namespaces = this.queuedWrites[lng];
|
||||
if (lng !== 'locks') {
|
||||
for (var ns in namespaces) {
|
||||
this.writeFile(lng, ns);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: "writeFile",
|
||||
value: function writeFile(lng, namespace) {
|
||||
var _this4 = this;
|
||||
var lock = (0, _utils.getPath)(this.queuedWrites, ['locks', lng, namespace]);
|
||||
if (lock) return;
|
||||
var addPath = this.options.addPath;
|
||||
if (typeof this.options.addPath === 'function') {
|
||||
addPath = this.options.addPath(lng, namespace);
|
||||
}
|
||||
var filename = this.services.interpolator.interpolate(addPath, {
|
||||
lng: lng,
|
||||
ns: namespace
|
||||
});
|
||||
var missings = (0, _utils.getPath)(this.queuedWrites, [lng, namespace]);
|
||||
(0, _utils.setPath)(this.queuedWrites, [lng, namespace], []);
|
||||
if (missings.length) {
|
||||
(0, _utils.setPath)(this.queuedWrites, ['locks', lng, namespace], true);
|
||||
var proceed = function proceed(_ref2) {
|
||||
var data = _ref2.data;
|
||||
missings.forEach(function (missing) {
|
||||
var path = _this4.allOptions.keySeparator === false ? [missing.key] : missing.key.split(_this4.allOptions.keySeparator || '.');
|
||||
try {
|
||||
(0, _utils.setPath)(data, path, missing.fallbackValue);
|
||||
} catch (e) {
|
||||
if (path.length < 2 || !e.message || e.message.indexOf('Cannot create property') < 0) throw e;
|
||||
(0, _utils.setPath)(data, [missing.key], missing.fallbackValue);
|
||||
}
|
||||
});
|
||||
var proceedWrite = function proceedWrite() {
|
||||
(0, _utils.setPath)(_this4.queuedWrites, ['locks', lng, namespace], false);
|
||||
missings.forEach(function (missing) {
|
||||
if (missing.callback) missing.callback();
|
||||
});
|
||||
_this4.debouncedWrite();
|
||||
};
|
||||
(0, _writeFile2.writeFile)(filename, data, _this4.options).then(proceedWrite).catch(proceedWrite);
|
||||
};
|
||||
(0, _readFile.readFile)(filename, this.options).then(proceed).catch(function () {
|
||||
return proceed({
|
||||
data: {}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: "queue",
|
||||
value: function queue(lng, namespace, key, fallbackValue, callback) {
|
||||
(0, _utils.pushPath)(this.queuedWrites, [lng, namespace], {
|
||||
key: key,
|
||||
fallbackValue: fallbackValue || '',
|
||||
callback: callback
|
||||
});
|
||||
this.debouncedWrite();
|
||||
}
|
||||
}]);
|
||||
}();
|
||||
Backend.type = 'backend';
|
||||
var _default = exports.default = Backend;
|
||||
module.exports = exports.default;
|
Reference in New Issue
Block a user