해외 기업(일본)을 타겟으로 하는 프로젝트를 진행하던 중,
타겟 언어팩을 적용한 과정을 간단히 끄적여본다.
strings.xml 파일로 다국어 지원하기
옛 포스팅에서 이미 strings.xml 파일을 다뤄보았다.
위 포스팅에서는 strings.xml 파일을 사용했을 때의 장점으로 높은 재사용성을 꼽았다.
그 외에도 strings.xml 파일은 다국어 지원도 가능하도록 해준다.
안드로이드 앱은 시스템 상 설정된 언어에 영향을 받는데,
각 언어별로 strings.xml 파일을 제작해주면 시스템 언어와 일치하는 언어의 파일로 자동 매칭된다.
default로 생성된 strings.xml 파일은 매칭되는 언어가 없을 경우 적용된다.
그렇기에 보통 기본 strings.xml 파일에는 지구 언어인 영어를 많이 사용한다.
이제 다음과 같이 2개의 파일을 준비하는 과정을 알아본다.
strings.xml - 영어
strings.xml(ko) - 한국어
원리는 values 폴더를 생성 후, 해당 폴더 안에 strings.xml 파일을 생성하는 것이다.
정말 여러가지 방법이 있는데, 그 중 3가지 방법만 소개한다.
✅ 수동 생성 (1)
안드로이드 스튜디오 내 좌측 상단에서 Project 탭으로 전환해준다.
[res] 폴더 우 클릭 → [New] → [Android Resource Directory]
위 창에서 파일 이름에 values-ko를 입력하고 생성해주면 된다.
다음과 같이 해당 폴더가 생성되었다.
위 폴더 우클릭 → [New] → [Values Resource File] 클릭하고
strings.xml 이름으로 파일을 생성해주면 된다.
✅ 수동 생성 (2)
위 방법보다는 조금 더 편리한 2번째 수동 생성 방법이다.
[res] 폴더 우 클릭 → [New] → [Android Resource Directory] 까지 진행했을 때
위 그림에 표시한대로 [Locale] → [>>] 눌러주자.
해당하는 언어를 찾아서 선택하고 파일명을 strings.xml으로 입력하여 생성해주면 된다.
✅ (반)자동 생성
이미 기본으로 생성되어 있는 strings.xml 파일에 들어가서
우측 상단에 Open editor 텍스트를 클릭한다.
Translation Editor 창이 띄워지는데, 아래 표시의 지구 모양 아이콘을 클릭해준다.
여기서 원하는 국가(언어)를 선택해주면 된다.
strings.xml 파일이 자동으로 생성된 것을 확인할 수 있다.
(ko) 가 한국어의 약자이다.
이제 [Project] 탭에서는 왼쪽처럼, [Android] 탭에서는 오른쪽처럼 보여진다.
✅ 테스트
이제 2개의 각 파일에 "hello" 라는 이름을 가진 string 리소스를 만들어주고,
값으로는 각 언어에 맞게 작성해주자.
메인 액티비티에 텍스트뷰를 하나 만들어주고,
strings.xml 파일에 있는 "hello" 값을 불러온다.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
초반부에 언급했지만, 안드로이드 앱은 기기에 설정된 언어 값에 자동 매칭된다.
[기기 설정] → [일반] → [언어] 페이지로 들어가서
영어를 선택 or 최상단에 배치해주자. (os 버전에 따라 다름)
이제 앱을 실행시켜보면
위와 같이 strings.xml(기본: 영어) 파일의 값이 표시되는 것을 확인할 수 있다.
이제 다시 언어 설정 화면에서 한국어를 선택해주고
앱을 다시 들어가보면
strings.xml(ko) 파일의 값이 표시된다.
xml → csv → 구글 스프레드 시트 → xml 변환 과정
다국어 지원을 할 때 보통의 경우 기준이 되는 언어가 있을 것이다.
예를 들어 한국어가 기준이면
한국어 → 영어
한국어 → 일본어
한국어 → 중국어
이런식으로 번역을 진행하게 될 것이다.
위 과정대로 진행한다고 가정했을 때,
각 언어의 string.xml 파일에 번역한 문구를 일일이 옮겨적을 수 없다.
번역하여 옮겨적을 단어·문장이 1000개만 된다해도 사람이 할 일이 아니란 것을 깨닫을 수 있다.
그리하여 사내에서도 xml파일을 스프레드 시트로 옮겨서 언어팩을 제작하고,
다시 xml 파일로 옮길 수 있는 방법을 적용했다.
어차피 번역은 일일이 진행해야 하는데,
굳이 스프레드 시트를 사용하여 언어팩 제작하는 이유?
● 공동 작업이 가능하기에, 여러명이서 파트를 나눠 작업한다면 시간을 절약할 수 있다.
● 번역 담당자가 있다면 해당 담당자에게 링크를 던지면 되기에 편리하다.
(사내에는 언어마다 번역 담당자가 있었다)
● 번역을 일일이 진행하고, strings.xml 파일에 다시 일일이 입력하면 x2 시간이 소모된다.
따라서 strings.xml 파일에 입력하는 과정이라도 생략할 수 있다.
✅ xml 파일을 csv 파일로 변환
웹 페이지에서 무료로 사용할 수 있는 변환기를 소개한다.
위 웹 페이지에 string.xml 파일을 업로드한 후 csv 파일을 다운로드 받는다.
위 과정이 끝나면 strings.csv 파일이 생성된다.
✅ csv 파일을 구글 스프레드 시트에서 열기
이제 구글 스프레드 시트를 켜고 [파일]→[열기] 들어가서 csv 파일을 오픈한다.
깔끔하게 입력된 것을 확인할 수 있다.
이제 이 스프레드 시트 링크를 번역 담당자에게 전달하고,
아래처럼 번역이 끝났다고 가정한다.
✅ 구글 스프레드 시트를 xml 파일로 변환
이제 구글 스프레드 시트 상단 탭의 [확장 프로그램] → [Apps Script] 에 접속한다.
그리고 다음 스크립트를 작성해주자.
function exportStringsXml() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getDataRange().getValues();
var xml = '<?xml version="1.0" encoding="utf-8"?>\n<resources>\n';
for (var i = 1; i < data.length; i++) {
var key = data[i][0];
var value = data[i][1];
xml += ' <string name="' + key + '">' + value + '</string>\n';
}
xml += '</resources>';
var blob = Utilities.newBlob(xml, 'text/xml', 'strings.xml');
var file = DriveApp.createFile(blob);
Logger.log('File URL: ' + file.getUrl());
}
작성이 끝나면 다음과 같은 모습일 것이다.
위 스크립트를 저장 후 실행해주면 구글 드라이브에 strings.xml 파일이 저장되어 있다.
이제 준비된 폴더에 (values-ko) 해당 xml 파일을 넣어주면
깔끔하게 적용되는 것을 확인할 수 있다.
오늘은 string.xml 파일을 통해 다국어 관리하는 방법을 알아보았다.
다국어 지원하는 여러 방식 중에 스프레드 시트 자체를 안드로이드에서 동기화하는 방법도 있다.
조만간 적용해보고 포스팅할 것 같다.
공부할 게 너무 많아...!