Commit e99aece6 authored by 2breakegg's avatar 2breakegg

i18n

parent f9c4e7cd
This diff is collapsed.
This diff is collapsed.
...@@ -62,7 +62,7 @@ class EmailForm extends React.Component { ...@@ -62,7 +62,7 @@ class EmailForm extends React.Component {
}, },
decorator: { decorator: {
rules: [ rules: [
{ required: true, message: messages['Password length must be between 8 and 24 characters'], pattern: /^.{8,24}$/ } { required: true, message: messages['Password-length-must-be-between-8-and-24-characters.'], pattern: /^.{8,24}$/ }
] ]
}, },
input: { input: {
......
...@@ -21,8 +21,9 @@ class EmailForm extends React.Component { ...@@ -21,8 +21,9 @@ class EmailForm extends React.Component {
} }
checkPassword = (rule, value, callback) => { checkPassword = (rule, value, callback) => {
const form = this.props.form; const form = this.props.form;
const { intl: { messages } } = this.context;
if (value && value !== form.getFieldValue('new_password')) { if (value && value !== form.getFieldValue('new_password')) {
callback('两次密码输入不符'); callback(messages['Incorrect-password.2']);
} else { } else {
callback(); callback();
} }
...@@ -64,7 +65,7 @@ class EmailForm extends React.Component { ...@@ -64,7 +65,7 @@ class EmailForm extends React.Component {
}, },
decorator: { decorator: {
rules: [ rules: [
{ required: true, message: messages['Password length must be between 8 and 24 characters'], pattern: /^.{8,24}$/ }, { required: true, message: messages['Password-length-must-be-between-8-and-24-characters.'], pattern: /^.{8,24}$/ },
{ validator: this.checkConfirm } { validator: this.checkConfirm }
], ],
}, },
...@@ -85,7 +86,7 @@ class EmailForm extends React.Component { ...@@ -85,7 +86,7 @@ class EmailForm extends React.Component {
}, },
decorator: { decorator: {
rules: [ rules: [
{ required: true, message: messages['Password length must be between 8 and 24 characters'], pattern: /^.{8,24}$/}, { required: true, message: messages['Password-length-must-be-between-8-and-24-characters.'], pattern: /^.{8,24}$/},
{ validator: this.checkPassword} { validator: this.checkPassword}
], ],
}, },
......
...@@ -62,7 +62,7 @@ class EmailForm extends React.Component { ...@@ -62,7 +62,7 @@ class EmailForm extends React.Component {
}, },
decorator: { decorator: {
rules: [ rules: [
{ required: true, message: messages['Password length must be between 8 and 24 characters'], pattern: /^.{8,24}$/ } { required: true, message: messages['Password-length-must-be-between-8-and-24-characters.'], pattern: /^.{8,24}$/ }
] ]
}, },
input: { input: {
......
...@@ -61,7 +61,7 @@ class EmailForm extends React.Component { ...@@ -61,7 +61,7 @@ class EmailForm extends React.Component {
}, },
decorator: { decorator: {
rules: [ rules: [
{ required: true, message: messages['Password length must be between 8 and 24 characters'], pattern: /^.{8,24}$/ }, { required: true, message: messages['Password-length-must-be-between-8-and-24-characters.'], pattern: /^.{8,24}$/ },
], ],
}, },
input: { input: {
......
import { login, forgot, register, reset, activate, checkUserExists } from '../services/auth' import { message } from 'antd';
import { message } from 'antd' import { routerRedux } from 'dva/router';
import { routerRedux } from 'dva/router' import { activate, checkUserExists, forgot, login, register, reset } from '../services/auth';
export default { export default {
namespace: 'auth', namespace: 'auth',
state: { state: {
input:{}, input: {},
activateState: false, activateState: false,
checkEmail: '', checkEmail: '',
checkUsername: '', checkUsername: '',
...@@ -19,7 +18,7 @@ export default { ...@@ -19,7 +18,7 @@ export default {
isForgotSubmit: false, isForgotSubmit: false,
isSpinSubmit: false, isSpinSubmit: false,
isActivateSubmit: false, isActivateSubmit: false,
register: {} register: {},
}, },
reducers: { reducers: {
change(state, action) { change(state, action) {
...@@ -105,133 +104,137 @@ export default { ...@@ -105,133 +104,137 @@ export default {
forgotSuccess(state, action) { forgotSuccess(state, action) {
return { return {
...state, ...{ ...state, ...{
isForgotSubmit: false isForgotSubmit: false,
} }
} };
}, },
forgotFail(state, action) { forgotFail(state, action) {
return { return {
...state, ...{ ...state, ...{
isForgotSubmit: false isForgotSubmit: false,
} }
} };
}, },
reset(state, action) { reset(state, action) {
return { return {
...state, ...{ ...state, ...{
isResetSubmit: true isResetSubmit: true,
} }
} };
}, },
resetSuccess(state, action) { resetSuccess(state, action) {
return { return {
...state, ...{ ...state, ...{
isResetSubmit: false isResetSubmit: false,
} }
} };
}, },
resetFail(state, action) { resetFail(state, action) {
return { return {
...state, ...{ ...state, ...{
isResetSubmit: false isResetSubmit: false,
} }
} };
}, },
}, },
effects: { effects: {
*activate({ payload }, { call, put }) { *activate({ payload }, { call, put, select }) {
const { messages } = yield select(state => state.common);
try { try {
const { data } = yield call(activate, payload) const { data } = yield call(activate, payload);
if(data) { if (data) {
message.success("激活成功") message.success(messages['Your account has been successfully activated!'], 5);
} }
} catch (error) { } catch (error) {
message.error(error.message) message.error(error.message);
} }
}, },
*checkEmail({ payload }, { call, put }) { *checkEmail({ payload }, { call, put }) {
if(!payload.email){ if (!payload.email) {
yield put({ type: 'check', payload: { checkEmail: 'error' } }) yield put({ type: 'check', payload: { checkEmail: 'error' } });
return return;
} }
try { try {
const { data } = yield call(checkUserExists, {email: payload.email}) const { data } = yield call(checkUserExists, { email: payload.email });
if (data) { if (data) {
yield put({ type: 'check', payload: { isEmailExists: true, checkEmail: 'warning' } }) yield put({ type: 'check', payload: { isEmailExists: true, checkEmail: 'warning' } });
} }
} catch (error) { } catch (error) {
yield put({ type: 'check', payload: { isEmailExists: false, checkEmail: 'success' } }) yield put({ type: 'check', payload: { isEmailExists: false, checkEmail: 'success' } });
} }
}, },
*checkUsername({ payload }, { call, put }) { *checkUsername({ payload }, { call, put }) {
if(!payload.username){ if (!payload.username) {
yield put({ type: 'check', payload: { checkUsername: 'error' } }) yield put({ type: 'check', payload: { checkUsername: 'error' } });
return return;
} }
try { try {
const { data } = yield call(checkUserExists, { username: payload.username}) const { data } = yield call(checkUserExists, { username: payload.username });
if (data) { if (data) {
yield put({ type: 'check', payload: { isUserNameExists: true, checkUsername: 'warning' } }) yield put({ type: 'check', payload: { isUserNameExists: true, checkUsername: 'warning' } });
} }
} catch (error) { } catch (error) {
yield put({ type: 'check', payload: { isUserNameExists: false, checkUsername: 'success' } }) yield put({ type: 'check', payload: { isUserNameExists: false, checkUsername: 'success' } });
} }
}, },
*login({ payload }, { call, put, select }) { *login({ payload }, { call, put, select }) {
const { messages } = yield select(state => state.common) const { messages } = yield select(state => state.common);
try { try {
const { data } = yield call(login, payload) const { data } = yield call(login, payload);
if (data) { if (data) {
yield put({ type: 'loginSuccess', payload: { input: payload } }) yield put({ type: 'loginSuccess', payload: { input: payload } });
yield put({ type: 'user/loginSuccess', payload: { data } }) yield put({ type: 'user/loginSuccess', payload: { data } });
} }
} catch (error) { } catch (error) {
yield put({ type: 'loginFail' }) yield put({ type: 'loginFail' });
message.error(messages[error.message]) message.error(messages[error.message]);
} }
}, },
*forgot({ payload }, { call, put }) { *forgot({ payload }, { call, put, select }) {
try { const { messages } = yield select(state => state.common);
const { data } = yield call(forgot, payload) try {
if(data){ const { data } = yield call(forgot, payload);
yield put({ type: 'forgotSuccess' }) if (data) {
message.info("已发送密码重置邮件", 3) yield put({ type: 'forgotSuccess' });
} message.info(messages['A password reset email has been sent to you.'], 5);
} catch (error) {
yield put({ type: 'forgotFail' })
message.error(error.message)
} }
} catch (error) {
yield put({ type: 'forgotFail' });
message.error(messages[error.message], 3);
}
}, },
*register({ payload }, { call, put }) { *register({ payload }, { call, put, select }) {
const { messages } = yield select(state => state.common);
try { try {
const { data } = yield call(register, payload) const { data } = yield call(register, payload);
if (data) { if (data) {
yield put({ type: 'registerSuccess' }) yield put({ type: 'registerSuccess' });
yield put({ type: 'user/loginSuccess', payload: { data } }) yield put({ type: 'user/loginSuccess', payload: { data } });
yield put({ type: 'loginSuccess', payload: { input: payload } }) yield put({ type: 'loginSuccess', payload: { input: payload } });
message.info("注册成功, 请验证激活邮件~", 3) message.info(messages['Your account has been created.'], 5);
yield put(routerRedux.replace("/verify")) yield put(routerRedux.replace('/verify'));
} }
} catch (error) { } catch (error) {
yield put({ type: 'registerFail' }) yield put({ type: 'registerFail' });
message.error(error.message, 3) message.error(messages[error.message], 3);
} }
}, },
*reset({ payload }, { call, put }) { *reset({ payload }, { call, put, select }) {
const { messages } = yield select(state => state.common);
try { try {
const { data } = yield call(reset, payload) const { data } = yield call(reset, payload);
if (data) { if (data) {
yield put({ type: 'resetSuccess' }) yield put({ type: 'resetSuccess' });
message.info("重置成功") message.info(messages.update_success, 3);
} }
} catch (error) { } catch (error) {
yield put({ type: 'resetFail' }) yield put({ type: 'resetFail' });
message.error(error.message, 3) message.error(messages[error.message], 3);
} }
}, },
}, },
......
...@@ -91,56 +91,55 @@ export default { ...@@ -91,56 +91,55 @@ export default {
if(user && user.active) { if(user && user.active) {
yield put(routerRedux.replace("/profiles")) yield put(routerRedux.replace("/profiles"))
// message.info("登录成功") // message.info("登录成功")
} else { } else {
yield put(routerRedux.replace(`/verify`)) yield put(routerRedux.replace(`/verify`))
} }
}, },
*preLogin({ payload }, { call, put }) { *preLogin({ payload }, { call, put }) {
let token = localStorage.getItem("token") let token = localStorage.getItem("token")
try { try {
let { data } = yield call(getAuthUser, { token }) let { data } = yield call(getAuthUser, { token })
if (data ) { if (data ) {
yield put({ type: 'preLoginSuccess', payload: { user: data, token }}) yield put({ type: 'preLoginSuccess', payload: { user: data, token }})
if(data.active) { if(data.active) {
// yield put(routerRedux.replace("/profiles")) // yield put(routerRedux.replace("/profiles"))
} }
} }
} catch (error) { } catch (error) {
message.error("自动登录失败") message.error(error.message)
} }
}, },
*updateProfile({ payload }, { call, put, select }) { *updateProfile({ payload }, { call, put, select }) {
message.destroy() message.destroy()
try { try {
let token = yield select(state => state.user.token) let token = yield select(state => state.user.token)
let { messages } = yield select(state => state.common) let { messages } = yield select(state => state.common)
let { data } = yield call(updateProfile, {...payload, token}) let { data } = yield call(updateProfile, {...payload, token})
if (data) { if (data) {
yield put({ type: 'updateProfileSuccess', payload: { user: data, token } }) yield put({ type: 'updateProfileSuccess', payload: { user: data, token } })
message.info(messages["i_update_success"]) message.info(messages["update_success"])
} }
} catch (error) { } catch (error) {
yield put({ type: 'updateProfileFail' }) yield put({ type: 'updateProfileFail' })
message.error(messages[error.message]) message.error(error.message)
} }
}, },
*updateEmail({ payload }, { call, put, select }) { *updateEmail({ payload }, { call, put, select }) {
let { messages } = yield select(state => state.common)
try { try {
let token = yield select(state => state.user.token)
let token = yield select(state => state.user.token)
let { messages } = yield select(state => state.common)
let { data } = yield call(updateAccount, {...payload, token}) let { data } = yield call(updateAccount, {...payload, token})
if (data) { if (data) {
yield put({ type: 'updateAccountSuccess', payload: { user: data, token } }) yield put({ type: 'updateAccountSuccess', payload: { user: data, token } })
message.info("验证邮件已发送") message.info(messages['A-verification-email-has-been-sent-to-you,please-check-the-mail-to-complete.'])
} }
} catch (error) { } catch (error) {
yield put({ type: 'updateAccountFail' }) yield put({ type: 'updateAccountFail' })
...@@ -149,16 +148,14 @@ export default { ...@@ -149,16 +148,14 @@ export default {
}, },
*updateAccount({ payload }, { call, put, select }) { *updateAccount({ payload }, { call, put, select }) {
let { messages } = yield select(state => state.common)
try { try {
let token = yield select(state => state.user.token) let token = yield select(state => state.user.token)
let { messages } = yield select(state => state.common)
let { data } = yield call(updateAccount, {...payload, token}) let { data } = yield call(updateAccount, {...payload, token})
if (data) { if (data) {
yield put({ type: 'updateAccountSuccess', payload: { user: data, token } }) yield put({ type: 'updateAccountSuccess', payload: { user: data, token } })
message.info(messages["i_update_success"]) message.info(messages["update_success"])
} }
} catch (error) { } catch (error) {
yield put({ type: 'updateAccountFail' }) yield put({ type: 'updateAccountFail' })
......
...@@ -47,7 +47,7 @@ class Login extends React.Component { ...@@ -47,7 +47,7 @@ class Login extends React.Component {
</FormItem> </FormItem>
<FormItem> <FormItem>
{getFieldDecorator('password', { {getFieldDecorator('password', {
rules: [{ required: true, message: messages['Please input your Password!'] }], rules: [{ required: true, message: messages['Please-input-your-Password!'] }],
})( })(
<Input prefix={<Icon type="lock" style={{ fontSize: 13 }} />} type="password" placeholder={messages.password} />, <Input prefix={<Icon type="lock" style={{ fontSize: 13 }} />} type="password" placeholder={messages.password} />,
)} )}
......
...@@ -34,7 +34,7 @@ class Register extends React.Component { ...@@ -34,7 +34,7 @@ class Register extends React.Component {
checkPassword = (rule, value, callback) => { checkPassword = (rule, value, callback) => {
const form = this.props.form; const form = this.props.form;
if (value && value !== form.getFieldValue('password')) { if (value && value !== form.getFieldValue('password')) {
callback(this.context.intl.messages['Incorrect password.2']); callback(this.context.intl.messages['Incorrect-password.2']);
} else { } else {
callback(); callback();
} }
...@@ -90,7 +90,7 @@ class Register extends React.Component { ...@@ -90,7 +90,7 @@ class Register extends React.Component {
{getFieldDecorator('email', { {getFieldDecorator('email', {
rules: [{ rules: [{
required: true, required: true,
message: messages['Please use a correct E-Mail address.'], message: messages['Please-use-a-correct-E-Mail-address.'],
pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
}], }],
}, {})( }, {})(
...@@ -102,7 +102,7 @@ class Register extends React.Component { ...@@ -102,7 +102,7 @@ class Register extends React.Component {
{getFieldDecorator('username', { {getFieldDecorator('username', {
rules: [{ rules: [{
required: true, required: true,
message: messages['You can not use this username.'], message: messages['You-can-not-use-this-username.'],
pattern: /^[A-Za-z0-9_\u4E00-\u9FD5\u3400-\u4DBF\u{20000}-\u{2A6DF}\u{2A700}-\u{2CEAF}\uF900–\uFAFF\u{2F800}-\u{2FA1D}\uAC00–\uD7AF\u3040-\u30FF\u31F0–\u31FF\u{1B000}–\u{1B0FF}\u3005]+$/u, pattern: /^[A-Za-z0-9_\u4E00-\u9FD5\u3400-\u4DBF\u{20000}-\u{2A6DF}\u{2A700}-\u{2CEAF}\uF900–\uFAFF\u{2F800}-\u{2FA1D}\uAC00–\uD7AF\u3040-\u30FF\u31F0–\u31FF\u{1B000}–\u{1B0FF}\u3005]+$/u,
}], }],
}, {})( }, {})(
...@@ -112,7 +112,7 @@ class Register extends React.Component { ...@@ -112,7 +112,7 @@ class Register extends React.Component {
<FormItem hasFeedback> <FormItem hasFeedback>
{getFieldDecorator('password', { {getFieldDecorator('password', {
rules: [{ required: true, message: messages['Password length must be between 8 and 24 characters'], pattern: /^.{8,24}$/ }], rules: [{ required: true, message: messages['Password-length-must-be-between-8-and-24-characters.'], pattern: /^.{8,24}$/ }],
}, { }, {
validator: this.checkConfirm, validator: this.checkConfirm,
})( })(
...@@ -126,7 +126,7 @@ class Register extends React.Component { ...@@ -126,7 +126,7 @@ class Register extends React.Component {
<FormItem hasFeedback> <FormItem hasFeedback>
{getFieldDecorator('confirm', { {getFieldDecorator('confirm', {
rules: [{ rules: [{
required: true, message: messages['Password length must be between 8 and 24 characters'], pattern: /^.{8,24}$/, required: true, message: messages['Password-length-must-be-between-8-and-24-characters.'], pattern: /^.{8,24}$/,
}, { }, {
validator: this.checkPassword, validator: this.checkPassword,
}], }],
......
...@@ -71,7 +71,7 @@ class Reset extends React.Component { ...@@ -71,7 +71,7 @@ class Reset extends React.Component {
<FormItem> <FormItem>
{getFieldDecorator('confirm', { {getFieldDecorator('confirm', {
rules: [{ rules: [{
required: true, message: messages['Incorrect password.2'], required: true, message: messages['Incorrect-password.2'],
}, { }, {
validator: this.checkPassword, validator: this.checkPassword,
}], }],
......
import React from 'react'; import React, { PropTypes } from 'react';
import { connect } from 'dva'; import { connect } from 'dva';
import { FormattedMessage as Format } from 'react-intl';
import styles from './Verify.css'; import styles from './Verify.css';
import { Form, Input, Steps, Icon, Spin, Alert, Tag } from 'antd'; import { Form, Input, Steps, Icon, Spin, Alert, Tag } from 'antd';
import { routerRedux } from 'dva/router' import { routerRedux } from 'dva/router'
const FormItem = Form.Item; const FormItem = Form.Item;
import SubmitButton from '../components/SubmitButton' import SubmitButton from '../components/SubmitButton';
const Step = Steps.Step const Step = Steps.Step
class Verify extends React.Component { class Verify extends React.Component {
static contextTypes = {
intl: PropTypes.object.isRequired,
}
state = { state = {
isChangeEmail: false isChangeEmail: false
} }
...@@ -37,58 +41,59 @@ class Verify extends React.Component { ...@@ -37,58 +41,59 @@ class Verify extends React.Component {
dispatch({ type: 'user/updateEmail', payload: { email, password, user_id: id } }); dispatch({ type: 'user/updateEmail', payload: { email, password, user_id: id } });
}; };
render() { render(select) {
const { form, dispatch, user, checkEmail, isEmailExists, loading, input } = this.props const { form, dispatch, user, checkEmail, isEmailExists, loading, input } = this.props
const { getFieldDecorator } = form; const { getFieldDecorator } = form;
const { id, email } = user; const { id, email } = user;
const { intl: { messages } } = this.context
const emailProps = { const emailProps = {
fromItem: { fromItem: {
label: "修改邮箱", label: messages['reset-email'],
hasFeedback: true, hasFeedback: true,
validateStatus: checkEmail, validateStatus: checkEmail,
help: isEmailExists ? 'email exists' : '', help: isEmailExists ? messages.email_exists : '',
}, },
decorator: { decorator: {
initialValue: email initialValue: email
}, },
input: { input: {
placeholder: "email" placeholder: messages.email,
} }
} }
return ( return (
<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: '100%' }}> <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', height: '100%' }}>
<Spin spinning={loading} delay={100}> <Spin spinning={loading} delay={100}>
<Steps size="large" current={1}> <Steps size="large" current={1}>
<Step title="Register" icon={<Icon type="solution" />} /> <Step title={messages['sign-up']} icon={<Icon type="solution" />} />
<Step title="Verify Email" icon={<Icon type="mail" />} /> <Step title={messages['verify-email']} icon={<Icon type="mail" />} />
</Steps> </Steps>
{id && input["password"] ? {id && input["password"] ?
<Alert <Alert
style={{ marginTop: '24px' }} style={{ marginTop: '24px' }}
message={ message={
<div> <div>
<span style={{marginRight: '10px'}}>验证邮件已发送,请查收~</span> <span style={{marginRight: '10px'}}><Format id={'Your-account-has-been-created.'} /></span>
<Tag color="blue" onClick={this.onReSend}>重发</Tag> <Tag color="blue" onClick={this.onReSend}><Format id={'send-email2'} /></Tag>
<Tag color="orange" onClick={() => this.setState({ isChangeEmail: true })}> <Tag color="orange" onClick={() => this.setState({ isChangeEmail: true })}>
修改邮箱 <Format id={'reset-email'} />
</Tag> </Tag>
</div> </div>
} }
type="warning" type="warning"
showIcon showIcon
/> />
: :
<Alert <Alert
style={{ marginTop: '24px' }} style={{ marginTop: '24px' }}
message={ message={
<div> <div>
<span style={{marginRight: '10px'}}>您尚未登录,请先登录</span> <span style={{marginRight: '10px'}}><Format id={'Please-sign-in'} /></span>
<Tag color="blue" onClick={ () => dispatch(routerRedux.replace("/signin"))}>登录</Tag> <Tag color="blue" onClick={ () => dispatch(routerRedux.replace("/signin"))}><Format id={'sign-in'} /></Tag>
</div> </div>
} }
type="warning" type="warning"
...@@ -97,7 +102,7 @@ class Verify extends React.Component { ...@@ -97,7 +102,7 @@ class Verify extends React.Component {
} }
{ {
this.state.isChangeEmail && this.state.isChangeEmail &&
<Form onSubmit={this.onSubmit} className="login-form" style={{ marginTop: '24px' }}> <Form onSubmit={this.onSubmit} className="login-form" style={{ marginTop: '24px' }}>
<FormItem {...emailProps.fromItem}> <FormItem {...emailProps.fromItem}>
{getFieldDecorator('email', { ...emailProps.decorator })( {getFieldDecorator('email', { ...emailProps.decorator })(
...@@ -112,7 +117,7 @@ class Verify extends React.Component { ...@@ -112,7 +117,7 @@ class Verify extends React.Component {
</FormItem> </FormItem>
</Form> </Form>
} }
</Spin> </Spin>
</div> </div>
); );
...@@ -130,7 +135,7 @@ function mapStateToProps(state, props) { ...@@ -130,7 +135,7 @@ function mapStateToProps(state, props) {
return { return {
input, input,
user, user,
loading, loading,
checkEmail, checkEmail,
isEmailExists, isEmailExists,
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment