Android 는 app 응용 다 중 언어 전환 기능 을 실현 합 니 다.

5068 단어 androidapp언어.
최근 에 다 중 언어 전환 기능 을 하고 있 습 니 다.위 챗 과 비슷 한 언어 전환 을 하고 있 습 니 다.자 료 를 찾 아 보 니 대체적으로 다음 과 같 습 니 다.
1.실현 되 는 효과
 
위 챗 과 유사 하 게 설정 인터페이스 에서 언어 를 전환 하 는 인 터 페 이 스 를 열 고,언어 를 선택 한 후 홈 액 티 비 티 를 다시 시작 하면 언어 전환 이 완료 되 며,다음 에 앱 을 다시 여 는 것 도 사용자 가 설정 한 언어 입 니 다. 
2.실현 절차
 1).다 중 언어 파일 추가 
서로 다른 value 폴 더 에(예 를 들 어 value,value-en,values-zh-rtW 폴 더)서로 다른 언어의 string.xml 파일 을 추가 합 니 다.우리 의 프로젝트 는 영어,간 체 중국어,번 체 중국어 세 가지 언어 를 추 가 했 습 니 다.아래 그림 과 같 습 니 다.
 
그 중에서 영 어 는 번역 이 필요 합 니 다.번 체 가 전문 적 으로 번역 되 지 않 으 면 번 거 로 운 사 이 트 를 찾 아 간 체 중국 어 를 번 체 중국어 로 바 꿀 수 있 습 니 다.제 가 사용 하 는 이 사 이 트 는온라인 중국어 간 체 번 체. 
2).Configuration 의 locale 속성 업데이트 
Android 개발 자 홈 페이지 의 설명 을 참조 하여 Configuration 은 장치 의 모든 설정 정 보 를 포함 하고 있 으 며,이러한 설정 정 보 는 응용 프로그램 이 가 져 온 자원 에 영향 을 줄 수 있 습 니 다.예 를 들 어 string 자원 은 Configuration 의 locale 속성 에 따라 어떤 언어의 string 자원 을 가 져 가 야 하 는 지 판단 하 는 것 입 니 다.기본 값 은 value 폴 더 에 있 습 니 다. 
주요 코드 는 다음 과 같 습 니 다.

Resources resources = getContext().getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
Configuration config = resources.getConfiguration();
 //         
 config.locale = Locale.ENGLISH;
 resources.updateConfiguration(config, dm); 
우 리 는 Locale 의 미리 설 정 된 값 Locale.ENGLISH,Locale.TRADITIONAL 을 사 용 했 습 니 다.CHINESE 와 Locale.SIMPLIFIEDCHINESE,설정 할 언어 에 미리 설 정 된 값 이 없다 면 Locale 대상 을 새로 만 들 고 구체 적 으로 자체 구 글 을 만 들 수 있 습 니 다. 
주:시스템 설정 에 따라 Locale.getDefault() 
3).HomeActivity 다시 시작
 우리 앱 은 시작 페이지 인 WelcomeActivity 가 있 습 니 다.위 챗 과 같은 소인 시작 페이지 가 있 습 니 다.환영 페이지 에서 다시 시작 하면 좋 은 체험 이 아 닙 니 다.위 챗 의 언어 설정 과 같이 WelcomeActivity 에서 다시 시작 하 는 것 이 아니 라 홈 Activity 로 돌아 가 야 합 니 다.실현 도 간단 합 니 다.코드 는 다음 과 같 습 니 다. 

Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
getActivity().startActivity(intent); 
일반적으로 이 코드 는 문제 가 없 을 것 입 니 다.그러나 만약 당신 의 App 에 어떤 activity 와 현재 설정 페이지 activity 가 task 스 택 에 없다 면(예 를 들 어 특정한 알림 페이지 에서 FLAG 를 사용 합 니 다.ACTIVITY_NEW_TASK 가 시작 하 는 액 티 비 티 하나)는 언어 설정 을 적용 하지 않 는 다.따라서 현재 App 의 프로 세 스 를 직접 죽 일 수 있 습 니 다.'전체'가 다시 시작 되 었 음 을 보증 합 니 다. 

 Intent intent = new Intent(this, HomeActivity.class);
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
 startActivity(intent);
 //     
 android.os.Process.killProcess(android.os.Process.myPid());
 System.exit(0); 
프로 세 스 의 두 줄 코드 를 한 줄 씩 죽 이면 되 지만 관련 자 료 를 찾 아 보 는 것 은 둘 다 추가 하 는 것 이 좋 습 니 다.상세 하 게 알 고 있 으 면 소통 을 환영 합 니 다.이 코드 는 사용자 정의 Activity OnCrash 오픈 소스 프로젝트 를 참고 하여 관심 이 있 는 것 은 이 오픈 소스 라 이브 러 리 에서 충돌 정 보 를 포착 하고 응용 부분의 코드 를 다시 시작 하 는 것 을 연구 할 수 있 습 니 다.
개인 적 으로 이런 홈 액 티 비 티 를 재 개 하 는 방법 은 너무 거 칠 고 체험 이 좋 지 않다 고 생각 하지만 위 챗 도 홈 액 티 비 티 를 이렇게 재 개 한 것 같다.일반적인 언어 전환 설정 은 비교적 깊이 숨 어 있 습 니 다.예 를 들 어 위 챗 등 입 니 다.만약 에 한 사용자 가 핸드폰 조작 에 익숙 하지 않 거나 이 응용 프로그램 에 익숙 하지 않다 고 하면 실수 로 어떤 언어 를 바 꾸 었 는 지 모 르 고 홈 페이지 로 뛰 어 들 고 중국 어 를 다시 설정 하려 면 귀 찮 습 니 다.그래서 저 는 언어 를 자 르 고 바로 새로 고침 한 다음 에 현재 페이지 에 머 무 르 는 것 이 좋 겠 다 고 생각 합 니 다.구체 적 인 실현 은 다음 과 같다. 
1.다 중 언어 파일 을 추가 하 는 것 이 위의 절차 1 과 같 습 니 다.
2.BaseActivity 에서 언어 전환 코드 구현: 

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    EventBus.getDefault().register(this);
    changeAppLanguage();
  } 

public void changeAppLanguage() {
     String sta = Store.getLanuageIsChinese() ? "zh" : "en";//  SharedPreferences   ,      ,     ,     
     //       
     Locale myLocale = new Locale(sta);
     Resources res = getResources();
     DisplayMetrics dm = res.getDisplayMetrics();
     Configuration conf = res.getConfiguration();
     conf.locale = myLocale;
     res.updateConfiguration(conf, dm);
   } 

 public void onEvent(String str) {
     switch (str) {
       case Constant.EVENT_REFRESH_LANGUAGE:
         changeAppLanguage();
         recreate();//    
         break;
    }
  } 

 @Override
   protected void onDestroy() {
    super.onDestroy();
     EventBus.getDefault().unregister(this);
  } 
3.설정 인터페이스의 실현 은 자 연 스 럽 게 shared Preferences 의 설정 을 업데이트 한 다음 에 EventBus 를 보 내 면 됩 니 다.     

 if () {//  
       Store.setLanuageIsChinese(true);
     } else if () {//  
       Store.setLanuageIsChinese(false);
     }
     EventBus.getDefault().post(Constant.EVENT_REFRESH_LANGUAGE);
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기