2017-09-15 7 views
-1

내 응용 프로그램에서 kotlin 언어로 작업 중이며 로케일 변경과 관련하여 어려움을 겪고 있습니다. 내가 뭘 가지고 내가 한 세계적인 클래스를 만들었습니다. 즉,이 클래스에서 언어 변경 로캘 코드 및 해당 언어 코드 함수를 작성했습니다. Kotlin에있는 내 프로젝트의 기본 응용 프로그램 클래스를 호출하고 있습니다. 여기 "Kotlin"에서 언어 변경 로케일 프로그래밍 Java Fine에서 작동하지만 Kotlin 언어로 작동하지 않음

내 소스 코드 :

글로벌 클래스 (자바 코드)

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

} 

기본 응용 프로그램 클래스 코드 : (코 틀린)

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 
} 

}

가는 뭐죠로 여기에 코드에서 자바 클래스 로그에 인쇄 로그가 있습니다. 언어는 올바르게 가져옵니다. System.out.println ("GlobalLocale"+ locale.toString());

하지만 CrashApplication 클래스 로그에

: 에 println ("Languagekotlin"+ gc.changelanguage (baseContext)) -> 내가 "Kotlin.Unit"를 얻고있다 또한 언어가 변경되지는 자바에서 적절한 로케일을 받고 있지만,하지 Kotlin 클래스가 "Kotlin.Unit"을 반환하지 않는다는 것을 알 수 있습니다.

또한 Manifest에 다음과 같이 설정했습니다. android : configChanges = "locale" 누구나 Kotlin의 언어 변경에 대한 아이디어가 있습니다. Plz 공유.

+0

가능한 [Android에서 프로그래밍 방식으로 언어 변경] (https://stackoverflow.com/questions/2900023/change-language-programmatically-in-android) – Zoe

+0

코드가 올바르지 않으므로 중복 된 것으로 투표했습니다. 똑같은. Java와 Kotlin의 유일한 차이점은 구문입니다. 동일한 방법을 사용할 수 있으며 동일한 방법을 사용해야하며 동일한 기술을 사용할 수 있습니다. 자바와 코 틀린은 안드로이드 프레임 워크를 실행할 때 같은 방법을 사용한다. 유일한 차이점은 문법 (그리고 null 안전성, 코드 자체에 관해서)이다. – Zoe

+0

'println ("Languagekotlin"+ gc.changelanguage (baseContext))'prints "Languagekotlinkotlin .unit "왜냐하면'changelanguage'는'void' 함수이기 때문입니다. – marstran

답변

1

는 지금이 기능

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 덕분에 해결 잘못되어가는. 이제 문제는 Kotlin에서 해결되었습니다.

@LunarWatcher 부정적인 투표를하기 전에 질문을주의 깊게 읽으십시오. 이제 투표를하고 긍정적 인 투표를하십시오 !!