Alex Pop
Alex Pop

Reputation: 153

Android: Drawer items doesnt change title when language is changed

I implemented some string resources for english and romanian. Switching the locale works fine for text fields, but the titles for the drawer items doesnt change when language is changed.

I have the following configuration:

Setting the locale to "ro" in MainActivity

    private fun setDefaultLocale(lang: String) {
        val config = android.content.res.Configuration(resources.configuration)
        val locale = Locale(lang)
        Locale.setDefault(locale)
        config.setLocale(locale)
        config.setLayoutDirection(locale)

        resources.updateConfiguration(config, resources.displayMetrics)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
        setDefaultLocale("ro")
..... 
}

Menu resources:

<group android:checkableBehavior="single">
    <item
        android:icon="@drawable/ic_baseline_home_24"
        android:id="@+id/home"
        android:title="@string/menu_home" />

    <item
        android:icon="@drawable/ic_baseline_wallpaper_24"
        android:id="@+id/news"
        android:title="@string/menu_news" />

    <item
        android:icon="@drawable/ic_jungle"
        android:id="@+id/jungleTimer"
        android:title="@string/menu_timer" />

    <item
        android:icon="@drawable/ic_damage"
        android:id="@+id/builds"
        android:title="@string/menu_builds" />

    <item
        android:icon="@drawable/ic_baseline_settings_24"
        android:id="@+id/settings"
        android:title="@string/menu_settings" />

    <item
        android:icon="@drawable/ic_baseline_info_24"
        android:id="@+id/about"
        android:title="@string/menu_about" />

    <item
        android:icon="@drawable/ic_feedback"
        android:id="@+id/feedback"
        android:title="@string/menu_feedback" />

    <item
        android:icon="@drawable/ic_favorite"
        android:id="@+id/rateapp"
        android:title="@string/menu_rate" />
</group>

Default string xml file:

/* Menu translations */
<string name="menu_home">Home</string>
<string name="menu_news">News</string>
<string name="menu_timer">Jungle Timers</string>
<string name="menu_builds">Guides</string>
<string name="menu_settings">Settings</string>
<string name="menu_about">About</string>
<string name="menu_feedback">Feedback</string>
<string name="menu_rate">Rate the app</string>

Romanian strings xml file

/* Menu translations */
<string name="menu_home">Acasă</string>
<string name="menu_news">Noutăți</string>
<string name="menu_timer">Cronometru Junglă</string>
<string name="menu_builds">Ghid Campioni</string>
<string name="menu_settings">Setări</string>
<string name="menu_about">Despre</string>
<string name="menu_feedback">Feedback</string>
<string name="menu_rate">Dă-ne o notă</string>

Upvotes: 0

Views: 379

Answers (1)

qki
qki

Reputation: 1929

Updating configuration will not restart your activity, so Drawer will not know that you changed locale on the device thus not changing the texts. If you change your language in system settings it should work.

I propose recreating the activity after you change your configuration programmatically, for example with activity?.recreate() method

Upvotes: 1

Related Questions