Android国际化多语言切换

关于App国际化,之前有讲到国际化资源、字符换、布局相关,想要了解的猛戳用力抱一下APP国际化。借着本次重构多语言想跟大家聊一下多语言切换,多语言切换对于一款国际化App来讲是重中之重,并非难事,但是若要做好也是一件不容易的事情。

问题

  1. Android N版本适配问题
  2. AndroidX不同版本兼容问题
  3. 一些界面局部适配突然失效
  4. 切换系统导航,更改深色模式导致多语言无法适配
  5. 系统授权弹窗导致ApplicationContext中的Local被还原
  6. 切换语言,系统通知栏显示未翻译,重启后正常
  7. Service服务中Toast不适配
  8. 系统Local.getDefault()之伤,如何正确获取系统当前语言
  9. WebView第一次加载多语言不适配
  10. 系统广播中的获取context中的Local信息显示异常

上面我随手列出了项目中常见遇到的问题,有一些是随着Android版本升级而未做出相应兼容性调整造成的,有一些则是局部失效寻找原因所得。我们先了解下应用中一般多语言切换适配的方案,从中会提到这些问题相应的解决方案。

Andorid 13 语言偏好设置

最近Android 13发布了,讲多语言切换之前,我们先了解一下这个新平台多语言新特性。Android 13 在手机设置页面中新增了一个集中设置应用语言的选项,用于设置各个应用语言首选语言,如果你的应用存在多语言,谷歌强烈建议在设置中进行多语言切换,这样就无须在应用中去做多语言选择切换的功能,页面由设置中的应用语言界面统一管理,具体使用如下:

1. 如何让应用app显示在设置中的应用语言中

  • 创建一个名为 res/xml/locales_config.xml 的文件,并指定您的应用的语言,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android"><locale android:name="ja"/><locale android:name="fr"/><locale android:name="en"/>
</locale-config>
  • 在清单中,添加一行指向这个新文件的代码:
<manifest...<application...android:localeConfig="@xml/locales_config"></application>
</manifest>

2. 如何处理设置中的语言偏好

对于具有或想要使用应用内语言选择器的应用,请使用这些新 API(而非自定义应用逻辑)来处理相关设置和获取用户对应用的首选语言设置。

  • 使用 AndroidX 支持库来实现
    使用 Appcompat 1.6.0-alpha04 或更高版本中的 setApplicationLocales() 方法。
// 如需设置用户的首选语言,您需要让用户在语言选择器中选择语言区域,然后在系统中设置该值
LocaleListCompat appLocale = LocaleListCompat.forLanguageTags("xx-YY");
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale);
  • 使用 Android 框架 API 来实现
// 1. Inside an activity, in-app language picker gets an input locale "xx-YY"
// 2. App calls the API to set its locale
mContext.getSystemService(LocaleManager.class).setApplicationLocales(newLocaleList(Locale.forLanguageTag("xx-YY")));
// 3. The system updates the locale and restarts the app, including any configuration updates
// 4. The app is now displayed in "xx-YY" language
  • 获取用户当前的首选语言
// 1. App calls the API to get the preferred locale
LocaleList currentAppLocales =mContext.getSystemService(LocaleManager.class).getApplicationLocales();
// 2. App uses the returned LocaleList to display languages to the user

举个栗子,手机系统如果是中文,设置界面中的应用语言如果首选英文,app如果已启动,那么需要自己监听 onConfigurationChanged来切换应用内部语言,如果未启动,第一次启动时候需要先去读取设置中的语言然后设置给当前应用。亦或是如果你的应用保留了内部切换语言的方案,那么语言切换是也应该调用以上API把当前语言刷到系统设置应用语言中,以保持同步。

讲完Andorid 13 多语言新特性,想要了解更多猛戳,我们继续回到本文的重点,应用内多语言切换如何去做适配。

多语言适配整体部分

1. Application的适配

我们为什么要适配Application,原因很简单,对于多语言来讲,我们其实最关心的是切换语言后,界面或者Toast等等显示是否已经翻译成所选择的语言,但是一般我们项目中都会直接或者间接用到ApplicationContext,比如Application中一些三方控件的初始化,还有一些项目中封装的工具类,为了方便全局一次行初始化,有可能甚至用到单例模式,当我们用到ApplicationContxt去getString(@StringRes int id),在切换语言后,如果不重启整个应用或者刷新ApplicaitonContext的local,那么肯定是无效的。
我们在启动APP时候,应该对Application中的context进行当前应用语言Local适配。

@Override
protected void attachBaseContext(Context newBase) {super.attachBaseContext(LanguageUtil.attachBaseContext(newBase));
}

当我们做了系统的配置更改,比如说切换了系统导航或者说更改了深色模式,那么我们一般的处理是也是要对Application作出处理。

@Override
public void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);// 系统资源配置发生更改,例如主题模式,需要重新刷新多语言LanguageUtil.attachBaseContext(this);
}

如果项目中有用到ApplicationContext去getString(@StringRes int id)实现加载的提示语,那么如果只是单纯的重启界面则无法让当前的提示语跟随当前切换的语言,所以我们要么重启整个应用,要么对ApplicationContext中的Local也作出相应的更新方可,这里有一点问题,虽然Android N之后updateConfiguration是过时方法,官方给出使用createConfigurationContext代替,但是更新ApplicationContext的Local发现无效使用老版本updateConfiguration正常。

Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
Locale locale = getLanguageLocale(newLanguage);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {// apply localeconfiguration.setLocales(new LocaleList(locale));
} else {configuration.setLocale(locale);
}
DisplayMetrics dm = resources.getDisplayMetrics();
resources.updateConfiguration(configuration, dm);

如果你发现你的应用广播通知栏适配无效,那就是context中的Local在切换语言是并未及时更新Local,这里调试一下便知,如果是Applicaiton注册的广播,那么多半情况下是没有更新ApplicationContext的Local所导致的。

2. Service适配

如果你的Service有用到Toast提示或者UI相关的东西,你必须要对Service也进行适配,这时候Service中也需要重写attachBaseContext进行语言适配,否则语言适配也是无效的。

@Override
protected void attachBaseContext(Context newBase) {super.attachBaseContext(LanguageUtil.getNewLocalContext(newBase));
}

3. Activity适配

Activity是我们最主要的适配的界面,正常的情况下我们直接在基类BaseActivity中去处理即可,但是值得注意的一点是如果我们使用的是Androidx而非support库,那么不同的版本适配有点区别,这也是官方组件的问题.记得一些第三方界面如果不是继承我们的BaseActivity需要单独处理即可。

@Override
protected void attachBaseContext(Context newBase) {if(isSupportMultiLanguage()){// 多语言适配super.attachBaseContext(LanguageUtil.getNewLocalContext(newBase));}else {super.attachBaseContext(newBase);}
}

多语言适配基本步骤大概就是如此了,下面看一下适配的细节问题。

适配部分细节

1. Andorid N 适配

Android N开始,由于系统的API变更,updateConfiguration已经被沦为过时的方法。但是有一点需要大家注意,网上几乎全部的判断都是有问题的,API已经明确说明是在API25过时的,不等价于Build.VERSION_CODES.N,所以你的项目用对了嘛,详情可参考下图。

还有一点Android N之后,手机系统的语言配置选项已经不是单选了,改为一个列表了,具体可以参考手机设置中的语言和输入法,所以setLocal(@Nullable Locale loc)方法建议不要再使用了,我相信很多人还在用,正确的用法应该是setLocals(@Nullable LocaleList locales),需要传递一个集合。

public static Context attachBaseContext(Context context) {String language = LanguageSp.getLanguage(context);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {return createConfigurationContext(context, language);} else {return updateConfiguration(context, language);}
}
// 注意此处不是Build.VERSION_CODES.N
@RequiresApi(api = Build.VERSION_CODES.N_MR1)
private static Context createConfigurationContext(Context context, String language) {Resources resources = context.getResources();Configuration configuration = resources.getConfiguration();Locale locale = getLanguageLocale(language);Log.d(TAG, "current Language locale = " + locale);LocaleList localeList = new LocaleList(locale);// 注意此处setLocalesconfiguration.setLocales(localeList);return context.createConfigurationContext(configuration);
}
private static Context updateConfiguration(Context context, String language) {Resources resources = context.getResources();Configuration configuration = resources.getConfiguration();Locale locale = getLanguageLocale(language);Log.e(TAG, "updateLocalApiLow==== " + locale.getLanguage());if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {// apply locale 注意此处是setLocalesconfiguration.setLocales(new LocaleList(locale));} else {// updateConfigurationconfiguration.locale = locale;DisplayMetrics dm = resources.getDisplayMetrics();resources.updateConfiguration(configuration, dm);}return context;
}

2. 关于AndroidX版本兼容问题

当你的应用使用的是androidx.appcompat:appcompat:1.1.0时,BaseActivity中需要实现下面方法。

@Override
public void applyOverrideConfiguration(Configuration overrideConfiguration) {// 兼容androidX在部分手机切换语言失败问题if (overrideConfiguration != null) {int uiMode = overrideConfiguration.uiMode;overrideConfiguration.setTo(getBaseContext().getResources().getConfiguration());overrideConfiguration.uiMode = uiMode;}super.applyOverrideConfiguration(overrideConfiguration);
}

当你的应用使用的是androidx.appcompat:appcompat:1.2.0及以上时,BaseActivity中需要实现下面方法。

@Override
protected void attachBaseContext(Context newBase) {if (isSupportMultiLanguage()) {String language = LanguageSp.getLanguage(newBase);Context context = LanguageUtil.attachBaseContext(newBase, language);final Configuration configuration = context.getResources().getConfiguration();final ContextThemeWrapper wrappedContext = new ContextThemeWrapper(context,R.style.Theme_AppCompat_Empty) {@Overridepublic void applyOverrideConfiguration(Configuration overrideConfiguration) {if (overrideConfiguration != null) {overrideConfiguration.setTo(configuration);}super.applyOverrideConfiguration(overrideConfiguration);}};super.attachBaseContext(wrappedContext);} else {super.attachBaseContext(newBase);}
}

3. 系统授权弹框导致Local失效

我们惊奇的发现,当我们首次进入APP选择语言后,当首页检查系统权限弹框的时候,Local被莫名其妙的重置了,我在想,可能因为google授权弹框他有自己的多语言翻译,所以不会采取我们的,所以把ApplicationContext中的Local给重置了,所以当我们点击允许或者仅在使用此应用时允许后需要再次把Application中的Local修改掉。

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {super.onRequestPermissionsResult(requestCode, permissions, grantResults)// 更新Application中的localLanguageUtil.updateApplicationLocale(AppApplication.getAppContext(),LanguageSp.getLanguage(mContext))
}

4. 如何真正的获取系统语言

我们有可能会存在这个场景,当我们的APP不跟随系统语言的时候,使用的APP内部语言,我们去检测系统语言的时候如何去判断,是不是很多人在此跌倒了,无论是Local.getDefault()还是LocalList.get(0)始终获取的语言是错误的,应该通过以下渠道获取当前的系统语言。

// 第一种方式
if (Build.VERSION.SDK_INT  >= Build.VERSION_CODES.N) {
return Resources.getSystem().getConfiguration().getLocales().get(0).getLanguage();//解决了获取系统默认错误的问题
} else {
return Locale.getDefault().getLanguage();
}
// 第二种方式(推荐)
return ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getLanguage();

5. 关于WebView适配

在原来的低版本切换语言中,我们会发现WebView第一次加载时,适配是无效的,再次加载则正常适配,所以网上也有了一道方案如下:

@Override public void onCreate(Bundle savedInstanceState) { 
// TODO 解决含有webView控件导致切换语言失效 
~~new WebView(this).destroy(); ~~
super.onCreate(savedInstanceState); 
}

这套方案目前不在推荐,直接去替换attatchBaseContext()中的context则可,经过测试是完全正常的。

工具类

以下则是多语言操作的工具类,现在提供出来,需要的朋友可以自行进行改造。

/*** @author : le.hu* e-mail : 暂无* time   : 2021/11/26/16:08* desc   : 多语言适配方案,适配各种版本,核心未替换上下文Context中的Local*/
public class LanguageUtil {private static final String TAG = "LanguageUtil";/*** 默认支持的语言,英语、法语、阿拉伯语*/private static HashMap<String, Locale> supportLanguage = new HashMap<String, Locale>(4) {{put(Language.ENGLISH, Locale.ENGLISH);put(Language.FRANCE, Locale.FRANCE);put(Language.ARABIC, new Locale("ar", "", ""));}};/*** 应用多语言切换,重写BaseActivity中的attachBaseContext即可* 采用本地SP存储的语言** @param context 上下文* @return context*/public static Context attachBaseContext(Context context) {String language = LanguageSp.getLanguage(context);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {return createConfigurationContext(context, language);} else {return updateConfiguration(context, language);}}/*** 应用多语言切换,重写BaseActivity中的attachBaseContext即可** @param context  上下文* @param language 语言* @return context*/public static Context attachBaseContext(Context context, String language) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {return createConfigurationContext(context, language);} else {return updateConfiguration(context, language);}}/*** 获取Local,根据language** @param language 语言* @return Locale*/private static Locale getLanguageLocale(String language) {if (supportLanguage.containsKey(language)) {return supportLanguage.get(language);} else {Locale systemLocal = getSystemLocal();for (String languageKey : supportLanguage.keySet()) {if (TextUtils.equals(supportLanguage.get(languageKey).getLanguage(), systemLocal.getLanguage())) {return systemLocal;}}}return Locale.ENGLISH;}/*** 获取当前的Local,默认英语** @param context context* @return Locale*/public static Locale getCurrentLocale(Context context) {String language = LanguageSp.getLanguage(context);if (supportLanguage.containsKey(language)) {return supportLanguage.get(language);} else {Locale systemLocal = getSystemLocal();for (String languageKey : supportLanguage.keySet()) {if (TextUtils.equals(supportLanguage.get(languageKey).getLanguage(), systemLocal.getLanguage())) {return systemLocal;}}}return Locale.ENGLISH;}/*** 获取系统的Local** @return Locale*/private static Locale getSystemLocal() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {return Resources.getSystem().getConfiguration().getLocales().get(0);} else {return Locale.getDefault();}}/*** Android 7.1 以下通过 updateConfiguration** @param context  context* @param language 语言* @return Context*/private static Context updateConfiguration(Context context, String language) {Resources resources = context.getResources();Configuration configuration = resources.getConfiguration();Locale locale = getLanguageLocale(language);Log.e(TAG, "updateLocalApiLow==== " + locale.getLanguage());if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {// apply localeconfiguration.setLocales(new LocaleList(locale));} else {// updateConfigurationconfiguration.locale = locale;DisplayMetrics dm = resources.getDisplayMetrics();resources.updateConfiguration(configuration, dm);}return context;}/*** Android 7.1以上通过createConfigurationContext* N增加了通过config.setLocales去修改多语言** @param context  上下文* @param language 语言* @return context*/@RequiresApi(api = Build.VERSION_CODES.N_MR1)private static Context createConfigurationContext(Context context, String language) {Resources resources = context.getResources();Configuration configuration = resources.getConfiguration();Locale locale = getLanguageLocale(language);Log.d(TAG, "current Language locale = " + locale);LocaleList localeList = new LocaleList(locale);configuration.setLocales(localeList);return context.createConfigurationContext(configuration);}/*** 切换语言** @param language 语言* @param activity 当前界面* @param cls      跳转的界面*/public static void switchLanguage(String language, Activity activity, Class<?> cls) {LanguageSp.setLanguage(activity, language);Intent intent = new Intent(activity, cls);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);activity.startActivity(intent);activity.finish();}/*** 切换语言,携带传递数据** @param language 语言* @param activity 当前界面* @param cls      跳转的界面*/public static void switchLanguage(String language, Activity activity, Class<?> cls, Bundle bundle) {LanguageSp.setLanguage(activity, language);Intent intent = new Intent(activity, cls);if (bundle != null) {intent.putExtras(bundle);}intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);activity.startActivity(intent);activity.finish();}/*** 获取新语言的 Context,修复了androidx.appCompact 1.2.0的问题** @param newBase newBase* @return Context*/public static Context getNewLocalContext(Context newBase) {try {// 多语言适配Context context = LanguageUtil.attachBaseContext(newBase);// 兼容appcompat 1.2.0后切换语言失效问题final Configuration configuration = context.getResources().getConfiguration();return new ContextThemeWrapper(context, R.style.Theme_AppCompat_Empty) {@Overridepublic void applyOverrideConfiguration(Configuration overrideConfiguration) {if (overrideConfiguration != null) {overrideConfiguration.setTo(configuration);}super.applyOverrideConfiguration(overrideConfiguration);}};} catch (Exception e) {e.printStackTrace();}return newBase;}/***  更新Application的Resource local,应用不重启的情况才调用,因为部分会用到application中的context*  切记不能走新api createConfigurationContext,亲测* @param context context* @param newLanguage newLanguage*/public static void updateApplicationLocale(Context context, String newLanguage) {Resources resources = context.getResources();Configuration configuration = resources.getConfiguration();Locale locale = getLanguageLocale(newLanguage);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {// apply localeconfiguration.setLocales(new LocaleList(locale));} else {configuration.setLocale(locale);}DisplayMetrics dm = resources.getDisplayMetrics();resources.updateConfiguration(configuration, dm);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5675.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几个chatGPT的难题,关于语言转换

不同语言代码的移植一直以来是程序员面临的难题&#xff0c;最近问了问chatGPT能否解决这个问题。 编写一个程序&#xff0c;实现c语言函数转换为php函数 答&#xff1a;这是一个非常困难的问题&#xff0c;因为两种语言的语法、结构和标准库都不相同。如果您希望完成这个任务&…

使用 ChatGPT 从视频脚本创建知识图谱,使用 GPT-4 作为领域专家来帮助您从视频转录中提取知识(教程含完整源码)

我一直很喜欢深海纪录片,因为这里的生态系统和动物与陆地上的大不相同。因此,我决定在水下纪录片上测试 GPT-4 的信息提取能力。此外,我不知道有任何开源 NLP 模型经过训练可以检测海洋植物和生物之间的关系。因此,一部深海纪录片是使用 GPT-4 构建知识图谱的绝佳示例。 数…

ChatGPT实战:短视频文案、脚本创作

你还在拼脑力输出视频脚本吗&#xff1f;AI时代&#xff0c;该提高提高生产力了&#xff0c;机器一天的视频出货量能赶上以往几个月的工作量&#xff0c;人力怎么可能卷的过机器&#xff1f; 使用ChatGPT创作视频脚本可以带来一些好处&#xff1a; 创意激发&#xff1a;ChatGPT…

玩转#ChatGPT之“用Chat GPT 做美食攻略”

ChatGPT是一个大型的语言模型&#xff0c;可以利用其强大的自然语言处理能力来帮助你进行美食攻略。 首先&#xff0c;你需要提供相应地区的美食相关信息&#xff0c;比如当地的名菜、特色小吃、饮食文化等。然后&#xff0c;你可以向ChatGPT提出问题&#xff0c;例如&#xf…

如何使用ChatGPT做一份五一出游攻略?

五一假期即将来临&#xff0c;或许你已经着手计划这个假期的旅游行程了呢&#xff1f; 但是若是缺乏旅游行程规划的经验&#xff0c;或者在选择质量上良莠不齐的攻略时感到困惑&#xff0c;你可以尝试使用ChatGPT来创建一份自己的旅游攻略哦&#xff01; 首先&#xff0c;我们…

如何高效使用ChatGPT

随着ChatGPT的不断推广&#xff0c;许多人在使用时都会遇到一个问题&#xff1a;ChatGPT给出的回答不是我想要的答案。这也是我们早期接触ChatGPT时会遇到的状况——用得“不太好”。 在对ChatGPT不断地探索、尝试以及查阅官方资料后&#xff0c;我们找到了一个突破点。ChatGP…

假期出行小程序+chatgpt旅游攻略

马上五一了,如果想出去旅游,需要提取规划好路线图,我们可以借助chatgpt的路线规划功能帮我们生成一份攻略,按照攻略我们就可以愉快的出去玩耍了。 本文结合chatgpt,利用低代码工具帮我们制作一份旅行导览小程序,可以按照行程方便的出行。 1 制定攻略 我们在聊天窗口输…

快速解决无法登录网页版微信的问题,亲测有效

在公司开发测试阶段&#xff0c;需要使用网页版微信对开发页面进行调试&#xff0c;但是我的两个微信号在扫码登录网页版微信时&#xff0c;都出现了以下提示&#xff1a; 为了你的帐号安全&#xff0c;此微信号不能登录网页微信。你可以使用Windows微信或Mac微信在电脑端登录。…

ChatGPT修bug横扫全场,准确率达78%!程序员该开心还是难过?

金磊 衡宇 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT到底有多会修bug&#xff1f; 这事终于有人正儿八经地搞研究了—— 来自德国、英国的研究人员&#xff0c;专门搭了个“擂台”来检验ChatGPT的这项本领。 除了ChatGPT之外&#xff0c;研究人员还找来了其它三位修bug的“AI…

vue3.0仿写百度分页组件 chatgpt优化版

我写的<template><div class"paginations" v-iftotalItems > 0><button click"changePage(1)" >首页</button><button click"changePage(currentPage - 1)" :disabled"currentPage 1" :class"{ …

ChatGPT目前优化现状

文章目录 复习一下什么是ChatGPT一、目前优化的项&#xff08;使用中的感受&#xff09;二、结合上下文三、断层连续性四、知识跟进总结 复习一下什么是ChatGPT ChatGPT是基于OpenAI的GPT-3.5架构的语言模型&#xff0c;旨在提供广泛的语言理解和生成能力。它通过训练大量的文…

ChatGPT + 低代码,将干掉 40% 的程序员

见字如面&#xff0c;我是军哥&#xff01; 关于程序员失业有个段子&#xff1a;拖拽建站出来的时候&#xff0c;他们人说程序员会失业&#xff1b;低代码出来了&#xff0c;他们说程序员会失业&#xff1b;Copilot出来了&#xff0c;他们说程序员会失业&#xff1b;如今ChatGP…

Java的Idea怎么用ChatGpt,让些代码变丝滑?

发现两款idea的AI插件神器&#xff0c;和一个AI编辑器 1、tabnine https://zhuanlan.zhihu.com/p/343938113 当提示代码出现后&#xff0c;其中 按tab键就可以通用提示出的代码了&#xff0c;alt[ 是换提示代码&#xff0c;试用期限为14天。&#xff08;注意标红的&#xff0…

ChatGPT优化Python代码的小技巧

使用 chatGPT 优化代码并降低运行时的云成本 许多开发人员说“过早的优化是万恶之源”。 这句话的来源归功于Donald Knuth。在他的书《计算机编程的艺术》中&#xff0c;他写道&#xff1a; “真正的问题是&#xff0c;程序员在错误的时间和错误的地方花费了太多时间来担心效率…

为什么有很多国家以及地区要限制chatGPT的发展

作为GPT-3.5 Turbo&#xff0c;我可以尝试为您解答这个问题。虽然我无法提供现实世界的观点&#xff0c;但我可以尝试为您提供一些可能的原因。 限制ChatGPT发展的国家和地区可能有各种原因。以下是其中一些可能的原因&#xff1a; 1.数据隐私和安全&#xff1a; 人们担心使用…

ChatGPT大封号,注册功能关闭!亚洲成重灾区,网友自救喊话:不要登录,不要登录...

明敏 萧箫 发自 凹非寺量子位 | 公众号 QbitAI “不要登录ChatGPT&#xff01;” “暂时远离人工智能和ChatGPT概念板块高位股&#xff01;” 就在这两天&#xff0c;一些关于ChatGPT的疾呼突然在各种社交平台和群聊刷屏了。 而看到这些消息的用户更是感到前所未有的惶恐。 因为…

免登录在线查询OpenAI ChatGPT API key余额

本文目录&#xff1a; 一、问题来源二、几个查询余额的方案1、后台直接查询2、隐藏的接口【现在不好用了】3、最新的方案 三、在线网页查询 一、问题来源 ChatGPT不断强大&#xff0c;用得人多。目前为止OpenAI还是会给新注册的用户送5美金&#xff0c;因此大部分应用还是直接…

使用chatgpt来提高你的编程能力,简直如虎添翼

下面大家跟着我的问题&#xff0c;可以跟着我一起向 chatgpt老师学习&#xff0c;相信我的问题可能你也会感兴趣。 在Java中&#xff0c;boolean类型的数组默认初始化为false。也就是说&#xff0c;如果你创建了一个boolean类型的数组&#xff0c;但是没有初始化它&#xff0c;…

基于ChatGPT的新一代辅助编程神器——Cursor

Cursor 编辑器 Cursor 这是一款与OpenAI合作并且基于GPT3的新一代辅助编程神器。它支持多种文件类型&#xff0c;支持格式化文本&#xff0c;支持多种主题&#xff0c;支持多语言语法高亮&#xff0c;支持快捷键设置&#xff0c;支持代码折叠、括号匹配、自动缩进等功能等功能…

ChatGPT办公自动化实战

ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定 让ChatGPT帮你高效实现职场办公&#xff01;行动起来吧 。。。。。 还有更多。。。。&#xff0c;可以沟通…