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

i18n-cleaner

v0.0.3

Published

Checks for missing translations in your source code, and unused translations in your locale JSON files.

Downloads

10

Readme

i18n Cleaner

Checks for missing translations in your source code, and unused translations in your locale JSON files.

If your website or application supports multiple languages you probably use a library to manage these translations like:

Over time the locale JSON files contain keys which are not used anymore and the source contains keys which are missing in the translation files.

This project helps to detect:

  • If a translation key used in the source code is missing
  • If a translation key in the JSON file is not used in the code

And reports them in your console.

Acknowlegements

Special thanks to @christiaanvaneijk for reviewing my code!

Todo

There is still some work I might implement some day:

  • Check for differences between the JSON locale files.

Example projects

The test folder contains example projects where some translations are missing.

Currently there are two example projects:

  • VUE npm run example:vue
  • Angular npm run example:angular

Example output

image

Running the project

In order to run i18n-cleaner you have to create a config file e.g. i18n-cleaner.conf.json

This project uses a JSON file as its configuration. Here you define your source folder, filters and locale files. In the test folder there is an example config file i18n-cleaner.valid.conf.json

Use node src/index.js i18n-cleaner.conf.json to run the i18n-cleaner

Or run one of the example projects:

  • VUE npm run example:vue which outputs:

image

  • Angular npm run example:angular which outputs:

image

Configuration file options

Example config:

{
  "extensions": ["vue", "ts"],
  "i18nFilters": [
    "(\\ |\"|\\()t\\([\"'](.*)[\"'](.*)\\)",
    "pageTitleTranslationKey:(.*)[\"']"
  ],
  "locales": [
    "./i18n/en.json", 
    "./i18n/nl.json", 
    "./i18n/de.json"
  ],
  "localesFormat": "json",
  "srcFolder": "./src"
}

extensions

Array with the file extensions that should be scanned

"extensions": ["vue", "ts"]

i18nFilters

Array with JSON escaped regex strings to filter the source with.

You can use for example this JSON escaper to escape your regexes.

This example is beging used for to filter the example .vue files in the test folder. I use RegEx 101 to compose the correct regexes.

"i18nFilters": [
    "(\\ |\"|\\()t\\([\"'](.*)[\"'](.*)\\)",
    "pageTitleTranslationKey:(.*)\\\""
]

Please take in mind that some regexes filter more than you wish. I first thought that filtering t( was enough. Till I noticed that split( was included as well.

The same goes with single and double quotes.

locales

Array with path(s) to locale files. The first defined locale is considered to be the reference/main locale.

  "locales": [
    "./i18n/en.json", 
    "./i18n/nl.json", 
    "./i18n/de.json"
  ],

localesFormat

String with locales format. Currently only json is supported

  "localesFormat": "json",

srcFolder

String with path pointing to the source code folder

  "srcFolder": "./src"