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 🙏

© 2025 – Pkg Stats / Ryan Hefner

eo-translatorjs

v3.1.1

Published

A simple javascript library for translating web content.

Readme

What is this?

TranslatorJS is a lightweight, very simple-to-use Javascript library that facilitates the process of translating web pages.

How does it work?

In most cases, all you need is a dictionary object and a function call.

Something that scares people away from using most of the other libraries is their unnecessary complexity, after all, we use libraries to avoid that excessive pain. EO Translator JS operates on very minimalistic controllers. All you need to do is instantiate a Translator object and set it for work.

const translator = new EOTranslator(dictionary: Object, language: string);

| dictionary (required) | language (optional) | | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | An object that contains all of the keys and their respective translations. | A string value that represents the default language. If none is provided, the document's lang attribute value is used, otherwise, the string en is set as the default language. |

Usage

In order to start using Translator JS, you should first include it on your HTML file;

<script src="eo-translator.js"></script>

<!-- or -->

<script src="eo-translator.min.js"></script>

Now, we need to create a dictionary, an object that stores all of our translations, grouped by language keys;

var dict = {
  ar: { greeting: 'مرحباً' }
  en: { greeting: 'Hello' },
  es: { greeting: 'Hola' },
  fr: { greeting: 'Bonjour' }
};

The name you choose for languages is important, in our case, they are ar, en, es, and fr indicating Arabic English, Espagnol and Français respectively. They could be called anything, however, for the sake of simplicity, we used those specific codes which can easily and universally be understood.

Then we instantiate a translator object;

var translator = new EOTranslator(dict);

Now, translating something is as simple as stating the target translation's key;

translator.translate("greeting");

The above would simply return the translation that matches the key greeting, but wait, what language are we targeting here? We did not specify any default language so TranslatorJS does some improvisation and takes the document's language that resides in the lang attribute on the html element. If there was none, then en is set as the default translation language. In our case, we should be expecting Hello as a return value.

If we so wanted to target a specific language all we have to do is instruct TranslatorJS about it as follows;

translator.translate("greeting", { lang: "ar" });

Simply that will return مرحباً. Notice how we forced the translator object to ignore the default language and use another that we specified with the translation function call, meaning that the default language is still en, and so to change it, we could have simply passed the desired default language to the object when we first instantiated it.

// Setting the default language to Spanish.
var translator = new EOTranslator(dict, "es");

We can also change the default language on runtime by directly passing a valid string value to the language property of the translator object.

// Setting the default language to French on runtime.
translator.language = "fr";

The same goes for the dictionary if we so wanted:

var // Creating a dictionary object
	dict1 = {
		en: { home: "Home" },
		fr: { home: "Maison" },
	},
	// Creating another dictionary object
	dict2 = {
		en: { home: "House" },
		fr: { home: "Bâtiment" },
	};

// Creating a translator object with `dict1` as a dictionary
// and `en` (English) as a default language
var translator = new EOTranslator(dict1, "en");

// Returns `Home`
translator.translate("home");

// Changing the dictionary
translator.dictionary = dict2;

// Returns `House`
translator.translate("home");

// Changing the default language
translator.language = "fr";

// Returns `Bâtiment`
translator.translate("home");

// Returns `House`
translator.translate("home", { lang: "en" });

Translating an invalid key outputs the input key, unless a fallback value has been specified.

// Creating a dictionary object
var dict = {
	en: { home: "Home" },
	fr: { home: "Maison" },
};

// Creating a translator object
var translator = new EOTranslator(dict, "en");

// Returns `not-home` as no matching key in the dictionary was found
translator.translate("not-home");

// Returns `Fallback value`
translator.translate("not-home", { fallback: "Fallback value" });

Nested keys are a big part of what makes TranslatorJS fun to use without sacrificing its simple usability.

// Creating a dictionary object
var dict = {
	en: {
		home: "Home",
		a: {
			b: {
				c: {
					d: "Nested value 1",
					e: "Nested value 2",
					f: {
						g: "Nested value 3",
					},
				},
			},
		},
	},
};

// Creating a translator object
var translator = new EOTranslator(dict);

// Returns `Nested value 1`
translator.translate("a.b.c.d");

// Returns `Nested value 3`
translator.translate("a.b.c.f.g");

// Returns `a.b.c.f.g.h` as no matching key(s) was found
translator.translate("a.b.c.f.g.h");

Another powerful feature that comes with TranslatorJS is embedding parameters.

// Creating a dictionary object
var dict = {
	en: { greeting: "Hello, {name}!" },
};

// Creating a translator object
var translator = new EOTranslator(dict);

// Returns `Hello, Jeff!`
translator.translate("greeting", { params: { name: "Jeff" } });

Using TranslatorJS on a DOM element is just as simple. Mark the target element or elements that you want to translate the contents of, and then leave the rest for TranslatorJS.

<!-- The eo-translator attribute is the marker that tells TranslatorJS to translate the element, the value that's passed to it is the translation key -->

<!-- eo-translator-params holds the parameters. It must be valid JSON object. -->
<span
	id="target"
	eo-translator="greeting"
	eo-translator-params='{ "name": "Luffy" }'
></span>

<script>
	// Creating a dictionary object
	var dict = {
		en: { greeting: "Hello, {name}!" },
	};

	// Creating a translator object
	var translator = new EOTranslator(dict);

	// Getting the HTML element
	var target = document.getElementById("target");

	// Translating the element
	translator.translateElement(target);
</script>

Or you can simply translate the entire document;

translator.translateDOM();

But wait, what about parsing HTML that's present in a translation? Easy;

TranslatorJS also allows for dictionary manipulation, such as adding, removing and updating translations at runtime;

<!-- The eo-translator-html attribute is the marker that tells TranslatorJS to parse HTML -->
<span
	id="target"
	eo-translator="greeting"
	eo-translator-html="true"
	eo-translator-params='{ "name": "Luffy" }'
></span>

<script>
	// Creating a dictionary object
	var dict = {
		en: { greeting: "Hello, <b>{name}</b>!" },
	};

	// Creating a translator object
	var translator = new EOTranslator(dict);

	// Getting the HTML element
	var target = document.getElementById("target");

	// Translating the element
	translator.translateElement(target);
</script>

Or you can simply translate the entire document;

// Creating a dictionary object
var dict = {
	en: { tr1: "Translation 1" },
	fr: {
		tr1: "Traduction 1",
		nested: { tr: "Traduction imbriqué" },
	},
};

// Creating a translator object
var translator = new EOTranslator(dict);

// Adding an English translation with the key “tr2”
translator.add("en", "tr2", "Translation 2");

// Updating the English translation that matches the key “tr1”
translator.add("en", "tr1", "Updated translation 1");

// Adding a nested French translation
translator.add("fr", "a.b.c", "Nouveau Traduction imbriqué!");

// Removing a translation from the French language group
translator.remove("fr", "nested.tr");

The dictionary object after all of the previous alterations:

{
	"en": {
		"tr1": "Updated translation 1",
		"tr2": "Translation 2"
	},
	"fr": {
		"tr1": "Traduction 1",
		"nested": {},
		"a": { "b": { "c": "Nouveau Traduction imbriqué!" } }
	}
}

Credits

Icon made by Freepik from Flaticon and is licensed by Creative Commons BY 3.0.