Android开发-应用中英文(语言)切换(二)

这篇具有很好参考价值的文章主要介绍了Android开发-应用中英文(语言)切换(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        APP中针对不同国家不同地区的人群使用那么应用的语言自然也要能够随时进行切换,最近做的项目有中文和英文切换的需求,所以在了解了一下网上常用的方法后记录一下我使用的方法,只是简单的应用,后续如果有不同需求需要自己去改。♻

        一、Android Studio新建工程

Android开发-应用中英文(语言)切换(二)

Android开发-应用中英文(语言)切换(二)

         新建工程就不过多赘述了,建好之后记得运行一下,看看是否建立的正确,养成良好习惯。

        二、添加对应语言的配置文件

        在res目录下新建一个对应语言的配置文件(这里以英文为例)。

Android开发-应用中英文(语言)切换(二)

Android开发-应用中英文(语言)切换(二)

Android开发-应用中英文(语言)切换(二)

 好,建立好配置文件后外面可以看看res目录下就多了values-en文件夹。

Android开发-应用中英文(语言)切换(二)

 然后点击进去这个英文的配置文件,将默认中文中的字符定义全部复制过来替换成英文。

        原默认中文文件:

Android开发-应用中英文(语言)切换(二)

        需要切换的英文文件:

Android开发-应用中英文(语言)切换(二)

         接下来定义一下主界面的UI,随便写了几个按键做测试。

Android开发-应用中英文(语言)切换(二)

         代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:padding="0dp"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_marginTop="20dp"
        android:orientation="vertical"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="wrap_content"
            android:text="@string/btn_test1"
            android:layout_margin="5dp"
            android:layout_height="wrap_content"/>

        <Button
            android:layout_width="wrap_content"
            android:text="@string/btn_test2"
            android:layout_margin="5dp"
            android:layout_height="wrap_content"/>

        <Button
            android:layout_width="wrap_content"
            android:text="@string/btn_test3"
            android:layout_margin="5dp"
            android:layout_height="wrap_content"/>

        <Button
            android:layout_width="wrap_content"
            android:text="@string/btn_test4"
            android:layout_margin="5dp"
            android:layout_height="wrap_content"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_marginTop="200dp"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/language1"
            android:layout_width="match_parent"
            android:text="切换中文"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/language2"
            android:layout_width="match_parent"
            android:text="切换英文"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>

         

        三、添加语言切换与保存的工具

        添加两个 LanguageUtil、SpUserUtils java类文件。

        LanguageUtil 代码:

package com.example.my_language_test3;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;

import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Locale;

/**
 * 功能描述:修改app内部的语言工具类
 */
public class LanguageUtil {

    /*语言类型:
     * 此处支持3种语言类型,更多可以自行添加。
     * */
    private static final String ENGLISH = "en";
    private static final String CHINESE = "ch";
    private static final String TRADITIONAL_CHINESE = "zh_rTW";

    private static HashMap<String, Locale> languagesList = new HashMap<String, Locale>(3) {{
        put(ENGLISH, Locale.ENGLISH);
        put(CHINESE, Locale.CHINESE);
        put(TRADITIONAL_CHINESE, Locale.TRADITIONAL_CHINESE);
    }};

    /**
     * 修改语言
     *
     * @param activity 上下文
     * @param language 例如修改为 英文传“en”,参考上文字符串常量
     * @param cls      要跳转的类(一般为入口类)
     */
    public static void changeAppLanguage(Activity activity, String language, Class<?> cls) {
        Resources resources = activity.getResources();
        Configuration configuration = resources.getConfiguration();
        // app locale 默认简体中文
        Locale locale = getLocaleByLanguage(StringUtils.isEmpty(language) ? "zh" : language);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            configuration.setLocale(locale);
        } else {
            configuration.locale = locale;
        }
        DisplayMetrics dm = resources.getDisplayMetrics();
        resources.updateConfiguration(configuration, dm);

        Log.e("Log","设置的语言:" + language);
        //finish();
        // 重启app
        Intent intent = new Intent(activity, cls);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        activity.startActivity(intent);
        //加载动画
        //activity.overridePendingTransition(R.anim.anim_right_in, R.anim.anim_left_out);
        //activity.overridePendingTransition(0, 0);
    }

    /**
     * 获取指定语言的locale信息,如果指定语言不存在
     * 返回本机语言,如果本机语言不是语言集合中的一种,返回英语
     */
    private static Locale getLocaleByLanguage(String language) {
        if (isContainsKeyLanguage(language)) {
            return languagesList.get(language);
        } else {
            Locale locale = Locale.getDefault();
            for (String key : languagesList.keySet()) {
                if (TextUtils.equals(languagesList.get(key).getLanguage(), locale.getLanguage())) {
                    return locale;
                }
            }
        }
        return Locale.ENGLISH;
    }

    /**
     * 如果此映射包含指定键的映射关系,则返回 true
     */
    private static boolean isContainsKeyLanguage(String language) {
        return languagesList.containsKey(language);
    }

}

SpUserUtils 代码:
package com.example.my_language_test3;

import android.content.Context;
import android.content.SharedPreferences;

public class SpUserUtils {

    private static SharedPreferences sp;

    private static SharedPreferences getSp(Context context) {
        if (sp == null) {
            sp = context.getSharedPreferences("SpUtil", Context.MODE_PRIVATE);
        }
        return sp;
    }

    /**
     * 存入字符串
     *
     * @param context 上下文
     * @param key     字符串的键
     * @param value   字符串的值
     */
    public static void putString(Context context, String key, String value) {
        SharedPreferences preferences = getSp(context);
        //存入数据
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString(key, value);
        editor.commit();
    }

    /**
     * 获取字符串
     *
     * @param context 上下文
     * @param key     字符串的键
     * @return 得到的字符串
     */
    public static String getString(Context context, String key) {
        SharedPreferences preferences = getSp(context);
        return preferences.getString(key, "");
    }

    /**
     * 清除String
     * @param context
     * @param key
     */
    public static void clearString(Context context, String key) {
        SharedPreferences sp = getSp(context);
        SharedPreferences.Editor editor = sp.edit();
        editor.remove(key);
        editor.apply();
//        editor.clear();
//        editor.commit();
    }
}


        注意:    如果 LanguageUtil 类中的 StringUtils 没有添加依赖的话需要自行添加。

Android开发-应用中英文(语言)切换(二)

        在build.gradle中添加依赖  ‘implementation 'org.apache.commons:commons-lang3:3.7'

Android开发-应用中英文(语言)切换(二)

implementation 'org.apache.commons:commons-lang3:3.7'

  随后在 MainActivity 中实现功能。

package com.example.mylanguage_test;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button language1,language2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        language1 = findViewById(R.id.language1);
        language2 = findViewById(R.id.language2);

        language1.setOnClickListener(this);
        language2.setOnClickListener(this);
    }

    @SuppressLint("NonConstantResourceId")
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.language1:
                //中文简体
                showSaveLanguage("zh");
                break;
            case R.id.language2:
                //英文
                showSaveLanguage("en");
                break;
        }
    }

    /**
     * 保存设置的语言
     */
    private void showSaveLanguage(String language){
        //设置的语言、重启的类一般为应用主入口(微信也是到首页)
        LanguageUtil.changeAppLanguage(this, language, MainActivity.class);
        //保存设置的语言
        SpUserUtils.putString(this, "language", language);
    }
}

        好了,到这里就可以进行简单的测试了,编译运行APP就可以看到这样的效果。

Android开发-应用中英文(语言)切换(二)

 Android开发-应用中英文(语言)切换(二)

Screenrecorder

        到这里以及可以实现简单的中英文语言切换了,都是可以发现每当外面销毁这个应用程序后这个切换语言的设置并不会保存,在使用中不可能每次都要去选择语言吧!在上面外面添加工具类的时候添加了一个语言保存工具类就是为了后续这里使用的。

        那么首先我们需要新建一个activity,用于切换与保存使用。

Android开发-应用中英文(语言)切换(二)

 Android开发-应用中英文(语言)切换(二)

         添加功能代码

Android开发-应用中英文(语言)切换(二)

        代码:

package com.example.mylanguage_test;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;

public class Guidance_line extends AppCompatActivity {

    //防止重复打开界面
    private static boolean ISFIRST = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guidance_line);


        String language = SpUserUtils.getString(this, "language");
        if (ISFIRST) {
            ISFIRST = false;
            LanguageUtil.changeAppLanguage(this, language, Guidance_line.class);
        }
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }

}

         然后下一步来到清单文件中改变启动 activity,可以看到新建之后多了一个

Android开发-应用中英文(语言)切换(二)

       将MainActivity 中的启动代码复制到我们新建的 Guidance_line Activity中去,将 exported 修改为true。

Android开发-应用中英文(语言)切换(二)

 <activity
            android:name=".Guidance_line"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:exported="false">

        </activity>

         接下来运行一下应用看看效果。当我们销毁应用程序后再次打开的时候还是保留着上一次的语言设置,如果还有其他语种的也是同样的方法去添加。

        好了,到这里就记录的差不多了,这篇文章只是记录我自己实现这个功能的过程,也是参考别的大佬的文章改出来的。本篇中的demo会在下面贴上下载链接,有需要的自行下载使用。🐎文章来源地址https://www.toymoban.com/news/detail-491318.html

