Nefarious Plastic Mannequins


    1.0.0 • Public • Published


    A grunt plugin to manage translation import/export to and from a google spreadsheet

    Getting Started

    This plugin requires Grunt ~0.4.5

    If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

    npm install grunt-translation-spreadsheet-sync --save-dev

    Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:


    The "translation_spreadsheet_sync" task


    In your project's Gruntfile, add a section named translation_spreadsheet_sync to the data object passed into grunt.initConfig().

    An example config could look like:

      translation_spreadsheet_sync: {
        options: {
            spreadsheetId: '-your google spreadsheet id-',
            credentials: require('path/to/your/secret/credential/service')
        import: {
            options: {
                mode: 'import'
            files: {
                src: 'src/languages/'
        upload: {
            options: {
                mode: 'upload'
            files: {
                src: 'src/languages/*.json'



    Type: Object
    Default value: Credentials for

    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 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.:",
      "client_id": "...",
      "auth_uri": "",
      "token_uri": "",
      "auth_provider_x509_cert_url": "",
      "client_x509_cert_url": "..."


    Type: String
    Default value: 'default'

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


    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.


    Type: String
    Default value: "0"

    The selected Worksheet to work with. the gid can be taken from the spreatsheet url: #gid=1470321642


    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.


    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.


    Type: String
    Default value: '-'

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


    Type: Enum Default value: locale_json
    Possible Values:

    • locale_json (translations are stored in simple key/value json files)
    • gettext (for the work with po and mo files)
    • properties (for java property files)
    • yml (for symfony yml translation files)

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


    Type: String
    Default value: null

    This is absolutely required to make it work


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


    npm i grunt-translation-spreadsheet-sync

    DownloadsWeekly Downloads






    Unpacked Size

    18.9 kB

    Total Files


    Last publish


    • andreas-schoenefeldt