구글 번역 시트 (Android, IOS) 뽑아내기
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'), "…");
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;
}
참조에 있는 소스 그대로 복사 했다.
결과는 잘나오는 것 같다.