🚀 DAY 5 OF LAUNCH WEEK: Introducing Socket Firewall Enterprise.Learn more →
Socket
Book a DemoInstallSign in
Socket

@locmod/intl

Package Overview
Dependencies
Maintainers
2
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@locmod/intl

This is lightweight copycat of `react-intl` package with minimal functionality

latest
Source
npmnpm
Version
1.0.5
Version published
Weekly downloads
105
61.54%
Maintainers
2
Weekly downloads
 
Created
Source

Intl

This is lightweight copycat of react-inlt package with minimal functionality.

Note: For now we have only EN locale and there is no requirements to extract translations to json. All translations injected to js bundle.

Installation

Add /// <reference types="@locmod/intl" /> into your next-env.d.ts

import React from 'react'
import { IntlProvider, Message } from 'intl'

const messages = {
  title: {
    en: 'Hello World',
  },
}

const App = () => (
  <IntlProvider locale="en">
    <Message value={messages.title} />
  </IntlProvider>
)

Message Declaration

All intl messages should be written separately from components in messages.ts.

const messages = {
  title: {
    en: 'Hello World',
  },
  content: {
    en: 'Hello, <b>{username}</b>',
  },
}

<Message />

import { Message } from 'intl'
import messages from './messages'

const App = () => {
  const username = 'John Doe'

  const contentMessage = useMemo(() => ({
    ...messages.content, 
    values: { username },
  }), [])

  return (
    <div>
      <Message value={messages.title} />
      <Message value={contentMessage} />
    </div>
  )
}

Component Props

value - string | IntlMessage
html - boolean, "false" by default

<Message /> is ended component and like tags can receive any additional attribute.

<Message value={message} html />

intl.formatMessage

We shouldn't wrap intl.formatMessage with useMemo because its value based on locale. Intl makes optimizations inside itself.

import { useIntl } from 'intl'
import messages from './messages'

const App = () => {
  const intl = useIntl()

  const title = intl.formatMessage(messages.title)
  const content = intl.formatMessage(messages.content)

  return (
    <div>
      {title}
      <span dangerouslySetInnerHTML={{ __html: content }} />
    </div>
  )
}

Warning: Please use <Message /> when it's possible, and avoid of using intl.formatMessage when it's not necessary.

Message Syntax

Simple Arguments

'Hello, <b>{username}</b>'

formatMessage(message, { username: 'John Doe' })  // Hello, <b>John Doe</b>

Formatted Arguments

Sometimes you'd like to use conditions inside text based on passed value. The most case is plurals. There are couple of formulas:

'{count} {count, plural, one {product} other {products}}'

formatMessage(message, { count: 0 })  // 0 products
formatMessage(message, { count: 1 })  // 1 product
'{count, plural, one {# product} other {# products}}'

formatMessage(message, { count: 0 })  // 0 products
formatMessage(message, { count: 1 })  // 1 product
'Get free {gender, select, female {perfume} male {cologne}}'

formatMessage(message, { gender: 'female' })  // Get free perfume
formatMessage(message, { gender: 'male' })    // Get free cologne
formatMessage(message, { gender: null })      // Get free
'{gender, select, female {perfume} male {cologne} other {fragrance}}'

formatMessage(message, { gender: 'female' })  // perfume
formatMessage(message, { gender: 'male' })    // cologne
formatMessage(message, { gender: null })      // fragrance

React Component Arguments

A message can contain react components. To render them as components but not strings <Message /> component should be used

import Icon from 'components/Icon/Icon'
import Link from 'components/Link/Link'

const message = { 
  en: 'Read our <Icon /> <Link to="{docsLink}">docs</Link>',
  values: { docsLink: '/docs' },
  components: { Icon, Link },
}

return (
  <Message value={message} />
)

Keywords

intl

FAQs

Package last updated on 11 Oct 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts