index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import React, {Component} from 'react';
  2. import ReactDOM from 'react-dom';
  3. import './index.css';
  4. import App from './app/App'
  5. import * as serviceWorker from './serviceWorker';
  6. import ApolloClient from "apollo-boost";
  7. import {ApolloProvider} from "react-apollo";
  8. import {IntlProvider, addLocaleData} from 'react-intl';
  9. //如果浏览器没有自带intl,则需要在使用npm安装intl之后添加如下代码
  10. // import intl from 'intl';
  11. import zh from 'react-intl/locale-data/zh';
  12. import en from 'react-intl/locale-data/en';
  13. import zh_CN from './language/zh_CN.js';
  14. import en_US from './language/en_US.js';
  15. import {graphqlUrl} from "./config";
  16. addLocaleData([...en, ...zh]);
  17. const client = new ApolloClient({
  18. // uri: "http://service-eucrnpse-1254337200.ap-guangzhou.apigateway.myqcloud.com/release/graphql"
  19. uri: graphqlUrl
  20. });
  21. let browserLanguage = (navigator.language || navigator.browserLanguage).toLowerCase().split('-')[0];
  22. let language = browserLanguage === 'zh'? "中文" : "English";
  23. class MainApp extends Component {
  24. constructor() {
  25. super();
  26. sessionStorage.setItem("language", language);
  27. this.state = {
  28. language: sessionStorage.getItem("language")
  29. };
  30. }
  31. changeLanguage = (language) => {
  32. // console.log("index changeLanguage",language);
  33. this.setState({
  34. language: language
  35. });
  36. };
  37. chooseLocale = (language) => {
  38. let locale, messages;
  39. switch (language) {
  40. case "English":
  41. locale = 'en';
  42. messages = en_US;
  43. return {locale, messages};
  44. case "中文":
  45. locale = 'zh';
  46. messages = zh_CN;
  47. return {locale, messages};
  48. default:
  49. locale = 'zh';
  50. messages = zh_CN;
  51. return {locale, messages};
  52. }
  53. };
  54. render() {
  55. let {language} = this.state;
  56. let {locale, messages} = this.chooseLocale(language);
  57. return (
  58. <ApolloProvider client={client}>
  59. <IntlProvider locale={locale} messages={messages}>
  60. <App language={language} changeLanguage={this.changeLanguage}/>
  61. </IntlProvider>
  62. </ApolloProvider>
  63. )
  64. }
  65. }
  66. ReactDOM.render(<MainApp/>, document.getElementById('root'));
  67. serviceWorker.unregister();