Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में उपयोगकर्ता चयन पर ऐप भाषा कैसे बदलें?

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>

ऐप चलाएं

ऐप लॉन्च करें, स्पिनर से भाषा चुनें, और टेक्स्ट तुरंत चुनी गई भाषा में बदलते देखें।

Android में उपयोगकर्ता चयन पर ऐप भाषा कैसे बदलें?

Android में उपयोगकर्ता चयन पर ऐप भाषा कैसे बदलें?

  1. एंड्रॉइड में फ्रैगमेंट से एक्टिविटी का मेथड कैसे कॉल करें एंड्रॉइड में फ्रैगमेंट से एक्टिविटी का मेथड कैसे कॉल करें

    फ्रैगमेंट से होस्ट एक्टिविटी के पब्लिक मेथड को कॉल करने के तरीके एंड्रॉइड में फ्रैगमेंट अपनी होस्ट एक्टिविटी के साथ getActivity() के माध्यम से संवाद कर सकता है। एक्टिविटी के पब्लिक मेथड को कॉल करने के लिए फ्रैगमेंट को एक्टिविटी को उपयुक्त टाइप में कास्ट करना होता है। यह पैटर्न फ्रैगमेंट-एक्टिविटी सं

  1. Android में 5 सेकंड यूजर इनएक्टिविटी कैसे डिटेक्ट करें? Android में 5 सेकंड यूजर इनएक्टिविटी कैसे डिटेक्ट करें?

    यह उदाहरण दर्शाता है कि Handler और onUserInteraction() का उपयोग करके Android में यूजर इनएक्टिविटी (कोई टच/की इवेंट नहीं) को कैसे डिटेक्ट किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-

  1. एंड्रॉइड ऐप आइकन कस्टमाइज़ करना: एक सरल चरण-दर-चरण गाइड एंड्रॉइड ऐप आइकन कस्टमाइज़ करना: एक सरल चरण-दर-चरण गाइड

    Android ऑपरेटिंग सिस्टम के बारे में सबसे अच्छी बात यह है कि यह अत्यधिक कस्टमाइज़ेबल है। उन ऐप्स से जिन्हें आप अपने डिवाइस पर रखना चुनते हैं, समग्र इंटरफ़ेस, ट्रांज़िशन, सामान्य उपस्थिति, और यहां तक कि आइकन तक, सब कुछ बदला जा सकता है। यदि आप अपने फोन के वर्तमान लुक से ऊब महसूस कर रहे हैं, तो आगे बढ़े