안드로이드/유틸

구글 번역 시트 (Android, IOS) 뽑아내기

코딩하는후운 2021. 6. 24. 17:42
반응형

Android, IOS 문구 관리를 찾다가.

구글 번역 시트를 통해서 파일을 뽑아내는것을 찾았다.

 

1. 구글 시트 작성

 

2. 도구 -> 스크립트 편집기 -> 소스 붙여 넣기

 

var appName = "AppName";




function onOpen() {

 

var sheet = SpreadsheetApp.getActiveSpreadsheet();

 

var entries = [

 

{

 

name : "리소스 생성",

 

functionName : "exportResources"

 

}

 

];

 

sheet.addMenu(appName, entries);

 

};




// Export resources function

 

function exportResources() {

 

 

 

// Folders

 

var appFolder = createOrGetFolder(appName);

 

var androidFolder = createOrGetFolder("Android", appFolder);

 

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);

 

var results = data[1][i].match(/\(([a-zA-Z-]*)\)/g);

 

if (results.length > 0) {

 

var language = results[0].replace("(", "").replace(")", "");

 

createAndroidResources(language, data, androidFolder, i);

 

createIOSResources(language, data, iOSFolder, 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";

 

 

 

if (language != "en") {

 

folderName += "-" + language;

 

}

 

 

 

var languageFolder = createOrGetFolder(folderName, folder);

 

 

 

var content = "<resources>";

 

content += "\n\n";

 

content += "\t<!-- App name -->";

 

content += '\n\t<string name="app_name">' + appName + '</string>';

 

 

 

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][2].indexOf("%s") > -1 || data[i][2].indexOf("%d") > -1) {

 

formatted = ' formatted="false"';

 

}

 

 

 

var escapedContent = data[i][column]

 

.replace(new RegExp("\'", 'g'), "\\'")

 

.replace(new RegExp("\\.\\.\\.", 'g'), "&#8230;");

 

 

 

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";

 

content += "\n";

 

content += '"APP_NAME" = "' + appName + '";';

 

 

 

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(/%[0-9]\$[sdf]/g, "%@");

 

//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;

 

}

 

 

참조에 있는 소스 그대로 복사 했다.

 

 

 

결과는 잘나오는 것 같다.

 

 

 

참조 : 
https://kkensu.tistory.com/54

반응형