Socket
Socket
Sign inDemoInstall

lingui-i18n

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lingui-i18n - npm Package Compare versions

Comparing version 0.7.0-3 to 1.0.0-1

lib/context.js.flow

300

lib/index.es.js

@@ -1,2 +0,1 @@

import _Array$includes from 'babel-runtime/core-js/array/includes';
import _Object$assign from 'babel-runtime/core-js/object/assign';

@@ -9,144 +8,6 @@ import _extends from 'babel-runtime/helpers/extends';

import { date, number } from 'lingui-formats';
import { parse } from 'messageformat-parser';
import MakePlural from 'make-plural/make-plural';
var flatten = function flatten(arrays) {
return [].concat.apply([], arrays);
};
var zip = function zip(a, b) {
return a.map(function (item, index) {
return [item, b[index]];
});
};
var t = function t(i18n) {
return function (strings) {
for (var _len = arguments.length, values = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
values[_key - 1] = arguments[_key];
}
// used as a function
if (!Array.isArray(strings)) {
var id = strings.id,
params = strings.params,
formats = strings.formats;
return i18n.translate({ id: id, params: params, formats: formats });
}
// used as a template tag
return flatten(zip(strings, values)).join('');
};
};
var _plural = function _plural(type) {
return function (i18n) {
return function (_ref) {
var value = _ref.value,
_ref$offset = _ref.offset,
offset = _ref$offset === undefined ? 0 : _ref$offset,
other = _ref.other,
pluralForms = _objectWithoutProperties(_ref, ['value', 'offset', 'other']);
var translation = pluralForms[(value - offset).toString()] || // exact match
pluralForms[i18n.pluralForm(value - offset, type)] || // plural form
other;
return translation.replace('#', value.toString());
};
};
};
var plural = _plural('cardinal');
var selectOrdinal = _plural('ordinal');
function select(_ref2) {
var value = _ref2.value,
other = _ref2.other,
selectForms = _objectWithoutProperties(_ref2, ['value', 'other']);
return selectForms[value] || other;
}
// $FlowIgnore: Missing annotation
MakePlural.load(
// $FlowIgnore: Missing annotation - only json
require('make-plural/data/plurals.json'),
// $FlowIgnore: Missing annotation - only json
require('make-plural/data/ordinals.json'));
var isString$1 = function isString(s) {
return typeof s === 'string';
};
var loadLanguageData = function loadLanguageData(language) {
var plurals = new MakePlural(language, {
cardinals: true,
ordinals: true
});
return { plurals: plurals };
};
var compileMessage = function compileMessage(message) {
return processTokens(parse(message));
};
// [Tokens] -> (CTX -> String)
function processTokens(tokens) {
var octothorpe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (!tokens.filter(function (token) {
return !isString$1(token);
}).length) {
return function () {
return tokens.join('').trim();
};
}
return function (ctx) {
return tokens.map(function (token) {
if (isString$1(token)) {
return token;
// # in plural case
} else if (token.type === 'octothorpe') {
var name = octothorpe.name,
_octothorpe$offset = octothorpe.offset,
_offset = _octothorpe$offset === undefined ? 0 : _octothorpe$offset;
return ctx(name) - _offset;
// simple argument
} else if (token.type === 'argument') {
return ctx(token.arg);
// argument with custom format (date, number)
} else if (token.type === 'function') {
return ctx(token.arg, token.key, token.params[0]);
}
var offset = token.offset ? parseInt(token.offset) : undefined;
// complex argument with cases
var formatProps = {};
token.cases.forEach(function (item) {
formatProps[item.key] = processTokens(item.tokens, {
name: token.arg,
offset: offset
});
});
return ctx(token.arg, token.type, _extends({
offset: offset
}, formatProps));
});
};
}
var isString = function isString(s) {
return typeof s === 'string';
};
var isFunction = function isFunction(f) {

@@ -158,7 +19,7 @@ return typeof f === 'function';

var languageData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var formatStyles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var plurals = languageData.plurals;
var style = function style(format) {
return isString(format) ? formatStyles[format] || { style: format } : format;
return isString(format) ? formats[format] || { style: format } : format;
};

@@ -213,41 +74,2 @@

// Message -> (Params -> String)
/**
* Compile message in given language and provide language data (e.g: plural)
* with formatStyles. The result is a function which takes parameters and return
* formatted message.
*
* @param language - Language of message
* @param message - Message to parse and compile
* @param languageData - Language data (e.g: plurals)
* @param formatStyles - Custom format styles
*/
function compile(language, message, languageData, formatStyles) {
var formattedMessage = message;
if (isString(message)) {
if (process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line spaced-comment
formattedMessage = /*#__PURE__*/compileMessage(message);
// eslint-disable-next-line spaced-comment
languageData = /*#__PURE__*/loadLanguageData(language);
} else {
// constant message
return function (params) {
return message;
};
}
}
return function () {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
// $FlowIgnore: formattedMessage is always a function
var message = formattedMessage(context({
language: language, params: params, formatStyles: formatStyles, languageData: languageData
}));
return Array.isArray(message) ? message.join('').trim() : message;
};
}
// Params -> CTX

@@ -261,3 +83,3 @@ /**

* @param languageData - Language data (e.g: plurals)
* @param formatStyles - Custom format styles
* @param formats - Custom format styles
* @returns {function(string, string, any)}

@@ -268,10 +90,10 @@ */

params = _ref3.params,
formatStyles = _ref3.formatStyles,
formats = _ref3.formats,
languageData = _ref3.languageData;
var formats = defaultFormats(language, languageData, formatStyles);
var formatters = defaultFormats(language, languageData, formats);
var ctx = function ctx(name, type, format) {
var value = params[name];
var formatted = formats[type](value, format);
var formatted = formatters[type](value, format);
var message = isFunction(formatted) ? formatted(ctx) : formatted;

@@ -284,2 +106,59 @@ return Array.isArray(message) ? message.join('') : message;

function interpolate(translation, language, languageData) {
return function (params) {
var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var message = translation(context({
language: language, languageData: languageData, formats: formats, params: params
}));
return Array.isArray(message) ? message.join('').trim() : message;
};
}
var flatten = function flatten(arrays) {
return [].concat.apply([], arrays);
};
var zip = function zip(a, b) {
return a.map(function (item, index) {
return [item, b[index]];
});
};
var t = function t(strings) {
for (var _len = arguments.length, values = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
values[_key - 1] = arguments[_key];
}
return flatten(zip(strings, values)).join('');
};
var _plural = function _plural(type) {
return function (i18n) {
return function (_ref) {
var value = _ref.value,
_ref$offset = _ref.offset,
offset = _ref$offset === undefined ? 0 : _ref$offset,
other = _ref.other,
pluralForms = _objectWithoutProperties(_ref, ['value', 'offset', 'other']);
var translation = pluralForms[(value - offset).toString()] || // exact match
pluralForms[i18n.pluralForm(value - offset, type)] || // plural form
other;
return translation.replace('#', value.toString());
};
};
};
var plural = _plural('cardinal');
var selectOrdinal = _plural('ordinal');
function select(_ref2) {
var value = _ref2.value,
other = _ref2.other,
selectForms = _objectWithoutProperties(_ref2, ['value', 'other']);
return selectForms[value] || other;
}
var I18n = function () {

@@ -299,6 +178,8 @@ function I18n(language) {

this.t = t(this);
this.plural = plural(this);
this.select = select;
this.selectOrdinal = selectOrdinal(this);
if (process.env.NODE_ENV !== 'production') {
this.t = t;
this.select = select;
this.plural = plural(this);
this.selectOrdinal = selectOrdinal(this);
}
}

@@ -317,3 +198,13 @@

_Object$assign(_this._messages[language], messages[language] || {});
var compiledMessages = messages[language] || {};
if (process.env.NODE_ENV !== 'production') {
compiledMessages = _Object$keys(compiledMessages).reduce(function (dict, id) {
var msg = compiledMessages[id];
dict[id] = isString(msg) ? _this._dev.compile(msg) : msg;
return dict;
}, {});
}
_Object$assign(_this._messages[language], compiledMessages);
});

@@ -323,3 +214,3 @@ }

key: 'loadLanguageData',
value: function loadLanguageData$$1(languageData) {
value: function loadLanguageData(languageData) {
if (!languageData) return;

@@ -334,4 +225,3 @@ _Object$assign(this._languageData, languageData);

if (process.env.NODE_ENV !== 'production') {
// $FlowIgnore: Array.includes is polyfilled
if (!_Array$includes(this.availableLanguages, language)) {
if (this.availableLanguages.indexOf(language) === -1) {
console.warn('Unknown locale "' + language + '".');

@@ -348,5 +238,8 @@ }

}
// default translate method
}, {
key: 'translate',
value: function translate(_ref) {
key: '_',
value: function _(_ref) {
var id = _ref.id,

@@ -360,10 +253,7 @@ defaults = _ref.defaults,

var translation = this.messages[id] || defaults || id;
return this.compile(translation, formats)(params);
if (typeof translation !== 'function') return translation;
return interpolate(translation, this.language, this.languageData)(params, formats);
}
}, {
key: 'compile',
value: function compile$$1(message, formats) {
return compile(this.language, message, this.languageData, formats);
}
}, {
key: 'pluralForm',

@@ -373,6 +263,10 @@ value: function pluralForm(n) {

var forms = this.languageData.plurals;
return forms(n, pluralType === 'ordinal');
return this.languageData.plurals(n, pluralType === 'ordinal');
}
}, {
key: 'development',
value: function development(config) {
this._dev = config;
}
}, {
key: 'availableLanguages',

@@ -395,3 +289,3 @@ get: function get() {

if (!data) {
return loadLanguageData(this.language);
return this._dev.loadLanguageData(this.language);
}

@@ -398,0 +292,0 @@ }

@@ -7,3 +7,2 @@ 'use strict';

var _Array$includes = _interopDefault(require('babel-runtime/core-js/array/includes'));
var _Object$assign = _interopDefault(require('babel-runtime/core-js/object/assign'));

@@ -16,144 +15,6 @@ var _extends = _interopDefault(require('babel-runtime/helpers/extends'));

var linguiFormats = require('lingui-formats');
var messageformatParser = require('messageformat-parser');
var MakePlural = _interopDefault(require('make-plural/make-plural'));
var flatten = function flatten(arrays) {
return [].concat.apply([], arrays);
};
var zip = function zip(a, b) {
return a.map(function (item, index) {
return [item, b[index]];
});
};
var t = function t(i18n) {
return function (strings) {
for (var _len = arguments.length, values = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
values[_key - 1] = arguments[_key];
}
// used as a function
if (!Array.isArray(strings)) {
var id = strings.id,
params = strings.params,
formats = strings.formats;
return i18n.translate({ id: id, params: params, formats: formats });
}
// used as a template tag
return flatten(zip(strings, values)).join('');
};
};
var _plural = function _plural(type) {
return function (i18n) {
return function (_ref) {
var value = _ref.value,
_ref$offset = _ref.offset,
offset = _ref$offset === undefined ? 0 : _ref$offset,
other = _ref.other,
pluralForms = _objectWithoutProperties(_ref, ['value', 'offset', 'other']);
var translation = pluralForms[(value - offset).toString()] || // exact match
pluralForms[i18n.pluralForm(value - offset, type)] || // plural form
other;
return translation.replace('#', value.toString());
};
};
};
var plural = _plural('cardinal');
var selectOrdinal = _plural('ordinal');
function select(_ref2) {
var value = _ref2.value,
other = _ref2.other,
selectForms = _objectWithoutProperties(_ref2, ['value', 'other']);
return selectForms[value] || other;
}
// $FlowIgnore: Missing annotation
MakePlural.load(
// $FlowIgnore: Missing annotation - only json
require('make-plural/data/plurals.json'),
// $FlowIgnore: Missing annotation - only json
require('make-plural/data/ordinals.json'));
var isString$1 = function isString(s) {
return typeof s === 'string';
};
var loadLanguageData = function loadLanguageData(language) {
var plurals = new MakePlural(language, {
cardinals: true,
ordinals: true
});
return { plurals: plurals };
};
var compileMessage = function compileMessage(message) {
return processTokens(messageformatParser.parse(message));
};
// [Tokens] -> (CTX -> String)
function processTokens(tokens) {
var octothorpe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (!tokens.filter(function (token) {
return !isString$1(token);
}).length) {
return function () {
return tokens.join('').trim();
};
}
return function (ctx) {
return tokens.map(function (token) {
if (isString$1(token)) {
return token;
// # in plural case
} else if (token.type === 'octothorpe') {
var name = octothorpe.name,
_octothorpe$offset = octothorpe.offset,
_offset = _octothorpe$offset === undefined ? 0 : _octothorpe$offset;
return ctx(name) - _offset;
// simple argument
} else if (token.type === 'argument') {
return ctx(token.arg);
// argument with custom format (date, number)
} else if (token.type === 'function') {
return ctx(token.arg, token.key, token.params[0]);
}
var offset = token.offset ? parseInt(token.offset) : undefined;
// complex argument with cases
var formatProps = {};
token.cases.forEach(function (item) {
formatProps[item.key] = processTokens(item.tokens, {
name: token.arg,
offset: offset
});
});
return ctx(token.arg, token.type, _extends({
offset: offset
}, formatProps));
});
};
}
var isString = function isString(s) {
return typeof s === 'string';
};
var isFunction = function isFunction(f) {

@@ -165,7 +26,7 @@ return typeof f === 'function';

var languageData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var formatStyles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var plurals = languageData.plurals;
var style = function style(format) {
return isString(format) ? formatStyles[format] || { style: format } : format;
return isString(format) ? formats[format] || { style: format } : format;
};

@@ -220,41 +81,2 @@

// Message -> (Params -> String)
/**
* Compile message in given language and provide language data (e.g: plural)
* with formatStyles. The result is a function which takes parameters and return
* formatted message.
*
* @param language - Language of message
* @param message - Message to parse and compile
* @param languageData - Language data (e.g: plurals)
* @param formatStyles - Custom format styles
*/
function compile(language, message, languageData, formatStyles) {
var formattedMessage = message;
if (isString(message)) {
if (process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line spaced-comment
formattedMessage = /*#__PURE__*/compileMessage(message);
// eslint-disable-next-line spaced-comment
languageData = /*#__PURE__*/loadLanguageData(language);
} else {
// constant message
return function (params) {
return message;
};
}
}
return function () {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
// $FlowIgnore: formattedMessage is always a function
var message = formattedMessage(context({
language: language, params: params, formatStyles: formatStyles, languageData: languageData
}));
return Array.isArray(message) ? message.join('').trim() : message;
};
}
// Params -> CTX

@@ -268,3 +90,3 @@ /**

* @param languageData - Language data (e.g: plurals)
* @param formatStyles - Custom format styles
* @param formats - Custom format styles
* @returns {function(string, string, any)}

@@ -275,10 +97,10 @@ */

params = _ref3.params,
formatStyles = _ref3.formatStyles,
formats = _ref3.formats,
languageData = _ref3.languageData;
var formats = defaultFormats(language, languageData, formatStyles);
var formatters = defaultFormats(language, languageData, formats);
var ctx = function ctx(name, type, format) {
var value = params[name];
var formatted = formats[type](value, format);
var formatted = formatters[type](value, format);
var message = isFunction(formatted) ? formatted(ctx) : formatted;

@@ -291,2 +113,59 @@ return Array.isArray(message) ? message.join('') : message;

function interpolate(translation, language, languageData) {
return function (params) {
var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var message = translation(context({
language: language, languageData: languageData, formats: formats, params: params
}));
return Array.isArray(message) ? message.join('').trim() : message;
};
}
var flatten = function flatten(arrays) {
return [].concat.apply([], arrays);
};
var zip = function zip(a, b) {
return a.map(function (item, index) {
return [item, b[index]];
});
};
var t = function t(strings) {
for (var _len = arguments.length, values = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
values[_key - 1] = arguments[_key];
}
return flatten(zip(strings, values)).join('');
};
var _plural = function _plural(type) {
return function (i18n) {
return function (_ref) {
var value = _ref.value,
_ref$offset = _ref.offset,
offset = _ref$offset === undefined ? 0 : _ref$offset,
other = _ref.other,
pluralForms = _objectWithoutProperties(_ref, ['value', 'offset', 'other']);
var translation = pluralForms[(value - offset).toString()] || // exact match
pluralForms[i18n.pluralForm(value - offset, type)] || // plural form
other;
return translation.replace('#', value.toString());
};
};
};
var plural = _plural('cardinal');
var selectOrdinal = _plural('ordinal');
function select(_ref2) {
var value = _ref2.value,
other = _ref2.other,
selectForms = _objectWithoutProperties(_ref2, ['value', 'other']);
return selectForms[value] || other;
}
var I18n = function () {

@@ -306,6 +185,8 @@ function I18n(language) {

this.t = t(this);
this.plural = plural(this);
this.select = select;
this.selectOrdinal = selectOrdinal(this);
if (process.env.NODE_ENV !== 'production') {
this.t = t;
this.select = select;
this.plural = plural(this);
this.selectOrdinal = selectOrdinal(this);
}
}

@@ -324,3 +205,13 @@

_Object$assign(_this._messages[language], messages[language] || {});
var compiledMessages = messages[language] || {};
if (process.env.NODE_ENV !== 'production') {
compiledMessages = _Object$keys(compiledMessages).reduce(function (dict, id) {
var msg = compiledMessages[id];
dict[id] = isString(msg) ? _this._dev.compile(msg) : msg;
return dict;
}, {});
}
_Object$assign(_this._messages[language], compiledMessages);
});

@@ -330,3 +221,3 @@ }

key: 'loadLanguageData',
value: function loadLanguageData$$1(languageData) {
value: function loadLanguageData(languageData) {
if (!languageData) return;

@@ -341,4 +232,3 @@ _Object$assign(this._languageData, languageData);

if (process.env.NODE_ENV !== 'production') {
// $FlowIgnore: Array.includes is polyfilled
if (!_Array$includes(this.availableLanguages, language)) {
if (this.availableLanguages.indexOf(language) === -1) {
console.warn('Unknown locale "' + language + '".');

@@ -355,5 +245,8 @@ }

}
// default translate method
}, {
key: 'translate',
value: function translate(_ref) {
key: '_',
value: function _(_ref) {
var id = _ref.id,

@@ -367,10 +260,7 @@ defaults = _ref.defaults,

var translation = this.messages[id] || defaults || id;
return this.compile(translation, formats)(params);
if (typeof translation !== 'function') return translation;
return interpolate(translation, this.language, this.languageData)(params, formats);
}
}, {
key: 'compile',
value: function compile$$1(message, formats) {
return compile(this.language, message, this.languageData, formats);
}
}, {
key: 'pluralForm',

@@ -380,6 +270,10 @@ value: function pluralForm(n) {

var forms = this.languageData.plurals;
return forms(n, pluralType === 'ordinal');
return this.languageData.plurals(n, pluralType === 'ordinal');
}
}, {
key: 'development',
value: function development(config) {
this._dev = config;
}
}, {
key: 'availableLanguages',

@@ -402,3 +296,3 @@ get: function get() {

if (!data) {
return loadLanguageData(this.language);
return this._dev.loadLanguageData(this.language);
}

@@ -405,0 +299,0 @@ }

{
"name": "lingui-i18n",
"version": "0.7.0-3",
"version": "1.0.0-1",
"description": "I18n tools for javascript",

@@ -28,3 +28,3 @@ "main": "lib/index.js",

"babel-runtime": "^6.23.0",
"lingui-formats": "^0.4.0-3",
"lingui-formats": "^1.0.0-1",
"make-plural": "^4.0.1",

@@ -31,0 +31,0 @@ "messageformat-parser": "^1.0.0"

@@ -22,2 +22,5 @@ # lingui-i18n

// Required for development only
i18n.development(require('lingui-i18n/dev'))
// load messages

@@ -24,0 +27,0 @@ i18n.load({

/* @flow */
import { interpolate } from './context'
import { isString } from './essentials'
import t from './t'
import { select, plural, selectOrdinal } from './select'
import compile from './compile'
import { loadLanguageData } from './utils.dev'
type Catalog = {[key: string]: string}
type Catalog = {[key: string]: string | Function}
type Catalogs = {[key: string]: Catalog}

@@ -28,2 +27,4 @@

_dev: Object
t: Function

@@ -42,6 +43,8 @@ plural: Function

this.t = t(this)
this.plural = plural(this)
this.select = select
this.selectOrdinal = selectOrdinal(this)
if (process.env.NODE_ENV !== 'production') {
this.t = t
this.select = select
this.plural = plural(this)
this.selectOrdinal = selectOrdinal(this)
}
}

@@ -63,3 +66,3 @@

if (!data) {
return loadLanguageData(this.language)
return this._dev.loadLanguageData(this.language)
}

@@ -82,5 +85,15 @@ }

let compiledMessages = messages[language] || {}
if (process.env.NODE_ENV !== 'production') {
compiledMessages = Object.keys(compiledMessages).reduce((dict, id) => {
const msg = compiledMessages[id]
dict[id] = isString(msg) ? this._dev.compile(msg) : msg
return dict
}, {})
}
Object.assign(
this._messages[language],
messages[language] || {}
compiledMessages
)

@@ -99,4 +112,3 @@ })

if (process.env.NODE_ENV !== 'production') {
// $FlowIgnore: Array.includes is polyfilled
if (!Array.includes(this.availableLanguages, language)) {
if (this.availableLanguages.indexOf(language) === -1) {
console.warn(`Unknown locale "${language}".`)

@@ -113,15 +125,17 @@ }

translate ({ id, defaults, params = {}, formats = {} }: Message) {
// default translate method
_ ({ id, defaults, params = {}, formats = {} }: Message) {
const translation = this.messages[id] || defaults || id
return this.compile(translation, formats)(params)
}
compile (message: string, formats?: Object) {
return compile(this.language, message, this.languageData, formats)
if (typeof translation !== 'function') return translation
return interpolate(translation, this.language, this.languageData)(params, formats)
}
pluralForm (n: number, pluralType?: 'cardinal' | 'ordinal' = 'cardinal'): string {
const forms = this.languageData.plurals
return forms(n, pluralType === 'ordinal')
return this.languageData.plurals(n, pluralType === 'ordinal')
}
development(config: Object) {
this._dev = config
}
}

@@ -128,0 +142,0 @@

/* @flow */
import { I18n, default as exportedI18n } from '.'
import { mockConsole, mockEnv } from './mocks'
import linguiDev from './dev'

@@ -33,2 +34,3 @@ describe('I18n', function () {

const i18n = new I18n()
i18n.development(linguiDev)
expect(i18n.messages).toEqual({})

@@ -77,2 +79,3 @@

const i18n = new I18n()
i18n.development(linguiDev)
const messages = {

@@ -112,2 +115,3 @@ 'Hello': 'Salut'

const i18n = new I18n()
i18n.development(linguiDev)
const messages = {

@@ -124,13 +128,14 @@ en: {

i18n.activate('en')
expect(i18n.translate({ id: 'Hello' })).toEqual('Hello')
expect(i18n._({ id: 'Hello' })).toEqual('Hello')
// change language locally
expect(i18n.use('fr').translate({ id: 'Hello' })).toEqual('Salut')
expect(i18n.use('fr')._({ id: 'Hello' })).toEqual('Salut')
// global language hasn't changed
expect(i18n.translate({ id: 'Hello' })).toEqual('Hello')
expect(i18n._({ id: 'Hello' })).toEqual('Hello')
})
it('.translate should format message from catalog', function () {
it('._ should format message from catalog', function () {
const i18n = new I18n()
i18n.development(linguiDev)
const messages = {

@@ -144,28 +149,17 @@ 'Hello': 'Salut',

expect(i18n.translate({ id: 'Hello' })).toEqual('Salut')
expect(i18n.translate({ id: 'My name is {name}', params: { name: 'Fred' } }))
expect(i18n._({ id: 'Hello' })).toEqual('Salut')
expect(i18n._({ id: 'My name is {name}', params: { name: 'Fred' } }))
.toEqual("Je m'appelle Fred")
// missing { name }
expect(i18n.translate({ id: 'My name is {name}' }))
expect(i18n._({ id: 'My name is {name}' }))
.toEqual("Je m'appelle")
// Untranslated message
expect(i18n.translate({ id: 'Missing message' })).toEqual('Missing message')
expect(i18n._({ id: 'Missing message' })).toEqual('Missing message')
})
it('.compile should return compiled message', function () {
const i18n = new I18n()
const messages = {
'Hello': 'Salut',
'My name is {name}': "Je m'appelle {name}"
}
it('._ shouldn\' compile messages in production', function () {
i18n.load({ fr: messages })
i18n.activate('fr')
const msg = i18n.compile('My name is {name}')
expect(msg).toBeInstanceOf(Function)
expect(msg({ name: 'Fred' })).toEqual('My name is Fred')
})
})

@@ -10,4 +10,4 @@ export function mockConsole (testCase, mock = {}) {

global.console = {
...mock,
...defaults
...defaults,
...mock
}

@@ -14,0 +14,0 @@

/* @flow */
import type { I18n } from './i18n'

@@ -18,3 +17,3 @@ type PluralForms = {

const _plural = (type) => (i18n: I18n) => ({
const _plural = (type) => (i18n: any) => ({
value,

@@ -21,0 +20,0 @@ offset = 0,

/* @flow */
import { plural, select, selectOrdinal } from './select'
import { I18n } from './i18n'
import linguiDev from './dev'
describe('plural', function () {
const i18n = new I18n('en', {en: {}})
i18n.development(linguiDev)

@@ -34,2 +36,3 @@ it('should convert to message format string', function () {

const i18n = new I18n('en', {en: {}})
i18n.development(linguiDev)

@@ -71,2 +74,3 @@ it('should convert to message format string', function () {

const i18nCS = new I18n('cs', {cs: {}})
i18nCS.development(linguiDev)
const s = selectOrdinal(i18nCS)

@@ -73,0 +77,0 @@ expect(s({

/* @flow */
import type { I18n, Message } from './i18n'
const flatten = arrays => [].concat.apply([], arrays)
const zip = (a, b) => a.map((item, index) => [item, b[index]])
const t = (i18n: I18n) => (strings: Message | Array<string>, ...values: Array<any>) => {
// used as a function
if (!Array.isArray(strings)) {
const { id, params, formats } = strings
return i18n.translate({ id, params, formats })
}
// used as a template tag
const t = (strings: Array<string>, ...values: Array<any>) => {
return flatten(zip(strings, values)).join('')

@@ -16,0 +7,0 @@ }

/* @flow */
import t from './t'
import { I18n } from './i18n'
describe('.t', function () {
const i18n = new I18n()
// $FlowIgnore: Mock function
i18n.translate = jest.fn(id => id)
describe('as a function', function () {
it('should pass message and params to i18n.translate', function () {
expect(t(i18n)({ id: 'Message' })).toEqual({
id: 'Message',
params: undefined
})
const name = 'Fred'
expect(t(i18n)({ id: 'Hello {name}', params: { name } })).toEqual({
id: 'Hello {name}',
params: { name }
})
})
it('should return processed message', function () {
const name = 'World'
expect(t`Text only`).toEqual('Text only')
expect(t`Hello ${name}!`).toEqual('Hello World!')
})
describe('as a template tag', function () {
it('should return processed message', function () {
const name = 'World'
expect(t(i18n)`Text only`).toEqual('Text only')
expect(t(i18n)`Hello ${name}!`).toEqual('Hello World!')
})
})
})

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc