1.0.1-b • Published 7 months ago

@idapgroup/spreadsheet-localization-parser v1.0.1-b

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Google spreadsheet localization parser NPM Module

Parse google spreadsheet to json i18n localization files.

For auth and load sheets use google-spreadsheet package

Installation

With npm:

npm install @idapgroup/spreadsheet-localization-parser

or with yarn:

yarn add @idapgroup/spreadsheet-localization-parser

Example

IMPORTANT NOTE - If you need to call await in a script at the root level, you must instead wrap it in an async function like so:

(async function() {
  await someAsyncFunction();
}());

Basic usage

import {GoogleSpreadsheet} from "google-spreadsheet";
import {
  loadSheets,
  normalizeDynamicValue,
  parseSpreadsheets,
  writeTranslations
} from "@idapgroup/spreadsheet-localization-parser";
/**
 * Initialize the sheet - doc ID is the long id in the sheets URL
 */
const doc = new GoogleSpreadsheet('<the sheet ID from the url>');

/**
 * Initialize Auth
 * @see  https://theoephraim.github.io/node-google-spreadsheet/#/getting-started/authentication
 */
await doc.useServiceAccountAuth({
  // env var values are copied from service account credentials generated by google
  // see "Authentication" section in docs for more info
  client_email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL,
  private_key: process.env.GOOGLE_PRIVATE_KEY, // **IMPORTANT NOTE** - replace escaped \n symbols to new line replace(/\\n/g, '\n')
});

/**
  * load all sheets or specific
  * @param {GoogleSpreadsheet} doc - initialized GoogleSpreadsheet instance 
  * @param {LoadSheetOptions} options - optional options for filter sheets by title, id or index
*/
const sheets = await loadSheets(doc)

// parser options
const parseOptions: ParseOptions = {
  keyColumnName: 'key', // key column name for parse(column name must be equal to this key)
  languages: ['en', 'de'], // languages for parse(column name must be equal to language)
  normalizeValue: normalizeDynamicValue, // optional callback for normalize dynamic value by you i18n lib rules
  keepEmpty: false, // optional keep empty values
}
/**
 * parse sheets
 * @param {GoogleSpreadsheetWorksheet[]} sheets - array of GoogleSpreadsheetWorksheet instances
 * @param {ParseOptions} options - parser options 
*/
const translations = await parseSpreadsheets(sheets, parseOptions);

/**
 * write translations to files
 * @param {string} path - path to directory for write files
 * @param {ParsedTranslations} translations - translations object
*/
writeTranslations(path, translations)

More info about GoogleSpreadsheet and GoogleSpreadsheetWorksheet:

Normalize dynamic value

Transform string value with regexp pattern to dynamic value You can write your own normalize function for your i18n lib

import {normalizeDynamicValue} from "@idapgroup/spreadsheet-localization-parser";

normalizeDynamicValue('First %d days free') // output - First {{value}} days free

// use for parser with options
const options = {
  prefix: '{{',
  suffix: '}}',
  dynamicValueName: 'value',
}
parseSpreadsheets(sheets, {languages, keyColumnName, normalizeValue: (value) =>  normalizeDynamicValue(value, options)})
1.0.1-b

7 months ago

1.0.1-a

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago