npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

yuansa-i18n

v0.2.0-beta.1.2

Published

YuanSa internationalization display tools

Downloads

8

Readme

yuansa-i18n

Notice: This is an experimental package with no reliable testing so it may has unknown bugs. You are warmly welcomed to use it to test and report bugs~ Thank you!

A tool that helps you to auto config manage react-intl. By several simple configuration like "your locale file url", you will be able to use react-intl, no more frustrating contexts settings needed.

yuansa-i18n will enable you to:

  • Manage locales with hooks
  • Have fallbacks when Text's key is missing
  • Fetch texts conditionally and remotely
  • Cache user's locale preference in window.localStorage (Will use window.navigator.language as fallback locale if no defaultLocale found)

Get Started

  1. Install yuansa-i18n by running the following command:

    # if you use npm as your package manager, run:
    npm install --save yuansa-i18n
    
    # if you use yarn as your package manager, run:
    yarn add yuansa-i18n
    
    # if you use pnpm as your package manager, run:
    pnpm add yuansa-i18n

    But if you are using a monorepo, please refer to the document of your monorepo engine to get the right command.

  2. Wrap your APP with I18nProvider from yuansa-i18n and pass your configuration to it:

    import { FC } from "react";
    import { I18nProvider } from "yuansa-i18n";
    import { enUS, zhCN, esMX } from "@/locale";
    
    const i18nConfig = {
      remoteI18nDictURLMap: {
        "en-US": "/locale/en-US.json",
        "zh-CN": "/locale/zh-CN.json",
        "es-MX": "/locale/es-MX.json",
      },
      localeI18nDictMap: {
        "en-US": enUS,
        "zh-CN": zhCN,
        "es-MX": esMX,
      },
      defaultLocale: "en-US",
    };
    
    const APP: FC = () => (
      <I18nProvider {...i18nConfig}>
        <MyAPP />
      </I18nProvider>
    );
  3. You can use i18n from yuansa-i18n or traditional intl from react-intl in your APP as you wish.

    import { useIntl } from "react-intl";
    import { useI18n } from "yuansa-i18n";
    
    // Traditional `useIntl`
    const ExampleA = () => {
      const intl = useIntl();
    
      return intl.formatMessage({ id: "example" });
    };
    
    // Get i18n states from `useI18n().i18n`
    // You can also get `intl` from `useI18n()`
    const ExampleB = () => {
      const { i18n, intl } = useI18n();
      const { locale, setLocale, isLoadingRemoteI18nDict } = i18n;
    
      return (
        <>
          <span>Current lang: {locale}</span>
          <button onClick={() => setLocale("zh-CN")}>
            {intl.formatMessage({
              id: isLoadingRemoteI18nDict ? "loading" : "change_lang",
            })}
          </button>
        </>
      );
    };

Manual

Customize Locale Normalizer (Deserializer)

TODO

Use Local Locale

TODO

Customize LocalStorage Key

TODO

Choose Fallback Behavior when Fetching the New Locale

TODO

Use Remote Locale Files

TODO

Catch Error when Fetching Remote Locale Files

TODO