lobe-chat

Форк
0
/
translation.ts 
50 строк · 1.5 Кб
1
'use server';
2

3
import { get } from 'lodash-es';
4
import { cookies } from 'next/headers';
5
import { existsSync, readFileSync } from 'node:fs';
6
import { join } from 'node:path';
7

8
import { DEFAULT_LANG, LOBE_LOCALE_COOKIE } from '@/const/locale';
9
import { Locales, NS, normalizeLocale } from '@/locales/resources';
10
import { isDev } from '@/utils/env';
11

12
export const getLocale = async (hl?: string): Promise<Locales> => {
13
  if (hl) return normalizeLocale(hl) as Locales;
14
  const cookieStore = cookies();
15
  const defaultLang = cookieStore.get(LOBE_LOCALE_COOKIE);
16
  return (defaultLang?.value || DEFAULT_LANG) as Locales;
17
};
18

19
export const translation = async (ns: NS = 'common', hl?: string) => {
20
  let i18ns = {};
21
  const lng = await getLocale(hl);
22
  try {
23
    let filepath = join(process.cwd(), `locales/${normalizeLocale(lng)}/${ns}.json`);
24
    const isExist = existsSync(filepath);
25
    if (!isExist)
26
      filepath = join(
27
        process.cwd(),
28
        `locales/${normalizeLocale(isDev ? 'zh-CN' : DEFAULT_LANG)}/${ns}.json`,
29
      );
30
    const file = readFileSync(filepath, 'utf8');
31
    i18ns = JSON.parse(file);
32
  } catch (e) {
33
    console.error('Error while reading translation file', e);
34
  }
35

36
  return {
37
    locale: lng,
38
    t: (key: string, options: { [key: string]: string } = {}) => {
39
      if (!i18ns) return key;
40
      let content = get(i18ns, key);
41
      if (!content) return key;
42
      if (options) {
43
        Object.entries(options).forEach(([key, value]) => {
44
          content = content.replace(`{{${key}}}`, value);
45
        });
46
      }
47
      return content;
48
    },
49
  };
50
};
51

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.