如何在Android app中以编程方式在两种语言之间切换?

时间:2017-01-25 05:08:08

标签: java android

我需要在android应用程序本身内部切换两种语言。 现在,我在两个不同文件夹中的两个strings.xml文件中有两种不同语言的字符串值,一个在Values文件夹下(默认情况下),另一个在values-fr(for french)下,在尝试时创建android studio中的语言。但我不知道如何在语言之间切换。 它显示默认语言(即英语),但不知道如何实现切换到其他语言的方式。

有没有人能够轻松实现它??

2 个答案:

答案 0 :(得分:0)

您可以使用语言环境类来执行此操作。希望这有助于

   public class LocaleLanguage {

    private static Locale mLocale;

    public static void setLocale(Locale locale) {
        mLocale = locale;
        if(mLocale != null) {
            Locale.setDefault(mLocale);
        }
    }

    public static void updateConfig(ContextThemeWrapper wrapper) {
        if(mLocale != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            Configuration configuration = new Configuration();
            configuration.setLocale(mLocale);
            wrapper.applyOverrideConfiguration(configuration);
        }
    }

    public static void updateConfig(Application app, Configuration configuration) {
        if(mLocale != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
            //Wrapping the configuration to avoid Activity endless loop
            Configuration config = new Configuration(configuration);
            config.locale = mLocale;
            Resources res = app.getBaseContext().getResources();
            res.updateConfiguration(config, res.getDisplayMetrics());
        }
    }
}

这是应用程序类

    public class App extends Application {
    public void onCreate(){
        super.onCreate();
        // get user preferred language set locale accordingly new locale(language,country)
        LocaleUtils.setLocale(new Locale("iw"));
        LocaleUtils.updateConfig(this, getBaseContext().getResources().getConfiguration());
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        LocaleUtils.updateConfig(this, newConfig);
    }
}

这是您的活动

 public class MainActivity extends Activity {
    public BaseActivity() {
        LocaleUtils.updateConfig(this);
    }
}

有关详细信息,请参阅此link以获取整个教程,请参阅此link

答案 1 :(得分:0)

您可以使用Android-LocalizationActivity

这里摘自文档:

  

在您的支持多种语言的情况下保持冷静并保持轻松   android应用程序。

     

它是支持多种语言的Android应用程序的基础。   是啊!它非常简单,因为android有String Resource。开发人员   只需要准备不同语言的文本然后android   系统将使用自己。但经常出现的问题是&#34;准时语言   改变&#34 ;.因为字符串资源的设计依赖于   当前的设备语言。但如果我们想改变语言   点击某个按钮。它很难处理。这个问题   将解决因为我已经创建了一个新的库来处理应用程序   语言。它称为“#34;本地化活动”#34;库。

这里是从文档中使用它的示例:

import android.os.Bundle;
import android.view.View;

import com.akexorcist.localizationactivity.LocalizationActivity;

public class MainActivity extends LocalizationActivity implements View.OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple);

        findViewById(R.id.btn_th).setOnClickListener(this);
        findViewById(R.id.btn_en).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.btn_en) {
            setLanguage("en");
        } else if (id == R.id.btn_th) {
            setLanguage("th");
        }
    }
}

在上面的示例中,当用户单击按钮时。它将改为英语或泰语。