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

google-spreadsheet-translation-sync

v1.4.1

Published

A plugin to read and write i18n translationsfrom and to google spreadsheets

Downloads

389

Readme

node-google-spreadsheet-translation-sync

Build Status

A plugin to read and write i18n translations from and to google spreadsheets

Installation

npm install google-spreadsheet-translation-sync

Usage

const gsTransSync = require('google-spreadsheet-translation-sync');

// export to a spreadsheet
gsTransSync.exportToSpreadsheet(['de.json', 'en.json'], options, callback);

// or import from a spreadsheet
gsTransSync.importFromSpreadsheet('your/folder', { spreadsheetId: 'xxxxxxx'}, function () {
    // done :)
});

On the Google spreadsheets side, this needs to have the following structure:

|key|default|de|en|... any other locale| # | |---|---|---|---|---|---| |test.something|Test Schlüssel|Test Key|****||

Please not the line <locale> # <comment> - # <comment> will be ignored in uploads and downloads, so you can put some information for your translators into the google doc (They will do it anyway, so this way you don't need to remove the comment before import).

Options

options.credentials

Type: Object
Default value: Credentials for [email protected]

In order to authenticate to a google spreadsheet, you need a google drive api client.

If you trust me enough, you could also grant read/write access to your translation spreadsheet the the default service email [email protected]. Please note, that this will make you dependent on any changes that google or myself do to this service, it is recommended to use your own credentials.

The object needs to have this structure:

{
  "comment": "This is added by me, put here some info for yourself, to remind you what this is actually about, if you like ;)",

  "type": "service_account",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "never to be shared",
  "client_email": "e.g.: [email protected]",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "..."
}

options.defaultLocaleName

Type: String
Default value: 'default'

If no locale is provided or could be parsed, the defaultLocaleName is used instead.

options.defaultFallback

Type: Boolean
Default value: false

Fills empty collumns automatically with the value from the defaultLocale - usefull if always complete translations have to be provided per file.

options.fileBaseName

Type: String
Default value: (empty string)

If set, the translation files will be changed to <fileNaseName>-<lang code>_<country code>, for example myplugin-de_AT.

options.mode

Type: Enum
Default value: null

Put import, if you want to sync from google spreadsheet to your project or put upload if it should go the other way around.

options.namespaces

Type: Boolean
Default value: false

If multiple base filenames are used in a project, this can be turned on, to still have the properties uploaded to one spreadsheet. It will expect the first collumn of the sheet to be filled with the namespace.

options.namespaceSeparator

Type: String
Default value: '-'

If namespaces or fileBaseName is used, this is the separating character. For example the first _ in messages_en_US.json.

options.translationFormat

Type: Enum
Possible Values:

  • locale_json (translations are stored in simple key/value json files)
  • json_structure (translations are stored in a json tree, where the keys are split by the . character)
  • gettext (utilizes node gettext-parser for the work with po and mo files)
  • wordpress (utilizes node gettext-parser for the work with po and mo files) and adds additionally the new wordpress 6.5+ .l10n.php structure for faster parsing
  • properties (utilizes propertie-reader for java property files)
  • yml (utilizes js-yaml for symfony yaml translation files) Default value: locale_json

Please feel free to create a PR or open an issue, if you need an additional translation format.

options.spreadsheetId

Type: String
Default value: null

This is absolutely required to make it work

options.gid

Type: String
Default value: 0

Allows to connect to a dedicated worksheet of the spreadsheet

Tests

npm test

Contributing

In lieu of a formal style guide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.