Android “中的语言更改区域设置”;科特林“;作为区域设置编程在Java中可以很好地工作,但在Kotlin语言中不起作用
我在应用程序中使用kotlin语言,在更改语言环境方面遇到了一些困难。正如我所做的,我已经创建了一个全局类,即在java上,在这个类上,我编写了语言更改代码、区域设置代码和我正在调用的语言代码函数,该函数用于我的项目的基础应用程序类,它位于Kotlin中 以下是我的源代码: 全局类(Java代码) 基本应用程序类代码:(Kotlin)Android “中的语言更改区域设置”;科特林“;作为区域设置编程在Java中可以很好地工作,但在Kotlin语言中不起作用,android,localization,kotlin,locale,Android,Localization,Kotlin,Locale,我在应用程序中使用kotlin语言,在更改语言环境方面遇到了一些困难。正如我所做的,我已经创建了一个全局类,即在java上,在这个类上,我编写了语言更改代码、区域设置代码和我正在调用的语言代码函数,该函数用于我的项目的基础应用程序类,它位于Kotlin中 以下是我的源代码: 全局类(Java代码) 基本应用程序类代码:(Kotlin) class CrashApplicationClass:Application(){ val TAG=CrashApplicationClass::class.j
class CrashApplicationClass:Application(){
val TAG=CrashApplicationClass::class.java.simpleName
lateinit var sDefSystemLanguage:字符串
val gc=GlobalClass.getInstance()
重写fun onCreate(){
//TODO自动生成的方法存根
//ACRA.init(本)
super.onCreate()
实例=此
gc.changelanguage(baseContext)
println(“Languagekotlin”+gc.changelanguage(baseContext))
println(“kotlininstance”+实例)
//sDefSystemLanguage=Locale.getDefault().language
}
val requestQueue:requestQueue?=null
得到(){
如果(字段==null){
return-Volley.newRequestQueue(applicationContext)
}
返回场
}
fun addToRequestQueue(请求:请求,标记:字符串){
request.tag=if(TextUtils.isEmpty(tag))tag else tag
请求队列?.add(请求)
}
fun addToRequestQueue(请求:请求){
request.tag=tag
请求队列?.add(请求)
}
fun cancelPendingRequests(标记:Any){
if(requestQueue!=null){
requestQueue!!.cancelAll(标记)
}
}
伴星{
val TAG=CrashApplicationClass::class.java.simpleName
@get:Synchronized var实例:CrashApplicationClass?=null
专用设备
}
}
正如这里的代码所示,我在java类日志中有打印日志,该语言正确地获得:
System.out.println(“GlobalLocale”+locale.toString())
但在CrashApplication类日志上:
println(“Languagekotlin”+gc.changelanguage(baseContext))->
我得到了“Kotlin.Unit”
而且语言没有改变,在java中获得正确的语言环境,但不知道Kotlin类没有得到它返回的“Kotlin.Unit”
在清单上,我还设置了:android:configChanges=“locale”
任何人都知道科特林的语言变化。Plz共享。我已经用Kotlin语言解决了这个问题,现在通过改进此功能,语言发生了变化
public String changelanguage(Context context) {
//String lang = "hi_IN";
// Locale locale = new Locale(lang);
Locale locale = Locale.getDefault();
Locale.setDefault(locale);
System.out.println("GlobalLocale" +locale.toString());
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
return locale.toString();
}
它解决了我的Kotlin.unit错误
还有@marstran,谢谢你给我关于我的问题的提示,我错在哪里了。现在这个问题在科特林已经解决了
@在进行否定投票之前,请仔细阅读问题。!现在就投赞成票,投赞成票 可能重复的我已经投票决定以重复的方式关闭这个,因为代码是完全相同的。Java和Kotlin之间的唯一区别是语法。您可以使用相同的方法(并且必须使用相同的方法)和相同的技术。java和Kotlin在运行Android框架时使用相同的方法,唯一的区别是语法(以及空安全性,但就代码本身而言)
println(“Languagekotlin”+gc.changelanguage(baseContext))
prints“Languagekotlinkotlin.Unit”因为changelanguage
是一个void
函数。@LunarWatcher但您的代码和问题与kotlin语言无关!!因为java中的区域设置代码工作正常。我正在询问与kotlin编程相关的问题。。。!!参考的gist.github是什么?
class CrashApplicationClass : Application() {
val TAG = CrashApplicationClass::class.java.simpleName
lateinit var sDefSystemLanguage: String
val gc = GlobalClass.getInstance()
override fun onCreate() {
// TODO Auto-generated method stub
// ACRA.init(this)
super.onCreate()
instance = this
gc.changelanguage(baseContext)
println("Languagekotlin" + gc.changelanguage(baseContext))
println("kotlininstance" + instance)
// sDefSystemLanguage = Locale.getDefault().language
}
val requestQueue: RequestQueue? = null
get() {
if (field == null) {
return Volley.newRequestQueue(applicationContext)
}
return field
}
fun <T> addToRequestQueue(request: Request<T>, tag: String) {
request.tag = if (TextUtils.isEmpty(tag)) TAG else tag
requestQueue?.add(request)
}
fun <T> addToRequestQueue(request: Request<T>) {
request.tag = TAG
requestQueue?.add(request)
}
fun cancelPendingRequests(tag: Any) {
if (requestQueue != null) {
requestQueue!!.cancelAll(tag)
}
}
companion object {
val TAG = CrashApplicationClass::class.java.simpleName
@get:Synchronized var instance: CrashApplicationClass? = null
private set
}
public String changelanguage(Context context) {
//String lang = "hi_IN";
// Locale locale = new Locale(lang);
Locale locale = Locale.getDefault();
Locale.setDefault(locale);
System.out.println("GlobalLocale" +locale.toString());
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
return locale.toString();
}