فهرست منبع

refactor: unify documentation URL locale logic

- Add getDocumentationLocale() to locale-utils.ts for type-safe
  docs language resolution from i18n language codes
- Fix PageCreateModal bug: i18n.language returns 'ja_JP' not 'ja',
  so === 'ja' always fell through to 'en'
- Replace hardcoded URL construction with useGrowiDocumentationUrl
  hook + getDocumentationLocale helper

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
VANELLOPE\tomoyuki-t 5 روز پیش
والد
کامیت
9d986186b4
2فایلهای تغییر یافته به همراه17 افزوده شده و 7 حذف شده
  1. 6 7
      apps/app/src/client/components/PageCreateModal.tsx
  2. 11 0
      apps/app/src/utils/locale-utils.ts

+ 6 - 7
apps/app/src/client/components/PageCreateModal.tsx

@@ -21,12 +21,14 @@ import { debounce } from 'throttle-debounce';
 import { useCreateTemplatePage } from '~/client/services/create-page';
 import { useCreatePage } from '~/client/services/create-page/use-create-page';
 import { useToastrOnError } from '~/client/services/use-toastr-on-error';
-import { useCurrentUser, useGrowiCloudUri } from '~/states/global';
+import { useGrowiDocumentationUrl } from '~/states/context';
+import { useCurrentUser } from '~/states/global';
 import { isSearchServiceReachableAtom } from '~/states/server-configurations';
 import {
   usePageCreateModalActions,
   usePageCreateModalStatus,
 } from '~/states/ui/modal/page-create';
+import { getDocumentationLocale } from '~/utils/locale-utils';
 
 import PagePathAutoComplete from './PagePathAutoComplete';
 
@@ -38,7 +40,7 @@ const PageCreateModal: React.FC = () => {
   const { t, i18n } = useTranslation();
 
   const currentUser = useCurrentUser();
-  const growiCloudUri = useGrowiCloudUri();
+  const documentationUrl = useGrowiDocumentationUrl();
 
   const { isOpened, path: pathname = '' } = usePageCreateModalStatus();
   const { close: closeCreateModal } = usePageCreateModalActions();
@@ -72,11 +74,8 @@ const PageCreateModal: React.FC = () => {
     [userHomepagePath, t, now],
   );
 
-  const templateHelpLang = i18n.language === 'ja' ? 'ja' : 'en';
-  const templateHelpUrl =
-    growiCloudUri != null
-      ? `https://growi.cloud/help/${templateHelpLang}/guide/features/template.html`
-      : `https://docs.growi.org/${templateHelpLang}/guide/features/template.html`;
+  const docsLang = getDocumentationLocale(i18n.language);
+  const templateHelpUrl = `${documentationUrl}/${docsLang}/guide/features/template.html`;
 
   const [todayInput, setTodayInput] = useState('');
   const [pageNameInput, setPageNameInput] = useState(pageNameInputInitialValue);

+ 11 - 0
apps/app/src/utils/locale-utils.ts

@@ -42,3 +42,14 @@ export const getLocale = (langCode: string): Locale => {
 
   return locale ?? enUS;
 };
+
+/**
+ * Gets the documentation site language code from an i18next language code.
+ * Only 'ja' and 'en' are supported on the GROWI documentation site.
+ * @param langCode The i18n language code (e.g., 'ja_JP').
+ * @returns 'ja' or 'en', defaulting to 'en' if not Japanese.
+ */
+export const getDocumentationLocale = (langCode: string): 'ja' | 'en' => {
+  const baseCode = langCode.split(/[-_]/)[0];
+  return baseCode === 'ja' ? 'ja' : 'en';
+};