mirror of
https://github.com/mattermost/mattermost.git
synced 2026-10-13 01:25:24 +08:00
Merge pull request #1955 from mattermost/PLT-7-client-user-loc
Plt 7 client user loc
This commit is contained in:
@@ -118,7 +118,8 @@ package:
|
||||
mkdir -p $(DIST_PATH)/web/static/js
|
||||
cp -L web/static/js/*.min.js $(DIST_PATH)/web/static/js/
|
||||
cp -L web/static/js/*.min.js.map $(DIST_PATH)/web/static/js/
|
||||
cp -RL web/static/js/react-intl-2.0.0-beta-2 $(DIST_PATH)/web/static/js/
|
||||
cp -RL web/static/js/intl-1.0.0 $(DIST_PATH)/web/static/js/
|
||||
cp -RL web/static/js/react-intl-2.0.0-beta-2 $(DIST_PATH)/web/static/js/
|
||||
cp -RL web/static/i18n $(DIST_PATH)/web/static
|
||||
cp -RL web/static/config $(DIST_PATH)/web/static
|
||||
cp -RL web/static/css $(DIST_PATH)/web/static
|
||||
@@ -141,6 +142,7 @@ package:
|
||||
|
||||
sed -i'.bak' 's|react-0.14.3.js|react-0.14.3.min.js|g' $(DIST_PATH)/web/templates/head.html
|
||||
sed -i'.bak' 's|react-dom-0.14.3.js|react-dom-0.14.3.min.js|g' $(DIST_PATH)/web/templates/head.html
|
||||
sed -i'.bak' 's|Intl.js|Intl.min.js|g' $(DIST_PATH)/web/templates/head.html
|
||||
sed -i'.bak' 's|react-intl.js|react-intl.min.js|g' $(DIST_PATH)/web/templates/head.html
|
||||
sed -i'.bak' 's|jquery-2.1.4.js|jquery-2.1.4.min.js|g' $(DIST_PATH)/web/templates/head.html
|
||||
sed -i'.bak' 's|bootstrap-3.3.5.js|bootstrap-3.3.5.min.js|g' $(DIST_PATH)/web/templates/head.html
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
import * as Client from '../../utils/client.jsx';
|
||||
import * as Utils from '../../utils/utils.jsx';
|
||||
|
||||
export default class ManageLanguage extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.setupInitialState = this.setupInitialState.bind(this);
|
||||
this.setLanguage = this.setLanguage.bind(this);
|
||||
this.changeLanguage = this.changeLanguage.bind(this);
|
||||
this.submitUser = this.submitUser.bind(this);
|
||||
this.state = this.setupInitialState(props);
|
||||
}
|
||||
setupInitialState(props) {
|
||||
var user = props.user;
|
||||
return {
|
||||
languages: Utils.languages(),
|
||||
locale: user.locale
|
||||
};
|
||||
}
|
||||
setLanguage(e) {
|
||||
this.setState({locale: e.target.value});
|
||||
}
|
||||
changeLanguage(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var user = this.props.user;
|
||||
var locale = this.state.locale;
|
||||
|
||||
user.locale = locale;
|
||||
|
||||
this.submitUser(user);
|
||||
}
|
||||
submitUser(user) {
|
||||
Client.updateUser(user,
|
||||
() => {
|
||||
window.location.reload(true);
|
||||
},
|
||||
(err) => {
|
||||
let serverError;
|
||||
if (err.message) {
|
||||
serverError = err.message;
|
||||
} else {
|
||||
serverError = err;
|
||||
}
|
||||
this.setState({serverError});
|
||||
}
|
||||
);
|
||||
}
|
||||
render() {
|
||||
let serverError;
|
||||
if (this.state.serverError) {
|
||||
serverError = <label className='has-error'>{this.state.serverError}</label>;
|
||||
}
|
||||
|
||||
const options = [];
|
||||
this.state.languages.forEach((lang) => {
|
||||
options.push(
|
||||
<option
|
||||
key={lang.value}
|
||||
value={lang.value}
|
||||
>
|
||||
{lang.name}
|
||||
</option>);
|
||||
});
|
||||
|
||||
return (
|
||||
<div key='changeLanguage'>
|
||||
<br/>
|
||||
<label className='control-label'>{'Change interface language'}</label>
|
||||
<div className='padding-top'>
|
||||
<select
|
||||
ref='language'
|
||||
className='form-control'
|
||||
value={this.state.locale}
|
||||
onChange={this.setLanguage}
|
||||
>
|
||||
{options}
|
||||
</select>
|
||||
{serverError}
|
||||
<div className='padding-top'>
|
||||
<a
|
||||
className={'btn btn-sm btn-primary'}
|
||||
href='#'
|
||||
onClick={this.changeLanguage}
|
||||
>
|
||||
{'Set language'}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
ManageLanguage.propTypes = {
|
||||
user: React.PropTypes.object
|
||||
};
|
||||
@@ -5,7 +5,9 @@ import {savePreferences} from '../../utils/client.jsx';
|
||||
import SettingItemMin from '../setting_item_min.jsx';
|
||||
import SettingItemMax from '../setting_item_max.jsx';
|
||||
import Constants from '../../utils/constants.jsx';
|
||||
const PreReleaseFeatures = Constants.PRE_RELEASE_FEATURES;
|
||||
import PreferenceStore from '../../stores/preference_store.jsx';
|
||||
import ManageLanguages from './manage_languages.jsx';
|
||||
import * as Utils from '../../utils/utils.jsx';
|
||||
|
||||
function getDisplayStateFromStores() {
|
||||
@@ -78,6 +80,7 @@ export default class UserSettingsDisplay extends React.Component {
|
||||
let clockSection;
|
||||
let nameFormatSection;
|
||||
let fontSection;
|
||||
let languagesSection;
|
||||
|
||||
if (this.props.activeSection === 'clock') {
|
||||
const clockFormat = [false, false];
|
||||
@@ -292,6 +295,48 @@ export default class UserSettingsDisplay extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
if (Utils.isFeatureEnabled(PreReleaseFeatures.LOC_PREVIEW)) {
|
||||
if (this.props.activeSection === 'languages') {
|
||||
var inputs = [];
|
||||
inputs.push(
|
||||
<ManageLanguages
|
||||
user={this.props.user}
|
||||
key='languages-ui'
|
||||
/>
|
||||
);
|
||||
|
||||
languagesSection = (
|
||||
<SettingItemMax
|
||||
title={'Language'}
|
||||
width='medium'
|
||||
inputs={inputs}
|
||||
updateSection={(e) => {
|
||||
this.updateSection('');
|
||||
e.preventDefault();
|
||||
}}
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
var locale = 'English';
|
||||
Utils.languages().forEach((l) => {
|
||||
if (l.value === this.props.user.locale) {
|
||||
locale = l.name;
|
||||
}
|
||||
});
|
||||
|
||||
languagesSection = (
|
||||
<SettingItemMin
|
||||
title={'Language'}
|
||||
width='medium'
|
||||
describe={locale}
|
||||
updateSection={() => {
|
||||
this.updateSection('languages');
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className='modal-header'>
|
||||
@@ -324,6 +369,7 @@ export default class UserSettingsDisplay extends React.Component {
|
||||
<div className='divider-dark'/>
|
||||
{nameFormatSection}
|
||||
<div className='divider-dark'/>
|
||||
{languagesSection}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -451,6 +451,10 @@ export default {
|
||||
EMBED_PREVIEW: {
|
||||
label: 'embed_preview',
|
||||
description: 'Show preview snippet of links below message'
|
||||
},
|
||||
LOC_PREVIEW: {
|
||||
label: 'loc_preview',
|
||||
description: 'Show user language in display settings'
|
||||
}
|
||||
},
|
||||
OVERLAY_TIME_DELAY: 400,
|
||||
|
||||
@@ -1340,3 +1340,18 @@ export function clearFileInput(elm) {
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
|
||||
export function languages() {
|
||||
return (
|
||||
[
|
||||
{
|
||||
value: 'en',
|
||||
name: 'English'
|
||||
},
|
||||
{
|
||||
value: 'es',
|
||||
name: 'Español'
|
||||
}
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
Executable
+697
File diff suppressed because one or more lines are too long
Executable
+3256
File diff suppressed because it is too large
Load Diff
Executable
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+696
File diff suppressed because one or more lines are too long
+2205
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2199
File diff suppressed because it is too large
Load Diff
+2199
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2240
File diff suppressed because it is too large
Load Diff
+2238
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2238
File diff suppressed because it is too large
Load Diff
+2240
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2238
File diff suppressed because it is too large
Load Diff
+2238
File diff suppressed because it is too large
Load Diff
+2238
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2240
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2238
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2239
File diff suppressed because it is too large
Load Diff
+2208
File diff suppressed because it is too large
Load Diff
+2208
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2199
File diff suppressed because it is too large
Load Diff
+2199
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2196
File diff suppressed because it is too large
Load Diff
+2196
File diff suppressed because it is too large
Load Diff
+2205
File diff suppressed because it is too large
Load Diff
+2205
File diff suppressed because it is too large
Load Diff
+2199
File diff suppressed because it is too large
Load Diff
+2205
File diff suppressed because it is too large
Load Diff
+2215
File diff suppressed because it is too large
Load Diff
+2215
File diff suppressed because it is too large
Load Diff
+2215
File diff suppressed because it is too large
Load Diff
+2207
File diff suppressed because it is too large
Load Diff
+2207
File diff suppressed because it is too large
Load Diff
+2207
File diff suppressed because it is too large
Load Diff
+2199
File diff suppressed because it is too large
Load Diff
+2199
File diff suppressed because it is too large
Load Diff
+2211
File diff suppressed because it is too large
Load Diff
+2211
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2196
File diff suppressed because it is too large
Load Diff
+2196
File diff suppressed because it is too large
Load Diff
+2196
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2204
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2203
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2200
File diff suppressed because it is too large
Load Diff
+2207
File diff suppressed because it is too large
Load Diff
+2207
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user