ryoji-s 2 лет назад
Родитель
Сommit
5ab17827c4

+ 3 - 0
apps/app/public/static/locales/en_US/translation.json

@@ -850,5 +850,8 @@
     "show_wip_page": "Show WIP",
     "size_s": "Size: S",
     "size_l": "Size: L"
+  },
+  "create_page": {
+    "untitled": "Untitled"
   }
 }

+ 3 - 0
apps/app/public/static/locales/ja_JP/translation.json

@@ -883,5 +883,8 @@
     "show_wip_page": "WIP を表示",
     "size_s": "サイズ: S",
     "size_l": "サイズ: L"
+  },
+  "create_page": {
+    "untitled": "無題のページ"
   }
 }

+ 3 - 0
apps/app/public/static/locales/zh_CN/translation.json

@@ -853,5 +853,8 @@
     "show_wip_page": "显示 WIP",
     "size_s": "尺寸: S",
     "size_l": "尺寸: L"
+  },
+  "create_page": {
+    "untitled": "Untitled"
   }
 }

+ 4 - 7
apps/app/src/pages/utils/commons.ts

@@ -1,5 +1,5 @@
 import type { ColorScheme, IUserHasId } from '@growi/core';
-import { Lang, AllLang } from '@growi/core';
+import { AllLang } from '@growi/core';
 import { DevidedPagePath } from '@growi/core/dist/models';
 import { isServer } from '@growi/core/dist/utils';
 import type { GetServerSideProps, GetServerSidePropsContext } from 'next';
@@ -17,7 +17,7 @@ import type { UserUISettingsDocument } from '~/server/models/user-ui-settings';
 import {
   useCurrentProductNavWidth, useCurrentSidebarContents, usePreferCollapsedMode,
 } from '~/stores/ui';
-import { detectLocaleFromBrowserAcceptLanguage } from '~/utils/locale-utils';
+import { determineLocale } from '~/utils/locale-utils';
 
 export type CommonProps = {
   namespacesRequired: string[], // i18next
@@ -120,12 +120,9 @@ export const getNextI18NextConfig = async(
 ): Promise<SSRConfig> => {
 
   const req: CrowiRequest = context.req as CrowiRequest;
-  const { crowi, user, headers } = req;
-  const { configManager } = crowi;
+  const { user, headers } = req;
 
-  // determine language
-  const locale = user == null ? detectLocaleFromBrowserAcceptLanguage(headers)
-    : (user.lang ?? configManager.getConfig('crowi', 'app:globalLang') as Lang ?? Lang.en_US);
+  const locale = determineLocale(headers, user);
 
   const namespaces = ['commons'];
   if (namespacesRequired != null) {

+ 10 - 12
apps/app/src/server/routes/apiv3/page/create-page.ts

@@ -1,5 +1,7 @@
-import type { IPage, IUser, IUserHasId } from '@growi/core';
-import { allOrigin, Lang } from '@growi/core';
+import { allOrigin } from '@growi/core';
+import type {
+  IPage, IUser, IUserHasId, Lang,
+} from '@growi/core';
 import { ErrorV3 } from '@growi/core/dist/models';
 import { isCreatablePage, isUserPage, isUsersHomepage } from '@growi/core/dist/utils/page-path-utils';
 import { attachTitleHeader, normalizePath } from '@growi/core/dist/utils/path-utils';
@@ -7,6 +9,7 @@ import type { Request, RequestHandler } from 'express';
 import type { ValidationChain } from 'express-validator';
 import { body } from 'express-validator';
 import mongoose from 'mongoose';
+// import { i18n } from 'next-i18next';
 
 import { SupportedAction, SupportedTargetModel } from '~/interfaces/activity';
 import type { IApiv3PageCreateParams } from '~/interfaces/apiv3';
@@ -20,7 +23,7 @@ import {
 import type { PageDocument, PageModel } from '~/server/models/page';
 import PageTagRelation from '~/server/models/page-tag-relation';
 import { configManager } from '~/server/service/config-manager';
-import { detectLocaleFromBrowserAcceptLanguage } from '~/utils/locale-utils';
+import { determineLocale } from '~/utils/locale-utils';
 import loggerFactory from '~/utils/logger';
 
 import { apiV3FormValidator } from '../../../middlewares/apiv3-form-validator';
@@ -41,12 +44,9 @@ async function generateUntitledPath(parentPath: string, basePathname: string, in
 }
 
 async function determinePath(locale: Lang, _parentPath?: string, _path?: string, optionalParentPath?: string): Promise<string> {
-  const basePathnames = {
-    [Lang.en_US]: 'Untitled',
-    [Lang.ja_JP]: '無題のページ',
-    [Lang.zh_CN]: 'Untitled',
-  };
-  const basePathname = basePathnames[locale] || 'Untitled';
+  // const t = i18n?.getFixedT(locale);
+  // const basePathname = t?.('create_page.untitled') || 'Undefined';
+  const basePathname = 'Undefined';
 
   if (_path != null) {
     const path = normalizePath(_path);
@@ -214,9 +214,7 @@ export const createPageHandlersFactory: CreatePageHandlersFactory = (crowi) => {
       try {
         const { path, parentPath, optionalParentPath } = req.body;
 
-        // determine language
-        const locale = req.user == null ? detectLocaleFromBrowserAcceptLanguage(req.headers)
-          : (req.user.lang ?? configManager.getConfig('crowi', 'app:globalLang') as Lang ?? Lang.en_US);
+        const locale = determineLocale(req.headers, req.user);
 
         pathToCreate = await determinePath(locale, parentPath, path, optionalParentPath);
       }

+ 10 - 1
apps/app/src/utils/locale-utils.ts

@@ -1,9 +1,13 @@
 import type { IncomingHttpHeaders } from 'http';
 
+import type { IUser, IUserHasId } from '@growi/core';
 import { Lang } from '@growi/core';
+import type { Document } from 'mongoose';
 
 import * as nextI18NextConfig from '^/config/next-i18next.config';
 
+import { configManager } from '~/server/service/config-manager';
+
 const ACCEPT_LANG_MAP = {
   en: Lang.en_US,
   ja: Lang.ja_JP,
@@ -26,7 +30,7 @@ const getPreferredLanguage = (sortedAcceptLanguagesArray: string[]): Lang => {
   * Detect locale from browser accept language
   * @param headers
   */
-export const detectLocaleFromBrowserAcceptLanguage = (headers: IncomingHttpHeaders): Lang => {
+const detectLocaleFromBrowserAcceptLanguage = (headers: IncomingHttpHeaders): Lang => {
   // 1. get the header accept-language
   // ex. "ja,ar-SA;q=0.8,en;q=0.6,en-CA;q=0.4,en-US;q=0.2"
   const acceptLanguages = headers['accept-language'];
@@ -57,3 +61,8 @@ export const detectLocaleFromBrowserAcceptLanguage = (headers: IncomingHttpHeade
 
   return getPreferredLanguage(sortedAcceptLanguagesArray);
 };
+
+export const determineLocale = (headers: IncomingHttpHeaders, user?: IUserHasId | (IUser & Document<any, any, any>)): Lang => {
+  return user == null ? detectLocaleFromBrowserAcceptLanguage(headers)
+    : (user.lang ?? configManager.getConfig('crowi', 'app:globalLang') as Lang ?? Lang.en_US);
+};