src/defaults.js
export function get() {
return {
debug: false,
initImmediate: true,
ns: ['translation'],
defaultNS: ['translation'],
fallbackLng: ['dev'],
fallbackNS: false, // string or array of namespaces
supportedLngs: false, // array with supported languages
nonExplicitSupportedLngs: false,
load: 'all', // | currentOnly | languageOnly
preload: false, // array with preload languages
simplifyPluralSuffix: true,
keySeparator: '.',
nsSeparator: ':',
pluralSeparator: '_',
contextSeparator: '_',
partialBundledLanguages: false, // allow bundling certain languages that are not remotely fetched
saveMissing: false, // enable to send missing values
updateMissing: false, // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth)
saveMissingTo: 'fallback', // 'current' || 'all'
saveMissingPlurals: true, // will save all forms not only singular key
missingKeyHandler: false, // function(lng, ns, key, fallbackValue) -> override if prefer on handling
missingInterpolationHandler: false, // function(str, match)
postProcess: false, // string or array of postProcessor names
postProcessPassResolved: false, // pass resolved object into 'options.i18nResolved' for postprocessor
returnNull: false, // allows null value as valid translation
returnEmptyString: true, // allows empty string value as valid translation
returnObjects: false,
joinArrays: false, // or string to join array
returnedObjectHandler: false, // function(key, value, options) triggered if key returns object but returnObjects is set to false
parseMissingKeyHandler: false, // function(key) parsed a key that was not found in t() before returning
appendNamespaceToMissingKey: false,
appendNamespaceToCIMode: false,
overloadTranslationOptionHandler: function handle(args) {
let ret = {};
if (typeof args[1] === 'object') ret = args[1];
if (typeof args[1] === 'string') ret.defaultValue = args[1];
if (typeof args[2] === 'string') ret.tDescription = args[2];
if (typeof args[2] === 'object' || typeof args[3] === 'object') {
const options = args[3] || args[2];
Object.keys(options).forEach((key) => {
ret[key] = options[key];
});
}
return ret;
},
interpolation: {
escapeValue: true,
/** @type {import('i18next').FormatFunction} */
format: (value) => value,
prefix: '{{',
suffix: '}}',
formatSeparator: ',',
// prefixEscaped: '{{',
// suffixEscaped: '}}',
// unescapeSuffix: '',
unescapePrefix: '-',
nestingPrefix: '$t(',
nestingSuffix: ')',
nestingOptionsSeparator: ',',
// nestingPrefixEscaped: '$t(',
// nestingSuffixEscaped: ')',
// defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data
maxReplaces: 1000, // max replaces to prevent endless loop
skipOnVariables: true,
},
};
}
/* eslint no-param-reassign: 0 */
export function transformOptions(options) {
// create namespace object if namespace is passed in as string
if (typeof options.ns === 'string') options.ns = [options.ns];
if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];
if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];
// extend supportedLngs with cimode
if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {
options.supportedLngs = options.supportedLngs.concat(['cimode']);
}
return options;
}