다국어 처리를 위해 다국어 번역한 resource파일을 관리 해야 한다.
기존에는 시나리오를 보고 새로 추가 된 언어들을 하나씩 reource의 properties 파일에 추가를 해야 했지만
새로 추가된 문구에 대해 관리의 책임은 기획팀에서 관리를 해야 하고 resource파일에 하니씩 추가하기에는 너무 비효율 적이라 생각하여 서버에서 뿐만 아니라 web, iOS, Andriod 팀과 함께 관리 할 수 있는 google spread에서 관리하기로 했다.
google spread sheet의 form
excel로 관리만 하면 기획팀에서의 언어 관리밖에 되지 않기 때문에 해당 값들을 각 팀에 맞게 파일로 변환해주는 역할이 필요하다.
java에서는 message properties파일이라지만 결국에는 key-value 형식의 텍스트 파일과 다를게 없다. google spread에서 제공하는 apps Script라는 기능을 사용해서 *.properties 파일로 변환한다.
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
{
name : "Server 리소스 생성",
functionName : "createServerStringResource"
}
];
sheet.addMenu("번역", entries);
var SHEET_NAME = "Script";
var SERVER_FOLDER_ID = "GOOGLE_FOLDER_ID"; //google의 folder id값 입력
// Server
var SERVER_LANGUAGE_SET = [
[4, "messages_ko.properties"],
[5, "messages_en.properties"],
[6, "messages_es.properties"],
[7, "messages_ja.properties"]
];
function createServerStringResource() {
var sheet = SpreadsheetApp.getActiveSheet();
if( sheet != null && sheet.getName() == SHEET_NAME ) {
var sheetData = sheet.getSheetValues(1, 1, sheet.getLastRow(), sheet.getLastColumn());
writeServerResourceFile(sheetData);
return true;
} else {
SpreadsheetApp.getUi().alert("알림", "파일 생성에 실패하였습니다.", SpreadsheetApp.getUi().ButtonSet.OK);
return false;
}
}
function writeServerResourceFile(sheetData) {
for(var i = 0; i < SERVER_LANGUAGE_SET.length; i++) {
var file = SERVER_LANGUAGE_SET[i][1];
var xml = convertDataToServerXmlString(sheetData, SERVER_LANGUAGE_SET[i][0]);
if( xml != null ) {
var ServerFolder = DriveApp.getFolderById(SERVER_FOLDER_ID);
ServerFolder.createFile(file, xml);
}
}
}
function convertDataToServerXmlString(sheetData, columnIndex) {
var result = "";
for(var i = 1; i < sheetData.length; i++) {
var row = sheetData[i];
var key = row[2];
var value = row[columnIndex];
if( value == null || value == '' ) {
value = "";
}
result += key + " = " + value + "\r\n";
}
return result;
}