Kotlin не может изменить локаль даже после использования BaseActivity - PullRequest
0 голосов
/ 10 апреля 2020

Я пытался изменить свой языковой стандарт в Kotlin, чтобы я мог использовать другой язык в своем приложении. Идея заключается в том, что я говорю на языке урду, а затем вижу текст на урду в своем приложении. Этот язык поддерживается Google.

У меня есть 3 класса: 1. App.kt 2. BaseActivity.kt 3. MainActivity.kt

Я пытаюсь изменить язык с Engli sh на урду. Этот язык поддерживается Google для Speech to Text. ("ur" и "ur-PK")

Файл приложения.

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.youtube">

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

My BaseActivity.kt

   package com.example.youtube

import android.content.res.Configuration
import android.view.ContextThemeWrapper
import androidx.appcompat.app.AppCompatActivity
import java.util.*

open class BaseActivity : AppCompatActivity() {

    companion object {
        public var dLocale: Locale? = null
    }

    init {
        updateConfig(this)
    }

    fun updateConfig(wrapper: ContextThemeWrapper) {
        if(dLocale==Locale("") ) // Do nothing if dLocale is null
            return

        Locale.setDefault(dLocale)
        val configuration = Configuration()
        configuration.setLocale(dLocale)
        wrapper.applyOverrideConfiguration(configuration)
    }
}

MainActivity.kt

   package com.example.youtube

import android.app.Activity
import android.app.Application
import android.content.Intent
import android.content.res.Configuration
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.preference.PreferenceManager
import android.speech.RecognizerIntent
import android.view.ContextThemeWrapper
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
import java.lang.Exception
import java.util.*

class MainActivity : AppCompatActivity() {

    private val REQUEST_CODE_SPEECH_INPUT = 100
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)
        voiceBtn.setOnClickListener {

            speak()
        }
    }

    private fun speak() {
        val mIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
        mIntent.putExtra(
            RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM
        )
        val localee = Locale("ur")
        Locale.setDefault(localee)
        mIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, localee)
        mIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Bolo bhai")

        try {
            startActivityForResult(mIntent, REQUEST_CODE_SPEECH_INPUT)

        } catch (e: Exception) {
            Toast.makeText(this, e.message, Toast.LENGTH_SHORT).show()

        }
    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            REQUEST_CODE_SPEECH_INPUT -> {
                if (resultCode == Activity.RESULT_OK && null != data) {
                    val result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
                    textTv.text = result[0]

                }
            }
        }
    }
}

Файл манифеста

<?xml version="1.0" encoding="utf-8"?>

<application
    android:name=".App"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Когда я запускаю приложение, оно все еще показывает все на английском языке sh:

Снимок экрана приложения:

enter image description here

...