Android 多语言设置,这里演示中英文转换

时间:2025-01-19 14:23:14

有的项目需要国际化,这样在语言需求方面就比较多了,所以我们需要设置语言转换,语言有很多,这里示范中英文转换。

工具:Android Studio

1、生成需要转换语种的 文件

2、语种使用设置

3、语种转换

 

1、生成需要转换语种的 文件

在android studio项目中,点击 鼠标右键 res > new > android Resource Directory 将会看到如下界面

选中 Locale ,将会看到如下界面

选中英文语言后点击ok,就会生成右边界面看到的 values-en 文件夹,在里面创建一个新的 文件,用来放置英文内容

如图,values 里面的 用来设置中文以及常规加载, values-en 文件夹下的 用来设置英文加载

 

2、语种使用设置

上面定义好语种放置位置之后就可以进行设置,让系统知道加载哪个文件夹下的语言文件

这里我们在 Application 里设置语言,代码如下:

import ;
import ;
import ;
import ;
import ;
import ;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        ();

        String language = (this);
        if(!("Language")){
            Locale locale = ();
            (this, locale,true);
        }

    }
}

上面的 (this) 和 () 以及 (this, locale,true)

这三个方法参考 3 语种转换

3、语种转换

因为这里只有两种语言需要切换,所以我只用了一个按钮来控制切换

代码如下:

(new () {
    @Override
    public void onClick(View v) {
        String language = ();
        if(("Language")){
            (, , true);
        }else{
            ("Language", );
        }
    }
});

其中  SPUtils 是我定义的一个 SharedPreferences 工具类,用来保存语言设置,代码如下

//Language
public static String getLanguage(Context context){
    return share(context).getString("Language","Language");
}
//这里使用的是 apply() 方法保存,将不会有返回值
public static void setLanguage(String Language, Context context){
     e = share(context).edit();
    ("Language",Language);
    ();
}

//创建
public static SharedPreferences share(Context context){
    SharedPreferences sharedPreferences = ("data", Context.MODE_PRIVATE);
    return sharedPreferences;
}

上面我定义的是默认为 “Language” 就是如果 SharedPreferences 里 getLanguage 里面的值为 “Language” 时,显示默认的也就是中文语言。如果当前是中文语言,就调用 LanguageUtils 语言工具类,里面的 changeAppLanguage 语言设置方法进行设置,代码如下:

import ;
import ;
import ;
import ;
import ;
import ;
import ;

/**
 * creator iscopy .
 * time 2018/12/27
 * 语言设置
 */
public class LanguageUtils {

    /**
     * 更改app语言
     * @param context
     * @param locale
     * @param persistence
     */
    public static void changeAppLanguage(Context context, Locale locale, boolean persistence) {
        Resources resources = ();
        DisplayMetrics metrics = ();
        Configuration configuration = ();
        if (.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            (locale);
        } else {
             = locale;
        }
        (configuration, metrics);
        if (persistence) {
            ((), context);//保存设置的语言
        }
    }

    /**
     * 返回当前使用语言
     * @return
     */
    public static Locale getAppLocale(){
        Locale locale = new Locale(());
        return locale;
    }
}

这样就简单的实现了语言切换的效果,效果展示:

 

不过,这里有一个缺陷,转换效果需要重启app才能够实现,因为数据已经加载好了,当前实时实现语言切换的需要后台数据

我们可以提示用户,需要重启APP才能实现语言切换,让用户去重启,也可以设置如下代码,在永用户同意的情况下调用,个人觉得可以使用弹框询问,如果是第一次进入时,可以在过了引导页后直接跳转跳转到语言设置去

//重启app
public void restart(){
    /*//关闭app
    Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
    (Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);*/
    Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
    PendingIntent restartIntent = (getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
    AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    (, (), restartIntent);
    (());
}

如果有很多种语言设置也可以参照当前逻辑