Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -196,12 +196,12 @@ import { initialize } from 'react-localize-redux';
const languages = ['en', 'fr', 'es'];

// just like the default message you can include the ${key} and ${code} placeholders
const missingTranslationMsg = 'Oh man you missed translation: ${key} for languge ${code}!';
const missingTranslationMsg = 'Oh man you missed translation: ${key} for language ${code}!';

store.dispatch(initialize(languages, { missingTranslationMsg }));

// Assuming there is no translation for "missing-key" doesn't exist it would render following:
// <h1>Oh man you missed translation: missing-key for languge en!</h1>
// <h1>Oh man you missed translation: missing-key for language en!</h1>
const MyComponent = props => <h1><Translate id="missing-key">No translations here!</Translate></h1>;

// You also have the option to override the global missingTranslationMsg option
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ const LanguageSelector = props => (
<div>
<h2>{ translate('heading') } - ({ activeLanguage.code })</h2>
<ul>
{languages.map(languge =>
{languages.map(language =>
<li>
<a href={`/${language.code}`}>{ language.name }</a>
</li>
Expand Down
2 changes: 1 addition & 1 deletion src/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export type MultipleLanguageTranslation = {

export type InitializeAction = BaseAction<'@@localize/INITIALIZE', InitializePayload>;
export type AddTranslationAction = BaseAction<'@@localize/ADD_TRANSLATION', AddTranslationPayload>;
export type AddTranslationForLanguageAction = BaseAction<'@@localize/ADD_TRANSLATION_FOR_LANGUGE', AddTranslationForLanguagePayload>;
export type AddTranslationForLanguageAction = BaseAction<'@@localize/ADD_TRANSLATION_FOR_LANGUAGE', AddTranslationForLanguagePayload>;
export type SetActiveLanguageAction = BaseAction<'@@localize/SET_ACTIVE_LANGUAGE', SetActiveLanguagePayload>;
export type SetLanguagesAction = BaseAction<'@@localize/SET_LANGUAGES', SetLanguagesPayload>;

Expand Down
36 changes: 18 additions & 18 deletions src/locale.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export type TranslatePlaceholderData = {

export type TranslateValue = string|string[];

export type TranslateFunction = (value: TranslateValue, data?: TranslatePlaceholderData, options?: Options) => LocalizedElement|LocalizedElementMap;
export type TranslateFunction = (value: TranslateValue, data?: TranslatePlaceholderData, options?: Options) => LocalizedElement|LocalizedElementMap;

export type SingleLanguageTranslation = {
[key: string]: Object | string
Expand Down Expand Up @@ -101,20 +101,20 @@ type BaseAction<T, P> = {

export type InitializeAction = BaseAction<'@@localize/INITIALIZE', InitializePayload>;
export type AddTranslationAction = BaseAction<'@@localize/ADD_TRANSLATION', AddTranslationPayload>;
export type AddTranslationForLanguageAction = BaseAction<'@@localize/ADD_TRANSLATION_FOR_LANGUGE', AddTranslationForLanguagePayload>;
export type AddTranslationForLanguageAction = BaseAction<'@@localize/ADD_TRANSLATION_FOR_LANGUAGE', AddTranslationForLanguagePayload>;
export type SetActiveLanguageAction = BaseAction<'@@localize/SET_ACTIVE_LANGUAGE', SetActiveLanguagePayload>;
export type SetLanguagesAction = BaseAction<'@@localize/SET_LANGUAGES', SetLanguagesPayload>;

export type Action = BaseAction<
string,
string,
& InitializePayload
& AddTranslationPayload
& AddTranslationForLanguagePayload
& AddTranslationPayload
& AddTranslationForLanguagePayload
& SetActiveLanguagePayload
& SetLanguagesPayload
>;

export type ActionDetailed = Action & {
export type ActionDetailed = Action & {
languageCodes: string[],
translationTransform: TransFormFunction
};
Expand All @@ -124,7 +124,7 @@ export type ActionDetailed = Action & {
*/
export const INITIALIZE = '@@localize/INITIALIZE';
export const ADD_TRANSLATION = '@@localize/ADD_TRANSLATION';
export const ADD_TRANSLATION_FOR_LANGUGE = '@@localize/ADD_TRANSLATION_FOR_LANGUGE';
export const ADD_TRANSLATION_FOR_LANGUAGE = '@@localize/ADD_TRANSLATION_FOR_LANGUAGE';
export const SET_LANGUAGES = '@@localize/SET_LANGUAGES';
export const SET_ACTIVE_LANGUAGE = '@@localize/SET_ACTIVE_LANGUAGE';
export const TRANSLATE = '@@localize/TRANSLATE';
Expand All @@ -144,7 +144,7 @@ export function languages(state: Language[] = [], action: Action): Language[] {
? code === activeLanguage
: index === 0;
};
// check if it's using array of Language objects, or array of languge codes
// check if it's using array of Language objects, or array of language codes
return typeof language === 'string'
? { code: language, active: isActive(language) } // language codes
: { ...language, active: isActive(language.code) }; // language objects
Expand All @@ -171,12 +171,12 @@ export function translations(state: Translations = {}, action: ActionDetailed):
...state,
...flatten(translations, { safe: true })
};
case ADD_TRANSLATION_FOR_LANGUGE:
case ADD_TRANSLATION_FOR_LANGUAGE:
const languageIndex = action.languageCodes.indexOf(action.payload.language);
const flattenedTranslations = languageIndex >= 0 ? flatten(action.payload.translation) : {};
// convert single translation data into multiple
const languageTranslations = Object.keys(flattenedTranslations).reduce((prev, cur: string) => {
// loop through each language, and for languages that don't match active language
// loop through each language, and for languages that don't match active language
// keep existing translation data, and for active language store new translation data
const translationValues = action.languageCodes.map((code, index) => {
const existingValues = state[cur] || [];
Expand Down Expand Up @@ -249,13 +249,13 @@ export const addTranslation = (translation: MultipleLanguageTranslation): AddTra
});

export const addTranslationForLanguage = (translation: SingleLanguageTranslation, language: string): AddTranslationForLanguageAction => ({
type: ADD_TRANSLATION_FOR_LANGUGE,
type: ADD_TRANSLATION_FOR_LANGUAGE,
payload: { translation, language }
});

export const setLanguages = (languages: Array<string|NamedLanguage>, activeLanguage?: string): SetLanguagesAction => {
warning(
'The setLanguages action will be removed in the next major version. ' +
'The setLanguages action will be removed in the next major version. ' +
'Please use initialize action instead https://ryandrewjohnson.github.io/react-localize-redux/api/action-creators/#initializelanguages-options'
);
return {
Expand Down Expand Up @@ -287,7 +287,7 @@ export const getActiveLanguage = (state: LocaleState): Language => {
/**
* A custom equality checker that checker that compares an objects keys and values instead of === comparison
* e.g. {name: 'Ted', sport: 'hockey'} would result in 'name,sport - Ted,hocker' which would be used for comparison
*
*
* NOTE: This works with activeLanguage, languages, and translations data types.
* If a new data type is added to selector this would need to be updated to accomodate
*/
Expand All @@ -300,11 +300,11 @@ export const translationsEqualSelector = createSelectorCreator(
const prevValues: any = typeof prev === "object" ? objectValuesToString(prev) : undefined;
const curValues: any = typeof cur === "object" ? objectValuesToString(cur) : undefined;

const prevCacheValue = (!prevKeys || !prevValues)
? `${ prevKeys } - ${ prevValues }`
const prevCacheValue = (!prevKeys || !prevValues)
? `${ prevKeys } - ${ prevValues }`
: prev;

const curCacheValue = (!curKeys || !curValues)
const curCacheValue = (!curKeys || !curValues)
? `${ curKeys } - ${ curValues }`
: cur;

Expand Down Expand Up @@ -336,7 +336,7 @@ export const getTranslate: Selector<LocaleState, void, TranslateFunction> = crea
return (value, data = {}, optionsOverride = {}) => {
const {defaultLanguage, ...rest} = optionsOverride;
const translateOptions: Options = {...options, ...rest};
const translations = defaultLanguage !== undefined
const translations = defaultLanguage !== undefined
? getTranslationsForLanguage({code: defaultLanguage, active: false})
: translationsForActiveLanguage;
if (typeof value === 'string') {
Expand All @@ -360,4 +360,4 @@ export const getTranslateComponent = createSelector(
(translate) => (props) => {
return translate(props.id, props.data, props.options);
}
);
);
12 changes: 6 additions & 6 deletions tests/locale.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import Enzyme, { shallow } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import { languages, translations, getActiveLanguage, getTranslationsForActiveLanguage, getTranslationsForSpecificLanguage, translationsEqualSelector, setLanguages, getTranslate, getTranslateSelector, defaultTranslateOptions, options } from 'locale';
import { getLocalizedElement } from 'utils';
import { INITIALIZE, SET_LANGUAGES, SET_ACTIVE_LANGUAGE, ADD_TRANSLATION, ADD_TRANSLATION_FOR_LANGUGE } from 'locale';
import { INITIALIZE, SET_LANGUAGES, SET_ACTIVE_LANGUAGE, ADD_TRANSLATION, ADD_TRANSLATION_FOR_LANGUAGE } from 'locale';

Enzyme.configure({ adapter: new Adapter() });

Expand Down Expand Up @@ -318,10 +318,10 @@ describe('locale module', () => {
});
});

describe('ADD_TRANSLATION_FOR_LANGUGE', () => {
describe('ADD_TRANSLATION_FOR_LANGUAGE', () => {
it('should add translation for specific language', () => {
const action = {
type: ADD_TRANSLATION_FOR_LANGUGE,
type: ADD_TRANSLATION_FOR_LANGUAGE,
payload: {
language: 'en',
translation: { title: 'title', description: 'description' }
Expand All @@ -338,7 +338,7 @@ describe('locale module', () => {

it('should add nested translation for specific language', () => {
const action = {
type: ADD_TRANSLATION_FOR_LANGUGE,
type: ADD_TRANSLATION_FOR_LANGUAGE,
payload: {
language: 'en',
translation: {
Expand All @@ -357,7 +357,7 @@ describe('locale module', () => {

it('should add translation for specific language to existing translation', () => {
const action = {
type: ADD_TRANSLATION_FOR_LANGUGE,
type: ADD_TRANSLATION_FOR_LANGUAGE,
payload: {
language: 'en',
translation: { title: 'title', description: 'description' }
Expand All @@ -378,7 +378,7 @@ describe('locale module', () => {

it('should add translation for specific language and override existing translation', () => {
const action = {
type: ADD_TRANSLATION_FOR_LANGUGE,
type: ADD_TRANSLATION_FOR_LANGUAGE,
payload: {
language: 'fr',
translation: { title: 'title', description: 'description' }
Expand Down