두 가지 프로그램이 필요하다. 하나는 번역 엑셀 파일에서 안드로이드 lang_strings.xml 파일을 생성는 프로그램, 두번째는 이 lang_strings.xml 파일을 읽어서 번역이 제대로 되었는지 확인할 수 있는 번역 테스트 앱이다. 여기서는 번역 테스트 앱을 구현하는 과정을 소개한다.
앱은 android_base라는 서브 모듈을 사용한다. 서브 모듈에는 BaseActivity가 있고, 앱에서 사용하는 모든 Activity는 BaseActivity를 extend한다. Restring은 Application과 Activity에 각각 초기화하는 코드가 필요하므로 서브 모듈과 앱 모듈 두 군데 모두 수정이 필요하다.
[서브 모듈]
build.gradle translation 빌드 타입을 추가한다. 테스트 코드는 if (BuildConfig.TRANSLATION_MODE) 로 감싸서 테스트 앱이 아닌경우에 영향이 없도록 한다.
AndroidManifest AndroidManifest에서 앱 이름을 android:label="${appName}" 으로 바꾸면 build.gradle에서 manifestPlaceholders를 이용해서 변경할 수 있다. sdcard의 파일을 엑세스 하려면 스토리지 권한도 필요하다.
빌드 타입이 translation이 아닌 경우는 app/src/debug/java 혹은 app/src/release/java 에 소스파일을 둔다. 구현체가 없고, 실제 호출되지도 않지만 컴파일 에러를 방지하기위해서 empty 구현한다.
class RestringHelper : RestringHelperBase {
override fun init(context: Context) {
// empty
}
override fun wrapContext(context: Context): Context {
// empty
return null!!
}
}
MyApplication getRestringHelper를 오버라이드하여 번역을 제공하는 경우에만 RestringHelper를 리턴한다.
class MyApplication : BaseApplication() {
private val restringHelper = RestringHelper()
override fun onCreate() {
super.onCreate()
}
override fun getRestringHelper(): RestringHelperBase? {
if (BuildConfig.TRANSLATION_MODE) {
return restringHelper
} else {
return null
}
}
}
다음에는 번역 엑셀 파일에서 lang_strings.xml을 만드는 프로그램을 구현하겠다. 이것은 노드 JS로도 간단히 구현할 수 있지만 윈도즈 프로그램으로 만들까 고민 중이다. 번역자가 노드 JS를 설치하고 또 필요한 라이브러리를 npm으로 내려받아 설치하고 제대로 실행하는 것은 매우 어려울 것 같다. 윈도즈 프로그램으로 만들면 간단하지만 마이크로소프트 엑셀 프로그램이 필요하다.
최종 번역이 완료된 엑셀 파일에서 모든 언어를 앱 프로젝트 폴더의 각 언어 파일에 업데이트 하는 프로그램도 필요하다. 이것은 나만 사용하기 때문에 노드JS로 구현해도 문제 없다.