Ich arbeite an Kotlin Sprache in meiner Anwendung und mit einigen Schwierigkeiten in Bezug auf Changing Locale. Als das, was ich habe, habe ich eine globale Klasse erstellt, d. H. Auf Java, und auf dieser Klasse habe ich den Code des Sprachänderungs-Gebietscode geschrieben und die Sprachcode-Funktion, die ich zur Basis-Anwendungsklasse meines Projekts in Kotlin aufruft.Sprache Gebietsschema in "Kotlin" Programmieren Als Locale funktioniert in Java Fein aber in Kotlin Sprache funktioniert nicht
Hier ist meine Quellcode:
Globale Klasse (Java-Code)
public void changelanguage(Context context) {
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());
}
Basisanwendungsklasse Code: (Kotlin)
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
}
}
Als was los In Code hier habe ich print logs in Java-Klasse log die Sprache richtig bekommt: System.out.println ("GlobalLocale" + locale.toString());
aber auf CrashApplication Klasse log: println ("Languagekotlin" + gc.changelanguage (baseContext)) -> ich bin immer "Kotlin.Unit" Und auch nicht verändert Sprache richtige locale in Java bekommen, aber nicht weiß Kotlin Klasse bekommt es nicht zurück "Kotlin.Unit"
Und auch auf Manifest habe ich eingestellt: android: configChanges = "locale" Jeder hat eine Idee über Sprachwechsel in Kotlin. PLZ teilen.
Mögliche Duplikate von [Sprache programmgesteuert in Android ändern] (https://stackoverflow.com/questions/2900023/change-language-programmatical-in-android) – Zoe
Ich habe gewählt, um dies als ein Duplikat zu schließen, weil der Code ist genau das gleiche. Der einzige Unterschied zwischen Java und Kotlin ist die Syntax. Sie können die gleichen Methoden (und Sie müssen die gleichen Methoden verwenden) und die gleichen Techniken verwenden. Java und Kotlin verwenden die gleichen Methoden, wenn sie das Android-Framework ausführen, der einzige Unterschied ist die Syntax (und null Sicherheit, aber in Bezug auf den Code selbst) – Zoe
'println (" Languagekotlin "+ gc.changelanguage (baseContext))" druckt "Languagekotlinkotlin .Unit "weil' changelangue' eine 'void' Funktion ist. – marstran