여러 국가를 대상으로 하는 앱을 만들떄, 해당 국가의 언어에 맞게 여러 언어를 제공해줘야 할 필요가 있습니다.
이번 예제에서는 어떻게 다국어를 지원해줄 수 있는지 알아보도록 하겠습니다.
프로젝트의 문자열 리소스는 strings.xml 파일에 포함되어 있습니다. 프로젝트에는 앱의 기본 언어로 된 문자열 리소스가 포함된 기본 strings.xml 파일이 있습니다. 기본 언어란 대부분의 앱 사용자가 사용할 것으로 예상되는 언어입니다. 앱에서 수용하기 원하는 다른 언어의 문자열 리소스가 포함되어 있는 번역된 strings.xml 파일을 만들 수도 있습니다.
우선 예제에서 사용될 레이아웃을 먼저그려보도록 하겠습니다.
activity_set_language.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SetLanguageActivity">
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="232dp"
android:text="언어 설정"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/sample_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="68dp"
android:text="example"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView6" />
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="100dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sample_text">
<RadioButton
android:id="@+id/radioButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:text="한글" />
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:text="영어" />
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>
이번 예제에서는 한글과 영어 두가지 언어를 지원하는 예제이며, 라디오 버튼을 클릭 시, 위의 Sample Sentence 문구가 선택된 언어로 전환되게 됩니다.
Default Language 문구 작성
res -> values 폴더의 string.xml 파일에 앱 내에서 사용될 문구들을 작성해줍니다.
작성 언어는 앱의 기본 언어로 설정할 언어로 작성해주시면 됩니다.
<resources>
<string name="app_name">StickodeJAVA2</string>
-- 앱 내에서 사용될 문구
<string name="sample_text">샘플 문장</string>
</resources>
Translations Editor 열기
기본 언어 문구를 작성했다면, Translations Editor를 통해 해당 문구
res -> values 폴더의 string.xml 파일을 마우스 우클릭한 후 아래와 같이 Open Translation Editor를 선택해 Translations Editor를 열어줍니다.
그 다음, 왼쪽 상단에 있는 지구 모양 버튼을 클릭 후, 추가하고 싶은 언어를 선택해줍니다. 여기선 English로 하겠습니다.
언어를 추가하게 되면 아래 이미지와 같이 오른쪽에 추가한 언어가 생성됩니다. 그 후, 번역되길 원하는 문구를 적어줍니다. 여기선 Sample Sentence라고 적어주었습니다.
위의 작업을 통해, 앱 언어가 한글일 경우 '샘플 문장'이, 영어일 경우 'Semple Sentence'가 보이도록 해줄 수 있습니다.
이제 실제로 앱 언어를 설정하는 방법을 알아보도록 하겠습니다.
코드 작성
SetLanguageActivity.java
public class SetLanguageActivity extends AppCompatActivity {
private static final String TAG = "SetLanguageActivity";
RadioButton korean, english;
String language_code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_language);
korean = findViewById(R.id.radioButton);
english = findViewById(R.id.radioButton2);
// 저장된 언어 코드를 불러온다.
language_code = SharedPreference.loadLanguageCode(SetLanguageActivity.this);
// 저장된 언어코드에 따라 라디오 버튼을 체크해준다.
if(language_code.equals("en") || language_code.equals("")){
english.setChecked(true);
}else{
korean.setChecked(true);
}
korean.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
korean.setChecked(true);
english.setChecked(false);
language_code = "ko";
set_language_code(); // 언어 코드에 해당하는 언어로 set
SharedPreference.saveLanguageCode(SetLanguageActivity.this, language_code); // 언어코드 저장
// 앱 재시작
Intent intent = getIntent();
finish();
startActivity(intent);
}
});
english.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
english.setChecked(true);
korean.setChecked(false);
language_code = "en";
set_language_code();
SharedPreference.saveLanguageCode(SetLanguageActivity.this, language_code); // 언어코드 저장
// 앱 재시작
Intent intent = getIntent();
finish();
startActivity(intent);
}
});
}
/**
* 앱에 설정된 언어코드에 해당되는 언어로 모든 택스트를 바꿔주는 메서드
*/
public void set_language_code(){
Locale locale = new Locale(language_code);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
set_language_code 메서드 작성 시, 스틱코드를 활용하여 바로 불러왔습니다.
stickode.com/code.html?fileno=10069 - set_language_code
위 코드를 통해 사용자가 원하는 언어로 앱 기본 언어를 설정 해줄 수 있습니다.
결과 영상
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 쉐이크 기능 만들기 (3) | 2021.05.15 |
---|---|
[JAVA][Android] 기상청 API 사용하기 (2) | 2021.05.14 |
[JAVA][Android] Room DB 사용하기 (0) | 2021.05.11 |
[JAVA][Android] 기상청 API 조회하기 (2) | 2021.05.08 |
[JAVA][Android] 텍스트 자동 완성 기능을 만들어보자 (0) | 2021.05.03 |