2016-06-02 16:47:26 -03:00
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import React from 'react' ;
import * as I18n from 'i18n/i18n.jsx' ;
import AdminSettings from './admin_settings.jsx' ;
2016-08-04 13:32:57 -05:00
import { FormattedMessage , FormattedHTMLMessage } from 'react-intl' ;
2016-06-02 16:47:26 -03:00
import SettingsGroup from './settings_group.jsx' ;
import DropdownSetting from './dropdown_setting.jsx' ;
import MultiSelectSetting from './multiselect_settings.jsx' ;
export default class LocalizationSettings extends AdminSettings {
constructor ( props ) {
super ( props ) ;
this . getConfigFromState = this . getConfigFromState . bind ( this ) ;
this . renderSettings = this . renderSettings . bind ( this ) ;
this . canSave = this . canSave . bind ( this ) ;
const locales = I18n . getAllLanguages ( ) ;
this . state = Object . assign ( this . state , {
hasErrors : false ,
languages : Object . keys ( locales ) . map ( ( l ) => {
return { value : locales [ l ] . value , text : locales [ l ] . name } ;
} )
} ) ;
}
canSave ( ) {
2016-06-15 09:10:38 -03:00
return this . state . availableLocales . join ( ',' ) . indexOf ( this . state . defaultClientLocale ) !== - 1 || this . state . availableLocales . length === 0 ;
2016-06-02 16:47:26 -03:00
}
getConfigFromState ( config ) {
config . LocalizationSettings . DefaultServerLocale = this . state . defaultServerLocale ;
config . LocalizationSettings . DefaultClientLocale = this . state . defaultClientLocale ;
config . LocalizationSettings . AvailableLocales = this . state . availableLocales . join ( ',' ) ;
return config ;
}
2016-07-06 16:07:56 -04:00
getStateFromConfig ( config ) {
return {
defaultServerLocale : config . LocalizationSettings . DefaultServerLocale ,
defaultClientLocale : config . LocalizationSettings . DefaultClientLocale ,
availableLocales : config . LocalizationSettings . AvailableLocales ? config . LocalizationSettings . AvailableLocales . split ( ',' ) : [ ]
} ;
}
2016-06-02 16:47:26 -03:00
renderTitle ( ) {
return (
< h3 >
< FormattedMessage
2016-06-29 14:16:17 -04:00
id = 'admin.general.localization'
defaultMessage = 'Localization'
2016-06-02 16:47:26 -03:00
/ >
< / h3 >
) ;
}
renderSettings ( ) {
return (
2016-06-29 14:16:17 -04:00
< SettingsGroup >
2016-06-02 16:47:26 -03:00
< DropdownSetting
id = 'defaultServerLocale'
values = { this . state . languages }
label = {
< FormattedMessage
id = 'admin.general.localization.serverLocaleTitle'
defaultMessage = 'Default Server Language:'
/ >
}
value = { this . state . defaultServerLocale }
onChange = { this . handleChange }
helpText = {
< FormattedMessage
id = 'admin.general.localization.serverLocaleDescription'
2016-06-06 09:48:39 -04:00
defaultMessage = 'Default language for system messages and logs. Changing this will require a server restart before taking effect.'
2016-06-02 16:47:26 -03:00
/ >
}
/ >
< DropdownSetting
id = 'defaultClientLocale'
values = { this . state . languages }
label = {
< FormattedMessage
id = 'admin.general.localization.clientLocaleTitle'
defaultMessage = 'Default Client Language:'
/ >
}
value = { this . state . defaultClientLocale }
onChange = { this . handleChange }
helpText = {
< FormattedMessage
id = 'admin.general.localization.clientLocaleDescription'
2016-06-06 09:48:39 -04:00
defaultMessage = "Default language for newly created users and pages where the user hasn't logged in."
2016-06-02 16:47:26 -03:00
/ >
}
/ >
< MultiSelectSetting
id = 'availableLocales'
values = { this . state . languages }
label = {
< FormattedMessage
id = 'admin.general.localization.availableLocalesTitle'
defaultMessage = 'Available Languages:'
/ >
}
selected = { this . state . availableLocales }
onChange = { this . handleChange }
helpText = {
2016-08-04 13:32:57 -05:00
< FormattedHTMLMessage
2016-06-02 16:47:26 -03:00
id = 'admin.general.localization.availableLocalesDescription'
2016-08-04 13:32:57 -05:00
defaultMessage = 'Set which languages are available for users in Account Settings (leave this field blank to have all supported languages available).<br /><br />Would like to help with translations? Join the <a href="http://translate.mattermost.com/" target="_blank">Mattermost Translation Server</a> to contribute.'
2016-06-02 16:47:26 -03:00
/ >
}
noResultText = {
< FormattedMessage
id = 'admin.general.localization.availableLocalesNoResults'
defaultMessage = 'No results found'
/ >
}
notPresent = {
< FormattedMessage
id = 'admin.general.localization.availableLocalesNotPresent'
defaultMessage = 'The default client language must be included in the available list'
/ >
}
/ >
< / SettingsGroup >
) ;
}
2016-06-06 09:48:39 -04:00
}