1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/geekact-i18n-chain

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Конечно, вот перевод текста на русский язык:

Всегда копируете и вставляете дублирующийся код i18n, такой как t('home:submit') или t('common:something:success')? Это замедляет работу, и легко допустить опечатку, если не перепроверять слова внимательно.

Мне такой подход не нравится, я предпочитаю писать код в виде цепочки, например, i18n.common.something.success, с проверкой на TypeScript. Так почему бы не попробовать этот пакет?

Совместимость

IE Edge Chrome Firefox Safari Node
9+ 12+ 5+ 4+ 5+ *

Определение локалей

// ./src/i18n/locales/en.ts

const en = {
  button: {
    submit: 'Submit',
    cancel: 'Go back',
  },
  user: {
    profile: 'Tom',
  }
};

export default en;
export type Locale = typeof en;
// ./src/i18n/locales/zh.ts

import { Locale } from './en';

const zh: Locale = {
  button: {
    submit: '提交',
    cancel: '返回',
  },
  user: {
    profile: '原罪',
  }
};

export default zh;

Создание экземпляра i18n

// ./src/i18n/index.ts

import { createI18n } from '@i18n-chain/*';
import en from './locales/en';

const i18n = createI18n({
  defaultLocale: {
    key: 'en',
    values: en,
  }
});

export default i18n;

Импорт локалей

Первый способ — определить сразу.

import { createI18n } from '@i18n-chain/*';
import zh from './locales/zh';

const i18n = createI18n({
  defaultLocale: { ... },
});

i18n._.define('zh', zh);

export default i18n;

Второй способ — асинхронный импорт. загрузчик будет вызываться, когда локали не определены.

const i18n = createI18n({
  defaultLanguage: { ... },
  loader: (name) => import('./locales/' + name),
});

export default i18n;

Переключение локали

i18n._.locale('zh');

Строковый литерал

Не стесняйтесь попробовать i18n._.t('button.submit') и i18n.button.submit, они имеют тот же эффект. К сожалению, вы не можете наслаждаться проверкой типов, используя chain._.t('xx.yy.zz').

Шаблон с параметрами

Вы должны использовать массив для определения шаблона, когда параметры существуют.

const en = {
  property: ['{{property1}}template{{property2}}', { property1: value2, property2: value2 }],
};

Второй элемент в массиве — это объект, который является значением по умолчанию для шаблона.

const en = {
  user: {
    profile: [
      'My name is {{name}}, I born in {{country}}, I am {{age}} old now, my birthday is {{birthday}}',
      {
        country: undefined,
        name: 'Tom',
        age: (value: number = 20) => {
          if (value <= 1) {
            return `${value} year`;
          } else {
            return `${value} years`;
          }
        },
        birthday: (value: Date) => {
          return value.toString();
        }
      }
    ]
  }
};

////////////////////////////////////
// Приведённый выше код эквивалентен определению ниже (автоматически): (автоматически)
interface User {
  Profile {
    country: string | number;
    name?: string;
    age?: number;
    birthday: Date;
  }
}
/////////////////////////////////////

// Минимальная конфигурация
i18n.user.profile({
  age: 20,
  country: 'China',
});

// Добавление необязательного свойства `name`
i18n.user.profile({
  age: 30,
  country: 'Usa',
  name: 'Lucy',
});

Основное различие между методом age и birthday заключается в том, что age имеет значение параметра по умолчанию (value: number = 20) => {...}, а birthday — нет. Необязательно вводить значение для свойства, у которого есть значение параметра функции по умолчанию.


Установите undefined для свойства, если вы хотите принудительно ввести значение при вызове метода.

const en = {
  template: ['Hello, {{world}}', { world: undefined }]
};

Другое использование

Платформы I18n
React & React-Native @i18n-chain/react
Vue Скоро...
Angular Скоро...
Taro @i18n-chain/taro
NodeJs & Vanilla-Js @i18n-chain/core

Демоверсии

React I18n

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/geekact-i18n-chain.git
git@api.gitlife.ru:oschina-mirror/geekact-i18n-chain.git
oschina-mirror
geekact-i18n-chain
geekact-i18n-chain
master