到了这里,关于Android开发-应用中英文(语言)切换(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末)

    B站演示 【Android安卓实战项目(12)—生活助手类APP—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】】 https://www.bilibili.com/video/BV1Wu4y1C76j/?share_source=copy_webvd_source=b2e9b9ed746acda34f499009647748ed 这段代码是一个Android应用程序的主要活动(Activity),它是一

    2024年02月10日
    浏览(46)
  • Vue前端使用I18实现中英文切换

    一、配置vue-i18 1. 进入src/locales/index.js 2. 查看 src/utils/tool.js文件 3. 查看 src/locales/lang/zh-cn.js、src/locales/lang/en.js 二、配置页面 进入需要有翻译功能的页面进行配置,如 login.vue 1. HTML内容 2. JS内容 三、主要步骤 方法一 ① 页面上添加小地球选择语言显示选项 ② 实现添加的小地

    2024年04月25日
    浏览(48)
  • vue 管理后台 使用虚拟键盘组件 支持中英文切换

    前言:在大型触屏设备(如双屏设备)中,就没有键盘去操作,而且在触屏input或者textarea的输入时候就无法去输入值,没办法触发输入框enter事件,所以就需要去建立一个虚拟键盘去操作 就想着找一找vue有没有类似的键盘组件。 还!真!有! 项目使用框架:vue+element ui 官网

    2024年02月11日
    浏览(42)
  • nuxt使用i18n进行中英文切换

    中文效果图: 英文效果图: 版本: 安装:  新建en.js与zh.js两个文件进行切换显示 en.js内容  zh.js内容: 在plugins下新建i18n.js i18n.js内容:  在nuxt.config.js引入i18n.js 切换按钮( 两种切换方式选择一种即可 ) 页面展示 有导航的需要在导航切换的时候处理一下相关内容:

    2024年02月07日
    浏览(54)
  • vmware虚拟机Linux系统中英文输入法及切换方法

            许多同学在安装虚拟机联网之后,打开浏览器进行搜索时,发现无法正常进行中英文的切换,下面将简单介绍一下vmware虚拟机Linux系统( CentOS7)中英文输入法及切换方法。  1:打开虚拟机右上角的网络,点击设置的小图标 2:选择区域和语言( 地区和语言),然后在

    2024年02月12日
    浏览(43)
  • 花一分钟彻底搞懂Mac输入法/中英文/大小写切换

    最近有麦友说:没搞懂 Mac 怎么切换输入法、中英文和大小写,比如以前点按大写锁定键就可以切换到大写,现在要长按。有的时候点按大写锁定键或 shift 键都可以切换中英文,有的时候又不行。切换的时候基本就是碰运气瞎按。 之所以会有这种感觉,可能是因为以下几点:

    2024年02月07日
    浏览(62)
  • 微信小程序英文版:实现一键切换中英双语版(已组件化)

    已经重新优化代码做成了组件,需要可自取:https://github.com/CrystalCAI11/wechat-language-compoment 所有操作都打包在组件里不需要在额外的地方添加代码,直接在你需要的页面里导入组件,再在对应页面的onLoad()里set文本就行了。 第一步,找个地方新建中英文两个字典,我是放在ut

    2024年04月17日
    浏览(60)
  • QT+C++桌面程序窗体框架模板-中英文切换-文件打开历史记录-工具选项设置

    程序示例精选 QT+C++桌面程序窗体框架模板-中英文切换-文件打开历史记录-工具选项设置 如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助! 这篇博客针对《QT+C++桌面程序窗体框架模板-中英文切换-文件打开历史记录-工具选项设置》编写代码,

    2024年01月24日
    浏览(55)
  • STM32-LCD中英文显示及应用

    目录 字符编码 ASCII码(8位) 中文编码(16位) GB2312标准 GBK编码 GB18030标准(32位) Big5编码 Unicode字符集和编码 UTF-32(32位) UTF-16(16位/32位,变长编码方式) UTF-8(8位/16位/24位/32位,变长编码方式) 实验环节1:LCD显示中英文(字库存储在外部Flash) 存储在外部Flash的字模

    2024年02月08日
    浏览(43)
  • 【AI实战】开源可商用的中英文大语言模型baichuan-7B,从零开始搭建

    baichuan-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型。基于 Transformer 结构,在大约1.2万亿 tokens 上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威 benchmark(C-EVAL/MMLU)上均取得同尺寸最好的效果。 GitHub: https://github.c

    2024年02月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包