Maintain your translations in Google Sheets and fetch them into JSON files - ready to be used other translation libraries like Globalize
Steps to get started with Google documents. See more verbose version in related project: https://github.com/SC5/google-sheets-api
- Register app in Google Developers Console
- Enable Google Drive API
- Create Service account under Credentials (get P12 key)
- Convert P12 key into PEM format
- Collect the service email account
- Create Google Sheets -document
- Share the document to service email address
NOTE: Authentication is required - link based sharing is not currently supported.
Example document:
Example code:
var fs = require('fs');
var GoogleSheetsTranslate = require('google-sheets-translate');
var gtranslator = new GoogleSheetsTranslate({
documentId: 'your-document-id',
serviceEmail: '[email protected]',
serviceKey: fs.readFileSync('./your-service.pem').toString()
});
var output;
gtranslator.getTranslations()
.then(function(translations) {
translations.forEach(function(translation, locale) {
// In this example we're writing files in Globalize compatible format
output = {};
output[locale] = translation;
fs.writeFileSync(
'messages/' + locale + '.json',
JSON.stringify(output, null, 2)
);
});
})
.catch(function(err) {
console.warn('Failed to generate translations:', err);
});
Example output:
{
"en": {
"translation": "Translation",
"dog-house": "Doghouse",
"sister": "Sister"
}
}
{
"fi": {
"translation": "Käännös",
"dog-house": "Koirankoppi",
"sister": "Sisko"
}
}
Create an instance from the client. All the options are required.
- @param {Object} opts All the options
- @param {String} id Sheets document id
- @param {String} opts.serviceEmail Service email address
- @param {String} opts.serviceKey Service .PEM key contents
Retrieve the translations from the sheet. All the options are optional.
- @param {Object} opts All the options
- @param {String} opts.sheetOrdinal Sheet ordinal to process. Defaults to 0 (first sheet)
- @param {String} opts.sheetName Sheet name to process. If not provided, uses sheetOrdinal
- @param {String} opts.range Range where the translations are. Defaults to whole document (first row contains the header)
Module is MIT -licensed
Module is backed by Nordcloud