2017-12-07 5 views
1

나는이 커뮤니티에 새로운 회원입니다. 모두에게 "안녕하세요"..... 이것은 첫 번째 질문입니다. 이것은 안드로이드 애플 리케이션 개발을 기반으로합니다. 이것이 제 질문입니다. 아직 3 가지 언어로 개발할 필요가있는 애플리케이션에서 Android 애플리케이션을 개발 중입니다.안드로이드 애플 리케이션 언어 programmaticallly을 변경하는 방법

1.English - "엉" 2.Chinese (간체) - "zh_" 3.Chinese (번체) - "의 zh_TW"

그래서 내가이 언어에 대한 문자열 리소스를 추가하고 내가 코드를 구현 하지만 불행히도 시간이 걸리지 않습니다.하지만 시간이 좀 걸립니다. 나는 내 코드의 실수를 밝힐 수 없다. 어떤 오류도없는 것 같습니다.登录

  • "의 zh_TW"- -

  • "에서 zh _"에서 -sign "엉"내 테스트 문자열 이름 (모든 lanuages)

    • 입니다

    이 登錄

  • 내 코드 부분입니다

    public class MainActivity extends AppCompatActivity { 
    
    private Spinner spinnerctrl; 
    private Locale myLocale; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    
        spinnerctrl=(Spinner)findViewById(R.id.spinner1); 
    
        spinnerctrl.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    
         public void onItemSelected(AdapterView<?> parent, View view, 
                int pos, long id) { 
    
          if (pos == 1) { 
    
           Toast.makeText(parent.getContext(), 
             "You have selected Chinese(Simplified)", Toast.LENGTH_SHORT) 
             .show(); 
           saveLocale("zh"); 
          } else if (pos == 2) { 
    
           Toast.makeText(parent.getContext(), 
             "You have selected Chinese(Traditional)", Toast.LENGTH_SHORT) 
             .show(); 
           saveLocale("zh_TW"); 
    
          } 
          else if (pos == 3) 
          { 
           Toast.makeText(parent.getContext(), 
             "You have select English",Toast.LENGTH_SHORT) 
             .show(); 
           saveLocale("en"); 
          } 
    
         } 
    
         public void onNothingSelected(AdapterView<?> arg0) { 
          // TODO Auto-generated method stub 
         } 
    
        }); 
    
        loadLocale(); 
    
    @Override 
    public void onBackPressed() 
    { 
        Intent MyProfile = new Intent(getApplicationContext(), MainActivity.class); 
        startActivity(MyProfile); 
        finish(); 
    } 
    
    public void loadLocale() { 
        String langPref = "Language"; 
        SharedPreferences prefs = getSharedPreferences("CommonPrefs", 
          Activity.MODE_PRIVATE); 
        String language = prefs.getString(langPref, ""); 
        changeLang(language); 
    } 
    
    public void changeLang(String lang) { 
        if (lang.equals("")) 
         return; 
        myLocale = new Locale(lang); 
        saveLocale(lang); 
        Locale.setDefault(myLocale); 
        Resources res = getResources(); 
        DisplayMetrics dm = res.getDisplayMetrics(); 
        Configuration conf = res.getConfiguration(); 
        conf.locale = myLocale; 
        res.updateConfiguration(conf, dm); 
    } 
    
    public void saveLocale(String lang) { 
        String langPref = "Language"; 
        SharedPreferences prefs = getSharedPreferences("CommonPrefs", 
          Activity.MODE_PRIVATE); 
        SharedPreferences.Editor editor = prefs.edit(); 
        editor.putString(langPref, lang); 
        editor.commit(); 
    
    }} 
    

    그래서 내 prob입니다. lem.this 코드 부분은 런타임 오류없이 실행되지만 잠시 작동하지 않습니다. 왜 그런지 모르겠군요. 그래서 아무도 내가이 문제를 슬 루핑하도록 도울 수 있다면 그것은 나에게 큰 도움이됩니다. 감사합니다.

    답변

    0
    public static void changeLocale(Context context, String localeString) { 
    
    String locale = "en"; 
    if (localeString != null) { 
        if (localeString.equals("Malay")) { 
         locale = "ms"; 
        } else if (localeString.equals("Myanmar")) { 
         locale = "my"; 
        } else if (localeString.equals("Tamil")) { 
         locale = "ta"; 
        } 
    } 
    
    Locale myLocale = new Locale(locale); 
    Resources res = context.getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    
    } 
    
    +0

    왜 문맥을 사용할 수 있습니까? – androidpc

    +0

    context.getResources(); // 애플리케이션 컨텍스트에서 리소스를 가져와야한다. –