Code Monkey home page Code Monkey logo

multilanguages's Introduction

语种切换框架

集成步骤

  • 如果你的项目 Gradle 配置是在 7.0 以下,需要在 build.gradle 文件中加入
allprojects {
    repositories {
        // JitPack 远程仓库:https://jitpack.io
        maven { url 'https://jitpack.io' }
    }
}
  • 如果你的 Gradle 配置是 7.0 及以上,则需要在 settings.gradle 文件中加入
dependencyResolutionManagement {
    repositories {
        // JitPack 远程仓库:https://jitpack.io
        maven { url 'https://jitpack.io' }
    }
}
  • 配置完远程仓库后,在项目 app 模块下的 build.gradle 文件中加入远程依赖
dependencies {
    // 语种切换框架:https://github.com/getActivity/MultiLanguages
    implementation 'com.github.getActivity:MultiLanguages:9.3'
}

初始化框架

  • 在 Application 中初始化框架
public final class XxxApplication extends Application {

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

        // 初始化语种切换框架
        MultiLanguages.init(this);
    }
}
  • 重写 Application 的 attachBaseContext 方法
@Override
protected void attachBaseContext(Context base) {
    // 绑定语种
    super.attachBaseContext(MultiLanguages.attach(base));
}
  • 重写基类 BaseActivity 的 attachBaseContext 方法
@Override
protected void attachBaseContext(Context newBase) {
    // 绑定语种
    super.attachBaseContext(MultiLanguages.attach(newBase));
}
  • 只要是 Context 的子类都需要重写,Service 也雷同,这里不再赘述

  • 温馨提示:Fragment 不需要重写此方法,因为它不是 Context 的子类

语种设置

// 设置当前的语种(返回 true 表示需要重启 App)
MultiLanguages.setAppLanguage(Context context, Locale locale);

// 获取当前的语种
MultiLanguages.getAppLanguage(Context context);

// 跟随系统语种(返回 true 表示需要重启 App)
MultiLanguages.clearAppLanguage(Context context);

其他 API

// 获取系统的语种
MultiLanguages.getSystemLanguage(Context context);
// 是否跟随系统的语种
MultiLanguages.isSystemLanguage(Context context);

// 对比两个语言是否是同一个语种(比如:中文有简体和繁体,英语有美式和英式)
MultiLanguages.equalsLanguage(Locale locale1, Locale locale2);
// 对比两个语言是否是同一个地方的(比如:**大陆用的中文简体,****用的中文繁体)
MultiLanguages.equalsCountry(Locale locale1, Locale locale2);

// 获取某个语种下的 String
MultiLanguages.getLanguageString(Context context, Locale locale, int stringId);
// 生成某个语种下的 Resources 对象
MultiLanguages.generateLanguageResources(Context context, Locale locale);

// 更新 Context 的语种
MultiLanguages.updateAppLanguage(Context context);
// 更新 Resources 的语种
MultiLanguages.updateAppLanguage(Resources resources);

// 设置默认的语种(越早设置越好)
MultiLanguages.setDefaultLanguage(Locale locale);

语种变化监听器

