Как определить сообщения с помощью react-i18next

Я хотел бы задать вопрос о том, предоставляет ли react-i18next способ определять сообщения как реакция-между

Я хочу сначала определить все свои сообщения, а затем использовать i18next-scanner для извлечения в файл json.

Заранее благодарим за помощь в этом вопросе.


person Duy Phan    schedule 19.07.2020    source источник


Ответы (1)


Через некоторое время исследований. Я бы уступил место тому, кто захочет определять сообщения в таком messages.js. Кстати, я использую i18nxt-scanner для извлечения сообщений в файл JSON.

i18next-scanner.config.js

module.exports = {
  input: [
    'src/app/**/*.{js,jsx}',
    // Use ! to filter out files or directories
    '!app/**/*.spec.{js,jsx}',
    '!app/i18n/**',
    '!**/node_modules/**',
  ],
  output: './',
  options: {
    debug: true,
    removeUnusedKeys: true,
    func: {
      list: ['getTranslationId'],
      extensions: ['.js', '.tsx'],
    },
    lngs: ['en', 'ko'],
    ns: ['translation'],
    defaultLng: 'en',
    defaultNs: 'translation',
    defaultValue: '',
    resource: {
      loadPath: 'src/locales/{{lng}}/{{ns}}.json',
      savePath: 'src/locales/{{lng}}/{{ns}}.json',
      jsonIndent: 2,
      lineEnding: '\n',
    },
    nsSeparator: false, // namespace separator
    keySeparator: false, // key separator
    interpolation: {
      prefix: '{{',
      suffix: '}}',
    },
  },
};

messages.js

import { getTranslationId } from 'locales/utils';

const messages = {
  title: getTranslationId('Homepage_title', {
    defaultValue: 'hello, {{name}}',
  }),
  count: getTranslationId('Homepage_count', {
    defaultValue: '{{count}} time',
    count: 0, // for plurals
  }),
};

export default messages;

locales/utils.js

export const getTranslationId = id => {
  if (!id || !id.includes('_'))
    throw new Error('ID pattern should be "BLOCK_ElEMENT"');
  return id;
};

Извлечение команды

yarn run i18next-scanner

Надеюсь это поможет! :D

person Duy Phan    schedule 25.07.2020