index.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import React, {Component} from 'react';
  2. import ReactDOM from 'react-dom';
  3. import './index.css';
  4. import DevelopVersion from './app/developVersion/DevelopVersion';
  5. import App from './app/App';
  6. import * as serviceWorker from './serviceWorker';
  7. import {BrowserRouter as Router, Route, Link, Switch, Redirect} from "react-router-dom";
  8. import ApolloClient from "apollo-boost";
  9. import {ApolloProvider} from "react-apollo";
  10. import {IntlProvider, addLocaleData} from 'react-intl';
  11. //如果浏览器没有自带intl,则需要在使用npm安装intl之后添加如下代码
  12. // import intl from 'intl';
  13. import zh from 'react-intl/locale-data/zh';
  14. import en from 'react-intl/locale-data/en';
  15. import zh_CN from './language/zh_CN.js';
  16. import en_US from './language/en_US.js';
  17. import {graphqlUrl} from "./config";
  18. import BasicVersion from "./app/basicVersion/BasicVersion";
  19. import Login from "./login/Login";
  20. import Ticket from "./ticket/Ticket";
  21. addLocaleData([...en, ...zh]);
  22. const client = new ApolloClient({
  23. uri: graphqlUrl
  24. });
  25. let browserLanguage = (navigator.language || navigator.browserLanguage).toLowerCase().split('-')[0];
  26. let language = browserLanguage === 'zh' ? "中文" : "English";
  27. class MainApp extends Component {
  28. constructor() {
  29. super();
  30. sessionStorage.setItem("language", language);
  31. this.state = {
  32. language: sessionStorage.getItem("language")
  33. };
  34. }
  35. changeLanguage = (language) => {
  36. // console.log("index changeLanguage",language);
  37. this.setState({
  38. language: language
  39. });
  40. };
  41. chooseLocale = (language) => {
  42. let locale, messages;
  43. switch (language) {
  44. case "English":
  45. locale = 'en';
  46. messages = en_US;
  47. return {locale, messages};
  48. case "中文":
  49. locale = 'zh';
  50. messages = zh_CN;
  51. return {locale, messages};
  52. default:
  53. locale = 'zh';
  54. messages = zh_CN;
  55. return {locale, messages};
  56. }
  57. };
  58. render() {
  59. let {language} = this.state;
  60. let {locale, messages} = this.chooseLocale(language);
  61. let ownProps = {
  62. language,
  63. changeLanguage: this.changeLanguage
  64. };
  65. const PrivateRoute = ({component: Component, ownProps, ...rest}) => (
  66. <Route {...rest} render={(props) => {
  67. return <Component {...ownProps} {...props}/>
  68. }}/>
  69. );
  70. return (
  71. <ApolloProvider client={client}>
  72. <IntlProvider locale={locale} messages={messages}>
  73. <Router>
  74. <Switch>
  75. <Route exact path="/" component={App}/>
  76. <PrivateRoute path="/developer" ownProps={ownProps} component={DevelopVersion}/>
  77. <PrivateRoute path="/common" ownProps={ownProps} component={BasicVersion}/>
  78. <Route path="/login" component={Login}/>
  79. <Route path="/ticket" component={Ticket}/>
  80. </Switch>
  81. </Router>
  82. </IntlProvider>
  83. </ApolloProvider>
  84. )
  85. }
  86. }
  87. ReactDOM.render(<MainApp/>, document.getElementById('root'));
  88. serviceWorker.unregister();