Я пытался изменить свой языковой стандарт в 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:
Снимок экрана приложения: