2017-09-15 2 views
-1

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.

+0

Mögliche Duplikate von [Sprache programmgesteuert in Android ändern] (https://stackoverflow.com/questions/2900023/change-language-programmatical-in-android) – Zoe

+0

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

+0

'println (" Languagekotlin "+ gc.changelanguage (baseContext))" druckt "Languagekotlinkotlin .Unit "weil' changelangue' eine 'void' Funktion ist. – marstran

Antwort

1

Ich habe dieses Problem in Kotlin Sprache nun die Sprachänderungen gelöst durch diese Funktion

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

zu verbessern und es gelöst meinen Kotlin.unit Fehler und @marstran Dank für den mich über meine Frage andeuten, wo ich bin falsch machen. jetzt hat sich das Problem in Kotlin gelöst.

@LunarWatcher vor der negativen Abstimmung Bitte lesen Sie die Frage sorgfältig.! Jetzt nur abstimmen, positiv stimmen !!

Verwandte Themen