Last active
April 7, 2022 02:14
-
-
Save kyungpyoda/1e53e1d44229a8c9ae3a5be9e4558096 to your computer and use it in GitHub Desktop.
Manage and generate string resources through Google Spread Sheet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var appName = "AppName"; | |
// 메뉴바 추가 | |
function onOpen() { | |
var sheet = SpreadsheetApp.getActiveSpreadsheet(); | |
var entries = [ | |
{ | |
name : "Create iOS Resources", | |
functionName : "exportiOSResources" | |
}, | |
{ | |
name : "Create Android Resources", | |
functionName : "exportAndroidResources" | |
} | |
]; | |
sheet.addMenu(appName, entries); | |
}; | |
// iOS 리소스 export | |
function exportiOSResources() { | |
// Folders | |
var appFolder = createOrGetFolder(appName); | |
var iOSFolder = createOrGetFolder("iOS", appFolder); | |
// Data | |
var sheet = SpreadsheetApp.getActiveSheet(); | |
var data = sheet.getDataRange().getValues(); | |
var i = 2; | |
while (data[1][i] != null && data[1][i].length > 0) { | |
var results = data[1][i].match(/\((\w\w)\)/g); | |
if (results.length > 0) { | |
var language = results[0].replace("(", "").replace(")", ""); | |
createIOSResources(language, data, iOSFolder, i); | |
} | |
i++; | |
} | |
} | |
// Android 리소스 export | |
function exportAndroidResources() { | |
// Folders | |
var appFolder = createOrGetFolder(appName); | |
var androidFolder = createOrGetFolder("Android", appFolder); | |
// Data | |
var sheet = SpreadsheetApp.getActiveSheet(); | |
var data = sheet.getDataRange().getValues(); | |
var i = 2; | |
while (data[1][i] != null && data[1][i].length > 0) { | |
var results = data[1][i].match(/\((\w\w)\)/g); | |
if (results.length > 0) { | |
var language = results[0].replace("(", "").replace(")", ""); | |
createAndroidResources(language, data, androidFolder, i); | |
} | |
i++; | |
} | |
} | |
// Create an XML file for Android | |
// language: Current language | |
// data: Spreadsheet data array | |
// folder: Folder where create the file | |
// column: Index of the column | |
function createAndroidResources(language, data, folder, column) { | |
var folderName = "values-" + language; | |
var languageFolder = createOrGetFolder(folderName, folder); | |
var content = "<resources>"; | |
for (var i = 3; i < data.length; i++) { | |
if (data[i][1].length == 0) { | |
continue; | |
} | |
if (data[i][0].length > 0) { | |
content += "\n\n\t<!-- " + data[i][0] + " -->"; | |
} | |
var formatted = ""; | |
if (data[i][column].indexOf("%s") > -1 || data[i][column].indexOf("%d") > -1 || data[i][column].indexOf("%@") > -1) { | |
formatted = ' formatted="false"'; | |
} | |
var escapedContent = data[i][column] | |
.replace("%@", "%s") | |
.replace("&", "&") | |
.replace(new RegExp("\'", 'g'), "\\'") | |
.replace(new RegExp("\\.\\.\\.", 'g'), "…"); | |
content += '\n\t<string name="' + data[i][1] + '"' + formatted + '>' + escapedContent + '</string>'; | |
} | |
content += "\n\n</resources>"; | |
var file = createOrGetFile("strings.xml", languageFolder); | |
file.setContent(content); | |
} | |
// Create a localizable file for iOS | |
// language: Current language | |
// data: Spreadsheet data array | |
// folder: Folder where create the file | |
// column: Index of the column | |
function createIOSResources(language, data, folder, column) { | |
var content = "// App"; | |
for (var i = 3; i < data.length; i++) { | |
if (data[i][1].length == 0) { | |
continue; | |
} | |
if (data[i][0].length > 0) { | |
content += "\n\n// " + data[i][0] + ""; | |
} | |
var value = data[i][column]; | |
value = value.replace(/%s/g, "%@"); | |
value = value.replace(/"/g, '\\"'); | |
value = value.replace(/(?:\r\n|\r|\n)/g, '\\n'); | |
content += '\n"' + data[i][1] + '" = "' + value + '";'; | |
} | |
var fileName = "Localizable_" + language.toUpperCase() + ".strings"; | |
var file = createOrGetFile(fileName, folder); | |
file.setContent(content); | |
} | |
//////////// | |
// HELPER // | |
//////////// | |
// Check folder | |
function createOrGetFolder(name, folder) { | |
var folders; | |
if (folder == undefined) { | |
folders = DriveApp.getFoldersByName(name) | |
} else { | |
folders = folder.getFoldersByName(name) | |
} | |
var mainFolder; | |
if (folders.hasNext()) { | |
mainFolder = folders.next(); | |
} else { | |
if (folder == undefined) { | |
mainFolder = DriveApp.createFolder(name); | |
} else { | |
mainFolder = folder.createFolder(name); | |
} | |
} | |
return mainFolder; | |
} | |
// Check file | |
function createOrGetFile(name, folder) { | |
var files; | |
if (folder == undefined) { | |
files = DriveApp.getFilesByName(name) | |
} else { | |
files = folder.getFilesByName(name) | |
} | |
var file; | |
if (files.hasNext()) { | |
file = files.next(); | |
} else { | |
if (folder == undefined) { | |
file = DriveApp.createFile(name, ""); | |
} else { | |
file = folder.createFile(name, ""); | |
} | |
} | |
return file; | |
} |
Author
kyungpyoda
commented
Apr 7, 2022
- Create a new spread sheet.
- Add this script to your spread sheet.
- Go to Menu-Tools-Script Editor, paste this script, then save and refresh the sheet page.4.
- Follow this form. Do not modify the first 3 lines, except for adding new language columns.
- Go to Menu-"AppName"-"Create iOS(or Android) Resources" to run script.
- Check your Google Drive.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment