[android studio] [Java][Android] 안드로이드 다국어 지원

여러 국가를 대상으로 하는 앱을 만들떄, 해당 국가의 언어에 맞게 여러 언어를 제공해줘야 할 필요가 있습니다. 

이번 예제에서는 어떻게 다국어를 지원해줄 수 있는지 알아보도록 하겠습니다. 

 

프로젝트의 문자열 리소스는 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를 열어줍니다. 

 

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

그 다음, 왼쪽 상단에 있는 지구 모양 버튼을 클릭 후, 추가하고 싶은 언어를 선택해줍니다. 여기선 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 메서드 작성 시, 스틱코드를 활용하여 바로 불러왔습니다. 

위 코드를 통해 사용자가 원하는 언어로 앱 기본 언어를 설정 해줄 수 있습니다. 

 

[출처] https://stickode.tistory.com/105

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
121 [android studio] 안드로이드 스튜디오 패키지명 변경 방법 file 졸리운_곰 2024.01.28 1
120 [React Native] 리액트 네이티브 안드로이드 기기 빌드 에러 졸리운_곰 2023.12.17 1
119 [android studio] 안드로이드 앱 내부 배포 시 Play프로텍트에 인증받고 배포하기 file 졸리운_곰 2023.03.23 3
» [android studio] [Java][Android] 안드로이드 다국어 지원 file 졸리운_곰 2023.03.21 5
117 [android studio] [안드로이드 스튜디오] 다국어 지원 strings.xml 파일 생성 방법 file 졸리운_곰 2023.03.21 12
116 [android studio] 구글 플레이 스토어 등록 어떻게? 2편 - 키스토어 생성과 릴리즈 빌드 하기 file 졸리운_곰 2023.03.21 5
115 [android studio] 구글 플레이 스토어 등록 어떻게? 1편 - 준비해야 할 것들 졸리운_곰 2023.03.21 5
114 [android studio] 웹페이지를 apk 앱으로 | 쉽게 따라하는 웹앱 만들기 file 졸리운_곰 2023.03.21 11
113 [android studio] 안드로이드 아이콘이 2개 생성될 때 졸리운_곰 2023.03.21 2
112 [android studio] Convert Any Website to Android App using Android Studio file 졸리운_곰 2023.03.18 1
111 [android studio] How to Convert Any Website to Android App in Android Studio? file 졸리운_곰 2023.03.18 5
110 [phonegap][cordova] [안드로이드] 코도바 앱(App) 개발 환경 세팅 file 졸리운_곰 2023.02.05 9
109 [android studio] 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8. file 졸리운_곰 2022.11.17 4
108 [android sdk] 안드로이드에서 JWT 사용하기 졸리운_곰 2022.07.15 22
107 [Android Studio] Android Native App 에서 mysql , php 연결 : PHP MySQL REST API for Android file 졸리운_곰 2021.12.02 104
106 Android PHP MySQL 예제 - 데이터베이스에서 데이터를 JSON 형식으로 가져오기 file 졸리운_곰 2021.07.24 208
105 Android PHP MySQL 예제 - 데이터베이스 질의(query) 결과 출력하기 file 졸리운_곰 2021.07.24 539
104 [android] 안드로이드에서 mysql 데이터베이스 입력, 접속 / Android PHP MySQL 예제 - 데이터베이스에 데이터 입력하기 file 졸리운_곰 2021.07.24 117
103 Android 에서 Opencv 설치하고 간단한 예제 실행해보기!! file 졸리운_곰 2020.10.31 332
102 안드로이드 나인 패치(9-Patch) 이미지 버튼. (Android Nine-Patch Image Button) file 졸리운_곰 2020.10.10 147
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED