Android “中的语言更改区域设置”;科特林“;作为区域设置编程在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

我在应用程序中使用kotlin语言,在更改语言环境方面遇到了一些困难。正如我所做的,我已经创建了一个全局类,即在java上,在这个类上,我编写了语言更改代码、区域设置代码和我正在调用的语言代码函数,该函数用于我的项目的基础应用程序类,它位于Kotlin中

以下是我的源代码:

全局类(Java代码)

基本应用程序类代码:(Kotlin)

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();
}