Moves into YAML and own module.

This commit is contained in:
gaba
2017-04-24 18:09:13 -05:00
parent 5aacdc3a74
commit 59e23ffd60
56 changed files with 121 additions and 118 deletions
@@ -2,7 +2,7 @@ import React, {PropTypes} from 'react';
import Layout from 'coral-admin/src/components/ui/Layout';
import styles from './NotFound.css';
import {Button, TextField, Alert, Success} from 'coral-ui';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
import Recaptcha from 'react-recaptcha';
const lang = new I18n(translations);
@@ -2,7 +2,7 @@ import React, {PropTypes} from 'react';
import {Button, Icon} from 'coral-ui';
import styles from './BanUserButton.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
const lang = new I18n(translations);
@@ -4,7 +4,7 @@ import styles from './BanUserDialog.css';
import Button from 'coral-ui/components/Button';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
@@ -1,5 +1,5 @@
import React, {PropTypes} from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
import styles from 'coral-admin/src/containers/Dashboard/Dashboard.css';
import {Icon} from 'coral-ui';
@@ -1,4 +1,4 @@
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations.json';
import React from 'react';
import Modal from 'components/Modal';
@@ -2,7 +2,7 @@ import React, {PropTypes} from 'react';
import {Navigation, Drawer} from 'react-mdl';
import {IndexLink, Link} from 'react-router';
import styles from './Drawer.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations.json';
const CoralDrawer = ({handleLogout, restricted = false}) => (
@@ -2,7 +2,7 @@ import React, {PropTypes} from 'react';
import {Navigation, Header, IconButton, MenuItem, Menu} from 'react-mdl';
import {Link, IndexLink} from 'react-router';
import styles from './Header.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations.json';
import {Logo} from './Logo';
@@ -1,6 +1,6 @@
import React from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
const lang = new I18n(translations);
@@ -1,5 +1,5 @@
import React from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
import styles from './Community.css';
@@ -2,7 +2,7 @@ import React, {Component} from 'react';
import {connect} from 'react-redux';
import {SelectField, Option} from 'react-mdl-selectfield';
import styles from './Community.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations';
import {setRole, setCommenterStatus} from '../../actions/community';
@@ -4,7 +4,7 @@ import styles from './BanUserDialog.css';
import Button from 'coral-ui/components/Button';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
const lang = new I18n(translations);
@@ -2,7 +2,7 @@ import React from 'react';
import styles from './styles.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
import {Link} from 'react-router';
@@ -3,7 +3,7 @@ import React, {Component, PropTypes} from 'react';
import {Dialog, Button} from 'coral-ui';
import styles from './SuspendUserDialog.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
const lang = new I18n(translations);
@@ -3,7 +3,7 @@ import styles from '../Community.css';
import ActionButton from './ActionButton';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../../translations.json';
const lang = new I18n(translations);
@@ -10,7 +10,7 @@ import {
import {Button, List, Item, Card, Spinner} from 'coral-ui';
import styles from './Configure.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
import StreamSettings from './StreamSettings';
import ModerationSettings from './ModerationSettings';
@@ -3,7 +3,7 @@ import {Card} from 'coral-ui';
import styles from './Configure.css';
import TagsInput from 'react-tagsinput';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations.json';
const lang = new I18n(translations);
@@ -1,5 +1,5 @@
import React, {Component} from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations.json';
import styles from './Configure.css';
import {Button, Card} from 'coral-ui';
@@ -3,7 +3,7 @@ import styles from './Configure.css';
import {Card} from 'coral-ui';
import {Checkbox} from 'react-mdl';
import Wordlist from './Wordlist';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations.json';
const lang = new I18n(translations);
@@ -1,6 +1,6 @@
import React from 'react';
import {SelectField, Option} from 'react-mdl-selectfield';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations.json';
import styles from './Configure.css';
import {Checkbox, Textfield} from 'react-mdl';
@@ -3,7 +3,7 @@ import {Card} from 'coral-ui';
import Domainlist from './Domainlist';
import EmbedLink from './EmbedLink';
import styles from './Configure.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations.json';
const lang = new I18n(translations);
@@ -1,5 +1,5 @@
import React from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../../translations.json';
import TagsInput from 'react-tagsinput';
import styles from './Configure.css';
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react';
import {Link} from 'react-router';
import styles from './Widget.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
const lang = new I18n(translations);
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react';
import {Link} from 'react-router';
import styles from './Widget.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
const lang = new I18n(translations);
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react';
import {Link} from 'react-router';
import styles from './Widget.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
const lang = new I18n(translations);
@@ -1,5 +1,5 @@
import React from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
import ModerationQueue from 'coral-admin/src/containers/ModerationQueue/ModerationQueue';
import styles from './Widget.css';
@@ -4,7 +4,7 @@ import {TextField, Button} from 'coral-ui';
const lang = new I18n(translations);
import translations from '../../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
const AddOrganizationName = props => {
const {handleSettingsChange, handleSettingsSubmit, install} = props;
@@ -4,7 +4,7 @@ import {TextField, Button, Spinner} from 'coral-ui';
const lang = new I18n(translations);
import translations from '../../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
const InitialStep = props => {
const {handleUserChange, handleUserSubmit, install} = props;
@@ -5,7 +5,7 @@ import {Link} from 'react-router';
const lang = new I18n(translations);
import translations from '../../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
const InitialStep = () => {
return (
@@ -4,7 +4,7 @@ import {Button} from 'coral-ui';
const lang = new I18n(translations);
import translations from '../../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
const InitialStep = props => {
const {nextStep} = props;
@@ -5,7 +5,7 @@ import TagsInput from 'react-tagsinput';
const lang = new I18n(translations);
import translations from '../../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
const PermittedDomainsStep = props => {
const {finishInstall, install, handleDomainsChange} = props;
@@ -4,7 +4,7 @@ import Comment from './components/Comment';
import styles from './components/styles.css';
import EmptyCard from '../../components/EmptyCard';
import {actionsMap} from './helpers/moderationQueueActionsMap';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
import LoadMore from './components/LoadMore';
@@ -14,7 +14,7 @@ import {getActionSummary} from 'coral-framework/utils';
const linkify = new Linkify();
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
const lang = new I18n(translations);
@@ -1,7 +1,7 @@
import React, {Component, PropTypes} from 'react';
import {Icon} from 'coral-ui';
import styles from './FlagBox.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
const lang = new I18n(translations);
@@ -2,7 +2,7 @@ import React, {PropTypes} from 'react';
import CommentCount from './CommentCount';
import styles from './styles.css';
import {SelectField, Option} from 'react-mdl-selectfield';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
import {Link} from 'react-router';
@@ -1,7 +1,7 @@
import React, {Component} from 'react';
import styles from './Stories.css';
import {connect} from 'react-redux';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import {fetchAssets, updateAssetState} from 'coral-admin/src/actions/assets';
import translations from 'coral-admin/src/translations.json';
import {Link} from 'react-router';
@@ -1,7 +1,7 @@
import React, {Component} from 'react';
import styles from './Stories.css';
import {connect} from 'react-redux';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import {fetchAssets, updateAssetState} from '../../actions/assets';
import translations from '../../translations.json';
import {Link} from 'react-router';
@@ -1,7 +1,7 @@
import React from 'react';
import {Button} from 'coral-ui';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
const lang = new I18n(translations);
+1 -1
View File
@@ -2,7 +2,7 @@ import React from 'react';
import {compose} from 'react-apollo';
import {connect} from 'react-redux';
import isEqual from 'lodash/isEqual';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-framework/translations';
const lang = new I18n(translations);
@@ -1,6 +1,6 @@
import React from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-framework/translations';
const lang = new I18n(translations);
+1 -1
View File
@@ -1,5 +1,5 @@
import React, {PropTypes} from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-framework/translations.json';
import {ADDTL_COMMENTS_ON_LOAD_MORE} from 'coral-framework/constants/comments';
import {Button} from 'coral-ui';
+1 -1
View File
@@ -1,5 +1,5 @@
import React, {PropTypes} from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from 'coral-framework/translations.json';
const lang = new I18n(translations);
+1 -1
View File
@@ -3,7 +3,7 @@ import coralApi from '../helpers/response';
import {addNotification} from '../actions/notification';
import {pym} from 'coral-framework';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from './../translations';
const lang = new I18n(translations);
+1 -1
View File
@@ -1,6 +1,6 @@
import {gql} from 'react-apollo';
import client from 'coral-framework/services/client';
import I18n from '../../coral-framework/modules/i18n/i18n';
import I18n from '../../coral-i18n/modules/i18n/i18n';
import translations from './../translations';
const lang = new I18n(translations);
import * as actions from '../constants/auth';
+1 -1
View File
@@ -2,7 +2,7 @@ import {addNotification} from '../actions/notification';
import coralApi from '../helpers/response';
import * as actions from '../constants/auth';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from './../translations';
const lang = new I18n(translations);
+1 -1
View File
@@ -1,4 +1,4 @@
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from './../translations';
const lang = new I18n(translations);
+1 -1
View File
@@ -1,5 +1,5 @@
import pym from './services/PymConnection';
import I18n from './modules/i18n/i18n';
import I18n from '../coral-i18n/modules/i18n/i18n';
import actions from './actions';
// TODO (bc): Deprecate old actions. Spreading actions is now needed.
+66 -63
View File
@@ -3,89 +3,92 @@ import esTA from '../../../../node_modules/timeago.js/locales/es';
import has from 'lodash/has';
import get from 'lodash/get';
// To Do
// check on how to load the translations from YML file
// Look at other i18n work in express/node
const yaml = require('node-yaml');
/**
* Default locales, this should be overriden by config file
*/
class i18n {
constructor (translations) {
constructor(translations) {
/**
* Register locales
*/
this.locales = {'en': 'locales/en.yml', 'es': 'locales/es.yml'};
timeago.register('es_ES', esTA);
this.timeagoInstance = new timeago();
/**
* Load translations
*/
// To Do : get all the yml from locales
let trans = translations || {en: {}};
try {
const locale = localStorage.getItem('locale') || navigator.language;
localStorage.setItem('locale', locale);
const locale = this.getLocale();
this.setLocale(locale);
const lang = this.locales[locale.split('-')[0]] || 'en';
this.translations = trans[lang];
this.language = this.locales[locale.split('-')[0]] || 'en';
this.loadTranslations(translations);
} catch (err) {
// To Do: get configuration for default translation
this.translations = trans['en'];
console.error(err);
}
this.setLocale = (locale) => {
try {
localStorage.setItem('locale', locale);
} catch (err) {
console.error(err);
}
};
this.getLocale = () => (
localStorage.getItem('locale') || navigator.locale || 'en-US'
);
/**
* Expose the translation function
*
* it takes a string with the translation key and returns
* the translation value or the key itself if not found
* it works with nested translations (my.page.title)
*
* any extra parameters are optional and replace a variable marked by {0}, {1}, etc in the translation.
*/
this.t = (key, ...replacements) => {
if (has(this.translations, key)) {
let translation = get(this.translations, key);
// replace any {n} with the arguments passed to this method
replacements.forEach((str, i) => {
translation = translation.replace(new RegExp(`\\{${i}\\}`, 'g'), str);
});
return translation;
} else {
console.warn(`${key} language key not set`);
return key;
}
};
this.timeago = (time) => {
return this.timeagoInstance.format(new Date(time));
};
}
loadTranslations = (translations) => {
const localesFiles = {'en': 'locales/en.yml', 'es': 'locales/es.yml'};
yaml.readPromise(localesFiles[this.language])
.then((data) => {
// Translations need to be loaded from translations or localesFiles.
this.translations = translations[this.language] || data;
})
.catch(() => {
// To Do: get configuration for default translation
this.translations = translations['en'];
});
}
setLocale = (locale) => {
try {
localStorage.setItem('locale', locale);
} catch (err) {
console.error(err);
}
};
getLocale = () => (
localStorage.getItem('locale') || navigator.language || 'en-US'
);
/**
* Expose the translation function
*
* it takes a string with the translation key and returns
* the translation value or the key itself if not found
* it works with nested translations (my.page.title)
*
* any extra parameters are optional and replace a variable marked by {0}, {1}, etc in the translation.
*/
t = (key, ...replacements) => {
if (has(this.translations, key)) {
let translation = get(this.translations, key);
// replace any {n} with the arguments passed to this method
replacements.forEach((str, i) => {
translation = translation.replace(new RegExp(`\\{${i}\\}`, 'g'), str);
});
return translation;
} else {
console.warn(`${key} language key not set`);
return key;
}
};
timeago = (time) => {
return this.timeagoInstance.format(new Date(time));
};
}
export default i18n;
@@ -1,5 +1,5 @@
import React, {PropTypes} from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from './translations';
import onClickOutside from 'react-onclickoutside';
const name = 'coral-plugin-permalinks';
@@ -6,7 +6,7 @@ import FakeComment from './FakeComment';
import styles from './styles.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
@@ -6,7 +6,7 @@ import Content from 'coral-plugin-commentcontent/CommentContent';
import PubDate from 'coral-plugin-pubdate/PubDate';
import {ReplyButton} from 'coral-plugin-replies';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
@@ -1,7 +1,7 @@
import React from 'react';
import styles from './styles.css';
import Button from 'coral-ui/components/Button';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react';
import {Button, TextField, Spinner, Success, Alert} from 'coral-ui';
import styles from './styles.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react';
import {Button, TextField, Spinner, Success, Alert} from 'coral-ui';
import styles from './styles.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
+1 -1
View File
@@ -1,6 +1,6 @@
import React from 'react';
import styles from './styles.css';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
@@ -6,7 +6,7 @@ import errorMsj from 'coral-framework/helpers/error';
import CreateUsernameDialog from '../components/CreateUsernameDialog';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
const lang = new I18n(translations);
@@ -3,7 +3,7 @@ import {connect} from 'react-redux';
import SignDialog from '../components/SignDialog';
import validate from 'coral-framework/helpers/validate';
import errorMsj from 'coral-framework/helpers/error';
import I18n from 'coral-framework/modules/i18n/i18n';
import I18n from 'coral-i18n/modules/i18n/i18n';
import translations from '../translations';
import {pym} from 'coral-framework';
const lang = new I18n(translations);