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

narp

v5.0.2

Published

The worlds best super translation manager package handler

Downloads

16

Readme

narp narp

A workflow utility to ease localization in JS(X) apps by automizing the following steps:

narp push

  1. Extraction of strings from source code (react-gettext-parser)
  2. Merging upstream and local translations in order to support translations in branches (pot-merge)
  3. Uploading POT resources to the translation service you use (Transifex or POEditor)

narp pull

  1. Download PO translations from the translation service
  2. Converting PO to JSON (gettext-parser)
  3. Writing the JSON translations to where you want it

The JSON translations are formatted for node-gettext.

Installation

To use it easily, install narp globally with:

npm install -g narp

To use it in an automatization pipeline in your project, install it as a dev dependency:

npm install --save-dev narp

Usage

Using the CLI

# get help
narp -h
# extract + merge pots + upload pot
narp push [<credentials>] [--fresh]
# download po's + convert to json + write to file
narp pull [<credentials>]
# extract messages to stdout (no password required)
narp extract [./path/to/comps]

Optionally put a path as arg 2 to just extract from the folder. Protip, pipe to file if you want to use it.

Using the API

import { push, pull } from 'narp';

const configs = {
  /* all the configs */
};

push(configs).then(/* ... */).catch(/* ... */);

pull(configs).then(/* ... */).catch(/* ... */);

Configuration

Options

This is the shape of narp's configuration. It can be provided as an object to the pull() and push() functions, or defined as a JSON object in .narprc.

{
  // The vendor object differs depending on the vendor
  "vendor": {
    
    // The name of the translation service you use.
    // Must be "transifex" or "poeditor"
    "name": "pick one"

    // Credentials used to make authorized HTTP requests.
    // See the section below on how to provide passwords
    // and tokens.
    "credentials": {
      // POEditor/Transifex token
      "token": "do not store this in a file"
    },

    // The vendor.options object contain project specific
    // options, some of which differ depending on the vendor
    "options": {
      // Transifex only: The organization slug
      "organization": "organization-slug",

      // Project ID.
      "project": "project-id",

      // The source language code. This corresponds to whatever
      // the vendor is naming it as.
      "sourceLanguage": "en",
      
      // Transifex only: The slug of the resource
      "resource": null,
    }
  },

  // Configs that are passed to react-gettext-parser
  "extract": {

    // A glob string (npmjs.com/glob) that matches all source files
    // that may contain translatable strings.
    "source": null,

    // The rest of the `extract` configs are passed directly to
    // react-gettext-parser, see the react-gettext-parser readme.
    "componentPropsMap": { /* react-gettext-parser defaults */ },
    "funcArgumentsMap": { /* react-gettext-parser defaults */ },
    "trim": false,
    "trimLines": false,
    "trimNewlines": false,
  },

  // Where to put all the translations
  "output": "messages.json",

  // Whether the extracted strings should be uploaded without 
  // being merged with the current upstream source strings, 
  // thus replacing it
  "fresh": false,

  // If true, will output debug information to the console
  "verbose": false
}

How to provide credentials

You will have to provide different credentials depending on the translation service you use. Transifex requires a username and password, whilst POEditor requires an API token.

Authorizing to Transifex

There are three ways of providing an API token:

a. Via the --token argument b. Via the NARP_VENDOR_TOKEN environment variable c. Via the vendor.credentials.token config passed to the API functions

Never store secret tokens in your code!

Authorizing to POEditor

There are three ways of providing an API token:

a. Via the --token argument b. Via the NARP_VENDOR_TOKEN environment variable c. Via the vendor.credentials.token config passed to the API functions

Never store secret tokens in your code!

.narprc

.narprc is narp's configuration file. Any configurations you put there will be parsed and applied whenever you use narp.

Migrations

Migrating from v2 to v3

v3 introduced vendors, which replaces the hard-coded Transifex support with a modularised vendor support, adding POEditor into the mix. To transition your Transifex configuration, you change .narprc from

{
  "transifex": {
    "username": "yourusername",
    "project": "yourproject",
    "resource": "yourresource",
    "sourceLang": "xx"
  },
  // More configs...
}

to

{
  "vendor": {
    "name": "transifex",
    "credentials": {
      "username": "yourusername"
    },
    "options": {
      "project": "yourproject",
      "resource": "yourresource",
      "sourceLanguage": "xx" // Note that this key is different
    }
  },
  // More configs...
}

Migrating from v3 to v5

Updated to use the new Transifex API. Change .narprc from

{
  "vendor": {
    "name": "transifex",
    "credentials": {
      "username": "yourusername"
    },
    "options": {
      "project": "yourproject",
      "resource": "yourresource",
      "sourceLanguage": "xx" // Note that this key is different
    }
  },
  // More configs...
}

to

{
  "vendor": {
    "name": "transifex",
    "options": {
      "organization": "yourorganization",
      "project": "yourproject",
      "resource": "yourresource",
      "sourceLanguage": "xx" // Note that this key is different
    }
  },
  // More configs...
}

Development

Creating builds

# Create a build from source
npm run build

# Build continuously as you save files
npm run build -- --watch

Making it globally available while testing

cd path/to/narp && npm link

Releases

Follow semver when bumping the version number, commit it and run

npm publish