Skip to content

Instantly share code, notes, and snippets.

@sugimotoak
Last active December 25, 2015 18:39
Show Gist options
  • Save sugimotoak/7021879 to your computer and use it in GitHub Desktop.
Save sugimotoak/7021879 to your computer and use it in GitHub Desktop.
[GoogleAppsScript][Android][iOS]generate multi-language file string.xml Localizable.strings
/**
* output string.xml into GoogleDrive
*/
function outputStringXml_Android() {
// read Spreadsheet
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var numCols = rows.getNumColumns();
var values = rows.getValues();
var buffer = new _StringBuffer();
// create folder
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date. getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
var folder = DocsList.createFolder("string_" + year + _slice2(month) + _slice2(day) + "_" + _slice2(hour) + _slice2(minute) + _slice2(second));
var valuesFolder;
var constFolder;
try {
constFolder = DocsList.getFolder("multi_language_" + values[2][2]);
constFolder.setTrashed(true);
} catch (e) {
} finally {
constFolder = DocsList.createFolder("multi_language_" + values[2][2]);
}
// const
var filename = "string.xml";
var foldername = "values";
var newline = "\r\n";
// output by creating a file in each locale
for (var j_col = 2; j_col <= numCols - 1; j_col++) {
buffer.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
buffer.append(newline);
buffer.append("<resources>");
buffer.append(newline);
for (var i_row = 2; i_row <= numRows - 1; i_row++) {
if (values[i_row][0].length != 0) {
buffer.append("/* ");
buffer.append(values[i_row][0]);
buffer.append(" */\n");
}
buffer.append("<string name=\"");
buffer.append(values[i_row][1]);
buffer.append("\">");
buffer.append(values[i_row][j_col]);
buffer.append("</string>\n\n");
}
buffer.append("</resources>\n");
if (j_col == 2) {
valuesFolder = DocsList.createFolder(foldername);
} else {
valuesFolder = DocsList.createFolder(foldername + "-" + values[1][j_col]);
}
valuesFolder.addToFolder(folder);
valuesFolder.addToFolder(constFolder);
valuesFolder.removeFromFolder(DocsList.getRootFolder());
var outputFile = DocsList.createFile(filename, "");
outputFile.append(buffer.toString());
outputFile.addToFolder(valuesFolder);
outputFile.removeFromFolder(DocsList.getRootFolder());
buffer = new _StringBuffer();
}
}
/**
* output string.xml into GoogleDrive
*/
function outputLocalizableStrings_iOS() {
// read Spreadsheet
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var numCols = rows.getNumColumns();
var values = rows.getValues();
var buffer = new _StringBuffer();
// create folder
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date. getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
var folder = DocsList.createFolder("LocalizableStrings_" + year + _slice2(month) + _slice2(day) + "_" + _slice2(hour) + _slice2(minute) + _slice2(second));
var valuesFolder;
var constFolder;
try {
constFolder = DocsList.getFolder("multi_language_" + values[2][2]);
constFolder.setTrashed(true);
} catch (e) {
} finally {
constFolder = DocsList.createFolder("multi_language_" + values[2][2]);
}
// const
var filename = "Localizable.strings";
var foldername = ".lproj";
var newline = "\r\n";
// output by creating a file in each locale
for (var j_col = 2; j_col <= numCols - 1; j_col++) {
for (var i_row = 2; i_row <= numRows - 1; i_row++) {
if (values[i_row][0].length != 0) {
buffer.append("/* ");
buffer.append(values[i_row][0]);
buffer.append(" */\n");
}
buffer.append("\"");
buffer.append(values[i_row][1]);
buffer.append("\" = \"");
buffer.append(values[i_row][j_col]);
buffer.append("\";\n\n");
}
valuesFolder = DocsList.createFolder(values[1][j_col] + foldername);
valuesFolder.addToFolder(folder);
valuesFolder.addToFolder(constFolder);
valuesFolder.removeFromFolder(DocsList.getRootFolder());
var outputFile = DocsList.createFile(filename, "");
outputFile.append(buffer.toString());
outputFile.addToFolder(valuesFolder);
outputFile.removeFromFolder(DocsList.getRootFolder());
buffer = new _StringBuffer();
}
}
/**
* fill string with 0
*/
function _slice2(num) {
return ("0" + num).slice(-2);
}
/**
* StringBuffer
*/
function _StringBuffer() {
this.__strings__ = new Array;
}
_StringBuffer.prototype.append = function (str) {
this.__strings__.push(str);
};
_StringBuffer.prototype.toString = function () {
return this.__strings__.join("");
};
/**
* paint alternating background of the selected
*/
function paintAlternatingBackground() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = SpreadsheetApp.getActiveRange();
var numColumns = range.getNumColumns();
var row = range.getRow();
var col = range.getColumn();
var lastRow = row + range.getNumRows();
for(var i=row;i<=lastRow;i++){
if(i%2==0){
sheet.getRange(i, col, 1, numColumns).setBackgroundColor('#FFAA00');
}else{
sheet.getRange(i, col, 1, numColumns).setBackgroundColor('#FFFFFF');
}
}
};
/**
* run first
*/
function formatSpreadsheet() {
var sheet = SpreadsheetApp.getActiveSheet();
var header = sheet.getRange("A1:D2");
header.setBackground("#DEDEDE");
header.setVerticalAlignment("middle");
header.setHorizontalAlignment("center")
var comment = sheet.getRange("A1:A2");
comment.mergeVertically();
comment.setValue("comment");
var comment = sheet.getRange("B1:B2");
comment.mergeVertically();
comment.setValue("id");
sheet.getRange("C1").setValue("english");
sheet.getRange("C2").setValue("en");
sheet.getRange("D1").setValue("日本語");
sheet.getRange("D2").setValue("ja");
sheet.getRange("A3").setValue("Application Name");
sheet.getRange("B3").setValue("app_name");
sheet.getRange("C3").setValue("TestApplication");
sheet.getRange("D3").setValue("テストアプリケーション");
sheet.getRange("B4").setValue("hello");
sheet.getRange("C4").setValue("hello");
sheet.getRange("D4").setValue("こんにちわ");
var range = sheet.getRange("A3:D30");
var numColumns = range.getNumColumns();
var row = range.getRow();
var col = range.getColumn();
var lastRow = row + range.getNumRows();
for(var i=row;i<=lastRow;i++){
if(i%2==0){
sheet.getRange(i, col, 1, numColumns).setBackgroundColor('#FFAA00');
}else{
sheet.getRange(i, col, 1, numColumns).setBackgroundColor('#FFFFFF');
}
}
sheet.getRange("A1:D30").setBorder(true, true, true, true, true, true);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment