본문 바로가기
안드로이드

[Android] 버튼 하나로 다국어 모드

by 코딩히어로 2022. 1. 20.
728x90

제목


자신이 만드는 Application이 대한민국만을 겨냥한 것이 아니라 외국을 함께 겨냥한다면

지원되는 언어가 한글뿐만이 아니라 영어, 일본어, 중국어 등으로 다양해야 합니다.

 

화면을 구성할 때 이런 다국어 지원에 대한 설계를 해야 하는데 안드로이드 스튜디오에서는

strings.xml 파일을 통해서 다국어 모드로 변경을 쉽게 할 수 있습니다.

 

그럼 이 strings.xml파일을 통해 다국어 모드로 변경하는 구조에 대해서 알아보도록 하겠습니다.

 

제가 만든 Application에서는 언어를 변경하는 버튼을 따로 만들어서 사용자가 해당 언어의

버튼을 클릭시 지원되는 언어를 변경하는 방법을 사용했습니다.

 

1

 

먼저 위그림과 같이 3개의 버튼을 만들었는데 해당 layout의 소스코드를 보면 다음과 같습니다.

 

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    <Button
        android:id="@+id/language_kor_btn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/page6_language_kor_btn"
        android:textSize="30dp"
        android:textStyle="bold"
        android:textColor="#ffffff"
        android:background="@drawable/button_pattern2"
        android:layout_margin="10dp"></Button>

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    <Button
        android:id="@+id/language_en_btn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/page6_language_en_btn"
        android:textSize="30dp"
        android:textStyle="bold"
        android:textColor="#ffffff"
        android:background="@drawable/button_pattern2"
        android:layout_margin="10dp"></Button>

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    <Button
        android:id="@+id/language_jap_btn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/page6_language_jap_btn"
        android:textSize="30dp"
        android:textStyle="bold"
        android:textColor="#ffffff"
        android:background="@drawable/button_pattern2"
        android:layout_margin="10dp"></Button>

</LinearLayout>

 

background에 적용된 button_pattern은 미리 만들어놓은 버튼의 스타일입니다.

관련된 글은 다음을 참고하시면 됩니다.

2022.01.14 - [안드로이드] - 안드로이드 버튼 스타일 변경

 

안드로이드 버튼 스타일 변경

안드로이드에서 기본적으로 지원해주는 버튼의 형식은 회색 바탕의 네모 박스 모양입니다. 대게 테스트용 프로그램 등을 작성할때 사용하고 디자인이 입혀지는 경우에는 버튼 이미지 디자인을

codinghero.tistory.com

 

버튼을 layout에 만들어 준 뒤에는 Activity에서 연결을 해준 뒤에 클릭 이벤트를 구현합니다.

 

language_kor_btn = (Button) view.findViewById(R.id.language_kor_btn);
language_en_btn = (Button) view.findViewById(R.id.language_en_btn);
language_jap_btn = (Button) view.findViewById(R.id.language_jap_btn);

 

다음 코드가 언어 변경에 핵심입니다.

 

language_en_btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Locale locale = new Locale("en");
        Locale.setDefault(locale);

        Configuration configuration = new Configuration();
        configuration.locale = locale;

        getActivity().getResources().updateConfiguration(configuration, getActivity().getResources().getDisplayMetrics());

        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("Lang", "en");
        editor.apply();

        Intent intent = getActivity().getPackageManager().getLaunchIntentForPackage(getActivity().getPackageName());
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getActivity().finish();
        startActivity(intent);
    }
});

 

먼저 영어로 변경하는 방법으로 Locale 설정을 통해 언어가 변경됩니다.

맨 첫번째 구문인 new Locale에서 자신이 변경하고자 하는 언어 타입을 넣어줍니다.

 

영어는 "en" 한글은 "ko"로 작성 후 setDefault를 통해 만든 언어 타입을 설정합니다.

 

해당 언어를 SharedPreferences를 통해 저장하고 어플이 재실행 됬을때 저장된 값을 읽어서

언어 타입을 설정해주도록 하면 한번 변경된 언어가 계속 적용됩니다.

 

마지막으로 Intent를 통해서 어플을 재실행 하도록 합니다.

어플 재실행 전에는 Locale 설정을 하더라도 어플 자체 내에 언어가 바로 변경되지는 않습니다.

 

설정을 한 뒤에는 어플 재실행을 해야 해당 언어로 변경된 것을 볼 수 있습니다.

 

그런데 이렇게만 하면 언어가 변경될까요??

변경하고자 하는 문구를 정하지 않았기 때문에 언어타입을 바꾼다고 해도 변경되지 않습니다.

 

자그럼 처음 말했던 strings.xml파일에 대해 알아보도록 하겠습니다.

언어 변경에 있어서 해당 파일이 중요한 역할을 합니다.

 

2

 

해당 파일을 열어보면 다음과 같이 string들이 나열되어 있습니다.

저는 기본적으로 메인 버튼들을 정의해놓았습니다.

 

이곳에 자신이 언어를 변경하고자 하는 문구를 전부 기입하시면 됩니다.

 

<resources>
    <string name="main_btn1">메인화면</string>
    <string name="main_btn2">환경설정</string>
    <string name="main_btn3">프로그램</string>
    <string name="main_btn4">일일집계</string>
    <string name="main_btn5">경보조회</string>
    <string name="main_btn6">설정</string>
</resources>

 

지금 정의한 것은 한국어에 대한 string을 지정해 준 것이기 때문에 영어로 변경했을 때

번역해줄 strings.xml 파일이 하나 더 필요합니다.

 

3

 

먼저 strings.xml파일 오른쪽을 눌러서 Open Translations Editor를 클릭합니다.

 

4

 

해당 지구본 모양을 눌러서 English를 선택해준 뒤에

위 그림에서 번역할 문구를 English(en) 쪽에 적어줍니다.

 

자 이제 마지막으로 번역이 될 문구의 string name을 통해 layout에 설정해주기만 하면 됩니다.

 

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <Button
        android:id="@+id/page1_btn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/main_btn1"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:textSize="25dp"
        android:textStyle="bold"
        android:textColor="#ffffff"
        android:background="@drawable/button_pattern"></Button>

</LinearLayout>

 

버튼을 만들었고 버튼의 text에 @string/main_btn1을 지정해주었습니다.

이제 어플이 한글 모드일 때에는 메인화면이라는 이름으로 보이고

영문 모드일 때에는 번역된 MAIN으로 보이게 됩니다.

728x90
반응형

댓글