// 设置语种变化监听器
MultiLanguages.setOnLanguageListener(new OnLanguageListener() {

    @Override
    public void onAppLocaleChange(Locale oldLocale, Locale newLocale) {
        Log.d("MultiLanguages", "监听到应用切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale);
    }

    @Override
    public void onSystemLocaleChange(Locale oldLocale, Locale newLocale) {
        Log.d("MultiLanguages", "监听到系统切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale + ",是否跟随系统:" + MultiLanguages.isSystemLanguage());
    }
});

使用案例

@Override
public void onClick(View v) {
    // 是否需要重启
    boolean restart;
    switch (v.getId()) {
        // 跟随系统
        case R.id.btn_language_auto:
            restart = MultiLanguages.clearAppLanguage(this);
            break;
        // 简体中文
        case R.id.btn_language_cn:
            restart = MultiLanguages.setAppLanguage(this, LocaleContract.getSimplifiedChineseLocale());
            break;
        // 繁体中文
        case R.id.btn_language_tw:
            restart = MultiLanguages.setAppLanguage(this, LocaleContract.getTraditionalChineseLocale());
            break;
        // 英语
        case R.id.btn_language_en:
            restart = MultiLanguages.setAppLanguage(this, LocaleContract.getEnglishLocale());
            break;
        default:
            restart = false;
            break;
    }

    if (restart) {
        // 我们可以充分运用 Activity 跳转动画,在跳转的时候设置一个渐变的效果
        startActivity(new Intent(this, LanguageActivity.class));
        overridePendingTransition(R.anim.activity_alpha_in, R.anim.activity_alpha_out);
        finish();
    }
}

框架混淆规则

  • 在混淆规则文件 proguard-rules.pro 中加入
-keep class com.hjq.language.** {*;}

作者的其他开源项目

微信公众号:Android轮子哥

Android 技术 Q 群:10047167

如果您觉得我的开源库帮你节省了大量的开发时间,请扫描下方的二维码随意打赏,要是能打赏个 10.24 🐵就太👍了。您的支持将鼓励我继续创作:octocat:点击查看捐赠列表

广告区

  • 我现在任腾讯云服务器推广大使,大家如果有购买服务器的需求,可以通过下面的链接购买

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

【腾讯云】中小企业福利专场,多款刚需产品,满足企业通用场景需求

License

Copyright 2019 Huang JinQun

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

multilanguages's People

Contributors

880634 avatar getactivity avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

multilanguages's Issues

APP小退后切换语言无效

你好,APP小退后,但是不杀掉APP,这个时候去设置里面切换语言,然后再打开APP,不会生效,要杀掉APP再打开才可以,像这种小退切换语言的情况是不是没办法处理

我设置了应用内使用当前设置的语言为英语,但是使用XXPermissions权限弹出来的选择框是中文。

框架版本【必填】

implementation 'com.github.getActivity:MultiLanguages:9.3'

问题描述【必填】

我设置了应用内使用当前设置的语言为英语,但是XXPermissions权限弹出来的选择框是中文,只有选择了系统的英文,权限弹出框才会弹出英文的语言。 希望我选择了应用内语言是英文,然后弹出权限的弹出框是英文的语言

复现步骤【必填】

app选择Activity的语言为英文,然后选择一个XXPermissions权限弹出确认权限,就会是中文。不会显示英文

是否必现【必填】

项目 targetSdkVersion【必填】

34

出现问题的手机信息【必填】

三星s21

出现问题的安卓版本【必填】

14

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

全部

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

/
2222

提供解决方案

No response

与autosize冲突

问题描述
框架版本:8.0

问题描述:使用这个库会导致autosize的屏幕适配出现问题, 横屏启动,分辨率混乱,一会大一会小

复现步骤:写一个mainactivity,设置横屏,多次运行app,获取宽高,会发现获取宽高混乱

是否必现:是

手机信息:红米 k30 / Android 10

请回答
是部分机型还是所有机型都会出现:应该是全部

框架最新的版本是否存在这个问题:是

是否已经查阅框架文档还未能解决的:是

issue 是否有人曾提过类似的问题:是的

是否可以通过 Demo 来复现该问题:是

其他
提供报错堆栈(如果有报错的话必填)

提供截图或视频(根据需要提供,此项不强制)

提供解决方案(如果已经解决了的话,此项不强制)

[疑惑]:请问是否支持云端下发语言包

问题描述【必填】

请问是否支持云端下发语言包,然后能识别语言包并切换 相当于string value 配置在云端的 这样显示字符就可以动态修改了

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

语言对比

MultiLanguages.equalsLanguage(Locale locale1, Locale locale2);
语言对比好像不对
MultiLanguages.equalsLanguage(Locale.CHINA, Locale.TAIWAN) true
MultiLanguages.equalsLanguage(Locale.SIMPLIFIED_CHINESE, Locale.TAIWAN) true

界面出现中英文混杂现象

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:api 'com.github.getActivity:MultiLanguages:8.0'

  • 问题描述【必填】:应用长时间退出到后台切换到前台,或者开发人员 开启不保留活动选项 重新进入前台APP 界面会出现中英文混杂的情况发生,如果是英文语种进入是正常的,中文语种进入的话就会出现。
    *1. 然后我在代码里进入这个界面后 设置当前的语言见第1张图片

  • 2.英文没有问题 中文语种状态下 框架获取到的当前语种是中文 但是我设置中文后 框架监听到切换语种 显示的旧语种是英文 en,

  • 并且提示需要重启

  • 复现步骤【必填】:中文语种状态 开启不保留活动选项 重新进入页面

  • 是否必现【必填】:1. 开启不保留活动选项是必现 2.应用长时间退出到后台切换到前台是偶现

  • 出现问题的手机信息:红米 Note10 Pro

  • 出现问题的安卓版本:Android11

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分 身边只有这一台手机

  • 框架最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 Demo 来复现该问题【必答】:否

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案(如果已经解决了的话,此项不强制)
    解决方案:经过上面的设置语言 不会出现APP退出进入后的乱码问题 但是不明白为什么监听的日志不对

image

5AR5W9O4Y_UN7LC_HMSGA13
5J1I}SQS(IYIC9Q9SKKZ~NC

请严格按照 issue 模板来提问题,否则一律不受理

最近发现有很多人给我提 issue 没有认真按照模板上面的来填写,导致了在排查问题的过程中浪费了作者许多不必要的时间和精力,所以请后面提 issue 的人务必严格遵守,否则我不会受理,直接关闭 issue。

国际化异常

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:8.0

  • 问题描述【必填】:获取 MultiLanguages.isSystemLanguage()为true,获取到的MultiLanguages.getAppLanguage().getLanguage()与真实的手机语言不符

  • 复现步骤【必填】:手机正常安装应用,修改应用设置语言切换按钮(自己应用),切换成比如法国,然后将后台清理缓存数据后,国际化异常问题就出现了,以下为在application进行初始化的代码(调试log),以及打印情况,现实情况也是异常情况,但是通过sdk demo却未能复现,搞不懂:::::

image

image

  • 是否必现【必填】:是

  • 出现问题的手机信息:realme v15

  • 出现问题的安卓版本:安卓12

请回答

  • 是部分机型还是所有机型都会出现【必答】:部全部

  • 框架最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 Demo 来复现该问题【必答】:否

不好意思请教一些问题

问题描述

  • 框架版本【必填】:8.0

  • 问题描述【必填】:
    1.这边是在MainActivity使用了MainFragment,然后通过lifecycle.addObserver添加了一些事件监听(截图1),然后在监听方法里面处理切换语言的时候采用(截图2)的方式,然后app就会关闭,并没有重新启动。
    2.有试过更换为recreate的方式,这样的话app就不会关闭。但是对于(截图3)的这种by lazy 的数据则切换语言不会成功。得手动重启app才会切换。

  • 复现步骤【必填】:切换语言就会出现

  • 是否必现【必填】:是

  • 出现问题的手机信息:这里是用雷电的模拟器

  • 出现问题的安卓版本:android版本为7.1.2

请回答

  • 是部分机型还是所有机型都会出现【必答】:全部

  • 框架最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 Demo 来复现该问题【必答】:否

其他

  • 提供截图或视频(根据需要提供,此项不强制)
    截图1:
    S6DL_XF)6L34KCKI0LQ2AKH
    截图2:
    IUZHH V@%}XO}0UU_FUK_AK
    截图3:
    }$2BHCNBQ@%717MQGGM=~K

关闭网络,切换语言

使用Demo,关闭网络,切换语言,demo会关闭再重新打开Activity绑定新的Context,但是WebView此时的内部提示,却是没有按照预期的语言,一直是第一次初始化的语言。今天折腾一天仍然没有找到原因。
image

[疑惑]:android13 onConfigurationChanged问题

问题描述【必填】

我看库里面有注释
// 需要注意的是:Android 13 上面改变了系统的语种也不会回调 onConfigurationChanged 方法
// 所以就需要借助一些特殊手段来获取,通过查阅官方文档,发现没有什么好的办法监听到,只能通过轮询的方式

我使用demo,在android13的手机上面测试,去系统页面切换系统语言,是会调用这个方法的,包括横竖屏切换
232207601
只加了这个Log
3520230536

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

与autosize冲突

问题描述

  • 框架版本:8.0

  • 问题描述:使用这个库会导致autosize的屏幕适配出现问题,我的手机宽高是10801920,设置横屏后应该是19201080,但是使用这个库之后我获取的宽高是混乱的,有时是19201080,有时是10801920,导致适配不稳定

  • 复现步骤:写一个mainactivity,设置横屏,多次运行app,获取宽高,会发现获取宽高混乱

  • 是否必现:是

  • 手机信息:小米 9 / Android 10

请回答

  • 是部分机型还是所有机型都会出现:应该是全部

  • 框架最新的版本是否存在这个问题:是

  • 是否已经查阅框架文档还未能解决的:否

  • issue 是否有人曾提过类似的问题:否

  • 是否可以通过 Demo 来复现该问题:是

其他

  • 提供报错堆栈(如果有报错的话必填)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案(如果已经解决了的话,此项不强制)

老哥。不要搞事情啊

部分手机装了之后会闪退
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at com.hjq.language.MultiLanguages.updateAppLanguage(MultiLanguages.java:53)
at com.vo.ui.web.WebViewFragment.(WebViewFragment.kt:29)
at java.lang.reflect.Constructor.newInstance0(Constructor.java)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.fragment.app.Fragment.instantiate(Fragment.java:548)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132)
at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162)
at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58)
at androidx.navigation.NavController.navigate(NavController.java:1057)
at androidx.navigation.NavController.navigate(NavController.java:942)
at androidx.navigation.NavController.navigate(NavController.java:875)
at androidx.navigation.NavController.navigate(NavController.java:861)
at com.vo.ui.mine.MineFragment$onActivityCreated$8.onClick(MineFragment.kt:77)
at android.view.View.performClick(View.java:7314)
at android.view.View.performClickInternal(View.java:7288)
at android.view.View.access$3600(View.java:838)
at android.view.View$PerformClick.run(View.java:28240)
at android.os.Handler.handleCallback(Handler.java:900)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8622)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

//以下是我继承代码
class LanguagesWebView(
    context: Context,
    attrs: AttributeSet?,
    defStyleAttr: Int
) :
    WebView(context, attrs, defStyleAttr) {
    constructor(context: Context) : this(context, null) {}
    constructor(context: Context, attrs: AttributeSet?) : this(
        context,
        attrs,
        0
    ) {
    }

    init {
        try {
            // 修复 WebView 初始化时会修改 Activity 语种配置的问题
            MultiLanguages.updateAppLanguage(context)
        } catch (e: Throwable) {

        }
    }
}

系统语言切换方面的使用问题【非app手动切换】

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

就是看过WhatsApp的切换语言,默认跟随手机系统语言,且切换手机系统语言后回到app,语言自动切换且app不会重启,此框架MultiLanguages.init(this)会默认使用app的默认语言,而且手机系统切换语言后app会重启,默认情况或者setSystemLanguage都会app重启,请问这里重启是正常的吗?还有如何默认设置app第一次就跟随系统【不重启】

请回答

  • issue 是否有人曾提过类似的问题?否

  • 框架文档是否有提及到此问题?否

[疑惑]:这种Locale 的机制是基于资源文件的吗?如果字符串是动态变化(比如后端下发)的是否就不支持了?

问题描述【必填】

这种Locale 的机制是基于资源文件的吗?如果字符串是动态变化的话是否就不支持?比如通过 Textview.setText("你好");这种方式就需要通过翻译库来解决了?

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

国际化异常

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?否

  • 框架文档是否有提及到此问题?【必答】:否

  • 你觉得框架有什么不足之处?【必答】通过该lib设置完国际化,清除缓存,仍旧是国际化后的语言,必须要手动判断 是否是系统语言 ,然后设置MultiLanguages.clearAppLanguage 来实现

始终是中文

我这咋使用获取的资源文件都是中文呢
设置了资源文件(values-en)
MultiLanguages.getLanguageResources(this, Locale.ENGLISH).getString(R.string.title)
还是获取的中文

修改语言为中文,关闭 demo 再打开, 再次选择 auto 后关闭,修改系统语言为英语再打开显示不对

框架版本【必填】

9.0

问题描述【必填】

打开 demo 选择中文简体,关闭 demo 重新打开选择 auto,再次关闭,系统设置修改需要为英语,打开 demo auto 显示了中文简体

复现步骤【必填】

1.在 demo 中选择中文简体,杀死 app
2.系统设置页面选择英文
3.再次打开 app 选择 auto
4.再次杀死 app 重新打开,demo appauto 显示中文简体,此时应该是英文才对

是否必现【必填】

项目 targetSdkVersion【必填】

34

出现问题的手机信息【必填】

小米 12,magic3pro

出现问题的安卓版本【必填】

Android13

问题信息的来源渠道【必填】

No response

是部分机型还是所有机型都会出现【必答】

所有

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

No response

提供解决方案

No response

Application DisplayMetrics 的widthPixels 不正确

问题描述

  • 框架版本:8.0.0

  • 问题描述:Activity1 竖屏 跳到Activity2 横屏 applicationContext 获取DisplayMetrics 的宽高不对,获取到的值是竖屏的值,应该是横屏的才对

  • 是否必现:否

  • 手机信息:小米k40

android-14 出来了,轮子哥什么时候有时间,可以适配一下呀。

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?无

  • 框架文档是否有提及到此问题?否

  • 你觉得框架有什么不足之处?无

  • 你觉得该怎么去完善会比较好?无

现在android 14 出来了,并且对国际化做了一系列的修改,轮子哥是否可以考虑支持一下android 14 ,并能直接使用其中的api。

[Bug]:如果使用MultiLanguages.setDefaultLanguage设置了语言的情况下,在Android13版本的应用第一次启动会导致多次初始化

框架版本【必填】

9.0

问题描述【必填】

问题复现和描述

在Android13版本如果设置了MultiLanguages.setDefaultLanguage会导致应用重启,结果表现为ApplicationMainActivity会多次初始化。
具体原因为:MultiLanguages下的init方法在TIRAMISU版本非系统语言的情况下会设置重新setApplicationLocales,导致应用被重启

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    LocaleManager localeManager = application.getSystemService(LocaleManager.class);
    if (localeManager != null) {
        if (isSystemLanguage(application)) {
            localeManager.setApplicationLocales(LocaleList.getEmptyLocaleList());
        } else {
            localeManager.setApplicationLocales(new LocaleList(getAppLanguage(application)));
        }
    }
}

疑问

因为这个Api是必定会导致应用重启。

我的问题如下:

  • 1.这里设置setApplicationLocales的原因是什么,是在解决什么问题。
  • 2.这个Api可不可以去除,有没有其他Api可以替代。

复现步骤【必填】

  • 1.打开Demo的ApplicationstaticMultiLanguages.setDefaultLanguage注解
  • 2.添加MainActivityonCreate的打印日志Log.i("language", "MainActivity.onCreate " + hashCode());
  • 3.观察控制台,发现日志打印多次并且hashCode不同

是否必现【必填】

项目 targetSdkVersion【必填】

34

出现问题的手机信息【必填】

所有

出现问题的安卓版本【必填】

13

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

Android13版本所有

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

No response

提供解决方案

No response

提 issue 需知

Github沟通效率实在是很低下,大家伙有问题或者Bug直接到Q群78797078私信给我反馈就OK,我会尽快答复你的问题

如果多页面,不重启,怎么使用demo里的那种切换效果呢?

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 请描述一下你的疑惑【必填】:如果我app已经打开了多个页面,这时候切换语言我不想重启,怎么让他效果更好,因为demo里只有一个activity,所以直接重启一个activity就行,如果多个activity,是不是使用recreate比较方便?

请回答

  • issue 是否有人曾提过类似的问题?无

  • 框架文档是否有提及到此问题?无

如果一定需要不重启来实现多语言的切换 应该如何修改

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?无

  • 框架文档是否有提及到此问题?否

  • 你觉得框架有什么不足之处?无法通过不重启来实现多语言切换 如果一定需要不重启来实现多语言的切换 应该如何修改

  • 你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考)

多语言切换内置语言是可以的,但是切换系统语言会出现一个现象。

问题描述

  • 框架版本:8.0

  • 问题描述:切换系统语言后,我这边会出现之前连接的蓝牙设备不能接收控制了。我需要切换系统语言后不管系统语言是否和当前app的语言相同都重启APP。请问下我该如何操作?

  • 复现步骤:切换设置里面的系统语言。

  • 是否必现:是

  • 手机信息:LG V30

请回答

  • 是部分机型还是所有机型都会出现:全部

  • 框架最新的版本是否存在这个问题:是

  • 是否已经查阅框架文档还未能解决的:是

  • issue 是否有人曾提过类似的问题:否

  • 是否可以通过 Demo 来复现该问题:否

麻烦轮子哥帮忙看下。

ANR

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:8.0

  • 问题描述【必填】:ANR com.hjq.language.MultiLanguages.attach (MultiLanguages.java:44)

  • main (runnable):tid=1 systid=21831
    at com.hjq.language.MultiLanguages.attach(MultiLanguages.java:44)
    at com.c.BaseApplication.attachBaseContext(BaseApplication.java:561)
    at android.app.Application.attach(Application.java:351)
    at android.app.Instrumentation.newApplication(Instrumentation.java:1159)
    at android.app.LoadedApk.makeApplication(LoadedApk.java:1268)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6839)
    at android.app.ActivityThread.access$1500(ActivityThread.java:252)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1999)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:250)
    at android.app.ActivityThread.main(ActivityThread.java:7877)
    at java.lang.reflect.Method.invoke(Native method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
    jdk.internal.misc.Unsafe.park (Unsafe.java)
    java.util.concurrent.locks.LockSupport.park (LockSupport.java:194)
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await (AbstractQueuedSynchronizer.java:2081)
    java.util.concurrent.LinkedBlockingQueue.take (LinkedBlockingQueue.java:433)
    java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:1063)
    java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1123)
    java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:637)
    java.lang.Thread.run (Thread.java:1012)

  • 复现步骤【必填】:com.hjq.language.MultiLanguages.attach (MultiLanguages.java:44)

  • 启动app时就ANR

  • 是否必现【必填】:否

  • 出现问题的手机信息:设备
    品牌:Motorola
    型号:Moto G Power (2021)
    屏幕方向:未知
    可用 RAM: Unknown
    可用磁盘空间: Unknown
    操作系统
    版本:Android 11
    屏幕方向:未知
    是否已取得 root 权限:否

  • 出现问题的安卓版本:请填写出现问题的 Android 版本

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分

  • 框架最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 Demo 来复现该问题【必答】:是/否(排查一下是不是自己的项目代码写得有问题导致的)

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案(如果已经解决了的话,此项不强制)

[Bug]:在系统设置中切换语言无效

框架版本【必填】

9.3

问题描述【必填】

我在切换语言的时候,app的语言还是默认的语言,无法切换到其他的语言

复现步骤【必填】

点击语言列表,切换以后重新进入app,语言未改变

是否必现【必填】

项目 targetSdkVersion【必填】

34

出现问题的手机信息【必填】

小米10

出现问题的安卓版本【必填】

13

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

小米手机

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

No response

提供解决方案

No response

与autosize冲突,导致屏幕适配问题

写一大堆,结果网不行提交不了,就是使用了这个库之后,我设置手机固定横屏,获取屏幕宽高混乱,经常数据反着来,比如说19201080的手机,有时候是10801920,去掉这个库,获取的是固定的1920*1080,导致屏幕适配有问题,小米9,安卓10,库是最新版本,你是怎么处理,是不是库里面有影响获取屏幕宽高的设置

使用setSharedPreferencesName 修改sp文件名 导致切换失效

使用代码
MultiLanguages.setSharedPreferencesName("multilanguages");
// 初始化多语种框架
MultiLanguages.init(this);
// 设置语种变化监听器
MultiLanguages.setOnLanguageListener(new OnLanguageListener() {

        @Override
        public void onAppLocaleChange(Locale oldLocale, Locale newLocale) {
            Log.d("MultiLanguages", "监听到应用切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale);
        }

        @Override
        public void onSystemLocaleChange(Locale oldLocale, Locale newLocale) {
            Log.d("MultiLanguages", "监听到系统切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale + ",是否跟随系统:" + MultiLanguages.isSystemLanguage());
        }
    });

1 当前中文或者自动 切换后 比如英文 (或者先选中文 杀死app 然后启动查看是否正确 正确则选择英文杀死 app 启动查看)
2 切多任务杀死程序
3 重新启动 语言没有改变 还是设置之前

[疑惑]:怎么切换阿拉伯语

问题描述【必填】

怎么切换阿拉伯语,查看文档与Locale源码发现没有阿语的参数

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

框架在系统语言是英文下 跟随系统API一直返回是true

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:8.0

  • 问题描述【必填】:我的需求是APP首次安装去判断系统的语言,如果是系统语言是中文,就设置APP语言中文,系统语言是其他语言,那我设置APP语言为英文。但是经过测试发现,系统语言为英文,我打印日志发现框架默认是跟随系统的,我再设置系统是中文,发现APP也切换英文了。但是代码里是没有跟随系统切换的调用的。

  • 复现步骤【必填】:先设置系统语言为英文,打开APP,日志跟随系统语言是 true。然后设置系统语言为中文,跟随系统语言也是true。系统语言是中文安装的话。跟随系统语言就是false的

  • 是否必现【必填】:是

  • 出现问题的手机信息:红米 Note 10 Pro

  • 出现问题的安卓版本:Android11

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分 只有这一台手机

  • 框架最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 Demo 来复现该问题【必答】:否

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 以下三张截图是系统英文语言安装 然后我设置为英文 打印日志是默认跟随系统,然后切换系统语言为中文,也是默认跟随系统
    image
    image
    image
    下面两张截图是系统语言中文安装 日志跟随系统是false,然后切换系统语言为英文,也是false
    image
    image

  • 提供解决方案(如果已经解决了的话,此项不强制)

语言切换错乱

我下载代码运行测试了一下,发现以下问题:
1.MultiLanguages Demo 杀掉程序 -> 进入应用 -> 切换语言:有不小概率出现切换错乱的问题,如本来要切换到繁体,实际切成了简体
2.在AndroidProject项目中使用MultiLanguages,发现杀掉程序再次进入应用,应用语言恢复成了系统语言。我拷贝了以前自己写的语言切换代码用到AndroidProject项目中,仍然有杀掉程序再次进入应用,应用语言恢复成了系统语言的问题。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.