Skip to content

Commit

Permalink
add language support in ssr
Browse files Browse the repository at this point in the history
  • Loading branch information
im6 committed Dec 18, 2019
1 parent baa412e commit 173a518
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 22 deletions.
2 changes: 1 addition & 1 deletion client/context/LangContainer.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { connect } from 'react-redux';
import { LanguageContextProvider } from './LanguageContext';
import { LanguageContextProvider } from '../../isomorphic/LanguageContext';

const mapStateToProps = ({ user }) => {
return {
Expand Down
2 changes: 1 addition & 1 deletion client/modules/color/components/OneColor/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import Box from '../Box';
import style from './style.sass';
import noop from '../../../../../isomorphic/noop';
import { LanguageContext } from '../../../../context/LanguageContext';
import { LanguageContext } from '../../../../../isomorphic/LanguageContext';

class OneColor extends React.Component {
constructor(props) {
Expand Down
2 changes: 1 addition & 1 deletion client/modules/layout/Header/Header.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Link } from 'react-router-dom';
import style from './style.sass';
import TranslationIcon from './TranslationIcon';
import LanguageDropdown from '../../../../isomorphic/LanguageDropdown';
import { LanguageContext } from '../../../context/LanguageContext';
import { LanguageContext } from '../../../../isomorphic/LanguageContext';

class Header extends React.Component {
constructor(props) {
Expand Down
2 changes: 1 addition & 1 deletion client/modules/newcolor/components/NewColor/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { ChromePicker } from 'react-color';
import EditCanvas from '../EditCanvas';
import style from './style.sass';
import { LanguageContext } from '../../../../context/LanguageContext';
import { LanguageContext } from '../../../../../isomorphic/LanguageContext';

const DEFAULTVALUE = '#81EEFF';

Expand Down
2 changes: 1 addition & 1 deletion dist/server.js

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import React from 'react';
import { translation } from '../../isomorphic/translation';
import { translation } from './translation';

export const LanguageContext = React.createContext();
export class LanguageContextProvider extends React.Component {
render() {
const lang = translation[this.props.lang] || translation.en;
return (
<LanguageContext.Provider value={translation[this.props.lang]}>
<LanguageContext.Provider value={lang}>
{this.props.children}
</LanguageContext.Provider>
);
Expand Down
7 changes: 6 additions & 1 deletion server/middlewares/render.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,16 @@ import { renderToString, renderToStaticMarkup } from 'react-dom/server';
import { PUBLIC_PATH } from '../config';
import Html from '../modules/Html';
import App from '../modules/App';
import { LanguageContextProvider } from '../../isomorphic/LanguageContext';

const version = uuid.v1().substring(0, 8);

export default (req, res) => {
const app = <App url={req.path} />;
const app = (
<LanguageContextProvider lang={req.cookies.lang}>
<App url={req.path} />
</LanguageContextProvider>
);
const appHtml = renderToString(app);
const htmlDOM = (
<Html
Expand Down
37 changes: 23 additions & 14 deletions server/modules/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,20 @@ import PropTypes from 'prop-types';

import noop from '../../isomorphic/noop';
import ColorLoading from '../../isomorphic/ColorLoading';
import { LanguageContext } from '../../isomorphic/LanguageContext';
import LanguageDropdown from '../../isomorphic/LanguageDropdown';
import TranslationIcon from '../../client/modules/layout/Header/TranslationIcon';

const selectClassName = '_1-i7j';

const App = ({ url }) => {
const selectPopular = url === '/popular';
const selectLatest = url in { '/latest': true, '/': true };
class App extends React.Component {
render() {
const { url } = this.props;
const selectPopular = url === '/popular';
const selectLatest = url in { '/latest': true, '/': true };
const language = this.context;

return (
return (
<div className="Cqiyx">
<nav
className="navbar is-fixed-top"
Expand Down Expand Up @@ -48,33 +52,37 @@ const App = ({ url }) => {
}`}
href="/popular"
>
Popular
{language.popular}
</a>
<a
className={`navbar-item ${selectLatest ? selectClassName : ''}`}
href="/latest"
>
Latest
{language.latest}
</a>
<div className="navbar-item has-dropdown is-hoverable">
<a className="navbar-link">More</a>
<a className="navbar-link">
{language.more}
</a>
<div className="navbar-dropdown">
<a className="navbar-item" href="//www.colorpk.com">
ColorPK v2.0
</a>
<a className="navbar-item" href="//www.colorpk.com/about">
About
{language.about}
</a>
<hr className="navbar-divider" />
<a className="navbar-item" href="//github.com/im6/vp/issues">
Report an issue
{language.reportIssue}
</a>
</div>
</div>
<div className="navbar-item has-dropdown is-hoverable">
<a className="navbar-link">
<TranslationIcon />
<span className="_3QtW-">Language</span>
<span className="_3QtW-">
{language.language}
</span>
</a>
<LanguageDropdown onChange={noop} />
</div>
Expand All @@ -83,7 +91,7 @@ const App = ({ url }) => {
<div className="navbar-item">
<div className="buttons">
<a className="button is-primary" href="/new">
New Color
{language.newColor}
</a>
&nbsp;&nbsp;
</div>
Expand All @@ -92,12 +100,13 @@ const App = ({ url }) => {
</div>
</nav>
<ColorLoading url={url} />
</div>
);
};
</div>)
}
}

App.propTypes = {
url: PropTypes.string.isRequired,
};
App.contextType = LanguageContext;

export default App;

0 comments on commit 173a518

Please sign in to comment.