Android में रनटाइम भाषा परिवर्तन (Locale बदलना)
यह उदाहरण दर्शाता है कि Spinnner से भाषा चुनकर ऐप की भाषा को रनटाइम पर कैसे बदला जाए, बिना ऐप रीस्टार्ट किए (एक्टिविटी रीक्रिएट करके)।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें।
चरण 2: स्ट्रिंग रिसोर्स फ़ाइलें बनाएं
डिफ़ॉल्ट (res/values/strings.xml)
<resources>
<string name="app_name">Language Demo</string>
<string name="thank_you">Thank you</string>
<string name="select_language">Select Language</string>
</resources>
हिंदी (res/values-hi/strings.xml)
<resources>
<string name="app_name">भाषा डेमो</string>
<string name="thank_you">धन्यवाद</string>
<string name="select_language">भाषा चुनें</string>
</resources>
स्पेनिश (res/values-es/strings.xml)
<resources>
<string name="app_name">Demo de Idioma</string>
<string name="thank_you">Gracias</string>
<string name="select_language">Seleccionar Idioma</string>
</resources>
फ्रेंच (res/values-fr/strings.xml)
<resources>
<string name="app_name">Démo de Langue</string>
<string name="thank_you">Merci</string>
<string name="select_language">Sélectionner la langue</string>
</resources>
चरण 3: लेआउट फ़ाइल (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/spinner"
android:layout_centerHorizontal="true"
android:layout_marginTop="32dp"
android:text="@string/thank_you"
android:textSize="28sp"
android:textStyle="bold" />
</RelativeLayout>
चरण 4: MainActivity (src/MainActivity.java)
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private Spinner spinner;
private String currentLanguage = "en";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// सेव की गई भाषा से Locale सेट करें (SharedPreferences से)
// यहां सरलता के लिए डिफ़ॉल्ट उपयोग कर रहे हैं
spinner = findViewById(R.id.spinner);
// भाषा सूची
List languages = new ArrayList<>();
languages.add(getString(R.string.select_language));
languages.add("English");
languages.add("Español");
languages.add("Français");
languages.add("हिंदी");
ArrayAdapter adapter = new ArrayAdapter<>(
this, android.R.layout.simple_spinner_dropdown_item, languages);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> parent, View view, int position, long id) {
if (position == 0) return; // "Select Language" प्लेसहोल्डर
String localeCode;
switch (position) {
case 1: localeCode = "en"; break;
case 2: localeCode = "es"; break;
case 3: localeCode = "fr"; break;
case 4: localeCode = "hi"; break;
default: return;
}
if (!localeCode.equals(currentLanguage)) {
setLocale(localeCode);
} else {
Toast.makeText(MainActivity.this, "यही भाषा पहले से चुनी है", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onNothingSelected(AdapterView> parent) {}
});
}
private void setLocale(String localeCode) {
Locale locale = new Locale(localeCode);
Locale.setDefault(locale);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
conf.setLocale(locale);
} else {
conf.locale = locale;
}
res.updateConfiguration(conf, dm);
// वर्तमान भाषा सेव करें
currentLanguage = localeCode;
// एक्टिविटी रीस्टार्ट करें नई भाषा लागू करने के लिए
Intent refresh = new Intent(this, MainActivity.class);
refresh.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(refresh);
finish();
}
@Override
public void onBackPressed() {
// बैक प्रेस पर ऐप से बाहर निकलें
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
System.exit(0);
}
}
Android 7.0+ (API 24+) के लिए बेहतर तरीका: attachBaseContext
@Override
protected void attachBaseContext(Context newBase) {
String savedLang = getSharedPreferences("settings", MODE_PRIVATE)
.getString("language", "en");
Locale locale = new Locale(savedLang);
Locale.setDefault(locale);
Configuration config = newBase.getResources().getConfiguration();
config.setLocale(locale);
super.attachBaseContext(newBase.createConfigurationContext(config));
}
SharedPreferences में सेव करें और attachBaseContext() में लागू करें, ताकि ऐप रीस्टार्ट पर भी भाषा बनी रहे। ऊपर का उदाहरण सरलता के लिए इंटेंट एक्स्ट्रा उपयोग करता है।
चरण 5: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
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>
</intent-filter>
</activity>
</application>
</manifest>
ऐप चलाएं
ऐप लॉन्च करें, स्पिनर से भाषा चुनें, और टेक्स्ट तुरंत चुनी गई भाषा में बदलते देखें।

