Skip to content

Commit

Permalink
Fix lang attribute in Html element to correctly reflect locale
Browse files Browse the repository at this point in the history
  • Loading branch information
maeshinshin committed Jul 3, 2024
1 parent 3f3243f commit 678d201
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions apps/app/src/pages/_document.page.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
/* eslint-disable @next/next/google-font-display */
import React from 'react';

import { Lang } from '@growi/core';
import type { DocumentContext, DocumentInitialProps } from 'next/document';
import Document, {
Html, Head, Main, NextScript,
} from 'next/document';

import type { GrowiPluginResourceEntries } from '~/features/growi-plugin/server/services';
import type { CrowiRequest } from '~/interfaces/crowi-request';
import { configManager } from '~/server/service/config-manager';
import { detectLocaleFromBrowserAcceptLanguage } from '~/server/util/locale-utils';
import loggerFactory from '~/utils/logger';

const logger = loggerFactory('growi:page:_document');
Expand Down Expand Up @@ -41,14 +44,24 @@ interface GrowiDocumentProps {
customCss: string | null,
customNoscript: string | null,
pluginResourceEntries: GrowiPluginResourceEntries;
locale: string;
}
declare type GrowiDocumentInitialProps = DocumentInitialProps & GrowiDocumentProps;

class GrowiDocument extends Document<GrowiDocumentInitialProps> {

static override async getInitialProps(ctx: DocumentContext): Promise<GrowiDocumentInitialProps> {

const langMap = {
[Lang.ja_JP]: 'ja-jp',
[Lang.en_US]: 'en-us',
[Lang.zh_CN]: 'zh-cn',
[Lang.fr_FR]: 'fr-fr',
};

const initialProps: DocumentInitialProps = await Document.getInitialProps(ctx);
const { crowi } = ctx.req as CrowiRequest;
const req: CrowiRequest = ctx.req as CrowiRequest;
const { crowi, user, headers } = req;
const { customizeService } = crowi;

const { themeHref } = customizeService;
Expand All @@ -60,13 +73,17 @@ class GrowiDocument extends Document<GrowiDocumentInitialProps> {
const growiPluginService = await import('~/features/growi-plugin/server/services').then(mod => mod.growiPluginService);
const pluginResourceEntries = await growiPluginService.retrieveAllPluginResourceEntries();

const locale = user == null ? langMap[detectLocaleFromBrowserAcceptLanguage(headers)]
: langMap[user.lang ?? configManager.getConfig('crowi', 'app:globalLang') as Lang ?? Lang.en_US];

return {
...initialProps,
themeHref,
customScript,
customCss,
customNoscript,
pluginResourceEntries,
locale,
};
}

Expand Down Expand Up @@ -95,10 +112,11 @@ class GrowiDocument extends Document<GrowiDocumentInitialProps> {
const {
customCss, customScript, customNoscript,
themeHref, pluginResourceEntries,
locale,
} = this.props;

return (
<Html>
<Html lang={locale}>
<Head>
{this.renderCustomScript(customScript)}
<link rel="stylesheet" key="link-theme" href={themeHref} />
Expand Down

0 comments on commit 678d201

Please sign in to comment.