Code Monkey home page Code Monkey logo

google-sheet-localization-script's Introduction

[Draft] google-sheet-localization-script

Export all localized strings in the sheet to google drive for more than n* of languages

Get more information about google sheet scripts and how it works at โ†’ https://developers.google.com/apps-script/guides/sheets

Main function in Code.gs

/**
 * Fetch the the sheet and start creating root folder and sub folders for each lang with Localization.strings file
 *
 */
function exportLocalizationsFiles() {
  var startDate = new Date();
  Logger.log('๐Ÿ—‚ Starting exporting localization files, time: ' + startDate.toString());
  
  var app = SpreadsheetApp;
  var spreadsheet = app.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('Localizable');

  
  var columnsCount = sheet.getRange('A:AF').getNumColumns() ;
  var locations = [...Array(columnsCount).keys()].map(column => columnToLetter(column + 1));
  
  var languages = sheet.getRange(locations[0] + '1:' + locations[locations.length - 1] + '1').getValues()[0];
  var languageCodes = languages.map(value => value.substring(value.lastIndexOf("(") + 1, value.lastIndexOf(")")))
      
  Logger.log("languageCodes == locations => " + (languageCodes.length == locations.length));

  var rootFolderName = 'Localization Files - ' + startDate.toString();
  var rootFolder = DriveApp.createFolder(rootFolderName);
  var rootFolderURL = rootFolder.getUrl();

  Logger.log('๐Ÿ‘‰ Created root folder with name: ' + rootFolderName + '\n๐Ÿ‘‰ Root folder URL => ' + rootFolderURL);

  for(index = 0; index < locations.length; index++) {
    var range = locations[index] + '2:' + locations[index] + '150';
    var fileContent = sheet.getRange(range).getValues().join('\n\n');
    var subFolder = rootFolder.createFolder(languageCodes[index] + '.lproj');

    Logger.log('Created folder for ' + languageCodes[index].toUpperCase());

    subFolder.createFile('Localizable.strings', fileContent);

    Logger.log('Remaining is ' + ((locations.length - 1) - index) + '...');
  }

  var endDate = new Date();
  var timeDiff = startDate.getSeconds() + endDate.getSeconds();

  Logger.log('โœ… DONE in : ' + timeDiff.toString() + ' second' + ', folder URL ==> ' + rootFolderURL);
}

Logs will look like

5:59:23 AM	Notice	Execution started
5:59:23 AM	Info	๐Ÿ—‚ Starting exporting localization files, time: Mon May 10 2021 05:59:23 GMT+0300 (Arabian Standard Time)
5:59:23 AM	Info	languageCodes == locations => true
5:59:24 AM	Info	๐Ÿ‘‰ Created root folder with name: Localization Files - Mon May 10 2021 05:59:23 GMT+0300 (Arabian Standard Time)
                  ๐Ÿ‘‰ Root folder URL => https://drive.google.com/drive/folders/1ySEGrNuaZcJ....
5:59:25 AM	Info	Created folder for EN
5:59:27 AM	Info	Remaining is 31...
5:59:27 AM	Info	Created folder for AR
5:59:29 AM	Info	Remaining is 30...
5:59:29 AM	Info	Created folder for TR
5:59:31 AM	Info	Remaining is 29...
5:59:31 AM	Info	Created folder for HI
5:59:32 AM	Info	Remaining is 28...
5:59:33 AM	Info	Created folder for PL
5:59:34 AM	Info	Remaining is 27...
5:59:35 AM	Info	Created folder for PT
5:59:36 AM	Info	Remaining is 26...
5:59:37 AM	Info	Created folder for ES
5:59:38 AM	Info	Remaining is 25...
5:59:38 AM	Info	Created folder for DE
5:59:39 AM	Info	Remaining is 24...
5:59:40 AM	Info	Created folder for RU
5:59:41 AM	Info	Remaining is 23...
5:59:42 AM	Info	Created folder for BN
5:59:43 AM	Info	Remaining is 22...
5:59:43 AM	Info	Created folder for CA
5:59:44 AM	Info	Remaining is 21...
5:59:45 AM	Info	Created folder for CS
5:59:46 AM	Info	Remaining is 20...
5:59:47 AM	Info	Created folder for DA
5:59:48 AM	Info	Remaining is 19...
5:59:48 AM	Info	Created folder for NL
5:59:49 AM	Info	Remaining is 18...
5:59:50 AM	Info	Created folder for EL
5:59:51 AM	Info	Remaining is 17...
5:59:51 AM	Info	Created folder for GU
5:59:53 AM	Info	Remaining is 16...
5:59:53 AM	Info	Created folder for HE
5:59:54 AM	Info	Remaining is 15...
5:59:55 AM	Info	Created folder for HU
5:59:56 AM	Info	Remaining is 14...
5:59:56 AM	Info	Created folder for ID
5:59:57 AM	Info	Remaining is 13...
5:59:58 AM	Info	Created folder for GA
5:59:59 AM	Info	Remaining is 12...
5:59:59 AM	Info	Created folder for IT
6:00:00 AM	Info	Remaining is 11...
6:00:01 AM	Info	Created folder for JA
6:00:02 AM	Info	Remaining is 10...
6:00:03 AM	Info	Created folder for KO
6:00:04 AM	Info	Remaining is 9...
6:00:04 AM	Info	Created folder for MS
6:00:05 AM	Info	Remaining is 8...
6:00:06 AM	Info	Created folder for MR
6:00:07 AM	Info	Remaining is 7...
6:00:07 AM	Info	Created folder for NB
6:00:08 AM	Info	Remaining is 6...
6:00:09 AM	Info	Created folder for FA
6:00:10 AM	Info	Remaining is 5...
6:00:10 AM	Info	Created folder for RO
6:00:11 AM	Info	Remaining is 4...
6:00:12 AM	Info	Created folder for UK
6:00:13 AM	Info	Remaining is 3...
6:00:14 AM	Info	Created folder for VI
6:00:15 AM	Info	Remaining is 2...
6:00:15 AM	Info	Created folder for SV
6:00:18 AM	Info	Remaining is 1...
6:00:18 AM	Info	Created folder for TH
6:00:19 AM	Info	Remaining is 0...
6:00:19 AM	Info	โœ… DONE in : 42 second, folder URL ==> https://drive.google.com/drive/folders/1ySEGrNuaZcJ....
6:00:19 AM	Notice	Execution completed

google-sheet-localization-script's People

Contributors

cs4alhaider avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.