0.0.1 • Published 4 years ago
vk-io-i18n v0.0.1
vk-io-i18n
Internationalization middleware for vk-io.
Installation
npm install vk-io-i18nExample
yaml and json are ok
Example directory structure:
├── locales
│   ├── en.yaml
│   ├── en-US.yaml
│   ├── it.json
│   └── ru.yaml
└── index.tsimport { VK, MessageContext } from 'vk-io';
import { SessionManager } from '@vk-io/session';
import { I18n, I18nContext } from 'vk-io-i18n';
interface MyContext extends MessageContext {
    readonly i18n: I18nContext;
}
// I18n options
const i18n = new I18n({
  defaultLanguageOnMissing: true, // implies allowMissing = true
  directory: 'locales',
  useSession: true,
});
// Also you can provide i18n data directly
i18n.loadLocale('en', { greeting: 'Hello!' })
i18n.loadLocale('ru', { greeting: 'Привет, ${user.first_name}!' })
const vk = new VK({
    token: process.env['BOT_TOKEN']!,
});
const sessionManager = new SessionManager();
vk.updates.on('message_new', sessionManager.middleware);
vk.updates.on('message_new', i18n.middleware);
// Start message handler
vk.updates.on<MyContext>('message_new', async (ctx, next) => {
    if (ctx.text !== '/start') {
        return next();
    }
    const [user] = await vk.api.users.get({ user_ids: [ctx.senderId] });
    ctx.send(ctx.i18n.t('greeting', { user }));
});
vk.updates
    .start()
    .then(() => {
        console.log('Bot started');
    })
    .catch(console.error);A full example for vk-io are in the example folder.
User context
Commonly used Context functions:
bot.use((ctx) => {
  ctx.i18n.locale()                // Get current locale
  ctx.i18n.locale(code)            // Set current locale
  ctx.i18n.t(resourceKey, { data })  // Get resource value (data will be used by template engine)
});The code is taken from the grammyjs/i18n project
0.0.1
4 years ago