2017-09-15 2 views
-1

Je travaille sur le langage Kotlin dans mon application et face à des difficultés concernant les paramètres régionaux Changing. Comme je l'ai fait j'ai créé une classe globale i.e sur java et sur cette classe j'ai écrit le code de la langue change le code de locale et cette fonction de code de langue que j'appelle à la classe d'application de base de mon projet qui est dans Kotlin.Langue Locale de changement dans "Kotlin" Programmation Comme locale fonctionne en Java Fine mais en langue Kotlin ne fonctionne pas

Voici mon code source:

classe mondiale (code Java)

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

} 

base Code de classe d'application: (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 
} 

}

Comme ce qui se passe dans le code ici, j'ai des journaux d'impression dans la classe Java journal la langue obtient correctement: System.out.println ("GlobalLocale" + locale.toString());

mais journal de classe CrashApplication: println ("Languagekotlin" + gc.changelanguage (baseContext)) -> je reçois "Kotlin.Unit" Et aussi la langue ne change pas obtenir locale appropriée en java mais ne pas savoir Kotlin classe ne reçoit pas il retourne "Kotlin.Unit"

Et aussi sur Manifest j'ai mis: android: configChanges = "locale" Quelqu'un a une idée sur le changement de langue dans Kotlin. Part Plz.

+0

Copie possible de [Modifier la langue par programme sous Android] (https://stackoverflow.com/questions/2900023/change-language-programmatically-in-android) – Zoe

+0

J'ai voté pour la fermeture en tant que doublon car le code est exactement la même chose. La seule différence entre Java et Kotlin est la syntaxe. Vous pouvez utiliser les mêmes méthodes (et vous devez utiliser les mêmes méthodes) et les mêmes techniques. java et Kotlin utilisent les mêmes méthodes lors de l'exécution du framework Android, la seule différence est la syntaxe (et la sécurité nulle, mais en termes de code lui-même) – Zoe

+0

'println (" Languagekotlin "+ gc.changelanguage (baseContext))' affiche "Languagekotlinkotlin .Unit "parce que' changelanguage' est une fonction 'void'. – marstran

Répondre

1

J'ai résolu ce problème dans Kotlin Langue maintenant les changements linguistiques en améliorant cette fonction

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

et résolu mon erreur Kotlin.unit et @marstran merci de me donner indice sur ma question où je suis aller mal. maintenant le problème a été résolu à Kotlin.

@LunarWatcher avant de procéder à un vote négatif, veuillez lire attentivement la question. Maintenant, votez simplement, faites un vote positif.