Merge pull request #718 from strapi/improve-reactintl

Take en default translation message if there are not present in the c…
This commit is contained in:
Jim LAURIE 2018-03-01 15:52:09 +01:00 committed by GitHub
commit 036c0d7584
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 11 deletions

View File

@ -10,6 +10,8 @@ import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import { Link } from 'react-router-dom';
import en from 'translations/en.json';
import styles from './styles.scss';
class LeftMenuLink extends React.Component { // eslint-disable-line react/prefer-stateless-function
@ -22,6 +24,20 @@ class LeftMenuLink extends React.Component { // eslint-disable-line react/prefer
<span>{upperFirst(this.props.source.split('-').join(' '))}</span>
</div>) : '';
// Check if messageId exists in en locale to prevent warning messages
const content = en[this.props.label] ? (
<FormattedMessage
id={this.props.label}
defaultMessage='{label}'
values={{
label: `${this.props.label}`,
}}
className={styles.linkLabel}
/>
) : (
<span className={styles.linkLabel}>{this.props.label}</span>
);
return (
<li className={styles.item}>
<Link
@ -32,14 +48,7 @@ class LeftMenuLink extends React.Component { // eslint-disable-line react/prefer
}}
>
<i className={`${styles.linkIcon} fa-${this.props.icon} fa`}></i>
<FormattedMessage
id={this.props.label}
defaultMessage='{label}'
values={{
label: `${this.props.label}`,
}}
className={styles.linkLabel}
/>
{content}
</Link>
{plugin}
</li>

View File

@ -11,12 +11,15 @@ import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { IntlProvider } from 'react-intl';
import { defaultsDeep } from 'lodash';
import { selectLocale } from './selectors';
export class LanguageProvider extends React.Component { // eslint-disable-line react/prefer-stateless-function
render() {
const messages = defaultsDeep(this.props.messages[this.props.locale], this.props.messages.en);
return (
<IntlProvider locale={this.props.locale} messages={this.props.messages[this.props.locale]}>
<IntlProvider locale={this.props.locale} defaultLocale="en" messages={messages}>
{React.Children.only(this.props.children)}
</IntlProvider>
);

View File

@ -103,7 +103,7 @@
"notification.error": "An error occurred",
"Auth & Permissions": "Auth & Permissions",
"Users & Permissions": "Users & Permissions",
"Content Manager": "Content Manager",
"Content Type Builder": "Content Type Builder",
"Settings Manager": "Settings Manager",
@ -114,5 +114,7 @@
"ResetPasswordToken": "Reset Password Token",
"Role": "Role",
"New entry": "New entry",
"request.error.model.unknow": "This model doesn't exist"
"request.error.model.unknow": "This model doesn't exist",
"Users": "Users",
"Analytics": "Analytics"
}