0.4.1 • Published 2 years ago

i18n-dom v0.4.1

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

i18n-dom

The most worry-free i18n tool in the browser.

Introduction

i18n-dom is a document-based multilingual tool. You only need to initialize the tool and use a default language at development time (no need to use any API or change the properties of the node), the page will automatically display the correct language based on the user's choice.

When you add nodes or modify nodes, the tool automatically converts the text to the correct language and displays it on the page.

⭐️ No need to assign a separate key to each text; ⭐️ The file size is very small, only 2KB. And you can get a smaller file size by opening gzip; ⭐️ Independent of framework, based on web api, can be used in browser environment.

Install

npm install i18n-dom

Load from CDN

<script src="https://unpkg.com/i18n-dom/dist/i18n-dom.min.js"></script>

You can access I18n through the global class I18nDOM

Usage

import I18nDOM from "i18n-dom";

const i18n = new I18nDOM({
  htmlLanguage: "en", // The language in which the web page is written
  resource: {
    en: ["Hello World!", "Second paragraph of text"],
    zh: ["你好世界!", "第二段文本"],
    ru: ["Привет, мир!", "Второй абзац текста"],
  },
});

Just use your default language normally in your code

<p>Hello World!</p>
<p><span></span></p>
<script>
  i18n.changeLanguage("zh"); // Change the language to zh
  document.querySelector("span").innerText = "Second paragraph of text"; // "第二段文本" will automatically appear on the page!
</script>

That's all!

Syntax

new I18nDOM(init);

Constructor

init

KeyDefaultDescription
resource{}The key is the language shorthand, and the value is an array containing all the text. The order of text needs to be consistent in different languages
attachNodedocument.bodyThe root node of the text node that needs to be translated
htmlLanguagedocument.documentElement.lang or enDefault language for web pages
languageauto detectThe current language of the page
fallbackLngfirst lang in resourceThe language to display when the detected language or the set language is not in the resource
detectionOption to detect the language displayed by default, see the detection section for details

API

i18n.changeLanguage(lang: string)

Change the language displayed on the page to lang.

Detection

By default, the tool will automatically detect the language that needs to be displayed, and automatically save the language selected by the user to localStorage.i18nDOMLng. The following are some detection options for you to adjust:

There are mainly six optional values: querystring, cookie, localStorage, sessionStorage, navigator, htmlTag

init.detection

KeyDefaultDescription
orderall five optional values in orderDetect the order of languages
lookupQuerystringlngUrl search key
lookupCookiei18n_domCookie key
lookupLocalStoragei18nDOMLngLocalStorage key
lookupSessionStoragei18nDOMLngSessionStorage key
caches"localStorage"The location where the language selected by the user needs to be saved, supports querystring、cookie、localStorage、sessionStorage

Macro

Macros are mainly used to solve some more complex functions or problems, such as synonyms, dynamic replacement text, etc.

  • Macros have a shorthand form. If you use shorthand, remember to use the shorthand form in resource as well.

I18NDOM_KEY

Shorthand: I18N_K

Fix translation errors caused by synonyms.

It is more common for the same text to have different meanings, such as animal:

const i18n = new I18nDOM({
  htmlLanguage: "en",
  resource: {
    en: ["animal", "animal"],
    zh: ["动物", "野兽"],
    ru: ["животное", "зверь"],
  },
});

Because there are two identical animals in the English list, there will be an error when switching languages.

The first solution, recommended, is not to use the same words, but to use synonyms instead, e.g.

const i18n = new I18nDOM({
  htmlLanguage: "en",
  resource: {
    en: ["animal", "beast"],
    zh: ["动物", "野兽"],
    ru: ["животное", "зверь"],
  },
});

The second way is to use I18NDOM_KEY. Add a special tag I18NDOM_KEY + KeyName to each language list for synonyms, e.g.

const i18n = new I18nDOM({
  htmlLanguage: "en",
  resource: {
    en: ["animal", "animal I18NDOM_KEY anyString"],
    zh: ["动物", "野兽 I18NDOM_KEY anyString"],
    ru: ["животное", "зверь I18NDOM_KEY anyString"],
  },
});

Then use the modified text in the code, the display will automatically hide the macro related content.

<span>animal</span> <span>animal I18NDOM_KEY anyString</span>

I18NDOM_DATA

Shorthand: I18N_D

There is dynamic data in the string.

In situations such as displaying user information, you may need to dynamically replace certain words in a sentence.

First, use the symbol % to wrap the content that needs to be dynamically replaced:

const i18n = new I18nDOM({
  htmlLanguage: "en",
  resource: {
    en: ["Welcome %name%! Your age is %age%"],
    zh: ["欢迎%name%!你的年龄是%age%"],
    ru: ["Добро пожаловать, %name%! Ваш возраст: %age%"],
  },
});

Then use I18NDOM_DATA to insert the data content in the code, dynamically replace the content behind name= and age=

<span
  >Welcome %name%! Your age is %age% I18NDOM_DATA name=Jay Chou I18N_D
  age=18</span
>

When you use some data-responsive frameworks like React, you need to use some hacks to combine the text into a node to use this macro, the following is used in react:

<span
  >{"Welcome %name%! Your age is %age% I18NDOM_DATA name=${name} I18NDOM_DATA
  age=${age}"}</span
>

I18NDOM_IGNORE

Shorthand: I18N_I

Sometimes you want a piece of text not to be affected by this tool, you can use this macro, it will prohibit all translation and interpolation operations, and only remove the macro-related content from the text when it is displayed

const i18n = new I18nDOM({
  htmlLanguage: "en", // The language in which the web page is written
  resource: {
    en: ["Hello World!"],
    zh: ["你好世界!"],
    ru: ["Привет, мир!"],
  },
});

The text below will not be automatically translated following language changes

<span>Hello World! I18NDOM_IGNORE</span>
<!-- use shorthand -->
<span>Hello World! I18N_I</span>

Need help or need more

You can visit the issue page of the code repository and leave a message, I will check it regularly.

Advanced use

🐑 If you run into problems or need more advanced features, check out the Macro section.

0.4.1

2 years ago

0.4.0

2 years ago

0.3.8

2 years ago

0.3.7

2 years ago

0.3.6

2 years ago

0.3.5

2 years ago

0.3.4

2 years ago

0.3.3

2 years ago

0.3.2

2 years ago

0.3.1

2 years ago

0.3.0

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.9

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.1

2 years ago