首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android中以编程方式更改应用程序语言

在Android中以编程方式更改应用程序语言
EN

Stack Overflow用户
提问于 2010-05-25 04:17:44
回答 17查看 445.5K关注 0票数 525

有没有可能在使用Android资源的同时,以编程方式更改应用程序的语言?

如果不是,是否可以请求特定语言的资源?

我想让用户从应用程序中更改应用程序的语言。

EN

回答 17

Stack Overflow用户

发布于 2016-02-25 11:02:03

如果你想在你的所有应用程序中强制改变语言,你必须做两件事。

首先,创建一个基本活动,并使您的所有活动都从以下内容扩展:

代码语言:javascript
复制
public class BaseActivity extends AppCompatActivity {

    private Locale mCurrentLocale;

    @Override
    protected void onStart() {
        super.onStart();

        mCurrentLocale = getResources().getConfiguration().locale;
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Locale locale = getLocale(this);

        if (!locale.equals(mCurrentLocale)) {

            mCurrentLocale = locale;
            recreate();
        }
    }

    public static Locale getLocale(Context context){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);

        String lang = sharedPreferences.getString("language", "en");
        switch (lang) {
            case "English":
                lang = "en";
                break;
            case "Spanish":
                lang = "es";
                break;
        }
        return new Locale(lang);
    }
}

请注意,我将新语言保存在sharedPreference中。

第二,创建应用程序的扩展,如下所示:

代码语言:javascript
复制
    public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        setLocale();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        setLocale();
    }

    private void setLocale() {

        final Resources resources = getResources();
        final Configuration configuration = resources.getConfiguration();
        final Locale locale = getLocale(this);
        if (!configuration.locale.equals(locale)) {
            configuration.setLocale(locale);
            resources.updateConfiguration(configuration, null);
        }
    }
}

请注意,getLocale()与上面的相同。

就这样!我希望这能帮助到一些人。

票数 36
EN

Stack Overflow用户

发布于 2013-09-25 18:01:34

只是多加了一块让我被绊倒了。

而其他答案用"de“就可以了,例如

代码语言:javascript
复制
String lang = "de";
Locale locale = new Locale(lang); 
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, 
    getBaseContext().getResources().getDisplayMetrics());

例如,上面的代码不适用于"fr_BE"语言环境,因此它将使用values-fr-rBE文件夹或类似的文件夹。

要使用"fr_BE",需要做以下细微的更改

代码语言:javascript
复制
String lang = "fr";

//create a string for country
String country = "BE";
//use constructor with country
Locale locale = new Locale(lang, country);

Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, 
    getBaseContext().getResources().getDisplayMetrics());
票数 16
EN

Stack Overflow用户

发布于 2013-02-19 14:59:07

我为我的应用程序start本身更改了德语。

这是我的正确代码。有没有人想对我用同样的..(如何以编程方式更改android中的语言)

我的代码:

代码语言:javascript
复制
Configuration config ; // variable declaration in globally

// this part is given inside onCreate Method starting and before setContentView()

public void onCreate(Bundle icic) 
{
    super.onCreate(icic);
    config = new Configuration(getResources().getConfiguration());
    config.locale = Locale.GERMAN ;
    getResources().updateConfiguration(config,getResources().getDisplayMetrics());

    setContentView(R.layout.newdesign);
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2900023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档